From c2b88a03f3d0d5ebe92949e64d17ee4d0ac3f6b7 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 09 九月 2025 15:14:00 +0800
Subject: [PATCH] 发货清空缓存站点

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java |  163 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 156 insertions(+), 7 deletions(-)

diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
index 26e9398..9f23308 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.mysql.cj.util.StringUtils;
 import com.zy.asrs.wms.asrs.entity.param.StockOutParam;
 import com.zy.asrs.framework.exception.CoolException;
@@ -1110,6 +1111,11 @@
                 throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
             }
 
+            wave.setSite(operationPort.getFlag());
+            if (!waveService.updateById(wave)) {
+                throw new CoolException("娉㈡绔欏彛鐘舵�佹洿鏂板け璐ワ紒锛�");
+            }
+
             for (OrderOutMergeDto merge : list) {
                 LocDetl locDetl = locDetlService.getById(merge.getLocDetlId());
                 if (locDetl == null) {
@@ -1162,6 +1168,7 @@
             if (orders.isEmpty()) {
                 throw new CoolException("褰撳墠娉㈡璁㈠崟涓嶅瓨鍦紒锛�");
             }
+
 
 //            List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>()
 //                    .eq(CacheSite::getSiteStatus, CacheSiteStatusType.O.id).eq(CacheSite::getChannel, task.getTargetSite()));
@@ -1272,6 +1279,12 @@
                 if (!locDetlService.updateById(locDetl)) {
                     throw new CoolException("搴撳瓨鍔犻攣澶辫触锛侊紒");
                 }
+
+                orderDetlService.update(new LambdaUpdateWrapper<OrderDetl>()
+                                .set(OrderDetl::getWareType, 2)
+                        .eq(OrderDetl::getMatId, mat.getId())
+                        .eq(StringUtils.isNullOrEmpty(outOder.getBatch()), OrderDetl::getBatch, outOder.getBatch())
+                        .in(OrderDetl::getOrderId, outOder.getOrderIds()));
             });
 
             curLoc.setLocStsId(LocStsType.R.val());
@@ -1488,7 +1501,133 @@
             outFlatStock(param);
         } else {
             //鐢熸垚浠诲姟妗�
-            generateTask(param);
+            generateTask(param, null);
+        }
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/9/9
+     * @description: 鐩樼偣鍑哄簱
+     * @version 1.0
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void outCheckStock(CheckOutParam checkParams) {
+        //鐢熸垚浠诲姟妗�
+        generateCheckTask(checkParams, "check");
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/9/9
+     * @description: 鐢熸垚鐩樼偣鍑哄簱浠诲姟
+     * @version 1.0
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void generateCheckTask(CheckOutParam outParam, String type) {
+        Loc loc = locService.getById(outParam.getId());
+        if (Objects.isNull(loc)) {
+            throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
+        }
+        List<LocDetl> detls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocId, loc.getId()));
+        for (LocDetl detl : detls) {
+            List<OrderOutMergeDto> orders = new ArrayList<>();
+            if (Objects.isNull(detl)) {
+                continue;
+            }
+            OrderOutMergeDto outMergeParam = new OrderOutMergeDto();
+            outMergeParam.setAnfme(detl.getAnfme());
+            outMergeParam.setLocNo(detl.getLocNo());
+            outMergeParam.setLocDetlId(detl.getId());
+            outMergeParam.setLocId(detl.getLocId());
+            outMergeParam.setMatnr(detl.getMatnr());
+            outMergeParam.setBatch(detl.getBatch());
+            orders.add(outMergeParam);
+
+            Map<Long, List<OrderOutMergeDto>> listMap = orders.stream().collect(Collectors.groupingBy(OrderOutMergeDto::getLocId));
+            //鏍规嵁搴撲綅ID鍒嗙粍
+            //鐢熸垚鎷h揣鍗曟槑缁�
+            for (Map.Entry<Long, List<OrderOutMergeDto>> entry : listMap.entrySet()) {
+                List<OrderOutMergeDto> list = entry.getValue();
+                OrderOutMergeDto param = list.stream().findFirst().get();
+                List<CacheSite> sites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>()
+                        .isNotNull(CacheSite::getOrderId));
+                if (!sites.isEmpty()) {
+                    Map<String, Long> longMap = sites.stream().collect(Collectors.groupingBy(CacheSite::getChannel, Collectors.counting()));
+                    Map.Entry<String, Long> entry1 = longMap.entrySet().stream().min(Map.Entry.comparingByValue()).get();
+                    param.setPortSite(entry1.getKey());
+                } else {
+                    CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().last("limit 1"));
+                    param.setPortSite(cacheSite.getChannel());
+                }
+                if (!loc.getLocStsId().equals(LocStsType.F.val())) {
+                    throw new CoolException(loc.getLocNo() + "搴撲綅鐘舵�佸紓甯�");
+                }
+
+                OperationPort operationPort = operationPortService
+                        .getOne(new LambdaQueryWrapper<OperationPort>()
+                                .eq(OperationPort::getFlag, param.getPortSite()));
+                if (Objects.isNull(operationPort)) {
+                    throw new CoolException("浣滀笟鍙d笉瀛樺湪");
+                }
+
+                Task task = new Task();
+                task.setTaskSts(TaskStsType.GENERATE_OUT.id);
+                // 107 鐩樼偣鍑哄簱
+                long taskType = 107L;
+                task.setTaskType(taskType);
+                task.setTaskNo(workService.generateTaskNo(taskType));
+                task.setIoPri(workService.generateIoPri(taskType));
+                task.setOriginLoc(loc.getLocNo());
+                task.setTargetSite(operationPort.getFlag());
+                task.setBarcode(loc.getBarcode());
+                boolean res = taskService.save(task);
+                if (!res) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+
+                for (OrderOutMergeDto merge : list) {
+                    LocDetl locDetl = locDetlService.getById(merge.getLocDetlId());
+                    if (locDetl == null) {
+                        throw new CoolException("鏄庣粏涓嶅瓨鍦�");
+                    }
+
+                    TaskDetl taskDetl = new TaskDetl();
+                    taskDetl.sync(locDetl);
+                    taskDetl.setId(null);
+                    taskDetl.setTaskId(task.getId());
+                    taskDetl.setTaskNo(task.getTaskNo());
+                    taskDetl.setAnfme(merge.getAnfme());
+                    taskDetl.setStock(locDetl.getAnfme());
+                    taskDetl.setOrderId(null);
+                    taskDetl.setOrderNo(null);
+                    if (!taskDetlService.save(taskDetl)) {
+                        throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                    }
+
+                    List<LocDetlField> locDetlFields = locDetlFieldService
+                            .list(new LambdaQueryWrapper<LocDetlField>()
+                                    .eq(LocDetlField::getDetlId, locDetl.getId()));
+                    for (LocDetlField locDetlField : locDetlFields) {
+                        TaskDetlField taskDetlField = new TaskDetlField();
+                        taskDetlField.sync(locDetlField);
+                        taskDetlField.setId(null);
+                        taskDetlField.setDetlId(taskDetl.getId());
+                        boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
+                        if (!taskDetlFieldSave) {
+                            throw new CoolException("鏄庣粏鎵╁睍鐢熸垚澶辫触");
+                        }
+                    }
+                }
+
+                //搴撲綅F => R
+                loc.setLocStsId(LocStsType.R.val());
+                loc.setUpdateTime(new Date());
+                boolean locUpdate = locService.updateById(loc);
+                if (!locUpdate) {
+                    throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐�");
+                }
+            }
         }
     }
 
@@ -1500,7 +1639,7 @@
      * @description: 鎵嬪姩鍑哄簱鐢熸垚浠诲姟
      */
     @Transactional(rollbackFor = Exception.class)
-    public void generateTask(StockOutParam outParam) {
+    public void generateTask(StockOutParam outParam, String type) {
         for (LocDetl outLocDetl : outParam.getLocDetls()) {
             List<OrderOutMergeDto> orders = new ArrayList<>();
             LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getId, outLocDetl.getId()));
@@ -1551,14 +1690,24 @@
                 if (Objects.isNull(operationPort)) {
                     throw new CoolException("浣滀笟鍙d笉瀛樺湪");
                 }
-                //101 鍏ㄦ嫋鍑哄簱   103 鎷h揣鍑哄簱
-                long taskType = all ? 101L : 103L;
+
 
                 Task task = new Task();
-                task.setTaskNo(workService.generateTaskNo(taskType));
                 task.setTaskSts(TaskStsType.GENERATE_OUT.id);
-                task.setTaskType(taskType);
-                task.setIoPri(workService.generateIoPri(taskType));
+                if (Objects.isNull(type)) {
+                    //101 鍏ㄦ嫋鍑哄簱   103 鎷h揣鍑哄簱
+                    long taskType = all ? 101L : 103L;
+                    task.setTaskType(taskType);
+                    task.setTaskNo(workService.generateTaskNo(taskType));
+                    task.setIoPri(workService.generateIoPri(taskType));
+                } else {
+                    // 107 鐩樼偣鍑哄簱
+                    long taskType = 107L;
+                    task.setTaskType(taskType);
+                    task.setTaskNo(workService.generateTaskNo(taskType));
+                    task.setIoPri(workService.generateIoPri(taskType));
+                }
+
                 task.setOriginLoc(loc.getLocNo());
                 task.setTargetSite(operationPort.getFlag());
                 task.setBarcode(loc.getBarcode());

--
Gitblit v1.9.1