ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMapTotalVo.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.member.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MgtNurseTotalVo * @Description TODO * @Author jqs * @Date 2023/6/19 18:06 * @Version 1.0 */ @Data public class MgtMapTotalVo { @ApiModelProperty(value = "mapKey") private String mapKey; @ApiModelProperty(value = "mapValue") private Integer mapValue; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtNurseTotalVo.java
File was deleted ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtTotalMemberTotalVo.java
@@ -45,4 +45,34 @@ @ApiModelProperty(value = "会员年龄value") private Integer[] ageValue; @ApiModelProperty(value = "会员年龄key") private String[] nurseKey; @ApiModelProperty(value = "会员年龄value") private Integer[] nurseValue; @ApiModelProperty(value = "商品类型key") private String[] goodsTypeKey; @ApiModelProperty(value = "商品类型value") private Integer[] goodsTypeValue; @ApiModelProperty(value = "活跃度key") private String[] activenessKey; @ApiModelProperty(value = "活跃度value") private Integer[] activenessValue; @ApiModelProperty(value = "消费排行key") private String[] orderRankKey; @ApiModelProperty(value = "消费排行value") private Integer[] orderRankValue; @ApiModelProperty(value = "来源排行key") private String[] customerSourceKey; @ApiModelProperty(value = "来源排行value") private Integer[] customerSourceValue; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
@@ -156,7 +156,49 @@ * @param * @return MgtTotalMemberTotalVo */ List<MgtNurseTotalVo> getTotalMemberTotalNurse(@Param("param") MgtBaseShopDto mgtBaseShopDto); List<MgtMapTotalVo> getTotalMemberTotalNurse(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description 会员人数统计 * @author jqs * @date 2023/6/19 15:26 * @param * @return MgtTotalMemberTotalVo */ List<MgtMapTotalVo> getTotalMemberTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalMemberTotalActiveness * @param shopId * @param actStartDate * @param actEndDate * @return Integer * @author jqs34 * @date 2023/6/19 21:24 */ Integer getTotalMemberTotalActiveness(@Param("shopId") Long shopId,@Param("actStartDate") String actStartDate,@Param("actEndDate") String actEndDate); /** * @description 会员人数统计 * @author jqs * @date 2023/6/19 15:26 * @param * @return MgtTotalMemberTotalVo */ List<MgtMapTotalVo> getTotalMemberRankPay(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description 会员人数统计 * @author jqs * @date 2023/6/19 15:26 * @param * @return MgtTotalMemberTotalVo */ List<MgtMapTotalVo> getTotalMemberRankCustomerSource(@Param("param") MgtBaseShopDto mgtBaseShopDto); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -955,14 +955,93 @@ */ @Override public MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto){ Date nowDay = DateUtils.getNowDate(); // 获取店铺ID Long shopId = mgtBaseShopDto.getShopId(); // 获取总会员数和不同年龄段的会员数 MgtTotalMemberTotalVo mgtTotalMemberTotalVo = memberMapper.getTotalMemberTotal(mgtBaseShopDto); MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getTotalMemberTotalAge(mgtBaseShopDto); String[] ageKey = {"<20","21-30","31-40","41-50",">50"}; Integer[] ageValue = {mgtAgeTotalVo.getTenAge(),mgtAgeTotalVo.getTwentyAge(),mgtAgeTotalVo.getThirtyAge(),mgtAgeTotalVo.getFortyAge(),mgtAgeTotalVo.getFiftyAge()}; // 年龄段数组 String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; // 不同年龄段的会员数数组 Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; // 设置年龄段数组和不同年龄段的会员数数组 mgtTotalMemberTotalVo.setAgeKey(ageKey); mgtTotalMemberTotalVo.setAgeValue(ageValue); List<MgtNurseTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto); // 获取不同护理类型的会员数 List<MgtMapTotalVo> nurseTotalVos = memberMapper.getTotalMemberTotalNurse(mgtBaseShopDto); if (nurseTotalVos != null && nurseTotalVos.size() > 0) { String[] nurseKey = new String[nurseTotalVos.size()]; Integer[] nurseValue = new Integer[nurseTotalVos.size()]; // 遍历不同护理类型的会员数列表,设置护理类型数组和对应的会员数数组 for (int i = 0; i < nurseTotalVos.size(); i++) { nurseKey[i] = nurseTotalVos.get(i).getMapKey(); nurseValue[i] = nurseTotalVos.get(i).getMapValue(); } mgtTotalMemberTotalVo.setNurseKey(nurseKey); mgtTotalMemberTotalVo.setNurseValue(nurseValue); } // 获取不同商品类型的会员数 List<MgtMapTotalVo> goodsTypeTotalVos = memberMapper.getTotalMemberTotalGoodsType(mgtBaseShopDto); if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) { String[] goodsTypeKey = new String[goodsTypeTotalVos.size()]; Integer[] goodsTypeValue = new Integer[goodsTypeTotalVos.size()]; // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < goodsTypeTotalVos.size(); i++) { goodsTypeKey[i] = goodsTypeTotalVos.get(i).getMapKey(); goodsTypeValue[i] = goodsTypeTotalVos.get(i).getMapValue(); } mgtTotalMemberTotalVo.setGoodsTypeKey(goodsTypeKey); mgtTotalMemberTotalVo.setGoodsTypeValue(goodsTypeValue); } // 获取不同活跃度的会员数 List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); if (activenessList != null && !activenessList.isEmpty()) { String[] activenessKey = new String[activenessList.size()]; Integer[] activenessValue = new Integer[activenessList.size()]; Activeness activeness; String actStartDate; String actEndDate; Integer count; // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 for (int i = 0; i < activenessList.size(); i++) { activeness = activenessList.get(i); actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay())); actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay())); count = memberMapper.getTotalMemberTotalActiveness(shopId, actStartDate, actEndDate); activenessKey[i] = activeness.getActivenessName(); activenessValue[i] = count; } mgtTotalMemberTotalVo.setActivenessKey(activenessKey); mgtTotalMemberTotalVo.setActivenessValue(activenessValue); } //获取会员消费排名 List<MgtMapTotalVo> memberPayList = memberMapper.getTotalMemberRankPay(mgtBaseShopDto); if (memberPayList != null && memberPayList.size() > 0) { String[] memberPayKey = new String[memberPayList.size()]; Integer[] memberPayValue = new Integer[memberPayList.size()]; // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < memberPayList.size(); i++) { memberPayKey[i] = memberPayList.get(i).getMapKey(); memberPayValue[i] = memberPayList.get(i).getMapValue(); } mgtTotalMemberTotalVo.setOrderRankKey(memberPayKey); mgtTotalMemberTotalVo.setOrderRankValue(memberPayValue); } //获取来源渠道排名 List<MgtMapTotalVo> customerSourceList = memberMapper.getTotalMemberRankCustomerSource(mgtBaseShopDto); if (customerSourceList != null && customerSourceList.size() > 0) { String[] customerSourceKey = new String[customerSourceList.size()]; Integer[] customerSourceValue = new Integer[customerSourceList.size()]; // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < customerSourceList.size(); i++) { customerSourceKey[i] = customerSourceList.get(i).getMapKey(); customerSourceValue[i] = customerSourceList.get(i).getMapValue(); } mgtTotalMemberTotalVo.setCustomerSourceKey(customerSourceKey); mgtTotalMemberTotalVo.setCustomerSourceValue(customerSourceValue); } // 返回总会员数和不同类型会员数的统计结果 return mgtTotalMemberTotalVo; } } ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -381,10 +381,10 @@ </if> </select> <select id="getTotalMemberTotalNurse" resultType="com.ruoyi.member.domain.vo.MgtNurseTotalVo"> SELECT member_nurse nurse, COUNT(*) AS userCount <select id="getTotalMemberTotalNurse" resultType="com.ruoyi.member.domain.vo.MgtMapTotalVo"> SELECT member_nurse mapKey, COUNT(*) mapValue FROM ( SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(member_nurse, ',', numbers.n), ',', -1) user_tag SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(member_nurse, ',', numbers.n), ',', -1) member_nurse FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10) numbers INNER JOIN t_member ON CHAR_LENGTH(member_nurse) - CHAR_LENGTH(REPLACE(member_nurse, ',', '')) >= numbers.n - 1 <if test="param.shopId != null and param.shopId != ''"> @@ -401,4 +401,78 @@ GROUP BY member_nurse ORDER BY count DESC; </select> <select id="getTotalMemberTotalGoodsType" resultType="com.ruoyi.member.domain.vo.MgtMapTotalVo"> SELECT goods_type mapKey, COUNT(*) mapValue FROM ( SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(goods_type, ',', numbers.n), ',', -1) goods_type FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN t_member ON CHAR_LENGTH(goods_type) - CHAR_LENGTH(REPLACE(goods_type, ',', '')) >= numbers.n - 1 <if test="param.shopId != null and param.shopId != ''"> AND relation_shop_id = #{param.shopId} </if> <if test="param.startDate!=null and param.startDate!=''"> AND create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND create_time <= #{param.endDate} </if> ) x WHERE goods_type != '' GROUP BY goods_type ORDER BY count DESC; </select> <select id="getTotalMemberTotalActiveness" resultType="java.lang.Integer"> SELECT COUNT(tm.member_id) FROM t_member tm LEFT JOIN t_member_total tmt ON tm.member_id = tmt.member_id WHERE del_Flag = 0 <if test="shopId != null and shopId != ''"> AND relation_shop_id = #{shopId} </if> <if test="actStartDate != null and actStartDate != ''"> AND tmt.last_pay_time >= #{actStartDate} </if> <if test="actEndDate != null and actEndDate != ''"> AND tmt.last_pay_time <= #{actEndDate} </if> </select> <select id="getTotalMemberRankPay" resultType="com.ruoyi.member.domain.vo.MgtMapTotalVo"> SELECT tm.nick_name mapKey, tmt.total_pay_count mapValue FROM t_member tm WHERE del_flag = 0 INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id <if test="param.shopId != null and param.shopId != ''"> AND tm.relation_shop_id = #{param.shopId} </if> <if test="param.startDate!=null and param.startDate!=''"> AND tm.create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND tm.create_time <= #{param.endDate} </if> ORDER BY tmt.total_pay_count DESC LIMIT 10 </select> <select id="getTotalMemberRankCustomerSource" resultType="com.ruoyi.member.domain.vo.MgtMapTotalVo"> SELECT tm.customer_source mapKey, SUM(tm.customer_source) mapValue FROM t_member tm WHERE del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND tm.relation_shop_id = #{param.shopId} </if> <if test="param.startDate!=null and param.startDate!=''"> AND tm.create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND tm.create_time <= #{param.endDate} </if> GROUP BY tm.customer_source ORDER BY SUM(tm.customer_source) DESC LIMIT 10 </select> </mapper> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java
New file @@ -0,0 +1,41 @@ package com.ruoyi.order.controller.management; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo; import com.ruoyi.order.service.order.OrderService; import com.ruoyi.system.api.domain.dto.MgtBaseShopDto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @author jqs34 * @version 1.0 * @classname MgtTotalController * @description: TODO * @date 2023 2023/6/19 22:18 */ @Api(value = "管理台订单统计相关接口", tags = "管理台订单统计相关接口", description = "管理台订单统计相关接口") @RestController @RequestMapping("/mgt/total") public class MgtTotalController { @Resource private OrderService orderService; @RequestMapping(value = "/getTotalOrderTotal", method = RequestMethod.POST) @ApiOperation(value = "获取会员人数统计") public R<MgtTotalOrderTotalVo> getTotalOrderTotal(@RequestBody MgtBaseShopDto mgtBaseShopDto) { Long userId = SecurityUtils.getUserId(); mgtBaseShopDto.setUserId(userId); MgtTotalOrderTotalVo totalOrderTotalVo = orderService.getTotalOrderTotal(mgtBaseShopDto); return R.ok(totalOrderTotalVo); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMapTotalVo.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName MgtNurseTotalVo * @Description TODO * @Author jqs * @Date 2023/6/19 18:06 * @Version 1.0 */ @Data public class MgtMapTotalVo { @ApiModelProperty(value = "mapKey") private String mapKey; @ApiModelProperty(value = "mapValueFirst") private Integer mapValueFirst; @ApiModelProperty(value = "mapValueSecond") private BigDecimal mapValueSecond; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
New file @@ -0,0 +1,89 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @author jqs34 * @version 1.0 * @classname MgtTotalOrderTotalVo * @description: TODO * @date 2023 2023/6/19 21:56 */ @Data public class MgtTotalOrderTotalVo { @ApiModelProperty(value = "总订单数") private Integer orderTotal; @ApiModelProperty(value = "线上订单数") private Integer onlineTotal; @ApiModelProperty(value = "线下订单数") private Integer offlineTotal; @ApiModelProperty(value = "活动订单数") private Integer activityTotal; @ApiModelProperty(value = "周期订单数") private Integer cycleTotal; @ApiModelProperty(value = "体验订单数") private Integer experienceTotal; @ApiModelProperty(value = "服务订单数") private Integer serviceTotal; @ApiModelProperty(value = "总订单数") private BigDecimal orderMoney; @ApiModelProperty(value = "线上订单金额") private BigDecimal onlineMoney; @ApiModelProperty(value = "线下订单金额") private BigDecimal offlineMoney; @ApiModelProperty(value = "活动订单金额") private BigDecimal activityMoney; @ApiModelProperty(value = "周期订单金额") private BigDecimal cycleMoney; @ApiModelProperty(value = "体验订单金额") private BigDecimal experienceMoney; @ApiModelProperty(value = "服务订单金额") private BigDecimal serviceMoney; @ApiModelProperty(value = "订单数量key") private String[] orderTotalKey; @ApiModelProperty(value = "订单数量value") private Integer[] orderTotalValue; @ApiModelProperty(value = "订单数量value") private BigDecimal[] orderMoneyValue; @ApiModelProperty(value = "商品类型数量key") private String[] goodsTypeKey; @ApiModelProperty(value = "商品类型数量value") private Integer[] goodsTypeTotalValue; @ApiModelProperty(value = "商品类型金额value") private BigDecimal[] goodsTypeMoneyValue; @ApiModelProperty(value = "商品排行key") private String[] goodsRankKey; @ApiModelProperty(value = "商品排行value") private BigDecimal[] goodsRankValue; @ApiModelProperty(value = "来源排行key") private String[] orderFromRankKey; @ApiModelProperty(value = "来源排行value") private BigDecimal[] orderFromRankValue; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -5,6 +5,7 @@ import com.ruoyi.order.domain.dto.*; import com.ruoyi.order.domain.pojo.order.Order; import com.ruoyi.order.domain.vo.*; import com.ruoyi.system.api.domain.dto.MgtBaseShopDto; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; import org.apache.ibatis.annotations.Param; @@ -136,4 +137,59 @@ * @date 2023/6/18 17:20 */ MgtBulletinBoardVo boardOrderTotal(); /** * @description getTotalOrderTotal * @param mgtBaseShopDto * @return MgtTotalOrderTotalVo * @author jqs34 * @date 2023/6/19 22:24 */ MgtTotalOrderTotalVo getTotalOrderTotalOrderFrom(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @param mgtBaseShopDto * @return MgtTotalOrderTotalVo * @author jqs34 * @date 2023/6/19 22:24 */ MgtTotalOrderTotalVo getTotalOrderTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 * @date 2023/6/19 22:48 */ List<MgtMapTotalVo> listTotalOrderTotal(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 * @date 2023/6/19 22:48 */ List<MgtMapTotalVo> listTotalOrderTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 * @date 2023/6/19 22:48 */ List<MgtMapTotalVo> listTotalOrderTotalGoodsRank(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 * @date 2023/6/19 22:48 */ List<MgtMapTotalVo> listTotalOrderTotalOrderFrom(@Param("param") MgtBaseShopDto mgtBaseShopDto); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1264,4 +1264,88 @@ MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal(); return mgtBulletinBoardVo; } /** * @description getTotalOrderTotal * @param mgtBaseShopDto * @return MgtTotalOrderTotalVo * @author jqs34 * @date 2023/6/19 22:23 */ @Override public MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto){ MgtTotalOrderTotalVo mgtTotalOrderTotalVo = orderMapper.getTotalOrderTotalOrderFrom(mgtBaseShopDto); //MgtTotalOrderTotalVo mgtTotalOrderTotalVoGoodsType = orderMapper.getTotalOrderTotalGoodsType(mgtBaseShopDto); List<MgtMapTotalVo> mgtMapTotalVos = orderMapper.listTotalOrderTotal(mgtBaseShopDto); if (mgtMapTotalVos != null && mgtMapTotalVos.size() > 0) { String[] orderTotalKey = new String[mgtMapTotalVos.size()]; Integer[] orderTotalValue = new Integer[mgtMapTotalVos.size()]; BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalVos.size()]; for (int i = 0; i < mgtMapTotalVos.size(); i++) { orderTotalKey[i] = mgtMapTotalVos.get(i).getMapKey(); orderTotalValue[i] = mgtMapTotalVos.get(i).getMapValueFirst(); orderMoneyValue[i] = mgtMapTotalVos.get(i).getMapValueSecond(); } mgtTotalOrderTotalVo.setOrderTotalKey(orderTotalKey); mgtTotalOrderTotalVo.setOrderTotalValue(orderTotalValue); mgtTotalOrderTotalVo.setOrderMoneyValue(orderMoneyValue); } //获取商品分类销售数据 List<MgtMapTotalVo> mgtMapTotalVoGoodsType = orderMapper.listTotalOrderTotalGoodsType(mgtBaseShopDto); if (mgtMapTotalVoGoodsType != null && mgtMapTotalVoGoodsType.size() > 0) { String[] goodsTypeKey = new String[mgtMapTotalVoGoodsType.size()]; Integer[] goodsTypeTotalValue = new Integer[mgtMapTotalVoGoodsType.size()]; BigDecimal[] goodsTypeMoneyValue = new BigDecimal[mgtMapTotalVoGoodsType.size()]; // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < mgtMapTotalVoGoodsType.size(); i++) { goodsTypeTotalValue[i] = mgtMapTotalVoGoodsType.get(i).getMapValueFirst(); goodsTypeMoneyValue[i] = mgtMapTotalVoGoodsType.get(i).getMapValueSecond(); if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("1")){ goodsTypeKey[i] = "周期"; mgtTotalOrderTotalVo.setCycleTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst()); mgtTotalOrderTotalVo.setCycleMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()); }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("2")){ goodsTypeKey[i] = "服务"; mgtTotalOrderTotalVo.setServiceTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst()); mgtTotalOrderTotalVo.setServiceMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()); }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("3")){ goodsTypeKey[i] = "体验"; mgtTotalOrderTotalVo.setExperienceTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst()); mgtTotalOrderTotalVo.setExperienceMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()); }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("4")){ goodsTypeKey[i] = "单品"; } } mgtTotalOrderTotalVo.setGoodsTypeKey(goodsTypeKey); mgtTotalOrderTotalVo.setGoodsTypeTotalValue(goodsTypeTotalValue); mgtTotalOrderTotalVo.setGoodsTypeMoneyValue(goodsTypeMoneyValue); } //获取商品销售排名 List<MgtMapTotalVo> goodsRankList = orderMapper.listTotalOrderTotalGoodsRank(mgtBaseShopDto); if (goodsRankList != null && goodsRankList.size() > 0) { String[] goodsRankKey = new String[goodsRankList.size()]; BigDecimal[] goodsRankValue = new BigDecimal[goodsRankList.size()]; // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < goodsRankList.size(); i++) { goodsRankKey[i] = goodsRankList.get(i).getMapKey(); goodsRankValue[i] = goodsRankList.get(i).getMapValueSecond(); } mgtTotalOrderTotalVo.setGoodsRankKey(goodsRankKey); mgtTotalOrderTotalVo.setGoodsRankValue(goodsRankValue); } //获取来源销售排名 List<MgtMapTotalVo> orderFromList = orderMapper.listTotalOrderTotalOrderFrom(mgtBaseShopDto); if (orderFromList != null && orderFromList.size() > 0) { String[] orderFromKey = new String[orderFromList.size()]; BigDecimal[] orderFromValue = new BigDecimal[orderFromList.size()]; // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < orderFromList.size(); i++) { orderFromKey[i] = orderFromList.get(i).getMapKey(); orderFromValue[i] = orderFromList.get(i).getMapValueSecond(); } mgtTotalOrderTotalVo.setOrderFromRankKey(orderFromKey); mgtTotalOrderTotalVo.setOrderFromRankValue(orderFromValue); } return mgtTotalOrderTotalVo; } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -6,6 +6,7 @@ import com.ruoyi.order.domain.pojo.order.Order; import com.ruoyi.order.domain.vo.*; import com.ruoyi.system.api.domain.dto.AppBaseGetDto; import com.ruoyi.system.api.domain.dto.MgtBaseShopDto; import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -185,4 +186,13 @@ * @date 2023/6/18 17:20 */ MgtBulletinBoardVo boardOrderTotal(); /** * @description getTotalOrderTotal * @param mgtBaseShopDto * @return MgtTotalOrderTotalVo * @author jqs34 * @date 2023/6/19 22:23 */ MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto); } ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -615,4 +615,125 @@ FROM t_order WHERE del_flag = 0 </select> <select id="getTotalOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo"> SELECT COUNT(order_id) orderTotal, SUM(CASE WHEN order_from = 1 THEN 1 ELSE 0 END) onlineTotal, SUM(CASE WHEN order_from = 3 THEN 1 ELSE 0 END) offlineTotal, SUM(CASE WHEN order_from = 2 THEN 1 ELSE 0 END) activityTotal, IFNULL(SUM(order_money),0) orderMoney, SUM(CASE WHEN order_from = 1 THEN order_money ELSE 0 END) onlineMoney, SUM(CASE WHEN order_from = 3 THEN order_money ELSE 0 END) offlineMoney, SUM(CASE WHEN order_from = 2 THEN order_money ELSE 0 END) activityMoney FROM t_order WHERE del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND shop_id = #{param.shopId} </if> <if test="param.startDate!=null and param.startDate!=''"> AND create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND create_time <= #{param.endDate} </if> </select> <select id="getTotalOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo"> SELECT SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END) cycleTotal, SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END) experienceTotal, SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END) serviceTotal, SUM(CASE WHEN tog.goods_type = 1 THEN tog.goods_total_money ELSE 0 END) cycleMoney, SUM(CASE WHEN tog.goods_type = 3 THEN tog.goods_total_money ELSE 0 END) experienceMoney, SUM(CASE WHEN tog.goods_type = 2 THEN tog.goods_total_money ELSE 0 END) serviceMoney 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.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="listTotalOrderTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo"> SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey, COUNT(order_id) AS mapValueFirst, IFNULL(SUM(order_money),0) AS mapValueSecond FROM t_order WHERE del_flag = 0 AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY) <if test="param.shopId != null and param.shopId != ''"> AND shop_id = #{param.shopId} </if> GROUP BY order_date ORDER BY order_date ASC </select> <select id="listTotalOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo"> 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> GROUP BY tog.goods_type </select> <select id="listTotalOrderTotalGoodsRank" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo"> SELECT tog.goods_name mapKey, IFNULL(SUM(tog.goods_total_money),0) 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.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="listTotalOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo"> SELECT CASE toc.order_from WHEN 1 THEN "商城订单" WHEN 2 THEN "秒杀活动订单" WHEN 3 THEN "线下创建订单" END mapKey, IFNULL(SUM(toc.order_money),0) mapValueSecond 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.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 10 </select> </mapper> ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml
@@ -11,7 +11,7 @@ <result property="nickName" column="nick_name" /> <result property="email" column="email" /> <result property="phonenumber" column="phonenumber" /> <result property="userType" column="user_type" /> <result property="userType" column="user_type" /> <result property="sex" column="sex" /> <result property="avatar" column="avatar" /> <result property="password" column="password" />