From 8359572be2164aec32219fafd5e72f4035067dff Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期二, 01 八月 2023 08:52:26 +0800
Subject: [PATCH] agv 订单出库功能

---
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java |  216 ++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 187 insertions(+), 29 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 9079d7c..8560782 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -1,12 +1,18 @@
 package com.zy.asrs.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
+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.model.enums.WorkNoType;
 import com.zy.common.service.AgvCommonService;
+import com.zy.common.web.BaseController;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -34,6 +40,8 @@
     @Autowired
     private AgvLocMastService agvLockMastService;
     @Autowired
+    private AgvLocDetlService agvLocDetlService;
+    @Autowired
     private AgvCommonService agvCommonService;
     @Autowired
     private AgvWrkMastService agvWrkMastService;
@@ -41,8 +49,16 @@
     private AgvWrkDetlService agvWrkDetlService;
     @Autowired
     private MatService matService;
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
 
-    @Override
+
+    /*
+    鍏ュ簱
+     */
+    @Transactional
     public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId) {
 
         Date now = new Date();
@@ -61,55 +77,107 @@
             //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
             AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor());
             //鐢熸垚宸ヤ綔妗�
-            AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId);
+            //AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId);
+            AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId);
             //鐢熸垚宸ヤ綔妗f槑缁�
-            createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId);
+            //createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId);
+            agvWaitPakinList.forEach(wp -> {
+                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getZpallet(),now,userId);
+            });
             //鏇存柊婧愮珯鐐逛俊鎭�
-            updateAgvBasDevp(agvBasDevp);
+            updateAgvBasDevp(agvBasDevp,"R");
             //鏇存柊鐩爣搴撲綅鐘舵��
-            updateAgvLocMast(agvLocMast);
+            updateAgvLocMast(agvLocMast,"S");
 
         });
 
+        //TODO
         return null;
+    }
+
+    /*
+    璁㈠崟鍑哄簱
+     */
+    @Transactional
+    public void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId) {
+        Date now = new Date();
+
+        agvTaskDtos.forEach(taskDto -> {
+
+            AgvLocMast agvLocMast = agvLockMastService.selectById(taskDto.getLocNo());
+
+            //宸ヤ綔妗f墍闇�鍙傛暟
+            double anfme = taskDto.getLocDtos().get(0).getAnfme();
+            long wrkSts = 21L;
+            String sourceLocNo = taskDto.getLocNo();
+            String targetLocNo = taskDto.getAgvStaNo();
+            String barcode = agvLocMast.getBarcode();
+            //鏄庣粏妗f墍闇�鍙傛暟
+            String mantr = taskDto.getLocDtos().get(0).getMatnr();
+            String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
+            String batch = taskDto.getLocDtos().get(0).getBatch();
+
+            //鍒ゆ柇鏄惁鍏ㄦ澘鍑哄簱
+            int ioType = isPakOut(sourceLocNo,anfme) ?  101 : 103;
+            //鐢熸垚宸ヤ綔妗�
+            AgvWrkMast wrkMast = createWrkMast(ioType,wrkSts,sourceLocNo,targetLocNo,barcode,now,userId);
+            //鐢熸垚宸ヤ綔妗f槑缁�
+            createWrkDetlReWrite(mantr,wrkMast.getWrkNo(),orderNo,batch,anfme,barcode,now,userId);
+            //淇敼璁㈠崟淇℃伅
+            modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
+            //鏇存柊婧愮珯鐐逛俊鎭�
+            updateAgvLocMast(agvLockMastService.selectById(sourceLocNo),"R");
+            //鏇存柊鐩爣绔欑偣鐘舵��
+            updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S");
+
+        });
     }
 
     /*
     鏇存柊鐩爣搴撲綅淇℃伅
      */
-    private void updateAgvLocMast(AgvLocMast locMast){
-        locMast.setLocSts("S");
+    private void updateAgvLocMast(AgvLocMast locMast, String locSts){
+        locMast.setLocSts(locSts);
         agvLockMastService.updateById(locMast);
     }
 
     /*
     鏇存柊婧愮珯鐐逛俊鎭�
      */
-    private void updateAgvBasDevp(AgvBasDevp agvBasDevp){
-        agvBasDevp.setLocSts("R");
+    private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){
+        agvBasDevp.setLocSts(locSts);
         agvBasDevpService.updateById(agvBasDevp);
     }
 
     /*
     鐢熸垚宸ヤ綔妗f槑缁�
      */
-  /*  private void createWrkDetl(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){
-        List<DetlDto> detlDtos = new ArrayList<>();
-        agvWaitPakinList.forEach(agvWaitPakin -> {
-            DetlDto detlDto = new DetlDto(agvWaitPakin.getMatnr(), agvWaitPakin.getBatch(), agvWaitPakin.getAnfme());
-            if (DetlDto.has(detlDtos, detlDto)) {
-                DetlDto detlDto1 = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
-                assert detlDto1 != null;
-                detlDto1.setAnfme(detlDto1.getAnfme() + detlDto.getAnfme());
-            } else {
-                detlDtos.add(detlDto);
-            }
-        });
-        agvWrkDetlService.createWorkDetail(wrkMast.getWrkNo(), detlDtos, wrkMast.getBarcode(), userId);
-    }*/
+    private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId){
+        Mat mat = matService.selectByMatnr(matnr);
+        if (Cools.isEmpty(mat)) {
+            throw new CoolException(matnr + "鍟嗗搧缁存姢澶辫触");
+        }
+        AgvWrkDetl wrkDetl = new AgvWrkDetl();
+        wrkDetl.sync(mat);
+        wrkDetl.setWrkNo(wrkNo);
+        wrkDetl.setOrderNo(orderNo);
+        wrkDetl.setIoTime(now);
+        wrkDetl.setBatch(batch);
+        wrkDetl.setAnfme(anfme); // 鏁伴噺
+        wrkDetl.setZpallet(zpallet); // 鎵樼洏鏉$爜
+        wrkDetl.setAppeUser(userId);
+        wrkDetl.setAppeTime(now);
+        wrkDetl.setModiUser(userId);
+        wrkDetl.setModiTime(now);
+        if (!agvWrkDetlService.insert(wrkDetl)) {
+            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+        }
+    }
+
     /*
     鐢熸垚宸ヤ綔妗f槑缁�
      */
+    @Deprecated
     private void createWrkDetlReWrite(List<AgvWaitPakin> agvWaitPakinList, AgvWrkMast wrkMast, Long userId){
         Date now = new Date();
         agvWaitPakinList.stream().forEach(agvWaitPakin -> {
@@ -138,23 +206,71 @@
     /*
     鐢熸垚宸ヤ綔妗�
      */
+    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);
+        //宸ヤ綔鐘舵��
+        wrkMast.setWrkSts(wrkSts);
+        //鍏ュ嚭搴撶被鍨�
+        wrkMast.setIoType(ioType);
+        wrkMast.setIoTime(now);
+        //浼樺厛绾�
+        wrkMast.setIoPri(300.0);
+        //婧愮珯鐐�
+        wrkMast.setSourceLocNo(sourceLocNo);
+        //鐩爣绔欑偣
+        wrkMast.setLocNo(locNo);
+        //瀹瑰櫒缂栫爜
+        wrkMast.setBarcode(barcode);
+        // 婊℃澘锛歒
+        //wrkMast.setFullPlt("Y");
+        // 鎷f枡
+        //wrkMast.setPicking("N");
+        // 閫�鍑�
+        //wrkMast.setExitMk("N");
+        // 绌烘澘
+        //wrkMast.setEmptyMk("N");
+        //wrkMast.setLinkMis("N");
+        wrkMast.setAppeUser(userId);
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(now);
+        if (!agvWrkMastService.insert(wrkMast)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        return wrkMast;
+    }
+
+    /*
+    鐢熸垚宸ヤ綔妗�
+     */
+    @Deprecated
     private AgvWrkMast createWrkMast(AgvBasDevp agvBasDevp,AgvLocMast agvLocMast, Date now, Long userId){
         AgvWrkMast wrkMast = new AgvWrkMast();
         //鐢熸垚宸ヤ綔鍙�
         int workNo = agvCommonService.getWorkNo(0);
         wrkMast.setWrkNo(workNo);
         wrkMast.setIoTime(new Date());
-        wrkMast.setWrkSts(201L); // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID
-        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        // 宸ヤ綔鐘舵�侊細201.鐢熸垚鍏ュ簱浠诲姟ID
+        wrkMast.setWrkSts(201L);
+        // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setIoType(1);
         //鐢熸垚浼樺厛绾�
         wrkMast.setIoPri(300.0);
         wrkMast.setSourceLocNo(agvBasDevp.getDevNo());
         wrkMast.setLocNo(agvLocMast.getLocNo());
         wrkMast.setBarcode(agvBasDevp.getBarcode());
-        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-        wrkMast.setPicking("N"); // 鎷f枡
-        wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setEmptyMk("N"); // 绌烘澘
+        // 婊℃澘锛歒
+        wrkMast.setFullPlt("Y");
+        // 鎷f枡
+        wrkMast.setPicking("N");
+        // 閫�鍑�
+        wrkMast.setExitMk("N");
+        // 绌烘澘
+        wrkMast.setEmptyMk("N");
         wrkMast.setLinkMis("N");
         wrkMast.setAppeUser(userId);
         wrkMast.setAppeTime(now);
@@ -164,6 +280,48 @@
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
         }
         return wrkMast;
+    }
+
+    private boolean isPakOut(String locNo, double anfme){
+        AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo));
+        if(agvLocDetl.getAnfme() > anfme){
+            return false;
+        }
+        return true;
+    }
+
+    /*
+    AGV鐢熸垚鍑哄簱宸ヤ綔妗e悗淇敼璁㈠崟淇℃伅
+    TODO 涓庡洓椤瑰簱鐢熸垚鍑哄簱宸ヤ綔妗e悗淇敼璁㈠崟淇℃伅鏁村悎鍒颁竴璧�
+     */
+    private void modifyOrderDetl(LocDto locDto, Long userId){
+
+        if (!BaseController.isJSON(locDto.getOrderNo())) {
+            //闈炲悎骞跺嚭搴�
+            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+            if (orderDetl == null) {
+                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
+            }
+            if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), locDto.getAnfme())) {
+                throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+            }
+            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
+        }else {
+            //鍚堝苟鍑哄簱
+            List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
+            for (OrderDto orderDto : orderDtoList) {
+                OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
+                if (orderDetl == null) {
+                    orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null);
+                }
+                if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) {
+                    throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+                }
+                orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
+            }
+        }
+
 
     }
+
 }

--
Gitblit v1.9.1