From 4bcccb320474ec651a603c211afb98f0474258b3 Mon Sep 17 00:00:00 2001
From: pjb <123456>
Date: 星期六, 21 六月 2025 16:12:26 +0800
Subject: [PATCH] sql问题修复

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java |  152 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 116 insertions(+), 36 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 8d16ce2..9572fb5 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
@@ -10,6 +10,10 @@
 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;
@@ -20,10 +24,8 @@
 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;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Component
 public class TaskWaveTimer {
@@ -44,13 +46,76 @@
     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.COMPLETE_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 WAVE_SEED
-     * now: Fetch datasource of task type  on WCS_EXECUTE_OUT_ARRIVED, After completing the task and for setting  the task type equal to WAVE_SEED
+     * 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/15 * * * * ? ")
+    @Scheduled(cron = "0/3 * * * * ? ")
     @Transactional(rollbackFor = Exception.class)
     public void taskWave() {
         InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
@@ -63,9 +128,10 @@
             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_ARRIVED.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 {
@@ -76,10 +142,21 @@
                     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;
@@ -95,7 +172,7 @@
                                 .in(OrderDetl::getOrderId, orderIds)
                                 .eq(OrderDetl::getStockIndex, matUniqueKey)
                                 .eq(OrderDetl::getHostId, hostId));
-                        if(orderDetls.isEmpty()){
+                        if (orderDetls.isEmpty()) {
                             throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
                         }
 
@@ -103,31 +180,36 @@
                         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; }
+                            if (issued <= 0.0D) {
+                                continue;
+                            }
+                            if (anfme <= 0.0D) {
+                                break;
+                            }
 
                             double workQty = issued;
-                            if(anfme - issued < 0){
+                            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("缂撳瓨绔欑┖闂翠笉瀛樺湪");
-                            }
+//
+                            //fixme 鐢熸垚娉㈡鎾鏁版嵁鏃讹紝涓嶈嚜鍔ㄦ坊鍔犵珯鐐圭粦瀹氾紝绔欑偣缁戝畾璋冩暣鑷冲嚭搴撶粦瀹氭挱绉嶅簱浣嶆椂鏇存柊
+//                            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.setSiteId(cacheSite.getId());
+//                            waveSeed.setSiteNo(cacheSite.getSiteNo());
                             waveSeed.setOrderNo(orderDetl.getOrderNo());
                             waveSeed.setOrderId(orderDetl.getOrderId());
                             waveSeed.setOrderDetlId(orderDetl.getId());
                             waveSeed.setWaveId(taskDetl.getWaveId()).setWaveNo(taskDetl.getWaveNo());
                             waveSeed.setTaskDetlId(taskDetl.getId());
-                            //fixme 纭鏄惁浣跨敤璁㈠崟鏄庣粏鏁伴噺
+                            //涓烘弧瓒冲綋鍓嶉渶姹傦紝缁忕‘璁わ紝鏀规垚璁㈠崟鏁伴噺
                             waveSeed.setAnfme(orderDetl.getAnfme());
                             waveSeed.setWorkQty(0D);
                             waveSeed.setMatnr(taskDetl.getMatnr());
@@ -137,30 +219,28 @@
                             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("缂撳瓨绔欐洿鏂板け璐�");
-                            }
+//                            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(TaskStsType.WAVE_SEED.id);
-                    task.setUpdateTime(new Date());
-                    if (!taskService.updateById(task)) {
-                        throw new CoolException("浠诲姟鏇存柊澶辫触");
-                    }
+//                    task.setTaskSts(TaskStsType.GENERATE_WAVE_SEED.id);
+//                    task.setUpdateTime(new Date());
+//                    if (!taskService.updateById(task)) {
+//                        throw new CoolException("浠诲姟鏇存柊澶辫触");
+//                    }
                 }
             }
         } catch (Exception e) {
             e.printStackTrace();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-        }finally {
+        } finally {
             InterceptorIgnoreHelper.clearIgnoreStrategy();
         }
     }

--
Gitblit v1.9.1