From 080fdceed464c56f43633e85daeaf929d40496af Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期三, 18 十月 2023 13:16:07 +0800
Subject: [PATCH] 连接ERP 获取ERP库存信息

---
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java |  635 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 600 insertions(+), 35 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 4d06510..1ed3d71 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -1,19 +1,29 @@
 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.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.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.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
+import java.util.UUID;
 
 /**
  * Created by vincent on 2020/6/11
@@ -32,7 +42,9 @@
     @Autowired
     private AgvBasDevpService agvBasDevpService;
     @Autowired
-    private AgvLocMastService agvLockMastService;
+    private AgvLocMastService agvLocMastService;
+    @Autowired
+    private AgvLocDetlService agvLocDetlService;
     @Autowired
     private AgvCommonService agvCommonService;
     @Autowired
@@ -41,75 +53,517 @@
     private AgvWrkDetlService agvWrkDetlService;
     @Autowired
     private MatService matService;
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private AdjDetlService adjDetlService;
+    @Autowired
+    private AgvWrkMastLogService agvWrkMastLogService;
+    @Autowired
+    private AgvWrkDetlLogService agvWrkDetlLogService;
 
-    @Override
+
+    /*
+    鍏ュ簱
+     */
+    @Transactional
     public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId) {
 
         Date now = new Date();
 
         agvBasDevpList.forEach(agvBasDevp -> {
             if(Cools.isEmpty(agvBasDevp.getBarcode())){
-                throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁浣嶇粦瀹氭墭鐩樼殑绔欑偣锛岃閲嶆柊閫夋嫨");
+                throw new CoolException("閫変腑鐨勭珯鐐逛腑鍚湁鏈粦瀹氭墭鐩樼殑绔欑偣锛岃閲嶆柊閫夋嫨");
             }
 
             if(!"F".equals(agvBasDevp.getLocSts())){
                 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());
             //鐢熸垚宸ヤ綔妗�
-            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.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime());
+            });
             //鏇存柊婧愮珯鐐逛俊鎭�
-            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 = agvLocMastService.selectById(taskDto.getLocNo());
+            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo()));
+
+            //宸ヤ綔妗f墍闇�鍙傛暟
+            double anfme = taskDto.getLocDtos().get(0).getAnfme();
+            long wrkSts = 21L;
+            String sourceLocNo = taskDto.getLocNo();
+            String targetLocNo = taskDto.getAgvStaNo();
+            String barcode = agvLocDetl.getSuppCode();
+            //鏄庣粏妗f墍闇�鍙傛暟
+            String mantr = taskDto.getLocDtos().get(0).getMatnr();
+            String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
+            String batch = taskDto.getLocDtos().get(0).getBatch();
+
+            String csocode = agvLocDetl.getThreeCode();
+            String isoseq = agvLocDetl.getDeadTime();
+
+            //鍒ゆ柇鏄惁鍏ㄦ澘鍑哄簱
+            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,csocode,isoseq);
+            //淇敼璁㈠崟淇℃伅
+            modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
+            //鏇存柊婧愮珯鐐逛俊鎭�
+            String locSts = ioType == 101 ? "R" : "P";
+            updateAgvLocMast(agvLocMastService.selectById(sourceLocNo),locSts);
+            //鏇存柊鐩爣绔欑偣鐘舵��
+            //locSts = ioType == 101 ? "S" : "Q";
+            updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S");
+
+        });
+    }
+
+    //鎷f枡鍏ュ簱
+    @Transactional
+    public void pickIn(List<AgvWrkMast> agvWrkMastList){
+        Date now = new Date();
+        agvWrkMastList.forEach(agvWrkMast -> {
+            //淇敼宸ヤ綔鍏�
+            agvWrkMast.setWrkSts(201L);
+
+            //鏍规嵁鍑哄簱绫诲瀷 璁剧疆鍏ュ簱绫诲瀷 53鎷f枡鍏ュ簱 57鐩樼偣鍏ュ簱
+            int ioType = agvWrkMast.getIoType() == 103 ? 53 : 57;
+
+            agvWrkMast.setIoType(ioType);
+            String locNo = agvWrkMast.getLocNo();
+            agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo());
+            agvWrkMast.setSourceLocNo(locNo);
+            agvWrkMast.setIoTime(now);
+            agvWrkMastService.updateById(agvWrkMast);
+
+            AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo()));
+            AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo());
+            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocMast.getLocNo()));
+            AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getSourceLocNo());
+
+            //鎷f枡鍏ュ簱
+            if(ioType == 53){
+                //淇敼宸ヤ綔鍏氭槑缁�
+                agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme());
+                agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo()));
+                //淇敼搴撳瓨淇℃伅
+                agvLocDetl.setAnfme(agvWrkDetl.getAnfme());
+                agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo()));
+            }
+            //淇敼搴撲綅淇℃伅
+            updateAgvLocMast(agvLocMast,"Q");
+            //淇敼绔欑偣淇℃伅
+            updateAgvBasDevp(agvBasDevp,"R");
+
+        });
+    }
+
+    /*
+    鐩樼偣鍑哄簱
+     */
+    @Transactional
+    public void locCheckOut(StockOutParam param, Long userId) {
+        String station = param.getStation();
+        List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
+                .eq("station_code", station)
+                .eq("loc_sts","O"));
+
+        if(param.getLocDetls().size() > agvBasDevpList.size()){
+            throw new CoolException("褰撳墠绔欑偣鍙敤缂撳瓨璐ф灦鏁伴噺涓�" + agvBasDevpList.size() + ",灏戜簬闇�瑕佺洏鐐瑰嚭搴撳簱浣嶆暟閲忥紝璇烽噸鏂伴�夋嫨鐩樼偣搴撲綅");
+        }
+
+        param.getLocDetls().forEach(locDetl -> {
+            AgvLocMast agvLocMast = agvLocMastService.selectById(locDetl.getLocNo());
+            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locDetl.getLocNo()));
+            AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
+                    .eq("station_code", station)
+                    .eq("loc_sts","O"));
+            Date now = new Date();
+
+            //鐢熸垚宸ヤ綔鍏�
+            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());
+            //淇敼搴撲綅淇℃伅
+            updateAgvLocMast(agvLocMast,"P");
+            //淇敼绔欑偣淇℃伅
+            updateAgvBasDevp(agvBasDevp,"S");
+
+        });
+
+    }
+
+    /*
+    搴撲綅绉昏浆
+     */
+    @Transactional
+    public void locMove(String sourceLocNo, String targetLocNo, Long userId) {
+        AgvLocMast sourceLocMast = agvLocMastService.selectById(sourceLocNo);
+        AgvLocMast targetLocMast = agvLocMastService.selectById(targetLocNo);
+        AgvLocDetl sourceLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocMast.getLocNo()));
+
+        if(!sourceLocMast.getLocSts().equals("F")){
+            throw new CoolException(sourceLocMast.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLocMast.getLocSts$());
+        }
+        if(!targetLocMast.getLocSts().equals("O")){
+            throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+targetLocMast.getLocSts$());
+        }
+
+        Date now = new Date();
+        //鐢熸垚绉诲簱宸ヤ綔妗�
+        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());
+        //淇敼鐩爣搴撲綅鐘舵��
+        updateAgvLocMast(targetLocMast,"S");
+        //淇敼鍘熷簱浣嶇姸鎬�
+        updateAgvLocMast(sourceLocMast,"R");
+    }
+
+    /*
+    绌烘澘鍏ュ簱
+     */
+    @Transactional
+    public String emptyPlateIn(String sourceStaion, Long userId) {
+        Date now = new Date();
+        // 婧愮珯鐐圭姸鎬佹娴�
+        AgvBasDevp agvBasDevp = agvBasDevpService.selectById(sourceStaion);
+        if(!agvBasDevp.getLocSts().equals("O")){
+            throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts()+",鏃犳硶杩涜绌烘澘鍏ュ簱");
+        }
+        // 妫�绱㈠簱浣�
+        AgvLocMast locMast = agvCommonService.getLocNo(null, agvBasDevp.getFloor());
+        // 鐢熸垚宸ヤ綔妗� 10.绌烘澘鍏ュ簱
+        createWrkMast(10,201L,agvBasDevp.getDevNo(),locMast.getLocNo(),null,now,userId);
+        //鏇存柊婧愮珯鐐圭姸鎬�
+        updateAgvBasDevp(agvBasDevp,"R");
+        //鏇存柊鐩爣搴撲綅鐘舵��
+        updateAgvLocMast(locMast,"S");
+        return locMast.getLocNo();
+    }
+
+    /*
+    绌烘澘鍑哄簱
+     */
+    @Transactional
+    public void emptyPlateOut(EmptyPlateOutParam param, Long userId) {
+        Date now = new Date();
+        //鍒ゆ柇鎵�閫夊伐浣滅珯绌轰綑宸ヤ綔浣嶆暟閲忔槸鍚︽弧瓒冲嚭搴撴暟閲�
+        List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
+                .eq("station_code", param.getStationCode())
+                .eq("loc_sts","O"));
+        if(agvBasDevpList.size() < param.getLocNos().size()){
+            throw new CoolException("褰撳墠宸ヤ綔绔欏彲鍑哄簱宸ヤ綔浣嶆暟閲忎负"+ agvBasDevpList.size() + "锛屽皬浜庤鍑哄簱鐨勫簱浣嶆暟閲忥紝璇烽噸鏂伴�夋嫨鍑哄簱搴撲綅");
+        }
+        param.getLocNos().forEach(locNo -> {
+            AgvLocMast agvLocMast = agvLocMastService.selectById(locNo);
+            if(!agvLocMast.getLocSts().equals("D")){
+                throw new CoolException(agvLocMast.getLocNo() + "搴撲綅鐘舵�佸凡缁忎笉涓篋.绌烘《/绌烘爤鏉匡紝璇烽噸鏂伴�夋嫨搴撲綅杩涜绌烘澘鍑哄簱");
+            }
+            //妫�绱㈠伐浣滀綅
+            AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
+                    .eq("station_code", param.getStationCode())
+                    .eq("loc_sts", "O"));
+            //鐢熸垚宸ヤ綔妗�
+            createWrkMast(110,21L,locNo,agvBasDevp.getDevNo(),null,now,userId);
+            //淇敼婧愬簱浣嶇姸鎬�
+            updateAgvLocMast(agvLocMast,"R");
+            //淇敼鐩爣宸ヤ綔浣嶇姸鎬�
+            updateAgvBasDevp(agvBasDevp,"S");
+        });
+    }
+
+    @Transactional
+    public void adjustLocDetl(LocDetlAdjustParam param, Long userId) {
+        param.integrate();
+        AgvLocMast locMast = agvLocMastService.selectById(param.getLocNo());
+        if (Cools.isEmpty(locMast)) {
+            throw new CoolException("搴撲綅涓嶅瓨鍦�");
+        }
+        if (!(locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O"))) {
+            throw new CoolException("褰撳墠搴撲綅涓嶅彲璋冩暣锛佸簱浣嶇姸鎬侊細" + locMast.getLocSts$());
+        }
+
+        Date now = new Date();
+        List<AgvLocDetl> locDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", param.getLocNo()));
+
+        List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList();
+
+        // 淇敼鏁伴噺
+        Iterator<AgvLocDetl> iterator = locDetls.iterator();
+        while (iterator.hasNext()) {
+            AgvLocDetl locDetl = iterator.next();
+
+            Iterator<LocDetlAdjustParam.LocDetlAdjust> iterator1 = list.iterator();
+            while (iterator1.hasNext()) {
+                LocDetlAdjustParam.LocDetlAdjust adjust = iterator1.next();
+                if (adjust.getCount() == 0) { continue; }
+                if (locDetl.getMatnr().equals(adjust.getMatnr()) && Cools.eq(locDetl.getBatch(), adjust.getBatch())) {
+                    if (!locDetl.getAnfme().equals(adjust.getCount())) {
+                        // todo 鐩樼偣璁板綍
+                        // 淇敼搴撳瓨
+                        if (!agvLocDetlService.updateAnfme(adjust.getCount(), locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
+                            throw new CoolException(locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佷慨鏀规暟閲忓け璐�");
+                        }
+                        // 淇濆瓨璋冩暣璁板綍
+                        AdjDetl adjDetl = new AdjDetl();
+                        adjDetl.setLocNo(locDetl.getLocNo());
+                        adjDetl.setMatnr(locDetl.getMatnr());
+                        adjDetl.setBatch(locDetl.getBatch());
+                        adjDetl.setOriQty(locDetl.getAnfme());
+                        adjDetl.setAdjQty(adjust.getCount());
+                        adjDetl.setModiTime(now);
+                        adjDetl.setModiUser(userId);
+                        adjDetl.setAppeTime(now);
+                        adjDetl.setAppeUser(userId);
+
+                        UUID uuid = UUID.randomUUID();
+                        adjDetl.setOrderNo(uuid.toString());
+                        adjDetl.setCsocode(locDetl.getThreeCode());
+                        adjDetl.setIsoseq(locDetl.getDeadTime());
+
+                        adjDetlService.save(adjDetl, userId);
+                    }
+                    iterator.remove();
+                    iterator1.remove();
+                }
+            }
+        }
+
+        // 鍒犻櫎搴撳瓨
+        for (AgvLocDetl locDetl : locDetls) {
+            // todo 鐩樼偣璁板綍
+            if (!agvLocDetlService.updateAnfme(-1.0D, locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getBatch())) {
+                throw new CoolException("鍒犻櫎" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�");
+            }
+            // 淇濆瓨璋冩暣璁板綍
+            AdjDetl adjDetl = new AdjDetl();
+            adjDetl.setLocNo(locDetl.getLocNo());
+            adjDetl.setMatnr(locDetl.getMatnr());
+            adjDetl.setBatch(locDetl.getBatch());
+            adjDetl.setOriQty(locDetl.getAnfme());
+            adjDetl.setAdjQty(0.0D);
+            adjDetl.setModiTime(now);
+            adjDetl.setModiUser(userId);
+            adjDetl.setAppeTime(now);
+            adjDetl.setAppeUser(userId);
+
+            adjDetlService.save(adjDetl, userId);
+        }
+
+        // 娣诲姞搴撳瓨
+        for (LocDetlAdjustParam.LocDetlAdjust adjust : list) {
+            if (adjust.getCount() == 0.0D) { continue; }
+            Mat mat = matService.selectByMatnr(adjust.getMatnr());
+            AgvLocDetl locDetl = new AgvLocDetl();
+            locDetl.sync(mat);
+            locDetl.setBatch(adjust.getBatch());
+            locDetl.setLocNo(locMast.getLocNo());
+            locDetl.setAnfme(adjust.getCount()); // 鏁伴噺
+            locDetl.setModiUser(userId); // 鎿嶄綔浜哄憳淇℃伅
+            locDetl.setModiTime(now);
+            locDetl.setAppeUser(userId);
+            locDetl.setAppeTime(now);
+            locDetl.setThreeCode(adjust.getThreeCode());
+            locDetl.setDeadTime(adjust.getDeadTime());
+            if (!agvLocDetlService.insert(locDetl)) {
+                throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�");
+            }
+            // 淇濆瓨璋冩暣璁板綍
+            AdjDetl adjDetl = new AdjDetl();
+            adjDetl.setLocNo(locMast.getLocNo());
+            adjDetl.setMatnr(adjust.getMatnr());
+            adjDetl.setBatch(adjust.getBatch());
+            adjDetl.setOriQty(0.0D);
+            adjDetl.setAdjQty(adjust.getCount());
+            adjDetl.setModiTime(now);
+            adjDetl.setModiUser(userId);
+            adjDetl.setAppeTime(now);
+            adjDetl.setAppeUser(userId);
+
+            UUID uuid = UUID.randomUUID();
+            adjDetl.setOrderNo(uuid.toString());
+            adjDetl.setCsocode(locDetl.getThreeCode());
+            adjDetl.setIsoseq(locDetl.getDeadTime());
+
+            adjDetlService.save(adjDetl, userId);
+        }
+        // 淇敼搴撲綅鐘舵��
+        int count = agvLocDetlService.selectCount(new EntityWrapper<AgvLocDetl>().eq("loc_no", locMast.getLocNo()));
+        if (locMast.getLocSts().equals("F")) {
+            if (count == 0) {
+                locMast.setLocSts("D");
+            }
+        }
+        if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O")) {
+            if (count > 0) {
+                locMast.setLocSts("F");
+            }
+        }
+        locMast.setModiUser(userId);
+        locMast.setModiTime(new Date());
+        if (!agvLocMastService.updateById(locMast)) {
+            throw new CoolException("鏇存柊搴撲綅鐘舵�佸け璐�");
+        }
+    }
+
+    @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() > 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());
+            }
+        }
+
+    }
+
+    @Transactional
+    public void cancelWrkMast(String workNo, Long userId) {
+        AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
+        if (Cools.isEmpty(wrkMast)){
+            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+        }
+        //鎷f枡鍏ュ簱 鐩樼偣鍏ュ簱涓嶅彲鍙栨秷
+        if(wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){
+            throw new CoolException("褰撳墠浠诲姟涓嶅彲鍙栨秷");
+        }
+
+        //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());
+
+                //鍑哄簱鍙栨秷
+            }else {
+                //婧愬簱浣�
+                String locNo = wrkMast.getSourceLocNo();
+                //鐩爣绔欑偣
+                String devNo = wrkMast.getLocNo();
+                agvLocMastService.updateLocStsByLocNo(locNo,"F");
+                agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O","");
+            }
+
+        }
+
+        //璁㈠崟鍥炴粴
+        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);
+        }
+
+        //淇濆瓨宸ヤ綔妗d互鍙婃槑缁�
+        agvWrkMastLogService.save(wrkMast);
+        agvWrkDetlLogService.save(wrkMast.getWrkNo());
+
+        //鍒犻櫎宸ヤ綔妗d互鍙婃槑缁�
+        if(!agvWrkMastService.deleteByWrkNo(wrkMast.getWrkNo()) || !agvWrkDetlService.deleteByWrkNo(wrkMast.getWrkNo())){
+            throw new CoolException("鍒犻櫎澶辫触锛岃鑱旂郴绠$悊鍛�");
+        }
+
     }
 
     /*
     鏇存柊鐩爣搴撲綅淇℃伅
      */
-    private void updateAgvLocMast(AgvLocMast locMast){
-        locMast.setLocSts("S");
-        agvLockMastService.updateById(locMast);
+    private void updateAgvLocMast(AgvLocMast locMast, String locSts){
+        locMast.setLocSts(locSts);
+        agvLocMastService.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, String csocode, String isoseq){
+        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.setSuppCode(zpallet); // 鎵樼洏鏉$爜
+        wrkDetl.setAppeUser(userId);
+        wrkDetl.setAppeTime(now);
+        wrkDetl.setModiUser(userId);
+        wrkDetl.setModiTime(now);
+
+        wrkDetl.setThreeCode(csocode);
+        wrkDetl.setDeadTime(isoseq);
+        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 +592,78 @@
     /*
     鐢熸垚宸ヤ綔妗�
      */
+    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();
+        //宸ヤ綔鐘舵��
+        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.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;
+    }
+
+    /*
+    鐢熸垚宸ヤ綔妗�
+     */
+    @Deprecated
     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());
-        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 +673,62 @@
             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);
+
+            //瀹為檯鍑哄簱鏁伴噺
+            Double locAnfme = locDto.getAnfme();
+            //璁㈠崟瀹為檯鍑哄簱鏁伴噺
+            Double orderAnfme;
+
+            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(locAnfme > orderDetl.getAnfme()){
+                    orderAnfme = orderDetl.getAnfme();
+                    locAnfme -= orderAnfme;
+                }else {
+                    orderAnfme = locAnfme;
+                }
+
+                if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderAnfme)) {
+                    throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
+                }
+                orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
+            }
+        }
+
 
     }
+
 }

--
Gitblit v1.9.1