bug
jiangqs
2023-09-20 fc0ebcb5f71190aa71274c509defba9c77a6804e
bug
18个文件已修改
274 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponPageVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponTotalMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/MemberCouponRecordServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponTotalMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerConsumerGoodsListVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 = "员工没有录入系统";
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;
}
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;
}
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;
}
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;
}
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;
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);
}
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);
        //判断优惠券状态
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);
    }
}
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);
                //核销商店
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
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>
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>
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);
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;
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();
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
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