bug
jiangqs
2023-09-18 4b759541dfa1de220f176b5688e0e46b3414e388
bug
23个文件已修改
384 ■■■■■ 已修改文件
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponEditDto.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerGoodsCouponListDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/coupon/Coupon.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppMemberCouponPageVo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffShopTaskPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java
@@ -73,10 +73,11 @@
    public R<Page<AppMemberCouponPageVo>> pageAppUserGetCoupon(@RequestBody AppMemberCouponPageDto appMemberCouponPageDto) {
        Long userId = SecurityUtils.getUserId();
        appMemberCouponPageDto.setUserId(userId);
        Member member = memberService.getByUserId(userId);
        Page<AppMemberCouponPageVo> page = new Page<>();
        page.setSize(appMemberCouponPageDto.getPageSize());
        page.setCurrent(appMemberCouponPageDto.getPageNum());
        List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponService.pageAppUserGetCoupon(page,appMemberCouponPageDto);
        List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponService.pageAppUserGetCoupon(page,appMemberCouponPageDto, member);
        return R.ok(page.setRecords(memberCouponPageVoList));
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponEditDto.java
@@ -76,4 +76,10 @@
    @ApiModelProperty(value = "宣传海报")
    private String propagandaPoster;
    @ApiModelProperty(value = "发放限制数量")
    private Integer sendLimitNumber;
    @ApiModelProperty(value = "发放限制0否1是")
    private Integer sendLimitFlag;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerGoodsCouponListDto.java
@@ -20,15 +20,17 @@
    @ApiModelProperty(value = "会员用户id")
    private Long memberUserId;
    @ApiModelProperty(value = "商品id")
    @ApiModelProperty(value = "商品id 可不传 传了只获取对应商品可用优惠券")
    private String goodsId;
    @ApiModelProperty(value = "购买数量")
    @ApiModelProperty(value = "已选优惠券表 可不传 和goodsId关联 传了自动过滤非本goodsId已选优惠券")
    private List<MemberSelectCouponDto> goodsCpuponList;
    @ApiModelProperty(value = "购买数量 可不传 和salesPrice关联 传了自动过滤不满足金额门槛的优惠券")
    private Integer buyNum;
    @ApiModelProperty(value = "商品售价")
    @ApiModelProperty(value = "商品售价 可不传 和buyNum关联 传了自动过滤不满足金额门槛的满减优惠券")
    private BigDecimal salesPrice;
    @ApiModelProperty(value = "已选优惠券表")
    private List<MemberSelectCouponDto> goodsCpuponList;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtCouponEditDto.java
@@ -89,8 +89,8 @@
    private String propagandaPoster;
    @ApiModelProperty(value = "发放限制数量")
    private String sendLimitNumber;
    private Integer sendLimitNumber;
    @ApiModelProperty(value = "发放限制0否1是")
    private String sendLimitFlag;
    private Integer sendLimitFlag;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/coupon/Coupon.java
@@ -195,12 +195,12 @@
     * 发放限制数量
     */
    @TableField("send_limit_number")
    private String sendLimitNumber;
    private Integer sendLimitNumber;
    /**
     * 发放限制0否1是
     */
    @TableField("send_limit_flag")
    private String sendLimitFlag;
    private Integer sendLimitFlag;
    @Override
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppGetAbleCouponPageVo.java
@@ -4,7 +4,6 @@
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * @ClassName AppUnGetCouponPageVo
@@ -32,8 +31,11 @@
    @ApiModelProperty(value ="优惠券关联商品",hidden = true)
    private String relGoodsIds;
    @ApiModelProperty(value = "使用限制")
    private List<String> goodsLimitList;
    @ApiModelProperty(value = "商户限制")
    private String shopLimit;
    @ApiModelProperty(value = "商品限制")
    private String goodsLimit;
    @ApiModelProperty(value = "门槛金额")
    private BigDecimal moneyThreshold;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppMemberCouponPageVo.java
@@ -6,7 +6,6 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * @ClassName AppMemberCouponPageVo
@@ -33,8 +32,11 @@
    @ApiModelProperty(value ="优惠券关联商品",hidden = true)
    private String relGoodsIds;
    @ApiModelProperty(value = "使用限制")
    private List<String> goodsLimitList;
    @ApiModelProperty(value = "商户限制")
    private String shopLimit;
    @ApiModelProperty(value = "商品限制")
    private String goodsLimit;
    @ApiModelProperty(value = "门槛金额")
    private BigDecimal moneyThreshold;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java
@@ -80,4 +80,10 @@
    @ApiModelProperty(value = "宣传海报")
    private String propagandaPoster;
    @ApiModelProperty(value = "发放限制数量")
    private Integer sendLimitNumber;
    @ApiModelProperty(value = "发放限制0否1是")
    private Integer sendLimitFlag;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java
@@ -83,8 +83,8 @@
    private String propagandaPoster;
    @ApiModelProperty(value = "发放限制数量")
    private String sendLimitNumber;
    private Integer sendLimitNumber;
    @ApiModelProperty(value = "发放限制0否1是")
    private String sendLimitFlag;
    private Integer sendLimitFlag;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java
@@ -95,6 +95,15 @@
    /**
     * @description  获取不能获取的优惠券id
     * @author  jqs
     * @date    2023/7/9 18:06
     * @return  List<Long>
     */
    List<String> listUnGetCoupon();
    /**
     * @description  可领取优惠券列表
     * @author  jqs
     * @date    2023/7/11 10:32
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -23,7 +23,6 @@
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;
@@ -120,7 +119,6 @@
                    useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元";
                }
                if(couponType.equals("折扣")){
                    moneyThreshold = mgtCouponPageVo.getMoneyThreshold();
                    discountPercent = mgtCouponPageVo.getDiscountPercent();
                    useLimit = discountPercent.toString() + "折";
                }
@@ -301,6 +299,8 @@
        coupon.setRelationActivityType(mgtCouponEditDto.getRelationActivityType());
        coupon.setRelationActivityId(mgtCouponEditDto.getRelationActivityId());
        coupon.setPropagandaPoster(mgtCouponEditDto.getPropagandaPoster());
        coupon.setSendLimitNumber(mgtCouponEditDto.getSendLimitNumber());
        coupon.setSendLimitFlag(mgtCouponEditDto.getSendLimitFlag());
        //判断是否指定商品
        if(coupon.getUseScope()==2&&!mgtCouponEditDto.getRelGoodsIdList().isEmpty()){
            List<String> relGoodsIdList = mgtCouponEditDto.getRelGoodsIdList();
@@ -986,6 +986,7 @@
            couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId());
            coupon.setCouponStatus(1);
        }else{
            //初始化新优惠券
            coupon = new Coupon();
            String couponId = IdUtils.simpleUUID();
            coupon.setCouponId(couponId);
@@ -1026,6 +1027,8 @@
        coupon.setUpdateUserId(merCouponEditDto.getUserId());
        coupon.setRelationType(1);
        coupon.setPropagandaPoster(merCouponEditDto.getPropagandaPoster());
        coupon.setSendLimitNumber(merCouponEditDto.getSendLimitNumber());
        coupon.setSendLimitFlag(merCouponEditDto.getSendLimitFlag());
        //判断是否指定商品
        if(coupon.getUseScope()==2&&!merCouponEditDto.getRelGoodsIdList().isEmpty()){
            List<String> relGoodsIdList = merCouponEditDto.getRelGoodsIdList();
@@ -1089,19 +1092,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();
@@ -1110,6 +1121,7 @@
                memberCoupon.setCouponId(couponId);
                memberCoupon.setUserId(userId);
                memberCoupon.setShopId(shopId);
                // 根据优惠券类型设置会员优惠券信息
                if(coupon.getCouponType()==1){
                    memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
                    memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
@@ -1127,6 +1139,7 @@
                memberCoupon.setSendTimeType(coupon.getSendTimeType());
                memberCoupon.setSendTime(coupon.getSendTime());
                memberCoupon.setUseScope(coupon.getUseScope());
                // 如果优惠券适用范围为指定商品,则设置关联商品ID
                if(memberCoupon.getUseScope()==2){
                    memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
                }
@@ -1136,7 +1149,7 @@
                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){
@@ -1144,8 +1157,10 @@
                }
                memberCouponList.add(memberCoupon);
            }
            // 更新会员优惠券记录
            memberCouponRecordService.updateMemberCouponRecord(coupon,userId,birthdayGiftSendDto.getCouponNumber());
        }
        // 批量保存会员优惠券列表
        memberCouponService.saveBatch(memberCouponList);
    }
@@ -1159,41 +1174,64 @@
     */
    @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<Long> goodsIdSet = new HashSet<>();
            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()));
                }
            }
            //获取关联商户和商品信息并转换为Map
            String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList()));
            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();
                goodsMap = goodsList.stream()
                        .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
            }
            //处理返回信息
            String shopLimit = "全场通用";
            String goodsLimit = null;
            for(AppGetAbleCouponPageVo getAbleCouponPageVo : getAbleCouponPageVoList){
                //商户限制
                if(getAbleCouponPageVo.getShopId()!=null){
                    if(!member.getRelationShopId().equals(getAbleCouponPageVo.getShopId())){
                        shopLimit = shopMap.get(getAbleCouponPageVo.getShopId()).getShopName()+"可用";
                    }
                }
                appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList);
                getAbleCouponPageVo.setShopLimit(shopLimit);
                //商品限制
                relGoodsIds = getAbleCouponPageVo.getRelGoodsIds();
                if(StringUtils.isNotBlank(relGoodsIds)&&!relGoodsIds.contains(",")){
                    goodsLimit = goodsMap.get(relGoodsIds).getGoodsName();
                }
                getAbleCouponPageVo.setGoodsLimit(goodsLimit);
            }
        }
        return getAbleCouponPageVoList;
    }
@@ -1212,13 +1250,23 @@
    @Override
    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);
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -15,6 +15,7 @@
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
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.vo.AppMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerMemberCouponVo;
@@ -180,13 +181,12 @@
     * @return  List<AppMemberCouponPageVo>
     */
    @Override
    public List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto){
    public List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto, Member member){
        List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponMapper.pageAppUserGetCoupon(page, appMemberCouponPageDto);
        if(!memberCouponPageVoList.isEmpty()){
            String relGoodsIds;
            List<Goods> goodsList;
            List<String> goodsLimitList = null;
            HashSet<Long> shopIdSet = new HashSet<>();
            HashSet<Long> goodsIdSet = new HashSet<>();
            for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
                if(appGetAbleCouponPageVo.getShopId()!=null){
                    shopIdSet.add(appGetAbleCouponPageVo.getShopId());
@@ -194,33 +194,45 @@
                if(appGetAbleCouponPageVo.getCouponType()==4){
                    appGetAbleCouponPageVo.setVerifyCode("2-"+appGetAbleCouponPageVo.getMemberCouponId());
                }
                if(StringUtils.isNotBlank(appGetAbleCouponPageVo.getRelGoodsIds())&&!appGetAbleCouponPageVo.getRelGoodsIds().contains(",")){
                    goodsIdSet.add(Long.valueOf(appGetAbleCouponPageVo.getRelGoodsIds()));
                }
            }
            //获取关联商户和商品信息并转换为Map
            String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList()));
            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();
                goodsMap = goodsList.stream()
                        .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
            }
            //处理返回信息
            String shopLimit = "全场通用";
            String goodsLimit = null;
            for(AppMemberCouponPageVo appGetAbleCouponPageVo : memberCouponPageVoList){
                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){
                        goodsLimitList.add(shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"通用");
                    }else{
                        goodsLimitList.add("全场通用");
                //商户限制
                if(appGetAbleCouponPageVo.getShopId()!=null){
                    if(!member.getRelationShopId().equals(appGetAbleCouponPageVo.getShopId())){
                        shopLimit = shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName()+"可用";
                    }
                }
                appGetAbleCouponPageVo.setGoodsLimitList(goodsLimitList);
                appGetAbleCouponPageVo.setShopLimit(shopLimit);
                //商品限制
                relGoodsIds = appGetAbleCouponPageVo.getRelGoodsIds();
                if(StringUtils.isNotBlank(relGoodsIds)&&!relGoodsIds.contains(",")){
                    goodsLimit = goodsMap.get(relGoodsIds).getGoodsName();
                }
                appGetAbleCouponPageVo.setGoodsLimit(goodsLimit);
                //核销商店
                if(appGetAbleCouponPageVo.getShopId()!=null){
                    appGetAbleCouponPageVo.setVerifyShopName(shopMap.get(appGetAbleCouponPageVo.getShopId()).getShopName());
                }
@@ -291,7 +303,7 @@
            Iterator<MerMemberCouponVo> iterator = merMemberCouponVoList.iterator();
            while (iterator.hasNext()) {
                MerMemberCouponVo couponVo = iterator.next();
                log.debug("couponVo"+couponVo.toString());
                //处理已选择优惠券过滤
                if(checkSelect){
                    if (selectCouponList.contains(couponVo.getMemberCouponId()) && selectCouponMap.containsKey(couponVo.getMemberCouponId())) {
                        String goodsId = selectCouponMap.get(couponVo.getMemberCouponId());
@@ -301,6 +313,7 @@
                        }
                    }
                }
                //处理满减卷门槛过滤
                if(merGoodsCouponListDto.getBuyNum()!=null&&merGoodsCouponListDto.getSalesPrice()!=null){
                    if(couponVo.getCouponType()==1){
                        BigDecimal goodsMoney = merGoodsCouponListDto.getSalesPrice().multiply(new BigDecimal(merGoodsCouponListDto.getBuyNum().toString()));
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -292,7 +292,6 @@
    }
    public static String getMobileByWX(String accessToken, String code) throws Exception {
        String method = "POST";
        Map<String, String> headers = new HashMap<>(16);
        headers.put("Content-Type", "application/json");
        headers.put("Accept", "application/json");
@@ -321,6 +320,7 @@
        appUserInfoVo.setNickName(member.getNickName());
        appUserInfoVo.setRealName(member.getRealName());
        appUserInfoVo.setPhonenumber(member.getMobile());
        //绑定会员显示绑定店铺
        if (member.getRelationShopId() != null && member.getBindingFlag() == 1) {
            appUserInfoVo.setRelationShopId(member.getRelationShopId());
            Shop shop = shopService.getShop(member.getRelationShopId()).getData();
@@ -330,9 +330,11 @@
        appUserInfoVo.setBirthday(member.getBirthday());
        appUserInfoVo.setGender(member.getGender());
        appUserInfoVo.setAvatar(member.getAvatar());
        //待支付待核销统计
        AppOrderTotalVo appOrderTotalVo = orderService.getAppOrderTotal(userId).getData();
        appUserInfoVo.setNoPayCount(appOrderTotalVo.getNoPayCount());
        appUserInfoVo.setNoUseCount(appOrderTotalVo.getNoUseCount());
        //积分
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        appUserInfoVo.setIntegral(memberTotal.getUseableIntegral());
        return appUserInfoVo;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
@@ -6,6 +6,7 @@
import com.ruoyi.member.domain.dto.MerGoodsCouponListDto;
import com.ruoyi.member.domain.vo.AppMemberCouponPageVo;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.system.api.domain.vo.AppMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerMemberCouponVo;
@@ -68,7 +69,7 @@
     * @param appMemberCouponPageDto
     * @return  List<AppMemberCouponPageVo>
     */
    List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto);
    List<AppMemberCouponPageVo> pageAppUserGetCoupon(Page page, AppMemberCouponPageDto appMemberCouponPageDto, Member member);
    /**
     * @description  定时检查优惠券过期
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
@@ -279,7 +279,7 @@
        WHEN 1 THEN '手动获取'
        ELSE '指定发放'
        END sendType,
        CASE tc.send_type
        CASE tc.send_target
        WHEN 2 THEN '全部用户'
        WHEN 3 THEN '会员用户'
        WHEN 4 THEN '非会员用户'
@@ -314,7 +314,7 @@
                WHEN 1 THEN '手动获取'
                ELSE '指定发放'
                END sendType,
            CASE tc.send_type
            CASE tc.send_target
                WHEN 2 THEN '全部用户'
                WHEN 3 THEN '会员用户'
                WHEN 4 THEN '非会员用户'
@@ -344,6 +344,13 @@
        WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND tc.audit_status=2 AND tc.send_type = 1 AND tmcr.limit_flag = 1
    </select>
    <select id="listUnGetCoupon" resultType="java.lang.String">
        SELECT
            tc.coupon_id
        FROM t_coupon tc
        INNER JOIN t_coupon_total tct ON tc.coupon_id = tct.coupon_id
        WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND tc.audit_status=2 AND tc.send_limit_flag = 1 AND tc.send_limit_number &lt;= tct.send_count
    </select>
    <select id="getAbleCouponPageVoList" resultType="com.ruoyi.member.domain.vo.AppGetAbleCouponPageVo">
        SELECT
@@ -353,7 +360,7 @@
            tc.money_threshold moneyThreshold,
            tc.discount_money discountMoney,
            tc.discount_percent discountPercent,
            tc.rel_goods_ids relGoodsIds
            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
        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/member/MemberCouponMapper.xml
@@ -175,7 +175,7 @@
            tuc.money_threshold moneyThreshold,
            tuc.discount_money discountMoney,
            tuc.discount_percent discountPercent,
            tuc.rel_goods_ids relGoodsIds,
            CASE WHEN tuc.coupon_type = 4 THEN tuc.rel_goods_ids WHEN tuc.use_scope = 2 THEN tuc.rel_goods_ids ELSE NULL END relGoodsIds,
            tuc.shop_id shopId,
            IFNULL(tuc.valid_start_time,tuc.receive_time) validStartTime,
            tuc.deadline_time deadlineTime,
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -634,7 +634,8 @@
        <if test="param.endDate!=null and param.endDate!=''">
            AND Date(create_time) &lt;= #{param.endDate}
        </if>
        GROUP BY level
        GROUP BY mapKey
        ORDER BY mapValue DESC
    </select>
    <select id="getPlTotalMemberTotalGoodsType" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1211,9 +1211,9 @@
        if (appUserOrderPageVoList != null && !appUserOrderPageVoList.isEmpty()) {
            Long shopId;
            String activityId;
            Shop shop;
            HashSet<Long> shopSet = new HashSet<Long>();
            HashSet<String> activitySet = new HashSet<String>();
            // 遍历订单列表,获取店铺ID和活动ID
            for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
                shopId = appUserOrderPageVo.getShopId();
                shopSet.add(shopId);
@@ -1222,22 +1222,25 @@
                    activitySet.add(activityId);
                }
            }
            Map<Long, Shop> shopMap = new HashMap<>();
            shopSet.forEach(shopIdLong -> {
                Shop shopTemp = remoteShopService.getShop(shopIdLong).getData();
                shopMap.put(shopIdLong, shopTemp);
            });
            String shopJoinedString = String.join(",", shopSet.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()));
            MgtSimpleShopVo simpleShopVo;
            Integer delayTime = 30;
            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            //处理订单回显
            for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
                if(member.getBindingFlag()==0&&appUserOrderPageVo.getOrderFrom()==2){
                    appUserOrderPageVo.setShopName("全部店铺");
                }else{
                    shop = shopMap.get(appUserOrderPageVo.getShopId());
                    appUserOrderPageVo.setShopName(shop.getShopName());
                    appUserOrderPageVo.setShopServicePhone(shop.getShopServicePhone());
                    simpleShopVo = shopMap.get(appUserOrderPageVo.getShopId());
                    appUserOrderPageVo.setShopName(simpleShopVo.getShopName());
                    appUserOrderPageVo.setShopServicePhone(simpleShopVo.getShopServicePhone());
                    if (appUserOrderPageVo.getShopId().equals(appUserOrderPageDto.getShopId())) {
                        appUserOrderPageVo.setSameShop(1);
                    } else {
@@ -1830,8 +1833,23 @@
            payRecord.setPayType(merVerifyOrderDto.getPayType());
            payRecordService.save(payRecord);
        }
        //更新用户消费统计
        //更新用户积分和消费统计
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        // 如果存在积分兑换比例,则计算积分
        if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
            Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL);
            BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue);
            BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP);
            Integer integral = Integer.valueOf(integralBig.toString());
            if(integral>0){
                memberTotalChangeDto.setChangeIntegral(integral);
                memberTotalChangeDto.setTypeIntegral(1);
                memberTotalChangeDto.setOrderId(orderId);
                memberTotalChangeDto.setOrderNo(order.getOrderNo());
            }
        }
        //更新消费时间
        memberTotalChangeDto.setConsumeTime(nowTime);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        return merVerifyOrderVo;
@@ -1992,8 +2010,7 @@
                    }
                    // 设置其他属性
                    return merCouponGoods;
                })
                .collect(Collectors.toList());
                }).collect(Collectors.toList());
        // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
        merVerifyCouponVo.setGoodsList(merCouponGoodsList);
        //生成服务
@@ -4963,17 +4980,19 @@
        // 初始化会员统计信息
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        // 如果存在积分兑换比例,则计算积分
        if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
        // 如果存在积分兑换比例,则计算积分 2023-09-14改为核销后获取积分
        /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
            Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL);
            BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue);
            BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP);
            Integer integral = Integer.valueOf(integralBig.toString());
            memberTotalChangeDto.setChangeIntegral(integral);
            memberTotalChangeDto.setTypeIntegral(1);
            memberTotalChangeDto.setOrderId(orderId);
            memberTotalChangeDto.setOrderNo(order.getOrderNo());
        }
            if(integral>0){
                memberTotalChangeDto.setChangeIntegral(integral);
                memberTotalChangeDto.setTypeIntegral(1);
                memberTotalChangeDto.setOrderId(orderId);
                memberTotalChangeDto.setOrderNo(order.getOrderNo());
            }
        }*/
        // 设置会员支付金额和支付时间
        memberTotalChangeDto.setPayMoney(order.getPayMoney());
        memberTotalChangeDto.setPayTime(new Date());
@@ -5003,6 +5022,7 @@
            activityTotalChangeDto.setChangeNum(1);
            activityTotalChangeDto.setMoney(order.getPayMoney());
            Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId());
            //判断用户是否下过单 如果只有当前订单则为1
            if (userActivityNum == 1) {
                activityTotalChangeDto.setPersonNum(1);
            } else {
@@ -5175,7 +5195,7 @@
        // 初始化会员统计信息
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        // 如果存在积分兑换比例,则计算积分
        // 如果存在积分兑换比例,则计算积分 2023-09-14改为核销后获取积分
        /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) {
            Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL);
            BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue);
@@ -5202,7 +5222,6 @@
        // 更新会员统计信息
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        // 如果订单来源于活动,则更新活动统计信息
        //TODO 可考虑改成定时任务统一查询后增加 减少服务器压力但会增加延后性
        if (order.getOrderFrom() == 2) {
            ActivityTotalChangeDto activityTotalChangeDto = new ActivityTotalChangeDto();
            activityTotalChangeDto.setActivityId(order.getActivityId());
@@ -5211,10 +5230,11 @@
            activityTotalChangeDto.setRefundNum(1);
            activityTotalChangeDto.setMoney(order.getPayMoney());
            Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId());
            //判断用户是否还有活动订单 无则减少人数
            if (userActivityNum > 0) {
                activityTotalChangeDto.setPersonNum(1);
            } else {
                activityTotalChangeDto.setPersonNum(0);
            } else {
                activityTotalChangeDto.setPersonNum(1);
            }
            activityTotalChangeDto.setUserId(order.getUserId());
            remoteActivityService.changeActivityTotal(activityTotalChangeDto);
@@ -5834,30 +5854,39 @@
     */
    @Override
    public List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto){
        // 获取订单列表
        List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerMemberPayOrder(page, merOrderPageDto);
        // 如果订单列表不为空
        if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) {
            Long userId;
            BigDecimal zeroBig = new BigDecimal("0.00");
            StringJoiner userIdSj = new StringJoiner(",");
            // 遍历订单列表
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                userId = merOrderPageVo.getUserId();
                userIdSj.add(userId.toString());
                if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){
                // 如果未支付金额小于零,则设置为零
                if (merOrderPageVo.getUnPaidMoney().compareTo(zeroBig) < 0) {
                    merOrderPageVo.setUnPaidMoney(zeroBig);
                }
            }
            // 获取用户列表
            MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
            mgtBaseBathDto.setIds(userIdSj.toString());
            List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData();
            // 将用户列表转换为Map,以便根据用户ID快速查找用户信息
            Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity()));
            // 遍历订单列表
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                if(merOrderPageVo.getUserId()!=null&&userMap.get(merOrderPageVo.getUserId())!=null){
                // 如果订单的用户ID不为空,并且用户Map中存在对应的用户信息
                if (merOrderPageVo.getUserId() != null && userMap.get(merOrderPageVo.getUserId()) != null) {
                    // 设置订单的用户名、昵称和手机号
                    merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName());
                    merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName());
                    merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile());
                }else{
                    log.debug("订单merOrderPageVo"+merOrderPageVo.getOrderId()+"缺少用户");
                } else {
                    log.debug("订单merOrderPageVo" + merOrderPageVo.getOrderId() + "缺少用户");
                }
            }
        }
@@ -5918,7 +5947,6 @@
    public ProfitSharingResult queryBill(String orderId) throws WxPayException {
        OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId);
        ProfitSharing profitSharing = profitSharingService.getByOrderId(orderId);
        ProfitSharingQueryRequest request = new ProfitSharingQueryRequest();
        request.setSubMchid("1650744551");
        request.setTransactionId(orderPayment.getTransactionId());
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -154,7 +154,7 @@
        <collection property="mgtOrderGoodsPageVoList"
                    ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo"
                    select="listAllSimpleOrderGoodsByOrderId"
                    column="{orderId=orderId">
                    column="{orderId=orderId}">
            <result column="goodsName" property="goodsName"/>
            <result column="buyNum" property="buyNum"/>
        </collection>
@@ -1957,7 +1957,7 @@
        COUNT(DISTINCT toc.user_id) AS mapValue
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status = 3
        WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status IN (2,3)
        <if test="param.activityId !=null and param.activityId != ''">
            AND toc.activity_id = #{param.activityId}
        </if>
@@ -1983,7 +1983,7 @@
        COUNT(DISTINCT toc.user_id) AS mapValue
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0  AND toc.order_from = 2 AND toc.order_status = 3
        WHERE toc.del_flag = 0  AND toc.order_from = 2 AND toc.order_status IN (2,3)
        <if test="param.activityId!=null and param.activityId!=''">
            AND toc.activity_id = #{param.activityId}
        </if>
@@ -2017,7 +2017,7 @@
        COUNT(DISTINCT toc.user_id) AS mapValue
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0  AND toc.order_from = 2 AND toc.order_status = 3
        WHERE toc.del_flag = 0  AND toc.order_from = 2 AND toc.order_status IN (2,3)
        <if test="param.shopId != null and param.shopId != ''">
            AND toc.shop_id = #{param.shopId}
        </if>
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffShopTaskPageVo.java
@@ -43,6 +43,9 @@
    @ApiModelProperty(value = "用户头像")
    private String userPicture;
    @ApiModelProperty(value = "用户岗位")
    private String userPosition;
    @ApiModelProperty(value="跟进时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date followTime;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -226,7 +226,6 @@
            shopRelTagService.deleteByShopId(shop.getShopId());
            shopRelUserService.deleteByShopId(shop.getShopId());
            //清空归属
            shopRelUserService.deleteByShopId(shop.getShopId());
            shopStaffService.clearShopStaffRelation(shop.getShopId());
            if(!shop.getShopName().equals(mgtEditShopDto.getShopName())){
                MgtMemberShopNameDto mgtMemberShopNameDto = new MgtMemberShopNameDto();
@@ -716,7 +715,6 @@
            shopTransferRecord.setAfterUserId(mgtTransferShopDto.getTransferUserId());
            shopTransferRecord.setTransferRemark(mgtTransferShopDto.getTransferRemark());
            shopTransferRecordService.save(shopTransferRecord);
            shopRelUserService.deleteByUserId(shop.getBelongUserId());
        }
        shop.setBelongUserId(mgtTransferShopDto.getTransferUserId());
        this.saveOrUpdate(shop);
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java
@@ -7,21 +7,24 @@
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.shop.domain.dto.*;
import com.ruoyi.shop.domain.pojo.task.*;
import com.ruoyi.shop.domain.pojo.task.ShopTask;
import com.ruoyi.shop.domain.pojo.task.ShopTaskRecord;
import com.ruoyi.shop.domain.pojo.task.TaskFile;
import com.ruoyi.shop.domain.vo.StaffShopTaskPageVo;
import com.ruoyi.shop.mapper.task.ShopTaskMapper;
import com.ruoyi.shop.service.task.ShopTaskRecordService;
import com.ruoyi.shop.service.task.ShopTaskService;
import com.ruoyi.shop.service.task.TaskFileService;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.poji.sys.SysStaff;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * <p>
@@ -45,6 +48,9 @@
    @Resource
    private RemoteUserService remoteUserService;
    @Resource
    private RemoteConfigService remoteConfigService;
    /**
     * 平台跟进商户
@@ -156,14 +162,23 @@
        List<StaffShopTaskPageVo> shopTaskPageVoList = shopTaskMapper.pageStaffShopTask(page, staffShopTaskPageDto);
        if(shopTaskPageVoList!=null&&shopTaskPageVoList.size()>0){
            Long userId;
            SysUser sysUser;
            SysStaff sysStaff;
            HashSet<Long> userIdSet = new HashSet<>();
            for(StaffShopTaskPageVo staffShopTaskPageVo : shopTaskPageVoList){
                userIdSet.add(staffShopTaskPageVo.getUserId());
            }
            List<Long> useIdList = new ArrayList<>(userIdSet);
            List<SysStaff> sysStaffList = remoteConfigService.listSysStaffByIds(useIdList).getData();
            Map<Long,SysStaff> sysStaffMap = sysStaffList.stream()
                    .collect(Collectors.toMap(SysStaff::getUserId, Function.identity()));
            for(StaffShopTaskPageVo staffShopTaskPageVo : shopTaskPageVoList){
                //获取任务用户信息
                userId = staffShopTaskPageVo.getUserId();
                if(userId!=null){
                    sysUser = remoteUserService.getSysUser(userId).getData();
                    staffShopTaskPageVo.setUserName(sysUser.getNickName());
                    staffShopTaskPageVo.setUserPicture(sysUser.getAvatar());
                    sysStaff = sysStaffMap.get(userId);
                    staffShopTaskPageVo.setUserName(sysStaff.getStaffName());
                    staffShopTaskPageVo.setUserPicture(sysStaff.getStaffAvatar());
                    staffShopTaskPageVo.setUserPosition(sysStaff.getStaffPost());
                }
            }
        }
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -811,7 +811,7 @@
        ts.sign_time signTime,
        ts.shop_name shopName,
        ts.shop_tags shopTags,
        CONCAT(ts.cooperation_start_time,'-',ts.cooperation_end_time) cooperationTime,
        ts.cooperation_end_time cooperationTime,
        CONCAT(ts.shop_area_name,ts.shop_address) shopAddress,
        ts.shopowner_name shopownerName,
        ts.shopowner_phone shopownerPhone,