From 1772afb069b75871572c9c438bbd2bc403f864df Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期三, 13 十二月 2023 11:43:51 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java | 282 +++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 219 insertions(+), 63 deletions(-) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java index 4205722..7f5be8b 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java @@ -19,11 +19,11 @@ import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.poji.activity.Activity; import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.domain.poji.member.MemberCoupon; -import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo; import com.ruoyi.system.api.service.RemoteActivityService; @@ -32,6 +32,7 @@ import com.ruoyi.system.api.service.RemoteShopService; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; @@ -111,6 +112,7 @@ BigDecimal discountPercent; String useLimit = ""; for(MgtCouponPageVo mgtCouponPageVo : mgtCouponPageVoList){ + useLimit = null; //处理使用限制 couponType = mgtCouponPageVo.getCouponType(); if(couponType.equals("满减")){ @@ -119,11 +121,10 @@ useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元"; } if(couponType.equals("折扣")){ - moneyThreshold = mgtCouponPageVo.getMoneyThreshold(); discountPercent = mgtCouponPageVo.getDiscountPercent(); useLimit = discountPercent.toString() + "折"; } - if(couponType.equals("抵扣")){ + if(couponType.equals("代金")){ discountMoney = mgtCouponPageVo.getDiscountMoney(); useLimit = discountMoney.toString(); } @@ -133,7 +134,7 @@ if(validTimeType==1){ validStartTime = mgtCouponPageVo.getValidStartTime(); validEndTime = mgtCouponPageVo.getValidEndTime(); - validTime = DateUtils.dateTime(validStartTime) + '-' + DateUtils.dateTime(validEndTime); + validTime = DateUtils.parseDateToStr("yyyy-MM-dd",validStartTime) + '-' + DateUtils.parseDateToStr("yyyy-MM-dd",validEndTime); }else if(validTimeType==2){ validDay = mgtCouponPageVo.getValidDay(); validTime = "领取之日起" + validDay.toString() + "天"; @@ -202,6 +203,14 @@ List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId()); mgtCouponGetVo.setRelUserList(relUserList); } + //获取活动名称 + if(coupon.getSendTarget()==5&&coupon.getRelationType()==2){ + Activity activity = remoteActivityService.getActivity(coupon.getRelationActivityId()).getData(); + mgtCouponGetVo.setRelationActivityName(activity.getActivityName()); + } + if(mgtCouponGetVo.getSendLimitFlag()==0){ + mgtCouponGetVo.setSendLimitNumber(null); + } return mgtCouponGetVo; } @@ -209,20 +218,23 @@ * @description 平台获取优惠券编辑信息 * @author jqs * @date 2023/6/13 14:29 - * @param couponId + * @param merBaseGetDto * @return MgtCouponGetVo */ @Override - public MerCouponGetVo getMerCouponVo(String couponId){ + public MerCouponGetVo getMerCouponVo(MerBaseGetDto merBaseGetDto){ MerCouponGetVo merCouponGetVo = new MerCouponGetVo(); - Coupon coupon = this.getById(couponId); + Coupon coupon = this.getById(merBaseGetDto.getId()); BeanUtils.copyProperties(coupon, merCouponGetVo); //判断优惠券是否为指定商品 if(coupon.getUseScope()==2){ String relGoodsIds = coupon.getRelGoodsIds(); if(StringUtils.isNotBlank(relGoodsIds)){ //获取指定商品列表 - List<MerGoodsPriceListVo> goodsList = remoteGoodsService.listGoodsPriceByGoodsId(relGoodsIds).getData(); + MerGoodsPriceListDto merGoodsPriceListDto = new MerGoodsPriceListDto(); + merGoodsPriceListDto.setGoodsIds(relGoodsIds); + merGoodsPriceListDto.setShopId(merBaseGetDto.getShopId()); + List<MerGoodsPriceListVo> goodsList = remoteGoodsService.listGoodsPriceByGoodsId(merGoodsPriceListDto).getData(); if(goodsList!=null&&!goodsList.isEmpty()){ merCouponGetVo.setRelGoodsList(goodsList); } @@ -233,6 +245,9 @@ //获取优惠券发放用户 List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId()); merCouponGetVo.setRelUserList(relUserList); + } + if(merCouponGetVo.getSendLimitFlag()==0){ + merCouponGetVo.setSendLimitNumber(null); } return merCouponGetVo; } @@ -267,7 +282,7 @@ coupon.setCreateUserId(mgtCouponEditDto.getUserId()); coupon.setCouponFrom(1); coupon.setAuditStatus(2); - coupon.setLimitNumber(0); + coupon.setLimitNumber(1); coupon.setSendFlag(0); //创建优惠券统计 couponTotal = new CouponTotal(); @@ -296,6 +311,18 @@ coupon.setRelationType(mgtCouponEditDto.getRelationType()); coupon.setRelationActivityType(mgtCouponEditDto.getRelationActivityType()); coupon.setRelationActivityId(mgtCouponEditDto.getRelationActivityId()); + coupon.setPropagandaPoster(mgtCouponEditDto.getPropagandaPoster()); + //指定发放优惠券不做发放数限制 + if(coupon.getSendType()==2){ + mgtCouponEditDto.setSendLimitFlag(0); + } + coupon.setSendLimitFlag(mgtCouponEditDto.getSendLimitFlag()); + if(mgtCouponEditDto.getSendLimitFlag()==1){ + coupon.setSendLimitNumber(mgtCouponEditDto.getSendLimitNumber()); + }else{ + coupon.setSendLimitNumber(0); + } + coupon.setLimitNumber(mgtCouponEditDto.getLimitNumber()); //判断是否指定商品 if(coupon.getUseScope()==2&&!mgtCouponEditDto.getRelGoodsIdList().isEmpty()){ List<String> relGoodsIdList = mgtCouponEditDto.getRelGoodsIdList(); @@ -394,23 +421,32 @@ memberCoupon.setUserId(userId); memberCoupon.setShopId(coupon.getShopId()); memberCoupon.setCouponType(coupon.getCouponType()); + if(coupon.getCouponType()==1){ + memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else if(coupon.getCouponType()==2){ + memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); + }else if(coupon.getCouponType()==3){ + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else{ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setCouponStatus(coupon.getCouponStatus()); memberCoupon.setCouponName(coupon.getCouponName()); memberCoupon.setSendType(coupon.getSendType()); memberCoupon.setSendTarget(coupon.getSendTarget()); memberCoupon.setSendTimeType(coupon.getSendTimeType()); memberCoupon.setSendTime(coupon.getSendTime()); - memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); - memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); - memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); memberCoupon.setUseScope(coupon.getUseScope()); + if(memberCoupon.getUseScope()==2){ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setValidTimeType(coupon.getValidTimeType()); memberCoupon.setValidStartTime(coupon.getValidStartTime()); memberCoupon.setValidEndTime(coupon.getValidEndTime()); memberCoupon.setValidDay(coupon.getValidDay()); memberCoupon.setCouponFrom(coupon.getCouponFrom()); memberCoupon.setReceiveTime(nowTime); - memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); //有效期处理1.时间段2.领取之日起 if(coupon.getValidTimeType()==1){ memberCoupon.setDeadlineTime(coupon.getValidEndTime()); @@ -435,25 +471,34 @@ memberCoupon.setDelFlag(0); memberCoupon.setCouponId(coupon.getCouponId()); memberCoupon.setUserId(userId); - memberCoupon.setShopId(coupon.getShopId()); + //memberCoupon.setShopId(coupon.getShopId()); memberCoupon.setCouponType(coupon.getCouponType()); + if(coupon.getCouponType()==1){ + memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else if(coupon.getCouponType()==2){ + memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); + }else if(coupon.getCouponType()==3){ + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else{ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setCouponStatus(coupon.getCouponStatus()); memberCoupon.setCouponName(coupon.getCouponName()); memberCoupon.setSendType(coupon.getSendType()); memberCoupon.setSendTarget(coupon.getSendTarget()); memberCoupon.setSendTimeType(coupon.getSendTimeType()); memberCoupon.setSendTime(coupon.getSendTime()); - memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); - memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); - memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); memberCoupon.setUseScope(coupon.getUseScope()); + if(memberCoupon.getUseScope()==2){ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setValidTimeType(coupon.getValidTimeType()); memberCoupon.setValidStartTime(coupon.getValidStartTime()); memberCoupon.setValidEndTime(coupon.getValidEndTime()); memberCoupon.setValidDay(coupon.getValidDay()); memberCoupon.setCouponFrom(coupon.getCouponFrom()); memberCoupon.setReceiveTime(nowTime); - memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); //有效期处理1.时间段2.领取之日起 if(coupon.getValidTimeType()==1){ memberCoupon.setDeadlineTime(coupon.getValidEndTime()); @@ -522,25 +567,36 @@ memberCoupon.setDelFlag(0); memberCoupon.setCouponId(coupon.getCouponId()); memberCoupon.setUserId(userId); - memberCoupon.setShopId(coupon.getShopId()); + if(coupon.getCouponFrom()==2){ + memberCoupon.setShopId(coupon.getShopId()); + } memberCoupon.setCouponType(coupon.getCouponType()); memberCoupon.setCouponStatus(coupon.getCouponStatus()); memberCoupon.setCouponName(coupon.getCouponName()); memberCoupon.setSendType(coupon.getSendType()); + if(coupon.getCouponType()==1){ + memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else if(coupon.getCouponType()==2){ + memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); + }else if(coupon.getCouponType()==3){ + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else{ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setSendTarget(coupon.getSendTarget()); memberCoupon.setSendTimeType(coupon.getSendTimeType()); memberCoupon.setSendTime(coupon.getSendTime()); - memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); - memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); - memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); memberCoupon.setUseScope(coupon.getUseScope()); + if(memberCoupon.getUseScope()==2){ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setValidTimeType(coupon.getValidTimeType()); memberCoupon.setValidStartTime(coupon.getValidStartTime()); memberCoupon.setValidEndTime(coupon.getValidEndTime()); memberCoupon.setValidDay(coupon.getValidDay()); memberCoupon.setCouponFrom(coupon.getCouponFrom()); memberCoupon.setReceiveTime(nowTime); - memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); //有效期处理1.时间段2.领取之日起 if(coupon.getValidTimeType()==1){ memberCoupon.setDeadlineTime(coupon.getValidEndTime()); @@ -694,7 +750,7 @@ if(validTimeType==1){ validStartTime = mgtCouponAuditPageVo.getValidStartTime(); validEndTime = mgtCouponAuditPageVo.getValidEndTime(); - validTime = DateUtils.dateTime(validStartTime) + '-' + DateUtils.dateTime(validEndTime); + validTime = DateUtils.parseDateToStr("yyyy-MM-dd",validStartTime) + '-' + DateUtils.parseDateToStr("yyyy-MM-dd",validEndTime); }else if(validTimeType==2){ validDay = mgtCouponAuditPageVo.getValidDay(); validTime = "领取之日起" + validDay.toString() + "天"; @@ -712,7 +768,10 @@ .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); for(MgtCouponAuditPageVo mgtCouponAuditPageVo : mgtCouponAuditPageVoList){ if(mgtCouponAuditPageVo.getShopId()!=null){ - mgtCouponAuditPageVo.setShopName(shopMap.get(mgtCouponAuditPageVo.getShopId()).getShopName()); + MgtSimpleShopVo mgtSimpleShopVo = shopMap.get(mgtCouponAuditPageVo.getShopId()); + if(null != mgtSimpleShopVo){ + mgtCouponAuditPageVo.setShopName(mgtSimpleShopVo.getShopName()); + } } } } @@ -952,6 +1011,7 @@ couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId()); coupon.setCouponStatus(1); }else{ + //初始化新优惠券 coupon = new Coupon(); String couponId = IdUtils.simpleUUID(); coupon.setCouponId(couponId); @@ -992,6 +1052,16 @@ coupon.setUpdateUserId(merCouponEditDto.getUserId()); coupon.setRelationType(1); coupon.setPropagandaPoster(merCouponEditDto.getPropagandaPoster()); + //指定发放优惠券不做发放数限制 + if(coupon.getSendType()==2){ + merCouponEditDto.setSendLimitFlag(0); + } + coupon.setSendLimitFlag(merCouponEditDto.getSendLimitFlag()); + if(merCouponEditDto.getSendLimitFlag()==1){ + coupon.setSendLimitNumber(merCouponEditDto.getSendLimitNumber()); + }else{ + coupon.setSendLimitNumber(0); + } //判断是否指定商品 if(coupon.getUseScope()==2&&!merCouponEditDto.getRelGoodsIdList().isEmpty()){ List<String> relGoodsIdList = merCouponEditDto.getRelGoodsIdList(); @@ -1055,16 +1125,27 @@ */ @Override public void sendCouponGift(List<BirthdayGiftSendDto> giftSendDtoList){ + // 获取第一个用户和商店的ID Long userId = giftSendDtoList.get(0).getUserId(); Long shopId = giftSendDtoList.get(0).getShopId(); + + // 初始化变量 String couponId; Coupon coupon; List<MemberCoupon> memberCouponList = new ArrayList<>(); MemberCoupon memberCoupon; String memberCouponId; + + // 遍历生日礼物发送DTO列表 for(BirthdayGiftSendDto birthdayGiftSendDto : giftSendDtoList){ + // 获取优惠券ID并查询优惠券信息 couponId = birthdayGiftSendDto.getCouponId(); coupon = this.getById(couponId); + // 判断优惠券是否存在或已失效 + if(coupon==null||coupon.getCouponStatus()!=1){ + throw new ServiceException(AppErrorConstant.COUPON_GET_ERROR); + } + // 根据优惠券数量生成会员优惠券列表 for(int i=0;i<birthdayGiftSendDto.getCouponNumber();i++){ memberCoupon = new MemberCoupon(); memberCouponId = IdUtils.simpleUUID(); @@ -1073,34 +1154,46 @@ memberCoupon.setCouponId(couponId); memberCoupon.setUserId(userId); memberCoupon.setShopId(shopId); - memberCoupon.setCouponType(coupon.getCouponType()); + // 根据优惠券类型设置会员优惠券信息 + if(coupon.getCouponType()==1){ + memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else if(coupon.getCouponType()==2){ + memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); + }else if(coupon.getCouponType()==3){ + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else{ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setCouponStatus(coupon.getCouponStatus()); memberCoupon.setCouponName(coupon.getCouponName()); memberCoupon.setSendType(coupon.getSendType()); memberCoupon.setSendTarget(coupon.getSendTarget()); memberCoupon.setSendTimeType(coupon.getSendTimeType()); memberCoupon.setSendTime(coupon.getSendTime()); - memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); - memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); - memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); memberCoupon.setUseScope(coupon.getUseScope()); + // 如果优惠券适用范围为指定商品,则设置关联商品ID + if(memberCoupon.getUseScope()==2){ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setValidTimeType(coupon.getValidTimeType()); memberCoupon.setValidStartTime(coupon.getValidStartTime()); memberCoupon.setValidEndTime(coupon.getValidEndTime()); memberCoupon.setValidDay(coupon.getValidDay()); memberCoupon.setCouponFrom(coupon.getCouponFrom()); memberCoupon.setReceiveTime(new Date()); - //有效期处理1.时间段2.领取之日起 + // 根据有效期类型设置会员优惠券的截止时间 if(coupon.getValidTimeType()==1){ memberCoupon.setDeadlineTime(coupon.getValidEndTime()); }else if(coupon.getValidTimeType()==2){ memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(),coupon.getValidDay())); } - memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); memberCouponList.add(memberCoupon); } + // 更新会员优惠券记录 memberCouponRecordService.updateMemberCouponRecord(coupon,userId,birthdayGiftSendDto.getCouponNumber()); } + // 批量保存会员优惠券列表 memberCouponService.saveBatch(memberCouponList); } @@ -1114,41 +1207,82 @@ */ @Override public List<AppGetAbleCouponPageVo> pageAppUserGetAbleCoupon(Page page, AppPageDto appPageDto, Member member){ + //获取用户当前已领取完优惠券 + List<String> unUserGetList = couponMapper.listUserUnGetCoupon(appPageDto.getUserId()); //获取当前已领取完优惠券 - List<String> unGetList = couponMapper.listUserUnGetCoupon(appPageDto.getUserId()); + List<String> unGetList = couponMapper.listUnGetCoupon(); + //合并不可领取优惠券列表 + HashSet<String> mergedList = new HashSet<>(); + mergedList.addAll(unUserGetList); + mergedList.addAll(unGetList); + unGetList = new ArrayList<>(mergedList); List<AppGetAbleCouponPageVo> getAbleCouponPageVoList = couponMapper.getAbleCouponPageVoList(page, member.getRelationShopId(),member.getUserId(),member.getBindingFlag(), unGetList); //处理商品限制 if(!getAbleCouponPageVoList.isEmpty()){ String relGoodsIds; - List<Goods> goodsList; - List<String> goodsLimitList = null; - Shop shop = null; - for(AppGetAbleCouponPageVo appGetAbleCouponPageVo : getAbleCouponPageVoList){ - relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds(); - if(StringUtils.isNotBlank(relGoodsIds)){ - goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData(); - if(goodsList!=null&&!goodsList.isEmpty()){ - goodsLimitList = goodsList.stream().map(goods -> { - String goodsName = goods.getGoodsName(); - goodsName = "限制" + goodsName + "适用"; - return goodsName; - }).collect(Collectors.toList()); - } - }else{ - goodsLimitList = new ArrayList<>(); - if(appGetAbleCouponPageVo.getShopId()!=null){ - if(shop!=null&&shop.getShopId().equals(appGetAbleCouponPageVo.getShopId())){ - }else{ - shop = remoteShopService.getShop(appGetAbleCouponPageVo.getShopId()).getData(); - } - goodsLimitList.add(shop.getShopName()+"通用"); - }else{ - goodsLimitList.add("全场通用"); + HashSet<Long> shopIdSet = new HashSet<>(); + HashSet<String> goodsIdSet = new HashSet<>(); + String[] goodsIdArr; + for(AppGetAbleCouponPageVo getAbleCouponPageVo : getAbleCouponPageVoList){ + if(getAbleCouponPageVo.getShopId()!=null){ + shopIdSet.add(getAbleCouponPageVo.getShopId()); + } + if(StringUtils.isNotBlank(getAbleCouponPageVo.getRelGoodsIds())){ + relGoodsIds = getAbleCouponPageVo.getRelGoodsIds(); + goodsIdArr = relGoodsIds.split(","); + for(String str : goodsIdArr){ + goodsIdSet.add(str); } } - appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList); } - + //获取关联商户和商品信息并转换为Map + String shopJoinedString; + Map<Long, MgtSimpleShopVo> shopMap = null; + if(shopIdSet!=null&&!shopIdSet.isEmpty()) { + shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(shopJoinedString); + List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); + shopMap = simpleShopVoList.stream() + .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); + } + String goodsJoinedString = null; + if(goodsIdSet!=null&&!goodsIdSet.isEmpty()){ + goodsJoinedString = String.join(",", goodsIdSet.stream().map(Object::toString).collect(Collectors.toList())); + } + Map<String, Goods> goodsMap = null; + if(goodsJoinedString!=null){ + List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsJoinedString).getData(); + goodsMap = goodsList.stream() + .collect(Collectors.toMap(Goods::getGoodsId, Function.identity())); + } + //处理返回信息 + String shopLimit = "全门店通用"; + String goodsLimit; + StringJoiner goodsNameSj; + for(AppGetAbleCouponPageVo getAbleCouponPageVo : getAbleCouponPageVoList){ + goodsLimit = null; + goodsNameSj = new StringJoiner(","); + //商户限制 + if(getAbleCouponPageVo.getShopId()!=null){ + shopLimit = shopMap.get(getAbleCouponPageVo.getShopId()).getShopName()+"可用"; + } + getAbleCouponPageVo.setShopLimit(shopLimit); + //商品限制 + if(StringUtils.isNotBlank(getAbleCouponPageVo.getRelGoodsIds())){ + relGoodsIds = getAbleCouponPageVo.getRelGoodsIds(); + goodsIdArr = relGoodsIds.split(","); + for(String goodsIs : goodsIdArr){ + if(goodsMap.get(goodsIs)!=null){ + goodsNameSj.add(goodsMap.get(goodsIs).getGoodsName()); + }else{ + log.debug("用户优惠券未找到关联商品"+getAbleCouponPageVo.getCouponId()+"-"+getAbleCouponPageVo.getRelGoodsIds()); + } + } + goodsLimit = goodsNameSj.toString(); + } + getAbleCouponPageVo.setGoodsLimit(goodsLimit); + } } return getAbleCouponPageVoList; } @@ -1165,33 +1299,56 @@ * @return void */ @Override + @Transactional(rollbackFor = Exception.class) public void appGetCoupon(String couponId,Long userId,Long shopId){ Coupon coupon = this.getById(couponId); + //判断优惠券状态 if(coupon==null||coupon.getDelFlag()==1||coupon.getCouponStatus()!=1||coupon.getSendType()!=1){ throw new ServiceException(AppErrorConstant.COUPON_GET_ERROR); } + //判断优惠券用户领取状态 MemberCouponRecord memberCouponRecord = memberCouponRecordService.getByCouponIdAndUserId(couponId,userId); if(memberCouponRecord!=null&&memberCouponRecord.getLimitFlag()==1){ throw new ServiceException(AppErrorConstant.COUPON_GET_ALL); } + //判断优惠券发放状态 + if(coupon.getSendLimitFlag()==1&&coupon.getSendLimitNumber()>0){ + CouponTotal couponTotal = couponTotalService.getById(couponId); + if(couponTotal.getSendCount()>=coupon.getSendLimitNumber()){ + throw new ServiceException(AppErrorConstant.COUPON_GET_ALL); + } + } + //生成用户优惠券 MemberCoupon memberCoupon = new MemberCoupon(); String memberCouponId = IdUtils.simpleUUID(); memberCoupon.setId(memberCouponId); memberCoupon.setDelFlag(0); memberCoupon.setCouponId(couponId); memberCoupon.setUserId(userId); - memberCoupon.setShopId(shopId); + if(coupon.getCouponFrom()==2){ + memberCoupon.setShopId(shopId); + } memberCoupon.setCouponType(coupon.getCouponType()); + if(coupon.getCouponType()==1){ + memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else if(coupon.getCouponType()==2){ + memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); + }else if(coupon.getCouponType()==3){ + memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); + }else{ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setCouponStatus(coupon.getCouponStatus()); memberCoupon.setCouponName(coupon.getCouponName()); memberCoupon.setSendType(coupon.getSendType()); memberCoupon.setSendTarget(coupon.getSendTarget()); memberCoupon.setSendTimeType(coupon.getSendTimeType()); memberCoupon.setSendTime(coupon.getSendTime()); - memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold()); - memberCoupon.setDiscountMoney(coupon.getDiscountMoney()); - memberCoupon.setDiscountPercent(coupon.getDiscountPercent()); memberCoupon.setUseScope(coupon.getUseScope()); + if(memberCoupon.getUseScope()==2){ + memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); + } memberCoupon.setValidTimeType(coupon.getValidTimeType()); memberCoupon.setValidStartTime(coupon.getValidStartTime()); memberCoupon.setValidEndTime(coupon.getValidEndTime()); @@ -1204,7 +1361,6 @@ }else if(coupon.getValidTimeType()==2){ memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(),coupon.getValidDay())); } - memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds()); memberCouponService.save(memberCoupon); memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1); } -- Gitblit v1.7.1