jiangqs
2023-06-19 dc1b9ef0f6437e73bbb7d25ec3ff4f8704557998
统计
14个文件已修改
7个文件已添加
418 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBaseDateDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBaseShopDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/RuoYiAuthApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/ApplicationContextUtil.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/CodeFactoryUtil.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-gateway/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/RuoYiGoodsApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/RuoYiMemberApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtTotalController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtAgeTotalVo.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtNurseTotalVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/RuoYiShopApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBaseDateDto.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.system.api.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MgtBaseDateDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/19 15:04
 * @Version 1.0
 */
@Data
public class MgtBaseDateDto extends MgtBaseDto{
    @ApiModelProperty(value = "开始日期")
    private String startDate;
    @ApiModelProperty(value = "结束日期")
    private String endDate;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBaseShopDto.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.system.api.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MgtBaseShopDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/19 15:31
 * @Version 1.0
 */
@Data
public class MgtBaseShopDto extends MgtBaseDateDto{
    @ApiModelProperty(value = "商户id")
    private Long shopId;
}
ruoyi-auth/src/main/java/com/ruoyi/auth/RuoYiAuthApplication.java
@@ -18,7 +18,7 @@
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api")})
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api"),@ComponentScan("com.ruoyi.common.security.utils")})
public class RuoYiAuthApplication
{
    public static void main(String[] args)
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/ApplicationContextUtil.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.common.security.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
 * @ClassName ApplicationContextUtil
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/19 17:47
 * @Version 1.0
 */
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        ApplicationContextUtil.applicationContext = applicationContext;
    }
    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);
    }
}
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/CodeFactoryUtil.java
@@ -5,7 +5,6 @@
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.security.SecureRandom;
import java.util.Date;
import java.util.Random;
@@ -21,14 +20,13 @@
@Component
public class CodeFactoryUtil {
    private static RedisService redisService = null;
    //静态住入到自己的类中
    private static RedisService redisService;
    //将静态属性以入参(形参)的方式传入一个方法中,然后将此方法通过 @Resource 注入到Spring容器中
    @Resource
    public void setService(RedisService redisService) {
        CodeFactoryUtil.redisService = redisService;
    private static RedisService getRedisService() {
        if (redisService == null) {
            redisService = ApplicationContextUtil.getBean(RedisService.class);
        }
        return redisService;
    }
    /**
@@ -123,7 +121,7 @@
     */
    public static void main(String[] args) {
        System.out.printf("getShopNo()"+getShopNo());
    }
    /**
@@ -167,13 +165,13 @@
    private static String getNoSuffixNumber(String prefix){
        Integer suffixNumberInt;
        String suffixNumber = "00001";
        if(redisService.hasKey(prefix)){
            suffixNumberInt = redisService.getCacheObject(prefix);
        if(getRedisService().hasKey(prefix)){
            suffixNumberInt = getRedisService().getCacheObject(prefix);
            suffixNumber = toFillZeroSuffixNumber(suffixNumberInt,SHOP_LENGTH);
            suffixNumberInt = suffixNumberInt + 1;
            redisService.setCacheObject(prefix, suffixNumberInt);
            getRedisService().setCacheObject(prefix, suffixNumberInt);
        }else{
            redisService.setCacheObject(prefix, 1);
            getRedisService().setCacheObject(prefix, 1);
        }
        return suffixNumber;
    }
@@ -200,13 +198,13 @@
    private static String getOrderSuffixNumber(String prefix){
        Integer suffixNumberInt;
        String suffixNumber = "0001";
        if(redisService.hasKey(prefix)){
            suffixNumberInt = redisService.getCacheObject(prefix);
        if(getRedisService().hasKey(prefix)){
            suffixNumberInt = getRedisService().getCacheObject(prefix);
            suffixNumber = toFillZeroSuffixNumber(suffixNumberInt,ORDER_LENGTH);
            suffixNumberInt = suffixNumberInt + 1;
            redisService.setCacheObject(prefix, suffixNumberInt, 24L, TimeUnit.HOURS);
            getRedisService().setCacheObject(prefix, suffixNumberInt, 24L, TimeUnit.HOURS);
        }else{
            redisService.setCacheObject(prefix, 1, 24L, TimeUnit.HOURS);
            getRedisService().setCacheObject(prefix, 1, 24L, TimeUnit.HOURS);
        }
        return suffixNumber;
    }
ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -35,8 +35,8 @@
      datasource:
        ds1:
          nacos:
            server-addr: 47.109.78.184:5000
            #server-addr: 127.0.0.1:8848
            #server-addr: 47.109.78.184:5000
            server-addr: 127.0.0.1:8848
            dataId: sentinel-ruoyi-gateway
            groupId: DEFAULT_GROUP
            data-type: json
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/RuoYiGoodsApplication.java
@@ -17,7 +17,7 @@
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api")})
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api"),@ComponentScan("com.ruoyi.common.security.utils")})
public class RuoYiGoodsApplication
{
    public static void main(String[] args)
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
@@ -61,6 +61,8 @@
    @Resource
    private GoodsTotalService goodsTotalService;
    /**
    * @description 获取推荐商品列表
    * @param page shopId
@@ -278,7 +280,7 @@
        String goodsId = mgtGoodsEditDto.getGoodsId();
        Goods goodsSame = this.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getDelFlag,0).eq(Goods::getGoodsName,mgtGoodsEditDto.getGoodsName()));
        // 判断是否有商品ID 没有则新建
        if (goodsId != null) {
        if (StringUtils.isNotBlank(goodsId)) {
            if(goodsSame!=null&&!Objects.equals(goodsSame.getGoodsId(), goodsId)){
                throw new ServiceException(AppErrorConstant.GOODS_DOUBLE);
            }
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/RuoYiMemberApplication.java
@@ -17,7 +17,7 @@
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api")})
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api"),@ComponentScan("com.ruoyi.common.security.utils")})
public class RuoYiMemberApplication
{
    public static void main(String[] args)
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtTotalController.java
New file
@@ -0,0 +1,43 @@
package com.ruoyi.member.controller.management;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.member.domain.vo.MgtTotalMemberTotalVo;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.system.api.domain.dto.MgtBaseShopDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * @ClassName MgtTotalController
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/19 14:36
 * @Version 1.0
 */
@Api(value = "管理台会员统计相关接口", tags = "管理台会员统计相关接口", description = "管理台会员统计相关接口")
@RestController
@RequestMapping("/mgt/total")
public class MgtTotalController {
    @Resource
    private MemberService memberService;
    @RequestMapping(value = "/getTotalMemberTotal", method = RequestMethod.POST)
    @ApiOperation(value = "获取会员人数统计")
    public R<MgtTotalMemberTotalVo> getTotalMemberTotal(@RequestBody MgtBaseShopDto mgtBaseShopDto) {
        Long userId = SecurityUtils.getUserId();
        mgtBaseShopDto.setUserId(userId);
        MgtTotalMemberTotalVo totalMemberTotalVo = memberService.getTotalMemberTotal(mgtBaseShopDto);
        return R.ok(totalMemberTotalVo);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtAgeTotalVo.java
New file
@@ -0,0 +1,36 @@
package com.ruoyi.member.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MgtAgeTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/19 15:56
 * @Version 1.0
 */
@Data
public class MgtAgeTotalVo {
    @ApiModelProperty(value = "男人")
    private Integer manTotal;
    @ApiModelProperty(value = "女人")
    private Integer womenTotal;
    @ApiModelProperty(value = "<20")
    private Integer tenAge;
    @ApiModelProperty(value = "21-30")
    private Integer twentyAge;
    @ApiModelProperty(value = "31-40")
    private Integer ThirtyAge;
    @ApiModelProperty(value = "41-50")
    private Integer fortyAge;
    @ApiModelProperty(value = ">50")
    private Integer fiftyAge;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtNurseTotalVo.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.member.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MgtNurseTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/19 18:06
 * @Version 1.0
 */
@Data
public class MgtNurseTotalVo {
    @ApiModelProperty(value = "调理问题")
    private String nurse;
    @ApiModelProperty(value = "人数")
    private Integer userCount;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java
New file
@@ -0,0 +1,48 @@
package com.ruoyi.member.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MgtTotalMemberTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/6/19 15:06
 * @Version 1.0
 */
@Data
public class MgtTotalMemberTotalVo {
    @ApiModelProperty(value = "总会员")
    private Integer memberTotal;
    @ApiModelProperty(value = "线上来源")
    private Integer onlineTotal;
    @ApiModelProperty(value = "线下来源")
    private Integer offlineTotal;
    @ApiModelProperty(value = "转介绍")
    private Integer introduceTotal;
    @ApiModelProperty(value = "周期会员")
    private Integer cycleTotal;
    @ApiModelProperty(value = "体验会员")
    private Integer experienceTotal;
    @ApiModelProperty(value = "服务会员")
    private Integer serviceTotal;
    @ApiModelProperty(value = "男人")
    private Integer manTotal;
    @ApiModelProperty(value = "女人")
    private Integer womenTotal;
    @ApiModelProperty(value = "会员年龄key")
    private String[] ageKey;
    @ApiModelProperty(value = "会员年龄value")
    private Integer[] ageValue;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
@@ -5,9 +5,8 @@
import com.ruoyi.member.domain.dto.MerCashMemberPageDto;
import com.ruoyi.member.domain.dto.MerMemberPageDto;
import com.ruoyi.member.domain.dto.MgtMemberPageDto;
import com.ruoyi.member.domain.vo.MerCashMemberPageVo;
import com.ruoyi.member.domain.vo.MerMemberPageVo;
import com.ruoyi.member.domain.vo.MgtMemberPageVo;
import com.ruoyi.member.domain.vo.*;
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.MgtSimpleMemberVo;
@@ -130,6 +129,34 @@
    * @date 2023/6/18 16:47
    */
    Integer memberToday();
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/19 15:26
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    MgtTotalMemberTotalVo getTotalMemberTotal(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/19 15:26
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    MgtAgeTotalVo getTotalMemberTotalAge(@Param("param") MgtBaseShopDto mgtBaseShopDto);
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/19 15:26
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    List<MgtNurseTotalVo> getTotalMemberTotalNurse(@Param("param") MgtBaseShopDto mgtBaseShopDto);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -102,6 +102,7 @@
    @Resource
    private MemberArchiveService memberArchiveService;
    /**
     * @description: TODO
@@ -740,7 +741,7 @@
            String memberUserIds = mgtMemberRelDelDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            for(String str : memberUserIdArr) {
                Member member = this.getById(Long.valueOf(str));
                Member member = this.getByUserId(Long.valueOf(str));
                member.setBindingFlag(0);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(mgtMemberRelDelDto.getUserId());
@@ -944,4 +945,24 @@
        mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday());
        return mgtBulletinBoardVo;
    }
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/19 15:26
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    @Override
    public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto){
        MgtTotalMemberTotalVo mgtTotalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto);
        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getTotalMemberTotalAge(mgtBaseShopDto);
        String[] ageKey = {"<20","21-30","31-40","41-50",">50"};
        Integer[] ageValue = {mgtAgeTotalVo.getTenAge(),mgtAgeTotalVo.getTwentyAge(),mgtAgeTotalVo.getThirtyAge(),mgtAgeTotalVo.getFortyAge(),mgtAgeTotalVo.getFiftyAge()};
        mgtTotalMemberTotalVo.setAgeKey(ageKey);
        mgtTotalMemberTotalVo.setAgeValue(ageValue);
        List<MgtNurseTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto);
        return mgtTotalMemberTotalVo;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -208,7 +208,7 @@
    List<MgtSimpleMemberVo> listSimpleVoByIds(String userIds);
    /**
     * @description
     * @description 通过关键词获取用户id集合
     * @author  jqs
     * @date    2023/6/16 12:42
     * @param mgtUserIdByKeywordDto
@@ -217,11 +217,20 @@
    MgtUserIdByKeywordVo getUserIdByKeyword(MgtUserIdByKeywordDto mgtUserIdByKeywordDto);
    /**
    * @description boardMemberTotal
    * @description 看板会员统计
    * @param
    * @return MgtBulletinBoardVo
    * @author jqs34
    * @date 2023/6/18 16:47
    */
    MgtBulletinBoardVo boardMemberTotal();
    /**
     * @description  会员人数统计
     * @author  jqs
     * @date    2023/6/19 15:26
     * @param
     * @return  MgtTotalMemberTotalVo
     */
    MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto);
}
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -195,6 +195,7 @@
    <select id="pageMgtMember" resultType="com.ruoyi.member.domain.vo.MgtMemberPageVo">
        SELECT
        tm.member_id memberId,
        tm.user_id userId,
        tm.relation_shop_id relationShopId,
        tm.member_no memberNo,
@@ -322,4 +323,82 @@
    <select id="memberToday" resultType="java.lang.Integer">
        SELECT COUNT(user_id) FROM t_member WHERE del_flag = 0 AND create_time = CURDATE()
    </select>
    <select id="getTotalMemberTotal" resultType="com.ruoyi.member.domain.vo.MgtTotalMemberTotalVo">
        SELECT
            COUNT(member_id) memberTotal,
            SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END) onlineTotal,
            SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END) offlineTotal,
            0 introduceTotal,
            SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END) cycleTotal,
            SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END) experienceTotal,
            SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END) serviceTotal
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND create_time &lt;= #{param.endDate}
        </if>
    </select>
    <select id="getTotalMemberTotal" resultType="com.ruoyi.member.domain.vo.MgtTotalMemberTotalVo">
        SELECT
        COUNT(member_id) memberTotal,
        SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END) onlineTotal,
        SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END) offlineTotal,
        0 introduceTotal,
        SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END) cycleTotal,
        SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END) experienceTotal,
        SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END) serviceTotal
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
        </if>
    </select>
    <select id="getTotalMemberTotalAge" resultType="com.ruoyi.member.domain.vo.MgtAgeTotalVo">
        SELECT
        SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END) manTotal,
        SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) womenTotal,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS tenAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS twentyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS ThirtyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS fortyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END) AS fiftyAge
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND create_time &lt;= #{param.endDate}
        </if>
    </select>
    <select id="getTotalMemberTotalNurse" resultType="com.ruoyi.member.domain.vo.MgtNurseTotalVo">
        SELECT member_nurse nurse, COUNT(*) AS userCount
        FROM (
            SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(member_nurse, ',', numbers.n), ',', -1) user_tag
            FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10) numbers
            INNER JOIN t_member ON CHAR_LENGTH(member_nurse) - CHAR_LENGTH(REPLACE(member_nurse, ',', '')) >= numbers.n - 1
            <if test="param.shopId != null and param.shopId != ''">
                AND relation_shop_id = #{param.shopId}
            </if>
            <if test="param.startDate!=null and param.startDate!=''">
                AND create_time &gt;= #{param.startDate}
            </if>
            <if test="param.endDate!=null and param.endDate!=''">
                AND create_time &lt;= #{param.endDate}
            </if>
            ) x
        WHERE member_nurse != ''
        GROUP BY member_nurse
        ORDER BY count DESC;
    </select>
</mapper>
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/RuoYiOrderApplication.java
@@ -17,7 +17,7 @@
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api")})
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api"),@ComponentScan("com.ruoyi.common.security.utils")})
public class RuoYiOrderApplication
{
    public static void main(String[] args)
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -72,6 +72,8 @@
    @Resource
    private RemoteShoppingCartService remoteShoppingCartService;
    /**
     * @description: buyGoods
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/RuoYiShopApplication.java
@@ -17,7 +17,7 @@
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api")})
@ComponentScans(value = {@ComponentScan("com.ruoyi.system.api"),@ComponentScan("com.ruoyi.common.security.utils")})
public class RuoYiShopApplication
{
    public static void main(String[] args)
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -93,7 +93,7 @@
    @Resource
    private ShopProportionService shopProportionService;
    /**
     * 获取商户详情