diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedListController.java b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedListController.java index 895f061..db39029 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedListController.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/controller/SgFeedListController.java @@ -1,6 +1,8 @@ package com.zhyc.module.feed.controller; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -63,19 +65,19 @@ public class SgFeedListController extends BaseController { List list = sgFeedListService.selectSgFeedListList(sgFeedList); // 用 map 中已有的数据替换 list 中的元素 List replacedList = new ArrayList<>(); - for (SgFeedList item : list) { - String key = item.getFormulaId() + "_" + item.getFormulaBatchId(); - // 从缓存中取出完整对象 - SgFeedList itemInCache = SgFeedListServiceImpl.getSgFeedListMap().getOrDefault(key, item); - // 将数据库查询的基本信息替换掉缓存中去除的内容 - 前端展示与修改需要 - itemInCache.setId(item.getId()); - itemInCache.setFormulaBatchId(item.getFormulaBatchId()); - itemInCache.setFormulaId(item.getFormulaId()); - itemInCache.setZookeeper(item.getZookeeper()); - itemInCache.setDeployDate(item.getDeployDate()); - // 替换为 map 中的对象 - replacedList.add(itemInCache); - } + for (SgFeedList item : list) { + String key = item.getFormulaId() + "_" + item.getFormulaBatchId() + "_" + item.getDeployDate(); + // 从缓存中取出完整对象 + SgFeedList itemInCache = SgFeedListServiceImpl.getSgFeedListMap().getOrDefault(key, item); + // 将数据库查询的基本信息替换掉缓存中去除的内容 - 前端展示与修改需要 + itemInCache.setId(item.getId()); + itemInCache.setFormulaBatchId(item.getFormulaBatchId()); + itemInCache.setFormulaId(item.getFormulaId()); + itemInCache.setZookeeper(item.getZookeeper()); + itemInCache.setDeployDate(item.getDeployDate()); + // 替换为 map 中的对象 + replacedList.add(itemInCache); + } return getDataTable(replacedList); } @@ -117,6 +119,7 @@ public class SgFeedListController extends BaseController { @Log(title = "配料清单", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody SgFeedList sgFeedList) { + return toAjax(sgFeedListService.updateSgFeedList(sgFeedList)); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedList.java b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedList.java index 0b3c61b..41ca828 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedList.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/domain/SgFeedList.java @@ -53,6 +53,8 @@ public class SgFeedList extends BaseEntity private List formulaList; + private List planList; + @Override public String toString() { diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedListMapper.java b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedListMapper.java index 47e837c..b80e580 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedListMapper.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/mapper/SgFeedListMapper.java @@ -60,4 +60,7 @@ public interface SgFeedListMapper * @return 结果 */ int deleteSgFeedListByIds(Long[] ids); + + // 清空所有 + int deleteAll(); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedListServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedListServiceImpl.java index 225d851..894ff47 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedListServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedListServiceImpl.java @@ -1,8 +1,6 @@ package com.zhyc.module.feed.service.impl; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import com.zhyc.module.feed.domain.SgFeedPlan; import com.zhyc.module.feed.domain.SgFormulaManagement; @@ -32,6 +30,12 @@ public class SgFeedListServiceImpl implements ISgFeedListService { this.sgFeedListMapper = sgFeedListMapper; this.sgFormulaManagementService = sgFormulaManagementService; this.sgFeedPlanService = sgFeedPlanService; + // 构造时将数据库初始数据写入缓存 + List feedListsFromDataBase = this.selectSgFeedListList(new SgFeedList()); + for (SgFeedList sgFeedListItem : feedListsFromDataBase) { + String key = sgFeedListItem.getFormulaId() + "_" + sgFeedListItem.getFormulaBatchId() + "_" + sgFeedListItem.getDeployDate(); + sgFeedListMap.put(key, sgFeedListItem); + } } /** @@ -100,7 +104,7 @@ public class SgFeedListServiceImpl implements ISgFeedListService { return sgFeedListMapper.deleteSgFeedListById(id); } - public void SyncFeedList() { + public void SyncFeedList_old() { // 清空旧缓存 sgFeedListMap.clear(); // 获取配方管理和现有配料清单内容 @@ -153,6 +157,74 @@ public class SgFeedListServiceImpl implements ISgFeedListService { } } + public void SyncFeedList() { + HashMap cacheTemp = new HashMap<>(sgFeedListMap); + // 清空旧缓存 + sgFeedListMap.clear(); + List sgFeedPlans = sgFeedPlanService.selectSgFeedPlanList(new SgFeedPlan()); + List> planGroups = new ArrayList<>(); + List currentFeedPlan = new ArrayList<>(); + if (!sgFeedPlans.isEmpty()) { + String currentFormulaId = sgFeedPlans.get(0).getFormulaId(); + String currentBatchId = sgFeedPlans.get(0).getBatchId(); + Date currentDate = sgFeedPlans.get(0).getPlanDate(); + // 对饲喂计划进行分组 + for (SgFeedPlan sgFeedPlan : sgFeedPlans) { + if (sgFeedPlan.getBatchId() != null && !sgFeedPlan.getBatchId().equals("0")) { + if (sgFeedPlan.getFormulaId().equals(currentFormulaId) && sgFeedPlan.getBatchId().equals(currentBatchId) && sgFeedPlan.getPlanDate().equals(currentDate)) { + currentFeedPlan.add(sgFeedPlan); + } else { + currentDate = sgFeedPlan.getPlanDate(); + currentBatchId = sgFeedPlan.getBatchId(); + currentFormulaId = sgFeedPlan.getFormulaId(); + planGroups.add(currentFeedPlan); + currentFeedPlan = new ArrayList<>(); + // 立即插入否则会丢失该元素 + currentFeedPlan.add(sgFeedPlan); + } + } + } + // 插入最后一个列表 - 否则该列表会丢失 + planGroups.add(currentFeedPlan); + // 注册数据 - 每一个List为一个清单 + for (List sgFeedPlanList : planGroups) { + SgFeedList sgFeedList = new SgFeedList(); + // 计算饲喂总和 + SgFeedPlan rootPlan = computePlanTotal(sgFeedPlanList); + sgFeedList.setRootPlan(rootPlan); + sgFeedList.setPlanList(sgFeedPlanList); + // 写入信息 + sgFeedList.setFormulaId(sgFeedPlanList.get(0).getFormulaId()); + sgFeedList.setFormulaBatchId(sgFeedPlanList.get(0).getBatchId()); + sgFeedList.setDeployDate(sgFeedPlanList.get(0).getPlanDate()); + // 写入配方管理信息 + SgFormulaManagement formulaManagementQuery = new SgFormulaManagement(); + formulaManagementQuery.setFormulaId(sgFeedList.getFormulaId()); + formulaManagementQuery.setBatchId(sgFeedList.getFormulaBatchId()); + List formulaManagements = sgFormulaManagementService.selectSgFormulaManagementList(formulaManagementQuery); + if (!formulaManagements.isEmpty()) { + sgFeedList.setRootFormula(formulaManagements.get(0)); + sgFeedList.setFormulaList(formulaManagements.get(0).getSgFormulaList()); + } + String cacheKey = sgFeedList.getFormulaId() + "_" + sgFeedList.getFormulaBatchId() + "_" + sgFeedList.getDeployDate(); + // 从就缓存中查找,如果存在则更新可修改的值 + if (cacheTemp.containsKey(cacheKey)) { + SgFeedList cacheItem = cacheTemp.get(cacheKey); + sgFeedList.setZookeeper(cacheItem.getZookeeper()); + } + sgFeedListMap.put(cacheKey, sgFeedList); + } + + List toDataBase = new ArrayList<>(sgFeedListMap.values()); + // 清空再写入 + this.sgFeedListMapper.deleteAll(); + // 处理结果写入数据库 + for (SgFeedList recordItem : toDataBase) { + this.insertSgFeedList(recordItem); + } + } + } + /** * 计算某个配方某个批次的总和值 * @@ -176,7 +248,8 @@ public class SgFeedListServiceImpl implements ISgFeedListService { planFeedAfternoonSize += sgFeedPlan.getPlanAfternoonSize(); planFeedTotalSize += sgFeedPlan.getPlanFeedTotal(); } - + rootPlan.setFormulaId(sgFeedPlans.get(0).getFormulaId()); + rootPlan.setBatchId(sgFeedPlans.get(0).getBatchId()); rootPlan.setSheepCount(sheepCountTotal); rootPlan.setPlanDailySize(sheepDailySize); rootPlan.setPlanMorningSize(planFeedMorningSize); diff --git a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedStatisticServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedStatisticServiceImpl.java index b1766bd..b82d0b4 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedStatisticServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/feed/service/impl/SgFeedStatisticServiceImpl.java @@ -119,7 +119,7 @@ public class SgFeedStatisticServiceImpl implements ISgFeedStatisticService { sgFeedListService.SyncFeedList(); // 从缓存获取完整配方清单 - String cacheKey = sgFeedStatistic.getFormulaId() + "_" + sgFeedStatistic.getFormulaBatchId(); + String cacheKey = sgFeedStatistic.getFormulaId() + "_" + sgFeedStatistic.getFormulaBatchId() + "_" + sgFeedStatistic.getFeedDate(); SgFeedList sgFeedList = SgFeedListServiceImpl.getSgFeedListMap().get(cacheKey); if (sgFeedList != null && sgFeedList.getFormulaList() != null) { @@ -148,7 +148,7 @@ public class SgFeedStatisticServiceImpl implements ISgFeedStatisticService { SgFeedPlan sgFeedPlanQuery = new SgFeedPlan(); sgFeedPlanQuery.setFormulaId(sgFeedStatistic.getFormulaId()); sgFeedPlanQuery.setBatchId(sgFeedStatistic.getFormulaBatchId()); - + sgFeedPlanQuery.setPlanDate(sgFeedStatistic.getFeedDate()); List sgFeedPlans = sgFeedPlanService.selectSgFeedPlanList(sgFeedPlanQuery); if (!sgFeedPlans.isEmpty()) { diff --git a/zhyc-module/src/main/resources/mapper/feed/SgFeedListMapper.xml b/zhyc-module/src/main/resources/mapper/feed/SgFeedListMapper.xml index 0c10e17..86932be 100644 --- a/zhyc-module/src/main/resources/mapper/feed/SgFeedListMapper.xml +++ b/zhyc-module/src/main/resources/mapper/feed/SgFeedListMapper.xml @@ -24,6 +24,7 @@ and zookeeper = #{zookeeper} and deploy_date = #{deployDate} + ORDER BY deploy_date ASC, formula_id ASC, formula_batch_id ASC