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()) >= 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 > 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 >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND toc.create_time <= #{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 # 共享配置