导粉进粉通过率统计,食谱计划生成优化
This commit is contained in:
		| @@ -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<Map<String,Object>> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics); | ||||
| } | ||||
| @@ -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<SysRecipesDailyDishes> selectDishesByMenuId(Long id); | ||||
|  | ||||
|     public List<SysRecipesDailyDishes> selectDishesByMenuIdShow(Long id); | ||||
|  | ||||
|     List<SysRecipesDaily> getRecipesListByRecipesId(@Param("recipesId")Long id); | ||||
|  | ||||
|     int updateRecipesById(SysRecipesDaily sysRecipesDaily); | ||||
| } | ||||
|   | ||||
| @@ -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<SysWxFanStatistics> exportStatisticsList(SysWxFanStatistics sysWxFanStatistics); | ||||
|  | ||||
|     /** | ||||
|      * 根据时间范围统计每个渠道的进粉数量 | ||||
|      * @param sysWxFanStatistics | ||||
|      * @return | ||||
|      */ | ||||
|     public List<Map<String,Object>> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics); | ||||
| } | ||||
| @@ -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<Map<String,Object>> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics); | ||||
| } | ||||
| @@ -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<SysWxFanStatistics> exportStatisticsList(SysWxFanStatistics sysWxFanStatistics); | ||||
|  | ||||
|     /** | ||||
|      * 根据时间范围统计每个渠道的进粉数量 | ||||
|      * @param sysWxFanStatistics | ||||
|      * @return | ||||
|      */ | ||||
|     public List<Map<String,Object>> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics); | ||||
| } | ||||
| @@ -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<Map<String,Object>> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics){ | ||||
|         return sysImportFanRecordMapper.getTotalFanNumGroupByChannel(sysWxFanStatistics); | ||||
|     } | ||||
| } | ||||
| @@ -214,23 +214,37 @@ public class SysRecipesPlanServiceImpl implements ISysRecipesPlanService { | ||||
|      */ | ||||
|     private void supplyRecipesBmenu(Long cusId){ | ||||
|         List<Map<String,Object>> list = getNeedSupplyRecipesByCusId(cusId); | ||||
|         if(list != null && list.size() > 0){ | ||||
|             for (Map<String,Object> 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<SysRecipesDaily> 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<String,Object> 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<SysRecipesDaily> 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); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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<SysWxFanStatistics> exportStatisticsList(SysWxFanStatistics sysWxFanStatistics) { | ||||
|         return sysWxFanStatisticsMapper.exportStatisticsList(sysWxFanStatistics); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据时间范围统计每个渠道的进粉数量 | ||||
|      * @param sysWxFanStatistics | ||||
|      * @return | ||||
|      */ | ||||
|     @Override | ||||
|     public List<Map<String,Object>> getTotalFanNumGroupByChannel(SysWxFanStatistics sysWxFanStatistics){ | ||||
|         return sysWxFanStatisticsMapper.getTotalFanNumGroupByChannel(sysWxFanStatistics); | ||||
|     } | ||||
| } | ||||
| @@ -138,4 +138,21 @@ | ||||
|         where fwc.del_flag = 0 and fwc.import_fan_record_id = #{id} | ||||
|     </select> | ||||
|  | ||||
|     <!-- 根据时间范围统计各个渠道的总导粉数量 --> | ||||
|     <select id="getTotalFanNumGroupByChannel" parameterType="SysWxFanStatistics" resultType="Map" > | ||||
|         select s.channelId,acc.dict_label as channelName, s.totalFanNum from | ||||
|         ( | ||||
|           select fr.import_fan_channel as channelId,sum(wa.import_fan_num) as totalFanNum from  sys_import_fan_wx_account wa | ||||
|           left join sys_import_fan_record fr on fr.id = wa.import_fan_record_id and fr.del_flag = 0 | ||||
|           where wa.del_flag = 0 | ||||
|           <if test="fanStartTime != null and fanEndTime != null"> | ||||
|             and fr.import_fan_date >= #{fanStartTime} and #{fanEndTime} >= fr.import_fan_date | ||||
|           </if> | ||||
|           group by fr.import_fan_channel | ||||
|         ) | ||||
|         s LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_account') AS acc ON acc.dict_value = s.channelId | ||||
|         order by s.channelId asc | ||||
|     </select> | ||||
|  | ||||
|  | ||||
| </mapper> | ||||
| @@ -218,5 +218,16 @@ | ||||
|         ) ing USING(id) | ||||
|     </select> | ||||
|  | ||||
|     <!-- 根据 recipesId查询食谱具体每天详情 --> | ||||
|     <select id="getRecipesListByRecipesId" parameterType="Long" resultType="SysRecipesDaily"> | ||||
|         SELECT id, num_day as numDay FROM sys_customer_daily_menu WHERE recipes_id = #{recipesId} order by num_day asc | ||||
|     </select> | ||||
|  | ||||
|     <update id="updateRecipesById" parameterType="SysRecipesDaily"> | ||||
|         update sys_customer_daily_menu | ||||
|         <trim prefix="SET" suffixOverrides=","> | ||||
|             <if test="numDay != null">num_day = #{numDay},</if> | ||||
|         </trim> | ||||
|         where id = #{id} | ||||
|     </update> | ||||
| </mapper> | ||||
| @@ -287,13 +287,13 @@ | ||||
|  | ||||
|     <!-- 查询食谱计划中对应食谱存在天数缺失的食谱计划,食谱计划发生变化时,可能会导致sys_customer_daily_menu表中天数缺失,需要查询出来进行补充 --> | ||||
|     <select id="getNeedSupplyRecipesByCusId" parameterType="Long" resultType="Map"> | ||||
|         select plan.recipes_id as recipesId,plan.end_num_day as enNumDay,s.maxNumDay from sys_recipes_plan as plan left join | ||||
|  | ||||
|         select plan.cus_id as cusId,plan.recipes_id as recipesId,plan.start_num_day as startNumDay, plan.end_num_day as endNumDay from sys_recipes_plan as plan left join | ||||
|         ( | ||||
|           select recipes_id,count(1) as dayNum,max(num_day) as maxNumDay from sys_customer_daily_menu where cus_id = #{cusId} and recipes_id is not null group by recipes_id | ||||
|         select recipes_id,count(1) as dayNum,min(num_day) as minNumDay,max(num_day) as maxNumDay from sys_customer_daily_menu where cus_id = #{cusId} and recipes_id is not null group by recipes_id | ||||
|         ) | ||||
|         as s on s.recipes_id = plan.recipes_id | ||||
|  | ||||
|         where plan.cus_id = #{cusId} and plan.del_flag = 0 and plan.recipes_id is not null and plan.end_num_day > s.maxNumDay | ||||
|         where plan.cus_id = #{cusId} and plan.del_flag = 0 and plan.recipes_id is not null and (s.minNumDay <![CDATA[ <> ]]> plan.start_num_day or  s.maxNumDay <![CDATA[ <> ]]> plan.end_num_day) | ||||
|         order by plan.start_num_day asc | ||||
|     </select> | ||||
| </mapper> | ||||
| @@ -153,4 +153,22 @@ | ||||
|         <if test="wxId != null">and swfs.wx_id = #{wxId}</if> | ||||
|     </select> | ||||
|  | ||||
|     <!-- 根据时间范围统计每个渠道的总进粉量 --> | ||||
|     <select id="getTotalFanNumGroupByChannel" parameterType="SysWxFanStatistics" resultType="Map"> | ||||
|         select s.channelId,acc.dict_label as channelName,s.totalFanNum from | ||||
|         ( | ||||
| 		  select | ||||
| 		  swd.account_id as channelId, sum(swfs.fan_num) as totalFanNum | ||||
| 		  from sys_wx_fan_statistics swfs | ||||
| 		  left join sys_wx_distribution swd on swd.wechat_account = swfs.wx_id and swd.del_flag = 0 | ||||
| 		  where swfs.del_flag = 0 | ||||
|           <if test="fanStartTime != null and fanEndTime != null"> | ||||
|             and swfs.fan_time >= #{fanStartTime} and #{fanEndTime} >= swfs.fan_time | ||||
|           </if> | ||||
| 		  group by swd.account_id | ||||
| 	    ) s | ||||
| 	    LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_account') AS acc ON acc.dict_value = s.channelId | ||||
|         order by s.channelId asc | ||||
|     </select> | ||||
|  | ||||
| </mapper> | ||||
		Reference in New Issue
	
	Block a user