From 9c6fd541f0aa8e384c26998597a6788bb77eca8d Mon Sep 17 00:00:00 2001 From: jiangqs <jiangqs> Date: 星期二, 04 七月 2023 14:56:25 +0800 Subject: [PATCH] 商户端营销统计 --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java | 9 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml | 96 ++++++++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java | 3 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java | 5 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerTotalController.java | 35 +++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java | 13 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 43 +++ ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java | 38 +++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java | 10 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 177 +++++++++++++++ ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java | 4 ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml | 37 +++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java | 3 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java | 8 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtCustomConfigVo.java | 4 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java | 3 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java | 41 +++ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtActivenessListVo.java | 22 ++ ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java | 9 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerOrderAgeUserVo.java | 23 ++ ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java | 14 + ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java | 13 22 files changed, 580 insertions(+), 30 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java index f608d76..9b92731 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java @@ -29,4 +29,7 @@ @ApiModelProperty(value = "商户id集合",hidden = true) private List<Long> shopIdList; + + @ApiModelProperty(value = "年龄层",hidden = true) + private Integer ageType; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerOrderAgeUserVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerOrderAgeUserVo.java new file mode 100644 index 0000000..31f0f28 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerOrderAgeUserVo.java @@ -0,0 +1,23 @@ +package com.ruoyi.system.api.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @ClassName MerOrderAgeUserVo + * @Description TODO + * @Author jqs + * @Date 2023/7/4 9:47 + * @Version 1.0 + */ +@Data +public class MerOrderAgeUserVo { + + @ApiModelProperty(value = "年龄层") + private Integer ageType; + + @ApiModelProperty(value = "用户id列表") + private List<Long> userIdList; +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java index 592921f..d1e57d8 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java @@ -112,6 +112,11 @@ return R.fail("更新会员统计失败:" + throwable.getMessage()); } + @Override + public R<List<MerOrderAgeUserVo>> listOrderAgeUser(MerTotalDto merTotalDto) { + return R.fail("获取年龄段userId失败:" + throwable.getMessage()); + } + }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java index 1792555..f93da4d 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java @@ -162,5 +162,13 @@ public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto); - + /** + * @description 获取各年龄层userId + * @author jqs + * @date 2023/7/4 9:49 + * @param merTotalDto + * @return R<MerOrderAgeUserVo> + */ + @PostMapping("/listOrderAgeUser") + public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java index d885f38..2131241 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java @@ -51,7 +51,7 @@ } @RequestMapping(value = "/getMerMemberSourceTotal", method = RequestMethod.POST) - @ApiOperation(value = "获取商户会员人数统计") + @ApiOperation(value = "获取商户会员来源统计") public R<MerMemberSourceTotalVo> getMerMemberSourceTotal(@RequestBody MerTotalDto merTotalDto) { Long userId = SecurityUtils.getUserId(); merTotalDto.setUserId(userId); @@ -60,7 +60,7 @@ } @RequestMapping(value = "/getMerMemberRecommendTotal", method = RequestMethod.POST) - @ApiOperation(value = "获取商户会员人数统计") + @ApiOperation(value = "获取商户会员推荐统计") public R<MerMemberRecommendTotalVo> getMerMemberRecommendTotal(@RequestBody MerTotalDto merTotalDto) { Long userId = SecurityUtils.getUserId(); merTotalDto.setUserId(userId); diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java index 57653aa..6ff26b5 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java @@ -250,4 +250,18 @@ memberService.changeMemberTotal(memberTotalChangeDto); return R.ok(); } + + /** + * @description 获取各年龄层userId + * @author jqs + * @date 2023/7/4 9:49 + * @param merTotalDto + * @return R<MerOrderAgeUserVo> + */ + @PostMapping("/listOrderAgeUser") + public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto) + { + List<MerOrderAgeUserVo> orderAgeUserVoList = memberService.listOrderAgeUser(merTotalDto); + return R.ok(orderAgeUserVoList); + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java index b7fc156..181ff9b 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java @@ -365,6 +365,15 @@ * @return List<MgtMapIntTotalVo> */ List<MgtMapIntTotalVo> getMerMemberRecommendRank(@Param("param") MerTotalDto merTotalDto); + + /** + * @description 获取各年龄层用户 + * @author jqs + * @date 2023/7/4 9:55 + * @param ageType + * @return List<Long> + */ + List<Long> listOrderAgeUser(@Param("param") MerTotalDto merTotalDto); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java index e973ada..a452f4d 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java @@ -1501,4 +1501,47 @@ } return memberRecommendTotalVo; } + + /** + * @description 获取各年龄层用户 + * @author jqs + * @date 2023/7/4 9:50 + * @param merTotalDto + * @return MerOrderAgeUserVo + */ + @Override + public List<MerOrderAgeUserVo> listOrderAgeUser(MerTotalDto merTotalDto){ + List<MerOrderAgeUserVo> orderAgeUserVoList = new ArrayList<>(); + MerOrderAgeUserVo merOrderAgeUserVo = new MerOrderAgeUserVo(); + merTotalDto.setAgeType(1); + List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto); + merOrderAgeUserVo.setAgeType(1); + merOrderAgeUserVo.setUserIdList(userIdList); + orderAgeUserVoList.add(merOrderAgeUserVo); + merOrderAgeUserVo = new MerOrderAgeUserVo(); + merTotalDto.setAgeType(2); + userIdList = memberMapper.listOrderAgeUser(merTotalDto); + merOrderAgeUserVo.setAgeType(2); + merOrderAgeUserVo.setUserIdList(userIdList); + orderAgeUserVoList.add(merOrderAgeUserVo); + merOrderAgeUserVo = new MerOrderAgeUserVo(); + merTotalDto.setAgeType(3); + userIdList = memberMapper.listOrderAgeUser(merTotalDto); + merOrderAgeUserVo.setAgeType(3); + merOrderAgeUserVo.setUserIdList(userIdList); + orderAgeUserVoList.add(merOrderAgeUserVo); + merOrderAgeUserVo = new MerOrderAgeUserVo(); + merTotalDto.setAgeType(4); + userIdList = memberMapper.listOrderAgeUser(merTotalDto); + merOrderAgeUserVo.setAgeType(4); + merOrderAgeUserVo.setUserIdList(userIdList); + orderAgeUserVoList.add(merOrderAgeUserVo); + merOrderAgeUserVo = new MerOrderAgeUserVo(); + merTotalDto.setAgeType(5); + userIdList = memberMapper.listOrderAgeUser(merTotalDto); + merOrderAgeUserVo.setAgeType(4); + merOrderAgeUserVo.setUserIdList(userIdList); + orderAgeUserVoList.add(merOrderAgeUserVo); + return orderAgeUserVoList; + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java index c09cce6..b842437 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java @@ -312,4 +312,13 @@ * @return MerMemberRecommendTotalVo */ MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto); + + /** + * @description 获取各年龄层用户 + * @author jqs + * @date 2023/7/4 9:50 + * @param merTotalDto + * @return MerOrderAgeUserVo + */ + List<MerOrderAgeUserVo> listOrderAgeUser(MerTotalDto merTotalDto); } diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml index 5bbea31..9eae3c5 100644 --- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml +++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml @@ -907,4 +907,41 @@ GROUP BY tm.referrer ORDER BY COUNT(tm.user_id) DESC LIMIT 15 </select> + + + <select id="listOrderAgeUser" resultType="java.lang.Long"> + SELECT + SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END) manTotal, + SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) womenTotal, + SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS tenAge, + SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS twentyAge, + SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS ThirtyAge, + SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS fortyAge, + SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 51 THEN 1 ELSE 0 END) AS fiftyAge + FROM t_member WHERE del_flag = 0 AND binding_flag = 1 + <if test="param.shopId != null and param.shopId != ''"> + AND relation_shop_id = #{param.shopId} + </if> + <if test="param.shopIdList != null and param.shopIdList.size() > 0"> + AND relation_shop_id IN + <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </if> + <if test="param.ageType !=null and param.ageType == 1"> + AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 + </if> + <if test="param.ageType !=null and param.ageType == 2"> + AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 + </if> + <if test="param.ageType !=null and param.ageType == 3"> + AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 + </if> + <if test="param.ageType !=null and param.ageType == 4"> + AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 + </if> + <if test="param.ageType !=null and param.ageType == 5"> + AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 51 + </if> + </select> </mapper> diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerTotalController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerTotalController.java index 913d2e4..6003f99 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerTotalController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerTotalController.java @@ -2,7 +2,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; -import com.ruoyi.order.domain.vo.MerOrderTotalVo; +import com.ruoyi.order.domain.vo.*; import com.ruoyi.order.service.order.OrderService; import com.ruoyi.system.api.domain.dto.MerTotalDto; import io.swagger.annotations.Api; @@ -38,6 +38,39 @@ return R.ok(orderTotalVo); } + @RequestMapping(value = "/getMerOrderDistributionTotal", method = RequestMethod.POST) + @ApiOperation(value = "商户获取订单分布统计") + public R<MerOrderDistributionTotalVo> getMerOrderDistributionTotal(@RequestBody MerTotalDto merTotalDto) { + Long userId = SecurityUtils.getUserId(); + merTotalDto.setUserId(userId); + MerOrderDistributionTotalVo orderTotalVo = orderService.MerOrderDistributionTotalVo(merTotalDto); + return R.ok(orderTotalVo); + } + @RequestMapping(value = "/getMerOrderTypeTotal", method = RequestMethod.POST) + @ApiOperation(value = "商户获取销售占比统计") + public R<MerOrderTypeTotalVo> getMerOrderTypeTotal(@RequestBody MerTotalDto merTotalDto) { + Long userId = SecurityUtils.getUserId(); + merTotalDto.setUserId(userId); + MerOrderTypeTotalVo orderTotalVo = orderService.getMerOrderTypeTotal(merTotalDto); + return R.ok(orderTotalVo); + } + @RequestMapping(value = "/getMerOrderGoodsRank", method = RequestMethod.POST) + @ApiOperation(value = "商户获取销售排行") + public R<MerOrderGoodsRankVo> getMerOrderGoodsRank(@RequestBody MerTotalDto merTotalDto) { + Long userId = SecurityUtils.getUserId(); + merTotalDto.setUserId(userId); + MerOrderGoodsRankVo orderTotalVo = orderService.getMerOrderGoodsRank(merTotalDto); + return R.ok(orderTotalVo); + } + + @RequestMapping(value = "/getMerOrderFromRank", method = RequestMethod.POST) + @ApiOperation(value = "商户获取渠道排行") + public R<MerOrderFromRankVo> getMerOrderFromRank(@RequestBody MerTotalDto merTotalDto) { + Long userId = SecurityUtils.getUserId(); + merTotalDto.setUserId(userId); + MerOrderFromRankVo orderTotalVo = orderService.getMerOrderFromRank(merTotalDto); + return R.ok(orderTotalVo); + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java index f50b1d4..381016b 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java @@ -442,10 +442,47 @@ /** * @description getTotalOrderTotalOrderFrom - * @param mgtBaseShopDto + * @param merTotalDto * @return MgtTotalOrderTotalVo * @author jqs34 * @date 2023/6/19 22:24 */ - MerOrderTotalVo getMerOrderTotalOrderFrom(@Param("param") MgtBaseShopDto mgtBaseShopDto); + MerOrderTotalVo getMerOrderTotalOrderFrom(@Param("param")MerTotalDto merTotalDto); + + + /** + * @description 获取各年龄层统计 + * @author jqs + * @date 2023/7/4 10:27 + * @param userIdList + * @return MgtMapTotalPlusVo + */ + MgtMapTotalPlusVo listMerOrderDistributionTotal(@Param("userIdList")List<Long> userIdList); + + /** + * @description 商户获取销售占比统计 + * @param merTotalDto + * @return List<MgtMapIntTotalVo> + * @author jqs34 + * @date 2023/6/19 22:48 + */ + List<MgtMapTotalPlusVo> listMerOrderTotalGoodsType(@Param("param")MerTotalDto merTotalDto); + + /** + * @description 商户获取销售排名 + * @param merTotalDto + * @return List<MgtMapIntTotalVo> + * @author jqs34 + * @date 2023/6/19 22:48 + */ + List<MgtMapBigTotalVo> listMerOrderTotalGoodsRank(@Param("param")MerTotalDto merTotalDto); + + /** + * @description listTotalOrderTotalOrderFrom + * @param merTotalDto + * @return List<MgtMapIntTotalVo> + * @author jqs34 + * @date 2023/6/19 22:48 + */ + List<MgtMapBigTotalVo> listMerOrderTotalOrderFrom(@Param("param")MerTotalDto merTotalDto); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java index 4708de6..ec6cfb0 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java @@ -2053,8 +2053,181 @@ merTotalDto.setShopIdList(shopIdList); merTotalDto.setShopId(null); } - MerOrderTotalVo orderTotalVo = new MerOrderTotalVo(); - + if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderTotalVo orderTotalVo = orderMapper.getMerOrderTotalOrderFrom(merTotalDto); return orderTotalVo; } + + + /** + * @description + * @author jqs + * @date 2023/7/4 9:29 + * @param merTotalDto + * @return MerOrderDistributionTotalVo + */ + @Override + public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto){ + if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); + // 获取订单年龄用户列表 + 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.listMerOrderDistributionTotal(userIdList); + 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/4 13:58 + * @param merTotalDto + * @return MerOrderTypeTotalVo + */ + @Override + public MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto){ + if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo(); + //获取商品分类销售数据 + List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listMerOrderTotalGoodsType(merTotalDto); + 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/4 14:23 + * @param merTotalDto + * @return MerOrderGoodsRankVo + */ + @Override + public MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto){ + if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderGoodsRankVo orderGoodsRankVo = new MerOrderGoodsRankVo(); + List<MgtMapBigTotalVo> goodsRankList = orderMapper.listMerOrderTotalGoodsRank(merTotalDto); + if (goodsRankList != null && goodsRankList.size() > 0) { + goodsRankList = bigListRemoveNull(goodsRankList); + orderGoodsRankVo.setGoodsRankList(goodsRankList); + } + return orderGoodsRankVo; + } + + + /** + * @description 商户端获取渠道排行 + * @author jqs + * @date 2023/7/4 14:51 + * @param merTotalDto + * @return MerOrderFromRankVo + */ + @Override + public MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto){ + if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ + List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); + merTotalDto.setShopIdList(shopIdList); + merTotalDto.setShopId(null); + } + MerOrderFromRankVo merOrderFromRankVo = new MerOrderFromRankVo(); + //获取来源销售排名 + List<MgtMapBigTotalVo> orderFromList = orderMapper.listMerOrderTotalOrderFrom(merTotalDto); + if (orderFromList != null && orderFromList.size() > 0) { + orderFromList = bigListRemoveNull(orderFromList); + merOrderFromRankVo.setOrderFromRankList(orderFromList); + } + return merOrderFromRankVo; + } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java index f60c525..8aedab4 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java @@ -298,11 +298,47 @@ BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto); /** - * @description 商户获取订单统计 + * @description 商户端获取订单统计 * @author jqs * @date 2023/7/3 19:29 * @param merTotalDto * @return MerOrderTotalVo */ MerOrderTotalVo getMerOrderTotal(MerTotalDto merTotalDto); + + /** + * @description 商户端获取订单分布统计 + * @author jqs + * @date 2023/7/4 9:29 + * @param merTotalDto + * @return MerOrderDistributionTotalVo + */ + MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto); + + /** + * @description 商户端获取销售占比统计 + * @author jqs + * @date 2023/7/4 13:58 + * @param merTotalDto + * @return MerOrderTypeTotalVo + */ + MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto); + + /** + * @description 商户端获取销售排行 + * @author jqs + * @date 2023/7/4 14:23 + * @param merTotalDto + * @return MerOrderGoodsRankVo + */ + MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto); + + /** + * @description 商户端获取渠道排行 + * @author jqs + * @date 2023/7/4 14:51 + * @param merTotalDto + * @return MerOrderFromRankVo + */ + MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto); } diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml index 60e7585..9745845 100644 --- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml +++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml @@ -735,7 +735,7 @@ AND toc.create_time <= #{param.endDate} </if> GROUP BY toc.order_from - ORDER BY SUM(toc.order_money) DESC LIMIT 10 + ORDER BY SUM(toc.order_money) DESC LIMIT 15 </select> <select id="getTotalActivityTotal" resultType="com.ruoyi.order.domain.vo.MgtTotalActivityTotalVo"> @@ -1258,4 +1258,98 @@ AND create_time <= #{param.endDate} </if> </select> + + + <select id="listMerOrderDistributionTotal" 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 user_id IN + <foreach collection="userIdList" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </select> + + <select id="listMerOrderTotalGoodsType" 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 + <if test="param.shopId != null and param.shopId != ''"> + AND toc.shop_id = #{param.shopId} + </if> + <if test="param.shopIdList != null and param.shopIdList.size() > 0"> + AND toc.shop_id IN + <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </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> + GROUP BY tog.goods_type + </select> + + <select id="listMerOrderTotalGoodsRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo"> + SELECT + tog.goods_name mapKey, + IFNULL(SUM(tog.goods_total_money),0) mapValue + FROM t_order toc + INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id + WHERE toc.del_flag = 0 + <if test="param.shopId != null and param.shopId != ''"> + AND toc.shop_id = #{param.shopId} + </if> + <if test="param.shopIdList != null and param.shopIdList.size() > 0"> + AND toc.shop_id IN + <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </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> + GROUP BY tog.goods_name + ORDER BY SUM(tog.goods_total_money) DESC LIMIT 10 + </select> + + <select id="listMerOrderTotalOrderFrom" resultType="com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo"> + SELECT + CASE toc.order_from + WHEN 1 THEN "商城订单" + WHEN 2 THEN "秒杀活动订单" + WHEN 3 THEN "线下创建订单" + END mapKey, + IFNULL(SUM(toc.order_money),0) mapValue + FROM t_order toc + WHERE toc.del_flag = 0 + <if test="param.shopId != null and param.shopId != ''"> + AND toc.shop_id = #{param.shopId} + </if> + <if test="param.shopIdList != null and param.shopIdList.size() > 0"> + AND toc.shop_id IN + <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </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> + GROUP BY toc.order_from + ORDER BY SUM(toc.order_money) DESC LIMIT 15 + </select> </mapper> diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java index f7c4ff3..ac3bf4b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java @@ -80,17 +80,17 @@ @RequestMapping(value = "/getCustomConfig", method = RequestMethod.POST) @ApiOperation(value = "获取单个配置") - public R<MgtCustomConfigVo> getCustomConfig(@RequestBody MgtCustomConfigDto mgtCustomConfigDto) { + public R<List<String>> getCustomConfig(@RequestBody MgtCustomConfigDto mgtCustomConfigDto) { Long userId = SecurityUtils.getUserId(); mgtCustomConfigDto.setUserId(userId); - MgtCustomConfigVo mgtCustomConfigVo = customConfigService.getCustomConfig(mgtCustomConfigDto); + List<String> mgtCustomConfigVo = customConfigService.getCustomConfig(mgtCustomConfigDto); return R.ok(mgtCustomConfigVo); } @RequestMapping(value = "/getActivenessList", method = RequestMethod.POST) @ApiOperation(value = "获取活跃度") - public R<List<String>> getActivenessList() { - List<String> activenessList = activenessService.getActivenessList(); + public R<List<MgtActivenessListVo>> getActivenessList() { + List<MgtActivenessListVo> activenessList = activenessService.getActivenessList(); return R.ok(activenessList); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtActivenessListVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtActivenessListVo.java new file mode 100644 index 0000000..722f9eb --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtActivenessListVo.java @@ -0,0 +1,22 @@ +package com.ruoyi.system.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName MgtActivnessListVo + * @Description TODO + * @Author jqs + * @Date 2023/7/4 14:32 + * @Version 1.0 + */ +@Data +public class MgtActivenessListVo { + + @ApiModelProperty(value = "活跃度id") + private Long activenessId; + + @ApiModelProperty(value = "活跃度") + private String activenessName; + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtCustomConfigVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtCustomConfigVo.java index 80250d7..832ac8f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtCustomConfigVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtCustomConfigVo.java @@ -3,6 +3,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @ClassName MgtCustomConfigVo * @Description TODO @@ -27,7 +29,7 @@ private String configType; @ApiModelProperty(value = "自定义配置") - private String customConfig; + private List<String> customConfigList; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java index 8946bd0..f0840e4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/ActivenessService.java @@ -4,6 +4,7 @@ import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.api.domain.poji.config.Activeness; import com.ruoyi.system.domain.dto.MgtActivenessEditDto; +import com.ruoyi.system.domain.vo.MgtActivenessListVo; import java.util.List; @@ -49,7 +50,7 @@ * @param * @return List<String> */ - List<String> getActivenessList(); + List<MgtActivenessListVo> getActivenessList(); /** * @description 通过名称获取活跃度 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java index 9e2814b..e972d26 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/CustomConfigService.java @@ -6,7 +6,6 @@ import com.ruoyi.system.domain.dto.*; import com.ruoyi.system.domain.pojo.config.CustomConfig; import com.ruoyi.system.domain.vo.MgtAllCustomConfigVo; -import com.ruoyi.system.domain.vo.MgtCustomConfigVo; import com.ruoyi.system.domain.vo.MgtOperLogPageVo; import java.util.List; @@ -93,7 +92,7 @@ * @param mgtCustomConfigDto * @return MgtCustomConfigVo */ - MgtCustomConfigVo getCustomConfig(MgtCustomConfigDto mgtCustomConfigDto); + List<String> getCustomConfig(MgtCustomConfigDto mgtCustomConfigDto); /** * @description getBulletinBoard diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java index b7ea447..e8554cb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/ActivenessServiceImpl.java @@ -1,12 +1,13 @@ package com.ruoyi.system.service.impl.config; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.api.domain.poji.config.Activeness; import com.ruoyi.system.domain.dto.MgtActivenessEditDto; +import com.ruoyi.system.domain.vo.MgtActivenessListVo; import com.ruoyi.system.mapper.config.ActivenessMapper; import com.ruoyi.system.service.config.ActivenessService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -89,11 +90,13 @@ * @return List<String> */ @Override - public List<String> getActivenessList(){ + public List<MgtActivenessListVo> getActivenessList(){ List<Activeness> activenessList = activenessMapper.selectList(new LambdaQueryWrapper<Activeness>().eq(Activeness::getDelFlag, 0)); - List<String> nameList = activenessList.stream().map(activeness ->{ - String name = activeness.getActivenessName(); - return name; + List<MgtActivenessListVo> nameList = activenessList.stream().map(activeness ->{ + MgtActivenessListVo mgtActivenessListVo = new MgtActivenessListVo(); + mgtActivenessListVo.setActivenessId(activeness.getActivenessId()); + mgtActivenessListVo.setActivenessName(activeness.getActivenessName()); + return mgtActivenessListVo; }).collect(Collectors.toList()); return nameList; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java index 0ea858e..0f3adbc 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.system.api.constant.ConfigEnum; import com.ruoyi.system.api.domain.poji.config.Activeness; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -15,7 +16,6 @@ import com.ruoyi.system.domain.pojo.config.CustomConfig; import com.ruoyi.system.domain.vo.MgtActivenessVo; import com.ruoyi.system.domain.vo.MgtAllCustomConfigVo; -import com.ruoyi.system.domain.vo.MgtCustomConfigVo; import com.ruoyi.system.domain.vo.MgtOperLogPageVo; import com.ruoyi.system.mapper.config.CustomConfigMapper; import com.ruoyi.system.service.config.ActivenessService; @@ -485,14 +485,13 @@ * @return MgtCustomConfigVo */ @Override - public MgtCustomConfigVo getCustomConfig(MgtCustomConfigDto mgtCustomConfigDto){ + public List<String> getCustomConfig(MgtCustomConfigDto mgtCustomConfigDto){ CustomConfig customConfig = this.getByKey(mgtCustomConfigDto.getConfigType()); - MgtCustomConfigVo mgtCustomConfigVo = new MgtCustomConfigVo(); - if(customConfig!=null){ - mgtCustomConfigVo.setCustomConfig(customConfig.getConfigValue()); - mgtCustomConfigVo.setConfigType(mgtCustomConfigDto.getConfigType()); + List<String> list = new ArrayList<>(); + if(customConfig!=null&&StringUtils.isNotBlank(customConfig.getConfigValue())){ + list = Arrays.asList(customConfig.getConfigValue().split(",")); } - return mgtCustomConfigVo; + return list; } /** -- Gitblit v1.7.1