From da7d75a235969e1fcc55d55189f8d30867ea1cfc Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 04 一月 2021 13:40:49 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java |    5 +
 src/main/webapp/views/crn.html                                 |   12 ++--
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |  138 +++++++++++++++++++++++++++++++++++++++++----
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java            |    3 +
 src/main/webapp/static/css/crn.css                             |    2 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |    2 
 src/main/resources/mapper/WrkMastMapper.xml                    |    4 +
 src/main/java/com/zy/asrs/service/LocMastService.java          |    5 +
 8 files changed, 150 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index c7e3491..1f8ee39 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -13,6 +13,9 @@
 @Repository
 public interface LocMastMapper extends BaseMapper<LocMast> {
 
+    @Select("select distinct row1 from asr_loc_mast where crn_no = #{crnNo}")
+    List<Integer> queryDistinctRow(@Param("crnNo")Integer crnNo);
+
     LocMast queryFreeLocMast(@Param("row") Integer row, @Param("locType1") Short locType1);
 
     @Select("select loc_no from asr_loc_mast where 1=1 and loc_sts = 'O' and crn_no = #{crnNo}")
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 8e26d07..70ca16b 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -11,6 +11,8 @@
 @Repository
 public interface WrkMastMapper extends BaseMapper<WrkMast> {
 
+    WrkMast selectByLocNo(@Param("sourceLocNo") String sourceLocNo);
+
 //    @Select("select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type <> 103 and io_type <> 104 and io_type <> 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,io_time,wrk_no")
     List<WrkMast> selectToBeCompleteData();
 
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index c1e1346..6a8b314 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -8,6 +8,11 @@
 public interface LocMastService extends IService<LocMast> {
 
     /**
+     * 鍫嗗灈鏈哄搴旂殑鎺掑彿闆嗗悎
+     */
+    List<Integer> queryDistinctRow(Integer crnNo);
+
+    /**
      * 妫�绱㈠彲鐢ㄥ簱浣�
      */
     LocMast queryFreeLocMast(Integer row, Short locType1);
diff --git a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
index 6e39d53..634485f 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -13,6 +13,11 @@
 public class LocMastServiceImpl extends ServiceImpl<LocMastMapper, LocMast> implements LocMastService {
 
     @Override
+    public List<Integer> queryDistinctRow(Integer crnNo) {
+        return this.baseMapper.queryDistinctRow(crnNo);
+    }
+
+    @Override
     public LocMast queryFreeLocMast(Integer row, Short locType1) {
         return this.baseMapper.queryFreeLocMast(row, locType1);
     }
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 9d08634..fe74358 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -11,6 +11,7 @@
 import com.zy.asrs.mapper.WaitPakinMapper;
 import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.MatDto;
@@ -112,9 +113,10 @@
                 }
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                 if (staProtocol.isAutoing() && staProtocol.isLoading()
-//                        && staProtocol.isInEnable()
+                        && staProtocol.isInEnable()
                         && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0
                         && staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
+
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
                     if (wrkMast != null) {
@@ -155,7 +157,6 @@
                         wrkMast.setExitMk("N"); // 閫�鍑�
                         wrkMast.setEmptyMk("N"); // 绌烘澘
                         wrkMast.setLinkMis("N");
-//                    wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
                         // 鎿嶄綔浜哄憳鏁版嵁
                         wrkMast.setAppeTime(new Date());
                         wrkMast.setModiTime(new Date());
@@ -177,7 +178,6 @@
 
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
-
                         // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                         barcodeThread.setBarcode("");
                         staProtocol.setWorkNo((short) workNo);
@@ -187,8 +187,6 @@
                         if (!result) {
                             throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                         }
-
-
 
                     } catch (Exception e) {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -574,6 +572,35 @@
                     continue;
                 }
 
+                // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
+                if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
+                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
+                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                    // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                    if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                        WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                        if (null == waitWrkMast) {
+                            log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                        } else {
+                            waitWrkMast.setIoPri(15D);
+                            waitWrkMast.setModiTime(new Date());
+                            if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                                log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                            }
+                        }
+                        continue;
+                    } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                        // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+                        if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
+                            wrkMast.setUpdMk("Y");
+                            wrkMastMapper.updateById(wrkMast);
+                            // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+                            moveLocForDeepLoc(slave, shallowLoc);
+                        }
+                        continue;
+                    }
+                }
+
                 // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
                 CrnCommand crnCommand = new CrnCommand();
                 crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
@@ -606,7 +633,7 @@
      * 搴撲綅绉昏浆
      */
     @Async
-    public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
+    public synchronized void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
         // 鑾峰彇宸ヤ綔妗d俊鎭�
         WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
         if (null == wrkMast) {
@@ -700,11 +727,6 @@
                     crnThread.setResetFlag(true);
                 }
 
-                // 瀹屾垚閫氱煡妗�
-//                if (wrkMastMapper.updateWaitPakInStep2(wrkMast.getBarcode()) == 0) {
-//                    log.error("鍏ュ簱閫氱煡妗d慨鏀圭粨鏉熺姸鎬佸け璐ワ紝workNo=[{}]", wrkMast.getWrkNo());
-//                }
-
             }
         }
     }
@@ -750,7 +772,7 @@
                                     wrkMast.getSourceStaNo(),    // 婧愮珯
                                     wrkMast.getSourceLocNo(),    // 婧愬簱浣�
                                     wrkMast.getBarcode(),    // 鏉$爜
-                                    crnProtocol.getAlarm1().intValue(),    // 寮傚父鐮�
+                                    crnProtocol.getAlarm1(),    // 寮傚父鐮�
                                     errName,    // 寮傚父
                                     1,    // 寮傚父鎯呭喌
                                     now,    // 娣诲姞鏃堕棿
@@ -760,7 +782,7 @@
                                     "浠诲姟涓紓甯�"    // 澶囨敞
                             );
                             if (!basErrLogService.insert(basErrLog)) {
-                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), crnError.getErrName());
+                                log.error("鍫嗗灈鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                             }
                         }
                     } else {
@@ -797,7 +819,7 @@
                                     null,    // 婧愮珯
                                     null,    // 婧愬簱浣�
                                     null,    // 鏉$爜
-                                    crnProtocol.getAlarm1().intValue(),    // 寮傚父鐮�
+                                    crnProtocol.getAlarm1(),    // 寮傚父鐮�
                                     errName,    // 寮傚父
                                     1,    // 寮傚父鎯呭喌
                                     now,    // 娣诲姞鏃堕棿
@@ -1038,6 +1060,94 @@
     }
 
     /**
+     * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)
+     * tip锛氬悓姝�
+     */
+    private void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc){
+        List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
+        LocMast loc = null;
+        for (Integer row : rows) {
+            if (Utils.isDeepLoc(slaveProperties, row)) {
+                loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+                if (null != loc) { break; }
+            }
+        }
+        if (null == loc) {
+            for (Integer row : rows) {
+                if (Utils.isShallowLoc(slaveProperties, row)) {
+                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+                    if (null != loc) { break; }
+                }
+            }
+        }
+        if (null == loc) {
+            throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+        }
+
+        // 鑾峰彇宸ヤ綔鍙�
+        int workNo = commonService.getWorkNo(0);
+        // 淇濆瓨宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+        wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+        wrkMast.setIoPri(13D);
+        wrkMast.setCrnNo(crn.getId());
+        wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
+        wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
+        wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D")?"Y":"N"); // 绌烘澘
+        wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
+        wrkMast.setLinkMis("N");
+        wrkMast.setAppeTime(new Date());
+        wrkMast.setModiTime(new Date());
+        int res = wrkMastMapper.insert(wrkMast);
+        if (res == 0) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 宸ヤ綔妗f槑缁嗕繚瀛�
+        if (shallowLoc.getLocSts().equals("F")) {
+            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
+            for (LocDetl locDetl : locDetls) {
+                WrkDetl wrkDetl = new WrkDetl();
+                wrkDetl.setWrkNo(workNo);
+                wrkDetl.setIoTime(new Date());
+                wrkDetl.setAnfme(locDetl.getAnfme());
+                VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
+                wrkDetl.setAppeTime(new Date());
+                wrkDetl.setModiTime(new Date());
+                if (!wrkDetlService.insert(wrkDetl)) {
+                    throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+                }
+            }
+        }
+        // 淇敼婧愬簱浣嶇姸鎬�
+        if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+            shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+            shallowLoc.setModiTime(new Date());
+            if (!locMastService.updateById(shallowLoc)){
+                throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+            }
+        } else {
+            throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
+        }
+        // 淇敼鐩爣搴撲綅鐘舵��
+        if (loc.getLocSts().equals("O")) {
+            loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+            loc.setModiTime(new Date());
+            if (!locMastService.updateById(loc)) {
+                throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException("绉昏浆澶辫触");
+        }
+
+    }
+
+    /**
      * 鍫嗗灈鏈烘紨绀�  ===>> 搴撲綅绉昏浆
      */
     @Async
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 271942d..542323e 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -62,6 +62,10 @@
 
     </resultMap>
 
+    <select id="selectByLocNo">
+        select top 1 * from asr_wrk_mast where source_loc_no = #{sourceLocNo}
+    </select>
+
     <select id="selectToBeCompleteData" resultMap="BaseResultMap">
         select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,io_time,wrk_no
     </select>
diff --git a/src/main/webapp/static/css/crn.css b/src/main/webapp/static/css/crn.css
index ea974b0..97ae7d0 100644
--- a/src/main/webapp/static/css/crn.css
+++ b/src/main/webapp/static/css/crn.css
@@ -40,7 +40,7 @@
 .crn-command-item input {
     vertical-align: middle;
     outline: none;
-    width: 60%;
+    width: 70%;
 }
 
 /* 鍙� */
diff --git a/src/main/webapp/views/crn.html b/src/main/webapp/views/crn.html
index 7540738..3d4f323 100644
--- a/src/main/webapp/views/crn.html
+++ b/src/main/webapp/views/crn.html
@@ -48,14 +48,14 @@
         <h2>鎵ц涓殑鍛戒护</h2>
         <div class="crn-command-item">
             <label>1#</label>
-            <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)">婕旂ず</button>
-            <!--            <span>&nbsp;</span>-->
+<!--            <button id="demoBtn-1" class="demoBtn" onclick="demoSwitch(this.id)">婕旂ず</button>-->
+                        <span>&nbsp;</span>
             <input id="crn1" disabled="disabled">
         </div>
         <div class="crn-command-item">
             <label>2#</label>
-            <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)">婕旂ず</button>
-            <!--            <span>&nbsp;</span>-->
+<!--            <button id="demoBtn-2" class="demoBtn" onclick="demoSwitch(this.id)">婕旂ず</button>-->
+                        <span>&nbsp;</span>
             <input id="crn2" disabled="disabled">
         </div>
     </div>
@@ -185,8 +185,8 @@
                 <button class="item" onclick="take()">鍑哄簱</button>
                 <button class="item" onclick="stockMove()">搴撲綅杞Щ</button>
                 <button class="item" onclick="siteMove()">绔欏埌绔�</button>
-                <button class="item" onclick="bacOrigin()">鍥炲師鐐�</button>
-                <button class="item" onclick="reverseOrigin()">鍙嶅師鐐�</button>
+<!--                <button class="item" onclick="bacOrigin()">鍥炲師鐐�</button>-->
+<!--                <button class="item" onclick="reverseOrigin()">鍙嶅師鐐�</button>-->
 <!--                <button class="item" onclick="coorMove()">鍧愭爣绉昏</button>-->
                 <button class="item" onclick="taskComplete()">浠诲姟瀹屾垚</button>
 <!--                <button class="item" onclick="pause()">鏆傚仠</button>-->

--
Gitblit v1.9.1