bug
jiangqs
2023-07-17 45d37a6febb87837a6daa65429703a37e437d257
bug
36个文件已修改
7个文件已添加
1005 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/StaffTotalDto.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/AppMemberCouponVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/controller/QwH5Controller.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/service/QywxInnerService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-gateway/src/main/resources/bootstrap.yml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/staff/StaffActivityController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/StaffActivityListDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/activity/ActivityMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/activity/ActivityService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/staff/StaffTotalController.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtPlTotalActivityTotalVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/StaffActivityDateMemberTotalVo.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/StaffActivityOrderTotalVo.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/StaffActivityTotalVo.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopInfoVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffShopTaskPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopTaskMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/StaffSuggestMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -12,6 +12,10 @@
    String USER_NOT_LOGIN = "用户没有登录或登录已失效";
    String USER_NO_SHOP = "用户没有关联商户";
    String USER_NO_SYSTEM = "员工没有录入系统";
    String MOBILE_USER_DOUBLE = "手机号已创建用户,请直接登录";
    String MOBILE_DOUBLE = "手机号已被占用";
@@ -91,4 +95,6 @@
    String DOUBLE_INTEGRAL_TASK = "任务已完成,请勿重复提交";
    String ACTIVITY_TIME_ERROR = "只能选择大于当前时间作为开始时间";
    String TRANS_NOT_MYSELF = "不能转移给自己";
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/StaffTotalDto.java
New file
@@ -0,0 +1,34 @@
package com.ruoyi.system.api.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName StaffTotalDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/17 14:28
 * @Version 1.0
 */
@Data
public class StaffTotalDto extends StaffBaseDto{
    @ApiModelProperty(value = "商户id")
    private Long shopId;
    @ApiModelProperty(value = "活动id")
    private String activityId;
    @ApiModelProperty(value = "开始日期")
    private String startDate;
    @ApiModelProperty(value = "结束日期")
    private String endDate;
    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
    private Integer goodsType;
    @ApiModelProperty(value = "年龄层",hidden = true)
    private Integer ageType;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/AppMemberCouponVo.java
@@ -46,4 +46,7 @@
    @ApiModelProperty(value="关联商品ids")
    private String relGoodsIds;
    @ApiModelProperty(value="是否使用0否1是")
    private Integer useFlag;
}
ruoyi-auth/src/main/java/com/ruoyi/auth/controller/QwH5Controller.java
@@ -1,8 +1,11 @@
package com.ruoyi.auth.controller;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.auth.service.QywxInnerService;
import com.ruoyi.auth.service.SysLoginService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.system.api.model.*;
import io.swagger.annotations.Api;
@@ -62,9 +65,12 @@
        //JSONObject result = qywxInnerService.getOauthUser(code);
        //QwUserDetailDto qwUserDetail = JSONObject.parseObject(result.toJSONString(), QwUserDetailDto.class);
        QwUserDetailDto qwUserDetail = new QwUserDetailDto();
        qwUserDetail.setMobile("13882237106");
        qwUserDetail.setMobile("17780704874");
        if(StringUtils.isBlank(qwUserDetail.getMobile())){
            throw new ServiceException("企业微信未授权手机号,无法登录");
        }
        // 1、查数据库获取人员
        QwH5LoginVo qwH5LoginVo = sysLoginService.qwH5Login(qwUserDetail);
        QwH5LoginVo qwH5LoginVo = sysLoginService.qwH5StaffLogin(qwUserDetail);
        // 2、生成Token
       return R.ok(tokenService.createQwH5Token(qwH5LoginVo));
    }
@@ -73,12 +79,15 @@
    @ApiOperation("通过code获取商户端用户登录")
    public R<OauthUserVo> oauthUser(@ApiParam(value = "成员授权获取到的code", required = true) @RequestParam("code") String code) throws IOException {
        // 通过code获取访问用户敏感信息
        //JSONObject result = qywxInnerService.getOauthUser(code);
        //QwUserDetailDto qwUserDetail = JSONObject.parseObject(result.toJSONString(), QwUserDetailDto.class);
        QwUserDetailDto qwUserDetail = new QwUserDetailDto();
        qwUserDetail.setMobile("13882237106");
        JSONObject result = qywxInnerService.getOauthUser(code);
        QwUserDetailDto qwUserDetail = JSONObject.parseObject(result.toJSONString(), QwUserDetailDto.class);
        if(StringUtils.isBlank(qwUserDetail.getMobile())){
            throw new ServiceException("企业微信未授权手机号,无法登录");
        }
        //QwUserDetailDto qwUserDetail = new QwUserDetailDto();
        //qwUserDetail.setMobile("13882237106");
        // 1、查数据库获取人员
        QwH5LoginVo qwH5LoginVo = sysLoginService.qwH5StaffLogin(qwUserDetail);
        QwH5LoginVo qwH5LoginVo = sysLoginService.qwH5Login(qwUserDetail);
        // 2、生成Token
        return R.ok(tokenService.createQwH5Token(qwH5LoginVo));
    }
ruoyi-auth/src/main/java/com/ruoyi/auth/service/QywxInnerService.java
@@ -1,7 +1,6 @@
package com.ruoyi.auth.service;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
import com.ruoyi.auth.config.QywxInnerConfig;
import com.ruoyi.auth.utils.RestUtils;
import com.ruoyi.common.core.constant.Constants;
@@ -9,20 +8,14 @@
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.api.model.AgentConfigVo;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.cache.RedisCache;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
@@ -121,7 +114,6 @@
        }
        logger.info("----------------userinfo detail -------------");
        logger.info(detailResponse.toString());
        return detailResponse;
    }
ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -12,6 +12,7 @@
import com.ruoyi.common.core.utils.ip.IpUtils;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.AppMiniRegisterVo;
@@ -137,12 +138,12 @@
            if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
            {
                recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除",Constants.FROM_MINI_APP);
                throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
                throw new ServiceException("对不起,您的账号: 已被删除");
            }
            if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
            {
                recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员",Constants.FROM_MINI_APP);
                throw new ServiceException("对不起,您的账号:" + username + " 已停用");
                throw new ServiceException("对不起,您的账号: 已停用");
            }
            recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功",Constants.FROM_MINI_APP);
        }
@@ -176,12 +177,12 @@
            if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
            {
                recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除",Constants.FROM_MINI_APP);
                throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
                throw new ServiceException("对不起,您的账号: 已被删除");
            }
            if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
            {
                recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员",Constants.FROM_MINI_APP);
                throw new ServiceException("对不起,您的账号:" + username + " 已停用");
                throw new ServiceException("对不起,您的账号: 已停用");
            }
            recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功",Constants.FROM_MINI_APP);
        }
@@ -195,6 +196,9 @@
    {
        // 查询用户信息
        R<QwH5LoginVo> userResult = remoteShopService.qwH5Login(qwUserDetail);
        if(userResult==null){
            throw new ServiceException(AppErrorConstant.USER_NO_SHOP);
        }
        if (R.FAIL == userResult.getCode())
        {
            throw new ServiceException(userResult.getMsg());
@@ -239,7 +243,10 @@
    public QwH5LoginVo qwH5StaffLogin(QwUserDetailDto qwUserDetail)
    {
        // 查询用户信息
        R<QwH5LoginVo> userResult = remoteShopService.qwH5Login(qwUserDetail);
        R<QwH5LoginVo> userResult = remoteUserService.qwH5StaffLogin(qwUserDetail);
        if(userResult==null){
            throw new ServiceException(AppErrorConstant.USER_NO_SHOP);
        }
        if (R.FAIL == userResult.getCode())
        {
            throw new ServiceException(userResult.getMsg());
ruoyi-auth/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -13,13 +13,13 @@
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 47.109.78.184:5000
        #server-addr: 127.0.0.1:8848
        # 服务注册地址cd ../a
        #server-addr: 47.109.78.184:5000
        server-addr: 127.0.0.1:8848
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: 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-file/src/main/resources/bootstrap.yml
@@ -8,6 +8,7 @@
    multipart:
      max-file-size: 100MB
      max-request-size: 200MB
      location: /data/tmp
  application:
    # 应用名称
    name: ruoyi-file
@@ -18,12 +19,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/staff/StaffActivityController.java
New file
@@ -0,0 +1,43 @@
package com.ruoyi.goods.controller.staff;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.goods.domain.dto.StaffActivityListDto;
import com.ruoyi.goods.domain.vo.MgtActivityListVo;
import com.ruoyi.goods.service.activity.ActivityService;
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;
import java.util.List;
/**
 * @ClassName StaffActivityController
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/17 14:40
 * @Version 1.0
 */
@Api(value = "员工端活动相关接口", tags = "员工端活动相关接口", description = "员工端活动相关接口")
@RestController
@RequestMapping("/staff/activity")
public class StaffActivityController {
    @Resource
    private ActivityService activityService;
    @RequestMapping(value = "/listStaffActivity", method = RequestMethod.POST)
    @ApiOperation(value = "获取活动列表")
    public R<List<MgtActivityListVo>> listStaffActivity(@RequestBody StaffActivityListDto staffActivityListDto) {
        List<MgtActivityListVo> activityListVoList = activityService.listStaffActivity(staffActivityListDto);
        return R.ok(activityListVoList);
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/StaffActivityListDto.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.goods.domain.dto;
import com.ruoyi.system.api.domain.dto.StaffBaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName StaffActivityListDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/17 14:42
 * @Version 1.0
 */
@Data
public class StaffActivityListDto extends StaffBaseDto {
    @ApiModelProperty(value = "活动类型1秒杀")
    private Integer activityType;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/activity/ActivityMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.goods.domain.dto.MgtActivityPageDto;
import com.ruoyi.goods.domain.dto.MgtActivityRecordPageDto;
import com.ruoyi.goods.domain.dto.StaffActivityListDto;
import com.ruoyi.goods.domain.pojo.activity.Activity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.goods.domain.vo.*;
@@ -108,4 +109,14 @@
     * @return  Integer
     */
    Integer checkSellOut(@Param("activityId")String activityId);
    /**
     * @description  获取活动列表
     * @author  jqs
     * @date    2023/7/17 14:46
     * @param staffActivityListDto
     * @return  List<MgtActivityListVo>
     */
    List<MgtActivityListVo> listStaffActivity(@Param("param")StaffActivityListDto staffActivityListDto);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/activity/ActivityService.java
@@ -5,6 +5,7 @@
import com.ruoyi.goods.domain.dto.MgtActivityEditDto;
import com.ruoyi.goods.domain.dto.MgtActivityPageDto;
import com.ruoyi.goods.domain.dto.MgtActivityRecordPageDto;
import com.ruoyi.goods.domain.dto.StaffActivityListDto;
import com.ruoyi.goods.domain.pojo.activity.Activity;
import com.ruoyi.goods.domain.vo.*;
import com.ruoyi.system.api.domain.dto.AGStockChangeDto;
@@ -170,4 +171,14 @@
     * @return  void
     */
    void changeActivityStock(AGStockChangeDto agStockChangeDto);
    /**
     * @description  获取活动列表
     * @author  jqs
     * @date    2023/7/17 14:46
     * @param staffActivityListDto
     * @return  List<MgtActivityListVo>
     */
    List<MgtActivityListVo> listStaffActivity(StaffActivityListDto staffActivityListDto);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -9,10 +9,7 @@
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.goods.domain.dto.MgtActivityEditDto;
import com.ruoyi.goods.domain.dto.MgtActivityGoodsEditDto;
import com.ruoyi.goods.domain.dto.MgtActivityPageDto;
import com.ruoyi.goods.domain.dto.MgtActivityRecordPageDto;
import com.ruoyi.goods.domain.dto.*;
import com.ruoyi.goods.domain.pojo.activity.Activity;
import com.ruoyi.goods.domain.pojo.activity.ActivityTotal;
import com.ruoyi.goods.domain.vo.*;
@@ -562,4 +559,16 @@
            lock.unlock();
        }
    }
    /**
     * @description  获取活动列表
     * @author  jqs
     * @date    2023/7/17 14:46
     * @param staffActivityListDto
     * @return  List<MgtActivityListVo>
     */
    @Override
    public List<MgtActivityListVo> listStaffActivity(StaffActivityListDto staffActivityListDto){
        return activityMapper.listStaffActivity(staffActivityListDto);
    }
}
ruoyi-modules/ruoyi-goods/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml
@@ -157,4 +157,13 @@
        SELECT COUNT(ag_id) FROM t_activity_goods
        WHERE del_flag = 0 AND activity_id = #{activityId} AND sell_out_flag = 0
    </select>
    <select id="listStaffActivity" resultType="com.ruoyi.goods.domain.vo.MgtActivityListVo">
        SELECT
            ta.activity_id activityId,
            ta.activity_name activityName
        FROM t_activity ta
        WHERE ta.del_flag = 0
        ORDER BY ta.create_time DESC
    </select>
</mapper>
ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-modules/ruoyi-member/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -969,13 +969,7 @@
    <select id="listOrderAgeUser" resultType="java.lang.Long">
        SELECT
        IFNULL(SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END),0) manTotal,
        IFNULL(SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END),0) womenTotal,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END),0) AS tenAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END),0) AS twentyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END),0) AS ThirtyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END),0) AS fortyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END),0) AS fiftyAge
        user_id
        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}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/staff/StaffTotalController.java
New file
@@ -0,0 +1,86 @@
package com.ruoyi.order.controller.staff;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.system.api.domain.dto.StaffTotalDto;
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 StaffTotalContorller
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/17 14:15
 * @Version 1.0
 */
@Api(value = "员工端统计相关接口", tags = "员工端统计相关接口", description = "员工端统计相关接口")
@RestController
@RequestMapping("/staff/total")
public class StaffTotalController {
    @Resource
    private OrderService orderService;
    @RequestMapping(value = "/getStaffActivityOrderTotal", method = RequestMethod.POST)
    @ApiOperation(value = "员工端获取订单概况")
    public R<StaffActivityOrderTotalVo> getStaffActivityOrderTotal(@RequestBody StaffTotalDto staffTotalDto) {
        Long userId = SecurityUtils.getUserId();
        staffTotalDto.setUserId(userId);
        StaffActivityOrderTotalVo staffActivityOrderTotal = orderService.getStaffActivityOrderTotal(staffTotalDto);
        return R.ok(staffActivityOrderTotal);
    }
    @RequestMapping(value = "/getStaffActivityTotal", method = RequestMethod.POST)
    @ApiOperation(value = "员工端获取活动统计")
    public R<StaffActivityTotalVo> getStaffActivityTotal(@RequestBody StaffTotalDto staffTotalDto) {
        Long userId = SecurityUtils.getUserId();
        staffTotalDto.setUserId(userId);
        StaffActivityTotalVo staffActivityTotalVo = orderService.getStaffActivityTotal(staffTotalDto);
        return R.ok(staffActivityTotalVo);
    }
    @RequestMapping(value = "/getStaffOrderDistributionTotal", method = RequestMethod.POST)
    @ApiOperation(value = "员工端获取订单分布统计")
    public R<MerOrderDistributionTotalVo> getStaffOrderDistributionTotal(@RequestBody StaffTotalDto staffTotalDto) {
        Long userId = SecurityUtils.getUserId();
        staffTotalDto.setUserId(userId);
        MerOrderDistributionTotalVo orderTotalVo = orderService.getStaffOrderDistributionTotal(staffTotalDto);
        return R.ok(orderTotalVo);
    }
    @RequestMapping(value = "/getStaffOrderTypeTotal", method = RequestMethod.POST)
    @ApiOperation(value = "员工端获取销售占比统计")
    public R<MerOrderTypeTotalVo> getMerOrderTypeTotal(@RequestBody StaffTotalDto staffTotalDto) {
        Long userId = SecurityUtils.getUserId();
        staffTotalDto.setUserId(userId);
        MerOrderTypeTotalVo orderTotalVo = orderService.getStaffOrderTypeTotal(staffTotalDto);
        return R.ok(orderTotalVo);
    }
    @RequestMapping(value = "/getStaffActivityGetMemberTotal", method = RequestMethod.POST)
    @ApiOperation(value = "员工端获取获客人数")
    public R<StaffActivityDateMemberTotalVo> getStaffActivityGetMemberTotal(@RequestBody StaffTotalDto staffTotalDto) {
        Long userId = SecurityUtils.getUserId();
        staffTotalDto.setUserId(userId);
        StaffActivityDateMemberTotalVo dateMemberTotalVo = orderService.getStaffActivityGetMemberTotal(staffTotalDto);
        return R.ok(dateMemberTotalVo);
    }
    @RequestMapping(value = "/getStaffActivityMemberTotal", method = RequestMethod.POST)
    @ApiOperation(value = "员工端获取参与人数")
    public R<StaffActivityDateMemberTotalVo> getStaffActivityMemberTotal(@RequestBody StaffTotalDto staffTotalDto) {
        Long userId = SecurityUtils.getUserId();
        staffTotalDto.setUserId(userId);
        StaffActivityDateMemberTotalVo dateMemberTotalVo = orderService.getStaffActivityMemberTotal(staffTotalDto);
        return R.ok(dateMemberTotalVo);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtPlTotalActivityTotalVo.java
@@ -72,10 +72,10 @@
    @ApiModelProperty(value = "活动次数排行")
    private List<MgtMapIntTotalVo> activityRankList;
    @ApiModelProperty(value = "活动次数排行")
    @ApiModelProperty(value = "商户活动销售额排名")
    private List<MgtMapBigTotalVo> shopSalesRankList;
    @ApiModelProperty(value = "活动次数排行")
    @ApiModelProperty(value = "活动销售额排名")
    private List<MgtMapBigTotalVo> activitySalesRankList;
    @ApiModelProperty(value = "活动年龄分布key")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/StaffActivityDateMemberTotalVo.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.order.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName StaffActivityDateMemberTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/17 18:39
 * @Version 1.0
 */
@Data
public class StaffActivityDateMemberTotalVo {
    @ApiModelProperty(value = "活动人数key")
    private String[] dateMemberTotalKey;
    @ApiModelProperty(value = "活动人数key")
    private Integer[] dateMemberTotalValue;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/StaffActivityOrderTotalVo.java
New file
@@ -0,0 +1,36 @@
package com.ruoyi.order.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @ClassName StaffActivityOrderTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/17 15:15
 * @Version 1.0
 */
@Data
public class StaffActivityOrderTotalVo {
    @ApiModelProperty(value = "总订单数")
    private Integer orderTotal;
    @ApiModelProperty(value = "总订单金额")
    private BigDecimal orderMoney;
    @ApiModelProperty(value = "周期订单数")
    private Integer cycleTotal;
    @ApiModelProperty(value = "体验订单数")
    private Integer experienceTotal;
    @ApiModelProperty(value = "服务订单数")
    private Integer serviceTotal;
    @ApiModelProperty(value = "参与人数")
    private Integer memberTotal;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/StaffActivityTotalVo.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.order.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName StaffActivityTotalVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/17 15:49
 * @Version 1.0
 */
@Data
public class StaffActivityTotalVo {
    @ApiModelProperty(value = "总获客数")
    private Integer memberTotal;
    @ApiModelProperty(value = "周期人数")
    private Integer cycleTotal;
    @ApiModelProperty(value = "体验人数")
    private Integer experienceTotal;
    @ApiModelProperty(value = "服务人数")
    private Integer serviceTotal;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -532,4 +532,62 @@
     * @return  Integer
     */
    Integer countUserActivityByActivity(@Param("userId")Long userId, @Param("activityId")String activityId);
    /**
     * @description  员工端活动订单统计
     * @author  jqs
     * @date    2023/7/17 15:25
     * @param staffTotalDto
     * @return  StaffActivityOrderTotalVo
     */
    StaffActivityOrderTotalVo getStaffActivityOrderTotal(@Param("param")StaffTotalDto staffTotalDto);
    /**
     * @description  员工端活动统计
     * @author  jqs
     * @date    2023/7/17 15:51
     * @param staffTotalDto
     * @return  StaffActivityTotalVo
     */
    StaffActivityTotalVo getStaffActivityTotal(@Param("param")StaffTotalDto staffTotalDto);
    /**
     * @description 获取各年龄层统计
     * @author  jqs
     * @date    2023/7/4 10:27
     * @param userIdList
     * @return  MgtMapTotalPlusVo
     */
    MgtMapTotalPlusVo listStaffActivityOrderDistributionTotal(@Param("userIdList")List<Long> userIdList,@Param("shopId")Long shopId,@Param("activityId")String activityId);
    /**
     * @description  员工端活动统计销售占比
     * @author  jqs
     * @date    2023/7/17 17:05
     * @param staffTotalDto
     * @return  List<MgtMapTotalPlusVo>
     */
    List<MgtMapTotalPlusVo> listStaffOrderTotalGoodsType(@Param("param")StaffTotalDto staffTotalDto);
    /**
     * @description  员工端获取活动获客人数
     * @author  jqs
     * @date    2023/7/17 18:44
     * @param staffTotalDto
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapIntTotalVo> getStaffActivityGetMemberTotal(@Param("param")StaffTotalDto staffTotalDto);
    /**
     * @description  员工端获取活动获客人数
     * @author  jqs
     * @date    2023/7/17 18:44
     * @param staffTotalDto
     * @return  List<MgtMapIntTotalVo>
     */
    List<MgtMapIntTotalVo> getStaffActivityMemberTotal(@Param("param")StaffTotalDto staffTotalDto);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -46,6 +46,8 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -220,6 +222,9 @@
                    }
                }
            }
            if(appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()){
                appSureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList);
            }
            appSureOrderGoodsVo.setUseCoupon(useCoupon);
            appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
            appSureOrderGoodsVo.setCouponDiscount(discountMoney);
@@ -238,6 +243,18 @@
        }
        //处理优惠券列表
        if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
            for (AppMemberCouponVo entity : appMemberCouponVoList) {
                if(userCouponIdSet!=null&&userCouponIdSet.contains(entity.getMemberCouponId())){
                    entity.setUseFlag(1);
                }else{
                    entity.setUseFlag(0);
                }
            }
            for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) {
                sureOrderGoodsVo.setAppMemberCouponVoList(appMemberCouponVoList);
            }
        }
        /*if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
            // 获取商品关联优惠券
            appGoodsMemberCouponVoList = new ArrayList<>();
            for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList){
@@ -288,7 +305,7 @@
                }
                sureOrderGoodsVo.setAppMemberCouponVoList(appGoodsMemberCouponVoList);
            }
        }
        }*/
        // 设置订单相关金额
        appSureOrderVo.setOrderGoodsMoney(orderGoodsMoney);
        appSureOrderVo.setCouponDiscount(couponDiscount);
@@ -3236,4 +3253,243 @@
            remoteActivityService.changeActivityTotal(activityTotalChangeDto);
        }
    }
    /**
     * @description  员工端活动订单统计
     * @author  jqs
     * @date    2023/7/17 15:25
     * @param staffTotalDto
     * @return  StaffActivityOrderTotalVo
     */
    @Override
    public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto){
        StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto);
        return staffActivityOrderTotalVo;
    }
    /**
     * @description  员工端活动统计
     * @author  jqs
     * @date    2023/7/17 15:51
     * @param staffTotalDto
     * @return  StaffActivityTotalVo
     */
    @Override
    public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto){
        StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto);
        return staffActivityTotalVo;
    }
    /**
     * @description  员工端活动统计订单分布
     * @author  jqs
     * @date    2023/7/17 16:16
     * @param staffTotalDto
     * @return  MerOrderDistributionTotalVo
     */
    @Override
    public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto){
        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
        // 获取订单年龄用户列表
        MerTotalDto merTotalDto = new MerTotalDto();
        merTotalDto.setShopId(staffTotalDto.getShopId());
        List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData();
        // 如果订单年龄用户列表不为空
        if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) {
            // 定义变量
            Integer ageType;
            List<Long> userIdList;
            MerOrderAgeUserVo orderAgeUserVo;
            MgtMapTotalPlusVo mgtMapTotalPlusVo;
            String[] orderTotalKey = new String[5];
            Integer[] orderTotalValue = new Integer[5];
            BigDecimal[] orderMoneyValue = new BigDecimal[5];
            // 遍历订单年龄用户列表
            for (int i = 0; i < orderAgeUserVoList.size(); i++) {
                orderAgeUserVo = orderAgeUserVoList.get(i);
                ageType = orderAgeUserVo.getAgeType();
                userIdList = orderAgeUserVo.getUserIdList();
                // 根据年龄类型设置订单总数键
                switch (ageType) {
                    case 1:
                        orderTotalKey[i] = "<20";
                        break;
                    case 2:
                        orderTotalKey[i] = "21-30";
                        break;
                    case 3:
                        orderTotalKey[i] = "31-40";
                        break;
                    case 4:
                        orderTotalKey[i] = "41-50";
                        break;
                    case 5:
                        orderTotalKey[i] = ">50";
                        break;
                }
                // 如果用户ID列表不为空
                if (userIdList != null && !userIdList.isEmpty()) {
                    mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList,staffTotalDto.getShopId(),staffTotalDto.getActivityId());
                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
                } else {
                    orderTotalValue[i] = 0;
                    orderMoneyValue[i] = BigDecimal.ZERO;
                }
            }
            // 设置订单分布总数对象的属性值
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        // 返回订单分布总数对象
        return orderDistributionTotalVo;
    }
    /**
     * @description  员工端活动统计销售占比
     * @author  jqs
     * @date    2023/7/17 17:03
     * @param staffTotalDto
     * @return  MerOrderTypeTotalVo
     */
    @Override
    public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto){
        MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo();
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listStaffOrderTotalGoodsType(staffTotalDto);
        List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>();
        List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>();
        if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) {
            MgtMapIntTotalVo MgtMapIntTotalVo;
            MgtMapBigTotalVo mgtMapBigTotalVo;
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) {
                MgtMapIntTotalVo = new MgtMapIntTotalVo();
                mgtMapBigTotalVo = new MgtMapBigTotalVo();
                MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst());
                mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond());
                if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) {
                    MgtMapIntTotalVo.setMapKey("周期");
                    mgtMapBigTotalVo.setMapKey("周期");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) {
                    MgtMapIntTotalVo.setMapKey("服务");
                    mgtMapBigTotalVo.setMapKey("服务");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) {
                    MgtMapIntTotalVo.setMapKey("体验");
                    mgtMapBigTotalVo.setMapKey("体验");
                } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) {
                    MgtMapIntTotalVo.setMapKey("单品");
                    mgtMapBigTotalVo.setMapKey("单品");
                }
                goodsTypeTotalList.add(MgtMapIntTotalVo);
                goodsTypeMoneyList.add(mgtMapBigTotalVo);
            }
            orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList);
            orderTypeTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList);
        }
        return orderTypeTotalVo;
    }
    /**
     * @description  员工端获客人数
     * @author  jqs
     * @date    2023/7/17 18:42
     * @param staffTotalDto
     * @return  StaffActivityDateMemberTotalVo
     */
    @Override
    public StaffActivityDateMemberTotalVo getStaffActivityGetMemberTotal(StaffTotalDto staffTotalDto) {
        // 创建返回对象
        StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo();
        // 查询数据库获取数据
        List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityGetMemberTotal(staffTotalDto);
        // 将查询结果转为Map
        Map<String, Integer> map = new HashMap<>();
        if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) {
            map = mgtMapIntTotalVoList.stream()
                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
        }
        // 获取日期范围
        List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate());
        int size = dateList.size();
        // 创建日期和成员总数的数组
        String[] dateMemberTotalKey = new String[size];
        Integer[] dateMemberTotalValue = new Integer[size];
        // 遍历日期列表,设置日期和成员总数的数组
        String str;
        Integer value;
        for (int i = 0; i < size; i++) {
            str = dateList.get(i);
            dateMemberTotalKey[i] = str;
            value = map.get(str);
            dateMemberTotalValue[i] = (value != null) ? value : 0;
        }
        // 设置返回对象的日期和成员总数数组
        staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey);
        staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue);
        // 返回结果对象
        return staffActivityDateMemberTotalVo;
    }
    /**
     * @description  员工端获客人数
     * @author  jqs
     * @date    2023/7/17 18:42
     * @param staffTotalDto
     * @return  StaffActivityDateMemberTotalVo
     */
    @Override
    public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) {
        // 创建返回对象
        StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo();
        // 查询数据库获取数据
        List<MgtMapIntTotalVo> mgtMapIntTotalVoList = orderMapper.getStaffActivityMemberTotal(staffTotalDto);
        // 将查询结果转为Map
        Map<String, Integer> map = new HashMap<>();
        if (mgtMapIntTotalVoList != null && !mgtMapIntTotalVoList.isEmpty()) {
            map = mgtMapIntTotalVoList.stream()
                    .collect(Collectors.toMap(MgtMapIntTotalVo::getMapKey, MgtMapIntTotalVo::getMapValue));
        }
        // 获取日期范围
        List<String> dateList = getDateRange(staffTotalDto.getStartDate(), staffTotalDto.getEndDate());
        int size = dateList.size();
        // 创建日期和成员总数的数组
        String[] dateMemberTotalKey = new String[size];
        Integer[] dateMemberTotalValue = new Integer[size];
        // 遍历日期列表,设置日期和成员总数的数组
        String str;
        Integer value;
        for (int i = 0; i < size; i++) {
            str = dateList.get(i);
            dateMemberTotalKey[i] = str;
            value = map.get(str);
            dateMemberTotalValue[i] = (value != null) ? value : 0;
        }
        // 设置返回对象的日期和成员总数数组
        staffActivityDateMemberTotalVo.setDateMemberTotalKey(dateMemberTotalKey);
        staffActivityDateMemberTotalVo.setDateMemberTotalValue(dateMemberTotalValue);
        // 返回结果对象
        return staffActivityDateMemberTotalVo;
    }
    /**
     * @description  获取时间段日期
     * @author  jqs
     * @date    2023/7/17 19:11
     * @param startDate
     * @param endDate
     * @return  List<String>
     */
    public static List<String> getDateRange(String startDate, String endDate) {
        List<String> dateList = new ArrayList<>();
        LocalDate start = LocalDate.parse(startDate);
        LocalDate end = LocalDate.parse(endDate);
        while (!start.isAfter(end)) {
            dateList.add(start.format(DateTimeFormatter.ISO_DATE));
            start = start.plusDays(1);
        }
        return dateList;
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -422,4 +422,60 @@
     * @param orderId
     */
    void refundOrder(String orderId);
    /**
     * @description  员工端活动订单统计
     * @author  jqs
     * @date    2023/7/17 15:25
     * @param staffTotalDto
     * @return  StaffActivityOrderTotalVo
     */
    StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto);
    /**
     * @description  员工端活动统计
     * @author  jqs
     * @date    2023/7/17 15:51
     * @param staffTotalDto
     * @return  StaffActivityTotalVo
     */
    StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto);
    /**
     * @description  员工端活动统计订单分布
     * @author  jqs
     * @date    2023/7/17 16:16
     * @param staffTotalDto
     * @return  MerOrderDistributionTotalVo
     */
    MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto);
    /**
     * @description  员工端活动统计销售占比
     * @author  jqs
     * @date    2023/7/17 17:03
     * @param staffTotalDto
     * @return  MerOrderTypeTotalVo
     */
    MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto);
    /**
     * @description  员工端获客人数
     * @author  jqs
     * @date    2023/7/17 18:42
     * @param staffTotalDto
     * @return  StaffActivityDateMemberTotalVo
     */
    StaffActivityDateMemberTotalVo getStaffActivityGetMemberTotal(StaffTotalDto staffTotalDto);
    /**
     * @description  员工端获客人数
     * @author  jqs
     * @date    2023/7/17 18:42
     * @param staffTotalDto
     * @return  StaffActivityDateMemberTotalVo
     */
    StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto);
}
ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -311,7 +311,7 @@
        toc.order_from orderFrom
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0
        WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId}
        <if test="param.memberUserId != null and param.memberUserId != ''">
            AND toc.user_id = #{param.memberUserId}
        </if>
@@ -1463,4 +1463,108 @@
        FROM t_order
        WHERE del_flag = 0 AND order_from =2 AND user_id = #{userId} AND activity_id = #{activityId} AND order_status &gt; 0
    </select>
    <select id="getStaffActivityOrderTotal" resultType="com.ruoyi.order.domain.vo.StaffActivityOrderTotalVo">
        SELECT
            COUNT(DISTINCT toc.order_id) orderTotal,
            IFNULL(SUM(toc.order_money),0) orderMoney,
            COUNT(DISTINCT toc.user_id) memberTotal,
            IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal,
            IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) experienceTotal,
            IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) serviceTotal
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2
        <if test="param.activityId !=null and param.activityId != ''">
            AND toc.activity_id = #{param.activityId}
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND toc.create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND toc.create_time &lt;= #{param.endDate}
        </if>
    </select>
    <select id="getStaffActivityTotal" resultType="com.ruoyi.order.domain.vo.StaffActivityTotalVo">
        SELECT
        COUNT(toa.user_id) memberTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) experienceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) serviceTotal
        FROM t_order toa
        INNER JOIN t_order_goods tog ON tog.order_id = toa.order_id
        WHERE toa.order_id IN
        (SELECT firstOrder.orderId FROM
        (SELECT toc.user_id userId, MIN(toc.create_time) createTime,  MIN(toc.order_id) orderId
        FROM t_order toc WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} GROUP BY toc.user_id) AS firstOrder)
        AND toa.order_from = 2
        <if test="param.activityId !=null and param.activityId != ''">
            AND toc.activity_id = #{param.activityId}
        </if>
    </select>
    <select id="listStaffActivityOrderDistributionTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        COUNT(order_id) AS mapValueFirst,
        IFNULL(SUM(order_money),0) AS mapValueSecond
        FROM t_order
        WHERE del_flag = 0 AND shop_id = #{shopId} AND order_from = 2 AND user_id IN
        <foreach collection="userIdList" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
        <if test="activityId !=null and activityId != ''">
            AND activity_id = #{activityId}
        </if>
    </select>
    <select id="listStaffOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo">
        SELECT
        tog.goods_type mapKey,
        COUNT(DISTINCT toc.order_id) AS mapValueFirst,
        IFNULL(SUM(tog.goods_total_money),0) AS mapValueSecond
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2
        <if test="param.activityId !=null and param.activityId != ''">
            AND toc.activity_id = #{param.activityId}
        </if>
        GROUP BY tog.goods_type
    </select>
    <select id="getStaffActivityGetMemberTotal" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
            DATE(toc.create_time) AS mapKey,
            COUNT(DISTINCT toc.user_id) AS mapValue
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.order_id IN
        (SELECT firstOrder.orderId FROM
        (SELECT toa.user_id userId, MIN(toa.create_time) createTime,  MIN(toa.order_id) orderId
        FROM t_order toa WHERE toa.del_flag = 0 AND toa.shop_id = #{param.shopId} GROUP BY toa.user_id) AS firstOrder)
        AND toc.order_from = 2
        <if test="param.activityId !=null and param.activityId != ''">
            AND toc.activity_id = #{param.activityId}
        </if>
        <if test="param.goodsType !=null and param.goodsType != ''">
            AND tog.goods_type = #{param.goodsType}
        </if>
        GROUP BY toc.order_date
    </select>
    <select id="getStaffActivityMemberTotal" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo">
        SELECT
        DATE(toc.create_time) AS mapKey,
        COUNT(DISTINCT toc.user_id) AS mapValue
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2
        <if test="param.activityId !=null and param.activityId != ''">
            AND toc.activity_id = #{param.activityId}
        </if>
        <if test="param.goodsType !=null and param.goodsType != ''">
            AND tog.goods_type = #{param.goodsType}
        </if>
        GROUP BY toc.order_date
    </select>
</mapper>
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -7,6 +7,7 @@
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.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
@@ -71,6 +72,9 @@
    {
        String mobile = qwUserDetail.getMobile();
        ShopStaff shopStaff = shopStaffService.getByMobile(mobile);
        if(shopStaff==null){
            throw new ServiceException(AppErrorConstant.USER_NO_SHOP);
        }
        Long userId = shopStaff.getUserId();
        SysUser sysUser = remoteUserService.getSysUser(userId).getData();
        Optional.ofNullable(sysUser).orElseThrow(() -> new ServiceException("登录失败,未查询到用户"));
@@ -280,4 +284,6 @@
        }
        return R.ok(marketingStatus);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopInfoVo.java
@@ -19,6 +19,9 @@
    @ApiModelProperty(value = "商户id")
    private Long shopId;
    @ApiModelProperty(value="商户编号")
    private String shopNumber;
    @ApiModelProperty(value="商户名称")
    private String shopName;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffShopTaskPageVo.java
@@ -25,6 +25,9 @@
    @ApiModelProperty(value="任务内容")
    private String taskContent;
    @ApiModelProperty(value="任务标题")
    private String taskTitle;
    @ApiModelProperty(value="紧急情况")
    private String emergencyState;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -10,7 +10,6 @@
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.shop.domain.dto.*;
import com.ruoyi.shop.domain.pojo.shop.*;
import com.ruoyi.shop.domain.pojo.task.ShopFile;
@@ -213,10 +212,10 @@
            shop.setShopDetail(shopDetail);
        }
        //商户编号
        if(mgtEditShopDto.getShopId()==null){
        /*if(mgtEditShopDto.getShopId()==null){
            String shopNo = CodeFactoryUtil.getShopNo();
            shop.setShopNumber(shopNo);
        }
        }*/
        this.saveOrUpdate(shop);
        //商户标签
        String shopTagIds = mgtEditShopDto.getShopTagIds();
@@ -634,6 +633,9 @@
    public void transferMgtShop(MgtTransferShopDto mgtTransferShopDto){
        Shop shop = this.getByShopId(mgtTransferShopDto.getShopId());
        if(shop.getBelongUserId()!=null){
            if(shop.getBelongUserId().equals(mgtTransferShopDto.getUserId())){
                throw new ServiceException(AppErrorConstant.TRANS_NOT_MYSELF);
            }
            ShopTransferRecord shopTransferRecord = new ShopTransferRecord();
            shopTransferRecord.setDelFlag(0);
            shopTransferRecord.setShopId(shop.getShopId());
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java
@@ -159,9 +159,11 @@
            for(StaffShopTaskPageVo staffShopTaskPageVo : shopTaskPageVoList){
                //获取任务用户信息
                userId = staffShopTaskPageVo.getUserId();
                sysUser = remoteUserService.getSysUser(userId).getData();
                staffShopTaskPageVo.setUserName(sysUser.getNickName());
                staffShopTaskPageVo.setUserPicture(sysUser.getAvatar());
                if(userId!=null){
                    sysUser = remoteUserService.getSysUser(userId).getData();
                    staffShopTaskPageVo.setUserName(sysUser.getNickName());
                    staffShopTaskPageVo.setUserPicture(sysUser.getAvatar());
                }
            }
        }
        return shopTaskPageVoList;
ruoyi-modules/ruoyi-shop/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopTaskMapper.xml
@@ -106,13 +106,14 @@
        tst.task_id taskId,
        tst.task_date taskDate,
        tst.follow_content taskContent,
        tst.task_title taskTitle,
        tst.emergency_state emergencyState,
        CASE WHEN tst.task_date = DATE(now()) THEN 1 ELSE 0 END todayFlag,
        tstr.user_id userId,
        tstr.create_time followTime
        FROM t_shop_task tst
        LEFT JOIN t_shop_task_record tstr ON tstr.task_id = tst.task_id
        WHERE tst.del_flag = 0 AND tst.shop_id = #{param.shopId} AND tstr.id = (SELECT MAX(id) FROM t_shop_task_record WHERE task_id = tst.task_id)
        LEFT JOIN t_shop_task_record tstr ON tstr.task_id = tst.task_id AND tstr.id = (SELECT MAX(id) FROM t_shop_task_record WHERE task_id = tst.task_id)
        WHERE tst.del_flag = 0 AND tst.shop_id = #{param.shopId}
        <if test="param.taskStatus!=null and param.taskStatus != ''">
            AND tst.task_status = #{param.taskStatus}
        </if>
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java
@@ -12,6 +12,7 @@
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.AppEditUserDto;
import com.ruoyi.system.api.domain.poji.sys.SysDept;
import com.ruoyi.system.api.domain.poji.sys.SysRole;
@@ -438,6 +439,9 @@
    {
        String mobile = qwUserDetail.getMobile();
        SysStaff sysStaff = sysStaffService.getByMobile(mobile);
        if(sysStaff==null){
            throw new ServiceException(AppErrorConstant.USER_NO_SYSTEM);
        }
        Long userId = sysStaff.getUserId();
        SysUser sysUser = userService.selectUserById(userId);
        Optional.ofNullable(sysUser).orElseThrow(() -> new ServiceException("登录失败,未查询到用户"));
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java
@@ -163,6 +163,7 @@
        Long userId = Long.valueOf(mgtBaseGetDto.getId());
        SysStaff sysStaff = this.getByUserId(userId);
        sysStaff.setDelFlag(1);
        sysStaff.setStaffMobile(sysStaff.getStaffMobile()+":已删除");
        this.saveOrUpdate(sysStaff);
        sysUserService.deleteUserById(mgtBaseGetDto.getUserId());
    }
ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置
ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/StaffSuggestMapper.xml
@@ -53,7 +53,7 @@
        </if>
    </select>
    <select id="pageMerShopSuggest" resultType="com.ruoyi.shop.domain.vo.MerShopSuggestVo">
    <select id="pageMerShopSuggest" resultType="com.ruoyi.system.domain.vo.StaffSuggestPageVo">
        SELECT
            suggest_content suggestContent,
            replay_content replayContent,
ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml
@@ -213,11 +213,11 @@
    </update>
    
    <delete id="deleteUserById" parameterType="Long">
         update sys_user set del_flag = '2' where user_id = #{userId}
         update sys_user set del_flag = '2',user_name CONCAT(user_name,":已删除") where user_id = #{userId}
     </delete>
     
     <delete id="deleteUserByIds" parameterType="Long">
         update sys_user set del_flag = '2' where user_id in
         update sys_user set del_flag = '2',user_name CONCAT(user_name,":已删除") where user_id in
         <foreach collection="array" item="userId" open="(" separator="," close=")">
             #{userId}
        </foreach> 
ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml
@@ -14,12 +14,12 @@
    nacos:
      discovery:
        # 服务注册地址
        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
      config:
        # 配置中心地址
        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
        # 配置文件格式
        file-extension: yml
        # 共享配置