From cd92182d01a20e85f60f6a5a595506ee8ed31ffc Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期四, 02 十一月 2023 12:05:15 +0800
Subject: [PATCH] 库存统计明细修复

---
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java |  223 ++++++++++++++++++-------------------------------------
 1 files changed, 74 insertions(+), 149 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index cf82a7a..1faa1fc 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -3,19 +3,20 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
-import com.core.common.DateUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.param.LocDetlAdjustParam;
 import com.zy.asrs.entity.param.StockOutParam;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.model.LocDto;
 import com.zy.common.model.OrderDto;
 import com.zy.common.model.StartupDto;
 import com.zy.common.model.TaskDto;
 import com.zy.common.service.AgvCommonService;
 import com.zy.common.web.BaseController;
+import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -24,8 +25,6 @@
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
 
 /**
  * Created by vincent on 2020/6/11
@@ -71,7 +70,8 @@
     鍏ュ簱
      */
     @Transactional
-    public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId) {
+    @Synchronized
+    public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId, boolean isConveyor) {
 
         Date now = new Date();
 
@@ -90,7 +90,9 @@
             AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor());
             //鐢熸垚宸ヤ綔妗�
             //AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId);
-            AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId);
+            AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId, isConveyor);
+            //鏍囪鏄惁涓鸿緭閫佺嚎鍏ュ簱
+            wrkMast.setMk(isConveyor ? "Y" : "N");
             //鐢熸垚宸ヤ綔妗f槑缁�
             //createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId);
             agvWaitPakinList.forEach(wp -> {
@@ -136,7 +138,7 @@
             //鍒ゆ柇鏄惁鍏ㄦ澘鍑哄簱
             int ioType = isPakOut(sourceLocNo,anfme) ?  101 : 103;
             //鐢熸垚宸ヤ綔妗�
-            AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,barcode,now,userId);
+            AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,barcode,now,userId,false);
             //鐢熸垚宸ヤ綔妗f槑缁�
             createWrkDetlReWrite(mantr,wrkMast.getWrkNo(),orderNo,batch,anfme,barcode,now,userId,csocode,isoseq);
             //淇敼璁㈠崟淇℃伅
@@ -177,10 +179,10 @@
             //鎷f枡鍏ュ簱
             if(ioType == 53){
                 //淇敼宸ヤ綔鍏氭槑缁�
-                agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme());
-                agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo()));
+                //agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme());
+                //agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo()));
                 //淇敼搴撳瓨淇℃伅
-                agvLocDetl.setAnfme(agvWrkDetl.getAnfme());
+                agvLocDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme());
                 agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo()));
             }
             //淇敼搴撲綅淇℃伅
@@ -214,7 +216,7 @@
             Date now = new Date();
 
             //鐢熸垚宸ヤ綔鍏�
-            AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getSuppCode(), now, userId);
+            AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getSuppCode(), now, userId,false);
             //鐢熸垚宸ヤ綔鏄庣粏妗�
             createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId,agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime());
             //淇敼搴撲綅淇℃伅
@@ -244,7 +246,7 @@
 
         Date now = new Date();
         //鐢熸垚绉诲簱宸ヤ綔妗�
-        AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId);
+        AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId,false);
         //鐢熸垚宸ヤ綔鍏氭槑缁�
         createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime());
         //淇敼鐩爣搴撲綅鐘舵��
@@ -267,7 +269,7 @@
         // 妫�绱㈠簱浣�
         AgvLocMast locMast = agvCommonService.getLocNo(null, agvBasDevp.getFloor());
         // 鐢熸垚宸ヤ綔妗� 10.绌烘澘鍏ュ簱
-        createWrkMast(10,201L,agvBasDevp.getDevNo(),locMast.getLocNo(),null,now,userId);
+        createWrkMast(10,201L,agvBasDevp.getDevNo(),locMast.getLocNo(),null,now,userId,false);
         //鏇存柊婧愮珯鐐圭姸鎬�
         updateAgvBasDevp(agvBasDevp,"R");
         //鏇存柊鐩爣搴撲綅鐘舵��
@@ -298,7 +300,7 @@
                     .eq("station_code", param.getStationCode())
                     .eq("loc_sts", "O"));
             //鐢熸垚宸ヤ綔妗�
-            createWrkMast(110,21L,locNo,agvBasDevp.getDevNo(),null,now,userId);
+            createWrkMast(110,21L,locNo,agvBasDevp.getDevNo(),null,now,userId,false);
             //淇敼婧愬簱浣嶇姸鎬�
             updateAgvLocMast(agvLocMast,"R");
             //淇敼鐩爣宸ヤ綔浣嶇姸鎬�
@@ -350,8 +352,8 @@
                         adjDetl.setAppeTime(now);
                         adjDetl.setAppeUser(userId);
 
-                        UUID uuid = UUID.randomUUID();
-                        adjDetl.setOrderNo(uuid.toString());
+                        adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
+
                         adjDetl.setCsocode(locDetl.getThreeCode());
                         adjDetl.setIsoseq(locDetl.getDeadTime());
 
@@ -380,6 +382,7 @@
             adjDetl.setModiUser(userId);
             adjDetl.setAppeTime(now);
             adjDetl.setAppeUser(userId);
+            adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
 
             adjDetlService.save(adjDetl, userId);
         }
@@ -399,6 +402,7 @@
             locDetl.setAppeTime(now);
             locDetl.setThreeCode(adjust.getThreeCode());
             locDetl.setDeadTime(adjust.getDeadTime());
+            locDetl.setSuppCode(adjust.getSuppCode());
             if (!agvLocDetlService.insert(locDetl)) {
                 throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�");
             }
@@ -414,8 +418,7 @@
             adjDetl.setAppeTime(now);
             adjDetl.setAppeUser(userId);
 
-            UUID uuid = UUID.randomUUID();
-            adjDetl.setOrderNo(uuid.toString());
+            adjDetl.setOrderNo(Utils.generateAdjustOrderNo());
             adjDetl.setCsocode(locDetl.getThreeCode());
             adjDetl.setIsoseq(locDetl.getDeadTime());
 
@@ -447,26 +450,22 @@
         if (Cools.isEmpty(wrkMast)){
             throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
         }
-        if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 29) {
-            throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
+
+        if(wrkMast.getWrkSts() > 202){
+            //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚
+            agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205);
+
+            //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱 || 107.鐩樼偣鍑哄簱
+            if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107){
+                //淇敼鍑哄簱绔欑偣鐘舵��
+                agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode());
+            }
+            //鍑哄簱浠诲姟 110.绌烘澘鍑哄簱
+            if(wrkMast.getIoType() == 110){
+                agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode());
+            }
         }
-        // 鍏ュ簱 + 搴撲綅杞Щ
-        if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
-            wrkMast.setWrkSts(9L);
-            // 鍑哄簱
-        } else if (wrkMast.getWrkSts() > 20) {
-            wrkMast.setWrkSts(29L);
-        }
-        Date now = new Date();
-        wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
-        wrkMast.setCrnEndTime(now);
-        wrkMast.setModiTime(now);
-        wrkMast.setModiUser(userId);
-        // 瀹屾垚鎿嶄綔浜哄憳璁板綍
-        wrkMast.setManuType("鎵嬪姩瀹屾垚");
-        if (!agvWrkMastService.updateById(wrkMast)) {
-            throw new CoolException("淇敼宸ヤ綔妗eけ璐�");
-        }
+
     }
 
     @Transactional
@@ -475,125 +474,51 @@
         if (Cools.isEmpty(wrkMast)){
             throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
         }
-
-        if (wrkMast.getWrkSts() == 200) {
-            //灏忚溅绉诲簱浠诲姟锛岀洿鎺ュ垹闄ゅ伐浣滄。
-            agvWrkMastService.deleteById(wrkMast);
-            return;
+        //鎷f枡鍏ュ簱 鐩樼偣鍏ュ簱涓嶅彲鍙栨秷
+        if(wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){
+            throw new CoolException("褰撳墠浠诲姟涓嶅彲鍙栨秷");
         }
 
-        String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
-        String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
-        // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
-        if (wrkMast.getWrkSts() < 9) {
-            locNo = wrkMast.getLocNo();
-            locSts = "O";
+        //AGV鏈哄櫒浜烘湭鍙栬揣鍓嶅彇娑�
+        if(wrkMast.getWrkSts() < 203){
+            //鍏ュ簱鍙栨秷
+            if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10){
+                //婧愮珯鐐�
+                String devNo = wrkMast.getSourceLocNo();
+                //鐩爣搴撲綅
+                String locNo = wrkMast.getLocNo();
+                agvLocMastService.updateLocStsByLocNo(locNo,"O");
+                agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode());
 
-            // 搴撲綅杞Щ
-            if (wrkMast.getIoType() == 11) {
-                // 搴撲綅杞Щ锛氭簮搴撲綅
-                AgvLocMast locMast = agvLocMastService.selectById(wrkMast.getSourceLocNo());
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:"+ wrkMast.getSourceLocNo());
-                }
-                locMast.setLocSts("F");
-                locMast.setModiTime(new Date());
-                locMast.setModiUser(userId);
-                agvLocMastService.updateById(locMast);
+                //鍑哄簱鍙栨秷
+            }else {
+                //婧愬簱浣�
+                String locNo = wrkMast.getSourceLocNo();
+                //鐩爣绔欑偣
+                String devNo = wrkMast.getLocNo();
+                agvLocMastService.updateLocStsByLocNo(locNo,"F");
+                agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O","");
             }
-            // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
-        } else if (wrkMast.getWrkSts() > 20) {
-            locNo = wrkMast.getSourceLocNo();
-            // 鍑哄簱 ===>> F.鍦ㄥ簱
-            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
-                locSts = "F";
-                // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
-            } else if (wrkMast.getIoType() == 110) {
-                locSts = "D";
-                // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉�
-            } else if (wrkMast.getIoType() == 11) {
-                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F";
-                // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
-                AgvLocMast locMast = agvLocMastService.selectById(wrkMast.getLocNo());
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:"+ wrkMast.getSourceLocNo());
-                }
-                locMast.setLocSts("O");
-                locMast.setModiTime(new Date());
-                locMast.setModiUser(userId);
-                agvLocMastService.updateById(locMast);
-            }
-        } else {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
-        }
-        // 璁㈠崟鍏宠仈
-        List<AgvWrkDetl> wrkDetls = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
-        for (AgvWrkDetl wrkDetl : wrkDetls) {
-            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
-                if (!BaseController.isJSON(wrkDetl.getOrderNo())) {
-                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
-                        throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
-                    }
-                } else {
-                    // 璁㈠崟鍚堝苟鍑哄簱
 
-                    //瀹為檯鍙栨秷鐨勫嚭搴撴暟閲�
-                    Double wrkDetlAnfme = wrkDetl.getAnfme();
-                    //璁㈠崟瀹為檯鍑哄簱鏁伴噺
-                    Double orderAnfme;
-
-                    List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class);
-                    for (OrderDto orderDto : orderDtoList) {
-
-                        if(wrkDetlAnfme > orderDto.getAnfme()){
-                            orderAnfme = orderDto.getAnfme();
-                            wrkDetlAnfme -= orderAnfme;
-                        }else {
-                            orderAnfme = wrkDetlAnfme;
-                        }
-
-                        if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderAnfme)) {
-                            throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
-                        }
-                    }
-                }
-            }
-        }
-        // 鍙栨秷鎿嶄綔浜哄憳璁板綍
-        wrkMast.setManuType("鎵嬪姩鍙栨秷");
-        wrkMast.setModiUser(userId);
-        wrkMast.setModiTime(new Date());
-        if (!agvWrkMastService.updateById(wrkMast)) {
-            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐�");
-        }
-        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-        if (!agvWrkMastLogService.save(wrkMast)) {
-            throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
-        }
-        // 鍒犻櫎宸ヤ綔涓绘。
-        boolean wrkMastRes = agvWrkMastService.deleteById(wrkMast);
-
-        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
-            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
-            if (!agvWrkDetlLogService.save(wrkMast.getWrkNo())) {
-//                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
-            }
-            // 鍒犻櫎宸ヤ綔妗f槑缁�
-            boolean wrkDetlRes = agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", workNo));
         }
 
-        // 淇敼搴撲綅鐘舵��
-        AgvLocMast locMast = agvLocMastService.selectById(locNo);
-        if (Cools.isEmpty(locMast)) {
-            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:"+ locNo);
+        //璁㈠崟鍥炴粴
+        AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo()).get(0);
+        if(!Cools.isEmpty(agvWrkDetl.getOrderNo())){
+            OrderDetl orderDetl = orderDetlService.selectByOrderNoAndMatnr(agvWrkDetl.getOrderNo(),agvWrkDetl.getMatnr(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime());
+            orderDetl.setQty(orderDetl.getQty() - agvWrkDetl.getAnfme());
+            orderDetlService.updateById(orderDetl);
         }
-        locMast.setLocSts(locSts);
-        locMast.setModiTime(new Date());
-        locMast.setModiUser(userId);
-        boolean locMastRes = agvLocMastService.updateById(locMast);
-        if (!wrkMastRes || !locMastRes) {
-            throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+
+        //淇濆瓨宸ヤ綔妗d互鍙婃槑缁�
+        agvWrkMastLogService.save(wrkMast);
+        agvWrkDetlLogService.save(wrkMast.getWrkNo());
+
+        //鍒犻櫎宸ヤ綔妗d互鍙婃槑缁�
+        if(!agvWrkMastService.deleteByWrkNo(wrkMast.getWrkNo()) || !agvWrkDetlService.deleteByWrkNo(wrkMast.getWrkNo())){
+            throw new CoolException("鍒犻櫎澶辫触锛岃鑱旂郴绠$悊鍛�");
         }
+
     }
 
     /*
@@ -672,7 +597,7 @@
     /*
     鐢熸垚宸ヤ綔妗�
      */
-    private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode,  Date now, Long userId){
+    private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode,  Date now, Long userId, boolean isConveyor){
         AgvWrkMast wrkMast = new AgvWrkMast();
         //鐢熸垚宸ヤ綔鍙�
 //        int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
@@ -690,6 +615,8 @@
         wrkMast.setLocNo(locNo);
         //瀹瑰櫒缂栫爜
         wrkMast.setBarcode(barcode);
+        //鏍囪鏄惁涓鸿緭閫佺嚎鍏ュ簱
+        wrkMast.setMk(isConveyor ? "Y" : "N");
         // 婊℃澘锛歒
         //wrkMast.setFullPlt("Y");
         // 鎷f枡
@@ -807,8 +734,6 @@
                 orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
             }
         }
-
-
     }
 
 }

--
Gitblit v1.9.1