From 3f2974e061427ec138b5959edbade96d6aeade11 Mon Sep 17 00:00:00 2001 From: liuchen864 <23082234@qq.com> Date: Mon, 25 Dec 2023 09:01:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E7=9B=98=E7=82=B9=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=94=B3=E8=AF=B7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataobject/countPlan/CountPlanMainDO.java | 6 ++- .../win/module/wms/job/CountPlanCycleJob.java | 47 +++++++++++++++++++ .../countPlan/CountPlanMainService.java | 6 +++ .../countPlan/CountPlanMainServiceImpl.java | 21 ++++++--- 4 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/CountPlanCycleJob.java diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/countPlan/CountPlanMainDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/countPlan/CountPlanMainDO.java index 68d2e758..64f5538e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/countPlan/CountPlanMainDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/countPlan/CountPlanMainDO.java @@ -39,6 +39,10 @@ public class CountPlanMainDO extends BaseDO { * 执行周期 */ private String crontab; + /** + * 下一执行时间 + */ + private LocalDateTime nextTime; /** * 维度 * @@ -131,6 +135,6 @@ public class CountPlanMainDO extends BaseDO { /** * 租户编号 */ - private Integer tenantId; + private Long tenantId; } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/CountPlanCycleJob.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/CountPlanCycleJob.java new file mode 100644 index 00000000..9645ff6b --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/CountPlanCycleJob.java @@ -0,0 +1,47 @@ +package com.win.module.wms.job; + +import com.win.framework.quartz.core.handler.JobHandler; +import com.win.framework.quartz.core.util.CronUtils; +import com.win.framework.tenant.core.context.TenantContextHolder; +import com.win.module.wms.dal.dataobject.countPlan.CountPlanMainDO; +import com.win.module.wms.dal.mysql.countPlan.CountPlanMainMapper; +import com.win.module.wms.service.countPlan.CountPlanMainService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +@Component +public class CountPlanCycleJob implements JobHandler { + + @Resource + private CountPlanMainService countPlanMainService; + @Resource + private CountPlanMainMapper countPlanMainMapper; + + @Override + public String execute(String param) { + StringBuilder message = new StringBuilder(); + TenantContextHolder.setIgnore(true); + List countPlanMainDOList = countPlanMainService.getCountPlanCycle(); + TenantContextHolder.setIgnore(false); + for(CountPlanMainDO countPlanMainDO : countPlanMainDOList) { + TenantContextHolder.setTenantId(countPlanMainDO.getTenantId()); + LocalDateTime now = LocalDateTime.now(); + if(now.isAfter(countPlanMainDO.getNextTime())) { + countPlanMainService.generateRequest(countPlanMainDO); + countPlanMainDO.setNextTime(null); + // 计算下一个执行时间 + List nextTimes = CronUtils.getNextTimes(countPlanMainDO.getCrontab(), 1); + if(!nextTimes.isEmpty()) { + countPlanMainDO.setNextTime(nextTimes.get(0)); + } + countPlanMainMapper.updateById(countPlanMainDO); + message.append("盘点计划 ").append(countPlanMainDO.getNumber()).append(" 生成了盘点申请"); + } + } + return message.toString(); + } + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainService.java index d81f28f4..cff75eba 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainService.java @@ -144,4 +144,10 @@ public interface CountPlanMainService { * @param mainDO 盘点申请主 */ void generateRequest(CountPlanMainDO mainDO); + + /** + * 获取所有循环盘点,用于定时生成盘点申请 + * @return 可用循环盘点 + */ + List getCountPlanCycle(); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java index 9f8eed67..ff31b18b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java @@ -30,12 +30,12 @@ import com.win.module.wms.dal.mysql.balance.BalanceMapper; import com.win.module.wms.dal.mysql.countPlan.CountPlanDetailMapper; import com.win.module.wms.dal.mysql.countPlan.CountPlanMainMapper; import com.win.module.wms.dal.mysql.countRequest.CountRequestMainMapper; +import com.win.module.wms.enums.plan.PlanStatusEnum; import com.win.module.wms.enums.plan.PlanStatusState; import com.win.module.wms.service.countRequest.CountRequestMainService; import com.win.module.wms.service.itembasic.ItembasicService; import com.win.module.wms.service.location.LocationService; import com.win.module.wms.util.JobUtils; -import org.quartz.SchedulerException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -279,11 +279,10 @@ public class CountPlanMainServiceImpl implements CountPlanMainService { if(mainDO.getType().equals("MANUAL")) {//指定盘点 this.generateRequest(mainDO); } else if (mainDO.getType().equals("CYCLE")) {//循环盘点 - // 添加 Job 到 Quartz 中 - try { - schedulerManager.addJob(mainDO.getId() + 10000, "countPlanJob", String.valueOf(mainDO.getId()) + "," + mainDO.getTenantId(), mainDO.getCrontab(), 3, 60*10); - } catch (SchedulerException e) { - throw new ServiceException(COUNT_PLAN_CRON_ERROR); + // 计算下一个执行时间 + List nextTimes = CronUtils.getNextTimes(mainDO.getCrontab(), 1); + if(!nextTimes.isEmpty()) { + mainDO.setNextTime(nextTimes.get(0)); } } return countPlanMainMapper.updateById(mainDO); @@ -458,4 +457,14 @@ public class CountPlanMainServiceImpl implements CountPlanMainService { } return balanceMapper.selectList(queryWrapper); } + + @Override + public List getCountPlanCycle() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("`type`", "CYCLE"); + queryWrapper.eq("`status`", PlanStatusEnum.PUBLISHED.getCode()); + queryWrapper.eq("available", "TRUE"); + return countPlanMainMapper.selectList(queryWrapper); + } + }