ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/AgencyTotalVo.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.system.api.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName AgencyTotalVo * @Description TODO * @Author jqs * @Date 2023/8/25 11:48 * @Version 1.0 */ @Data public class AgencyTotalVo { @ApiModelProperty(value = "区域营业额") private BigDecimal areaTurnover; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapBigTotalVo.java
@@ -21,4 +21,6 @@ @ApiModelProperty(value = "mapValue") private BigDecimal mapValue; @ApiModelProperty(value = "mapPercent") private BigDecimal mapPercent; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtMapIntTotalVo.java
@@ -3,6 +3,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName MgtNurseTotalVo * @Description TODO @@ -19,4 +21,7 @@ @ApiModelProperty(value = "mapValue") private Integer mapValue; @ApiModelProperty(value = "mapPercent") private BigDecimal mapPercent; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtPlTotalMemberTotalVo.java
@@ -3,6 +3,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; /** @@ -27,8 +28,14 @@ @ApiModelProperty(value = "男人") private Integer manTotal; @ApiModelProperty(value = "男人比例") private BigDecimal manPercent; @ApiModelProperty(value = "女人") private Integer womenTotal; @ApiModelProperty(value = "女人比例") private BigDecimal womenPercent; @ApiModelProperty(value = "会员年龄key") private String[] ageKey; @@ -36,6 +43,9 @@ @ApiModelProperty(value = "会员年龄value") private Integer[] ageValue; @ApiModelProperty(value = "会员年龄占比") private BigDecimal[] agePercent; @ApiModelProperty(value = "会员调理") private List<MgtMapIntTotalVo> nurseTotalVos; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java
@@ -75,6 +75,11 @@ public R<MerHomeShopTotalVo> getShopServiceTotal(Long shopId) { return R.fail("获取商户服务统计失败:" + throwable.getMessage()); } @Override public R<AgencyTotalVo> getAgencyTotalVo(List<Long> shopIdList) { return R.fail("获取区域统计失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java
@@ -87,4 +87,14 @@ */ @PostMapping("/order/getShopServiceTotal") public R<MerHomeShopTotalVo> getShopServiceTotal(@RequestBody Long shopId); /** * @description 获取区域统计 * @author jqs * @date 2023/8/25 11:52 * @param shopIdList * @return R<AgencyTotalVo> */ @PostMapping("/order/getAgencyTotalVo") public R<AgencyTotalVo> getAgencyTotalVo(@RequestBody List<Long> shopIdList); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -648,7 +648,11 @@ */ @Override public List<MgtActivityListVo> listStaffActivity(StaffActivityListDto staffActivityListDto){ return activityMapper.listStaffActivity(staffActivityListDto); List<MgtActivityListVo> activityListVoList = new ArrayList<>(); if(staffActivityListDto.getActivityFrom()!=null&&staffActivityListDto.getActivityFrom()==1){ activityListVoList = activityMapper.listStaffActivity(staffActivityListDto); } return activityListVoList; } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtTotalController.java
@@ -33,7 +33,7 @@ @RequestMapping(value = "/getTotalMemberTotal", method = RequestMethod.POST) @ApiOperation(value = "获取商户会员人数统计") @ApiOperation(value = "获取商户会员人数统计(商户管理-统计经营-会员统计)") public R<MgtTotalMemberTotalVo> getTotalMemberTotal(@RequestBody MgtBaseShopDto mgtBaseShopDto) { Long userId = SecurityUtils.getUserId(); mgtBaseShopDto.setUserId(userId); @@ -42,7 +42,7 @@ } @RequestMapping(value = "/getPlTotalMemberTotal", method = RequestMethod.POST) @ApiOperation(value = "获取平台会员人数统计") @ApiOperation(value = "获取平台会员人数统计(统计-会员统计)") public R<MgtPlTotalMemberTotalVo> getPlTotalMemberTotal(@RequestBody MgtBasePlatformDto mgtBasePlatformDto) { Long userId = SecurityUtils.getUserId(); mgtBasePlatformDto.setUserId(userId); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberFixedTotalVo.java
@@ -35,6 +35,9 @@ @ApiModelProperty(value = "会员年龄value") private Integer[] ageValue; @ApiModelProperty(value = "会员年龄占比value") private BigDecimal[] agePercentValue; @ApiModelProperty(value = "会员调理") private List<MgtMapIntTotalVo> nurseTotalVos; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1261,6 +1261,18 @@ String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; // 不同年龄段的会员数数组 Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; BigDecimal[] agePercentValue = new BigDecimal[5]; Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge(); BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString()); BigDecimal hundredBig = new BigDecimal("100"); if(totalPerson==0){ totalPersonBig = hundredBig; } agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); // 设置年龄段数组和不同年龄段的会员数数组 mgtTotalMemberTotalVo.setAgeKey(ageKey); mgtTotalMemberTotalVo.setAgeValue(ageValue); @@ -1362,20 +1374,52 @@ MgtPlTotalMemberTotalVo plTotalMemberTotalVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto); MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getPlTotalMemberTotalAge(mgtBasePlatformDto); if (mgtAgeTotalVo != null) { plTotalMemberTotalVo.setManTotal(mgtAgeTotalVo.getManTotal()); plTotalMemberTotalVo.setWomenTotal(mgtAgeTotalVo.getWomenTotal()); } else { plTotalMemberTotalVo.setManTotal(0); plTotalMemberTotalVo.setWomenTotal(0); Integer manTotal = mgtAgeTotalVo.getManTotal(); Integer womenTotal = mgtAgeTotalVo.getWomenTotal(); Integer personTotal = manTotal + womenTotal; BigDecimal manTotalBig = new BigDecimal(manTotal); BigDecimal personTotalBig = new BigDecimal(personTotal); BigDecimal bigTen = new BigDecimal("100.00"); BigDecimal menPercent = new BigDecimal("100.00"); BigDecimal womenPercent = new BigDecimal("100.00"); if(manTotal==0&&womenTotal==0){ menPercent = new BigDecimal("50.00"); womenPercent = new BigDecimal("50.00"); }else if(manTotal==0&&womenTotal>0){ menPercent = new BigDecimal("0.00"); womenPercent = new BigDecimal("100.00"); }else if(manTotal>0&&womenTotal==0){ menPercent = new BigDecimal("100.00"); womenPercent = new BigDecimal("0.00"); }else{ menPercent = manTotalBig.divide(personTotalBig).setScale(0,BigDecimal.ROUND_HALF_UP); womenPercent = bigTen.subtract(menPercent); } plTotalMemberTotalVo.setManTotal(manTotal); plTotalMemberTotalVo.setWomenTotal(womenTotal); plTotalMemberTotalVo.setManPercent(menPercent); plTotalMemberTotalVo.setWomenPercent(womenPercent); } // 年龄段数组 String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; // 不同年龄段的会员数数组 Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; BigDecimal[] agePercentValue = new BigDecimal[5]; Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge(); BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString()); BigDecimal hundredBig = new BigDecimal("100"); if(totalPerson==0){ totalPersonBig = hundredBig; } agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); // 设置年龄段数组和不同年龄段的会员数数组 plTotalMemberTotalVo.setAgeKey(ageKey); plTotalMemberTotalVo.setAgeValue(ageValue); plTotalMemberTotalVo.setAgePercent(agePercentValue); // 获取不同调理类型的会员数 List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getPlTotalMemberTotalNurse(mgtBasePlatformDto); if (nurseTotalVos != null && nurseTotalVos.size() > 0) { @@ -1492,6 +1536,18 @@ String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; // 不同年龄段的会员数数组 Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; BigDecimal[] agePercentValue = new BigDecimal[5]; Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge(); BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString()); BigDecimal hundredBig = new BigDecimal("100"); if(totalPerson==0){ totalPersonBig = hundredBig; } agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); // 设置年龄段数组和不同年龄段的会员数数组 mgtShopTotalMemberVo.setAgeKey(ageKey); mgtShopTotalMemberVo.setAgeValue(ageValue); @@ -1648,9 +1704,22 @@ String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; // 不同年龄段的会员数数组 Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; BigDecimal[] agePercentValue = new BigDecimal[5]; Integer totalPerson = mgtAgeTotalVo.getTenAge()+mgtAgeTotalVo.getTwentyAge()+ mgtAgeTotalVo.getThirtyAge()+mgtAgeTotalVo.getFortyAge()+mgtAgeTotalVo.getFiftyAge(); BigDecimal totalPersonBig = new BigDecimal(totalPerson.toString()); BigDecimal hundredBig = new BigDecimal("100"); if(totalPerson==0){ totalPersonBig = hundredBig; } agePercentValue[0] = new BigDecimal(mgtAgeTotalVo.getTenAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[1] = new BigDecimal(mgtAgeTotalVo.getTwentyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[2] = new BigDecimal(mgtAgeTotalVo.getThirtyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[3] = new BigDecimal(mgtAgeTotalVo.getFortyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); agePercentValue[4] = new BigDecimal(mgtAgeTotalVo.getFiftyAge().toString()).divide(totalPersonBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig); // 设置年龄段数组和不同年龄段的会员数数组 memberFixedTotalVo.setAgeKey(ageKey); memberFixedTotalVo.setAgeValue(ageValue); memberFixedTotalVo.setAgePercentValue(agePercentValue); // 获取不同护理类型的会员数 List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getMerMemberTotalNurse(merTotalDto); if (nurseTotalVos != null && nurseTotalVos.size() > 0) { ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -424,7 +424,7 @@ SELECT member_nurse mapKey, COUNT(*) mapValue FROM ( 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 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 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL SELECT 29 UNION ALL SELECT 30 UNION ALL SELECT 31 UNION ALL SELECT 32 UNION ALL SELECT 33 UNION ALL SELECT 34 UNION ALL SELECT 35 UNION ALL SELECT 36 UNION ALL SELECT 37 UNION ALL SELECT 38 UNION ALL SELECT 39 UNION ALL SELECT 40) numbers INNER JOIN t_member ON CHAR_LENGTH(member_nurse) - CHAR_LENGTH(REPLACE(member_nurse, ',', '')) >= numbers.n - 1 <if test="param.shopId != null and param.shopId != ''"> AND relation_shop_id = #{param.shopId} @@ -460,7 +460,7 @@ 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 FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) 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} @@ -560,8 +560,8 @@ <select id="getPlTotalMemberTotal" resultType="com.ruoyi.system.api.domain.vo.MgtPlTotalMemberTotalVo"> SELECT COUNT(*) AS memberTotal, COUNT(CASE WHEN DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 1 END) AS memberYesterday, COUNT(CASE WHEN create_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() THEN 1 END) AS memberSeven COUNT(CASE WHEN DATE(binding_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 1 END) AS memberYesterday, COUNT(CASE WHEN binding_time BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE() THEN 1 END) AS memberSeven FROM t_member WHERE del_flag = 0 AND binding_flag = 1 </select> @@ -593,8 +593,8 @@ SELECT member_nurse mapKey, COUNT(*) mapValue FROM ( 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 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 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL SELECT 29 UNION ALL SELECT 30 UNION ALL SELECT 31 UNION ALL SELECT 32 UNION ALL SELECT 33 UNION ALL SELECT 34 UNION ALL SELECT 35 UNION ALL SELECT 36 UNION ALL SELECT 37 UNION ALL SELECT 38 UNION ALL SELECT 39 UNION ALL SELECT 40) numbers INNER JOIN t_member ON CHAR_LENGTH(member_nurse) - CHAR_LENGTH(REPLACE(member_nurse, ',', '')) >= numbers.n - 1 AND binding_flag = 1 AND del_flag = 0 <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> @@ -615,7 +615,7 @@ <select id="getPlTotalMemberTotalLevel" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> SELECT level mapKey, COUNT(*) mapValue FROM t_member WHERE (level IS NOT NULL OR level != '') WHERE (level IS NOT NULL OR level != '') AND binding_flag = 1 AND del_flag = 0 <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> @@ -635,8 +635,8 @@ 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 FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) numbers INNER JOIN t_member ON CHAR_LENGTH(goods_type) - CHAR_LENGTH(REPLACE(goods_type, ',', '')) >= numbers.n - 1 AND binding_flag = 1 AND del_flag = 0 <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> @@ -659,7 +659,7 @@ COUNT(tm.member_id) FROM t_member tm INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id WHERE tm.del_Flag = 0 WHERE tm.del_Flag = 0 AND binding_flag = 1 <if test="shopIdList != null and shopIdList.size() > 0"> AND tm.relation_shop_id IN <foreach collection="shopIdList" item="item" open="(" separator="," close=")"> @@ -680,7 +680,7 @@ tmt.total_pay_count mapValue FROM t_member tm INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id WHERE tm.del_flag = 0 WHERE tm.del_flag = 0 AND binding_flag = 1 <if test="param.shopIdList != null and shopIdList.size() > 0"> AND tm.relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> @@ -700,7 +700,7 @@ SELECT tm.customer_source mapKey, COUNT(tm.user_id) mapValue FROM t_member tm WHERE tm.del_flag = 0 FROM t_member tm WHERE tm.del_flag = 0 AND binding_flag = 1 <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND tm.relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> @@ -721,7 +721,7 @@ SELECT tm.relation_shop_name mapKey, COUNT(tm.user_id) mapValue FROM t_member tm WHERE tm.del_flag = 0 FROM t_member tm WHERE tm.del_flag = 0 AND binding_flag = 1 <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND tm.relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> @@ -809,8 +809,8 @@ SELECT member_nurse mapKey, COUNT(*) mapValue FROM ( 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 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 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL SELECT 29 UNION ALL SELECT 30 UNION ALL SELECT 31 UNION ALL SELECT 32 UNION ALL SELECT 33 UNION ALL SELECT 34 UNION ALL SELECT 35 UNION ALL SELECT 36 UNION ALL SELECT 37 UNION ALL SELECT 38 UNION ALL SELECT 39 UNION ALL SELECT 40) numbers INNER JOIN t_member ON CHAR_LENGTH(member_nurse) - CHAR_LENGTH(REPLACE(member_nurse, ',', '')) >= numbers.n - 1 AND del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND binding_flag = 1 AND relation_shop_id = #{param.shopId} </if> @@ -834,7 +834,7 @@ <select id="getMerMemberTotalLevel" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> SELECT level mapKey, COUNT(*) mapValue FROM t_member WHERE (level IS NOT NULL OR level != '') WHERE (level IS NOT NULL OR level != '') AND del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND binding_flag = 1 AND relation_shop_id = #{param.shopId} </if> @@ -857,8 +857,8 @@ 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 FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) numbers INNER JOIN t_member ON CHAR_LENGTH(goods_type) - CHAR_LENGTH(REPLACE(goods_type, ',', '')) >= numbers.n - 1 AND del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND binding_flag = 1 AND relation_shop_id = #{param.shopId} </if> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java
@@ -143,4 +143,16 @@ return R.ok(homeShopTotalVo); } /** * @description 获取区域统计 * @author jqs * @date 2023/8/25 11:52 * @param shopIdList * @return R<AgencyTotalVo> */ @PostMapping("/getAgencyTotalVo") public R<AgencyTotalVo> getAgencyTotalVo(@RequestBody List<Long> shopIdList){ AgencyTotalVo agencyTotalVo= orderService.getAgencyTotalVo(shopIdList); return R.ok(agencyTotalVo); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
@@ -120,11 +120,14 @@ @RequestMapping(value = "/placeActivityOrder", method = RequestMethod.POST) @ApiOperation(value = "创建活动订单") public R<AppPlaceOrderVo> placeActivityOrder(@Validated @RequestBody AppPlaceActivityDto appPlaceActivityDto) { Long userId = SecurityUtils.getUserId(); LoginUser loginUser = SecurityUtils.getLoginUser(); Long userId = loginUser.getUserid(); appPlaceActivityDto.setSpbillCreateIp(loginUser.getIpaddr()); if (userId != null) { Member member = memberService.getMember(userId).getData(); appPlaceActivityDto.setUserId(userId); if (member != null && member.getRelationShopId() != null) { appPlaceActivityDto.setOpenid(member.getMiniOpenid()); appPlaceActivityDto.setShopId(member.getRelationShopId()); } if (member.getBindingFlag() != 1) { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTypeTotalVo.java
@@ -23,6 +23,4 @@ @ApiModelProperty(value = "商品类型金额") private List<MgtMapBigTotalVo> goodsTypeMoneyList; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -10,10 +10,7 @@ import com.ruoyi.order.domain.vo.MerTotalOrderVo; import com.ruoyi.order.domain.vo.*; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo; import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo; import com.ruoyi.system.api.domain.vo.*; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; @@ -670,4 +667,13 @@ * @return List<MgtMapIntTotalVo> */ List<MgtMapBigTotalVo> shopSalesRank(@Param("shopIdList")List<Long> shopIdList); /** * @description 获取区域统计 * @author jqs * @date 2023/8/25 11:49 * @param shopIdList * @return AgencyTotalVo */ AgencyTotalVo getAgencyTotalVo(@Param("shopIdList")List<Long> shopIdList); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsRequest; import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsResult; import com.github.binarywang.wxpay.bean.ecommerce.RefundNotifyResult; import com.github.binarywang.wxpay.bean.ecommerce.TransactionsResult; import com.github.binarywang.wxpay.bean.ecommerce.*; import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; import com.github.binarywang.wxpay.config.WxPayConfig; @@ -16,6 +13,7 @@ import com.github.binarywang.wxpay.service.WxPayService; import com.google.common.base.Joiner; import com.google.gson.Gson; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -754,11 +752,12 @@ goodsName = String.join(",", goodsNameList); } // 小程序微信下单支付 /*createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo, orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), appPlaceOrderDto.getSpbillCreateIp(), goodsNameList);*/ if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){ // 小程序微信下单支付 createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo, orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), appPlaceOrderDto.getSpbillCreateIp(), goodsNameList,1); } //减去优惠券 if (StringUtils.isNotBlank(memberCouponSJ.toString())) { @@ -797,11 +796,11 @@ public void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, String goodsName, String orderNo, String orderId, BigDecimal payMoney, String openid, String payerClientIp, List<String> goodsNameList){ String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom){ try { // 创建支付订单 //R<String> resultMch = remoteShopService.getShopSubMchId(shopId); String subMchId = "1650744551"; R<String> resultMch = remoteShopService.getShopSubMchId(shopId); String subMchId = resultMch.getData(); if (StringUtils.isEmpty(subMchId)) { throw new ServiceException("获取微信商户号失败"); } @@ -820,7 +819,11 @@ request.setNotifyUrl(config.getNotifyUrl()); // 结算信息 PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo(); settleInfo.setProfitSharing(true); if(orderFrom==2){ settleInfo.setProfitSharing(true); }else{ settleInfo.setProfitSharing(false); } settleInfo.setSubsidyAmount(BigDecimal.ZERO); request.setSettleInfo(settleInfo); @@ -1134,7 +1137,18 @@ appPlaceOrderVo.setPackageStr(res.getPackageVal()); appPlaceOrderVo.setTradeType(res.getSignType()); appPlaceOrderVo.setPaySign(res.getPaySign()); */ List<String> goodsNameList = new ArrayList<>(); goodsNameList.add(orderGoods.getGoodsName()); if(appPlaceOrderVo.getPayMoney().compareTo(BigDecimal.TEN)<0){ // 小程序微信下单支付 createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), orderNo, orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(), appPlaceActivityDto.getSpbillCreateIp(), goodsNameList,2); } //生成活动参加记录 ActivityRecord activityRecord = new ActivityRecord(); activityRecord.setDelFlag(0); @@ -3490,6 +3504,9 @@ merTotalDto.setShopIdList(shopIdList); merTotalDto.setShopId(null); } if(merTotalDto.getGoodsType()!=null&&merTotalDto.getGoodsType()==0){ merTotalDto.setGoodsType(null); } MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); // 获取订单年龄用户列表 //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); @@ -3537,10 +3554,10 @@ } }*/ List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listMerOrderDistributionTotal(merTotalDto); String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) { String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; MgtMapTotalPlusVo mgtMapTotalPlusVo; for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); @@ -3549,6 +3566,10 @@ orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); }else{ orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); } // 返回订单分布总数对象 return orderDistributionTotalVo; @@ -3574,28 +3595,44 @@ List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { MgtMapIntTotalVo MgtMapIntTotalVo; MgtMapIntTotalVo mgtMapIntTotalVo; MgtMapBigTotalVo mgtMapBigTotalVo; Integer intTotal = 0; BigDecimal bigTotal = BigDecimal.ZERO; for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){ intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst(); bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond()); } BigDecimal hundredBig = new BigDecimal("100"); BigDecimal intTotalBig = hundredBig; if(intTotal!=0){ intTotalBig = new BigDecimal(intTotal.toString()); } if(bigTotal.compareTo(BigDecimal.ZERO)<1){ bigTotal = hundredBig; } // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { MgtMapIntTotalVo = new MgtMapIntTotalVo(); mgtMapIntTotalVo = new MgtMapIntTotalVo(); mgtMapBigTotalVo = new MgtMapBigTotalVo(); MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { MgtMapIntTotalVo.setMapKey("周期"); mgtMapIntTotalVo.setMapKey("周期"); mgtMapBigTotalVo.setMapKey("周期"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { MgtMapIntTotalVo.setMapKey("服务"); mgtMapIntTotalVo.setMapKey("服务"); mgtMapBigTotalVo.setMapKey("服务"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { MgtMapIntTotalVo.setMapKey("体验"); mgtMapIntTotalVo.setMapKey("体验"); mgtMapBigTotalVo.setMapKey("体验"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { MgtMapIntTotalVo.setMapKey("单品"); mgtMapIntTotalVo.setMapKey("单品"); mgtMapBigTotalVo.setMapKey("单品"); } goodsTypeTotalList.add(MgtMapIntTotalVo); goodsTypeTotalList.add(mgtMapIntTotalVo); goodsTypeMoneyList.add(mgtMapBigTotalVo); } orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); @@ -4104,7 +4141,7 @@ BigDecimal onlinePayMoney = order.getOnlinePayMoney(); if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){ // 订单支付金额大于0,可发起退款 //orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); } orderRefund.setRefundStatus(1); @@ -4114,7 +4151,7 @@ /** * 申请退款API */ /*private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ try { // 创建支付订单 OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId); @@ -4153,7 +4190,7 @@ } catch (WxPayException e) { throw new ServiceException(e.getMessage()); } }*/ } /** * @param staffTotalDto @@ -4200,6 +4237,9 @@ */ @Override public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto) { if(staffTotalDto.getGoodsType()!=null&&staffTotalDto.getGoodsType()==0){ staffTotalDto.setGoodsType(null); } MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); // 获取订单年龄用户列表 //MerTotalDto merTotalDto = new MerTotalDto(); @@ -4255,10 +4295,10 @@ }*/ if(staffTotalDto.getActivityFrom()==1){ List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listStaffActivityOrderDistributionTotal(staffTotalDto); String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) { String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; MgtMapTotalPlusVo mgtMapTotalPlusVo; for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); @@ -4267,6 +4307,10 @@ orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); }else{ orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); } } // 返回订单分布总数对象 @@ -4341,28 +4385,44 @@ List<MgtMapIntTotalVo> goodsTypeTotalList = new ArrayList<>(); List<MgtMapBigTotalVo> goodsTypeMoneyList = new ArrayList<>(); if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { MgtMapIntTotalVo MgtMapIntTotalVo; MgtMapIntTotalVo mgtMapIntTotalVo; MgtMapBigTotalVo mgtMapBigTotalVo; Integer intTotal = 0; BigDecimal bigTotal = BigDecimal.ZERO; for(MgtMapTotalPlusVo mgtMapTotalPlusVo : MgtMapIntTotalVoGoodsType){ intTotal = intTotal + mgtMapTotalPlusVo.getMapValueFirst(); bigTotal = bigTotal.add(mgtMapTotalPlusVo.getMapValueSecond()); } BigDecimal hundredBig = new BigDecimal("100"); BigDecimal intTotalBig = hundredBig; if(intTotal!=0){ intTotalBig = new BigDecimal(intTotal.toString()); } if(bigTotal.compareTo(BigDecimal.ZERO)<1){ bigTotal = hundredBig; } // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { MgtMapIntTotalVo = new MgtMapIntTotalVo(); mgtMapIntTotalVo = new MgtMapIntTotalVo(); mgtMapBigTotalVo = new MgtMapBigTotalVo(); MgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); mgtMapIntTotalVo.setMapPercent(BigDecimal.valueOf(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()).divide(intTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); mgtMapBigTotalVo.setMapPercent(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond().divide(bigTotal,2,BigDecimal.ROUND_HALF_UP).multiply(hundredBig)); if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { MgtMapIntTotalVo.setMapKey("周期"); mgtMapIntTotalVo.setMapKey("周期"); mgtMapBigTotalVo.setMapKey("周期"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("2")) { MgtMapIntTotalVo.setMapKey("服务"); mgtMapIntTotalVo.setMapKey("服务"); mgtMapBigTotalVo.setMapKey("服务"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("3")) { MgtMapIntTotalVo.setMapKey("体验"); mgtMapIntTotalVo.setMapKey("体验"); mgtMapBigTotalVo.setMapKey("体验"); } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { MgtMapIntTotalVo.setMapKey("单品"); mgtMapIntTotalVo.setMapKey("单品"); mgtMapBigTotalVo.setMapKey("单品"); } goodsTypeTotalList.add(MgtMapIntTotalVo); goodsTypeTotalList.add(mgtMapIntTotalVo); goodsTypeMoneyList.add(mgtMapBigTotalVo); } orderTypeTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); @@ -4691,4 +4751,17 @@ MerHomeShopTotalVo serviceTotalVo = orderMapper.getMerHomeShopServiceTotalVo(shopId); return serviceTotalVo; } /** * @description 获取区域统计 * @author jqs * @date 2023/8/25 11:49 * @param shopIdList * @return AgencyTotalVo */ @Override public AgencyTotalVo getAgencyTotalVo(List<Long> shopIdList){ AgencyTotalVo agencyTotalVo = orderMapper.getAgencyTotalVo(shopIdList); return agencyTotalVo; } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -523,7 +523,7 @@ void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, String goodsName, String orderNo, String orderId, BigDecimal payMoney, String openid, String payerClientIp, List<String> goodsNameList); String openid, String payerClientIp, List<String> goodsNameList,Integer orderFrom); /** * @description 获取销售排行 @@ -542,4 +542,13 @@ * @return MerHomeShopTotalVo */ MerHomeShopTotalVo getShopServiceTotal(Long shopId); /** * @description 获取区域统计 * @author jqs * @date 2023/8/25 11:49 * @param shopIdList * @return AgencyTotalVo */ AgencyTotalVo getAgencyTotalVo(List<Long> shopIdList); } ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -1028,7 +1028,7 @@ </select> <select id="shopSalesTotal" resultType="java.math.BigDecimal"> SELECT IFNULL(SUM(change_receivable_money),0) SELECT IFNULL(SUM(CASE pay_type WHEN 1 THEN change_receivable_money WHEN 2 THEN change_receivable_money+online_pay_money ELSE 0 END),0) FROM t_order WHERE del_flag = 0 AND order_status = 3 <if test="param.shopId != null and param.shopId != ''"> @@ -1095,7 +1095,8 @@ </if> ORDER BY toc.pay_time DESC LIMIT 2) t2 ON t1.user_id = t2.user_id AND t1.pay_time < t2.pay_time WHERE t1.del_flag = 0 INNER JOIN t_order_goods tog1 ON t1.order_id = tog1.order_id WHERE t1.del_flag = 0 AND tog1.goods_type = 1 AND t1.shop_id = 32 HAVING DATEDIFF(t2.pay_time, t1.pay_time) > 30) AS temp </select> @@ -1416,7 +1417,7 @@ <select id="getMerHomeShopTotalVo" resultType="com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo"> SELECT IFNULL(SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END),0) unHandleOrder, IFNULL(SUM(CASE WHEN order_status = 3 THEN change_receivable_money ELSE 0 END),0) shopTurnover IFNULL(SUM(CASE WHEN order_status = 3 AND pay_type = 1 THEN change_receivable_money WHEN order_status = 3 AND pay_type = 2 THEN change_receivable_money+online_pay_money ELSE 0 END),0) shopTurnover FROM t_order WHERE del_flag = 0 AND shop_id = #{shopId} AND order_status IN (2,3) </select> @@ -1486,7 +1487,10 @@ SUM(tog.goods_receivable_money) AS mapValueSecond FROM t_order toc INNER JOIN t_order_goods tog ON toc.order_id = tog.order_id WHERE toc.del_flag = 0 AND toc.order_status IN (2,3) AND tog.del_flag = 0 AND tog.goods_type = #{param.goodsType} WHERE toc.del_flag = 0 AND toc.order_status IN (2,3) AND tog.del_flag = 0 <if test="param.goodsType != null and param.goodsType != ''"> AND tog.goods_type = #{param.goodsType} </if> <if test="param.shopId != null and param.shopId != ''"> AND shop_id = #{param.shopId} </if> @@ -1723,7 +1727,7 @@ IFNULL(SUM(CASE WHEN tog.goods_type = 2 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_from = 2 AND toa.order_status IN (2,3) AND toa.new_member_flag = 1 WHERE toa.order_from = 2 AND toa.shop_id = #{param.shopId} AND toa.order_status IN (2,3) AND toa.new_member_flag = 1 <if test="param.activityId !=null and param.activityId != ''"> AND toa.activity_id = #{param.activityId} </if> @@ -1743,6 +1747,9 @@ FROM t_order toc INNER JOIN t_order_goods tog ON toc.order_id = tog.order_id WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status IN (2,3) <if test="param.goodsType !=null and param.goodsType != ''"> AND tog.goods_type = #{param.goodsType} </if> <if test="param.activityId !=null and param.activityId != ''"> AND toc.activity_id = #{param.activityId} </if> @@ -1908,4 +1915,15 @@ GROUP BY shop_id ORDER BY mapValue DESC LIMIT 15 </select> <select id="getAgencyTotalVo" resultType="com.ruoyi.system.api.domain.vo.AgencyTotalVo"> SELECT IFNULL(SUM(CASE pay_type WHEN 1 THEN change_receivable_money WHEN 2 THEN change_receivable_money+online_pay_money ELSE 0 END),0) areaTurnover FROM t_order WHERE del_flag = 0 AND order_status = 3 AND shop_id IN <foreach collection="shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </select> </mapper> ruoyi-modules/ruoyi-shop/pom.xml
@@ -145,6 +145,21 @@ <artifactId>aliyun-sdk-oss</artifactId> <version>3.15.1</version> </dependency> <!-- 测试类 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.7.7</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> </dependencies> <build> ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -1,6 +1,5 @@ package com.ruoyi.shop.controller.console; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; @@ -361,9 +360,4 @@ return R.ok(); } @PostMapping("/addProfitSharingReceiver") R authShop(@RequestBody ProfitSharingReceiver profitSharingReceiver){ shopService.addProfitSharingReceiver(profitSharingReceiver); return R.ok(); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffShopPageVo.java
@@ -39,4 +39,7 @@ @ApiModelProperty(value="商户状态") private Integer shopStatus; @ApiModelProperty(value="冻结状态0解冻1冻结") private Integer frozenFlag; } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -8,7 +8,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver; import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverRequest; import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverResult; import com.github.binarywang.wxpay.exception.WxPayException; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.exception.ServiceException; @@ -1363,8 +1364,8 @@ if (shopIdList != null && !shopIdList.isEmpty()) { Integer count = remoteMemberService.getAreaNewMember(shopIdList).getData(); staffShopInfoGetVo.setNewAreaMember(count); ShopTotal shopTotalAll = shopTotalService.shopsTotalByIds(shopIdList); staffShopInfoGetVo.setAreaTurnover(shopTotalAll.getTotalOrderMoney()); AgencyTotalVo agencyTotalVo = remoteOrderService.getAgencyTotalVo(shopIdList).getData(); staffShopInfoGetVo.setAreaTurnover(agencyTotalVo.getAreaTurnover()); } } // 如果商店的扩展联系方式不为空,则设置员工商店信息对象的扩展联系方式列表 @@ -1594,9 +1595,10 @@ * @return void */ @Override public void addProfitSharingReceiver(ProfitSharingReceiver profitSharingReceiver){ public ProfitSharingReceiverResult addProfitSharingReceiver(ProfitSharingReceiverRequest request){ try { ProfitSharingReceiver result = wechatPayUtils.addProfitSharingReceiver(profitSharingReceiver); ProfitSharingReceiverResult result = wechatPayUtils.addProfitSharingReceiver(request); return result; } catch (WxPayException e) { throw new RuntimeException(e); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -2,7 +2,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver; import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverRequest; import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverResult; import com.github.binarywang.wxpay.exception.WxPayException; import com.ruoyi.shop.domain.dto.*; import com.ruoyi.shop.domain.vo.*; @@ -377,5 +378,5 @@ * @param * @return void */ void addProfitSharingReceiver(ProfitSharingReceiver profitSharingReceiver); ProfitSharingReceiverResult addProfitSharingReceiver(ProfitSharingReceiverRequest request); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/util/WechatPayUtils.java
@@ -1,11 +1,8 @@ package com.ruoyi.shop.util; import com.alibaba.fastjson.JSONObject; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsRequest; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult; import com.github.binarywang.wxpay.bean.ecommerce.*; import com.github.binarywang.wxpay.bean.media.ImageUploadResult; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.EcommerceService; import com.github.binarywang.wxpay.service.MerchantMediaService; @@ -157,11 +154,11 @@ return wxService.getEcommerceService().queryApplyStatusByApplymentId(applymentId); } public ProfitSharingReceiver addProfitSharingReceiver(ProfitSharingReceiver profitSharingReceiver) throws WxPayException { profitSharingReceiver.setAppid("wxb7f0ea286fc4e535"); profitSharingReceiver.setType("MERCHANT_ID"); profitSharingReceiver.setRelationType("SERVICE_PROVIDER"); ProfitSharingReceiver result = wxService.getProfitSharingV3Service().addProfitSharingReceiver(profitSharingReceiver); public ProfitSharingReceiverResult addProfitSharingReceiver(ProfitSharingReceiverRequest request) throws WxPayException { request.setAppid("wxb7f0ea286fc4e535"); request.setType("MERCHANT_ID"); request.setRelationType("SERVICE_PROVIDER"); ProfitSharingReceiverResult result = wxService.getEcommerceService().addReceivers(request); return result; } } ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -545,7 +545,12 @@ WHEN 6 THEN '已通过' WHEN 7 THEN '已拒绝' WHEN 8 THEN '已拒绝' END auditStatusDesc END auditStatusDesc, CASE tsa.audit_status WHEN 4 THEN 1 WHEN 5 THEN 1 END auditStatusSort FROM t_shop ts INNER JOIN t_shop_authentication tsa ON ts.shop_id = tsa.shop_id AND tsa.del_flag = 0 WHERE ts.del_flag = 0 @@ -567,6 +572,7 @@ <if test="param.shopStatus!=null and param.shopStatus!=''"> AND ts.shop_status = #{param.shopStatus} </if> ORDER BY auditStatusSort ASC,ts.create_time DESC </select> <select id="shopTotal" resultType="com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo"> @@ -804,7 +810,8 @@ ts.shopowner_phone shopownerPhone, ts.shop_status shopStatus, tsf.file_url shopPicture, tbs.shop_name belongShopName tbs.shop_name belongShopName, ts.frozen_flag frozenFlag FROM t_shop ts LEFT JOIN t_shop_file tsf ON tsf.shop_id = ts.shop_id AND tsf.del_flag = 0 AND file_type = 1 LEFT JOIN t_shop tbs ON tbs.shop_id = ts.belong_shop_id AND tbs.del_flag = 0 ruoyi-modules/ruoyi-shop/src/test/java/com/ruioyi/shop/shopTest.java
New file @@ -0,0 +1,38 @@ package com.ruioyi.shop; import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverRequest; import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverResult; import com.ruoyi.shop.RuoYiShopApplication; import com.ruoyi.shop.service.shop.ShopService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; /** * @ClassName systemTest * @Description TODO * @Author jqs * @Date 2023/6/7 10:57 * @Version 1.0 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = RuoYiShopApplication.class) public class shopTest { @Resource private ShopService shopService; @Test public void main() { ProfitSharingReceiverRequest request = new ProfitSharingReceiverRequest(); request.setAccount("1650744551"); request.setName("泸州矗众信息科技有限责任公司"); ProfitSharingReceiverResult result = shopService.addProfitSharingReceiver(request); System.out.println(result); } }