From c6c9b7d3baa822765768c110304d27623f946286 Mon Sep 17 00:00:00 2001
From: pjb <123456>
Date: 星期二, 15 七月 2025 14:29:09 +0800
Subject: [PATCH] `1`
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java | 372 ++++++++++++++++++++++++++++++++---------------------
1 files changed, 224 insertions(+), 148 deletions(-)
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
index f6c92a5..53f4303 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
@@ -1,148 +1,224 @@
-package com.zy.asrs.wms.asrs.timer;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy;
-import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
-import com.zy.asrs.framework.exception.CoolException;
-import com.zy.asrs.wms.asrs.entity.*;
-import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType;
-import com.zy.asrs.wms.asrs.service.*;
-import com.zy.asrs.wms.system.entity.Dict;
-import com.zy.asrs.wms.system.service.DictService;
-import com.zy.asrs.wms.utils.OrderUtils;
-import com.zy.asrs.wms.utils.Utils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
-
-@Component
-public class TaskWaveTimer {
-
- @Autowired
- private TaskService taskService;
- @Autowired
- private TaskDetlService taskDetlService;
- @Autowired
- private OrderService orderService;
- @Autowired
- private OrderDetlService orderDetlService;
- @Autowired
- private OrderUtils orderUtils;
- @Autowired
- private CacheSiteService cacheSiteService;
- @Autowired
- private WaveSeedService waveSeedService;
- @Autowired
- private DictService dictService;
-
- @Scheduled(cron = "0/3 * * * * ? ")
- @Transactional
- public void taskWave() {
- InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
- try {
- Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "autoCreateWaveSeed").eq(Dict::getStatus, 1));
- if (dict == null) {
- return;
- }
- String autoCreateWaveSeed = dict.getValue();
- if (!autoCreateWaveSeed.equals("true")) {
- return;
- }
-
- List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, 198));
- for (Task task : taskList) {
- Long hostId = task.getHostId();
-
- List<TaskDetl> taskDetls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, task.getId()).eq(TaskDetl::getHostId, hostId));
- if (taskDetls.isEmpty()) {
- continue;
- }
-
- for (TaskDetl taskDetl : taskDetls) {
- //鍒嗛厤璁㈠崟
- Long waveId = taskDetl.getWaveId();
- List<Order> list = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, waveId));
- if (list.isEmpty()) {
- continue;
- }
-
- ArrayList<Long> orderIds = new ArrayList<>();
- for (Order order : list) {
- orderIds.add(order.getId());
- }
-
- String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField());
- List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>()
- .in(OrderDetl::getOrderId, orderIds)
- .eq(OrderDetl::getStockIndex, matUniqueKey)
- .eq(OrderDetl::getHostId, hostId));
- if(orderDetls.isEmpty()){
- throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
- }
-
- Double anfme = taskDetl.getAnfme();
- for (OrderDetl orderDetl : orderDetls) {
- double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D);
- if (issued <= 0.0D) { continue; }
- if (anfme <= 0.0D) { break; }
-
- double workQty = issued;
- if(anfme - issued < 0){
- workQty = anfme;
- }
- anfme -= workQty;
-
- orderUtils.updateWorkQty(orderDetl.getId(), workQty, true);
-
- CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orderDetl.getOrderId()).eq(CacheSite::getHostId, hostId));
- if (cacheSite == null) {
- throw new CoolException("缂撳瓨绔欑┖闂翠笉瀛樺湪");
- }
-
- WaveSeed waveSeed = new WaveSeed();
- waveSeed.setSiteId(cacheSite.getId());
- waveSeed.setSiteNo(cacheSite.getSiteNo());
- waveSeed.setOrderId(orderDetl.getOrderId());
- waveSeed.setOrderDetlId(orderDetl.getId());
- waveSeed.setTaskDetlId(taskDetl.getId());
- waveSeed.setAnfme(taskDetl.getAnfme());
- waveSeed.setWorkQty(0D);
- waveSeed.setHostId(hostId);
- if (!waveSeedService.save(waveSeed)) {
- throw new CoolException("娉㈡鎾鍒涘缓澶辫触");
- }
-
- cacheSite.setOrderId(orderDetl.getOrderId());
- cacheSite.setOrderNo(orderDetl.getOrderNo());
- cacheSite.setSiteStatus(CacheSiteStatusType.R.id);
- cacheSite.setUpdateTime(new Date());
- if (!cacheSiteService.updateById(cacheSite)) {
- throw new CoolException("缂撳瓨绔欐洿鏂板け璐�");
- }
-
- }
-
- }
-
- task.setTaskSts(199L);
- task.setUpdateTime(new Date());
- if (!taskService.updateById(task)) {
- throw new CoolException("浠诲姟鏇存柊澶辫触");
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- }finally {
- InterceptorIgnoreHelper.clearIgnoreStrategy();
- }
- }
-
-}
+package com.zy.asrs.wms.asrs.timer;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy;
+import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wms.asrs.entity.*;
+import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType;
+import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
+import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
+import com.zy.asrs.wms.asrs.service.*;
+import com.zy.asrs.wms.asrs.service.impl.WaveDetlLogServiceImpl;
+import com.zy.asrs.wms.asrs.service.impl.WaveDetlServiceImpl;
+import com.zy.asrs.wms.asrs.service.impl.WaveLogServiceImpl;
+import com.zy.asrs.wms.asrs.service.impl.WaveServiceImpl;
+import com.zy.asrs.wms.system.entity.Dict;
+import com.zy.asrs.wms.system.service.DictService;
+import com.zy.asrs.wms.utils.OrderUtils;
+import com.zy.asrs.wms.utils.Utils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Component
+public class TaskWaveTimer {
+
+ @Autowired
+ private TaskService taskService;
+ @Autowired
+ private TaskDetlService taskDetlService;
+ @Autowired
+ private OrderService orderService;
+ @Autowired
+ private OrderDetlService orderDetlService;
+ @Autowired
+ private OrderUtils orderUtils;
+ @Autowired
+ private CacheSiteService cacheSiteService;
+ @Autowired
+ private WaveSeedService waveSeedService;
+ @Autowired
+ private DictService dictService;
+ @Autowired
+ private WaveServiceImpl waveService;
+ @Autowired
+ private WaveLogServiceImpl waveLogService;
+ @Autowired
+ private WaveDetlServiceImpl waveDetlService;
+ @Autowired
+ private WaveDetlLogServiceImpl waveDetlLogService;
+
+
+ /**
+ * @author Ryan
+ * @date 2025/6/20
+ * @description: 鏇存柊娉㈡鏄庣粏锛屽姞鍏ュ巻鍙叉。
+ * @version 1.0
+ */
+ @Scheduled(cron = "0/30 * * * * ? ")
+ @Transactional(rollbackFor = Exception.class)
+ public void addWaveHistories() {
+ List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.UPDATED_OUT.id));
+ if (tasks.isEmpty()) {
+ return;
+ }
+ for (Task task : tasks) {
+ List<TaskDetl> detls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, task.getId()));
+ if (detls.isEmpty()) {
+ continue;
+ }
+ Set<Long> waveIds = detls.stream().map(TaskDetl::getWaveId).collect(Collectors.toSet());
+
+ if (waveIds.isEmpty()) {
+ throw new CoolException("娉㈡淇℃伅涓虹┖锛侊紒");
+ }
+ List<Wave> waves = waveService.list(new LambdaQueryWrapper<Wave>().in(Wave::getId, waveIds));
+ for (Wave wave : waves) {
+ WaveLog waveLog = new WaveLog();
+ waveLog.sync(wave);
+ waveLog.setId(null);
+ if (!waveLogService.save(waveLog)) {
+ throw new CoolException("娉㈡杞巻鍙插け璐�");
+ }
+
+ List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId()));
+ for (WaveDetl waveDetl : waveDetls) {
+ WaveDetlLog waveDetlLog = new WaveDetlLog();
+ waveDetlLog.sync(waveDetl);
+ waveDetlLog.setId(null);
+ waveDetlLog.setWaveId(waveLog.getId());
+ if (!waveDetlLogService.save(waveDetlLog)) {
+ throw new CoolException("娉㈡鏄庣粏杞巻鍙插け璐�");
+ }
+ if (!waveDetlService.removeById(waveDetl.getId())) {
+ throw new CoolException("娉㈡鏄庣粏鍒犻櫎澶辫触");
+ }
+ }
+ if (!waveService.removeById(wave.getId())) {
+ throw new CoolException("娉㈡鍒犻櫎澶辫触");
+ }
+ }
+ }
+ }
+
+
+
+ /**
+ * modifty锛�
+ * original : fetch datasource of task type on WCS_EXECUTE_OUT_TASK_DONE
+ * now: Fetch datasource of task type on WCS_EXECUTE_OUT_ARRIVED, After completing the task and for setting the task type equal to GENERATE_WAVE_SEED
+ */
+ @Scheduled(cron = "0/3 * * * * ? ")
+ @Transactional(rollbackFor = Exception.class)
+ public void taskWave() {
+ Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "autoCreateWaveSeed").eq(Dict::getStatus, 1));
+ if (dict == null) {
+ return;
+ }
+ String autoCreateWaveSeed = dict.getValue();
+ if (!autoCreateWaveSeed.equals("true")) {
+ return;
+ }
+ //鏌ヨ鐘舵�佷负RCS浠诲姟瀹屾垚鎵�鏈変换鍔″崟鎹�
+// List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WAVE_SEED.id));
+ List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT.id));
+// HashSet<String> sycMatnrs = new HashSet<>();
+ if (taskList.isEmpty()) {
+// throw new CoolException("娌℃湁鍙挱绉嶄换鍔★紒锛�");
+ } else {
+ for (Task task : taskList) {
+ Long hostId = task.getHostId();
+
+ List<TaskDetl> taskDetls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getTaskId, task.getId()).eq(TaskDetl::getHostId, hostId));
+ if (taskDetls.isEmpty()) {
+ continue;
+ }
+ // 杩囨护宸茬粡鐢熸垚娉㈡鎾鏁版嵁鐨勪换鍔� 璇ヤ换鍔$殑浠诲姟鏄庣粏鍙蜂笉鑳藉湪鎾鏁版嵁琛ㄩ噷闈�
+ long count = waveSeedService.count(new LambdaQueryWrapper<WaveSeed>()
+ .in(WaveSeed::getTaskDetlId, taskDetls.stream()
+ .map(TaskDetl::getId).collect(Collectors.toList()))
+ .eq(WaveSeed::getHostId, hostId));
+ if (count > 0) {
+ continue;
+ }
+
+ for (TaskDetl taskDetl : taskDetls) {
+ //鍒嗛厤璁㈠崟
+ Long waveId = taskDetl.getWaveId();
+// //鍚屼竴涓墿鏂欏彧娣诲姞涓�娆℃挱绉嶄换鍔�
+// if (sycMatnrs.contains(taskDetl.getMatnr())) {
+// continue;
+// }
+// sycMatnrs.add(taskDetl.getMatnr());
+
+ List<Order> list = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, waveId));
+ if (list.isEmpty()) {
+ continue;
+ }
+
+ ArrayList<Long> orderIds = new ArrayList<>();
+ for (Order order : list) {
+ orderIds.add(order.getId());
+ }
+
+ String matUniqueKey = Utils.getMatUniqueKey(taskDetl.getMatnr(), taskDetl.getBatch(), taskDetl.getUniqueField());
+ List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>()
+ .in(OrderDetl::getOrderId, orderIds)
+ .eq(OrderDetl::getStockIndex, matUniqueKey)
+ .eq(OrderDetl::getHostId, hostId));
+ if (orderDetls.isEmpty()) {
+ throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+ }
+
+ Double anfme = taskDetl.getAnfme();
+ for (OrderDetl orderDetl : orderDetls) {
+ //fixme 浣滀笟涓暟閲忚皟鏁存斁鑷筹紝鐢熸垚鍑哄簱浠诲姟鎴愬姛鍚�
+ double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D);
+ if (issued <= 0.0D) {
+ continue;
+ }
+ if (anfme <= 0.0D) {
+ break;
+ }
+
+ double workQty = issued;
+ if (anfme - issued < 0) {
+ workQty = anfme;
+ }
+ anfme -= workQty;
+
+ orderUtils.updateWorkQty(orderDetl.getId(), workQty, true);
+
+
+ WaveSeed waveSeed = new WaveSeed();
+ waveSeed.setOrderNo(orderDetl.getOrderNo());
+ waveSeed.setOrderId(orderDetl.getOrderId());
+ waveSeed.setOrderDetlId(orderDetl.getId());
+ waveSeed.setTaskId(taskDetl.getTaskId());
+ waveSeed.setTaskNo(taskDetl.getTaskNo());
+ waveSeed.setWaveId(taskDetl.getWaveId()).setWaveNo(taskDetl.getWaveNo());
+ waveSeed.setTaskDetlId(taskDetl.getId());
+ //涓烘弧瓒冲綋鍓嶉渶姹傦紝缁忕‘璁わ紝鏀规垚璁㈠崟鏁伴噺
+ waveSeed.setAnfme(taskDetl.getAnfme());
+ waveSeed.setWorkQty(0D);
+ waveSeed.setMatnr(taskDetl.getMatnr());
+ waveSeed.setBatch(taskDetl.getBatch());
+ waveSeed.setFieldParams(JSON.toJSONString(taskDetl.getUniqueField()));
+ waveSeed.setHostId(hostId);
+ if (!waveSeedService.save(waveSeed)) {
+ throw new CoolException("娉㈡鎾鍒涘缓澶辫触");
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
--
Gitblit v1.9.1