From fc0ebcb5f71190aa71274c509defba9c77a6804e Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期三, 20 九月 2023 18:13:28 +0800
Subject: [PATCH] bug

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java |   81 +++++++++++++++++++++++++++++++---------
 1 files changed, 62 insertions(+), 19 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 d6d524e..5f6bcf0 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
@@ -31,6 +31,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;
@@ -201,6 +202,9 @@
             List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId());
             mgtCouponGetVo.setRelUserList(relUserList);
         }
+        if(mgtCouponGetVo.getSendLimitFlag()==0){
+            mgtCouponGetVo.setSendLimitNumber(null);
+        }
         return mgtCouponGetVo;
     }
 
@@ -235,6 +239,9 @@
             //获取优惠券发放用户
             List<MgtCouponMemberListVo> relUserList = couponRelUserService.listCouponMemberVo(coupon.getCouponId());
             merCouponGetVo.setRelUserList(relUserList);
+        }
+        if(merCouponGetVo.getSendLimitFlag()==0){
+            merCouponGetVo.setSendLimitNumber(null);
         }
         return merCouponGetVo;
     }
@@ -299,8 +306,17 @@
         coupon.setRelationActivityType(mgtCouponEditDto.getRelationActivityType());
         coupon.setRelationActivityId(mgtCouponEditDto.getRelationActivityId());
         coupon.setPropagandaPoster(mgtCouponEditDto.getPropagandaPoster());
-        coupon.setSendLimitNumber(mgtCouponEditDto.getSendLimitNumber());
+        //指定发放优惠券不做发放数限制
+        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();
@@ -1027,8 +1043,16 @@
         coupon.setUpdateUserId(merCouponEditDto.getUserId());
         coupon.setRelationType(1);
         coupon.setPropagandaPoster(merCouponEditDto.getPropagandaPoster());
-        coupon.setSendLimitNumber(merCouponEditDto.getSendLimitNumber());
+        //指定发放优惠券不做发放数限制
+        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();
@@ -1188,26 +1212,35 @@
         if(!getAbleCouponPageVoList.isEmpty()){
             String relGoodsIds;
             HashSet<Long> shopIdSet = new HashSet<>();
-            HashSet<Long> goodsIdSet = 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())&&!getAbleCouponPageVo.getRelGoodsIds().contains(",")){
-                    goodsIdSet.add(Long.valueOf(getAbleCouponPageVo.getRelGoodsIds()));
+                if(StringUtils.isNotBlank(getAbleCouponPageVo.getRelGoodsIds())){
+                    relGoodsIds = getAbleCouponPageVo.getRelGoodsIds();
+                    goodsIdArr = relGoodsIds.split(",");
+                    for(String str : goodsIdArr){
+                        goodsIdSet.add(str);
+                    }
                 }
             }
             //获取关联商户和商品信息并转换为Map
-            String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList()));
+            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()));
             }
-            MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
-            mgtBaseBathDto.setIds(shopJoinedString);
-            List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
-            Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream()
-                    .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
             Map<String, Goods> goodsMap = null;
             if(goodsJoinedString!=null){
                 List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsJoinedString).getData();
@@ -1215,20 +1248,29 @@
                         .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
             }
             //处理返回信息
-            String shopLimit = "全场通用";
-            String goodsLimit = null;
+            String shopLimit = "全门店通用";
+            String goodsLimit;
+            StringJoiner goodsNameSj;
             for(AppGetAbleCouponPageVo getAbleCouponPageVo : getAbleCouponPageVoList){
+                goodsLimit = null;
+                goodsNameSj = new StringJoiner(",");
                 //商户限制
                 if(getAbleCouponPageVo.getShopId()!=null){
-                    if(!member.getRelationShopId().equals(getAbleCouponPageVo.getShopId())){
-                        shopLimit = shopMap.get(getAbleCouponPageVo.getShopId()).getShopName()+"可用";
-                    }
+                    shopLimit = shopMap.get(getAbleCouponPageVo.getShopId()).getShopName()+"可用";
                 }
                 getAbleCouponPageVo.setShopLimit(shopLimit);
                 //商品限制
-                relGoodsIds = getAbleCouponPageVo.getRelGoodsIds();
-                if(StringUtils.isNotBlank(relGoodsIds)&&!relGoodsIds.contains(",")){
-                    goodsLimit = goodsMap.get(relGoodsIds).getGoodsName();
+                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);
             }
@@ -1248,6 +1290,7 @@
      * @return  void
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void appGetCoupon(String couponId,Long userId,Long shopId){
         Coupon coupon = this.getById(couponId);
         //判断优惠券状态

--
Gitblit v1.7.1