jiangqs
2023-06-28 a016ab9f97b76c3b4905b890662d344d47f24005
联调bug和统计完善
1 文件已重命名
31个文件已修改
4个文件已添加
754 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberTotalChangeDto.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberCoupon.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerVerifyCouponGetVo.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberTotal.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberTotalServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberTotalService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyCouponDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/ConsumerGoods.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerVerifyCouponVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopPageDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtTransferShopDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/shop/ShopTotal.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopRelTagMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopTotalMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopRelTagServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopRelUserServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopRelTagService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopRelUserService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopTotalService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopRelTagMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -65,4 +65,6 @@
    String COUPON_TYPE_ERROR = "只能核销商品优惠券";
    String STAFF_MOBILE_DOUBLE = "手机号码已被注册";
    String SHOP_USER_DOUBLE = "账号已经关联其他商户登录";
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberTotalChangeDto.java
New file
@@ -0,0 +1,62 @@
package com.ruoyi.system.api.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @ClassName MemberTotalChangeDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/28 13:58
 * @Version 1.0
 */
@Data
public class MemberTotalChangeDto {
    @ApiModelProperty(value = "会员id")
    private String memberId;
    @ApiModelProperty(value = "积分变化")
    private Integer changeIntegral;
    @ApiModelProperty(value = "积分变化类型1加2减")
    private Integer typeIntegral;
    @ApiModelProperty(value = "消费金额")
    private BigDecimal payMoney;
    @ApiModelProperty(value = "消费时间")
    private Date payTime;
    @ApiModelProperty(value = "服务时间")
    private Date serviceTime;
    @ApiModelProperty(value = "服务次数变化类型1加2减")
    private Integer typeService;
    @ApiModelProperty(value = "服务次数")
    private Integer serviceCount;
    @ApiModelProperty(value = "下次跟进时间")
    private Date nextTaskTime;
    @ApiModelProperty(value = "活动时间")
    private Date activityTime;
    @ApiModelProperty(value = "周期订单变化")
    private Integer cycleOrderChange;
    @ApiModelProperty(value = "体验订单变化")
    private Integer experienceOrderChange;
    @ApiModelProperty(value = "服务订单变化")
    private Integer serviceOrderChange;
    @ApiModelProperty(value = "单品订单变化")
    private Integer goodsOrderChange;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java
New file
@@ -0,0 +1,67 @@
package com.ruoyi.system.api.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @ClassName ShopTotalChangeDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/28 17:20
 * @Version 1.0
 */
@Data
public class ShopTotalChangeDto {
    @ApiModelProperty(value = "商户id")
    private Long shopId;
    @ApiModelProperty(value = "周期订单金额")
    private BigDecimal cycleMoney;
    @ApiModelProperty(value = "体验订单金额")
    private BigDecimal experienceMoney;
    @ApiModelProperty(value = "服务订单金额")
    private BigDecimal serviceMoney;
    @ApiModelProperty(value = "单品订单金额")
    private BigDecimal goodsMoney;
    @ApiModelProperty(value = "活动次数")
    private Integer activityCount;
    @ApiModelProperty(value = "周期服务1加2减")
    private Integer typeCycleService;
    @ApiModelProperty(value = "周期服务次数")
    private Integer cycleService;
    @ApiModelProperty(value = "周期服务人数")
    private Integer cyclePerson;
    @ApiModelProperty(value = "服务服务1加2减")
    private Integer typeServiceService;
    @ApiModelProperty(value = "服务服务次数")
    private Integer serviceService;
    @ApiModelProperty(value = "服务服务人数")
    private Integer servicePerson;
    @ApiModelProperty(value = "体验服务1加2减")
    private Integer typeExperienceService;
    @ApiModelProperty(value = "体验服务次数")
    private Integer experienceService;
    @ApiModelProperty(value = "体验服务人数")
    private Integer experiencePerson;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberCoupon.java
@@ -45,6 +45,9 @@
     */
    @TableField("user_id")
    private Long userId;
    @TableField("shop_id")
    private Long shopId;
    /**
     * 优惠券类型1.满减2.折扣3.代金4.商品
     */
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerVerifyCouponGetVo.java
@@ -17,14 +17,19 @@
@Data
public class MerVerifyCouponGetVo {
    @ApiModelProperty(value = "优惠券id")
    private String memberCouponId;
    @ApiModelProperty(value = "用户id")
    private Long userId;
    @ApiModelProperty(value = "优惠券")
    private MemberCoupon memberCoupon;
    @ApiModelProperty(value = "优惠券来源")
    private String couponFrom;
    @ApiModelProperty(value = "商品列表")
    private List<Goods> goodsList;
    @ApiModelProperty(value = "优惠券")
    private MemberCoupon memberCoupon;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java
@@ -55,4 +55,18 @@
        return R.ok(verifyCouponGetVo);
    }
    /**
     * @description  核销优惠券
     * @author  jqs
     * @date    2023/6/28 11:43
     * @param memberCouponId
     * @return  R<MerVerifyCouponGetVo>
     */
    @PostMapping("/sureVerifyCoupon")
    public R<MerVerifyCouponGetVo> sureVerifyCoupon(@RequestBody String memberCouponId)
    {
        MerVerifyCouponGetVo verifyCouponGetVo = memberCouponService.sureVerifyCoupon(memberCouponId);
        return R.ok(verifyCouponGetVo);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -4,6 +4,7 @@
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.member.service.member.MemberSuggestService;
import com.ruoyi.member.service.member.MemberTotalService;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.domain.vo.*;
@@ -28,6 +29,8 @@
    @Resource
    private MemberSuggestService memberSuggestService;
    @Resource
    private MemberTotalService memberTotalService;
    /**
    * @description: getMember
@@ -234,5 +237,17 @@
        return R.ok(shopTotalMemberVo);
    }
    /**
     * @description  更新会员统计
     * @author  jqs
     * @date    2023/6/28 17:52
     * @param memberTotalChangeDto
     * @return  R
     */
    @PostMapping("/changeMemberTotal")
    public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto)
    {
        memberTotalService.changeMemberTotal(memberTotalChangeDto);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberTotal.java
@@ -1,16 +1,16 @@
package com.ruoyi.member.domain.pojo.member;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
@@ -116,8 +116,8 @@
    /**
     * 总体验订单数
     */
    @TableField("tolta_experience_order")
    private Integer toltaExperienceOrder;
    @TableField("total_experience_order")
    private Integer totalExperienceOrder;
    /**
     * 总服务订单数
     */
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -328,6 +328,7 @@
                memberCoupon.setDelFlag(0);
                memberCoupon.setCouponId(coupon.getCouponId());
                memberCoupon.setUserId(userId);
                memberCoupon.setShopId(coupon.getShopId());
                memberCoupon.setCouponType(coupon.getCouponType());
                memberCoupon.setCouponStatus(coupon.getCouponStatus());
                memberCoupon.setCouponName(coupon.getCouponName());
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -2,7 +2,9 @@
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.mapper.member.MemberCouponMapper;
import com.ruoyi.member.service.coupon.CouponService;
import com.ruoyi.member.service.member.MemberCouponService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.poji.goods.Goods;
@@ -13,6 +15,7 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
@@ -31,6 +34,9 @@
    @Resource
    private RemoteGoodsService remoteGoodsService;
    @Resource
    private CouponService couponService;
    /**
     * @description: TODO
@@ -54,7 +60,53 @@
    @Override
    public MerVerifyCouponGetVo getVerifyCoupon(String verifyCoupon){
        MemberCoupon memberCoupon = this.getById(verifyCoupon);
        // 检查是否存在该优惠券
        if(memberCoupon==null){
            throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
        }
        // 检查优惠券状态
        int couponStatus = memberCoupon.getCouponStatus();
        if (couponStatus == 0) {
            throw new ServiceException(AppErrorConstant.COUPON_EXPIRED);
        } else if (couponStatus == 2) {
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        } else if (couponStatus != 0) {
            throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
        }
        // 检查优惠券类型
        int couponType = memberCoupon.getCouponType();
        if (couponType != 4) {
            throw new ServiceException(AppErrorConstant.COUPON_TYPE_ERROR);
        }
        MerVerifyCouponGetVo merVerifyCouponGetVo = new MerVerifyCouponGetVo();
        merVerifyCouponGetVo.setUserId(memberCoupon.getUserId());
        String relGoodsIds = memberCoupon.getRelGoodsIds();
        List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData();
        if (goodsList != null) {
            merVerifyCouponGetVo.setGoodsList(goodsList);
        }
        merVerifyCouponGetVo.setMemberCouponId(memberCoupon.getId());
        Coupon coupon = couponService.getById(memberCoupon.getCouponId());
        // 设置优惠券来源
        if (coupon.getCouponFrom() == 1) {
            merVerifyCouponGetVo.setCouponFrom("平台");
        } else {
            merVerifyCouponGetVo.setCouponFrom("商户");
        }
        return merVerifyCouponGetVo;
    }
    /**
     * @description  核销优惠券
     * @author  jqs
     * @date    2023/6/28 11:44
     * @param memberCouponId
     * @return  MerVerifyCouponGetVo
     */
    @Override
    public MerVerifyCouponGetVo sureVerifyCoupon(String memberCouponId){
        MemberCoupon memberCoupon = this.getById(memberCouponId);
        if(memberCoupon==null||memberCoupon.getDelFlag()==1){
            throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
        }
        if(memberCoupon.getCouponStatus()==0){
@@ -69,12 +121,22 @@
        }
        MerVerifyCouponGetVo merVerifyCouponGetVo = new MerVerifyCouponGetVo();
        merVerifyCouponGetVo.setUserId(memberCoupon.getUserId());
        merVerifyCouponGetVo.setMemberCoupon(memberCoupon);
        String relGoodsIds = memberCoupon.getRelGoodsIds();
        List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData();
        if(goodsList!=null){
            merVerifyCouponGetVo.setGoodsList(goodsList);
        }
        merVerifyCouponGetVo.setMemberCouponId(memberCoupon.getId());
        Coupon coupon = couponService.getById(memberCoupon.getCouponId());
        if (coupon.getCouponFrom()==1) {
            merVerifyCouponGetVo.setCouponFrom("平台");
        } else {
            merVerifyCouponGetVo.setCouponFrom("商户");
        }
        memberCoupon.setCouponStatus(2);
        memberCoupon.setUseTime(new Date());
        this.saveOrUpdate(memberCoupon);
        merVerifyCouponGetVo.setMemberCoupon(memberCoupon);
        return merVerifyCouponGetVo;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberTotalServiceImpl.java
@@ -1,9 +1,10 @@
package com.ruoyi.member.service.impl.member;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.member.domain.pojo.member.MemberTotal;
import com.ruoyi.member.mapper.member.MemberTotalMapper;
import com.ruoyi.member.service.member.MemberTotalService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +18,66 @@
@Service
public class MemberTotalServiceImpl extends ServiceImpl<MemberTotalMapper, MemberTotal> implements MemberTotalService {
    /**
     * @description  会员统计变动
     * @author  jqs
     * @date    2023/6/28 14:34
     * @param memberTotalChangeDto
     * @return  void
     */
    @Override
    public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto){
        MemberTotal memberTotal = this.getById(memberTotalChangeDto.getMemberId());
        //积分变动
        if(memberTotalChangeDto.getChangeIntegral()!=null){
            if(memberTotalChangeDto.getTypeIntegral()==2){
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()-memberTotalChangeDto.getChangeIntegral());
                memberTotal.setUsedIntegral(memberTotal.getUsedIntegral()+memberTotalChangeDto.getChangeIntegral());
            }else{
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+memberTotalChangeDto.getChangeIntegral());
                memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+memberTotalChangeDto.getChangeIntegral());
            }
        }
        //消费变动
        if(memberTotalChangeDto.getPayMoney()!=null){
            memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney()));
            memberTotal.setTotalPayCount(memberTotal.getTotalPayCount()+1);
            memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney());
            memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime());
        }
        //服务次数变动
        if(memberTotalChangeDto.getServiceCount()!=null){
            if(memberTotalChangeDto.getTypeService()==2){
                memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount()-memberTotalChangeDto.getServiceCount());
                memberTotal.setUsedServiceCount(memberTotal.getUsedServiceCount()+memberTotalChangeDto.getServiceCount());
            }else{
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+memberTotalChangeDto.getServiceCount());
                memberTotal.setTotalServiceCount(memberTotal.getTotalServiceCount()+memberTotalChangeDto.getServiceCount());
            }
        }
        //跟进时间
        if(memberTotalChangeDto.getNextTaskTime()!=null){
            memberTotal.setNextTaskTime(memberTotalChangeDto.getNextTaskTime());
        }
        //活动次数变动
        if(memberTotalChangeDto.getActivityTime()!=null){
            memberTotal.setTotalActivityCount(memberTotal.getTotalActivityCount()+1);
            memberTotal.setLastActivityTime(memberTotalChangeDto.getActivityTime());
        }
        //订单数量变动
        if(memberTotalChangeDto.getCycleOrderChange()!=null){
            memberTotal.setTotalCycleOrder(memberTotal.getTotalCycleOrder()+memberTotalChangeDto.getCycleOrderChange());
        }
        if(memberTotalChangeDto.getExperienceOrderChange()!=null){
            memberTotal.setTotalExperienceOrder(memberTotal.getTotalExperienceOrder()+memberTotalChangeDto.getExperienceOrderChange());
        }
        if(memberTotalChangeDto.getServiceOrderChange()!=null){
            memberTotal.setTotalServiceOrder(memberTotal.getTotalServiceOrder()+memberTotalChangeDto.getServiceOrderChange());
        }
        if(memberTotalChangeDto.getGoodsOrderChange()!=null){
            memberTotal.setTotalGoodsOrder(memberTotal.getTotalGoodsOrder()+memberTotalChangeDto.getGoodsOrderChange());
        }
        this.saveOrUpdate(memberTotal);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
@@ -33,4 +33,13 @@
     * @return  void
     */
    MerVerifyCouponGetVo getVerifyCoupon(String verifyCoupon);
    /**
     * @description  核销优惠券
     * @author  jqs
     * @date    2023/6/28 11:44
     * @param memberCouponId
     * @return  MerVerifyCouponGetVo
     */
    MerVerifyCouponGetVo sureVerifyCoupon(String memberCouponId);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberTotalService.java
@@ -1,7 +1,8 @@
package com.ruoyi.member.service.member;
import com.ruoyi.member.domain.pojo.member.MemberTotal;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.member.domain.pojo.member.MemberTotal;
import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto;
/**
 * <p>
@@ -13,4 +14,13 @@
 */
public interface MemberTotalService extends IService<MemberTotal> {
    /**
     * @description  会员统计变动
     * @author  jqs
     * @date    2023/6/28 14:34
     * @param memberTotalChangeDto
     * @return  void
     */
    void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
@@ -75,6 +75,15 @@
        return R.ok(merVerifyOrderVo);
    }
    @RequestMapping(value = "/sureVerifyCoupon", method = RequestMethod.POST)
    @ApiOperation(value = "核销优惠券")
    public R<MerVerifyCouponVo> sureVerifyCoupon(@RequestBody MerVerifyCouponDto merVerifyCouponDto) {
        Long userId = SecurityUtils.getUserId();
        merVerifyCouponDto.setUserId(userId);
        MerVerifyCouponVo merVerifyCouponVo = orderService.sureVerifyCoupon(merVerifyCouponDto);
        return R.ok(merVerifyCouponVo);
    }
    @RequestMapping(value = "/pageMerMemberNoClearOrder", method = RequestMethod.POST)
    @ApiOperation(value = "分页获取用户未结清订单")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyCouponDto.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.order.domain.dto;
import com.ruoyi.system.api.domain.dto.MgtBaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MerVerifyCouponDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/28 11:22
 * @Version 1.0
 */
@Data
public class MerVerifyCouponDto extends MgtBaseDto {
    @ApiModelProperty(value = "优惠券id")
    private String memberCouponId;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/ConsumerGoods.java
@@ -123,6 +123,16 @@
     */
    @TableField("goods_nurses")
    private String goodsNurses;
    /**
     * 来源1订单2优惠券3奖品
     */
    @TableField("source_from")
    private Integer sourceFrom;
    /**
     * 用户优惠券id
     */
    @TableField("member_coupon_id")
    private String memberCouponId;
    @Override
    protected Serializable pkVal() {
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerVerifyCouponVo.java
@@ -22,9 +22,13 @@
    @ApiModelProperty(value = "用户电话")
    private String userMobile;
    @ApiModelProperty(value = "优惠券id")
    private String memberCouponId;
    @ApiModelProperty(value = "优惠券来源")
    private String couponFrom;
    @ApiModelProperty(value = "优惠券来源")
    private List<MerCouponGoodsListVo> goodsList;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -8,29 +8,29 @@
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
import com.ruoyi.order.domain.pojo.order.Order;
import com.ruoyi.order.domain.pojo.order.OrderGoods;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.order.mapper.order.OrderMapper;
import com.ruoyi.order.service.order.ConsumerGoodsService;
import com.ruoyi.order.service.order.OrderGoodsService;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.order.service.order.UserServiceRecordService;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.service.*;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.goods.Goods;
import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
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.poji.sys.SysUser;
import com.ruoyi.order.mapper.order.OrderMapper;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.service.*;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -577,12 +577,20 @@
        this.saveOrUpdate(order);
        //创建服务商品
        List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId);
        StringJoiner goodsIdSj = new StringJoiner(",");
        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
            goodsIdSj.add(appUserOrderGoodsPageVo.getGoodsId());
        }
        String goodsIds = goodsIdSj.toString();
        List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIds).getData();
        Map<String,Goods> goodsMap = goodsList.stream()
                .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
        ConsumerGoods consumerGoods;
        String consumerGoodsId;
        Goods goods;
        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
            consumerGoods = new ConsumerGoods();
            goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData();
            goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
            consumerGoodsId = IdUtils.simpleUUID();
            consumerGoods.setConsumerGoodsId(consumerGoodsId);
            consumerGoods.setDelFlag(0);
@@ -601,6 +609,7 @@
            consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
            consumerGoods.setGoodsNurses(goods.getGoodsNurses());
            consumerGoods.setSourceFrom(1);
            consumerGoodsService.save(consumerGoods);
        }
        //生成返回
@@ -623,6 +632,70 @@
        merVerifyOrderVo.setUserName(sysUser.getNickName());
        merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
        return merVerifyOrderVo;
    }
    /**
     * @description  确认核销优惠券
     * @author  jqs
     * @date    2023/6/28 11:26
     * @param merVerifyCouponDto
     * @return  MerVerifyCouponVo
     */
    @Override
    public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto){
        MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData();
        // 创建MerVerifyCouponVo对象
        MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
        // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
        List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
        Long userId = verifyCouponGetVo.getUserId();
        // 调用remoteMemberService的getMember方法获取Member对象
        Member member = remoteMemberService.getMember(userId).getData();
        merVerifyCouponVo.setUserName(member.getNickName());
        merVerifyCouponVo.setUserMobile(member.getMobile());
        merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
        // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性
        List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream()
                .map(goods -> {
                    MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo();
                    merCouponGoods.setGoodsId(goods.getGoodsId());
                    merCouponGoods.setGoodsName(goods.getGoodsName());
                    // 设置其他属性
                    return merCouponGoods;
                })
                .collect(Collectors.toList());
        // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
        merVerifyCouponVo.setGoodsList(merCouponGoodsList);
        MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon();
        //生成服务
        ConsumerGoods consumerGoods;
        String consumerGoodsId;
        GoodsFile goodsFile;
        for (Goods goods : goodsList) {
            consumerGoods = new ConsumerGoods();
            consumerGoodsId = IdUtils.simpleUUID();
            consumerGoods.setConsumerGoodsId(consumerGoodsId);
            consumerGoods.setDelFlag(0);
            consumerGoods.setServiceStatus(1);
            consumerGoods.setShopId(memberCoupon.getShopId());
            consumerGoods.setUserId(memberCoupon.getUserId());
            consumerGoods.setSourceFrom(2);
            consumerGoods.setMemberCouponId(memberCoupon.getId());
            consumerGoods.setGoodsId(goods.getGoodsId());
            consumerGoods.setGoodsName(goods.getGoodsName());
            consumerGoods.setCycleNumFlag(goods.getCycleNumFlag());
            consumerGoods.setServiceNum(goods.getServiceNum());
            consumerGoods.setUsedNum(0);
            consumerGoods.setGoodsType(goods.getGoodsType());
            consumerGoods.setCreateTime(new Date());
            consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData();
            consumerGoods.setGoodsPicture(goodsFile.getFileUrl());
            consumerGoods.setGoodsNurses(goods.getGoodsNurses());
            consumerGoods.setSourceFrom(1);
            consumerGoodsService.save(consumerGoods);
        }
        return merVerifyCouponVo;
    }
    /**
@@ -1843,9 +1916,29 @@
     */
    @Override
    public MerVerifyCouponVo verifyCoupon(String verifyCode) {
        // 创建MerVerifyCouponVo对象
        MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
        // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
        MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(verifyCode).getData();
        List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
        Long userId = verifyCouponGetVo.getUserId();
        // 调用remoteMemberService的getMember方法获取Member对象
        Member member = remoteMemberService.getMember(userId).getData();
        merVerifyCouponVo.setUserName(member.getNickName());
        merVerifyCouponVo.setUserMobile(member.getMobile());
        merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom());
        // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性
        List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream()
                .map(goods -> {
                    MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo();
                    merCouponGoods.setGoodsId(goods.getGoodsId());
                    merCouponGoods.setGoodsName(goods.getGoodsName());
                    // 设置其他属性
                    return merCouponGoods;
                })
                .collect(Collectors.toList());
        // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList
        merVerifyCouponVo.setGoodsList(merCouponGoodsList);
        return merVerifyCouponVo;
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -89,6 +89,15 @@
    MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto);
    /**
     * @description  确认核销优惠券
     * @author  jqs
     * @date    2023/6/28 11:26
     * @param merVerifyCouponDto
     * @return  MerVerifyCouponVo
     */
    MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto);
    /**
     * 收银未结清订单列表
     * @param page
     * @param merMemberNoClearOrderDto
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -4,14 +4,9 @@
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.shop.domain.pojo.shop.ShopRelUser;
import com.ruoyi.shop.domain.pojo.shop.ShopStaff;
import com.ruoyi.shop.service.shop.ShopRelUserService;
import com.ruoyi.shop.service.shop.ShopService;
import com.ruoyi.shop.service.shop.ShopStaffService;
import com.ruoyi.shop.service.shop.ShopSuggestService;
import com.ruoyi.shop.service.shop.*;
import com.ruoyi.shop.service.task.ShopTaskService;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
@@ -58,6 +53,9 @@
    @Resource
    private ShopTaskService shopTaskService;
    @Resource
    private ShopTotalService shopTotalService;
    /**
@@ -189,4 +187,19 @@
        List<Long> shopIdList = shopService.listShopIdByPlTotal(mgtBasePlatformDto);
        return R.ok(shopIdList);
    }
    /**
     * @description  更新商户统计
     * @author  jqs
     * @date    2023/6/28 17:52
     * @param shopTotalChangeDto
     * @return  R
     */
    @PostMapping("/changeShopTotal")
    public R changeShopTotal(@RequestBody ShopTotalChangeDto shopTotalChangeDto)
    {
        shopTotalService.changeShopTotal(shopTotalChangeDto);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java
@@ -110,6 +110,14 @@
        return R.ok();
    }
    @RequestMapping(value = "/transferMgtShop", method = RequestMethod.POST)
    @Log(title = "商户管理", businessType = BusinessType.UPDATE,operContent = "转移客户")
    @ApiOperation(value = "转移客户")
    public R transferMgtShop(@RequestBody MgtTransferShopDto mgtTransferShopDto) {
        shopService.transferMgtShop(mgtTransferShopDto);
        return R.ok();
    }
    @RequestMapping(value = "/terminateMgtCooperation", method = RequestMethod.POST)
    @Log(title = "商户管理", businessType = BusinessType.UPDATE,operContent = "终止合作")
    @ApiOperation(value = "终止合作")
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopPageDto.java
@@ -4,8 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * @author jqs34
 * @ClassName MgtShopPageDto
@@ -31,8 +29,11 @@
    @ApiModelProperty(value = "店铺地址区code")
    private String shopAreaCode;
    @ApiModelProperty(value = "签约时间")
    private String signTime;
    @ApiModelProperty(value = "签约开始时间")
    private String signStartTime;
    @ApiModelProperty(value = "签约结束时间")
    private String signEndTime;
    @ApiModelProperty(value = "签约省code")
    private String signProvinceCode;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtTransferShopDto.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.shop.domain.dto;
import com.ruoyi.system.api.domain.dto.MgtBaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MgtTransferShopDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/28 16:34
 * @Version 1.0
 */
@Data
public class MgtTransferShopDto extends MgtBaseDto {
    @ApiModelProperty(value = "商户id")
    private Long shopId;
    @ApiModelProperty("转移用户id")
    private Long transferUserId;
    @ApiModelProperty("转移备注")
    private String transferRemark;
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/shop/ShopTotal.java
File was renamed from ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/ShopTotal.java
@@ -1,4 +1,4 @@
package com.ruoyi.shop.domain.pojo;
package com.ruoyi.shop.domain.pojo.shop;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableField;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopRelTagMapper.java
@@ -21,13 +21,13 @@
     * 通过商户id删除关联
     * @param shopId
     */
    void deleteByShopId(@Param("param") Long shopId);
    void deleteByShopId(@Param("shopId") Long shopId);
    /**
     * 获取商户标签
     * @param shopId
     * @return
     */
    List<MgtShopTagVo> listShopTagVo(@Param("param")Long shopId);
    List<MgtShopTagVo> listShopTagVo(@Param("shopId")Long shopId);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopTotalMapper.java
@@ -1,6 +1,6 @@
package com.ruoyi.shop.mapper.shop;
import com.ruoyi.shop.domain.pojo.ShopTotal;
import com.ruoyi.shop.domain.pojo.shop.ShopTotal;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopRelTagServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.shop.service.impl.shop;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.StringUtils;
@@ -91,4 +92,16 @@
        return mgtShopTagVoList;
    }
    /**
     * 通过商户id删除关联
     * @param tagId
     */
    @Override
    public void deleteByTagId(Long tagId){
        LambdaUpdateWrapper<ShopRelTag> updateWrapper = new LambdaUpdateWrapper();
        updateWrapper.set(ShopRelTag::getDelFlag,1);
        updateWrapper.eq(ShopRelTag::getDelFlag,0);
        updateWrapper.eq(ShopRelTag::getTagId,tagId);
        this.update(updateWrapper);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopRelUserServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.shop.service.impl.shop;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.shop.domain.pojo.shop.ShopRelUser;
import com.ruoyi.shop.mapper.shop.ShopRelUserMapper;
@@ -58,4 +59,17 @@
        queryWrapper.eq(ShopRelUser::getDelFlag, 0).eq(ShopRelUser::getUserId, userId);
        return this.getOne(queryWrapper,false);
    }
    /**
     * 通过用户id删除关联
     * @param userId
     */
    @Override
    public void deleteByUserId(Long userId){
        LambdaUpdateWrapper<ShopRelUser> updateWrapper = new LambdaUpdateWrapper();
        updateWrapper.set(ShopRelUser::getDelFlag,1);
        updateWrapper.eq(ShopRelUser::getUserId,userId);
        updateWrapper.eq(ShopRelUser::getDelFlag,0);
        this.update(updateWrapper);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -7,10 +7,11 @@
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.shop.domain.dto.*;
import com.ruoyi.shop.domain.pojo.ShopTotal;
import com.ruoyi.shop.domain.pojo.shop.ShopTotal;
import com.ruoyi.shop.domain.pojo.shop.*;
import com.ruoyi.shop.domain.pojo.task.ShopFile;
import com.ruoyi.shop.domain.vo.*;
@@ -29,7 +30,6 @@
import com.ruoyi.system.api.service.RemoteMemberService;
import com.ruoyi.system.api.service.RemoteOrderService;
import com.ruoyi.system.api.service.RemoteUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -98,6 +98,13 @@
    @Resource
    private MemberTaskService memberTaskService;
    @Resource
    private ShopTransferRecordService shopTransferRecordService;
    @Resource
    private RemoteUserService remoteUserService;
    /**
     * 获取商户详情
     * @param shopId
@@ -142,6 +149,21 @@
        Shop shop = new Shop();
        Boolean newShop = false;
        BigDecimal zeroBig = BigDecimal.ZERO;
        //验证关联账号唯一
        String relUserIds = mgtEditShopDto.getRelUserIds();
        if(StringUtils.isNotBlank(relUserIds)) {
            String[] relUserIdArray = relUserIds.split(",");
            ShopRelUser shopRelUser;
            Long userId;
            for (String str : relUserIdArray) {
                userId = Long.valueOf(str);
                shopRelUser = shopRelUserService.getByUserId(userId);
                if(shopRelUser!=null){
                    throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE);
                }
            }
        }
        //验证商户名唯一
        Shop shopSame = this.getOne(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag,0).eq(Shop::getShopName,mgtEditShopDto.getShopName()));
        if(mgtEditShopDto.getShopId()!=null){
            if(shopSame!=null&&!Objects.equals(shopSame.getShopId(),mgtEditShopDto.getShopId())){
@@ -171,12 +193,12 @@
            newShop = true;
        }
        BeanUtils.copyProperties(mgtEditShopDto,shop);
        this.saveOrUpdate(shop);
        //商户编号
        if(mgtEditShopDto.getShopId()==null){
            String shopNo = CodeFactoryUtil.getShopNo();
            shop.setShopNumber(shopNo);
        }
        this.saveOrUpdate(shop);
        //商户标签
        String shopTagIds = mgtEditShopDto.getShopTagIds();
        if(StringUtils.isNotBlank(shopTagIds)){
@@ -199,13 +221,13 @@
            this.saveOrUpdate(shop);
        }
        //商户归属员工
        if(shop.getBelongUserId()!=null){
        /*if(shop.getBelongUserId()!=null){
            SysUser belongSysUser = sysUserService.getSysUser(shop.getBelongUserId()).getData();
            handleShopStaff(shop.getShopId(),belongSysUser);
        }
        }*/
        //商户关联人员
        String relUserIds = mgtEditShopDto.getRelUserIds();
        if(StringUtils.isNotBlank(relUserIds)){
            shopStaffService.clearShopStaffRelation(shop.getShopId());
            String[] relUserIdArray = relUserIds.split(",");
            ShopRelUser shopRelUser;
            Long userId;
@@ -524,6 +546,40 @@
        this.saveOrUpdate(shop);
    }
    /**
     * @description  转移客户
     * @author  jqs
     * @date    2023/6/28 16:36
     * @param mgtTransferShopDto
     * @return  void
     */
    @Override
    public void transferMgtShop(MgtTransferShopDto mgtTransferShopDto){
        Shop shop = this.getByShopId(mgtTransferShopDto.getShopId());
        if(shop.getBelongUserId()!=null){
            ShopTransferRecord shopTransferRecord = new ShopTransferRecord();
            shopTransferRecord.setDelFlag(0);
            shopTransferRecord.setShopId(shop.getShopId());
            shopTransferRecord.setBeforeUserId(shop.getBelongUserId());
            shopTransferRecord.setAfterUserId(mgtTransferShopDto.getTransferUserId());
            shopTransferRecord.setTransferRemark(mgtTransferShopDto.getTransferRemark());
            shopTransferRecordService.save(shopTransferRecord);
            shopRelUserService.deleteByUserId(shop.getBelongUserId());
        }
        shop.setBelongUserId(mgtTransferShopDto.getTransferUserId());
        this.saveOrUpdate(shop);
        ShopRelUser shopRelUser = new ShopRelUser();
        shopRelUser.setDelFlag(0);
        shopRelUser.setShopId(shop.getShopId());
        shopRelUser.setUserId(mgtTransferShopDto.getTransferUserId());
        SysUser sysUser = remoteUserService.getSysUser(mgtTransferShopDto.getTransferUserId()).getData();
        shopRelUser.setUserMobile(sysUser.getPhonenumber());
        shopRelUser.setUserDeptId(sysUser.getDeptId());
        shopRelUser.setUserName(sysUser.getNickName());
        shopRelUserService.save(shopRelUser);
    }
    /**
     * 获取附近门店
     * @param appNearbyShopDto
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java
@@ -1,10 +1,16 @@
package com.ruoyi.shop.service.impl.shop;
import com.ruoyi.shop.domain.pojo.ShopTotal;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.shop.domain.pojo.shop.ShopTotal;
import com.ruoyi.shop.mapper.shop.ShopTotalMapper;
import com.ruoyi.shop.service.shop.ShopTotalService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
import org.springframework.stereotype.Service;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
 * <p>
@@ -17,4 +23,28 @@
@Service
public class ShopTotalServiceImpl extends ServiceImpl<ShopTotalMapper, ShopTotal> implements ShopTotalService {
    private Lock lock = new ReentrantLock();
    private ExecutorService executor = Executors.newSingleThreadExecutor();
    /**
     * @param shopTotalChangeDto
     * @return void
     * @description 更新商户统计
     */
    @Override
    public void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto) {
        executor.execute(() -> {
            lock.lock();
            try {
                handleShopTotal(shopTotalChangeDto);
            } finally {
                lock.unlock();
            }
        });
    }
    private void handleShopTotal(ShopTotalChangeDto shopTotalChangeDto){
        ShopTotal shopTotal = this.getById(shopTotalChangeDto.getShopId());
        this.saveOrUpdate(shopTotal);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopRelTagService.java
@@ -35,4 +35,10 @@
     * @return
     */
    List<MgtShopTagVo> listShopTagVo(MgtBaseGetDto mgtBaseGetDto);
    /**
     * 通过商户id删除关联
     * @param tagId
     */
    void deleteByTagId(Long tagId);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopRelUserService.java
@@ -34,4 +34,10 @@
     * @return
     */
    ShopRelUser getByUserId(Long userId);
    /**
     * 通过用户id删除关联
     * @param userId
     */
    void deleteByUserId(Long userId);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -75,6 +75,15 @@
    void editShopTag(MgtEditShopTagDto mgtEditShopTagDto);
    /**
     * @description  转移客户
     * @author  jqs
     * @date    2023/6/28 16:36
     * @param mgtTransferShopDto
     * @return  void
     */
    void transferMgtShop(MgtTransferShopDto mgtTransferShopDto);
    /**
     * 获取附近门店
     * @param appNearbyShopDto
     * @return
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopTotalService.java
@@ -1,7 +1,8 @@
package com.ruoyi.shop.service.shop;
import com.ruoyi.shop.domain.pojo.ShopTotal;
import com.ruoyi.shop.domain.pojo.shop.ShopTotal;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
/**
 * <p>
@@ -13,4 +14,12 @@
 */
public interface ShopTotalService extends IService<ShopTotal> {
    /**
     * @description  更新商户统计
     * @author  jqs
     * @date    2023/6/28 17:56
     * @param shopTotalChangeDto
     * @return  void
     */
    void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto);
}
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -321,8 +321,11 @@
        <if test="param.shopAreaCode!=null and param.shopAreaCode!=''">
            AND ts.shop_area_code = #{param.shopAreaCode}
        </if>
        <if test="param.signTime!=null and param.signTime!=''">
            AND ts.sign_time = #{param.signTime}
        <if test="param.signStartTime!=null and param.signStartTime!=''">
            AND ts.sign_time &gt;= #{param.signStartTime}
        </if>
        <if test="param.signEndTime!=null and param.signEndTime!=''">
            AND ts.sign_time &lt;= #{param.signEndTime}
        </if>
        <if test="param.signProvinceCode!=null and param.signProvinceCode!=''">
            AND ts.sign_province_code = #{param.signProvinceCode}
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopRelTagMapper.xml
@@ -62,7 +62,7 @@
    </delete>
    <update id="deleteByShopId">
        UPDATE shop_rel_tag SET del_flag = 1 WHERE shop_id = #{shopId}
        UPDATE t_shop_rel_tag SET del_flag = 1 WHERE shop_id = #{shopId}
    </update>
    <select id="listShopTagVo" resultType="com.ruoyi.shop.domain.vo.MgtShopTagVo">
@@ -71,7 +71,7 @@
        st.tag_name tagName,
        CASE WHEN srt.id IS NULL THEN 0 ELSE 1 END selectFlag
        FROM sys_tag st
        LEFT JOIN shop_rel_tag srt ON srt.tag_id = st.tag_id
        LEFT JOIN t_shop_rel_tag srt ON srt.tag_id = st.tag_id
        WHERE srt.del_flag = 0 AND shop_id = #{shopId}
    </select>
</mapper>