Browse Source

循环盘点生成申请。

master
刘忱 2 years ago
parent
commit
3f2974e061
  1. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/countPlan/CountPlanMainDO.java
  2. 47
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/job/CountPlanCycleJob.java
  3. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainService.java
  4. 21
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/countPlan/CountPlanMainServiceImpl.java

6
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 String crontab;
/**
* 下一执行时间
*/
private LocalDateTime nextTime;
/** /**
* 维度 * 维度
* *
@ -131,6 +135,6 @@ public class CountPlanMainDO extends BaseDO {
/** /**
* 租户编号 * 租户编号
*/ */
private Integer tenantId; private Long tenantId;
} }

47
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<CountPlanMainDO> 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<LocalDateTime> 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();
}
}

6
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 盘点申请主 * @param mainDO 盘点申请主
*/ */
void generateRequest(CountPlanMainDO mainDO); void generateRequest(CountPlanMainDO mainDO);
/**
* 获取所有循环盘点用于定时生成盘点申请
* @return 可用循环盘点
*/
List<CountPlanMainDO> getCountPlanCycle();
} }

21
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.CountPlanDetailMapper;
import com.win.module.wms.dal.mysql.countPlan.CountPlanMainMapper; import com.win.module.wms.dal.mysql.countPlan.CountPlanMainMapper;
import com.win.module.wms.dal.mysql.countRequest.CountRequestMainMapper; 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.enums.plan.PlanStatusState;
import com.win.module.wms.service.countRequest.CountRequestMainService; import com.win.module.wms.service.countRequest.CountRequestMainService;
import com.win.module.wms.service.itembasic.ItembasicService; import com.win.module.wms.service.itembasic.ItembasicService;
import com.win.module.wms.service.location.LocationService; import com.win.module.wms.service.location.LocationService;
import com.win.module.wms.util.JobUtils; import com.win.module.wms.util.JobUtils;
import org.quartz.SchedulerException;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -279,11 +279,10 @@ public class CountPlanMainServiceImpl implements CountPlanMainService {
if(mainDO.getType().equals("MANUAL")) {//指定盘点 if(mainDO.getType().equals("MANUAL")) {//指定盘点
this.generateRequest(mainDO); this.generateRequest(mainDO);
} else if (mainDO.getType().equals("CYCLE")) {//循环盘点 } else if (mainDO.getType().equals("CYCLE")) {//循环盘点
// 添加 Job 到 Quartz 中 // 计算下一个执行时间
try { List<LocalDateTime> nextTimes = CronUtils.getNextTimes(mainDO.getCrontab(), 1);
schedulerManager.addJob(mainDO.getId() + 10000, "countPlanJob", String.valueOf(mainDO.getId()) + "," + mainDO.getTenantId(), mainDO.getCrontab(), 3, 60*10); if(!nextTimes.isEmpty()) {
} catch (SchedulerException e) { mainDO.setNextTime(nextTimes.get(0));
throw new ServiceException(COUNT_PLAN_CRON_ERROR);
} }
} }
return countPlanMainMapper.updateById(mainDO); return countPlanMainMapper.updateById(mainDO);
@ -458,4 +457,14 @@ public class CountPlanMainServiceImpl implements CountPlanMainService {
} }
return balanceMapper.selectList(queryWrapper); return balanceMapper.selectList(queryWrapper);
} }
@Override
public List<CountPlanMainDO> getCountPlanCycle() {
QueryWrapper<CountPlanMainDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("`type`", "CYCLE");
queryWrapper.eq("`status`", PlanStatusEnum.PUBLISHED.getCode());
queryWrapper.eq("available", "TRUE");
return countPlanMainMapper.selectList(queryWrapper);
}
} }

Loading…
Cancel
Save