From cf55ca39fd7f7d65d5119313dff6315ac63aad8c Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期四, 12 十月 2023 08:29:10 +0800
Subject: [PATCH] 自动补货单

---
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java |  192 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 180 insertions(+), 12 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 e7b35ac..cf82a7a 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -3,6 +3,7 @@
 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;
@@ -13,7 +14,6 @@
 import com.zy.common.model.OrderDto;
 import com.zy.common.model.StartupDto;
 import com.zy.common.model.TaskDto;
-import com.zy.common.model.enums.WorkNoType;
 import com.zy.common.service.AgvCommonService;
 import com.zy.common.web.BaseController;
 import lombok.extern.slf4j.Slf4j;
@@ -25,6 +25,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Created by vincent on 2020/6/11
@@ -60,6 +61,10 @@
     private OrderDetlService orderDetlService;
     @Autowired
     private AdjDetlService adjDetlService;
+    @Autowired
+    private AgvWrkMastLogService agvWrkMastLogService;
+    @Autowired
+    private AgvWrkDetlLogService agvWrkDetlLogService;
 
 
     /*
@@ -79,7 +84,7 @@
                 throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁璐т綅鐘舵�佷笉涓篎.鍦ㄥ簱鐨勭珯鐐癸紝璇烽噸鏂伴�夋嫨");
             }
 
-            List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("zpallet", agvBasDevp.getBarcode()));
+            List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectList(new EntityWrapper<AgvWaitPakin>().eq("supp_code", agvBasDevp.getBarcode()));
 
             //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
             AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor());
@@ -89,7 +94,7 @@
             //鐢熸垚宸ヤ綔妗f槑缁�
             //createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId);
             agvWaitPakinList.forEach(wp -> {
-                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getZpallet(),now,userId,wp.getThreeCode(),wp.getDeadTime());
+                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime());
             });
             //鏇存柊婧愮珯鐐逛俊鎭�
             updateAgvBasDevp(agvBasDevp,"R");
@@ -119,7 +124,7 @@
             long wrkSts = 21L;
             String sourceLocNo = taskDto.getLocNo();
             String targetLocNo = taskDto.getAgvStaNo();
-            String barcode = agvLocDetl.getZpallet();
+            String barcode = agvLocDetl.getSuppCode();
             //鏄庣粏妗f墍闇�鍙傛暟
             String mantr = taskDto.getLocDtos().get(0).getMatnr();
             String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
@@ -209,7 +214,7 @@
             Date now = new Date();
 
             //鐢熸垚宸ヤ綔鍏�
-            AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getZpallet(), now, userId);
+            AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getSuppCode(), now, userId);
             //鐢熸垚宸ヤ綔鏄庣粏妗�
             createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId,agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime());
             //淇敼搴撲綅淇℃伅
@@ -239,7 +244,7 @@
 
         Date now = new Date();
         //鐢熸垚绉诲簱宸ヤ綔妗�
-        AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getZpallet(), now, userId);
+        AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId);
         //鐢熸垚宸ヤ綔鍏氭槑缁�
         createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime());
         //淇敼鐩爣搴撲綅鐘舵��
@@ -435,6 +440,162 @@
         }
     }
 
+    @Override
+    @Transactional
+    public void completeWrkMast(String workNo, Long userId) {
+        AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
+        if (Cools.isEmpty(wrkMast)){
+            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+        }
+        if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 29) {
+            throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
+        }
+        // 鍏ュ簱 + 搴撲綅杞Щ
+        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
+    public void cancelWrkMast(String workNo, Long userId) {
+        AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
+        if (Cools.isEmpty(wrkMast)){
+            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+        }
+
+        if (wrkMast.getWrkSts() == 200) {
+            //灏忚溅绉诲簱浠诲姟锛岀洿鎺ュ垹闄ゅ伐浣滄。
+            agvWrkMastService.deleteById(wrkMast);
+            return;
+        }
+
+        String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
+        String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
+        // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
+        if (wrkMast.getWrkSts() < 9) {
+            locNo = wrkMast.getLocNo();
+            locSts = "O";
+
+            // 搴撲綅杞Щ
+            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 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);
+        }
+        locMast.setLocSts(locSts);
+        locMast.setModiTime(new Date());
+        locMast.setModiUser(userId);
+        boolean locMastRes = agvLocMastService.updateById(locMast);
+        if (!wrkMastRes || !locMastRes) {
+            throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+        }
+    }
+
     /*
     鏇存柊鐩爣搴撲綅淇℃伅
      */
@@ -466,7 +627,7 @@
         wrkDetl.setIoTime(now);
         wrkDetl.setBatch(batch);
         wrkDetl.setAnfme(anfme); // 鏁伴噺
-        wrkDetl.setZpallet(zpallet); // 鎵樼洏鏉$爜
+        wrkDetl.setSuppCode(zpallet); // 鎵樼洏鏉$爜
         wrkDetl.setAppeUser(userId);
         wrkDetl.setAppeTime(now);
         wrkDetl.setModiUser(userId);
@@ -514,8 +675,8 @@
     private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode,  Date now, Long userId){
         AgvWrkMast wrkMast = new AgvWrkMast();
         //鐢熸垚宸ヤ綔鍙�
-        int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
-        wrkMast.setWrkNo(workNo);
+//        int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+//        wrkMast.setWrkNo();
         //宸ヤ綔鐘舵��
         wrkMast.setWrkSts(wrkSts);
         //鍏ュ嚭搴撶被鍨�
@@ -542,9 +703,16 @@
         wrkMast.setAppeTime(now);
         wrkMast.setModiUser(userId);
         wrkMast.setModiTime(now);
-        if (!agvWrkMastService.insert(wrkMast)) {
+
+        if (!agvWrkMastService.insertByIncrease(wrkMast)) {
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
         }
+
+        int i = agvWrkMastService.selectCount(new EntityWrapper<AgvWrkMast>());
+        log.info(i + "");
+
+
+        wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no",sourceLocNo));
 
         return wrkMast;
     }
@@ -556,8 +724,8 @@
     private AgvWrkMast createWrkMast(AgvBasDevp agvBasDevp,AgvLocMast agvLocMast, Date now, Long userId){
         AgvWrkMast wrkMast = new AgvWrkMast();
         //鐢熸垚宸ヤ綔鍙�
-        int workNo = agvCommonService.getWorkNo(0);
-        wrkMast.setWrkNo(workNo);
+        //int workNo = agvCommonService.getWorkNo(0);
+        //wrkMast.setWrkNo(workNo);
         wrkMast.setIoTime(new Date());
         // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID
         wrkMast.setWrkSts(201L);

--
Gitblit v1.9.1