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

---
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java                     |    2 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java                  |    3 
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml                                        |    2 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/MemberCouponRecordServiceImpl.java |   27 +++--
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml                                |    6 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java       |   51 +++++++---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java               |    7 +
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java             |   81 ++++++++++++---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java                          |    3 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java                 |   45 +++++---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java                       |    3 
 ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml                                     |   17 ++-
 ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml                                     |    2 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java                         |    4 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponTotalMapper.java                   |   11 ++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponPageVo.java                         |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsListVo.java                    |    3 
 ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponTotalMapper.xml                                |    5 +
 18 files changed, 201 insertions(+), 73 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
index 7ce265c..2b69734 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -12,6 +12,8 @@
 
     String USER_NOT_LOGIN = "用户没有登录或登录已失效";
 
+    String USER_BINDING_ERROR = "用户已绑定其他店铺";
+
     String USER_NO_SHOP = "未查询到用户关联商户";
 
     String USER_NO_SYSTEM = "员工没有录入系统";
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java
index 010ef12..c70fd6f 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java
@@ -93,4 +93,7 @@
 
     @ApiModelProperty(value = "发放限制0否1是")
     private Integer sendLimitFlag;
+
+    @ApiModelProperty(value = "领取限制数量 0为不限")
+    private Integer limitNumber;
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java
index cb5ba18..5464387 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java
@@ -46,4 +46,7 @@
     @ApiModelProperty(value = "折扣百分比")
     private BigDecimal discountPercent;
 
+    @ApiModelProperty(value = "有效期")
+    private String validTime;
+
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java
index a22b44e..5280b4d 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java
@@ -79,4 +79,8 @@
 
     @ApiModelProperty(value = "宣传海报")
     private String propagandaPoster;
+
+    @ApiModelProperty(value = "发放限制数量")
+    private Integer sendLimitNumber;
+
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java
index 07669b6..78a0f65 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java
@@ -87,4 +87,7 @@
 
     @ApiModelProperty(value = "发放限制0否1是")
     private Integer sendLimitFlag;
+
+    @ApiModelProperty(value = "领取限制数量 0为不限")
+    private Integer limitNumber;
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponPageVo.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponPageVo.java
index 9d74891..e13b637 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponPageVo.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponPageVo.java
@@ -45,7 +45,7 @@
     private String validTime;
 
     @ApiModelProperty(value = "发放张数")
-    private Integer sendCount;
+    private String sendCount;
 
     @ApiModelProperty(value = "使用范围")
     private String useScope;
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponTotalMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponTotalMapper.java
index 8e4a83b..3364b6a 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponTotalMapper.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponTotalMapper.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.member.domain.pojo.coupon.CouponTotal;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +14,14 @@
  */
 public interface CouponTotalMapper extends BaseMapper<CouponTotal> {
 
+    /**
+     * @description  更新优惠券统计
+     * @author  jqs
+     * @date    2023/9/19 18:08
+     * @param couponId
+     * @param sendCount
+     * @param sendUserCount
+     * @return  Integer
+     */
+    Integer updateCouponTotal(@Param("couponId")String couponId, @Param("sendCount")Integer sendCount, @Param("sendUserCount")Integer sendUserCount);
 }
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);
         //判断优惠券状态
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/MemberCouponRecordServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/MemberCouponRecordServiceImpl.java
index 8223380..16f17f4 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/MemberCouponRecordServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/MemberCouponRecordServiceImpl.java
@@ -1,13 +1,14 @@
 package com.ruoyi.member.service.impl.coupon;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.ruoyi.member.domain.pojo.coupon.Coupon;
-import com.ruoyi.member.domain.pojo.coupon.CouponTotal;
-import com.ruoyi.member.domain.pojo.coupon.MemberCouponRecord;
-import com.ruoyi.member.mapper.coupon.MemberCouponRecordMapper;
-import com.ruoyi.member.service.coupon.CouponTotalService;
-import com.ruoyi.member.service.coupon.MemberCouponRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.member.domain.pojo.coupon.Coupon;
+import com.ruoyi.member.domain.pojo.coupon.MemberCouponRecord;
+import com.ruoyi.member.mapper.coupon.CouponTotalMapper;
+import com.ruoyi.member.mapper.coupon.MemberCouponRecordMapper;
+import com.ruoyi.member.service.coupon.MemberCouponRecordService;
+import com.ruoyi.system.api.constant.AppErrorConstant;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -25,7 +26,7 @@
 
 
     @Resource
-    private CouponTotalService couponTotalService;
+    private CouponTotalMapper couponTotalMapper;
 
     /**
      * @description  获取用户优惠券领取记录
@@ -55,7 +56,8 @@
     public void updateMemberCouponRecord(Coupon coupon, Long userId, Integer number) {
         // 根据优惠券ID和用户ID获取会员优惠券记录
         MemberCouponRecord memberCouponRecord = this.getByCouponIdAndUserId(coupon.getCouponId(), userId);
-        CouponTotal couponTotal = couponTotalService.getById(coupon.getCouponId());
+        Integer sendCount = number;
+        Integer sendUserCount = 0;
         if (memberCouponRecord != null) {
             // 如果会员优惠券记录存在,则更新数量
             memberCouponRecord.setNum(memberCouponRecord.getNum() + number);
@@ -89,11 +91,14 @@
             } else {
                 memberCouponRecord.setLimitFlag(0);
             }
-            couponTotal.setSendUserCount(couponTotal.getSendUserCount()+1);
+            sendUserCount = 1;
         }
         // 保存或更新会员优惠券记录
+        Integer result = couponTotalMapper.updateCouponTotal(coupon.getCouponId(), sendCount,sendUserCount);
+        if(result<1){
+            throw new ServiceException(AppErrorConstant.COUPON_GET_ALL);
+        }
         this.saveOrUpdate(memberCouponRecord);
-        couponTotal.setSendCount(couponTotal.getSendCount()+number);
-        couponTotalService.saveOrUpdate(couponTotal);
+
     }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
index eb96ac3..5fbb003 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -186,7 +186,8 @@
         if(!memberCouponPageVoList.isEmpty()){
             String relGoodsIds;
             HashSet<Long> shopIdSet = new HashSet<>();
-            HashSet<Long> goodsIdSet = new HashSet<>();
+            HashSet<String> goodsIdSet = new HashSet<>();
+            String[] goodsIdArr;
             for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
                 if(appGetAbleCouponPageVo.getShopId()!=null){
                     shopIdSet.add(appGetAbleCouponPageVo.getShopId());
@@ -194,21 +195,29 @@
                 if(appGetAbleCouponPageVo.getCouponType()==4){
                     appGetAbleCouponPageVo.setVerifyCode("2-"+appGetAbleCouponPageVo.getMemberCouponId());
                 }
-                if(StringUtils.isNotBlank(appGetAbleCouponPageVo.getRelGoodsIds())&&!appGetAbleCouponPageVo.getRelGoodsIds().contains(",")){
-                    goodsIdSet.add(Long.valueOf(appGetAbleCouponPageVo.getRelGoodsIds()));
+                if(StringUtils.isNotBlank(appGetAbleCouponPageVo.getRelGoodsIds())){
+                    relGoodsIds = appGetAbleCouponPageVo.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();
@@ -216,20 +225,30 @@
                         .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
             }
             //处理返回信息
-            String shopLimit = "全场通用";
-            String goodsLimit = null;
+            String shopLimit = "全门店通用";
+            String goodsLimit;
+            StringJoiner goodsNameSj;
             for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
+                goodsLimit = null;
+                goodsNameSj = new StringJoiner(",");
                 //商户限制
                 if(appGetAbleCouponPageVo.getShopId()!=null){
-                    if(!member.getRelationShopId().equals(appGetAbleCouponPageVo.getShopId())){
-                        shopLimit = shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"可用";
-                    }
+                    shopLimit = shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"可用";
                 }
                 appGetAbleCouponPageVo.setShopLimit(shopLimit);
                 //商品限制
                 relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
-                if(StringUtils.isNotBlank(relGoodsIds)&&!relGoodsIds.contains(",")){
-                    goodsLimit = goodsMap.get(relGoodsIds).getGoodsName();
+                if(StringUtils.isNotBlank(relGoodsIds)){
+                    relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
+                    goodsIdArr = relGoodsIds.split(",");
+                    for(String goodsIs : goodsIdArr){
+                        if(goodsMap.get(goodsIs)!=null){
+                            goodsNameSj.add(goodsMap.get(goodsIs).getGoodsName());
+                        }else{
+                            log.debug("用户优惠券未找到关联商品"+appGetAbleCouponPageVo.getMemberCouponId()+"-"+appGetAbleCouponPageVo.getRelGoodsIds());
+                        }
+                    }
+                    goodsLimit = goodsNameSj.toString();
                 }
                 appGetAbleCouponPageVo.setGoodsLimit(goodsLimit);
                 //核销商店
diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
index 08b08b5..e74af92 100644
--- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
+++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
@@ -155,7 +155,10 @@
         tc.valid_start_time  validStartTime,
         tc.valid_end_time  validEndTime,
         tc.valid_day  validDay,
-        tct.send_count  sendCount,
+        CASE tc.send_limit_flag
+            WHEN 1 THEN tc.send_limit_number
+            WHEN 0 THEN '无限制'
+            END sendCount,
         CASE tc.use_scope
             WHEN 1 THEN '全部商品'
             WHEN 2 THEN '指定商品'
@@ -176,7 +179,6 @@
         tc.discount_percent  discountPercent,
         tc.create_time  createTime
         FROM t_coupon tc
-        LEFT JOIN t_coupon_total tct ON tc.coupon_id = tct.coupon_id
         WHERE tc.del_flag = 0 AND tc.audit_status = 2
         <if test="param.shopId==null">
             AND tc.coupon_from = 1
@@ -290,7 +292,9 @@
         tc.discount_money  discountMoney,
         tc.discount_percent  discountPercent,
         tc.create_time  createTime,
-        tc.propaganda_poster propagandaPoster
+        tc.propaganda_poster propagandaPoster,
+        CASE WHEN tc.send_limit_flag = 1 THEN tc.send_limit_number ELSE NULL END sendLimitNumber,
+        tc.limit_number limitNumber
         FROM t_coupon tc
         LEFT JOIN t_coupon_total tct ON tc.coupon_id = tct.coupon_id
         WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND tc.coupon_from = 1
@@ -326,7 +330,8 @@
             tc.discount_percent  discountPercent,
             tc.create_time  createTime,
             tc.audit_reason auditReason,
-            tc.limit_number limitNumber
+            tc.limit_number limitNumber,
+            CASE WHEN tc.send_limit_flag = 1 THEN tc.send_limit_number ELSE NULL END sendLimitNumber
         FROM t_coupon tc
                  LEFT JOIN t_coupon_total tct ON tc.coupon_id = tct.coupon_id
         WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND tc.coupon_from = 2 AND tc.shop_id = #{param.shopId}
@@ -360,7 +365,9 @@
             tc.money_threshold moneyThreshold,
             tc.discount_money discountMoney,
             tc.discount_percent discountPercent,
-            CASE WHEN tc.coupon_type = 4 THEN tc.rel_goods_ids WHEN tc.use_scope = 2 THEN tc.rel_goods_ids ELSE NULL END relGoodsIds
+            tc.shop_id shopId,
+            CASE WHEN tc.coupon_type = 4 THEN tc.rel_goods_ids WHEN tc.use_scope = 2 THEN tc.rel_goods_ids ELSE NULL END relGoodsIds,
+            CASE tc.valid_time_type WHEN 1 THEN CONCAT(DATE_FORMAT(tc.valid_start_time, '%Y.%m.%d'),'-',DATE_FORMAT(tc.valid_end_time, '%Y.%m.%d')) WHEN 2 THEN CONCAT('领取后',tc.valid_day,'天有效') ELSE NULL END validTime
         FROM t_coupon tc
         WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND tc.audit_status = 2 AND tc.send_type = 1 AND (tc.coupon_from = 1 OR (tc.coupon_from = 2 AND tc.shop_id = #{shopId}))
         AND (tc.send_target = 2
diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponTotalMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponTotalMapper.xml
index 7b70040..d3003fc 100644
--- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponTotalMapper.xml
+++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponTotalMapper.xml
@@ -59,4 +59,9 @@
         </foreach>
     </delete>
 
+    <update id="updateCouponTotal">
+        UPDATE t_coupon_total tct,t_coupon tc
+        SET tct.send_count = tct.send_count + #{sendCount},tct.send_user_count = tct.send_user_count + #{sendUserCount}
+        WHERE tct.coupon_id = #{couponId} AND tc.coupon_id = tct.coupon_id AND (tc.send_limit_flag = 0 OR (tc.send_limit_flag = 1 AND tct.send_count + #{sendCount} &lt;= tc.send_limit_number))
+    </update>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
index c4e8785..ccfd406 100644
--- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
+++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -219,7 +219,7 @@
         tm.real_name nickName,
         tm.mobile mobile
         FROM t_member tm
-        WHERE tm.relation_shop_id = #{param.shopId}
+        WHERE tm.relation_shop_id = #{param.shopId} AND tm.binding_flag = 1
         <if test="param.keyword != null and param.keyword != ''">
             AND (tm.real_name LIKE CONCAT('%',#{param.keyword},'%') OR tm.mobile LIKE CONCAT('%',#{param.keyword},'%'))
         </if>
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
index b16c755..477b5a4 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.order.domain.dto.*;
@@ -78,6 +79,9 @@
     public R<AppPlaceOrderVo> placeOrder(@RequestBody AppPlaceOrderDto appPlaceOrderDto) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         Long userId = loginUser.getUserid();
+        if(1==1){
+            throw new ServiceException("支付功能尚未开通,请联系客服");
+        }
         appPlaceOrderDto.setUserId(userId);
         appPlaceOrderDto.setSpbillCreateIp(loginUser.getIpaddr());
         AppPlaceOrderVo appPlaceOrderVo = orderService.placeOrder(appPlaceOrderDto);
@@ -89,6 +93,9 @@
     public R<AppPlaceOrderVo> placeActivityOrder(@Validated @RequestBody AppPlaceActivityDto appPlaceActivityDto) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         Long userId = loginUser.getUserid();
+        if(1==1){
+            throw new ServiceException("支付功能尚未开通,请联系客服");
+        }
         appPlaceActivityDto.setUserId(userId);
         appPlaceActivityDto.setSpbillCreateIp(loginUser.getIpaddr());
         AppPlaceOrderVo appPlaceOrderVo = orderService.placeActivityOrder(appPlaceActivityDto);
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsListVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsListVo.java
index d7ce21d..27755d9 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsListVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsListVo.java
@@ -28,6 +28,9 @@
     @ApiModelProperty(value="商品名称")
     private String goodsName;
 
+    @ApiModelProperty(value="商品标签")
+    private String goodsTags;
+
     @ApiModelProperty(value = "商品简介")
     private String goodsIntroduction;
 
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index 8635275..8843be5 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1988,29 +1988,37 @@
         MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
         // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
         List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
+        String relGoodsIds = memberCoupon.getRelGoodsIds();
+        String[] relGoodsIdArr = relGoodsIds.split(",");
+        if(relGoodsIdArr.length!=goodsList.size()){
+            throw new ServiceException(AppErrorConstant.GOODS_DOWN);
+        }
         merVerifyCouponVo.setUserName(member.getRealName());
         merVerifyCouponVo.setUserMobile(member.getMobile());
         merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
         merVerifyCouponVo.setCouponName(memberCoupon.getCouponName());
         merVerifyCouponVo.setCreateTime(memberCoupon.getReceiveTime());
         // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性
-        List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream()
-                .map(goods -> {
-                    MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo();
-                    merCouponGoods.setGoodsId(goods.getGoodsId());
-                    merCouponGoods.setGoodsName(goods.getGoodsName());
-                    if (goods.getGoodsType() == 1) {
-                        merCouponGoods.setGoodsType("周期");
-                    } else if (goods.getGoodsType() == 2) {
-                        merCouponGoods.setGoodsType("服务");
-                    } else if (goods.getGoodsType() == 3) {
-                        merCouponGoods.setGoodsType("体验");
-                    } else if (goods.getGoodsType() == 4) {
-                        merCouponGoods.setGoodsType("单品");
-                    }
-                    // 设置其他属性
-                    return merCouponGoods;
-                }).collect(Collectors.toList());
+        List<MerCouponGoodsListVo> merCouponGoodsList = new ArrayList<>();
+        MerCouponGoodsListVo merCouponGoods;
+        for(Goods goods : goodsList){
+            if(goods.getGoodsStatus()!=1){
+                throw new ServiceException(AppErrorConstant.GOODS_DOWN);
+            }
+            merCouponGoods = new MerCouponGoodsListVo();
+            merCouponGoods.setGoodsId(goods.getGoodsId());
+            merCouponGoods.setGoodsName(goods.getGoodsName());
+            if (goods.getGoodsType() == 1) {
+                merCouponGoods.setGoodsType("周期");
+            } else if (goods.getGoodsType() == 2) {
+                merCouponGoods.setGoodsType("服务");
+            } else if (goods.getGoodsType() == 3) {
+                merCouponGoods.setGoodsType("体验");
+            } else if (goods.getGoodsType() == 4) {
+                merCouponGoods.setGoodsType("单品");
+            }
+            merCouponGoodsList.add(merCouponGoods);
+        }
         // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
         merVerifyCouponVo.setGoodsList(merCouponGoodsList);
         //生成服务
@@ -2266,6 +2274,9 @@
             SysUser sysUser;
             if (member != null) {
                 sysUser = remoteUserService.getSysUser(member.getUserId()).getData();
+                if(member.getBindingFlag()==1&&!member.getRelationShopId().equals(merNewOrderDto.getShopId())){
+                    throw new ServiceException(AppErrorConstant.USER_BINDING_ERROR);
+                }
             } else {
                 //创建新用户
                 String memberId = IdUtils.simpleUUID();
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml
index 8eb47cb..59c5c58 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml
@@ -153,7 +153,8 @@
         tcg.cycle_num_flag cycleNumFlag,
         tcg.service_num serviceNum,
         tcg.used_num usedNum,
-        tcg.sure_num sureNum
+        tcg.sure_num sureNum,
+        tcg.goods_tag goodsTags
         FROM t_consumer_goods tcg
         WHERE tcg.del_flag = 0 AND tcg.user_id = #{param.memberUserId} AND tcg.shop_id = #{param.shopId} AND tcg.service_status = 1
         AND tcg.goods_type = 1 AND tcg.cycle_num_flag = 0
@@ -172,7 +173,8 @@
         tcg.goods_nurses goodsNurses,
         tcg.cycle_num_flag cycleNumFlag,
         tcg.service_num serviceNum,
-        tcg.used_num usedNum
+        tcg.used_num usedNum,
+        tcg.goods_tag goodsTags
         FROM t_consumer_goods tcg
         WHERE tcg.del_flag = 0 AND tcg.user_id = #{param.memberUserId} AND tcg.shop_id = #{param.shopId} AND tcg.service_status = 1
         AND tcg.goods_type = #{param.goodsType} AND tcg.cycle_num_flag = 1
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
index d70d237..cb57a11 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -349,7 +349,7 @@
         toc.close_flag closeFlag
         FROM t_order toc
         WHERE toc.del_flag = 0 AND toc.user_id = #{param.memberUserId} AND toc.order_status = 3
-        <if test="param.closeFlag != null and param.closeFlag != ''">
+        <if test="param.closeFlag != null">
             AND toc.close_flag = #{param.closeFlag}
         </if>
         ORDER BY toc.create_time DESC

--
Gitblit v1.7.1