From 1a432aec361a177fc309c33d6c2962fa58ad8b09 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 17 十月 2022 14:44:29 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  185 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 162 insertions(+), 23 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 8291afb..ca23884 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -98,8 +98,9 @@
         wrkMast.setIoTime(new Date());
         wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
         wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
-        wrkMast.setIoPri(13D); // 浼樺厛绾э細13
-        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo())?1:0);;
+        Double ioPri = wrkMastService.getIoPri(1, dto.getLocNo());
+        wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13
+        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);;
         wrkMast.setCrnNo(dto.getCrnNo());
         wrkMast.setSourceStaNo(dto.getSourceStaNo());
         wrkMast.setStaNo(dto.getStaNo());
@@ -196,6 +197,7 @@
             }
         }
         Integer ioType = null;
+        List<String> excludeLocNos = dtos.stream().map(OutLocDto::getLocNo).distinct().collect(Collectors.toList());
         // 鐢熸垚宸ヤ綔妗�
         for (OutLocDto dto : dtos) {
             // 濡傛灉涓烘繁搴撲綅锛屼笖瀵瑰簲娴呭簱浣嶄负X.绂佺敤锛屽垯鐣ヨ繃姝ゅ簱浣�
@@ -225,8 +227,9 @@
             wrkMast.setIoTime(now);
             wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
             wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
-            wrkMast.setIoPri(13D); // 浼樺厛绾э細13
-            wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo())?1:0);;
+            Double ioPri = wrkMastService.getIoPri(ioType, dto.getLocNo());
+            wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13
+            wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), false)?1:0);;
             wrkMast.setCrnNo(locMast.getCrnNo());
             wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
             wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
@@ -274,6 +277,7 @@
             } else {
                 throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
             }
+            locMastService.breakUp(dto.getLocNo(), excludeLocNos);
         }
     }
 
@@ -300,8 +304,9 @@
         wrkMast.setIoTime(now);
         wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
         wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
-        wrkMast.setIoPri(13D); // 浼樺厛绾э細13
-        wrkMast.setOutMost(locMastService.isOutMost(taskDto.getLocNo())?1:0);;
+        Double ioPri = wrkMastService.getIoPri(ioType, taskDto.getLocNo());
+        wrkMast.setIoPri(ioPri); // 浼樺厛绾э細13
+        wrkMast.setOutMost(locMastService.isOutMost(taskDto.getLocNo(), false)?1:0);;
         wrkMast.setCrnNo(locMast.getCrnNo());
         wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
         wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
@@ -325,6 +330,10 @@
             OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
             if (orderDetl == null) {
                 orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
+            }
+            LocDetl locDetl = locDetlService.selectItem(locDto.getLocNo(), locDto.getMatnr(), locDto.getBatch());
+            if (locDetl == null || locDetl.getAnfme() < locDto.getAnfme()) {
+                throw new CoolException(locDto.getLocNo() + "搴撲綅涓�" + locDto.getMatnr() + "鍟嗗搧搴撳瓨涓嶈冻锛�");
             }
             WrkDetl wrkDetl = new WrkDetl();
             wrkDetl.sync(orderDetl);
@@ -376,8 +385,9 @@
         wrkMast.setIoTime(new Date());
         wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
         wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
-        wrkMast.setIoPri(10D); // 浼樺厛绾э細10
-        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo())?1:0);;
+        Double ioPri = wrkMastService.getIoPri(10, dto.getLocNo());
+        wrkMast.setIoPri(ioPri); // 浼樺厛绾э細10
+        wrkMast.setOutMost(locMastService.isOutMost(dto.getLocNo(), true)?1:0);;
         wrkMast.setCrnNo(dto.getCrnNo());
         wrkMast.setSourceStaNo(dto.getSourceStaNo());
         wrkMast.setStaNo(dto.getStaNo());
@@ -446,6 +456,9 @@
                     .eq("stn_no", param.getOutSite())
                     .eq("crn_no", locMast.getCrnNo());
             StaDesc staDesc = staDescService.selectOne(wrapper);
+            if (Cools.isEmpty(staDesc)) {
+                throw new CoolException("闈炴硶璺緞锛�");
+            }
             Integer sourceStaNo = staDesc.getCrnStn();
             if (Cools.isEmpty(sourceStaNo)) {
                 throw new CoolException("妫�绱㈡簮绔欏け璐�");
@@ -456,10 +469,11 @@
             wrkMast.setIoTime(new Date());
             wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
             wrkMast.setIoType(110); // 鍏ュ嚭搴撶姸鎬侊細 110.绌烘澘鍑哄簱
-            wrkMast.setIoPri(10D);
+            Double ioPri = wrkMastService.getIoPri(110, locNo);
+            wrkMast.setIoPri(ioPri);
             wrkMast.setSourceStaNo(sourceStaNo); // 婧愮珯
             wrkMast.setStaNo(param.getOutSite()); // 鐩爣绔�
-            wrkMast.setOutMost(locMastService.isOutMost(locNo)?1:0);;
+            wrkMast.setOutMost(locMastService.isOutMost(locNo, false)?1:0);;
             wrkMast.setCrnNo(locMast.getCrnNo());
             wrkMast.setSourceLocNo(locNo); // 婧愬簱浣�
             wrkMast.setFullPlt("N"); // 婊℃澘锛歒
@@ -521,18 +535,19 @@
             throw new CoolException("鏈壘鍒板簱浣�");
         }
         if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
-            throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");
+//            throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");   todo:luxiaotao
         }
+        Date now = new Date();
         // 鑾峰彇宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
         // 淇濆瓨宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
-        wrkMast.setIoTime(new Date());
+        wrkMast.setIoTime(now);
         wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
         wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
         wrkMast.setIoPri(10D);
-        wrkMast.setOutMost(locMastService.isOutMost(locNo)?1:0);;
+        wrkMast.setOutMost(locMastService.isOutMost(locNo, false)?1:0);;
         wrkMast.setCrnNo(sourceLoc.getCrnNo());
         wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣�
         wrkMast.setLocNo(locNo); // 鐩爣搴撲綅
@@ -543,9 +558,9 @@
         wrkMast.setBarcode(sourceLoc.getBarcode()); // 鎵樼洏鐮�
         wrkMast.setLinkMis("N");
         wrkMast.setAppeUser(userId);
-        wrkMast.setAppeTime(new Date());
+        wrkMast.setAppeTime(now);
         wrkMast.setModiUser(userId);
-        wrkMast.setModiTime(new Date());
+        wrkMast.setModiTime(now);
         boolean res = wrkMastService.insert(wrkMast);
         if (!res) {
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
@@ -555,11 +570,11 @@
             WrkDetl wrkDetl = new WrkDetl();
             wrkDetl.sync(locDetl);
             wrkDetl.setWrkNo(workNo);
-            wrkDetl.setIoTime(new Date());
+            wrkDetl.setIoTime(now);
             wrkDetl.setAnfme(locDetl.getAnfme());
-            wrkDetl.setAppeTime(new Date());
+            wrkDetl.setAppeTime(now);
             wrkDetl.setAppeUser(userId);
-            wrkDetl.setModiTime(new Date());
+            wrkDetl.setModiTime(now);
             wrkDetl.setModiUser(userId);
             if (!wrkDetlService.insert(wrkDetl)) {
                 throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
@@ -569,17 +584,17 @@
         if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
             sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害
             sourceLoc.setModiUser(userId);
-            sourceLoc.setModiTime(new Date());
+            sourceLoc.setModiTime(now);
             if (!locMastService.updateById(sourceLoc)){
                 throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
             }
         } else {
-            throw new CoolException("婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$());
+            throw new CoolException(sourceLoc.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$());
         }
         // 淇敼鐩爣搴撲綅鐘舵��
         if (loc.getLocSts().equals("O")) {
             loc.setLocSts("S"); // S.鍏ュ簱棰勭害
-            loc.setModiTime(new Date());
+            loc.setModiTime(now);
             loc.setModiUser(userId);
             if (!locMastService.updateById(loc)) {
                 throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
@@ -749,7 +764,7 @@
         String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
         String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
         // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
-        if (wrkMast.getWrkSts() < 4) {
+        if (wrkMast.getWrkSts() < 9) {
             locNo = wrkMast.getLocNo();
             locSts = "O";
 
@@ -766,7 +781,7 @@
                 locMastService.updateById(locMast);
             }
         // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
-        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
+        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 19) {
             locNo = wrkMast.getSourceLocNo();
             // 鍑哄簱 ===>> F.鍦ㄥ簱
             if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
@@ -913,4 +928,128 @@
         return "";
     }
 
+    @Override
+    @Transactional
+    public void shuttleTransfer(List<String> locNos) {
+        if (Cools.isEmpty(locNos)) {
+            return;
+        }
+        if (true && !Cools.isEmpty(locNos)) {
+            throw new CoolException("鏆備笉鏀寔绉诲簱浠诲姟");    // todo:luxiaotao 绉诲簱寮�鍏�
+        }
+        LocMast one = locMastService.selectById(locNos.get(0));
+        List<Integer> rows = Utils.getGroupLoc(Integer.parseInt(locNos.get(0).substring(0, 2)));
+        List<LocMast> locMasts = locMastService.queryFreeLocMast(rows, rows.size(), one.getLocType1());
+        if (Cools.isEmpty(locMasts)) {
+            throw new CoolException("搴撲綅绉昏浆澶辫触锛屽凡鏃犵┖搴撲綅");
+        }
+        // 鍏ュ簱鎺掑簭 娣卞簱浣� ==> 娴呭簱浣�
+        switch (locMasts.get(0).getRow1()) {
+            case 4:
+            case 5:
+            case 6:
+            case 7:
+            case 12:
+            case 13:
+            case 14:
+            case 19:
+            case 20:
+            case 21:
+                Collections.reverse(locMasts);
+                break;
+            default:
+                break;
+        }
+        if (locNos.size() > locMasts.size()) {
+            throw new CoolException("鏈嶅姟鍣ㄩ敊璇�");
+        }
+        Date now = new Date();
+        // 鐢熸垚绉诲簱宸ヤ綔妗�
+        Iterator<LocMast> iterator = locMasts.iterator();
+        for (String sourceLocNo : locNos) {
+
+            while (iterator.hasNext()) {
+                LocMast sourceLoc = locMastService.selectById(sourceLocNo);
+                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
+                if (Cools.isEmpty(sourceLoc)){
+                    throw new CoolException("鏈壘鍒板簱浣�");
+                }
+                LocMast loc = iterator.next();
+                if (Cools.isEmpty(loc)){
+                    throw new CoolException("鏈壘鍒板簱浣�");
+                }
+                if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
+//                    throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");   todo:luxiaotao
+                }
+                // 鑾峰彇宸ヤ綔鍙�
+                int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
+                // 淇濆瓨宸ヤ綔妗�
+                WrkMast wrkMast = new WrkMast();
+                wrkMast.setWrkNo(workNo);
+                wrkMast.setIoTime(now);
+                wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+                wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+                wrkMast.setIoPri(15D);
+                wrkMast.setOutMost(locMastService.isOutMost(loc.getLocNo(), false)?1:0);;
+                wrkMast.setCrnNo(sourceLoc.getCrnNo());
+                wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣�
+                wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
+                wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // 婊℃澘锛歒
+                wrkMast.setPicking("N"); // 鎷f枡
+                wrkMast.setExitMk("N"); // 閫�鍑�
+                wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 绌烘澘
+                wrkMast.setBarcode(sourceLoc.getBarcode()); // 鎵樼洏鐮�
+                wrkMast.setLinkMis("N");
+                wrkMast.setAppeUser(9527L);
+                wrkMast.setAppeTime(now);
+                wrkMast.setModiUser(9527L);
+                wrkMast.setModiTime(now);
+                boolean res = wrkMastService.insert(wrkMast);
+                if (!res) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+                }
+                // 宸ヤ綔妗f槑缁嗕繚瀛�
+                for (LocDetl locDetl : locDetls) {
+                    WrkDetl wrkDetl = new WrkDetl();
+                    wrkDetl.sync(locDetl);
+                    wrkDetl.setWrkNo(workNo);
+                    wrkDetl.setIoTime(now);
+                    wrkDetl.setAnfme(locDetl.getAnfme());
+                    wrkDetl.setAppeTime(now);
+                    wrkDetl.setAppeUser(9527L);
+                    wrkDetl.setModiTime(now);
+                    wrkDetl.setModiUser(9527L);
+                    if (!wrkDetlService.insert(wrkDetl)) {
+                        throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                    }
+                }
+                // 淇敼婧愬簱浣嶇姸鎬�
+                if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
+                    sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+                    sourceLoc.setModiUser(9527L);
+                    sourceLoc.setModiTime(now);
+                    if (!locMastService.updateById(sourceLoc)){
+                        throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+                    }
+                } else {
+                    throw new CoolException(sourceLoc.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$());
+                }
+                // 淇敼鐩爣搴撲綅鐘舵��
+                if (loc.getLocSts().equals("O")) {
+                    loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+                    loc.setModiTime(now);
+                    loc.setModiUser(9527L);
+                    if (!locMastService.updateById(loc)) {
+                        throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+                    }
+                } else {
+                    throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+loc.getLocSts$());
+                }
+
+                iterator.remove();
+                break;
+            }
+        }
+    }
+
 }

--
Gitblit v1.9.1