From 0115dfa36fc77f0e028a5f9b058d28595355710b Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Tue, 8 Jun 2021 18:52:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E7=B2=89=E8=BF=9B=E7=B2=89=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E7=8E=87=E7=BB=9F=E8=AE=A1=EF=BC=8C=E9=A3=9F=E8=B0=B1?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E7=94=9F=E6=88=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/SysWxFanStatisticsController.java | 85 ++++++++++++++++++- .../mapper/SysImportFanRecordMapper.java | 10 +++ .../custom/mapper/SysRecipesMapper.java | 5 ++ .../mapper/SysWxFanStatisticsMapper.java | 8 ++ .../service/ISysImportFanRecordService.java | 10 +++ .../service/ISysWxFanStatisticsService.java | 8 ++ .../impl/SysImportFanRecordServiceImpl.java | 12 +++ .../impl/SysRecipesPlanServiceImpl.java | 44 ++++++---- .../impl/SysWxFanStatisticsServiceImpl.java | 11 +++ .../custom/SysImportFanRecordMapper.xml | 17 ++++ .../mapper/custom/SysRecipesMapper.xml | 11 +++ .../mapper/custom/SysRecipesPlanMapper.xml | 8 +- .../custom/SysWxFanStatisticsMapper.xml | 18 ++++ stdiet-ui/src/api/custom/fanStatistics.js | 10 +++ .../src/components/ImportFanRate/index.vue | 74 ++++++++++++++++ .../src/views/custom/fanStatistics/index.vue | 22 +++++ 16 files changed, 330 insertions(+), 23 deletions(-) create mode 100644 stdiet-ui/src/components/ImportFanRate/index.vue diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysWxFanStatisticsController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysWxFanStatisticsController.java index db4a6e863..877b43331 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysWxFanStatisticsController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysWxFanStatisticsController.java @@ -1,16 +1,16 @@ package com.stdiet.web.controller.custom; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.util.*; import com.stdiet.common.utils.DateUtils; import com.stdiet.custom.domain.SysWxDistribution; import com.stdiet.custom.dto.request.FanStatisticsRequest; import com.stdiet.custom.dto.response.ExportFanStatisticsResponse; +import com.stdiet.custom.service.ISysImportFanRecordService; import com.stdiet.custom.service.ISysWxDistributionService; import com.stdiet.framework.web.domain.server.Sys; +import io.swagger.models.auth.In; import org.aspectj.weaver.loadtime.Aj; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -40,6 +40,9 @@ public class SysWxFanStatisticsController extends BaseController @Autowired private ISysWxDistributionService sysWxDistributionService; + @Autowired + private ISysImportFanRecordService sysImportFanRecordService; + /** * 查询进粉统计列表 */ @@ -153,4 +156,78 @@ public class SysWxFanStatisticsController extends BaseController List list = sysWxDistributionService.selectDistributionWxByUserId(userId); return AjaxResult.success(list); } + + /** + * 获取导粉通过率 + */ + @RequestMapping("/getImportFanPassRate") + public AjaxResult getImportFanPassRate(SysWxFanStatistics sysWxFanStatistics){ + List> passList = sysWxFanStatisticsService.getTotalFanNumGroupByChannel(sysWxFanStatistics); + List> importList = sysImportFanRecordService.getTotalFanNumGroupByChannel(sysWxFanStatistics); + List> resultList = new ArrayList<>(); + List channelIdList = new ArrayList<>(); + for (Map map : passList) { + Integer channelId = (Integer)map.get("channelId"); + if(channelId != null && !channelIdList.contains(channelId)){ + channelIdList.add(channelId); + } + } + for (Map map : importList) { + Integer channelId = (Integer)map.get("channelId"); + if(channelId != null && !channelIdList.contains(channelId)){ + channelIdList.add(channelId); + } + } + Double allTotalImportFanNum = 0.0; + Double allTotalPassFanNum = 0.0; + for (Integer channelId : channelIdList) { + //根据渠道ID查询导粉记录 + Map importMap = getMap(importList, channelId); + Map passMap = getMap(passList, channelId); + if(importMap != null || passMap != null){ + BigDecimal totalImportFanNum = new BigDecimal(0); + BigDecimal totalPassFanNum = new BigDecimal(0); + String channelName = ""; + if(importMap != null){ + totalImportFanNum = importMap.get("totalFanNum") != null ? (BigDecimal) importMap.get("totalFanNum") : new BigDecimal(0); + channelName = (String)importMap.get("channelName"); + } + if(passMap != null){ + totalPassFanNum = passMap.get("totalFanNum") != null ? (BigDecimal) passMap.get("totalFanNum") : new BigDecimal(0); + channelName = (String)passMap.get("channelName"); + } + if(totalImportFanNum.doubleValue() == 0 && totalPassFanNum.doubleValue() == 0){ + continue; + } + allTotalImportFanNum += totalImportFanNum.doubleValue(); + allTotalPassFanNum += totalPassFanNum.doubleValue(); + Map rateMap = new HashMap<>(); + rateMap.put("channelName", channelName); + rateMap.put("totalImportFanNum", totalImportFanNum); + rateMap.put("totalPassFanNum", totalPassFanNum); + BigDecimal passRate = totalImportFanNum.doubleValue() > 0 ? new BigDecimal(totalPassFanNum.doubleValue()*100/totalImportFanNum.doubleValue()).setScale(1, BigDecimal.ROUND_HALF_UP) : new BigDecimal(100); + rateMap.put("passRate", passRate.doubleValue() > 100 ? 100 : passRate); + resultList.add(rateMap); + } + } + if(resultList.size() > 0){ + Map total = new HashMap<>(); + total.put("channelName", "总计"); + total.put("totalImportFanNum", allTotalImportFanNum); + total.put("totalPassFanNum", allTotalPassFanNum); + BigDecimal totalPassRate = allTotalImportFanNum > 0 ? new BigDecimal(allTotalPassFanNum*100/allTotalImportFanNum).setScale(1, BigDecimal.ROUND_HALF_UP) : new BigDecimal(100); + total.put("passRate", totalPassRate.doubleValue() > 100 ? 100 : totalPassRate); + resultList.add(total); + } + return AjaxResult.success(resultList); + } + + private Map getMap(List> list, Integer channelId){ + for (Map map : list) { + if(map.get("channelId") != null && ((Integer) map.get("channelId")).intValue() == channelId.intValue()){ + return map; + } + } + return null; + } } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysImportFanRecordMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysImportFanRecordMapper.java index 42a83f3c9..f11febb0e 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysImportFanRecordMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysImportFanRecordMapper.java @@ -1,7 +1,10 @@ package com.stdiet.custom.mapper; import java.util.List; +import java.util.Map; + import com.stdiet.custom.domain.SysImportFanRecord; +import com.stdiet.custom.domain.SysWxFanStatistics; /** * 导粉管理Mapper接口 @@ -68,4 +71,11 @@ public interface SysImportFanRecordMapper //查询总导粉数量 int selectTotalSysImportFanNum(SysImportFanRecord sysImportFanRecord); + + /** + * 根据时间范围统计各个渠道的总导粉数量 + * @param sysWxFanStatistics + * @return + */ + List> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysRecipesMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysRecipesMapper.java index 534a39ae5..13b56752a 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysRecipesMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysRecipesMapper.java @@ -3,6 +3,7 @@ package com.stdiet.custom.mapper; import com.stdiet.custom.domain.SysRecipes; import com.stdiet.custom.domain.SysRecipesDaily; import com.stdiet.custom.domain.SysRecipesDailyDishes; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -33,4 +34,8 @@ public interface SysRecipesMapper { public List selectDishesByMenuId(Long id); public List selectDishesByMenuIdShow(Long id); + + List getRecipesListByRecipesId(@Param("recipesId")Long id); + + int updateRecipesById(SysRecipesDaily sysRecipesDaily); } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysWxFanStatisticsMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysWxFanStatisticsMapper.java index 1d3a7f717..cf74e828f 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysWxFanStatisticsMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysWxFanStatisticsMapper.java @@ -3,6 +3,7 @@ package com.stdiet.custom.mapper; import com.stdiet.custom.domain.SysWxFanStatistics; import java.util.List; +import java.util.Map; /** * 进粉统计Mapper接口 @@ -73,4 +74,11 @@ public interface SysWxFanStatisticsMapper { public int selectFanNumCount(SysWxFanStatistics sysWxFanStatistics); public List exportStatisticsList(SysWxFanStatistics sysWxFanStatistics); + + /** + * 根据时间范围统计每个渠道的进粉数量 + * @param sysWxFanStatistics + * @return + */ + public List> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysImportFanRecordService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysImportFanRecordService.java index d2b370823..6e7bd8608 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysImportFanRecordService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysImportFanRecordService.java @@ -1,7 +1,10 @@ package com.stdiet.custom.service; import java.util.List; +import java.util.Map; + import com.stdiet.custom.domain.SysImportFanRecord; +import com.stdiet.custom.domain.SysWxFanStatistics; /** * 导粉管理Service接口 @@ -61,4 +64,11 @@ public interface ISysImportFanRecordService //查询总导粉数量 int selectTotalSysImportFanNum(SysImportFanRecord sysImportFanRecord); + + /** + * 根据时间范围统计各个渠道的总导粉数量 + * @param sysWxFanStatistics + * @return + */ + List> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysWxFanStatisticsService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysWxFanStatisticsService.java index ebeef03f9..c59f61ed2 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysWxFanStatisticsService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysWxFanStatisticsService.java @@ -1,6 +1,7 @@ package com.stdiet.custom.service; import java.util.List; +import java.util.Map; import com.stdiet.common.core.domain.AjaxResult; import com.stdiet.custom.domain.SysWxFanStatistics; @@ -84,4 +85,11 @@ public interface ISysWxFanStatisticsService public int selectFanNumCount(SysWxFanStatistics sysWxFanStatistics); List exportStatisticsList(SysWxFanStatistics sysWxFanStatistics); + + /** + * 根据时间范围统计每个渠道的进粉数量 + * @param sysWxFanStatistics + * @return + */ + public List> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysImportFanRecordServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysImportFanRecordServiceImpl.java index 362353db3..780e5bcb9 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysImportFanRecordServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysImportFanRecordServiceImpl.java @@ -2,8 +2,11 @@ package com.stdiet.custom.service.impl; import java.util.Date; import java.util.List; +import java.util.Map; + import com.stdiet.common.utils.DateUtils; import com.stdiet.custom.domain.SysImportFanWxAccount; +import com.stdiet.custom.domain.SysWxFanStatistics; import com.stdiet.custom.service.ISysImportFanWxAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -138,4 +141,13 @@ public class SysImportFanRecordServiceImpl implements ISysImportFanRecordService public int selectTotalSysImportFanNum(SysImportFanRecord sysImportFanRecord){ return sysImportFanRecordMapper.selectTotalSysImportFanNum(sysImportFanRecord); } + + /** + * 根据时间范围统计各个渠道的总导粉数量 + * @param sysWxFanStatistics + * @return + */ + public List> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics){ + return sysImportFanRecordMapper.getTotalFanNumGroupByChannel(sysWxFanStatistics); + } } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java index 8186cd083..b0a01c0ce 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysRecipesPlanServiceImpl.java @@ -214,23 +214,37 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService { */ private void supplyRecipesBmenu(Long cusId){ List> list = getNeedSupplyRecipesByCusId(cusId); - if(list != null && list.size() > 0){ - for (Map map : list) { - Long recipesId = (Long)map.get("recipesId"); - Integer enNumDay = (Integer)map.get("enNumDay"); - Integer maxNumDay = (Integer)map.get("maxNumDay"); - if(recipesId != null && enNumDay != null && maxNumDay != null){ - List menus = new ArrayList<>(); - for (int i = maxNumDay+1; i <= enNumDay; i++) { - SysRecipesDaily daily = new SysRecipesDaily(); - daily.setCusId(cusId); - daily.setNumDay(i); - daily.setRecipesId(recipesId); - menus.add(daily); - } - sysRecipesMapper.bashAddMenus(menus); + if(list == null || list.size() == 0){ + return; + } + for (Map map : list) { + Long recipesId = (Long)map.get("recipesId"); + Integer startNumDay = (Integer)map.get("startNumDay"); + Integer endNumDay = (Integer)map.get("endNumDay"); + if(recipesId == null || startNumDay == null || endNumDay == null){ + continue; + } + List recipesDailyList = sysRecipesMapper.getRecipesListByRecipesId(recipesId); + if(recipesDailyList != null && recipesDailyList.size() > 0){ + for (SysRecipesDaily sysRecipesDaily : recipesDailyList) { + sysRecipesDaily.setNumDay(startNumDay); + //更新 + sysRecipesMapper.updateRecipesById(sysRecipesDaily); + startNumDay++; } } + recipesDailyList = new ArrayList<>(); + for (int i = startNumDay; i <= endNumDay; i++) { + SysRecipesDaily sysRecipesDaily = new SysRecipesDaily(); + sysRecipesDaily.setNumDay(i); + sysRecipesDaily.setRecipesId(recipesId); + sysRecipesDaily.setCusId(cusId); + recipesDailyList.add(sysRecipesDaily); + } + if(recipesDailyList.size() > 0){ + //批量添加 + sysRecipesMapper.bashAddMenus(recipesDailyList); + } } } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysWxFanStatisticsServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysWxFanStatisticsServiceImpl.java index 752ed63aa..527da1dcc 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysWxFanStatisticsServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysWxFanStatisticsServiceImpl.java @@ -1,6 +1,7 @@ package com.stdiet.custom.service.impl; import java.util.List; +import java.util.Map; import com.stdiet.common.core.domain.AjaxResult; import com.stdiet.common.utils.DateUtils; @@ -149,4 +150,14 @@ public class SysWxFanStatisticsServiceImpl implements ISysWxFanStatisticsService public List exportStatisticsList(SysWxFanStatistics sysWxFanStatistics) { return sysWxFanStatisticsMapper.exportStatisticsList(sysWxFanStatistics); } + + /** + * 根据时间范围统计每个渠道的进粉数量 + * @param sysWxFanStatistics + * @return + */ + @Override + public List> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics){ + return sysWxFanStatisticsMapper.getTotalFanNumGroupByChannel(sysWxFanStatistics); + } } \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysImportFanRecordMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysImportFanRecordMapper.xml index e8bf59c8b..58cfd42fa 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysImportFanRecordMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysImportFanRecordMapper.xml @@ -138,4 +138,21 @@ where fwc.del_flag = 0 and fwc.import_fan_record_id = #{id} + + + + \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml index d3e410aff..54d6b1c48 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesMapper.xml @@ -218,5 +218,16 @@ ) ing USING(id) + + + + update sys_customer_daily_menu + + num_day = #{numDay}, + + where id = #{id} + \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml index 46680babf..83da1ad1d 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml @@ -287,13 +287,13 @@ \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysWxFanStatisticsMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysWxFanStatisticsMapper.xml index ce3a124cf..645d5283a 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysWxFanStatisticsMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysWxFanStatisticsMapper.xml @@ -153,4 +153,22 @@ and swfs.wx_id = #{wxId} + + + \ No newline at end of file diff --git a/stdiet-ui/src/api/custom/fanStatistics.js b/stdiet-ui/src/api/custom/fanStatistics.js index 14d90f2dc..f151e5221 100644 --- a/stdiet-ui/src/api/custom/fanStatistics.js +++ b/stdiet-ui/src/api/custom/fanStatistics.js @@ -61,5 +61,15 @@ export function getWxByUserId(userId) { }) } +// 获取通过率 +export function getImportFanPassRate(data) { + return request({ + url: '/custom/fanStatistics/getImportFanPassRate', + method: 'get', + params: data + }) +} + + diff --git a/stdiet-ui/src/components/ImportFanRate/index.vue b/stdiet-ui/src/components/ImportFanRate/index.vue new file mode 100644 index 000000000..683ab7851 --- /dev/null +++ b/stdiet-ui/src/components/ImportFanRate/index.vue @@ -0,0 +1,74 @@ + + + + diff --git a/stdiet-ui/src/views/custom/fanStatistics/index.vue b/stdiet-ui/src/views/custom/fanStatistics/index.vue index 4e5bdce20..6cc3eccb4 100644 --- a/stdiet-ui/src/views/custom/fanStatistics/index.vue +++ b/stdiet-ui/src/views/custom/fanStatistics/index.vue @@ -108,6 +108,15 @@ >导出 + + 导粉通过率统计 + 取 消 + + + @@ -282,7 +294,9 @@ import { updateFanStatistics, exportFanStatistics, getWxByUserId, + getImportFanPassRate } from "@/api/custom/fanStatistics"; +import ImportFanRate from "@/components/ImportFanRate"; import store from "@/store"; import dayjs from "dayjs"; import { mapState } from "vuex"; @@ -366,6 +380,9 @@ export default { preSaleIdOptions: (state) => state.global.preSaleIdOptions.slice(1), }), }, + components:{ + ImportFanRate + }, methods: { /** 查询进粉统计列表 */ getList() { @@ -563,6 +580,11 @@ export default { } }); }, + showPassRate(){ + this.queryParams.fanStartTime = this.fanTimeScope && this.fanTimeScope.length > 0 ? this.fanTimeScope[0] : null; + this.queryParams.fanEndTime = this.fanTimeScope && this.fanTimeScope.length > 0 ? this.fanTimeScope[1] : null; + this.$refs.importFanRateRef.showDialog(this.queryParams); + } }, watch: { // 监听用户ID变化