perf(module feed/FeedList): 为数据同步增加了缓存机制
在配料清单部分增加了缓存机制: 所有对数据库的请求通过Map缓存 仅当配方管理出现修改 || 饲喂计划出现增删改操作时通过标志位通知配料清单表下一次请求刷新缓存 减少对数据库的重复请求操作
This commit is contained in:
parent
847055687b
commit
6c67094c0d
@ -10,6 +10,7 @@ import com.zhyc.module.feed.domain.SgFeedPlan;
|
|||||||
import com.zhyc.module.feed.domain.SgFormulaManagement;
|
import com.zhyc.module.feed.domain.SgFormulaManagement;
|
||||||
import com.zhyc.module.feed.service.ISgFeedPlanService;
|
import com.zhyc.module.feed.service.ISgFeedPlanService;
|
||||||
import com.zhyc.module.feed.service.ISgFormulaManagementService;
|
import com.zhyc.module.feed.service.ISgFormulaManagementService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@ -46,6 +47,9 @@ public class SgFeedListController extends BaseController {
|
|||||||
|
|
||||||
private final Map<String, SgFeedList> sgFeedListMap = new HashMap<>();
|
private final Map<String, SgFeedList> sgFeedListMap = new HashMap<>();
|
||||||
|
|
||||||
|
public static boolean refresh = true;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
public SgFeedListController(ISgFeedListService sgFeedListService, ISgFormulaManagementService sgFormulaManagementService, ISgFeedPlanService sgFeedPlanService) {
|
public SgFeedListController(ISgFeedListService sgFeedListService, ISgFormulaManagementService sgFormulaManagementService, ISgFeedPlanService sgFeedPlanService) {
|
||||||
this.sgFeedListService = sgFeedListService;
|
this.sgFeedListService = sgFeedListService;
|
||||||
this.sgFormulaManagementService = sgFormulaManagementService;
|
this.sgFormulaManagementService = sgFormulaManagementService;
|
||||||
@ -59,7 +63,14 @@ public class SgFeedListController extends BaseController {
|
|||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public TableDataInfo list(SgFeedList sgFeedList) {
|
public TableDataInfo list(SgFeedList sgFeedList) {
|
||||||
SyncFeedList();
|
/*
|
||||||
|
刷新缓存
|
||||||
|
当配方管理表出现更新 或 饲喂计划表出现增删改时会将refresh置为true 通知此处进行刷新
|
||||||
|
*/
|
||||||
|
if (refresh) {
|
||||||
|
SyncFeedList();
|
||||||
|
refresh = false;
|
||||||
|
}
|
||||||
startPage();
|
startPage();
|
||||||
List<SgFeedList> list = sgFeedListService.selectSgFeedListList(sgFeedList);
|
List<SgFeedList> list = sgFeedListService.selectSgFeedListList(sgFeedList);
|
||||||
// 用 map 中已有的数据替换 list 中的元素
|
// 用 map 中已有的数据替换 list 中的元素
|
||||||
@ -164,17 +175,20 @@ public class SgFeedListController extends BaseController {
|
|||||||
rootPlanQuery.setFormulaId(sgFormulaManagement.getFormulaId());
|
rootPlanQuery.setFormulaId(sgFormulaManagement.getFormulaId());
|
||||||
rootPlanQuery.setBatchId(sgFormulaManagement.getBatchId());
|
rootPlanQuery.setBatchId(sgFormulaManagement.getBatchId());
|
||||||
List<SgFeedPlan> sgFeedPlans = sgFeedPlanService.selectSgFeedPlanList(rootPlanQuery);
|
List<SgFeedPlan> sgFeedPlans = sgFeedPlanService.selectSgFeedPlanList(rootPlanQuery);
|
||||||
// 为空则标识当前配方不在饲喂计划中
|
// 为空则标识当前配方不在饲喂计划中 && 不在缓存中设置
|
||||||
if (sgFeedPlans.isEmpty()) {
|
if (sgFeedPlans.isEmpty()) {
|
||||||
isPlan = false;
|
isPlan = false;
|
||||||
}
|
} else {
|
||||||
// rootPlan中存储的是该配方批号的总量
|
// rootPlan中存储的是该配方批号的总量
|
||||||
SgFeedPlan rootPlan = computePlanTotal(sgFeedPlans);
|
SgFeedPlan rootPlan = computePlanTotal(sgFeedPlans);
|
||||||
|
|
||||||
|
// 将计划实体对象设置到配料清单中
|
||||||
|
sgFeedList.setRootPlan(rootPlan);
|
||||||
|
|
||||||
|
// 完整的配料清单对象加入缓存
|
||||||
|
sgFeedListMap.put(sgFormulaManagement.getFormulaId() + "_" + sgFormulaManagement.getBatchId(), sgFeedList);
|
||||||
|
}
|
||||||
|
|
||||||
// 将计划实体对象设置到配料清单中
|
|
||||||
sgFeedList.setRootPlan(rootPlan);
|
|
||||||
// 完整的配料清单对象加入缓存
|
|
||||||
sgFeedListMap.put(sgFormulaManagement.getFormulaId() + "_" + sgFormulaManagement.getBatchId(), sgFeedList);
|
|
||||||
// 不存在则插入
|
// 不存在则插入
|
||||||
if (!isExist && isPlan) {
|
if (!isExist && isPlan) {
|
||||||
sgFeedListService.insertSgFeedList(sgFeedList);
|
sgFeedListService.insertSgFeedList(sgFeedList);
|
||||||
@ -213,6 +227,9 @@ public class SgFeedListController extends BaseController {
|
|||||||
rootPlan.setPlanNoonSize(planFeedNoonSize);
|
rootPlan.setPlanNoonSize(planFeedNoonSize);
|
||||||
rootPlan.setPlanAfternoonSize(planFeedAfternoonSize);
|
rootPlan.setPlanAfternoonSize(planFeedAfternoonSize);
|
||||||
rootPlan.setPlanFeedTotal(planFeedTotalSize);
|
rootPlan.setPlanFeedTotal(planFeedTotalSize);
|
||||||
|
|
||||||
|
// 设置计划日期
|
||||||
|
rootPlan.setPlanDate(sgFeedPlans.get(0).getPlanDate());
|
||||||
}
|
}
|
||||||
return rootPlan;
|
return rootPlan;
|
||||||
}
|
}
|
||||||
|
@ -82,6 +82,8 @@ public class SgFeedPlanController extends BaseController {
|
|||||||
sgFeedPlan.setCreateDate(new Date());
|
sgFeedPlan.setCreateDate(new Date());
|
||||||
// 计算其他字段值
|
// 计算其他字段值
|
||||||
setPlan(sgFeedPlan);
|
setPlan(sgFeedPlan);
|
||||||
|
// 通知配料清单刷新数据
|
||||||
|
SgFeedListController.refresh = true;
|
||||||
return toAjax(sgFeedPlanService.insertSgFeedPlan(sgFeedPlan));
|
return toAjax(sgFeedPlanService.insertSgFeedPlan(sgFeedPlan));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,6 +96,8 @@ public class SgFeedPlanController extends BaseController {
|
|||||||
public AjaxResult edit(@RequestBody SgFeedPlan sgFeedPlan) {
|
public AjaxResult edit(@RequestBody SgFeedPlan sgFeedPlan) {
|
||||||
// 根据修改后的值重新计算
|
// 根据修改后的值重新计算
|
||||||
setPlan(sgFeedPlan);
|
setPlan(sgFeedPlan);
|
||||||
|
// 通知配料清单刷新数据
|
||||||
|
SgFeedListController.refresh = true;
|
||||||
return toAjax(sgFeedPlanService.updateSgFeedPlan(sgFeedPlan));
|
return toAjax(sgFeedPlanService.updateSgFeedPlan(sgFeedPlan));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,6 +108,8 @@ public class SgFeedPlanController extends BaseController {
|
|||||||
@Log(title = "饲喂计划", businessType = BusinessType.DELETE)
|
@Log(title = "饲喂计划", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{createDates}")
|
@DeleteMapping("/{createDates}")
|
||||||
public AjaxResult remove(@PathVariable Date[] createDates) {
|
public AjaxResult remove(@PathVariable Date[] createDates) {
|
||||||
|
// 通知配料清单刷新数据
|
||||||
|
SgFeedListController.refresh = true;
|
||||||
return toAjax(sgFeedPlanService.deleteSgFeedPlanByCreateDates(createDates));
|
return toAjax(sgFeedPlanService.deleteSgFeedPlanByCreateDates(createDates));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,7 +117,7 @@ public class SgFeedPlanController extends BaseController {
|
|||||||
* 设定计划值
|
* 设定计划值
|
||||||
* 用于添加和修改
|
* 用于添加和修改
|
||||||
*/
|
*/
|
||||||
private SgFeedPlan setPlan(SgFeedPlan sgFeedPlan) {
|
private void setPlan(SgFeedPlan sgFeedPlan) {
|
||||||
// 根据羊舍ID获取羊只数量
|
// 根据羊舍ID获取羊只数量
|
||||||
int countByFoldId = sgFeedPlanService.getSheepCountByFoldId(sgFeedPlan.getSheepHouseId());
|
int countByFoldId = sgFeedPlanService.getSheepCountByFoldId(sgFeedPlan.getSheepHouseId());
|
||||||
sgFeedPlan.setSheepCount(countByFoldId);
|
sgFeedPlan.setSheepCount(countByFoldId);
|
||||||
@ -121,6 +127,5 @@ public class SgFeedPlanController extends BaseController {
|
|||||||
sgFeedPlan.setPlanMorningSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioMorning() / 100));
|
sgFeedPlan.setPlanMorningSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioMorning() / 100));
|
||||||
sgFeedPlan.setPlanNoonSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioNoon() / 100));
|
sgFeedPlan.setPlanNoonSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioNoon() / 100));
|
||||||
sgFeedPlan.setPlanAfternoonSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioAfternoon() / 100));
|
sgFeedPlan.setPlanAfternoonSize(sgFeedPlan.getPlanFeedTotal() * (sgFeedPlan.getRatioAfternoon() / 100));
|
||||||
return sgFeedPlan;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,6 +143,9 @@ public class SgFormulaManagementController extends BaseController {
|
|||||||
sgFormulaListItem.setFormulaId(sgFormulaManagement.getFormulaId());
|
sgFormulaListItem.setFormulaId(sgFormulaManagement.getFormulaId());
|
||||||
sgFormulaListService.insertSgFormulaList(sgFormulaListItem);
|
sgFormulaListService.insertSgFormulaList(sgFormulaListItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 通知配料清单刷新数据
|
||||||
|
SgFeedListController.refresh = true;
|
||||||
return toAjax(sgFormulaManagementService.updateSgFormulaManagement(sgFormulaManagement));
|
return toAjax(sgFormulaManagementService.updateSgFormulaManagement(sgFormulaManagement));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,6 +170,9 @@ public class SgFormulaManagementController extends BaseController {
|
|||||||
}
|
}
|
||||||
// 前置检查完毕 执行删除
|
// 前置检查完毕 执行删除
|
||||||
sgFormulaManagement.setBatchId(batchId);
|
sgFormulaManagement.setBatchId(batchId);
|
||||||
|
|
||||||
|
// 通知配料清单刷新数据
|
||||||
|
SgFeedListController.refresh = true;
|
||||||
return toAjax(sgFormulaManagementService.deleteSgFormulaManagement(sgFormulaManagement));
|
return toAjax(sgFormulaManagementService.deleteSgFormulaManagement(sgFormulaManagement));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user