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 |  184 ++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 171 insertions(+), 13 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 8c4ccf6..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;
@@ -532,6 +533,12 @@
         return mergePreviewDtos;
     }
 
+    /**
+     * 娉㈡鍑哄簱棰勮
+     *
+     * @param param
+     * @return
+     */
     @Transactional(rollbackFor = Exception.class)
     public List<MergePreviewResultDto> orderOutMergeLocPreview(List<MergePreviewDto> param) {
         if (param == null) {
@@ -567,7 +574,7 @@
             //鏌ヨ骞冲簱涓鍚堟潯浠剁殑搴撳瓨
             List<LocDetl> locs = locDetlService.queryFlatStock(pars.getMatnr(), pars.getBatch(), pars.getFieldParams());
             if (!locs.isEmpty()) {
-                double anfme = pars.getAnfme() - pars.getWorkQty();
+                Double anfme = pars.getAnfme() - pars.getWorkQty();
                 for (LocDetl detl : locs) {
                     Loc loc = locService.getById(detl.getLocId());
                     if (loc == null) {
@@ -582,7 +589,7 @@
                     locDto.setLocNo(detl.getLocNo());
                     locDto.setTypeId(LocAreaTypeSts.LOC_AREA_TYPE_FLAT.id);
                     locDto.setLocDetlId(detl.getId());
-                    locDto.setAnfme(detl.getAnfme());
+                    locDto.setAnfme(detl.getAnfme() - detl.getWorkQty());
                     locDto.setWorkQty(detl.getWorkQty());
                     locDtos.add(locDto);
                     //搴撲綅瀹為檯鍙敤鏁伴噺
@@ -591,8 +598,8 @@
                         continue;
                     }
                     //娉㈡鏁伴噺鍑忓幓搴撲綅鍙敤鏁伴噺鍚庯紝鐩堜綑鏁伴噺
-                    anfme = anfme - surplusQty;
-                    if (anfme > 0) {
+                    anfme = Math.round((anfme - surplusQty) * 10000) / 10000.0;
+                    if (anfme.compareTo(0.0) > 0) {
                         //褰撳墠鍙娇鐢ㄦ暟閲�
                         resultDto.setFetchQty(surplusQty);
                         //浣欎笅闇�姹傛暟閲�
@@ -1104,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) {
@@ -1143,7 +1155,7 @@
                         .eq(WaveDetl::getStockIndex, matUniqueKey)
                         .eq(WaveDetl::getWaveId, wave.getId()));
                 if (waveDetl == null) {
-                    throw new CoolException("waveId:" + wave.getId()  + "鐗╂枡锛�" + taskDetl.getMatnr() + "娉㈡鏁版嵁涓嶅瓨鍦�");
+                    throw new CoolException("waveId:" + wave.getId() + "鐗╂枡锛�" + taskDetl.getMatnr() + "娉㈡鏁版嵁涓嶅瓨鍦�");
                 }
                 waveDetl.setWorkQty(waveDetl.getWorkQty() + taskDetl.getAnfme());
                 waveDetl.setUpdateTime(new Date());
@@ -1156,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()));
@@ -1266,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());
@@ -1482,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("搴撲綅鐘舵�佹洿鏂板け璐�");
+                }
+            }
         }
     }
 
@@ -1494,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()));
@@ -1545,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());
@@ -1633,7 +1788,10 @@
 
         for (LocDetl locDetl : param.getLocDetls()) {
             List<OrderOutMergeParam> orders = new ArrayList<>();
-            LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, locDetl.getLocNo()));
+            LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>()
+                    .eq(LocDetl::getMatId, locDetl.getMatId())
+                    .eq(LocDetl::getBatch, locDetl.getBatch())
+                    .eq(LocDetl::getLocNo, locDetl.getLocNo()));
             if (Objects.isNull(detl)) {
                 continue;
             }

--
Gitblit v1.9.1