From 05466547c913ad2cd29944e5444dd387ce64b25f Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期四, 18 十二月 2025 16:07:48 +0800
Subject: [PATCH] bug修复

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 170 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 5e26534..d1d8539 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -12,6 +12,9 @@
 import com.zy.asrs.entity.param.FullStoreParam;
 import com.zy.asrs.entity.param.LocDetlAdjustParam;
 import com.zy.asrs.entity.param.StockOutParam;
+import com.zy.asrs.enums.LocAreaType;
+import com.zy.asrs.enums.LocStsType;
+import com.zy.asrs.enums.TaskIOType;
 import com.zy.asrs.mapper.LocMastMapper;
 import com.zy.asrs.entity.result.FindLocNoAttributeVo;
 import com.zy.asrs.service.*;
@@ -25,11 +28,13 @@
 import com.zy.common.service.CommonService;
 import com.zy.common.web.WcsController;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -91,6 +96,18 @@
 
     @Autowired
     private CheckOrderDetlService checkOrderDetlService;
+    @Autowired
+    private LocCacheServiceImpl locCacheService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private TaskDetlService taskDetlService;
+    @Autowired
+    private BasStationService basStationService;
+    @Autowired
+    private BasStationDetlService basStationDetlService;
+    @Autowired
+    private BasAreasService basAreasService;
 
     @Override
     @Transactional
@@ -141,7 +158,7 @@
         // 鐢熸垚宸ヤ綔妗f槑缁�
         List<DetlDto> detlDtos = new ArrayList<>();
         param.getList().forEach(elem -> {
-            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(), elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme());
+            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(), elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme(), elem.getThreeCode());
             if (DetlDto.has(detlDtos, detlDto)) {
                 DetlDto detlDto1 = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(), detlDto.getBrand(), detlDto.getStandby1(), detlDto.getStandby2(), detlDto.getStandby3(), detlDto.getBoxType1(), detlDto.getBoxType2(), detlDto.getBoxType3());
                 assert detlDto1 != null;
@@ -267,7 +284,7 @@
                         }
                         detlDtos.add(new DetlDto(locDetl.getMatnr(), locDetl.getBatch(), locDetl.getBrand(),
                                 locDetl.getStandby1(), locDetl.getStandby2(), locDetl.getStandby3(),
-                                locDetl.getBoxType1(), locDetl.getBoxType2(), locDetl.getBoxType3(), locDetl.getAnfme()));
+                                locDetl.getBoxType1(), locDetl.getBoxType2(), locDetl.getBoxType3(), locDetl.getAnfme(), locDetl.getThreeCode()));
                         locDetl.setOwner(param.getOwnerId());
                         try {
                             locDetlService.update(locDetl, new EntityWrapper<LocDetl>().eq("loc_no", locNo).eq("matnr", locDetl.getMatnr()));
@@ -402,8 +419,21 @@
         // 鍒ゆ柇鏄惁鏄洏鐐瑰崟
         String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
 //        OrderPakout orderPakout = orderPakOutService.selectByNo(orderNo);
-        CheckOrder checkOrder = checkOrderService.selectOne(new EntityWrapper<CheckOrder>().eq("order_no", orderNo));
-        int ioType = checkOrder.getDocType() == 8 ? 107 : (taskDto.isAll() ? 101 : 103);
+
+        int ioType =  (taskDto.isAll() ? 101 : 103);
+        if(ioType == 101){
+            boolean DiffQty = taskDto.getLocDtos().stream().allMatch(locDto ->
+                    locDetlService.selectOne(new EntityWrapper<LocDetl>()
+                            .eq("loc_no", locDto.getLocNo())
+                            .eq("matnr", locDto.getMatnr())
+                            .eq("batch", locDto.getBatch())
+                            .eq("standby1",locDto.getStandby1())
+                    ).getDiffQty().compareTo(BigDecimal.ZERO) == 0
+            );
+            if (!DiffQty){
+                ioType = 103;
+            }
+        }
         StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
@@ -543,6 +573,7 @@
 
             WrkDetl wrkDetl = new WrkDetl();
             wrkDetl.sync(checkOrderDetls.get(0));
+            wrkDetl.setOrderId(checkOrderDetls.get(0).getId());
             wrkDetl.setZpallet(wrkMast.getBarcode());
             wrkDetl.setIoTime(now);
             wrkDetl.setWrkNo(workNo);
@@ -569,6 +600,98 @@
             locMast.setModiUser(userId);
             locMast.setModiTime(now);
             if (!locMastService.updateById(locMast)) {
+                throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
+            }
+        } else {
+            throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void agvStockOut(BasStation staNo, TaskDto taskDto, Long userId) {
+        Date now = new Date();
+        List<LocDto> locDtos = taskDto.getLocDtos();
+        for (LocDto locDto : locDtos) {
+            if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
+                throw new CoolException("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�");
+            }
+        }
+        // 鑾峰彇搴撲綅
+        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", taskDto.getLocNo()));
+        int ioType = (taskDto.isAll() ? 101 : 103);
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+
+        Task task = new Task();
+        task.setWrkNo(workNo)
+                .setIoTime(new Date())
+                .setWrkSts(11L) // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                .setIoType(ioType) // 鍏ュ嚭搴撶姸鎬�
+                .setTaskType("agv")
+                .setIoPri(10D)
+                .setFullPlt("Y") // 婊℃澘锛歒
+                .setPicking("N") // 鎷f枡
+                .setExitMk("N")// 閫�鍑�
+                .setStaNo(staNo.getDevNo())
+                .setSourceLocNo(locCache.getLocNo())
+                .setEmptyMk("N")// 绌烘澘
+                .setBarcode(locCache.getBarcode())// 鎵樼洏鐮�
+                .setLinkMis("N")
+                .setAppeUser(userId)
+                .setAppeTime(new Date())
+                .setModiUser(userId)
+                .setModiTime(new Date());
+        if (!taskService.insert(task)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 鐢熸垚宸ヤ綔妗f槑缁�
+        for (LocDto locDto : taskDto.getLocDtos()) {
+            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
+                continue;
+            }
+//            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+            OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getBrand()
+                    , locDto.getStandby1(), locDto.getStandby2(), locDto.getStandby3(), locDto.getBoxType1(), locDto.getBoxType2(), locDto.getBoxType3());
+//            if (orderDetl == null) {
+////                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
+//                orderDetl = OrderInAndOutUtil.selectItem(Boolean.FALSE, locDto.getOrderNo(), locDto.getMatnr(), null);
+//
+//            }
+
+            TaskDetl wrkDetl = new TaskDetl();
+            BeanUtils.copyProperties(orderDetl, wrkDetl);
+            wrkDetl.setWrkNo(workNo)
+                    .setId(null)
+                    .setIoTime(new Date())
+                    .setOrderNo(locDto.getOrderNo())
+                    .setAnfme(locDto.getAnfme())
+                    .setZpallet(locCache.getBarcode())
+                    .setBatch(locDto.getBatch())
+                    .setAppeUser(userId)
+                    .setAppeTime(new Date())
+                    .setModiUser(userId);
+            if (!taskDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+            }
+//            // 淇敼璁㈠崟鏄庣粏
+//            if (!orderDetlService.increaseWorkQty(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
+//                throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+//            }
+//            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
+            OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
+                    orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
+                    orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3()
+                    , locDto.getAnfme());
+            OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
+        }
+        // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+
+        if (locCache.getLocSts().equals("F")) {
+            locCache.setLocSts(ioType == 101 ? "R" : "P");
+            locCache.setModiUser(userId);
+            locCache.setModiTime(now);
+            if (!locCacheService.updateById(locCache)) {
                 throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
             }
         } else {
@@ -1339,9 +1462,13 @@
     @Override
     @Transactional
     public void pickWrkMast(String workNo, Long userId) {
-        WrkMast wrkMast = wrkMastService.selectById(workNo);
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
         if (Cools.isEmpty(wrkMast)) {
             throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
+        }
+        BasAreas basAreas = basAreasService.selectOne(new EntityWrapper<BasAreas>().eq("whs_type_id", LocAreaType.LOC_AREA_TYPE_CRN.type));
+        if (Objects.isNull(basAreas)) {
+            throw new CoolException("鏁版嵁閿欒锛屽簱鍖轰笉瀛樺湪锛侊紒");
         }
         // 鍏ュ嚭搴撶被鍨嬪垽鏂�
         if (wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) {
@@ -1351,6 +1478,7 @@
         if (wrkMast.getWrkSts() < 11 || wrkMast.getWrkSts() == 15) {
             throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曡繘琛屾搷浣�");
         }
+
         // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
 //        if (!wrkDetlLogService.save(wrkMast.getWrkNo())) {
 //            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
@@ -1384,13 +1512,49 @@
             throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
         }
         // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
-        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getLocNo()));
+        if (Cools.isEmpty(locMast)) {
+            throw new CoolException("搴撲綅涓嶅瓨鍦�:" + wrkMast.getLocNo());
+        }
         locMast.setLocSts("Q");
+        locMast.setAreaId(basAreas.getId());
+        locMast.setAreaName(basAreas.getName());
+        locMast.setBarcode(locMast.getBarcode());
         locMast.setModiTime(now);
         locMast.setModiUser(userId);
         if (!locMastService.updateById(locMast)) {
             throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
         }
+
+
+        // .淇敼骞舵墭鍏ュ簱鏄庣粏鎵樼爜
+        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
+                        .eq("area_id", locMast.getAreaId())
+                .eq("loc_no", locMast.getLocNo()));
+        if (!Objects.isNull(locDetls) && !locDetls.isEmpty()) {
+            locDetls.forEach(locDetl -> {
+                locDetl.setZpallet(locMast.getBarcode());
+                locDetl.setBarcode(locMast.getBarcode());
+                if (!locDetlService.updateById(locDetl)) {
+                    throw new CoolException("搴撳瓨鏄庣粏淇敼澶辫触锛侊紒");
+                }
+            });
+        }
+
+        // .淇敼浠诲姟妗f槑缁嗘墭鐩樼爜
+        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+        if (!Objects.isNull(wrkDetls) && !wrkDetls.isEmpty()) {
+            for (WrkDetl wrkDetl : wrkDetls) {
+                wrkDetl.setZpallet(wrkMast.getBarcode());
+                wrkDetl.setBarcode(wrkMast.getBarcode());
+                if (!wrkDetlService.update(wrkDetl, new EntityWrapper<WrkDetl>()
+                                .eq("matnr", wrkDetl.getMatnr())
+                                .eq("standby1", wrkDetl.getStandby1())
+                        .eq("wrk_no", wrkMast.getWrkNo()))) {
+                    throw new CoolException("浠诲姟妗f槑缁嗕慨鏀瑰け璐ワ紒锛�");
+                }
+            }
+        }
     }
 
     @Override

--
Gitblit v1.9.1