From 3cb931b3799846e1b8ef708da6c447bb9a9e0a0e Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期一, 15 十二月 2025 11:17:41 +0800
Subject: [PATCH] 并板出库功能优化

---
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java |   51 +++++++++++++++++++++++++++++----------------------
 1 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index c39967e..d309d42 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -6,8 +6,6 @@
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.*;
 import com.core.exception.CoolException;
-import com.zy.api.enums.MatLocType;
-import com.zy.api.enums.MatType;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.*;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
@@ -29,7 +27,6 @@
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.MesCombParam;
 import com.zy.common.model.StartupDto;
-import com.zy.common.model.enums.IoWorkType;
 import com.zy.common.model.enums.WorkNoType;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.HttpHandler;
@@ -1655,7 +1652,7 @@
             throw new CoolException("缁勬墭鐗╂枡绫诲瀷涓嶄竴鑷达紝鍙湁鐩稿悓鐨勭墿鏂欏垎绫绘墠鍙互缁勬墭锛侊紒");
         }
         // 杩樺彲浠ユ斁鍏ュ灏戠鐗╂枡
-        Integer suplus = container.getMixMax();
+        Double suplus = container.getMixMax();
         Date now = new Date();
         for (DetlDto detlDto : detlDtos) {
             Mat mat = matService.selectByMatnr(detlDto.getMatnr());
@@ -1723,6 +1720,19 @@
             if (v1.compareTo(stationDetl.getAnfme()) >= 0) {
                 if (!basStationDetlService.deleteById(stationDetl)) {
                     throw new CoolException("鍘熷鏁版嵁绉婚櫎澶辫触锛�");
+                }
+            }
+
+            List<BasStationDetl> stas = basStationDetlService.selectList(new EntityWrapper<BasStationDetl>()
+                    .eq("dev_no", stationDetl.getDevNo()));
+            if (Objects.isNull(stas) || stas.isEmpty()) {
+                BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", stationDetl.getDevNo()));
+                if (Objects.isNull(station)) {
+                    throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+                }
+                station.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
+                if (!basStationService.updateById(station)) {
+                    throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�");
                 }
             }
         }
@@ -2065,13 +2075,14 @@
         BasDevp basDevp = devps.stream().findFirst().get();
         List<LocMast> locMasts = new ArrayList<>();
         Map<String, List<LocDetl>> listMap = locDetls.stream().collect(Collectors.groupingBy(LocDetl::getMatnr));
-        AtomicReference<Double> totalOut = new AtomicReference<>(
-                locDetls.stream().mapToDouble(LocDetl::getAnfme).sum());
+        //鑾峰彇鏌ュ簱瀛樻�绘暟閲�
+        AtomicReference<Double> totalOut = new AtomicReference<>(0.0);
         listMap.forEach((matnr, detls) -> {
-            // 鏍规嵁supId(渚涘簲鍟�)鍒嗙被锛屽緱鍒板嚭搴撴�绘暟
             Map<String, List<LocDetl>> supIds = detls.stream().collect(Collectors.groupingBy(LocDetl::getStandby1));
             supIds.forEach((supId, sups) -> {
+                // 鏍规嵁supId(渚涘簲鍟�)鍒嗙被锛屽緱鍒伴渶瑕佸瓨鏀剧殑鎬荤┖搴撳瓨鏁伴噺
                 Double sum = sups.stream().mapToDouble(LocDetl::getAnfme).sum();
+                AtomicReference<Double> itemed = new AtomicReference<>(0.0);
                 // 鑾峰彇褰撳墠渚涘簲鍟�+ 鐗╂枡鍦ㄥ簱
                 List<LocDetl> detlList = locDetlService.selectList(new EntityWrapper<LocDetl>()
                         .eq("matnr", matnr)
@@ -2094,17 +2105,20 @@
                         Set<String> sets = adetls.stream().map(LocDetl::getMatnr).collect(Collectors.toSet());
                         // 鍒ゆ柇瀹瑰櫒鏄惁杩樺彲娣锋斁,鍙婂綋鍓嶇墿鏂欏彲鏀惧灏�
                         if (container.getMixMax() > sets.size()) {
-                            int suplus = container.getMixMax() - sets.size();
+                            //浣欎笅鍙贩鏀剧绫�
+                            long suplus = Math.round((container.getMixMax() - sets.size()) * 10000) / 10000;
                             Mat mats = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", matnr));
                             if (Objects.isNull(mats)) {
                                 throw new CoolException("鐗╂枡涓嶅瓨鍦紒锛�");
                             }
-                            Double v = mats.getUpQty() * suplus;
-                            // 灏忎簬闆�
-                            if (sum.compareTo(v) <= 0) {
+                            //浣欎笅鏈�澶у彲鏀炬暟閲�
+                            Double v = Math.round((mats.getUpQty() * suplus) * 10000) / 10000.0;
+                            // 鍏ュ簱鏁伴噺灏忎簬闆朵笖鍏ュ簱鏁伴噺鍑忓幓宸插嚭鏁伴噺澶т簬闆讹紙锛�
+                            if (sum.compareTo(v) <= 0 && sum.compareTo(itemed.get()) > 0) {
+                                itemed.set(Math.round((itemed.get() + v) * 10000) / 10000.0);
                                 // 鍙斁涓�
                                 locMasts.add(locMast);
-                                totalOut.set(Math.round((totalOut.get() - sum) * 10000) / 10000.0);
+                                totalOut.set(Math.round((totalOut.get() + itemed.get()) * 10000) / 10000.0);
                             }
                         }
                     });
@@ -2114,10 +2128,9 @@
 
         // 鍒ゆ柇鏍规嵁鍒嗘嫞鍑哄簱鍚�,杩橀渶瑕佸嚭澶氬皯鎵樼洏鎴栨枡绠�;濡傛灉浣欐枡澶т簬0, 鍑烘柊鎵樼洏鎴栨枡绠�
         if (totalOut.get().compareTo(0.0) > 0) {
-            // Set<String> matnrs =
-            // locDetls.stream().map(LocDetl::getMatnr).collect(Collectors.toSet());
-            // List<Mat> mats = matService.selectList(new EntityWrapper<Mat>().in("matnr",
-            // matnrs));
+            generateTask(locMasts, TaskIOType.MERGE_OUT.type, basDevp, userId);
+            //TODO 缁嗗寲鍖哄垎锛屽綋鍓嶅嚭搴撴墭鐩樻槸婊炴弧瓒虫嫞璐ф暟閲�
+        } else {
             LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                     // todo 鏍规嵁鐗╂枡绉嶇被,鍖哄垎搴撳尯绫诲瀷
                     .eq("loc_sts", LocStsType.LOC_STS_TYPE_D.type)
@@ -2126,12 +2139,6 @@
             locMasts.add(locMast);
             // 绌烘澘鍑哄簱
             generateTask(locMasts, TaskIOType.EMPTY_OUT.type, basDevp, userId);
-        } else {
-            // 鐢熸垚鍫嗗灈鏈哄嚭搴撲换鍔�
-            generateTask(locMasts, TaskIOType.MERGE_OUT.type, basDevp, userId);
-            // if (!locMasts.isEmpty()) {
-            //
-            // }
         }
     }
 

--
Gitblit v1.9.1