jiangqs
2023-06-30 cbc564a7088503ad8cc7af4e1d2ba417d061e615
联调bug和统计完善
1 文件已复制
1 文件已重命名
68个文件已修改
3个文件已添加
2277 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberTotalChangeDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberTaskSimpleVo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapIntTotalVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapStrTotalVo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPlTotalMemberTotalVo.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteConfigFallbackFactory.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteConfigService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberPageDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberShopTotal.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberBasicFileVo.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberInfoVo.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtArchiveFieldsListVo.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberArchiveFieldsMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberArchiveMapper.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponTotalService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberArchiveFieldsServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberArchiveServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java 525 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberTotalServiceImpl.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberArchiveFieldsService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberArchiveService.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberTotalService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberArchiveFieldsMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberArchiveMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyCouponDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberConsumerGoodsTotalVo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtPlTotalActivityTotalVo.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalActivityTotalVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ConsumerGoodsMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java 212 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 417 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ConsumerGoodsService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/shop/ShopTotal.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtPlTotalShopTotalVo.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/business/MerConfigController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/ConfigController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberTotalChangeDto.java
@@ -17,8 +17,8 @@
public class MemberTotalChangeDto {
    @ApiModelProperty(value = "会员id")
    private String memberId;
    @ApiModelProperty(value = "用户id")
    private Long userId;
    @ApiModelProperty(value = "积分变化")
    private Integer changeIntegral;
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberTaskSimpleVo.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.system.api.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * @ClassName MemberTaskSimpleVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/29 18:22
 * @Version 1.0
 */
@Data
public class MemberTaskSimpleVo {
    @ApiModelProperty(value = "任务时间")
    private Date taskDate;
    @ApiModelProperty("任务内容")
    private String taskContent;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapIntTotalVo.java
File was renamed from ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapTotalVo.java
@@ -11,7 +11,7 @@
 * @Version 1.0
 */
@Data
public class MgtMapTotalVo {
public class MgtMapIntTotalVo {
    @ApiModelProperty(value = "mapKey")
    private String mapKey;
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapStrTotalVo.java
copy from ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapTotalVo.java copy to ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapStrTotalVo.java
File was copied from ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapTotalVo.java
@@ -4,19 +4,18 @@
import lombok.Data;
/**
 * @ClassName MgtNurseTotalVo
 * @ClassName MgtMapStrTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/19 18:06
 * @Date 2023/6/30 11:10
 * @Version 1.0
 */
@Data
public class MgtMapTotalVo {
public class MgtMapStrTotalVo {
    @ApiModelProperty(value = "mapKey")
    private String mapKey;
    @ApiModelProperty(value = "mapValue")
    private Integer mapValue;
    private String mapValue;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPlTotalMemberTotalVo.java
@@ -37,25 +37,25 @@
    private Integer[] ageValue;
    @ApiModelProperty(value = "会员调理")
    private List<MgtMapTotalVo> nurseTotalVos;
    private List<MgtMapIntTotalVo> nurseTotalVos;
    @ApiModelProperty(value = "商品类型")
    private List<MgtMapTotalVo> goodsTypeTotalVos;
    private List<MgtMapIntTotalVo> goodsTypeTotalVos;
    @ApiModelProperty(value = "活跃度")
    private List<MgtMapTotalVo> activenessList;
    private List<MgtMapIntTotalVo> activenessList;
    @ApiModelProperty(value = "来源渠道")
    private List<MgtMapTotalVo> customerSourceList;
    private List<MgtMapIntTotalVo> customerSourceList;
    @ApiModelProperty(value = "消费排行")
    private List<MgtMapTotalVo> memberPayList;
    private List<MgtMapIntTotalVo> memberPayList;
    @ApiModelProperty(value = "商品排行")
    private List<MgtMapTotalVo> memberGoodsRankList;
    private List<MgtMapIntTotalVo> memberGoodsRankList;
    @ApiModelProperty(value = "店铺会员")
    private List<MgtMapTotalVo> shopMemberRankList;
    private List<MgtMapIntTotalVo> shopMemberRankList;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteConfigFallbackFactory.java
@@ -48,13 +48,18 @@
            }
            @Override
            public R<Activeness> getActivenessByName(String name) {
                return R.fail("获取活跃度失败:" + throwable.getMessage());
            }
            @Override
            public R<List<SysTag>> listSysTag(Integer tagType) {
                return R.fail("获取标签失败:" + throwable.getMessage());
            }
            @Override
            public R<List<Activeness>> listActiveness() {
                return R.fail("获取活跃度失败:" + throwable.getMessage());
                return R.fail("获取活跃度列表失败:" + throwable.getMessage());
            }
            @Override
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
@@ -106,6 +106,13 @@
            public R<MgtShopTotalMemberVo> getUserTotalByShopId(List<Long> shopIdlist) {
                return R.fail("通过shopId获取user统计失败:" + throwable.getMessage());
            }
            @Override
            public R changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto) {
                return R.fail("更新会员统计失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java
@@ -1,9 +1,10 @@
package com.ruoyi.system.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import com.ruoyi.system.api.service.RemoteOrderService;
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
@@ -12,6 +13,7 @@
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -47,9 +49,14 @@
            }
            @Override
            public R<List<MgtMapTotalVo>> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto) {
            public R<List<MgtMapIntTotalVo>> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto) {
                return R.fail("获取商户端统计失败:" + throwable.getMessage());
            }
            @Override
            public R<BigDecimal> getMemberUnpaidOrder(MerBaseDto merBaseDto) {
                return R.fail("获取用户未结清金额失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
@@ -4,14 +4,12 @@
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.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtShopIdByCodeVo;
import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.model.QwH5LoginVo;
import com.ruoyi.system.api.model.QwUserDetailDto;
import com.ruoyi.system.api.service.RemoteShopService;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.vo.ShopRelUserVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
@@ -80,7 +78,15 @@
                return R.fail("获取商户列表失败:" + throwable.getMessage());
            }
            @Override
            public R changeShopTotal(ShopTotalChangeDto shopTotalChangeDto) {
                return R.fail("更新商户统计失败:" + throwable.getMessage());
            }
            @Override
            public R<MemberTaskSimpleVo> getLastMemberTask(Long userId) {
                return R.fail("获取最近会员任务失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteConfigService.java
@@ -79,4 +79,14 @@
     */
    @PostMapping("/config/listSimpleUserVo")
    public R<List<MgtSysSimpleUserVo>> listSimpleUserVo(@RequestBody MgtBaseBathDto mgtBaseBathDto);
    /**
     * @description  通过名称获取活跃度
     * @author  jqs
     * @date    2023/6/29 17:20
     * @param name
     * @return  R<Activeness>
     */
    @PostMapping("/getActivenessByName")
    public R<Activeness> getActivenessByName(@RequestBody String name);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
@@ -150,4 +150,17 @@
     */
    @PostMapping("/member/getUserTotalByShopId")
    public R<MgtShopTotalMemberVo> getUserTotalByShopId(@RequestBody List<Long> shopIdlist);
    /**
     * @description  更新会员统计
     * @author  jqs
     * @date    2023/6/28 17:52
     * @param memberTotalChangeDto
     * @return  R
     */
    @PostMapping("/member/changeMemberTotal")
    public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java
@@ -2,16 +2,18 @@
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import com.ruoyi.system.api.factory.RemoteOrderFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.math.BigDecimal;
import java.util.List;
@FeignClient(contextId = "remoteOrderService", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = RemoteOrderFallbackFactory.class)
@@ -38,8 +40,19 @@
     * @author  jqs
     * @date    2023/6/21 15:27
     * @param mgtBasePlatformDto
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    @PostMapping("/order/listMemberGoodsRank")
    public R<List<MgtMapTotalVo>> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto);
    public R<List<MgtMapIntTotalVo>> listMemberGoodsRank(@RequestBody MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  获取用户未支付金额
     * @author  jqs
     * @date    2023/6/29 18:00
     * @param merBaseDto
     * @return  R<BigDecimal>
     */
    @PostMapping("/order/getMemberUnpaidOrder")
    public R<BigDecimal> getMemberUnpaidOrder(@RequestBody MerBaseDto merBaseDto);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
@@ -5,11 +5,9 @@
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.ShopTotalChangeDto;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtShopIdByCodeVo;
import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
import com.ruoyi.system.api.domain.vo.ShopRelUserVo;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.factory.RemoteShopFallbackFactory;
import com.ruoyi.system.api.model.QwH5LoginVo;
import com.ruoyi.system.api.model.QwUserDetailDto;
@@ -90,4 +88,25 @@
     */
    @PostMapping("/shop/listShopIdByPlTotal")
    public R<List<Long>> listShopIdByPlTotal(@RequestBody MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  更新商户统计
     * @author  jqs
     * @date    2023/6/28 17:52
     * @param shopTotalChangeDto
     * @return  R
     */
    @PostMapping("/changeShopTotal")
    public R changeShopTotal(@RequestBody ShopTotalChangeDto shopTotalChangeDto);
    /**
     * @description  获取最近任务
     * @author  jqs
     * @date    2023/6/29 18:25
     * @param userId
     * @return  R<MemberTaskSimpleVo>
     */
    @PostMapping("/member/getLastMemberTask")
    public R<MemberTaskSimpleVo> getLastMemberTask(@RequestBody Long userId);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java
@@ -5,6 +5,7 @@
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.member.domain.dto.*;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.service.member.MemberArchiveFieldsService;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.system.api.domain.dto.MerBaseGetDto;
import io.swagger.annotations.Api;
@@ -32,7 +33,8 @@
    @Resource
    private MemberService memberService;
    @Resource
    private MemberArchiveFieldsService memberArchiveFieldsService;
    @RequestMapping(value = "/pageMerCashMember", method = RequestMethod.POST)
    @ApiOperation(value = "分页获取收银搜索会员列表")
@@ -59,14 +61,17 @@
    /**
     * 未完成
     * @return
     * @description  获取会员信息
     * @author  jqs
     * @date    2023/6/29 18:10
     * @param merBaseGetDto
     * @return  R<MerMemberInfoVo>
     */
    @RequestMapping(value = "/getMerMemberInfo", method = RequestMethod.POST)
    @ApiOperation(value = "获取会员信息")
    public R<MerMemberInfoVo> getMerMemberInfo(@RequestBody MerBaseGetDto merBaseGetDto) {
        Long userId = SecurityUtils.getUserId();
        MerMemberInfoVo merMemberInfo = memberService.getMerMemberInfo(Long.valueOf(merBaseGetDto.getId()));
        MerMemberInfoVo merMemberInfo = memberService.getMerMemberInfo(merBaseGetDto);
        return R.ok(merMemberInfo);
    }
@@ -77,6 +82,13 @@
        Long userId = SecurityUtils.getUserId();
        MerMemberBasicFileVo merMemberBasicFileVo = memberService.getMerMemberBasicFile(Long.valueOf(merBaseGetDto.getId()));
        return R.ok(merMemberBasicFileVo);
    }
    @RequestMapping(value = "/listMerArchiveFields", method = RequestMethod.POST)
    @ApiOperation(value = "商户获取档案字段")
    public R<List<MgtArchiveFieldsListVo>> listMerArchiveFields() {
        List<MgtArchiveFieldsListVo> archiveFieldsListVoList = memberArchiveFieldsService.listMgtArchiveFields();
        return R.ok(archiveFieldsListVoList);
    }
    @RequestMapping(value = "/getMerMemberTags", method = RequestMethod.POST)
@@ -112,4 +124,6 @@
        memberService.editMerMember(merMemberAddDto);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -247,7 +247,7 @@
    @PostMapping("/changeMemberTotal")
    public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto)
    {
        memberTotalService.changeMemberTotal(memberTotalChangeDto);
        memberService.changeMemberTotal(memberTotalChangeDto);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberController.java
@@ -110,7 +110,12 @@
        return R.ok(mgtMemberGetVo);
    }
    @RequestMapping(value = "/listMgtArchiveFields", method = RequestMethod.POST)
    @ApiOperation(value = "平台获取档案字段")
    public R<List<MgtArchiveFieldsListVo>> listMgtArchiveFields() {
        List<MgtArchiveFieldsListVo> archiveFieldsListVoList = memberArchiveFieldsService.listMgtArchiveFields();
        return R.ok(archiveFieldsListVoList);
    }
    @RequestMapping(value = "/pageMgtMemberIntegral", method = RequestMethod.POST)
    @ApiOperation(value = "平台获取用户积分列表")
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberPageDto.java
@@ -4,8 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * @author jqs34
 * @ClassName MerMemberPageDto
@@ -52,7 +50,13 @@
    @ApiModelProperty(value = "会员性别0男1女")
    private Integer memberGender;
    @ApiModelProperty(value = "会员活跃度1.活跃2.中度活跃3.轻度活跃")
    private Integer memberActivity;
    @ApiModelProperty(value = "会员活跃度")
    private String memberActiveness;
    @ApiModelProperty(value = "活跃度开始时间",hidden = true)
    private String actStartDate;
    @ApiModelProperty(value = "活跃度结束时间",hidden = true)
    private String actEndDate;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberShopTotal.java
@@ -121,8 +121,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/domain/vo/MerMemberBasicFileVo.java
@@ -4,7 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@@ -48,4 +47,7 @@
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    @ApiModelProperty(value = "用户档案")
    private List<MemberArchiveVo> achiveList;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberInfoVo.java
@@ -32,6 +32,9 @@
    @ApiModelProperty("用户生日")
    private String birthday;
    @ApiModelProperty(value = "用户类型")
    private String memberType;
    @ApiModelProperty(value = "用户标签")
    private String userTags;
@@ -57,4 +60,8 @@
    @ApiModelProperty(value = "下次跟进任务时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date nextTaskTime;
    @ApiModelProperty(value = "最近消费时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date lastPayTime;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtArchiveFieldsListVo.java
New file
@@ -0,0 +1,38 @@
package com.ruoyi.member.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MgtArchiveFieldsListVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/30 9:37
 * @Version 1.0
 */
@Data
public class MgtArchiveFieldsListVo {
    @ApiModelProperty(value = "档案id")
    private Long afId;
    @ApiModelProperty(value = "字段名称")
    private String fieldName;
    @ApiModelProperty(value = "是否必填0否1是")
    private Integer requiredFlag;
    @ApiModelProperty(value = "字段排序")
    private Integer fieldSort;
    @ApiModelProperty(value = "字段类型1文字输入2数字输入3字母输入4无限制输入6年月日选择7选项")
    private Integer fieldType;
    @ApiModelProperty(value = "字段输入提示")
    private String inputTip;
    @ApiModelProperty(value = "选项值 多个,隔开")
    private String optionValues;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java
@@ -1,6 +1,6 @@
package com.ruoyi.member.domain.vo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -50,17 +50,17 @@
    private Integer[] ageValue;
    @ApiModelProperty(value = "会员调理")
    private List<MgtMapTotalVo> nurseTotalVos;
    private List<MgtMapIntTotalVo> nurseTotalVos;
    @ApiModelProperty(value = "商品类型")
    private List<MgtMapTotalVo> goodsTypeTotalVos;
    private List<MgtMapIntTotalVo> goodsTypeTotalVos;
    @ApiModelProperty(value = "活跃度")
    private List<MgtMapTotalVo> activenessList;
    private List<MgtMapIntTotalVo> activenessList;
    @ApiModelProperty(value = "来源渠道")
    private List<MgtMapTotalVo> customerSourceList;
    private List<MgtMapIntTotalVo> customerSourceList;
    @ApiModelProperty(value = "消费排行")
    private List<MgtMapTotalVo> memberPayList;
    private List<MgtMapIntTotalVo> memberPayList;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java
@@ -51,4 +51,15 @@
     * @return  List<MgtCouponAuditPageVo>
     */
    List<MgtCouponAuditPageVo> pageMgtAuditCoupon(Page page, @Param("param")MgtCouponAuditPageDto mgtCouponAuditPageDto);
    /**
     * @description  更新优惠券统计
     * @author  jqs
     * @date    2023/6/29 11:56
     * @param couponId
     * @param sendTotal
     * @param sendPerson
     * @return  void
     */
    void updateCouponTotal( @Param("couponId")String couponId, @Param("sendTotal")Integer sendTotal, @Param("sendPerson")Integer sendPerson);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberArchiveFieldsMapper.java
@@ -2,6 +2,9 @@
import com.ruoyi.member.domain.pojo.member.MemberArchiveFields;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.member.domain.vo.MgtArchiveFieldsListVo;
import java.util.List;
/**
 * <p>
@@ -13,4 +16,12 @@
 */
public interface MemberArchiveFieldsMapper extends BaseMapper<MemberArchiveFields> {
    /**
     * @description  平台获取档案字段
     * @author  jqs
     * @date    2023/6/30 9:39
     * @param
     * @return  List<MgtArchiveFieldsListVo>
     */
    List<MgtArchiveFieldsListVo> listMgtArchiveFields();
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberArchiveMapper.java
@@ -18,9 +18,18 @@
public interface MemberArchiveMapper extends BaseMapper<MemberArchive> {
    /**
     * 获取用户档案
     * 获取用户档案去除空信息
     * @param userId
     * @return
     */
    List<MemberArchiveVo> listVoByUserId(@Param("userId") Long userId);
    List<MemberArchiveVo> listMgtVoByUserId(@Param("userId") Long userId);
    /**
     * @description
     * @author  jqs
     * @date    2023/6/30 11:18
     * @param userId
     * @return  List<MemberArchiveVo>
     */
    List<MemberArchiveVo> listMerVoByUserId(@Param("userId")Long userId);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
@@ -11,7 +11,7 @@
import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
import com.ruoyi.system.api.domain.dto.MgtUserIdByKeywordDto;
import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import com.ruoyi.system.api.domain.vo.MgtPlTotalMemberTotalVo;
import com.ruoyi.system.api.domain.vo.MgtSimpleMemberVo;
import org.apache.ibatis.annotations.Param;
@@ -160,7 +160,7 @@
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtMapTotalVo> getTotalMemberTotalNurse(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    List<MgtMapIntTotalVo> getTotalMemberTotalNurse(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    /**
@@ -170,7 +170,7 @@
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtMapTotalVo> getTotalMemberTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    List<MgtMapIntTotalVo> getTotalMemberTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    /**
    * @description getTotalMemberTotalActiveness
@@ -190,7 +190,7 @@
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtMapTotalVo> getTotalMemberRankPay(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    List<MgtMapIntTotalVo> getTotalMemberRankPay(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    /**
@@ -200,7 +200,7 @@
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtMapTotalVo> getTotalMemberRankCustomerSource(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    List<MgtMapIntTotalVo> getTotalMemberRankCustomerSource(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    /**
     * @description
@@ -237,7 +237,7 @@
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtMapTotalVo> getPlTotalMemberTotalNurse(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> getPlTotalMemberTotalNurse(@Param("param") MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  会员人数统计
@@ -246,7 +246,7 @@
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtMapTotalVo> getPlTotalMemberTotalGoodsType(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> getPlTotalMemberTotalGoodsType(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description getTotalMemberTotalActiveness
@@ -266,7 +266,7 @@
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtMapTotalVo> getPlTotalMemberRankPay(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> getPlTotalMemberRankPay(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  会员人数统计
@@ -275,16 +275,16 @@
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtMapTotalVo> getPlTotalMemberRankCustomerSource(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> getPlTotalMemberRankCustomerSource(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  
     * @author  jqs
     * @date    2023/6/21 14:35
     * @param mgtBasePlatformDto
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapTotalVo> getPlTotalMemberRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> getPlTotalMemberRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  通过shopId获取userId
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponTotalService.java
@@ -1,7 +1,7 @@
package com.ruoyi.member.service.coupon;
import com.ruoyi.member.domain.pojo.coupon.CouponTotal;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.member.domain.pojo.coupon.CouponTotal;
/**
 * <p>
@@ -13,4 +13,7 @@
 */
public interface CouponTotalService extends IService<CouponTotal> {
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -320,7 +320,9 @@
            List<MemberCoupon> memberCouponList = new ArrayList<>();
            MemberCoupon memberCoupon;
            Integer sendTotal = 0;
            Integer sendPerson = 0;
            String memberCouponId;
            Integer sendUserTotal;
            for(Long userId : userIdList){
                memberCouponId = IdUtils.simpleUUID();
                memberCoupon = new MemberCoupon();
@@ -353,14 +355,18 @@
                }
                memberCouponList.add(memberCoupon);
                sendTotal = sendTotal + 1;
                if(coupon.getSendType()==1){
                   sendUserTotal = memberCouponService.totalMemberCouponByUserAndCoupon(userId,coupon.getCouponId());
                   if(sendUserTotal!=null&&sendUserTotal>0){
                   }else{
                       sendPerson = sendPerson + 1;
                   }
                }
            }
            memberCouponService.saveBatch(memberCouponList);
            //处理优惠券统计
            if(sendTotal>0){
                CouponTotal couponTotal = couponTotalService.getById(coupon.getCouponId());
                couponTotal.setSendCount(couponTotal.getSendCount()+sendTotal);
                couponTotal.setSendUserCount(couponTotal.getSendUserCount()+sendTotal);
                couponTotalService.saveOrUpdate(couponTotal);
                couponMapper.updateCouponTotal(coupon.getCouponId(),sendTotal,sendPerson);
            }
        }
    }
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberArchiveFieldsServiceImpl.java
@@ -2,10 +2,14 @@
import com.ruoyi.member.domain.dto.MgtArchiveFieldsEditDto;
import com.ruoyi.member.domain.pojo.member.MemberArchiveFields;
import com.ruoyi.member.domain.vo.MgtArchiveFieldsListVo;
import com.ruoyi.member.mapper.member.MemberArchiveFieldsMapper;
import com.ruoyi.member.service.member.MemberArchiveFieldsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
@@ -18,6 +22,9 @@
@Service
public class MemberArchiveFieldsServiceImpl extends ServiceImpl<MemberArchiveFieldsMapper, MemberArchiveFields> implements MemberArchiveFieldsService {
    @Resource
    private MemberArchiveFieldsMapper memberArchiveFieldsMapper;
    /**
     * @description  编辑会员档案字段
@@ -47,4 +54,16 @@
        // 保存或更新会员档案字段信息
        this.saveOrUpdate(memberArchiveFields);
    }
    /**
     * @description  平台获取档案字段
     * @author  jqs
     * @date    2023/6/30 9:39
     * @param
     * @return  List<MgtArchiveFieldsListVo>
     */
    @Override
    public List<MgtArchiveFieldsListVo> listMgtArchiveFields(){
        return memberArchiveFieldsMapper.listMgtArchiveFields();
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberArchiveServiceImpl.java
@@ -25,12 +25,22 @@
    private MemberArchiveMapper memberArchiveMapper;
    /**
     * 获取用户档案去除空信息
     * @param userId
     * @return
     */
    @Override
    public List<MemberArchiveVo> listMgtVoByUserId(Long userId){
        return memberArchiveMapper.listMgtVoByUserId(userId);
    }
    /**
     * 获取用户档案
     * @param userId
     * @return
     */
    @Override
    public List<MemberArchiveVo> listVoByUserId(Long userId){
        return memberArchiveMapper.listVoByUserId(userId);
    public List<MemberArchiveVo> listMerVoByUserId(Long userId){
        return memberArchiveMapper.listMerVoByUserId(userId);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -1,10 +1,9 @@
package com.ruoyi.member.service.impl.member;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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;
@@ -35,8 +34,6 @@
    @Resource
    private RemoteGoodsService remoteGoodsService;
    @Resource
    private CouponService couponService;
    /**
     * @description: TODO
@@ -86,12 +83,10 @@
            merVerifyCouponGetVo.setGoodsList(goodsList);
        }
        merVerifyCouponGetVo.setMemberCouponId(memberCoupon.getId());
        Coupon coupon = couponService.getById(memberCoupon.getCouponId());
        // 设置优惠券来源
        if (coupon.getCouponFrom() == 1) {
            merVerifyCouponGetVo.setCouponFrom("平台");
        } else {
        if (memberCoupon.getShopId()!=null&&memberCoupon.getShopId()>0) {
            merVerifyCouponGetVo.setCouponFrom("商户");
        } else {
            merVerifyCouponGetVo.setCouponFrom("平台");
        }
        return merVerifyCouponGetVo;
    }
@@ -127,11 +122,10 @@
            merVerifyCouponGetVo.setGoodsList(goodsList);
        }
        merVerifyCouponGetVo.setMemberCouponId(memberCoupon.getId());
        Coupon coupon = couponService.getById(memberCoupon.getCouponId());
        if (coupon.getCouponFrom()==1) {
            merVerifyCouponGetVo.setCouponFrom("平台");
        } else {
        if (memberCoupon.getShopId()!=null&&memberCoupon.getShopId()>0) {
            merVerifyCouponGetVo.setCouponFrom("商户");
        } else {
            merVerifyCouponGetVo.setCouponFrom("平台");
        }
        memberCoupon.setCouponStatus(2);
        memberCoupon.setUseTime(new Date());
@@ -139,4 +133,21 @@
        merVerifyCouponGetVo.setMemberCoupon(memberCoupon);
        return merVerifyCouponGetVo;
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/6/29 11:42
     * @param userId
     * @param couponId
     * @return  Integer
     */
    @Override
    public Integer totalMemberCouponByUserAndCoupon(Long userId,String couponId){
        LambdaQueryWrapper<MemberCoupon> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MemberCoupon::getUserId,userId);
        queryWrapper.eq(MemberCoupon::getCouponId,couponId);
        Integer total = this.count(queryWrapper);
        return total;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -17,7 +17,6 @@
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.member.domain.dto.*;
import com.ruoyi.member.domain.pojo.member.IntegralRecord;
import com.ruoyi.member.domain.pojo.member.MemberNurse;
import com.ruoyi.member.domain.pojo.member.MemberTotal;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.member.MemberMapper;
@@ -115,18 +114,17 @@
     * @version 1.0
     */
    @Override
    public Member getByUserId(Long userId){
    public Member getByUserId(Long userId) {
        Member member = memberMapper.selectMemberByUserId(userId);
        return member;
    }
    /**
     *
     * @param appMiniLoginDto
     * @return
     */
    @Override
    public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto){
    public AppMiniLoginVo getMemberByCode(AppMiniLoginDto appMiniLoginDto) {
        AppMiniLoginVo appMiniLoginVo = new AppMiniLoginVo();
        WxMaJscode2SessionResult session = null;
@@ -140,38 +138,39 @@
            e.printStackTrace();
            return null;
        }
        if(session!=null&& StringUtils.isNotBlank(session.getOpenid())){
        if (session != null && StringUtils.isNotBlank(session.getOpenid())) {
            unionid = session.getUnionid();
            openid = session.getOpenid();
            sessionKey = session.getSessionKey();
            //获取用户
            Member member = memberMapper.getOneByMiniOpenid(openid);
            SysUser sysUser = null;
            if(member!=null){
            if (member != null) {
                sysUser = sysUserService.getSysUser(member.getUserId()).getData();
            }
            appMiniLoginVo.setMiniOpenid(openid);
            appMiniLoginVo.setWxUnionid(unionid);
            appMiniLoginVo.setSysUser(sysUser);
            appMiniLoginVo.setSessionKey(sessionKey);
            redisService.setCacheObject(SecurityConstant.SESSION_KEY+openid,sessionKey,1L,TimeUnit.DAYS);
            redisService.setCacheObject(SecurityConstant.SESSION_KEY + openid, sessionKey, 1L, TimeUnit.DAYS);
        }
        log.info("appMiniLoginVo"+appMiniLoginVo.toString());
        log.info("appMiniLoginVo" + appMiniLoginVo.toString());
        return appMiniLoginVo;
    }
    /**
     * 小程序注册
     *
     * @param appUserRegisterDto
     * @return
     */
    @Override
    public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto){
    public AppMiniRegisterVo miniRegister(AppMiniRegisterDto appUserRegisterDto) {
        AppMiniRegisterVo appUserRegisterVo = new AppMiniRegisterVo();
        String mobile = null;
        //获取code接口在redis里存放的sessionkey用于解密
        String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY+ appUserRegisterDto.getMiniOpenid());
        if(StringUtils.isBlank(sessionkey)){
        String sessionkey = redisService.getCacheObject(SecurityConstant.SESSION_KEY + appUserRegisterDto.getMiniOpenid());
        if (StringUtils.isBlank(sessionkey)) {
            throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN);
        }
        try {
@@ -204,18 +203,18 @@
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(StringUtils.isBlank(mobile)){
        if (StringUtils.isBlank(mobile)) {
            return null;
        }
        //判断openid是否被其他手机号占用
        Member checkMember = memberMapper.getOneByMiniOpenid(appUserRegisterDto.getMiniOpenid());
        if(checkMember!=null&&!checkMember.getMobile().equals(mobile)){
        if (checkMember != null && !checkMember.getMobile().equals(mobile)) {
            throw new ServiceException("微信号换绑手机需联系客服");
        }
        Member member = memberMapper.selectMemberByMobile(mobile);
        SysUser sysUser;
        //获取用户为空则新建
        if(member == null){
        if (member == null) {
            //创建新用户
            String memberId = IdUtils.simpleUUID();
            sysUser = new SysUser();
@@ -240,12 +239,12 @@
            member.setCreateTime(new Date());
            member.setMobile(mobile);
            initMemberTotal(memberId);
        }else{
        } else {
            sysUser = sysUserService.getSysUser(member.getUserId()).getData();
        }
        member.setWxUnionid(appUserRegisterDto.getWxUnionid());
        member.setMiniOpenid(appUserRegisterDto.getMiniOpenid());
        log.info("member-----------------"+member.toString());
        log.info("member-----------------" + member.toString());
        this.saveOrUpdate(member);
        appUserRegisterVo.setMobile(mobile);
        appUserRegisterVo.setNickName(member.getNickName());
@@ -257,19 +256,19 @@
    public static String getAccessTokenByWX() throws Exception {
        String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential";
        Map<String, String> headers  = new HashMap<>(8);
        Map<String, String> headers = new HashMap<>(8);
        HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null);
        return EntityUtils.toString(response.getEntity());
    }
    public static String getMobileByWX(String accessToken,  String code) throws Exception {
    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");
        Map<String, String> querys = new HashMap<>(16);
        Map<String, String> bodys = new HashMap<>(16);
        querys.put("access_token", accessToken );
        querys.put("access_token", accessToken);
        bodys.put("code", code);
        String body = JSONObject.toJSONString(bodys);
        String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber";
@@ -279,11 +278,12 @@
    /**
     * 获取用户信息
     *
     * @param userId
     * @return
     */
    @Override
    public AppUserInfoVo getAppUserInfo(Long userId){
    public AppUserInfoVo getAppUserInfo(Long userId) {
        AppUserInfoVo appUserInfoVo = new AppUserInfoVo();
        Member member = this.getByUserId(userId);
        appUserInfoVo.setUserId(userId);
@@ -291,11 +291,11 @@
        appUserInfoVo.setNickName(member.getNickName());
        appUserInfoVo.setRealName(member.getRealName());
        appUserInfoVo.setPhonenumber(member.getMobile());
        if(member.getRelationShopId()!=null&&member.getBindingFlag()==1){
        if (member.getRelationShopId() != null && member.getBindingFlag() == 1) {
            appUserInfoVo.setRelationShopId(member.getRelationShopId());
            Shop shop = shopService.getShop(member.getRelationShopId()).getData();
            appUserInfoVo.setShopName(shop.getShopName());
            appUserInfoVo.setShopAddress(shop.getShopAreaName()+shop.getShopAddress());
            appUserInfoVo.setShopAddress(shop.getShopAreaName() + shop.getShopAddress());
        }
        appUserInfoVo.setBirthday(member.getBirthday());
        appUserInfoVo.setGender(member.getGender());
@@ -308,15 +308,16 @@
    /**
     * 修改用户信息
     *
     * @param appEditUserDto
     */
    @Override
    public void editAppUserInfo(AppEditUserDto appEditUserDto){
    public void editAppUserInfo(AppEditUserDto appEditUserDto) {
        //修改类型1.昵称2.头像3.性别4.生日
        Integer editType = appEditUserDto.getEditType();
        String editValue = appEditUserDto.getEditValue();
        Member member = this.getByUserId(appEditUserDto.getUserId());
        switch (editType){
        switch (editType) {
            case 1:
                member.setNickName(editValue);
                member.setUpdateTime(new Date());
@@ -345,12 +346,23 @@
    /**
     * 分页获取会员信息
     *
     * @param merMemberPageDto
     * @return
     */
    @Override
    public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto){
        List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page,merMemberPageDto);
    public List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto) {
        if (StringUtils.isNotBlank(merMemberPageDto.getMemberActiveness())) {
            Activeness activeness = remoteConfigService.getActivenessByName(merMemberPageDto.getMemberActiveness()).getData();
            if (activeness != null) {
                Date nowDay = DateUtils.getNowDate();
                String actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
                String actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
                merMemberPageDto.setActStartDate(actStartDate);
                merMemberPageDto.setActEndDate(actEndDate);
            }
        }
        List<MerMemberPageVo> merMemberPageVoList = memberMapper.pageMerMember(page, merMemberPageDto);
        return merMemberPageVoList;
    }
@@ -362,41 +374,71 @@
     * @version 1.0
     */
    @Override
    public MerMemberInfoVo getMerMemberInfo(Long userId){
    public MerMemberInfoVo getMerMemberInfo(MerBaseGetDto merBaseGetDto) {
        // 将id转换为Long类型
        Long userId = Long.valueOf(merBaseGetDto.getId());
        // 创建MerMemberInfoVo对象
        MerMemberInfoVo merMemberInfoVo = new MerMemberInfoVo();
        // 根据userId获取Member对象
        Member member = this.getByUserId(userId);
        // 设置MerMemberInfoVo对象的属性值
        merMemberInfoVo.setUserId(userId);
        merMemberInfoVo.setNickName(member.getNickName());
        merMemberInfoVo.setPhonenumber(member.getMobile());
        merMemberInfoVo.setAvatar(member.getAvatar());
        merMemberInfoVo.setBirthday(member.getBirthday());
        merMemberInfoVo.setUserTags(member.getUserTags());
        //未完成
        merMemberInfoVo.setMemberType(member.getGoodsType());
        // 根据memberId获取MemberTotal对象
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        // 设置MerMemberInfoVo对象的属性值
        merMemberInfoVo.setSurpNumber(memberTotal.getUseableServiceCount());
        merMemberInfoVo.setUserNumber(memberTotal.getUsedServiceCount());
        merMemberInfoVo.setPayMoney(memberTotal.getTotalPayMoney());
        // 创建MerBaseDto对象
        MerBaseDto merBaseDto = new MerBaseDto();
        // 设置MerBaseDto对象的属性值
        merBaseDto.setShopId(merBaseGetDto.getShopId());
        merBaseDto.setUserId(userId);
        // 获取未支付订单金额
        BigDecimal unpaidMoney = remoteOrderService.getMemberUnpaidOrder(merBaseDto).getData();
        merMemberInfoVo.setUnpaidMoney(unpaidMoney);
        // 获取最近的会员任务
        MemberTaskSimpleVo memberTaskSimpleVo = remoteShopService.getLastMemberTask(userId).getData();
        if (memberTaskSimpleVo != null) {
            merMemberInfoVo.setLastTaskContent(memberTaskSimpleVo.getTaskContent());
            merMemberInfoVo.setLastTaskTime(memberTaskSimpleVo.getTaskDate());
        }
        // 设置MerMemberInfoVo对象的属性值
        merMemberInfoVo.setNextTaskTime(memberTotal.getNextTaskTime());
        merMemberInfoVo.setLastPayTime(memberTotal.getLastPayTime());
        // 返回MerMemberInfoVo对象
        return merMemberInfoVo;
    }
    /**
     * 分页获取收银用户列表
     *
     * @param page
     * @param merCashMemberPageDto
     * @return
     */
    @Override
    public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto){
    public List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto) {
        List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto);
        List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page, merCashMemberPageDto);
        return merCashMemberPageVos;
    }
    /**
     * 更新会员绑定商户
     *
     * @param appMemberBindingDto
     */
    @Override
    public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){
    public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto) {
        Member member = this.getByUserId(appMemberBindingDto.getUserId());
        if(member.getBindingFlag()==0){
        if (member.getBindingFlag() == 0) {
            member.setBindingTime(new Date());
        }
        member.setBindingFlag(appMemberBindingDto.getBindingFlag());
@@ -407,48 +449,56 @@
    /**
     * 获取会员基础档案
     *
     * @param userId
     * @return
     */
    @Override
    public MerMemberBasicFileVo getMerMemberBasicFile(Long userId){
    public MerMemberBasicFileVo getMerMemberBasicFile(Long userId) {
        MerMemberBasicFileVo merMemberBasicFileVo = new MerMemberBasicFileVo();
        Member member = this.getByUserId(userId);
        BeanUtils.copyProperties(member, merMemberBasicFileVo);
        merMemberBasicFileVo.setNickName(member.getNickName());
        merMemberBasicFileVo.setPhonenumber(member.getMobile());
        merMemberBasicFileVo.setCreateTime(member.getCreateTime());
        List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
        List<String> valueList = memberNurseList.stream().map(k->k.getNurse()).collect(Collectors.toList());
        merMemberBasicFileVo.setMemberNurse(valueList);
        /*List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
        List<String> valueList = memberNurseList.stream().map(k -> k.getNurse()).collect(Collectors.toList());*/
        String memberNurse = member.getMemberNurse();
        if(StringUtils.isNotBlank(memberNurse)){
            List<String> valueList = Arrays.asList(memberNurse.split(","));
            merMemberBasicFileVo.setMemberNurse(valueList);
        }
        List<MemberArchiveVo> achiveList = memberArchiveService.listMerVoByUserId(userId);
        merMemberBasicFileVo.setAchiveList(achiveList);
        return merMemberBasicFileVo;
    }
    /**
     * 获取会员标签
     *
     * @param userId
     * @return
     */
    @Override
    public List<MerMemberTagVo> getMerMemberTags(Long userId){
    public List<MerMemberTagVo> getMerMemberTags(Long userId) {
        Member member = this.getByUserId(userId);
        String userTags = member.getUserTags();
        String[] userTagsArr = null;
        if(StringUtils.isNotBlank(userTags)){
        if (StringUtils.isNotBlank(userTags)) {
            userTagsArr = userTags.split(",");
        }
        List<SysTag> sysTagsList = remoteConfigService.listSysTag(1).getData();
        List<MerMemberTagVo> merMemberTagVoList = new ArrayList<>();
        MerMemberTagVo merMemberTagVo;
        String tagName;
        if(sysTagsList!=null&&!sysTagsList.isEmpty()){
            for(SysTag sysTag : sysTagsList){
        if (sysTagsList != null && !sysTagsList.isEmpty()) {
            for (SysTag sysTag : sysTagsList) {
                merMemberTagVo = new MerMemberTagVo();
                tagName = sysTag.getTagName();
                merMemberTagVo.setTagName(tagName);
                if(userTagsArr!=null &&  ArrayUtils.contains(userTagsArr, tagName)){
                if (userTagsArr != null && ArrayUtils.contains(userTagsArr, tagName)) {
                    merMemberTagVo.setSelectFlag(1);
                }else{
                } else {
                    merMemberTagVo.setSelectFlag(0);
                }
                merMemberTagVoList.add(merMemberTagVo);
@@ -459,15 +509,16 @@
    /**
     * 编辑会员标签
     *
     * @param merMemberTagEditDto
     */
    @Override
    public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto){
    public void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto) {
        Member member = this.getByUserId(merMemberTagEditDto.getMemberUserId());
        List<String> userTags = merMemberTagEditDto.getUserTags();
        StringJoiner sj = new StringJoiner(",");
        if(userTags!=null&&!userTags.isEmpty()){
            for(String str : userTags){
        if (userTags != null && !userTags.isEmpty()) {
            for (String str : userTags) {
                sj.add(str);
            }
        }
@@ -478,17 +529,21 @@
    /**
     * 添加会员
     *
     * @param merMemberAddDto
     */
    @Override
    public void addMerMember(MerMemberAddDto merMemberAddDto){
        String phonenumber = merMemberAddDto.getPhonenumber();
        Member oldMember = this.getByMobile(phonenumber);
        if(oldMember!=null){
    public void addMerMember(MerMemberAddDto merMemberAddDto) {
        String phoneNumber = merMemberAddDto.getPhonenumber();
        Member oldMember = this.getByMobile(phoneNumber);
        // Check if the member already exists
        if (oldMember != null) {
            throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE);
        }
        SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData();
        if(sysUser==null){
        // Get the sysUser by mobile number
        SysUser sysUser = sysUserService.getSysUserByMobile(phoneNumber).getData();
        // If sysUser does not exist, create a new one
        if (sysUser == null) {
            String memberId = IdUtils.simpleUUID();
            sysUser = new SysUser();
            sysUser.setUserName(memberId);
@@ -497,8 +552,9 @@
            sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
            String password = "hongruitang";
            sysUser.setPassword(SecurityUtils.encryptPassword(password));
            log.debug("sysUser"+sysUser.toString());
            log.debug("sysUser" + sysUser.toString());
            sysUser = sysUserService.registerUser(sysUser).getData();
            // Create a new member
            Member member = new Member();
            String memberNo = createMemberNo();
            member.setMemberNo(memberNo);
@@ -508,7 +564,7 @@
            member.setNickName(merMemberAddDto.getNickName());
            member.setRealName(merMemberAddDto.getNickName());
            member.setGender(merMemberAddDto.getGender());
            member.setMobile(phonenumber);
            member.setMobile(phoneNumber);
            member.setReferrer(merMemberAddDto.getReferrer());
            member.setBirthday(merMemberAddDto.getBirthday());
            member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
@@ -517,29 +573,29 @@
            member.setMiniOpenid(null);
            member.setBindingFlag(1);
            member.setBindingTime(new Date());
            // Get shop information and set it to the member
            Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData();
            member.setRelationShopName(shop.getShopName());
            member.setCustomerSource("商户添加");
            member.setCreateTime(new Date());
            log.info("member-----------------"+member.toString());
            // Save the member and initialize member total
            this.saveOrUpdate(member);
            initMemberTotal(memberId);
        }
    }
    /**
     * 编辑会员
     *
     * @param merMemberEditDto
     */
    @Override
    public void editMerMember(MerMemberEditDto merMemberEditDto){
    public void editMerMember(MerMemberEditDto merMemberEditDto) {
        Member member = this.getByUserId(merMemberEditDto.getEditUserId());
        if(!member.getMobile().equals(merMemberEditDto.getPhonenumber())){
        if (!member.getMobile().equals(merMemberEditDto.getPhonenumber())) {
            Member memberOld = getByMobile(merMemberEditDto.getPhonenumber());
            if(memberOld!=null){
            if (memberOld != null) {
                throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE);
            }
        }
@@ -552,7 +608,7 @@
        member.setBirthday(merMemberEditDto.getBirthday());
        member.setUpdateUserId(merMemberEditDto.getUserId());
        member.setUpdateTime(new Date());
        log.info("member-----------------"+member.toString());
        log.info("member-----------------" + member.toString());
        this.saveOrUpdate(member);
        SysUser sysUser = new SysUser();
        sysUser.setUserId(merMemberEditDto.getEditUserId());
@@ -561,12 +617,11 @@
    }
    /**
     *
     * @param mobile
     * @return
     */
    @Override
    public Member getByMobile(String mobile){
    public Member getByMobile(String mobile) {
        LambdaQueryWrapper<Member> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(Member::getDelFlag, 0).eq(Member::getMobile, mobile);
        Member member = this.getOne(queryWrapper);
@@ -575,27 +630,28 @@
    /**
     * 更新用户商品类型
     *
     * @param appMemberGoodsTypeDto
     */
    @Override
    public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto){
    public void updateMemberGoodsType(AppMemberGoodsTypeDto appMemberGoodsTypeDto) {
        Member member = this.getByUserId(appMemberGoodsTypeDto.getUserId());
        HashSet<String> goodsTypeSet = appMemberGoodsTypeDto.getGoodsTypeSet();
        if(member!=null){
        if (member != null) {
            String goodsType = member.getGoodsType();
            Boolean change = false;
            for(String str : goodsTypeSet){
                if(goodsType != null){
                    if(!goodsType.contains(str)){
            for (String str : goodsTypeSet) {
                if (goodsType != null) {
                    if (!goodsType.contains(str)) {
                        goodsType = goodsType + "," + str;
                        change = true;
                    }
                }else{
                } else {
                    goodsType = str;
                    change = true;
                }
            }
            if(change){
            if (change) {
                member.setGoodsType(goodsType);
                this.saveOrUpdate(member);
            }
@@ -605,10 +661,11 @@
    /**
     * 订单创建新用户
     *
     * @param member
     */
    @Override
    public void createNewMember(Member member){
    public void createNewMember(Member member) {
        String memberNo = createMemberNo();
        member.setMemberNo(memberNo);
        member.setDelFlag(0);
@@ -622,10 +679,11 @@
    /**
     * 生成会员统计
     *
     * @param memberId
     * @return
     */
    private void initMemberTotal(String memberId){
    private void initMemberTotal(String memberId) {
        MemberTotal memberTotal = new MemberTotal();
        memberTotal.setMemberId(memberId);
        memberTotal.setDelFlag(0);
@@ -648,65 +706,67 @@
    /**
     * 生成会员编号
     *
     * @return
     */
    private String createMemberNo(){
    private String createMemberNo() {
        int memberTotal = memberMapper.selectCount(new LambdaQueryWrapper<Member>());
        String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal+1));
        String memberNo = CodeFactoryUtil.getMemberNo(Long.valueOf(memberTotal + 1));
        return memberNo;
    }
    /**
     * 平台分页获取会员列表
     *
     * @param page
     * @param merMemberPageDto
     * @return
     */
    @Override
    public List<MgtMemberPageVo> pageMgtMember(Page page,MgtMemberPageDto merMemberPageDto){
    public List<MgtMemberPageVo> pageMgtMember(Page page, MgtMemberPageDto merMemberPageDto) {
        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
        Date nowDay = new Date();
        if(merMemberPageDto.getActivenessId()!=null){
        if (merMemberPageDto.getActivenessId() != null) {
            //处理活跃度筛选
            activenessList.stream()
                    .filter(activeness -> activeness.getActivenessId().equals(merMemberPageDto.getActivenessId()))
                    .findFirst()
                    .ifPresent(activeness -> {
                        merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getEndDay())));
                        merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(nowDay, activeness.getStartDay())));
                        merMemberPageDto.setActStartDate(DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay())));
                        merMemberPageDto.setActEndDate(DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay())));
                    });
        }
        //处理标签为正则表达
        if(StringUtils.isNotBlank(merMemberPageDto.getMemberTags())){
            merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",","|"));
        if (StringUtils.isNotBlank(merMemberPageDto.getMemberTags())) {
            merMemberPageDto.setMemberTags(merMemberPageDto.getMemberTags().replace(",", "|"));
        }
        //查询获取结果列表
        List<MgtMemberPageVo> memberPageVoList = memberMapper.pageMgtMember(page, merMemberPageDto);
        //处理活跃度返回
        if(memberPageVoList!=null&&!memberPageVoList.isEmpty()){
            if(activenessList!=null&&!activenessList.isEmpty()){
        if (memberPageVoList != null && !memberPageVoList.isEmpty()) {
            if (activenessList != null && !activenessList.isEmpty()) {
                //生成活跃度时间段列表
                List<MgtActivenessJudgeVo> mgtActivenessJudgeVoList = new ArrayList<>();
                MgtActivenessJudgeVo mgtActivenessJudgeVo;
                for(Activeness activeness : activenessList){
                for (Activeness activeness : activenessList) {
                    mgtActivenessJudgeVo = new MgtActivenessJudgeVo();
                    mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(),activeness.getEndDay()));
                    mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(),activeness.getStartDay()-1));
                    mgtActivenessJudgeVo.setStartDay(DateUtils.addDays(new Date(), activeness.getEndDay()));
                    mgtActivenessJudgeVo.setEndDay(DateUtils.addDays(new Date(), activeness.getStartDay() - 1));
                    mgtActivenessJudgeVo.setActivenessName(activeness.getActivenessName());
                }
                //活跃度赋值
                Date lastPayTime;
                for(MgtMemberPageVo mgtMemberPageVo : memberPageVoList){
                for (MgtMemberPageVo mgtMemberPageVo : memberPageVoList) {
                    lastPayTime = mgtMemberPageVo.getLastPayTime();
                    StringJoiner sj = new StringJoiner(",");
                    if(lastPayTime!=null){
                        for(MgtActivenessJudgeVo entity: mgtActivenessJudgeVoList){
                            if(lastPayTime.compareTo(entity.getStartDay())>=0&&lastPayTime.compareTo(entity.getEndDay())<=0){
                    if (lastPayTime != null) {
                        for (MgtActivenessJudgeVo entity : mgtActivenessJudgeVoList) {
                            if (lastPayTime.compareTo(entity.getStartDay()) >= 0 && lastPayTime.compareTo(entity.getEndDay()) <= 0) {
                                sj.add(entity.getActivenessName());
                            }
                        }
                        if(sj.length()>0){
                        if (sj.length() > 0) {
                            mgtMemberPageVo.setActiveness(sj.toString());
                        }
                    }
@@ -719,15 +779,16 @@
    /**
     * 修改会员关联商户
     *
     * @param mgtMemberRelEditDto
     */
    @Override
    public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto){
        if(StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())){
    public void editMemberRelationShop(MgtMemberRelEditDto mgtMemberRelEditDto) {
        if (StringUtils.isNotBlank(mgtMemberRelEditDto.getMemberUserIds())) {
            Shop shop = shopService.getShop(mgtMemberRelEditDto.getShopId()).getData();
            String memberUserIds = mgtMemberRelEditDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            for(String str : memberUserIdArr){
            for (String str : memberUserIdArr) {
                Member member = this.getByUserId(Long.valueOf(str));
                member.setRelationShopId(shop.getShopId());
                member.setRelationShopName(shop.getShopName());
@@ -743,14 +804,15 @@
    /**
     * 删除会员关联商户
     *
     * @param mgtMemberRelDelDto
     */
    @Override
    public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto){
        if(StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) {
    public void deleteMemberRelationShop(MgtMemberRelDelDto mgtMemberRelDelDto) {
        if (StringUtils.isNotBlank(mgtMemberRelDelDto.getMemberUserIds())) {
            String memberUserIds = mgtMemberRelDelDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            for(String str : memberUserIdArr) {
            for (String str : memberUserIdArr) {
                Member member = this.getByUserId(Long.valueOf(str));
                member.setBindingFlag(0);
                member.setUpdateTime(new Date());
@@ -762,15 +824,16 @@
    /**
     * 修改会员积分
     *
     * @param mgtMemberIntEditDto
     */
    @Override
    public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto){
        if(StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
    public void editMemberIntegral(MgtMemberIntEditDto mgtMemberIntEditDto) {
        if (StringUtils.isNotBlank(mgtMemberIntEditDto.getMemberUserIds())) {
            String memberUserIds = mgtMemberIntEditDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            MemberIntegralChangeDto memberIntegralChangeDto;
            for(String str : memberUserIdArr) {
            for (String str : memberUserIdArr) {
                memberIntegralChangeDto = new MemberIntegralChangeDto();
                Member member = this.getByUserId(Long.valueOf(str));
                memberIntegralChangeDto.setUserId(Long.valueOf(str));
@@ -785,13 +848,13 @@
    }
    /**
     * 会员积分变动
     *
     * @param memberIntegralChangeDto
     */
    @Override
    public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto){
    public void memberIntegralChange(MemberIntegralChangeDto memberIntegralChangeDto) {
        MemberTotal memberTotal = memberTotalService.getById(memberIntegralChangeDto.getMemberId());
        Integer recordType = memberIntegralChangeDto.getRecordType();
        Integer changeType = memberIntegralChangeDto.getChangeType();
@@ -800,15 +863,15 @@
        Integer usedIntegral = memberTotal.getUsedIntegral();
        Integer useableIntegral = memberTotal.getUseableIntegral();
        //变动统计
        if(changeType==1){
        if (changeType == 1) {
            totalIntegral = totalIntegral + integer;
            useableIntegral = useableIntegral + integer;
            memberTotal.setTotalIntegral(totalIntegral);
            memberTotal.setUseableIntegral(useableIntegral);
        }else if(changeType==2){
        } else if (changeType == 2) {
            usedIntegral = usedIntegral + integer;
            useableIntegral = useableIntegral - integer;
            if(useableIntegral<0){
            if (useableIntegral < 0) {
                throw new ServiceException(AppErrorConstant.INTEGRAL_USE_FAILED);
            }
            memberTotal.setTotalIntegral(totalIntegral);
@@ -821,16 +884,16 @@
        integralRecord.setDelFlag(0);
        integralRecord.setUserId(memberIntegralChangeDto.getUserId());
        integralRecord.setChangeType(recordType);
        if(changeType==1){
        if (changeType == 1) {
            integralRecord.setChangeIntegral(integer);
        }else if(changeType==2){
            integralRecord.setChangeIntegral( 0-integer);
        } else if (changeType == 2) {
            integralRecord.setChangeIntegral(0 - integer);
        }
        integralRecord.setSurpIntegral(useableIntegral);
        integralRecord.setCreateTime(new Date());
        integralRecord.setOrderId(memberIntegralChangeDto.getOrderId());
        integralRecord.setOrderNo(memberIntegralChangeDto.getOrderNo());
        switch (recordType){
        switch (recordType) {
            case 1:
                integralRecord.setChangeReason("购物赠送");
                break;
@@ -848,16 +911,17 @@
    /**
     * 平台获取会员信息
     *
     * @param userId
     * @return
     */
    @Override
    public MgtMemberGetVo getMgtMemberInfo(Long userId){
    public MgtMemberGetVo getMgtMemberInfo(Long userId) {
        MgtMemberGetVo mgtMemberGetVo = new MgtMemberGetVo();
        Member member = this.getByUserId(userId);
        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
        List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listVoByUserId(member.getUserId());
        if(memberArchiveVoList!=null&&!memberArchiveVoList.isEmpty()){
        List<MemberArchiveVo> memberArchiveVoList = memberArchiveService.listMgtVoByUserId(member.getUserId());
        if (memberArchiveVoList != null && !memberArchiveVoList.isEmpty()) {
            //去掉未完善信息
            memberArchiveVoList.removeIf(o -> Objects.isNull(o.getFieldValue()));
        }
@@ -867,7 +931,7 @@
        mgtMemberGetVo.setRealName(member.getRealName());
        mgtMemberGetVo.setNickName(member.getNickName());
        mgtMemberGetVo.setMobile(member.getMobile());
        mgtMemberGetVo.setGender(member.getGender()==0 ? "男" : member.getGender()==1 ? "女" : null);
        mgtMemberGetVo.setGender(member.getGender() == 0 ? "男" : member.getGender() == 1 ? "女" : null);
        mgtMemberGetVo.setBirthday(member.getBirthday());
        mgtMemberGetVo.setBelongDistrict(member.getBelongDistrict());
        mgtMemberGetVo.setCreateTime(member.getCreateTime());
@@ -885,54 +949,54 @@
    }
    /**
     * @description  删除标签
     * @author  jqs
     * @date    2023/6/8 15:18
     * @param memberTag
     * @return  void
     * @return void
     * @description 删除标签
     * @author jqs
     * @date 2023/6/8 15:18
     */
    @Override
    public void deleteMemberTag(String memberTag){
    public void deleteMemberTag(String memberTag) {
        memberMapper.deleteMemberTag(memberTag);
    }
    /**
     * @description  通过发送类型获取userId
     * @author  jqs
     * @date    2023/6/13 17:53
     * @param sendType
     * @return  List<Long>
     * @return List<Long>
     * @description 通过发送类型获取userId
     * @author jqs
     * @date 2023/6/13 17:53
     */
    @Override
    public List<Long> listIdBySendType(Integer sendType){
    public List<Long> listIdBySendType(Integer sendType) {
        //1.手动领取2.全部用户3.会员用户4非会员用户5自定义
        return memberMapper.listIdBySendType(sendType);
    }
    /**
     * @description  通过ids获取用户简易返回
     * @author  jqs
     * @date    2023/6/16 11:06
     * @param userIds
     * @return  List<MgtSimpleMemberVo>
     * @return List<MgtSimpleMemberVo>
     * @description 通过ids获取用户简易返回
     * @author jqs
     * @date 2023/6/16 11:06
     */
    @Override
    public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds){
    public List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds) {
        return memberMapper.listSimpleVoByIds(userIds);
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/6/16 12:41
     * @param mgtUserIdByKeywordDto
     * @return  MgtUserIdByKeywordVo
     * @return MgtUserIdByKeywordVo
     * @description
     * @author jqs
     * @date 2023/6/16 12:41
     */
    @Override
    public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto){
    public MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto) {
        MgtUserIdByKeywordVo mgtUserIdByKeywordVo = new MgtUserIdByKeywordVo();
        List<Long> userIdList = memberMapper.getUserIdByKeyword(mgtUserIdByKeywordDto);
        if(userIdList!=null&&!userIdList.isEmpty()){
        if (userIdList != null && !userIdList.isEmpty()) {
            String userIdStr = userIdList.stream()
                    .map(Object::toString)
                    .collect(Collectors.joining(","));
@@ -942,14 +1006,14 @@
    }
    /**
     * @description boardMemberTotal
     * @param
     * @return MgtBulletinBoardVo
     * @description boardMemberTotal
     * @author jqs34
     * @date 2023/6/18 16:45
     */
    @Override
    public MgtBulletinBoardVo boardMemberTotal(){
    public MgtBulletinBoardVo boardMemberTotal() {
        MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo();
        mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal());
        mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday());
@@ -957,14 +1021,14 @@
    }
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/19 15:26
     * @param
     * @return  MgtTotalMemberTotalVo
     * @return MgtTotalMemberTotalVo
     * @description 会员人数统计
     * @author jqs
     * @date 2023/6/19 15:26
     */
    @Override
    public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto){
    public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto) {
        Date nowDay = DateUtils.getNowDate();
        // 获取店铺ID
        Long shopId = mgtBaseShopDto.getShopId();
@@ -979,13 +1043,13 @@
        mgtTotalMemberTotalVo.setAgeKey(ageKey);
        mgtTotalMemberTotalVo.setAgeValue(ageValue);
        // 获取不同护理类型的会员数
        List<MgtMapTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
        List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
            nurseTotalVos = listRemoveNull(nurseTotalVos);
            mgtTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
        }
        // 获取不同商品类型的会员数
        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
        List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto);
        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
            goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
            mgtTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
@@ -997,29 +1061,29 @@
            String actStartDate;
            String actEndDate;
            Integer count;
            List<MgtMapTotalVo> mgtMapTotalVoList = new ArrayList<>();
            MgtMapTotalVo mgtMapTotalVo;
            List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
            MgtMapIntTotalVo MgtMapIntTotalVo;
            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
            for (int i = 0; i < activenessList.size(); i++) {
                activeness = activenessList.get(i);
                actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
                actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
                count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate);
                mgtMapTotalVo = new MgtMapTotalVo();
                mgtMapTotalVo.setMapKey(activeness.getActivenessName());
                mgtMapTotalVo.setMapValue(count);
                mgtMapTotalVoList.add(mgtMapTotalVo);
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
                MgtMapIntTotalVo.setMapValue(count);
                MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
            }
            mgtTotalMemberTotalVo.setActivenessList(mgtMapTotalVoList);
            mgtTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList);
        }
        //获取会员消费排名
        List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
        List<MgtMapIntTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            memberPayList = listRemoveNull(memberPayList);
            mgtTotalMemberTotalVo.setMemberPayList(memberPayList);
        }
        //获取来源渠道排名
        List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
        List<MgtMapIntTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto);
        if (customerSourceList != null && customerSourceList.size() > 0) {
            customerSourceList = listRemoveNull(customerSourceList);
            mgtTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
@@ -1030,36 +1094,36 @@
    /**
     * @description
     * @author  jqs
     * @date    2023/6/20 11:42
     * @param mgtActivityAgeDto
     * @return  List<Long>
     * @return List<Long>
     * @description
     * @author jqs
     * @date 2023/6/20 11:42
     */
    @Override
    public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto){
    public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto) {
        List<Long> userIdList = memberMapper.listUserIdByAge(mgtActivityAgeDto);
        return userIdList;
    }
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/21 10:59
     * @param mgtBasePlatformDto
     * @return  MgtPlTotalMemberTotalVo
     * @return MgtPlTotalMemberTotalVo
     * @description 会员人数统计
     * @author jqs
     * @date 2023/6/21 10:59
     */
    @Override
    public MgtPlTotalMemberTotalVo getPlTotalMemberTotal(MgtBasePlatformDto mgtBasePlatformDto){
    public MgtPlTotalMemberTotalVo getPlTotalMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) {
        Date nowDay = DateUtils.getNowDate();
        //如果区域代码不为null获取对应的商户id
        if(StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode())||StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode())||StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())){
        if (StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) {
            MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto();
            mgtShopIdByCodeDto.setShopProvinceCode(mgtBasePlatformDto.getShopProvinceCode());
            mgtShopIdByCodeDto.setShopCityCode(mgtBasePlatformDto.getShopCityCode());
            mgtShopIdByCodeDto.setShopAreaCode(mgtBasePlatformDto.getShopAreaCode());
            MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData();
            if(StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())){
            if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) {
                List<Long> list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(","))
                        .map(Long::valueOf)
                        .collect(Collectors.toList());
@@ -1069,10 +1133,10 @@
        //获取基础统计
        MgtPlTotalMemberTotalVo plTotalMemberTotalVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto);
        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto);
        if(mgtAgeTotalVo!=null){
        if (mgtAgeTotalVo != null) {
            plTotalMemberTotalVo.setManTotal(mgtAgeTotalVo.getManTotal());
            plTotalMemberTotalVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal());
        }else{
        } else {
            plTotalMemberTotalVo.setManTotal(0);
            plTotalMemberTotalVo.setWomenTotal(0);
        }
@@ -1085,13 +1149,13 @@
        plTotalMemberTotalVo.setAgeKey(ageKey);
        plTotalMemberTotalVo.setAgeValue(ageValue);
        // 获取不同调理类型的会员数
        List<MgtMapTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto);
        if (nurseTotalVos != null && nurseTotalVos.size() > 0) {
            nurseTotalVos = listRemoveNull(nurseTotalVos);
            plTotalMemberTotalVo.setNurseTotalVos(nurseTotalVos);
        }
        // 获取不同商品类型的会员数
        List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getPlTotalMemberTotalGoodsType(mgtBasePlatformDto);
        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
            goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
            plTotalMemberTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
@@ -1104,42 +1168,42 @@
            String actStartDate;
            String actEndDate;
            Integer count;
            List<MgtMapTotalVo> mgtMapTotalVoList = new ArrayList<>();
            MgtMapTotalVo mgtMapTotalVo;
            List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>();
            MgtMapIntTotalVo MgtMapIntTotalVo;
            // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组
            for (int i = 0; i < activenessList.size(); i++) {
                activeness = activenessList.get(i);
                actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay()));
                actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay()));
                count = memberMapper.getPlTotalMemberTotalActiveness(shopIdList, actStartDate, actEndDate);
                if(StringUtils.isNotBlank(activeness.getActivenessName())){
                    mgtMapTotalVo = new MgtMapTotalVo();
                    mgtMapTotalVo.setMapKey(activeness.getActivenessName());
                    mgtMapTotalVo.setMapValue(count);
                    mgtMapTotalVoList.add(mgtMapTotalVo);
                if (StringUtils.isNotBlank(activeness.getActivenessName())) {
                    MgtMapIntTotalVo = new MgtMapIntTotalVo();
                    MgtMapIntTotalVo.setMapKey(activeness.getActivenessName());
                    MgtMapIntTotalVo.setMapValue(count);
                    MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
                }
            }
            plTotalMemberTotalVo.setActivenessList(mgtMapTotalVoList);
            plTotalMemberTotalVo.setActivenessList(MgtMapIntTotalVoList);
        }
        //获取会员消费排名
        List<MgtMapTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> memberPayList = memberMapper.getPlTotalMemberRankPay(mgtBasePlatformDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            memberPayList = listRemoveNull(memberPayList);
            plTotalMemberTotalVo.setMemberPayList(memberPayList);
        }
        //获取来源渠道排名
        List<MgtMapTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> customerSourceList = memberMapper.getPlTotalMemberRankCustomerSource(mgtBasePlatformDto);
        if (customerSourceList != null && customerSourceList.size() > 0) {
            customerSourceList = listRemoveNull(customerSourceList);
            plTotalMemberTotalVo.setCustomerSourceList(customerSourceList);
        }
        //获取商铺会员排名
        List<MgtMapTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> shopMemberRankList = memberMapper.getPlTotalMemberRank(mgtBasePlatformDto);
        if (shopMemberRankList != null && shopMemberRankList.size() > 0) {
            shopMemberRankList = listRemoveNull(shopMemberRankList);
            plTotalMemberTotalVo.setShopMemberRankList(shopMemberRankList);
        }
        List<MgtMapTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData();
        List<MgtMapIntTotalVo> memberGoodsRankList = remoteOrderService.listMemberGoodsRank(mgtBasePlatformDto).getData();
        if (memberGoodsRankList != null && memberGoodsRankList.size() > 0) {
            memberGoodsRankList = listRemoveNull(memberGoodsRankList);
            plTotalMemberTotalVo.setMemberGoodsRankList(memberGoodsRankList);
@@ -1148,42 +1212,42 @@
    }
    /**
     * @description  去除空字符串
     * @author  jqs
     * @date    2023/6/27 17:35
     * @param mgtMapTotalVos
     * @return  List<MgtMapTotalVo>
     * @param MgtMapIntTotalVos
     * @return List<MgtMapIntTotalVo>
     * @description 去除空字符串
     * @author jqs
     * @date 2023/6/27 17:35
     */
    private List<MgtMapTotalVo> listRemoveNull(List<MgtMapTotalVo> mgtMapTotalVos){
        for (int i = 0; i < mgtMapTotalVos.size(); i++) {
            if(StringUtils.isBlank(mgtMapTotalVos.get(i).getMapKey())){
                mgtMapTotalVos.remove(i);
    private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos) {
        for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
            if (StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())) {
                MgtMapIntTotalVos.remove(i);
            }
        }
        return mgtMapTotalVos;
        return MgtMapIntTotalVos;
    }
    /**
     * @description  通过shopId获取userId
     * @author  jqs
     * @date    2023/6/21 17:11
     * @param shopIdList
     * @return  List<Long>
     * @return List<Long>
     * @description 通过shopId获取userId
     * @author jqs
     * @date 2023/6/21 17:11
     */
    @Override
    public List<Long> listUserIdByShopId(List<Long> shopIdList){
    public List<Long> listUserIdByShopId(List<Long> shopIdList) {
        return memberMapper.listUserIdByShopId(shopIdList);
    }
    /**
     * @description  通过shopId获取user统计
     * @author  jqs
     * @date    2023/6/21 17:19
     * @param shopIdList
     * @return  MgtShopTotalMemberVo
     * @return MgtShopTotalMemberVo
     * @description 通过shopId获取user统计
     * @author jqs
     * @date 2023/6/21 17:19
     */
    @Override
    public MgtShopTotalMemberVo getUserTotalByShopId(List<Long> shopIdList){
    public MgtShopTotalMemberVo getUserTotalByShopId(List<Long> shopIdList) {
        MgtShopTotalMemberVo mgtShopTotalMemberVo = new MgtShopTotalMemberVo();
        MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto();
        mgtBasePlatformDto.setShopIdList(shopIdList);
@@ -1199,4 +1263,67 @@
        mgtShopTotalMemberVo.setAgeValue(ageValue);
        return mgtShopTotalMemberVo;
    }
    /**
     * @param memberTotalChangeDto
     * @return void
     * @description 会员统计变动
     * @author jqs
     * @date 2023/6/28 14:34
     */
    @Override
    public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto) {
        Member member = this.getByUserId(memberTotalChangeDto.getUserId());
        MemberTotal memberTotal = memberTotalService.getById(member.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());
        }
        memberTotalService.saveOrUpdate(memberTotal);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberTotalServiceImpl.java
@@ -5,6 +5,7 @@
import com.ruoyi.member.mapper.member.MemberTotalMapper;
import com.ruoyi.member.service.member.MemberTotalService;
import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto;
import com.ruoyi.system.api.domain.poji.member.Member;
import org.springframework.stereotype.Service;
/**
@@ -19,65 +20,5 @@
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/MemberArchiveFieldsService.java
@@ -3,6 +3,9 @@
import com.ruoyi.member.domain.dto.MgtArchiveFieldsEditDto;
import com.ruoyi.member.domain.pojo.member.MemberArchiveFields;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.member.domain.vo.MgtArchiveFieldsListVo;
import java.util.List;
/**
 * <p>
@@ -14,6 +17,9 @@
 */
public interface MemberArchiveFieldsService extends IService<MemberArchiveFields> {
    /**
     * @description  编辑会员档案字段
     * @author  jqs
@@ -22,4 +28,13 @@
     * @return  void
     */
    void editMemberArchiveFields(MgtArchiveFieldsEditDto mgtArchiveFieldsEditDto);
    /**
     * @description  平台获取档案字段
     * @author  jqs
     * @date    2023/6/30 9:39
     * @param
     * @return  List<MgtArchiveFieldsListVo>
     */
    List<MgtArchiveFieldsListVo> listMgtArchiveFields();
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberArchiveService.java
@@ -17,9 +17,18 @@
public interface MemberArchiveService extends IService<MemberArchive> {
    /**
     * 获取用户档案
     * 获取用户档案去除空信息
     * @param userId
     * @return
     */
    List<MemberArchiveVo> listVoByUserId(Long userId);
    List<MemberArchiveVo> listMgtVoByUserId(Long userId);
    /**
     * @description
     * @author  jqs
     * @date    2023/6/30 11:20
     * @param userId
     * @return  List<MemberArchiveVo>
     */
    List<MemberArchiveVo> listMerVoByUserId(Long userId);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
@@ -42,4 +42,14 @@
     * @return  MerVerifyCouponGetVo
     */
    MerVerifyCouponGetVo sureVerifyCoupon(String memberCouponId);
    /**
     * @description
     * @author  jqs
     * @date    2023/6/29 11:43
     * @param userId
 * @param couponId
     * @return  Integer
     */
    Integer totalMemberCouponByUserAndCoupon(Long userId,String couponId);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -71,7 +71,7 @@
    * @date 2023/5/4 23:55
    * @version 1.0
    */
    MerMemberInfoVo getMerMemberInfo(Long userId);
    MerMemberInfoVo getMerMemberInfo( MerBaseGetDto merBaseGetDto);
    /**
     * 分页获取收银会员列表
@@ -266,4 +266,14 @@
     * @return  MgtShopTotalMemberVo
     */
    MgtShopTotalMemberVo getUserTotalByShopId(List<Long> shopIdList);
    /**
     * @description  会员统计变动
     * @author  jqs
     * @date    2023/6/28 14:34
     * @param memberTotalChangeDto
     * @return  void
     */
    void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberTotalService.java
@@ -14,13 +14,6 @@
 */
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-member/src/main/resources/mapper/coupon/CouponMapper.xml
@@ -253,4 +253,9 @@
            AND tc.create_time &lt;= #{param.createEndTime}
        </if>
    </select>
    <update id="updateCouponTotal">
        UPDATE t_coupon_total set send_count = send_count + #{sendTotal}, send_user_count = send_user_count + sendPerson WHERE coupon_id = #{couponId}
    </update>
</mapper>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberArchiveFieldsMapper.xml
@@ -81,4 +81,17 @@
        </foreach>
    </delete>
    <select id="listMgtArchiveFields" resultType="com.ruoyi.member.domain.vo.MgtArchiveFieldsListVo">
        SELECT
        id afId,
        field_name  fieldName,
        required_flag requiredFlag,
        field_sort fieldSort,
        field_type fieldType,
        input_tip inputTip,
        option_values optionValues
        FROM t_member_archive_fields
        WHERE del_flag = 0
        ORDER BY field_sort DESC
    </select>
</mapper>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberArchiveMapper.xml
@@ -66,7 +66,7 @@
        </foreach>
    </delete>
    <select id="listVoByUserId" resultType="com.ruoyi.member.domain.vo.MemberArchiveVo">
    <select id="listMgtVoByUserId" resultType="com.ruoyi.member.domain.vo.MemberArchiveVo">
        SELECT
        tmaf.id fieldId,
        tmaf.field_name fieldName,
@@ -77,4 +77,14 @@
        ORDER BY tmaf.field_sort DESC
    </select>
    <select id="listMerVoByUserId" resultType="com.ruoyi.member.domain.vo.MemberArchiveVo">
        SELECT
        tmaf.id fieldId,
        tmaf.field_name fieldName,
        tma.field_value fieldValue
        FROM t_member_archive_fields tmaf
        LEFT JOIN t_member_archive tma ON tma.field_id = tmaf.id AND tma.user_id = #{userId} AND tma.del_flag = 0
        WHERE tmaf.del_flag = 0
        ORDER BY tmaf.field_sort DESC
    </select>
</mapper>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -161,9 +161,13 @@
        tm.user_tags userTags,
        tm.goods_type goodsType
        FROM t_member tm
        INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id
        WHERE tm.relation_shop_id = #{param.shopId}
        <if test="param.memberGender != null and param.memberGender != ''">
            AND tm.gender = #{param.memberGender}
        </if>
        <if test="param.memberType != null and param.memberType != ''">
            AND FIND_IN_SET(#{param.memberType},tm.goods_type) &gt; 0
        </if>
        <if test="param.memberTag != null and param.memberTag != ''">
            AND FIND_IN_SET(#{param.memberTag},tm.user_tags) &gt; 0
@@ -173,6 +177,27 @@
        </if>
        <if test="param.endMemberDate!=null and param.endMemberDate!=''">
            AND tm.create_time &lt;= #{param.endMemberDate}
        </if>
        <if test="param.memberFrom != null and param.memberFrom != ''">
            AND tm.customer_source = #{param.memberFrom}
        </if>
        <if test="param.taskStartDate!=null and param.taskStartDate!=''">
            AND tmt.next_task_time &gt;= #{param.taskStartDate}
        </if>
        <if test="param.taskEndDate!=null and param.taskEndDate!=''">
            AND tmt.next_task_time &lt;= #{param.taskEndDate}
        </if>
        <if test="param.surpNum != null and param.surpNum != ''">
            AND tmt.useable_service_count = #{param.surpNum}
        </if>
        <if test="param.memberNurse != null and param.memberNurse != ''">
            AND FIND_IN_SET(#{param.memberNurse},tm.member_nurse) &gt; 0
        </if>
        <if test="param.actStartDate!=null and param.actStartDate!=''">
            AND tmt.last_pay_time &gt;= #{param.actStartDate}
        </if>
        <if test="param.actEndDate!=null and param.actEndDate!=''">
            AND tmt.last_pay_time &lt;= #{param.actEndDate}
        </if>
        <if test="param.keyword != null and param.keyword != ''">
            AND (tm.real_name LIKE CONCAT('%',#{param.keyword},'%') OR tm.mobile LIKE CONCAT('%',#{param.keyword},'%') OR tm.referrer LIKE CONCAT('%',#{param.keyword},'%'))
@@ -381,7 +406,7 @@
        </if>
    </select>
    <select id="getTotalMemberTotalNurse" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getTotalMemberTotalNurse" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT member_nurse mapKey, COUNT(*) mapValue
        FROM (
            SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(member_nurse, ',', numbers.n), ',', -1) member_nurse
@@ -401,7 +426,7 @@
        GROUP BY member_nurse
    </select>
    <select id="getTotalMemberTotalGoodsType" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getTotalMemberTotalGoodsType" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT goods_type mapKey, COUNT(*) mapValue
        FROM (
        SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(goods_type, ',', numbers.n), ',', -1) goods_type
@@ -438,7 +463,7 @@
        </if>
    </select>
    <select id="getTotalMemberRankPay" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getTotalMemberRankPay" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        tm.nick_name mapKey,
        tmt.total_pay_count mapValue
@@ -457,7 +482,7 @@
        ORDER BY tmt.total_pay_count DESC LIMIT 15
    </select>
    <select id="getTotalMemberRankCustomerSource" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getTotalMemberRankCustomerSource" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        tm.customer_source mapKey,
        COUNT(tm.user_id) mapValue
@@ -534,7 +559,7 @@
        </if>
    </select>
    <select id="getPlTotalMemberTotalNurse" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getPlTotalMemberTotalNurse" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT member_nurse mapKey, COUNT(*) mapValue
        FROM (
        SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(member_nurse, ',', numbers.n), ',', -1) member_nurse
@@ -557,7 +582,7 @@
        GROUP BY member_nurse
    </select>
    <select id="getPlTotalMemberTotalGoodsType" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getPlTotalMemberTotalGoodsType" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT goods_type mapKey, COUNT(*) mapValue
        FROM (
        SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(goods_type, ',', numbers.n), ',', -1) goods_type
@@ -600,7 +625,7 @@
        </if>
    </select>
    <select id="getPlTotalMemberRankPay" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getPlTotalMemberRankPay" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        tm.nick_name mapKey,
        tmt.total_pay_count mapValue
@@ -622,7 +647,7 @@
        ORDER BY tmt.total_pay_count DESC LIMIT 15
    </select>
    <select id="getPlTotalMemberRankCustomerSource" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getPlTotalMemberRankCustomerSource" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        tm.customer_source mapKey,
        COUNT(tm.user_id) mapValue
@@ -643,7 +668,7 @@
        ORDER BY COUNT(tm.user_id) DESC LIMIT 15
    </select>
    <select id="getPlTotalMemberRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getPlTotalMemberRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        tm.relation_shop_name mapKey,
        COUNT(tm.user_id) mapValue
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java
@@ -2,17 +2,19 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -66,11 +68,25 @@
     * @author  jqs
     * @date    2023/6/21 15:27
     * @param mgtBasePlatformDto
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    @PostMapping("/listMemberGoodsRank")
    public R<List<MgtMapTotalVo>> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto){
        List<MgtMapTotalVo> memberGoodsRankList = orderService.listMemberGoodsRank(mgtBasePlatformDto);
    public R<List<MgtMapIntTotalVo>> listMemberGoodsRank(@RequestBody MgtBasePlatformDto mgtBasePlatformDto){
        List<MgtMapIntTotalVo> memberGoodsRankList = orderService.listMemberGoodsRank(mgtBasePlatformDto);
        return R.ok(memberGoodsRankList);
    }
    /**
     * @description  获取用户未支付金额
     * @author  jqs
     * @date    2023/6/29 18:00
     * @param merBaseDto
     * @return  R<BigDecimal>
     */
    @PostMapping("/getMemberUnpaidOrder")
    public R<BigDecimal> getMemberUnpaidOrder(@RequestBody MerBaseDto merBaseDto){
        BigDecimal unpaidMoney = orderService.getMemberUnpaidOrder(merBaseDto);
        return R.ok(unpaidMoney);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyCouponDto.java
@@ -1,6 +1,6 @@
package com.ruoyi.order.domain.dto;
import com.ruoyi.system.api.domain.dto.MgtBaseDto;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,7 +12,7 @@
 * @Version 1.0
 */
@Data
public class MerVerifyCouponDto extends MgtBaseDto {
public class MerVerifyCouponDto extends MerBaseDto {
    @ApiModelProperty(value = "优惠券id")
    private String memberCouponId;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberConsumerGoodsTotalVo.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.order.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MerMemberConsumerGoodsTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/29 15:10
 * @Version 1.0
 */
@Data
public class MerMemberConsumerGoodsTotalVo {
    @ApiModelProperty(value = "周期订单")
    private Integer cycleOrder;
    @ApiModelProperty(value = "体验订单")
    private Integer experienceOrder;
    @ApiModelProperty(value = "服务订单")
    private Integer serviceOrder;
    @ApiModelProperty(value = "单品订单")
    private Integer goodsOrder;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtPlTotalActivityTotalVo.java
@@ -1,7 +1,7 @@
package com.ruoyi.order.domain.vo;
import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -64,13 +64,13 @@
    private BigDecimal[] orderMoneyValue;
    @ApiModelProperty(value = "商品类型数量")
    private List<MgtMapTotalVo> goodsTypeTotalList;
    private List<MgtMapIntTotalVo> goodsTypeTotalList;
    @ApiModelProperty(value = "商品类型金额")
    private List<MgtMapBigTotalVo> goodsTypeMoneyList;
    @ApiModelProperty(value = "活动次数排行")
    private List<MgtMapTotalVo> activityRankList;
    private List<MgtMapIntTotalVo> activityRankList;
    @ApiModelProperty(value = "活动次数排行")
    private List<MgtMapBigTotalVo> shopSalesRankList;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalActivityTotalVo.java
@@ -1,7 +1,7 @@
package com.ruoyi.order.domain.vo;
import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -64,7 +64,7 @@
    private BigDecimal[] orderMoneyValue;
    @ApiModelProperty(value = "商品类型数量")
    private List<MgtMapTotalVo> goodsTypeTotalList;
    private List<MgtMapIntTotalVo> goodsTypeTotalList;
    @ApiModelProperty(value = "商品类型金额")
    private List<MgtMapBigTotalVo> goodsTypeMoneyList;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
@@ -1,7 +1,7 @@
package com.ruoyi.order.domain.vo;
import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -70,7 +70,7 @@
    private BigDecimal[] orderMoneyValue;
    @ApiModelProperty(value = "商品类型数量")
    private List<MgtMapTotalVo> goodsTypeTotalList;
    private List<MgtMapIntTotalVo> goodsTypeTotalList;
    @ApiModelProperty(value = "商品类型金额")
    private List<MgtMapBigTotalVo> goodsTypeMoneyList;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ConsumerGoodsMapper.java
@@ -1,13 +1,14 @@
package com.ruoyi.order.mapper.order;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.order.domain.dto.AppConsumerPageDto;
import com.ruoyi.order.domain.dto.MerConsumerGoodsDto;
import com.ruoyi.order.domain.dto.MerConsumerGoodsPageDto;
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.order.domain.vo.AppConsumerPageVo;
import com.ruoyi.order.domain.vo.MerConsumerGoodsListVo;
import com.ruoyi.order.domain.vo.MerMemberConsumerGoodsTotalVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -51,4 +52,14 @@
     * @return
     */
    List<MerConsumerGoodsListVo> pageMerConsumerGoodsNum(Page page,@Param("param") MerConsumerGoodsPageDto merConsumerGoodsPageDto);
    /**
     * @description  获取用户在商户
     * @author  jqs
     * @date    2023/6/29 15:13
     * @param userId
     * @param shopId
     * @return  MerMemberConsumerGoodsTotalVo
     */
    MerMemberConsumerGoodsTotalVo getMemberConsumerGoodsTotalVo(@Param("userId") Long userId,@Param("shopId") Long shopId);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -5,14 +5,11 @@
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.order.Order;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
import com.ruoyi.system.api.domain.dto.MgtPlActivityAgeDto;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
@@ -166,7 +163,7 @@
    /**
    * @description listTotalOrderTotal
    * @param mgtBaseShopDto
    * @return List<MgtMapTotalVo>
    * @return List<MgtMapIntTotalVo>
    * @author jqs34
    * @date 2023/6/19 22:48
    */
@@ -175,7 +172,7 @@
    /**
     * @description listTotalOrderTotalGoodsType
     * @param mgtBaseShopDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -185,7 +182,7 @@
    /**
     * @description listTotalOrderTotalGoodsRank
     * @param mgtBaseShopDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -194,7 +191,7 @@
    /**
     * @description listTotalOrderTotalOrderFrom
     * @param mgtBaseShopDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -214,7 +211,7 @@
    /**
     * @description listTotalActivityTotalGoodsType
     * @param mgtBaseShopDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -224,7 +221,7 @@
    /**
     * @description listTotalActivityTotal
     * @param mgtBaseShopDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -246,7 +243,7 @@
     * @param mgtActivityAgeDto
     * @return  MgtTotalActivityTotalVo
     */
    List<MgtMapTotalVo> getTotalActivityAgeRank(@Param("param")MgtActivityAgeDto mgtActivityAgeDto);
    List<MgtMapIntTotalVo> getTotalActivityAgeRank(@Param("param")MgtActivityAgeDto mgtActivityAgeDto);
    /**
     * @description
@@ -280,9 +277,9 @@
     * @author  jqs
     * @date    2023/6/21 15:27
     * @param mgtBasePlatformDto
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapTotalVo> listMemberGoodsRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> listMemberGoodsRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
@@ -306,7 +303,7 @@
    /**
     * @description listTotalOrderTotal
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -315,7 +312,7 @@
    /**
     * @description listTotalOrderTotalGoodsType
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -325,7 +322,7 @@
    /**
     * @description listTotalOrderTotalGoodsRank
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -334,7 +331,7 @@
    /**
     * @description listTotalOrderTotalOrderFrom
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -353,7 +350,7 @@
    /**
     * @description listTotalActivityTotalGoodsType
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -363,7 +360,7 @@
    /**
     * @description listTotalActivityTotal
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -385,12 +382,12 @@
     * @param mgtActivityAgeDto
     * @return  MgtTotalActivityTotalVo
     */
    List<MgtMapTotalVo> getPlTotalActivityAgeRank(@Param("param")MgtPlActivityAgeDto mgtActivityAgeDto);
    List<MgtMapIntTotalVo> getPlTotalActivityAgeRank(@Param("param")MgtPlActivityAgeDto mgtActivityAgeDto);
    /**
     * @description listPlTotalShopActivityRank
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -399,7 +396,7 @@
    /**
     * @description listTotalActivityTotal
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -408,7 +405,7 @@
    /**
     * @description listTotalActivityTotal
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @author jqs34
     * @date 2023/6/19 22:48
     */
@@ -431,4 +428,14 @@
     * @return  BigDecimal
     */
    BigDecimal shopSalesTotal(@Param("param")MgtBaseShopDto mgtBaseShopDto);
    /**
     * @description  获取用户未支付金额
     * @author  jqs
     * @date    2023/6/29 18:00
     * @param merBaseDto
     * @return  BigDecimal
     */
    BigDecimal getMemberUnpaidOrder(@Param("param")MerBaseDto merBaseDto);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java
@@ -11,10 +11,15 @@
import com.ruoyi.order.domain.vo.AppConsumerPageVo;
import com.ruoyi.order.domain.vo.MerConsumerGoodsListVo;
import com.ruoyi.order.domain.vo.MerConsumerGoodsVo;
import com.ruoyi.order.domain.vo.MerMemberConsumerGoodsTotalVo;
import com.ruoyi.order.mapper.order.ConsumerGoodsMapper;
import com.ruoyi.order.service.order.ConsumerGoodsService;
import com.ruoyi.order.service.order.UserServiceRecordService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto;
import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
import com.ruoyi.system.api.service.RemoteMemberService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -37,6 +42,13 @@
    @Resource
    private UserServiceRecordService userServiceRecordService;
    @Resource
    private RemoteMemberService remoteMemberService;
    @Resource
    private RemoteShopService remoteShopService;
    /**
     * 获取用户服务
     * @param page
@@ -74,12 +86,63 @@
        List<MerSureConsumerGoodsListDto> merSureConsumerGoodsListDtoList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
        if(merSureConsumerGoodsListDtoList!=null && !merSureConsumerGoodsListDtoList.isEmpty()){
            ConsumerGoods consumerGoods;
            Integer serviceCount = 0;
            Integer cycleService = 0;
            Integer cyclePerson = 0;
            Integer serviceService = 0;
            Integer servicePerson = 0;
            Integer experienceService = 0;
            Integer experiencePerson = 0;
            MerMemberConsumerGoodsTotalVo memberConsumerGoodsTotalVo = this.getMemberConsumerGoodsTotalVo(merSureConsumerGoodsDto.getUserId(), merSureConsumerGoodsDto.getShopId());
            for(MerSureConsumerGoodsListDto merSureConsumerGoodsListDto : merSureConsumerGoodsListDtoList){
                consumerGoods = this.getById(merSureConsumerGoodsListDto.getConsumerGoodsId());
                consumerGoods.setCycleNumFlag(1);
                consumerGoods.setServiceNum(merSureConsumerGoodsListDto.getServiceNum());
                this.saveOrUpdate(consumerGoods);
                //处理商品服务次数
                switch (consumerGoods.getGoodsType()) {
                    case 1:
                        cycleService = cycleService + consumerGoods.getServiceNum();
                        break;
                    case 2:
                        serviceService = serviceService + consumerGoods.getServiceNum();
                        break;
                    case 3:
                        experienceService = experienceService + consumerGoods.getServiceNum();
                        break;
                    default:
                        break;
                }
            }
            //判断是否加人
            if (cycleService > 0 && memberConsumerGoodsTotalVo.getCycleOrder() == 0) {
                cyclePerson = 1;
            }
            if (serviceService > 0 && memberConsumerGoodsTotalVo.getServiceOrder() == 0) {
                servicePerson = 1;
            }
            if (experienceService > 0 && memberConsumerGoodsTotalVo.getExperienceOrder() == 0) {
                experiencePerson = 1;
            }
            serviceCount = cycleService + serviceService + experienceService;
            //更新商户和会员服务统计
            MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
            memberTotalChangeDto.setUserId(merSureConsumerGoodsDto.getUserId());
            memberTotalChangeDto.setTypeService(1);
            memberTotalChangeDto.setServiceCount(serviceCount);
            remoteMemberService.changeMemberTotal(memberTotalChangeDto);
            ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
            shopTotalChangeDto.setShopId(merSureConsumerGoodsDto.getShopId());
            shopTotalChangeDto.setTypeCycleService(1);
            shopTotalChangeDto.setCycleService(cycleService);
            shopTotalChangeDto.setCyclePerson(cyclePerson);
            shopTotalChangeDto.setTypeServiceService(1);
            shopTotalChangeDto.setServiceService(serviceService);
            shopTotalChangeDto.setServicePerson(servicePerson);
            shopTotalChangeDto.setTypeExperienceService(1);
            shopTotalChangeDto.setExperienceService(experienceService);
            shopTotalChangeDto.setExperiencePerson(experiencePerson);
            remoteShopService.changeShopTotal(shopTotalChangeDto);
        }
    }
@@ -89,62 +152,118 @@
     */
    @Override
    public void useMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto){
        List<MerSureConsumerGoodsListDto> merSureConsumerGoodsListDtoList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
        if(merSureConsumerGoodsListDtoList!=null && !merSureConsumerGoodsListDtoList.isEmpty()){
            ConsumerGoods consumerGoods;
        List<MerSureConsumerGoodsListDto> goodsList = merSureConsumerGoodsDto.getMerSureConsumerGoodsListDtoList();
        if (goodsList != null && !goodsList.isEmpty()) {
            ConsumerGoods goods;
            Integer serviceNum;
            Integer usedNum;
            Integer useNum;
            Integer surpNum;
            Integer surplusNum;
            Long shopId = null;
            Long userId = null;
            String consumerGoodsNames = "";
            String consumerGoodsIds = "";
            String goodsNames = "";
            String goodsIds = "";
            Integer serviceType = 1;
            for(MerSureConsumerGoodsListDto merSureConsumerGoodsListDto : merSureConsumerGoodsListDtoList){
                consumerGoods = this.getById(merSureConsumerGoodsListDto.getConsumerGoodsId());
                serviceNum = consumerGoods.getServiceNum();
                usedNum = consumerGoods.getUsedNum();
                surpNum = serviceNum - usedNum;
                useNum = merSureConsumerGoodsListDto.getServiceNum();
                if(useNum>surpNum){
            Integer serviceCount = 0;
            Integer cycleService = 0;
            Integer cyclePerson = 0;
            Integer serviceService = 0;
            Integer servicePerson = 0;
            Integer experienceService = 0;
            Integer experiencePerson = 0;
            //获取会员商品总数
            MerMemberConsumerGoodsTotalVo memberGoodsTotal = this.getMemberConsumerGoodsTotalVo(merSureConsumerGoodsDto.getUserId(), merSureConsumerGoodsDto.getShopId());
            for (MerSureConsumerGoodsListDto goodsDto : goodsList) {
                goods = this.getById(goodsDto.getConsumerGoodsId());
                serviceNum = goods.getServiceNum();
                usedNum = goods.getUsedNum();
                surplusNum = serviceNum - usedNum;
                useNum = goodsDto.getServiceNum();
                //判断使用数量是否超过剩余数量
                if (useNum > surplusNum) {
                    throw new ServiceException(AppErrorConstant.BEYOND_SURP_NUM);
                }
                consumerGoods.setUsedNum(usedNum+useNum);
                consumerGoods.setUseTime(new Date());
                if(consumerGoods.getUsedNum().equals(serviceNum)){
                    consumerGoods.setServiceStatus(2);
                    consumerGoods.setCompleteTime(new Date());
                goods.setUsedNum(usedNum + useNum);
                goods.setUseTime(new Date());
                //判断商品是否已使用完
                if (goods.getUsedNum().equals(serviceNum)) {
                    goods.setServiceStatus(2);
                    goods.setCompleteTime(new Date());
                }
                this.saveOrUpdate(consumerGoods);
                shopId = consumerGoods.getShopId();
                userId= consumerGoods.getUserId();
                serviceType = consumerGoods.getGoodsType();
                if(StringUtils.isBlank(consumerGoodsIds)){
                    consumerGoodsIds = consumerGoods.getConsumerGoodsId();
                }else{
                    consumerGoodsIds = consumerGoodsIds + "," + consumerGoods.getConsumerGoodsId();
                this.saveOrUpdate(goods);
                shopId = goods.getShopId();
                userId = goods.getUserId();
                serviceType = goods.getGoodsType();
                //拼接商品ID
                if (StringUtils.isBlank(goodsIds)) {
                    goodsIds = goods.getConsumerGoodsId();
                } else {
                    goodsIds = goodsIds + "," + goods.getConsumerGoodsId();
                }
                if(StringUtils.isBlank(consumerGoodsNames)){
                    consumerGoodsNames = consumerGoods.getGoodsName();
                }else{
                    consumerGoodsNames = consumerGoodsNames + "、" + consumerGoods.getGoodsName();
                //拼接商品名称
                if (StringUtils.isBlank(goodsNames)) {
                    goodsNames = goods.getGoodsName();
                } else {
                    goodsNames = goodsNames + "、" + goods.getGoodsName();
                }
                //处理商品服务次数
                switch (goods.getGoodsType()) {
                    case 1:
                        cycleService = cycleService + useNum;
                        break;
                    case 2:
                        serviceService = serviceService + useNum;
                        break;
                    case 3:
                        experienceService = experienceService + useNum;
                        break;
                    default:
                        break;
                }
            }
            UserServiceRecord userServiceRecord = new UserServiceRecord();
            userServiceRecord.setCreateTime(new Date());
            userServiceRecord.setServiceType(serviceType);
            userServiceRecord.setDelFlag(0);
            userServiceRecord.setShopId(shopId);
            userServiceRecord.setUserId(userId);
            userServiceRecord.setConsumerGoodsIds(consumerGoodsIds);
            userServiceRecord.setConsumerGoodsNames(consumerGoodsNames);
            userServiceRecordService.saveOrUpdate(userServiceRecord);
            //判断是否减人
            if (cycleService > 0 && memberGoodsTotal.getCycleOrder() - cycleService < 1) {
                cyclePerson = 1;
            }
            if (serviceService > 0 && memberGoodsTotal.getServiceOrder() - serviceService < 1) {
                servicePerson = 1;
            }
            if (experienceService > 0 && memberGoodsTotal.getExperienceOrder() - experienceService < 1) {
                experiencePerson = 1;
            }
            serviceCount = cycleService + serviceService + experienceService;
            UserServiceRecord serviceRecord = new UserServiceRecord();
            serviceRecord.setCreateTime(new Date());
            serviceRecord.setServiceType(serviceType);
            serviceRecord.setDelFlag(0);
            serviceRecord.setShopId(shopId);
            serviceRecord.setUserId(userId);
            serviceRecord.setConsumerGoodsIds(goodsIds);
            serviceRecord.setConsumerGoodsNames(goodsNames);
            userServiceRecordService.saveOrUpdate(serviceRecord);
            //更新商户和会员服务统计
            MemberTotalChangeDto memberTotalChange = new MemberTotalChangeDto();
            memberTotalChange.setUserId(merSureConsumerGoodsDto.getUserId());
            memberTotalChange.setTypeService(2);
            memberTotalChange.setServiceCount(serviceCount);
            remoteMemberService.changeMemberTotal(memberTotalChange);
            ShopTotalChangeDto shopTotalChange = new ShopTotalChangeDto();
            shopTotalChange.setShopId(merSureConsumerGoodsDto.getShopId());
            shopTotalChange.setTypeCycleService(2);
            shopTotalChange.setCycleService(cycleService);
            shopTotalChange.setCyclePerson(cyclePerson);
            shopTotalChange.setTypeServiceService(2);
            shopTotalChange.setServiceService(serviceService);
            shopTotalChange.setServicePerson(servicePerson);
            shopTotalChange.setTypeExperienceService(2);
            shopTotalChange.setExperienceService(experienceService);
            shopTotalChange.setExperiencePerson(experiencePerson);
            remoteShopService.changeShopTotal(shopTotalChange);
        }
    }
    /**
     *
     * 分页获取用户服务次数列表
     * @param page
     * @param merConsumerGoodsPageDto
     * @return
@@ -154,4 +273,17 @@
        List<MerConsumerGoodsListVo> merConsumerGoodsListVos = consumerGoodsMapper.pageMerConsumerGoodsNum(page, merConsumerGoodsPageDto);
        return merConsumerGoodsListVos;
    }
    /**
     * @description  获取用户在商户
     * @author  jqs
     * @date    2023/6/29 15:13
     * @param userId
     * @param shopId
     * @return  MerMemberConsumerGoodsTotalVo
     */
    @Override
    public MerMemberConsumerGoodsTotalVo getMemberConsumerGoodsTotalVo(Long userId, Long shopId){
        return consumerGoodsMapper.getMemberConsumerGoodsTotalVo(userId, shopId);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -529,9 +529,13 @@
     */
    @Override
    public MerVerifyOrderVo verifyOrder(String orderId) {
        // 创建返回对象
        MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
        // 根据订单ID获取订单信息
        Order order = this.getById(orderId);
        // 根据订单ID获取订单商品列表
        List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId);
        // 设置返回对象的属性值
        merVerifyOrderVo.setOrderId(orderId);
        merVerifyOrderVo.setOrderNo(order.getOrderNo());
        merVerifyOrderVo.setOrderStatus(order.getOrderStatus());
@@ -546,10 +550,12 @@
        merVerifyOrderVo.setPayTime(order.getPayTime());
        merVerifyOrderVo.setUseTime(order.getUseTime());
        merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
        // 根据订单用户ID获取用户信息
        SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
        merVerifyOrderVo.setUserName(sysUser.getNickName());
        merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
        merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
        // 返回结果
        return merVerifyOrderVo;
    }
@@ -583,11 +589,19 @@
        }
        String goodsIds = goodsIdSj.toString();
        List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIds).getData();
        Map<String,Goods> goodsMap = goodsList.stream()
        Map<String, Goods> goodsMap = goodsList.stream()
                .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
        ConsumerGoods consumerGoods;
        String consumerGoodsId;
        Goods goods;
        Integer serviceCount = 0;
        Integer cycleService = 0;
        Integer cyclePerson = 0;
        Integer serviceService = 0;
        Integer servicePerson = 0;
        Integer experienceService = 0;
        Integer experiencePerson = 0;
        MerMemberConsumerGoodsTotalVo memberConsumerGoodsTotalVo = consumerGoodsService.getMemberConsumerGoodsTotalVo(order.getUserId(), order.getShopId());
        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
            consumerGoods = new ConsumerGoods();
            goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
@@ -611,7 +625,34 @@
            consumerGoods.setGoodsNurses(goods.getGoodsNurses());
            consumerGoods.setSourceFrom(1);
            consumerGoodsService.save(consumerGoods);
            //处理商品服务次数
            if (consumerGoods.getCycleNumFlag() == 1) {
                switch (goods.getGoodsType()) {
                    case 1:
                        cycleService = cycleService + appUserOrderGoodsPageVo.getServiceNum();
                        break;
                    case 2:
                        serviceService = serviceService + appUserOrderGoodsPageVo.getServiceNum();
                        break;
                    case 3:
                        experienceService = experienceService + appUserOrderGoodsPageVo.getServiceNum();
                        break;
                    default:
                        break;
                }
            }
        }
        //判断是否加人
        if (cycleService > 0 && memberConsumerGoodsTotalVo.getCycleOrder() == 0) {
            cyclePerson = 1;
        }
        if (serviceService > 0 && memberConsumerGoodsTotalVo.getServiceOrder() == 0) {
            servicePerson = 1;
        }
        if (experienceService > 0 && memberConsumerGoodsTotalVo.getExperienceOrder() == 0) {
            experiencePerson = 1;
        }
        serviceCount = cycleService + serviceService + experienceService;
        //生成返回
        MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
        merVerifyOrderVo.setOrderId(orderId);
@@ -631,18 +672,36 @@
        SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
        merVerifyOrderVo.setUserName(sysUser.getNickName());
        merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
        //更新商户和会员服务统计
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        memberTotalChangeDto.setTypeService(1);
        memberTotalChangeDto.setServiceCount(serviceCount);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        shopTotalChangeDto.setShopId(order.getShopId());
        shopTotalChangeDto.setTypeCycleService(1);
        shopTotalChangeDto.setCycleService(cycleService);
        shopTotalChangeDto.setCyclePerson(cyclePerson);
        shopTotalChangeDto.setTypeServiceService(1);
        shopTotalChangeDto.setServiceService(serviceService);
        shopTotalChangeDto.setServicePerson(servicePerson);
        shopTotalChangeDto.setTypeExperienceService(1);
        shopTotalChangeDto.setExperienceService(experienceService);
        shopTotalChangeDto.setExperiencePerson(experiencePerson);
        remoteShopService.changeShopTotal(shopTotalChangeDto);
        return merVerifyOrderVo;
    }
    /**
     * @description  确认核销优惠券
     * @author  jqs
     * @date    2023/6/28 11:26
     * @param merVerifyCouponDto
     * @return  MerVerifyCouponVo
     * @return MerVerifyCouponVo
     * @description 确认核销优惠券
     * @author jqs
     * @date 2023/6/28 11:26
     */
    @Override
    public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto){
    public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) {
        MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData();
        // 创建MerVerifyCouponVo对象
        MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
@@ -809,6 +868,10 @@
        String orderNo = CodeFactoryUtil.getShopOrderNo();
        OrderGoods orderGoods;
        String orderGoodsId;
        BigDecimal cycleMoney = new BigDecimal("0.00");
        BigDecimal experienceMoney = new BigDecimal("0.00");
        BigDecimal serviceMoney = new BigDecimal("0.00");
        BigDecimal goodsMoney = new BigDecimal("0.00");
        for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
            goodsId = appBuyGoodsDto.getGoodsId();
            memberCouponId = appBuyGoodsDto.getMemberCouponId();
@@ -877,6 +940,22 @@
            orderGoods.setServiceNum(serviceNum);
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoodsService.save(orderGoods);
            switch(orderGoods.getGoodsType()){
                case 1:
                    cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney());
                    break;
                case 2:
                    serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney());
                    break;
                case 3:
                    experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney());
                    break;
                case 4:
                    goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney());
                    break;
                default:
                    break;
            }
        }
        //创建订单
        Order order = new Order();
@@ -951,6 +1030,13 @@
            appMemberBindingDto.setBindingFlag(1);
            remoteMemberService.updateMemberBinding(appMemberBindingDto);
        }
        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        shopTotalChangeDto.setShopId(order.getShopId());
        shopTotalChangeDto.setCycleMoney(cycleMoney);
        shopTotalChangeDto.setServiceMoney(serviceMoney);
        shopTotalChangeDto.setExperienceMoney(experienceMoney);
        shopTotalChangeDto.setGoodsMoney(goodsMoney);
        remoteShopService.changeShopTotal(shopTotalChangeDto);
    }
@@ -1374,53 +1460,53 @@
    public MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto) {
        MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getTotalOrderTotalOrderFrom(mgtBaseShopDto);
        //MgtTotalOrderTotalVo mgtTotalOrderTotalVoGoodsType = orderMapper.getTotalOrderTotalGoodsType(mgtBaseShopDto);
        List<MgtMapTotalPlusVo> mgtMapTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto);
        if (mgtMapTotalVos != null && mgtMapTotalVos.size() > 0) {
            String[] orderTotalKey = new String[mgtMapTotalVos.size()];
            Integer[] orderTotalValue = new Integer[mgtMapTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalVos.size()];
            for (int i = 0; i < mgtMapTotalVos.size(); i++) {
                orderTotalKey[i] = mgtMapTotalVos.get(i).getMapKey();
                orderTotalValue[i] = mgtMapTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = mgtMapTotalVos.get(i).getMapValueSecond();
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
            }
            mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
            mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
            mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> mgtMapTotalVoGoodsType = orderMapper.listTotalOrderTotalGoodsType(mgtBaseShopDto);
        List<MgtMapTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalOrderTotalGoodsType(mgtBaseShopDto);
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
        if (mgtMapTotalVoGoodsType != null && mgtMapTotalVoGoodsType.size() > 0) {
            MgtMapTotalVo mgtMapTotalVo;
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < mgtMapTotalVoGoodsType.size(); i++) {
                mgtMapTotalVo = new MgtMapTotalVo();
            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapTotalVo.setMapValue(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
                if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    mgtMapTotalVo.setMapKey("周期");
                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                    mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    mgtMapTotalVo.setMapKey("服务");
                    mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    mgtMapTotalVo.setMapKey("体验");
                    mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    mgtMapTotalVo.setMapKey("单品");
                    mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                }
                goodsTypeTotalList.add(mgtMapTotalVo);
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            mgtTotalOrderTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
@@ -1442,35 +1528,35 @@
    }
    /**
     * @param mgtMapTotalVos
     * @return List<MgtMapTotalVo>
     * @param MgtMapIntTotalVos
     * @return List<MgtMapIntTotalVo>
     * @description 去除空字符串
     * @author jqs
     * @date 2023/6/27 17:35
     */
    private List<MgtMapTotalVo> listRemoveNull(List<MgtMapTotalVo> mgtMapTotalVos) {
        for (int i = 0; i < mgtMapTotalVos.size(); i++) {
            if (StringUtils.isBlank(mgtMapTotalVos.get(i).getMapKey())) {
                mgtMapTotalVos.remove(i);
    private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos) {
        for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
            if (StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())) {
                MgtMapIntTotalVos.remove(i);
            }
        }
        return mgtMapTotalVos;
        return MgtMapIntTotalVos;
    }
    /**
     * @param mgtMapTotalVos
     * @return List<MgtMapTotalVo>
     * @param MgtMapIntTotalVos
     * @return List<MgtMapIntTotalVo>
     * @description 去除空字符串
     * @author jqs
     * @date 2023/6/27 17:35
     */
    private List<MgtMapBigTotalVo> bigListRemoveNull(List<MgtMapBigTotalVo> mgtMapTotalVos) {
        for (int i = 0; i < mgtMapTotalVos.size(); i++) {
            if (StringUtils.isBlank(mgtMapTotalVos.get(i).getMapKey())) {
                mgtMapTotalVos.remove(i);
    private List<MgtMapBigTotalVo> bigListRemoveNull(List<MgtMapBigTotalVo> MgtMapIntTotalVos) {
        for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
            if (StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())) {
                MgtMapIntTotalVos.remove(i);
            }
        }
        return mgtMapTotalVos;
        return MgtMapIntTotalVos;
    }
    /**
@@ -1485,9 +1571,9 @@
        //获取基础统计
        MgtTotalActivityTotalVo totalActivityTotalVo = orderMapper.getTotalActivityTotal(mgtBaseShopDto);
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> mgtMapTotalVoGoodsType = orderMapper.listTotalActivityTotalGoodsType(mgtBaseShopDto);
        if (mgtMapTotalVoGoodsType != null && mgtMapTotalVoGoodsType.size() > 0) {
            List<MgtMapTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listTotalActivityTotalGoodsType(mgtBaseShopDto);
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
            List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
            totalActivityTotalVo.setCycleTotal(0);
            totalActivityTotalVo.setCycleMoney(BigDecimal.ZERO);
@@ -1496,49 +1582,49 @@
            totalActivityTotalVo.setExperienceTotal(0);
            totalActivityTotalVo.setExperienceMoney(BigDecimal.ZERO);
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            MgtMapTotalVo mgtMapTotalVo;
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < mgtMapTotalVoGoodsType.size(); i++) {
                mgtMapTotalVo = new MgtMapTotalVo();
            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapTotalVo.setMapValue(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
                if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    mgtMapTotalVo.setMapKey("周期");
                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                    totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    mgtMapTotalVo.setMapKey("服务");
                    totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    mgtMapTotalVo.setMapKey("体验");
                    totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    mgtMapTotalVo.setMapKey("单品");
                    totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                }
                goodsTypeTotalList.add(mgtMapTotalVo);
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        //获取订单分布
        List<MgtMapTotalPlusVo> mgtMapTotalVos = orderMapper.listTotalActivityTotal(mgtBaseShopDto);
        if (mgtMapTotalVos != null && mgtMapTotalVos.size() > 0) {
            String[] orderTotalKey = new String[mgtMapTotalVos.size()];
            Integer[] orderTotalValue = new Integer[mgtMapTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalVos.size()];
            for (int i = 0; i < mgtMapTotalVos.size(); i++) {
                orderTotalKey[i] = mgtMapTotalVos.get(i).getMapKey();
                orderTotalValue[i] = mgtMapTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = mgtMapTotalVos.get(i).getMapValueSecond();
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listTotalActivityTotal(mgtBaseShopDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
            }
            totalActivityTotalVo.setOrderTotalKey(orderTotalKey);
            totalActivityTotalVo.setOrderTotalValue(orderTotalValue);
@@ -1560,17 +1646,17 @@
        mgtActivityAgeDto.setUserIds(userIds);
        userIds = remoteMemberService.listUserIdByAge(mgtActivityAgeDto).getData();
        mgtActivityAgeDto.setUserIds(userIds);
        List<MgtMapTotalVo> ageRankList = orderMapper.getTotalActivityAgeRank(mgtActivityAgeDto);
        List<MgtMapIntTotalVo> ageRankList = orderMapper.getTotalActivityAgeRank(mgtActivityAgeDto);
        ageRankList = listRemoveNull(ageRankList);
        MgtTotalActivityTotalVo totalActivityTotalVo = new MgtTotalActivityTotalVo();
        String[] activityAgeKey = new String[ageRankList.size()];
        Integer[] activityAgeValue = new Integer[ageRankList.size()];
        if (!ageRankList.isEmpty()) {
            MgtMapTotalVo mgtMapTotalVo;
            MgtMapIntTotalVo MgtMapIntTotalVo;
            for (int i = 0; i < ageRankList.size(); i++) {
                mgtMapTotalVo = ageRankList.get(i);
                activityAgeKey[i] = mgtMapTotalVo.getMapKey();
                activityAgeValue[i] = mgtMapTotalVo.getMapValue();
                MgtMapIntTotalVo = ageRankList.get(i);
                activityAgeKey[i] = MgtMapIntTotalVo.getMapKey();
                activityAgeValue[i] = MgtMapIntTotalVo.getMapValue();
            }
        }
        totalActivityTotalVo.setActivityAgeKey(activityAgeKey);
@@ -1600,13 +1686,13 @@
    /**
     * @param mgtBasePlatformDto
     * @return List<MgtMapTotalVo>
     * @return List<MgtMapIntTotalVo>
     * @description
     * @author jqs
     * @date 2023/6/21 15:26
     */
    @Override
    public List<MgtMapTotalVo> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto) {
    public List<MgtMapIntTotalVo> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto) {
        return orderMapper.listMemberGoodsRank(mgtBasePlatformDto);
    }
@@ -1681,23 +1767,23 @@
        mgtBasePlatformDto.setShopIdList(shopIdList);
        //获取基础统计
        MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getPlTotalOrderTotalOrderFrom(mgtBasePlatformDto);
        List<MgtMapTotalPlusVo> mgtMapTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto);
        if (mgtMapTotalVos != null && mgtMapTotalVos.size() > 0) {
            String[] orderTotalKey = new String[mgtMapTotalVos.size()];
            Integer[] orderTotalValue = new Integer[mgtMapTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalVos.size()];
            for (int i = 0; i < mgtMapTotalVos.size(); i++) {
                orderTotalKey[i] = mgtMapTotalVos.get(i).getMapKey();
                orderTotalValue[i] = mgtMapTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = mgtMapTotalVos.get(i).getMapValueSecond();
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalOrderTotal(mgtBasePlatformDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
            }
            mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey);
            mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue);
            mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> mgtMapTotalVoGoodsType = orderMapper.listPlTotalOrderTotalGoodsType(mgtBasePlatformDto);
        List<MgtMapTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalOrderTotalGoodsType(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
        mgtTotalOrderTotalVo.setCycleTotal(0);
        mgtTotalOrderTotalVo.setCycleMoney(BigDecimal.ZERO);
@@ -1705,35 +1791,35 @@
        mgtTotalOrderTotalVo.setServiceMoney(BigDecimal.ZERO);
        mgtTotalOrderTotalVo.setExperienceTotal(0);
        mgtTotalOrderTotalVo.setExperienceMoney(BigDecimal.ZERO);
        if (mgtMapTotalVoGoodsType != null && mgtMapTotalVoGoodsType.size() > 0) {
            MgtMapTotalVo mgtMapTotalVo;
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < mgtMapTotalVoGoodsType.size(); i++) {
                mgtMapTotalVo = new MgtMapTotalVo();
            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapTotalVo.setMapValue(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
                if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    mgtMapTotalVo.setMapKey("周期");
                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                    mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    mgtMapTotalVo.setMapKey("服务");
                    mgtTotalOrderTotalVo.setCycleTotal(mgtTotalOrderTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setCycleMoney(mgtTotalOrderTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    mgtMapTotalVo.setMapKey("体验");
                    mgtTotalOrderTotalVo.setServiceTotal(mgtTotalOrderTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setServiceMoney(mgtTotalOrderTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    mgtMapTotalVo.setMapKey("单品");
                    mgtTotalOrderTotalVo.setExperienceTotal(mgtTotalOrderTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    mgtTotalOrderTotalVo.setExperienceMoney(mgtTotalOrderTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                }
                goodsTypeTotalList.add(mgtMapTotalVo);
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            mgtTotalOrderTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
@@ -1783,8 +1869,8 @@
        //获取基础统计
        MgtPlTotalActivityTotalVo totalActivityTotalVo = orderMapper.getPlTotalActivityTotal(mgtBasePlatformDto);
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> mgtMapTotalVoGoodsType = orderMapper.listPlTotalActivityTotalGoodsType(mgtBasePlatformDto);
        List<MgtMapTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listPlTotalActivityTotalGoodsType(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
        totalActivityTotalVo.setCycleTotal(0);
        totalActivityTotalVo.setCycleMoney(BigDecimal.ZERO);
@@ -1792,32 +1878,32 @@
        totalActivityTotalVo.setServiceMoney(BigDecimal.ZERO);
        totalActivityTotalVo.setExperienceTotal(0);
        totalActivityTotalVo.setExperienceMoney(BigDecimal.ZERO);
        if (mgtMapTotalVoGoodsType != null && mgtMapTotalVoGoodsType.size() > 0) {
            MgtMapTotalVo mgtMapTotalVo;
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < mgtMapTotalVoGoodsType.size(); i++) {
                mgtMapTotalVo = new MgtMapTotalVo();
            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                mgtMapTotalVo.setMapValue(mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(mgtMapTotalVoGoodsType.get(i).getMapValueSecond());
                if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    mgtMapTotalVo.setMapKey("周期");
                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                    totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    mgtMapTotalVo.setMapKey("服务");
                    totalActivityTotalVo.setCycleTotal(totalActivityTotalVo.getCycleTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setCycleMoney(totalActivityTotalVo.getCycleMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                    totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    mgtMapTotalVo.setMapKey("体验");
                    totalActivityTotalVo.setServiceTotal(totalActivityTotalVo.getServiceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setServiceMoney(totalActivityTotalVo.getServiceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                    totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + mgtMapTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (mgtMapTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    mgtMapTotalVo.setMapKey("单品");
                    totalActivityTotalVo.setExperienceTotal(totalActivityTotalVo.getExperienceTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                    totalActivityTotalVo.setExperienceMoney(totalActivityTotalVo.getExperienceMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()));
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                }
            }
@@ -1825,15 +1911,15 @@
            totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        //获取订单分布
        List<MgtMapTotalPlusVo> mgtMapTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto);
        if (mgtMapTotalVos != null && mgtMapTotalVos.size() > 0) {
            String[] orderTotalKey = new String[mgtMapTotalVos.size()];
            Integer[] orderTotalValue = new Integer[mgtMapTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalVos.size()];
            for (int i = 0; i < mgtMapTotalVos.size(); i++) {
                orderTotalKey[i] = mgtMapTotalVos.get(i).getMapKey();
                orderTotalValue[i] = mgtMapTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = mgtMapTotalVos.get(i).getMapValueSecond();
        List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto);
        if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) {
            String[] orderTotalKey = new String[MgtMapIntTotalVos.size()];
            Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()];
            for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
                orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey();
                orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst();
                orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond();
            }
            totalActivityTotalVo.setOrderTotalKey(orderTotalKey);
            totalActivityTotalVo.setOrderTotalValue(orderTotalValue);
@@ -1889,17 +1975,17 @@
        mgtActivityAgeDto.setAgeType(mgtPlActivityAgeDto.getAgeType());
        userIds = remoteMemberService.listUserIdByAge(mgtActivityAgeDto).getData();
        mgtPlActivityAgeDto.setUserIds(userIds);
        List<MgtMapTotalVo> ageRankList = orderMapper.getPlTotalActivityAgeRank(mgtPlActivityAgeDto);
        List<MgtMapIntTotalVo> ageRankList = orderMapper.getPlTotalActivityAgeRank(mgtPlActivityAgeDto);
        ageRankList = listRemoveNull(ageRankList);
        MgtPlTotalActivityTotalVo plTotalActivityTotalVo = new MgtPlTotalActivityTotalVo();
        String[] activityAgeKey = new String[ageRankList.size()];
        Integer[] activityAgeValue = new Integer[ageRankList.size()];
        if (!ageRankList.isEmpty()) {
            MgtMapTotalVo mgtMapTotalVo;
            MgtMapIntTotalVo MgtMapIntTotalVo;
            for (int i = 0; i < ageRankList.size(); i++) {
                mgtMapTotalVo = ageRankList.get(i);
                activityAgeKey[i] = mgtMapTotalVo.getMapKey();
                activityAgeValue[i] = mgtMapTotalVo.getMapValue();
                MgtMapIntTotalVo = ageRankList.get(i);
                activityAgeKey[i] = MgtMapIntTotalVo.getMapKey();
                activityAgeValue[i] = MgtMapIntTotalVo.getMapValue();
            }
        }
        plTotalActivityTotalVo.setActivityAgeKey(activityAgeKey);
@@ -1941,4 +2027,17 @@
        merVerifyCouponVo.setGoodsList(merCouponGoodsList);
        return merVerifyCouponVo;
    }
    /**
     * @description  获取用户未支付金额
     * @author  jqs
     * @date    2023/6/29 18:00
     * @param merBaseDto
     * @return  BigDecimal
     */
    @Override
    public BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto){
        BigDecimal unpaidMoney = orderMapper.getMemberUnpaidOrder(merBaseDto);
        return unpaidMoney;
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ConsumerGoodsService.java
@@ -1,15 +1,16 @@
package com.ruoyi.order.service.order;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.order.domain.dto.AppConsumerPageDto;
import com.ruoyi.order.domain.dto.MerConsumerGoodsDto;
import com.ruoyi.order.domain.dto.MerConsumerGoodsPageDto;
import com.ruoyi.order.domain.dto.MerSureConsumerGoodsDto;
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.order.domain.vo.AppConsumerPageVo;
import com.ruoyi.order.domain.vo.MerConsumerGoodsListVo;
import com.ruoyi.order.domain.vo.MerConsumerGoodsVo;
import com.ruoyi.order.domain.vo.MerMemberConsumerGoodsTotalVo;
import java.util.List;
@@ -57,4 +58,14 @@
     * @return
     */
    List<MerConsumerGoodsListVo> pageMerConsumerGoodsNum(Page page, MerConsumerGoodsPageDto merConsumerGoodsPageDto);
    /**
     * @description  获取用户在商户
     * @author  jqs
     * @date    2023/6/29 15:13
     * @param userId
     * @param shopId
     * @return  MerMemberConsumerGoodsTotalVo
     */
    MerMemberConsumerGoodsTotalVo getMemberConsumerGoodsTotalVo(Long userId, Long shopId);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -9,8 +9,9 @@
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -238,9 +239,9 @@
     * @author  jqs
     * @date    2023/6/21 15:27
     * @param mgtBasePlatformDto
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapTotalVo> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> listMemberGoodsRank(MgtBasePlatformDto mgtBasePlatformDto);
    /**
    * @description 获取平台商户数据统计
@@ -286,4 +287,13 @@
     * @return  MerVerifyCouponVo
     */
    MerVerifyCouponVo verifyCoupon(String verifyCode);
    /**
     * @description  获取用户未支付金额
     * @author  jqs
     * @date    2023/6/29 18:00
     * @param userId
     * @return  BigDecimal
     */
    BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto);
}
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml
@@ -193,4 +193,13 @@
        AND tcg.goods_type = #{param.goodsType} AND tcg.cycle_num_flag = 1
        ORDER BY tcg.create_time DESC
    </select>
    <select id="getMemberConsumerGoodsTotalVo" resultType="com.ruoyi.order.domain.vo.MerMemberConsumerGoodsTotalVo">
        SELECT
        SUM(CASE WHEN goods_type = 1 THEN service_num - used_num ELSE 0 END) cycleOrder,
        SUM(CASE WHEN goods_type = 3 THEN service_num - used_num ELSE 0 END) experienceOrder,
        SUM(CASE WHEN goods_type = 2 THEN service_num - used_num ELSE 0 END) serviceOrder
        FROM t_consumer_goods tcg
        WHERE tcg.del_flag = 0 AND tcg.user_id = #{param.memberUserId} AND tcg.shop_id = #{param.shopId}
    </select>
</mapper>
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -774,8 +774,8 @@
    <select id="listTotalActivityTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT toc.order_id) AS mapValueFirst,
        SUM(toc.order_money) AS mapValueSecond,
        COUNT(DISTINCT order_id) AS mapValueFirst,
        SUM(order_money) AS mapValueSecond,
        FROM
        t_order
        WHERE
@@ -803,7 +803,7 @@
        </if>
    </select>
    <select id="getTotalActivityAgeRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getTotalActivityAgeRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT user_id) AS mapValue
@@ -908,10 +908,10 @@
        HAVING DATEDIFF(t2.pay_time, t1.pay_time) &gt; 30) AS temp
    </select>
    <select id="listMemberGoodsRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="listMemberGoodsRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        tog.goods_name mapKey,
        COUNT(DISTINCT toc.userId) mapValue
        COUNT(DISTINCT toc.user_id) mapValue
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0
@@ -928,7 +928,7 @@
            AND toc.create_time &lt;= #{param.endDate}
        </if>
        GROUP BY tog.goods_name
        ORDER BY COUNT(DISTINCT toc.userId) DESC LIMIT 15
        ORDER BY COUNT(DISTINCT toc.user_id) DESC LIMIT 15
    </select>
@@ -1143,7 +1143,7 @@
        </if>
    </select>
    <select id="getPlTotalActivityAgeRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="getPlTotalActivityAgeRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT user_id) AS mapValue
@@ -1220,7 +1220,14 @@
        SELECT
        SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END) unHandleOrder,
        SUM(pay_money) shopTurnover
        FROM t.order
        FROM t_order
        WHERE del_flag = 0 AND shopId = #{shopId}
    </select>
    <select id="getMemberUnpaidOrder" resultType="java.math.BigDecimal">
        SELECT IFNULL(SUM(receivable_money-pay_money),0)
        FROM t_order
        WHERE del_flag = 0 AND user_id = #{param.userId} AND shop_id = #{param.shopId} AND order_status IN (1,2) AND close_flag = 0
    </select>
</mapper>
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -5,14 +5,15 @@
import com.ruoyi.shop.domain.pojo.shop.ShopRelUser;
import com.ruoyi.shop.domain.pojo.shop.ShopStaff;
import com.ruoyi.shop.service.shop.*;
import com.ruoyi.shop.service.task.MemberTaskService;
import com.ruoyi.shop.service.task.ShopTaskService;
import com.ruoyi.system.api.domain.dto.*;
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.ShopTotalChangeDto;
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;
import com.ruoyi.system.api.domain.vo.MgtShopIdByCodeVo;
import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
import com.ruoyi.system.api.domain.vo.ShopRelUserVo;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.model.QwH5LoginVo;
import com.ruoyi.system.api.model.QwUserDetailDto;
import com.ruoyi.system.api.service.RemoteUserService;
@@ -57,6 +58,8 @@
    @Resource
    private ShopTotalService shopTotalService;
    @Resource
    private MemberTaskService memberTaskService;
    /**
     * 企业微信H5登录
@@ -202,4 +205,19 @@
        shopTotalService.changeShopTotal(shopTotalChangeDto);
        return R.ok();
    }
    /**
     * @description  获取最近任务
     * @author  jqs
     * @date    2023/6/29 18:25
     * @param userId
     * @return  R<MemberTaskSimpleVo>
     */
    @PostMapping("/getLastMemberTask")
    public R<MemberTaskSimpleVo> getLastMemberTask(@RequestBody Long userId)
    {
        MemberTaskSimpleVo taskSimpleVo = memberTaskService.getLastMemberTask(userId);
        return R.ok(taskSimpleVo);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/shop/ShopTotal.java
@@ -60,8 +60,8 @@
    /**
     * 总体验订单数
     */
    @TableField("tolta_experience_order")
    private Integer toltaExperienceOrder;
    @TableField("total_experience_order")
    private Integer totalExperienceOrder;
    /**
     * 总服务订单数
     */
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtPlTotalShopTotalVo.java
@@ -1,6 +1,6 @@
package com.ruoyi.shop.domain.vo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -44,13 +44,13 @@
    private Integer[] ageValue;
    @ApiModelProperty(value = "合作商类型")
    private List<MgtMapTotalVo> shopTypeVos;
    private List<MgtMapIntTotalVo> shopTypeVos;
    @ApiModelProperty(value = "区域商户排行")
    private List<MgtMapTotalVo> areaRankVos;
    private List<MgtMapIntTotalVo> areaRankVos;
    @ApiModelProperty(value = "合作商状态")
    private List<MgtMapTotalVo> shopStatusVos;
    private List<MgtMapIntTotalVo> shopStatusVos;
    @ApiModelProperty(value = "合作商营业额key")
    private String[] shopSalesRankKey;
@@ -59,5 +59,5 @@
    private Integer[] shopSalesRankValue;
    @ApiModelProperty(value = "合作商推荐")
    private List<MgtMapTotalVo> shopRecommendVos;
    private List<MgtMapIntTotalVo> shopRecommendVos;
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java
@@ -8,7 +8,7 @@
import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtMapTotalVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
import org.apache.ibatis.annotations.Param;
@@ -153,43 +153,43 @@
     * @author  jqs
     * @date    2023/6/21 17:40
     * @param
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapTotalVo> listShopTypeTotal(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> listShopTypeTotal(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  商户类型统计
     * @author  jqs
     * @date    2023/6/21 17:40
     * @param
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapTotalVo> listShopStatusTotal(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> listShopStatusTotal(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  商户类型统计
     * @author  jqs
     * @date    2023/6/21 17:40
     * @param
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapTotalVo> listShopAreaRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> listShopAreaRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  商户类型统计
     * @author  jqs
     * @date    2023/6/21 17:40
     * @param
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapTotalVo> listShopSalesRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> listShopSalesRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    /**
     * @description  商户类型统计
     * @author  jqs
     * @date    2023/6/21 17:40
     * @param
     * @return  List<MgtMapTotalVo>
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapTotalVo> listShopRecommendRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
    List<MgtMapIntTotalVo> listShopRecommendRank(@Param("param")MgtBasePlatformDto mgtBasePlatformDto);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskMapper.java
@@ -5,6 +5,7 @@
import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
import com.ruoyi.shop.domain.pojo.task.MemberTask;
import com.ruoyi.shop.domain.vo.MerMemberTaskPageVo;
import com.ruoyi.system.api.domain.vo.MemberTaskSimpleVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -36,4 +37,14 @@
     * @return  Integer
     */
    Integer getMemberIngTotal(@Param("shopId")Long shopId);
    /**
     * @description  获取最近任务
     * @author  jqs
     * @date    2023/6/29 18:25
     * @param
     * @return  MemberTaskSimpleVo
     */
    MemberTaskSimpleVo getLastMemberTask(@Param("userId")Long userId);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -301,7 +301,7 @@
            shopTotal.setTotalActivityCount(0);
            shopTotal.setTotalOrder(0);
            shopTotal.setTotalCycleOrder(0);
            shopTotal.setToltaExperienceOrder(0);
            shopTotal.setTotalExperienceOrder(0);
            shopTotal.setTotalServiceOrder(0);
            shopTotal.setTotalGoodsOrder(0);
            shopTotal.setTotalServiceCount(0);
@@ -850,25 +850,25 @@
            plTotalShopTotalVo.setAgeValue(shopTotalMemberVo.getAgeValue());
        }
        //获取商户类型
        List<MgtMapTotalVo> shopTypeTotal = shopMapper.listShopTypeTotal(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> shopTypeTotal = shopMapper.listShopTypeTotal(mgtBasePlatformDto);
        if (shopTypeTotal != null && shopTypeTotal.size() > 0) {
            shopTypeTotal = listRemoveNull(shopTypeTotal);
            plTotalShopTotalVo.setShopTypeVos(shopTypeTotal);
        }
        //获取商户状态
        List<MgtMapTotalVo> shopStatusTotal = shopMapper.listShopStatusTotal(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> shopStatusTotal = shopMapper.listShopStatusTotal(mgtBasePlatformDto);
        if (shopStatusTotal != null && shopStatusTotal.size() > 0) {
            shopStatusTotal = listRemoveNull(shopStatusTotal);
            plTotalShopTotalVo.setShopStatusVos(shopStatusTotal);
        }
        //获取区域排名
        List<MgtMapTotalVo> shopAreaRank = shopMapper.listShopAreaRank(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> shopAreaRank = shopMapper.listShopAreaRank(mgtBasePlatformDto);
        if (shopAreaRank != null && shopAreaRank.size() > 0) {
            shopAreaRank = listRemoveNull(shopAreaRank);
            plTotalShopTotalVo.setAreaRankVos(shopAreaRank);
        }
        //获取销售排名
        List<MgtMapTotalVo> shopSalesRank = shopMapper.listShopSalesRank(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> shopSalesRank = shopMapper.listShopSalesRank(mgtBasePlatformDto);
        if (shopSalesRank != null && shopSalesRank.size() > 0) {
            String[] shopSalesKey = new String[shopSalesRank.size()];
            Integer[] shopSalesValue = new Integer[shopSalesRank.size()];
@@ -881,7 +881,7 @@
            plTotalShopTotalVo.setShopSalesRankValue(shopSalesValue);
        }
        //获取推荐
        List<MgtMapTotalVo> shopRecommendRank = shopMapper.listShopRecommendRank(mgtBasePlatformDto);
        List<MgtMapIntTotalVo> shopRecommendRank = shopMapper.listShopRecommendRank(mgtBasePlatformDto);
        if (shopRecommendRank != null && shopRecommendRank.size() > 0) {
            shopRecommendRank = listRemoveNull(shopRecommendRank);
            plTotalShopTotalVo.setShopRecommendVos(shopRecommendRank);
@@ -893,16 +893,16 @@
     * @description  去除空字符串
     * @author  jqs
     * @date    2023/6/27 17:35
     * @param mgtMapTotalVos
     * @return  List<MgtMapTotalVo>
     * @param MgtMapIntTotalVos
     * @return  List<MgtMapIntTotalVo>
     */
    private List<MgtMapTotalVo> listRemoveNull(List<MgtMapTotalVo> mgtMapTotalVos){
        for (int i = 0; i < mgtMapTotalVos.size(); i++) {
            if(StringUtils.isBlank(mgtMapTotalVos.get(i).getMapKey())){
                mgtMapTotalVos.remove(i);
    private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos){
        for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
            if(StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())){
                MgtMapIntTotalVos.remove(i);
            }
        }
        return mgtMapTotalVos;
        return MgtMapIntTotalVos;
    }
    /**
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java
@@ -7,6 +7,7 @@
import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
@@ -43,8 +44,98 @@
        });
    }
    //更新商户统计实现
    private void handleShopTotal(ShopTotalChangeDto shopTotalChangeDto){
        ShopTotal shopTotal = this.getById(shopTotalChangeDto.getShopId());
        //订单变化
        BigDecimal payMoney = BigDecimal.ZERO;
        Boolean haveOrder = false;
        if(shopTotalChangeDto.getCycleMoney()!=null){
            shopTotal.setTotalCycleMoney(shopTotal.getTotalCycleMoney().add(shopTotalChangeDto.getCycleMoney()));
            payMoney = payMoney.add(shopTotalChangeDto.getCycleMoney());
            shopTotal.setTotalCycleOrder(shopTotal.getTotalCycleOrder()+1);
            haveOrder = true;
        }
        if(shopTotalChangeDto.getExperienceMoney()!=null){
            shopTotal.setTotalExperienceMoney(shopTotal.getTotalExperienceMoney().add(shopTotalChangeDto.getExperienceMoney()));
            payMoney = payMoney.add(shopTotalChangeDto.getExperienceMoney());
            shopTotal.setTotalExperienceOrder(shopTotal.getTotalExperienceOrder()+1);
            haveOrder = true;
        }
        if(shopTotalChangeDto.getServiceMoney()!=null){
            shopTotal.setTotalServiceMoney(shopTotal.getTotalServiceMoney().add(shopTotalChangeDto.getServiceMoney()));
            payMoney = payMoney.add(shopTotalChangeDto.getServiceMoney());
            shopTotal.setTotalServiceOrder(shopTotal.getTotalServiceOrder()+1);
            haveOrder = true;
        }
        if(shopTotalChangeDto.getGoodsMoney()!=null){
            shopTotal.setTotalGoodsMoney(shopTotal.getTotalGoodsMoney().add(shopTotalChangeDto.getGoodsMoney()));
            payMoney = payMoney.add(shopTotalChangeDto.getGoodsMoney());
            shopTotal.setTotalGoodsOrder(shopTotal.getTotalGoodsOrder()+1);
            haveOrder = true;
        }
        if(haveOrder){
            shopTotal.setTotalOrderMoney(shopTotal.getTotalOrderMoney().add(payMoney));
            shopTotal.setTotalOrder(shopTotal.getTotalOrder()+1);
        }
        //活动变化
        if(shopTotalChangeDto.getActivityCount()!=null){
            shopTotal.setTotalActivityCount(shopTotal.getTotalActivityCount()+shopTotalChangeDto.getActivityCount());
        }
        //服务变化
        Integer serviceCount = 0;
        Boolean haveService = false;
        if(shopTotalChangeDto.getTypeCycleService()!=null){
            if(shopTotalChangeDto.getTypeCycleService()==2){
                shopTotal.setUsedCycleService(shopTotal.getUsedCycleService()+shopTotalChangeDto.getCycleService());
                shopTotal.setUseableCycleService(shopTotal.getUseableCycleService()-shopTotalChangeDto.getCycleService());
                shopTotal.setUseableCyclePerson(shopTotal.getUseableCyclePerson()-shopTotalChangeDto.getCyclePerson());
                serviceCount = serviceCount - shopTotalChangeDto.getCycleService();
            }else{
                shopTotal.setTotalCycleService(shopTotal.getTotalCycleService()+shopTotalChangeDto.getCycleService());
                shopTotal.setUseableCycleService(shopTotal.getUseableCycleService()+shopTotalChangeDto.getCycleService());
                shopTotal.setTotalCyclePerson(shopTotal.getTotalCyclePerson()+shopTotalChangeDto.getCyclePerson());
                serviceCount = serviceCount + shopTotalChangeDto.getCycleService();
            }
            haveService = true;
        }
        if(shopTotalChangeDto.getTypeServiceService()!=null){
            if(shopTotalChangeDto.getTypeServiceService()==2){
                shopTotal.setUsedServiceService(shopTotal.getUsedServiceService()+shopTotalChangeDto.getServiceService());
                shopTotal.setUseableServiceService(shopTotal.getUseableServiceService()-shopTotalChangeDto.getServiceService());
                shopTotal.setUseableServicePerson(shopTotal.getUseableServicePerson()-shopTotalChangeDto.getServicePerson());
                serviceCount = serviceCount - shopTotalChangeDto.getServiceService();
            }else{
                shopTotal.setTotalServiceService(shopTotal.getTotalServiceService()+shopTotalChangeDto.getServiceService());
                shopTotal.setUseableServiceService(shopTotal.getUseableServiceService()+shopTotalChangeDto.getServiceService());
                shopTotal.setTotalServicePerson(shopTotal.getTotalServicePerson()+shopTotalChangeDto.getServicePerson());
                serviceCount = serviceCount + shopTotalChangeDto.getServiceService();
            }
            haveService = true;
        }
        if(shopTotalChangeDto.getTypeExperienceService()!=null){
            if(shopTotalChangeDto.getTypeExperienceService()==2){
                shopTotal.setUsedExperienceService(shopTotal.getUsedExperienceService()+shopTotalChangeDto.getExperienceService());
                shopTotal.setUseableExperienceService(shopTotal.getUseableExperienceService()-shopTotalChangeDto.getExperienceService());
                shopTotal.setUseableExperiencePerson(shopTotal.getUseableExperiencePerson()-shopTotalChangeDto.getExperiencePerson());
                serviceCount = serviceCount - shopTotalChangeDto.getExperienceService();
            }else{
                shopTotal.setTotalExperienceService(shopTotal.getTotalExperienceService()+shopTotalChangeDto.getExperienceService());
                shopTotal.setUseableExperienceService(shopTotal.getUseableExperienceService()+shopTotalChangeDto.getExperienceService());
                shopTotal.setTotalExperiencePerson(shopTotal.getTotalExperiencePerson()+shopTotalChangeDto.getExperiencePerson());
                serviceCount = serviceCount + shopTotalChangeDto.getExperienceService();
            }
            haveService = true;
        }
        if(haveService){
            if(serviceCount<0){
                shopTotal.setUsedServiceCount(shopTotal.getUsedServiceCount()+serviceCount);
                shopTotal.setUseableServiceCount(shopTotal.getUsedServiceCount()+serviceCount);
            }else{
                shopTotal.setTotalServiceCount(shopTotal.getTotalServiceCount()+serviceCount);
                shopTotal.setUseableServiceCount(shopTotal.getUsedServiceCount()+serviceCount);
            }
        }
        this.saveOrUpdate(shopTotal);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
@@ -16,6 +16,7 @@
import com.ruoyi.shop.service.task.MemberTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.shop.service.task.TaskFileService;
import com.ruoyi.system.api.domain.vo.MemberTaskSimpleVo;
import com.ruoyi.system.api.service.RemoteMemberService;
import org.springframework.stereotype.Service;
@@ -175,4 +176,15 @@
        return memberTaskMapper.getMemberIngTotal(shopId);
    }
    /**
     * @description  获取最近任务
     * @author  jqs
     * @date    2023/6/29 18:25
     * @param
     * @return  MemberTaskSimpleVo
     */
    @Override
    public MemberTaskSimpleVo getLastMemberTask(Long userId){
        return memberTaskMapper.getLastMemberTask(userId);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java
@@ -114,7 +114,7 @@
    @Override
    public MgtBulletinBoardVo boardTaskTotal(){
        MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo();
        LambdaQueryWrapper<ShopTask> queryWrapper = new LambdaQueryWrapper();
        LambdaQueryWrapper<ShopTask> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ShopTask::getDelFlag,0);
        queryWrapper.eq(ShopTask::getTaskStatus,1);
        queryWrapper.eq(ShopTask::getTaskDate,DateUtils.getDate());
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java
@@ -1,12 +1,13 @@
package com.ruoyi.shop.service.task;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.shop.domain.dto.MerCreateMemberTaskDto;
import com.ruoyi.shop.domain.dto.MerFollowMemberTaskDto;
import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
import com.ruoyi.shop.domain.pojo.task.MemberTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.shop.domain.vo.MerMemberTaskPageVo;
import com.ruoyi.system.api.domain.vo.MemberTaskSimpleVo;
import java.util.List;
@@ -48,4 +49,13 @@
     * @return  Integer
     */
    Integer getMemberIngTotal(Long shopId);
    /**
     * @description  获取最近任务
     * @author  jqs
     * @date    2023/6/29 18:25
     * @param
     * @return  MemberTaskSimpleVo
     */
    MemberTaskSimpleVo getLastMemberTask(Long userId);
}
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -355,7 +355,7 @@
            AND ts.shop_status = 2
        </if>
        <if test="param.shopTags!=null and param.shopTags!=''">
            AND tm.shop_tags REGEXP #{param.shopTags}
            AND ts.shop_tags REGEXP #{param.shopTags}
        </if>
        <if test="param.supportingCapacityFlag!=null and param.supportingCapacityFlag!=''">
            AND ts.supporting_capacity_flag = #{param.supportingCapacityFlag}
@@ -380,7 +380,7 @@
        </if>
        <if test="param.keyword!=null and param.keyword!=''">
            AND (ts.shop_name LIKE CONCAT('%',#{param.keyword},'%') OR ts.shopowner_name LIKE CONCAT('%',#{param.keyword},'%')
            OR ts.shopowner_phone LIKE CONCAT('%',#{param.keyword},'%') OR ts.shopNumber LIKE CONCAT('%',#{param.keyword},'%'))
            OR ts.shopowner_phone LIKE CONCAT('%',#{param.keyword},'%') OR ts.shop_number LIKE CONCAT('%',#{param.keyword},'%'))
        </if>
        ORDER BY ts.create_time DESC
    </select>
@@ -607,7 +607,7 @@
    </select>
    <select id="listShopTypeTotal" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="listShopTypeTotal" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        ts.shop_type mapKey,
        COUNT(ts.shop_id) mapValue
@@ -637,7 +637,7 @@
        GROUP BY ts.shop_type
    </select>
    <select id="listShopStatusTotal" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="listShopStatusTotal" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        ts.shop_custom_status mapKey,
        COUNT(ts.shop_id) mapValue
@@ -667,7 +667,7 @@
        GROUP BY ts.shop_custom_status
    </select>
    <select id="listShopAreaRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="listShopAreaRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        ts.shop_city_code mapKey,
        COUNT(ts.shop_id) mapValue
@@ -698,7 +698,7 @@
        ORDER BY COUNT(ts.shop_id) DESC LIMIT 15
    </select>
    <select id="listShopSalesRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="listShopSalesRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        ts.shop_name mapKey,
        tst.total_order_money mapValue
@@ -729,7 +729,7 @@
        ORDER BY tst.total_order_money DESC LIMIT 15
    </select>
    <select id="listShopRecommendRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapTotalVo">
    <select id="listShopRecommendRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        ts.recommend_person mapKey,
        COUNT(ts.shop_id) mapValue
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml
@@ -98,4 +98,13 @@
        FROM t_member_task
        WHERE del_flag = 0 AND task_status = 1 AND shop_id = #{shopId} AND task_date = DATE(NOW())
    </select>
    <select id="getLastMemberTask" resultType="com.ruoyi.system.api.domain.vo.MemberTaskSimpleVo">
        SELECT
        task_date taskDate,
        task_content taskContent
        FROM t_member_task
        WHERE del_flag = 0 AND task_status = 2 AND user_id = #{userId}
        ORDER BY task_date DESC LIMIT 1
    </select>
</mapper>
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/business/MerConfigController.java
@@ -52,4 +52,7 @@
        recommendCooperationService.recommendCooperation(merRecommendCooperationDto);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/ConfigController.java
@@ -130,4 +130,17 @@
        return R.ok(sysSimpleUserVoList);
    }
    /**
     * @description  通过名称获取活跃度
     * @author  jqs
     * @date    2023/6/29 17:20
     * @param name
     * @return  R<Activeness>
     */
    @PostMapping("/getActivenessByName")
    public R<Activeness> getActivenessByName(@RequestBody String name)
    {
        Activeness activeness = activenessService.getActivenessByName(name);
        return R.ok(activeness);
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java
@@ -87,6 +87,13 @@
        return R.ok(mgtCustomConfigVo);
    }
    @RequestMapping(value = "/getActivenessList", method = RequestMethod.POST)
    @ApiOperation(value = "获取活跃度")
    public R<List<String>> getActivenessList() {
        List<String> activenessList = activenessService.getActivenessList();
        return R.ok(activenessList);
    }
    @RequestMapping(value = "/editCooperation", method = RequestMethod.POST)
    @Log(title = "申请合作管理", businessType = BusinessType.UPDATE,operContent = "修改申请合作")
    @ApiOperation(value = "修改申请合作")
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java
@@ -42,4 +42,22 @@
     */
    void deleteMgtActiveness(MgtBaseGetDto mgtBaseGetDto);
    /**
     * @description  获取活跃度list
     * @author  jqs
     * @date    2023/6/29 17:12
     * @param
     * @return  List<String>
     */
    List<String> getActivenessList();
    /**
     * @description  通过名称获取活跃度
     * @author  jqs
     * @date    2023/6/29 17:18
     * @param activenessName
     * @return  Activeness
     */
    Activeness getActivenessByName(String activenessName);
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java
@@ -12,6 +12,7 @@
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -79,4 +80,34 @@
        activeness.setUpdateUserId(mgtBaseGetDto.getUserId());
        this.saveOrUpdate(activeness);
    }
    /**
     * @description  获取活跃度list
     * @author  jqs
     * @date    2023/6/29 17:12
     * @param
     * @return  List<String>
     */
    @Override
    public List<String> getActivenessList(){
        List<Activeness> activenessList = activenessMapper.selectList(new LambdaQueryWrapper<Activeness>().eq(Activeness::getDelFlag, 0));
        List<String> nameList = activenessList.stream().map(activeness ->{
                    String name = activeness.getActivenessName();
                    return name;
                }).collect(Collectors.toList());
        return nameList;
    }
    /**
     * @description  通过名称获取活跃度
     * @author  jqs
     * @date    2023/6/29 17:18
     * @param activenessName
     * @return  Activeness
     */
    @Override
    public Activeness getActivenessByName(String activenessName){
        Activeness activeness = this.getOne(new LambdaQueryWrapper<Activeness>().eq(Activeness::getDelFlag, 0).eq(Activeness::getActivenessName, activenessName),false);
        return activeness;
    }
}