| | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.Comparator; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | |
| | | List<CouponRecordDO> couponUsageDOList = couponTemplateCustomerDOList.stream().map(pointCustomRe -> { |
| | | |
| | | CouponRecordDO couponRecordDO = new CouponRecordDO(); |
| | | |
| | | couponRecordDO.setId(IdUtil.simpleUUID()); |
| | | couponRecordDO.setCouponId(pointCustomRe.getCouponId()); |
| | | couponRecordDO.setCustomerId(pointCustomRe.getCustomId()); |
| | |
| | | couponRecordDO.setCouponDiscountType(couponTemplateDO.getCouponDiscountType()); |
| | | couponRecordDO.setGetUserType(couponTemplateDO.getGetUserType()); |
| | | couponRecordDO.setPoint(couponTemplateDO.getPoint()); |
| | | couponRecordDO.setMemberId(couponRecordDO.getMemberId()); |
| | | couponRecordDO.setMemberId(couponTemplateDO.getMemberId()); |
| | | couponRecordDO.setImageUrl(couponTemplateDO.getImageUrl()); |
| | | couponRecordDO.setCouponDescription(couponTemplateDO.getCouponDescription()); |
| | | |
| | | // 创建相关信息 |
| | | couponRecordDO.create(SecurityUtils.getUserId()); |
| | |
| | | if(couponTemplateDO==null){ |
| | | throw new ValidationException("优惠券不存在"); |
| | | } |
| | | |
| | | if(couponTemplateDO.getCouponAmount()<=0 ){ |
| | | throw new ValidationException("优惠券已兑换完"); |
| | | } |
| | | CustomerPoint cp = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>() |
| | | .eq(CustomerPoint::getUserId, SecurityUtils.getUserId())); |
| | | if(cp == null || (cp.getTotalPoint()-cp.getUsedPoint()-cp.getExpiredPoint()- cp.getExpiredPoint()) < couponTemplateDO.getPoint() * dto.getNum()){ |
| | |
| | | recordDTO.setCustomerId(customer.getId()); |
| | | couponRecordService.createCouponRecord(recordDTO); |
| | | |
| | | // //更新优惠券数量 |
| | | // couponTemplateDO.setCouponAmount(couponTemplateDO.getCouponAmount()-dto.getNum()); |
| | | // couponTemplateService.updateById(couponTemplateDO); |
| | | |
| | | //更新积分汇总 |
| | | cp.setUsedPoint(cp.getUsedPoint()+couponTemplateDO.getPoint()); |
| | | customerPointMapper.updateById(cp); |
| | |
| | | detail.setRemarks(couponTemplateDO.getCouponName()); |
| | | detail.create(SecurityUtils.getUserId()); |
| | | customerPointDetailMapper.insert(detail); |
| | | }catch (Exception e){ |
| | | throw new ValidationException("兑换失败"); |
| | | }finally { |
| | | lockService.releaseObjectLock(key,""); |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto) { |
| | | public boolean expireActivityCouponTemplateAll() { |
| | | |
| | | return couponTemplateMapperCustom.getActivityEffectList(dto); |
| | | return couponTemplateMapperCustom.expireActivityCouponTemplateAll()>0; |
| | | } |
| | | |
| | | @Override |
| | | public List<CouponTemplateVO> getActivityEffectListWithMine(QueryActivityEffectCouponDTO dto) { |
| | | // 1.点击领取,优惠券状态变成灰色+已领取(根据web端优惠券限领次数判断) |
| | | //2.把已领取的优惠券按照领取时间排列到最下面 |
| | | List<CouponTemplateVO> list= couponTemplateMapperCustom.getActivityEffectListWithMine(dto); |
| | | |
| | | // 将列表分为已经领取和未领取的,根据getYetFlag来判断,下面的所有操作都要判空 |
| | | if(CollectionUtils.isNotEmpty(list)){ |
| | | // 遍历列表,查看当前的优惠券是否已经达到领取次数,如果是则为true,不是为false |
| | | list.forEach(item->{ |
| | | if (item != null) { |
| | | item.setGetYetFlag(false); |
| | | if (null != item.getGetNum() && null != item.getGetLimit() && item.getGetNum() >= item.getGetLimit()) { |
| | | item.setGetYetFlag(true); |
| | | } |
| | | } |
| | | }); |
| | | List<CouponTemplateVO> getYetList = list.stream().filter(item->item.getGetYetFlag()).collect(Collectors.toList()); |
| | | List<CouponTemplateVO> getNotYetList = list.stream().filter(item->!item.getGetYetFlag()).collect(Collectors.toList()); |
| | | list.clear(); |
| | | if(CollectionUtils.isNotEmpty(getNotYetList)){ |
| | | // 将未领取的根据create_time 倒序排序 |
| | | getNotYetList.sort(Comparator.comparing(CouponTemplateVO::getCreateTime).reversed()); |
| | | // 将未领取和已领取的合并成新list返回 |
| | | list.addAll(getNotYetList); |
| | | } |
| | | if(CollectionUtils.isNotEmpty(getYetList)){ |
| | | // 将已经领取的根据recordCreateTime 时间正序排 |
| | | getYetList.sort(Comparator.comparing(CouponTemplateVO::getRecordCreateTime)); |
| | | list.addAll(getYetList); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | @Override |
| | | public List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto) { |
| | | return couponTemplateMapperCustom.getActivityEffectListWithMine(dto); |
| | | } |
| | | |
| | | } |