From 0f769b47d8d71bd419ddf1733b0b2f21c82e86b1 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 07 十月 2024 10:33:30 +0800
Subject: [PATCH] 跨巷道移库

---
 src/main/java/com/zy/asrs/service/WorkService.java             |    5 
 src/main/resources/mapper/OrderMapper.xml                      |    3 
 src/main/java/com/zy/asrs/entity/OrderDetl.java                |   10 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java    |   89 +++++++++++
 src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java          |    6 
 src/main/java/com/zy/asrs/task/GhjtScheduler.java              |   27 +++
 src/main/java/com/zy/asrs/task/handler/GhjtHandler.java        |  124 +++++++++++++++
 src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java      |    7 
 src/main/resources/mapper/OrderDetlMapper.xml                  |   17 ++
 src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java |   15 +
 src/main/java/com/zy/asrs/mapper/OrderMapper.java              |    5 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java    |  130 ++++++++++++++++
 src/main/webapp/static/js/order/order.js                       |    4 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java    |    2 
 14 files changed, 429 insertions(+), 15 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/OrderDetl.java b/src/main/java/com/zy/asrs/entity/OrderDetl.java
index 89b83ed..a97aa6a 100644
--- a/src/main/java/com/zy/asrs/entity/OrderDetl.java
+++ b/src/main/java/com/zy/asrs/entity/OrderDetl.java
@@ -417,14 +417,14 @@
     }
 
     public String getDanger$(){
-        if (null == this.danger){ return null; }
+        if (null == this.danger){ return "寰呯Щ搴�"; }
         switch (this.danger){
             case 1:
-                return "鏄�";
-            case 0:
-                return "鍚�";
+                return "绉诲簱涓�";
+            case 2:
+                return "绉诲簱瀹屾垚";
             default:
-                return String.valueOf(this.danger);
+                return "寰呯Щ搴�";
         }
     }
 
diff --git a/src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java b/src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java
index 8395d76..fd0ecf5 100644
--- a/src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java
+++ b/src/main/java/com/zy/asrs/importexcle/ImportOrderDto.java
@@ -11,10 +11,13 @@
 @Data
 public class ImportOrderDto {
 
-    @ExcelProperty(value = "鍖呰缁勫彿",index = 0)
+    @ExcelProperty(value = "鍖呰缁勫彿/婧愬簱浣�",index = 0)
     private String column1;
 
-    @ExcelProperty(value = "鍑哄簱鍗曞彿/鍗曟嵁绫诲瀷",index = 1)
+    @ExcelProperty(value = "鍑哄簱鍗曞彿/鍗曟嵁绫诲瀷/鐩爣搴撲綅",index = 1)
     private String column2;
 
+    @ExcelProperty(value = "鐩爣宸烽亾",index = 2)
+    private String column3;
+
 }
diff --git a/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java b/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
index 93226be..4fefeb9 100644
--- a/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
+++ b/src/main/java/com/zy/asrs/importexcle/ImportOrderListener.java
@@ -37,6 +37,8 @@
 
     private long orderId;
 
+    private long docTypeId;
+
     List<ImportOrderDto> list = new ArrayList<>();
     /**
      * 鍋囪杩欎釜鏄竴涓狣AO锛屽綋鐒舵湁涓氬姟閫昏緫杩欎釜涔熷彲浠ユ槸涓�涓猻ervice銆傚綋鐒跺鏋滀笉鐢ㄥ瓨鍌ㄨ繖涓璞℃病鐢ㄣ��
@@ -77,6 +79,7 @@
                 throw new ExcelAnalysisException("鍗曟嵁绫诲瀷閿欒锛�" + list.get(1).getColumn2());
             }
             orderNo = list.get(0).getColumn2();
+            docTypeId = docType.getDocId();
             Order order = new Order();
             order.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
             order.setOrderNo(orderNo);
@@ -122,7 +125,17 @@
         List<OrderDetl> orderDetlList = new ArrayList<>();
         list.forEach(importOrderDto -> {
             OrderDetl orderDetl = new OrderDetl();
-            orderDetl.setBrand(importOrderDto.getColumn1());
+            if (docTypeId == 24) {
+                orderDetl.setSpecs(String.format("%07d",Integer.parseInt(importOrderDto.getColumn1()))); // 婧愬簱浣�
+                if (importOrderDto.getColumn2() != null) {
+                    orderDetl.setModel(String.format("%07d",Integer.parseInt(importOrderDto.getColumn2()))); // 鐩爣搴撲綅
+                }
+                if (importOrderDto.getColumn3() != null) {
+                    orderDetl.setBeBatch(Integer.parseInt(importOrderDto.getColumn3())); //宸烽亾
+                }
+            } else {
+                orderDetl.setBrand(importOrderDto.getColumn1());
+            }
             orderDetl.setBatch("");
             orderDetl.setOrderId(orderId);
             orderDetl.setOrderNo(orderNo);
diff --git a/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java b/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
index fef98cd..151f68f 100644
--- a/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -53,4 +53,10 @@
      * 鎸夊寘瑁呯粍鍙锋洿鏂拌鍗曟槑缁嗙姸鎬�
      */
     void updateOrderDetlStatusByPackageNo(@Param("brands") List<String> brands,@Param("status") int status);
+
+    /**
+     * 鏌ヨ璺ㄥ贩閬撶Щ搴撶殑鏈墽琛岀殑搴撲綅
+     */
+    List<OrderDetl> selectMoveLocDetl();
+
 }
diff --git a/src/main/java/com/zy/asrs/mapper/OrderMapper.java b/src/main/java/com/zy/asrs/mapper/OrderMapper.java
index 5c42005..8dd8494 100644
--- a/src/main/java/com/zy/asrs/mapper/OrderMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -23,6 +23,11 @@
     void updateSettleByOrderNo(@Param("orderNo") String orderNo, @Param("status") long status, @Param("userId") Long userId);
 
     /**
+     * 鏇存柊鍗曟嵁鐘舵�侊紝鍙湁寰呭鐞嗘墠鏇存柊
+     */
+    void updatePendingSettleByOrderNo(@Param("orderNo") String orderNo, @Param("status") long status);
+
+    /**
      * 鏌ヨ鍑哄簱鐢宠鍗曚腑娌℃湁澶囪揣鐨勮鍗曟槑缁嗙殑鍖呰缁勫彿
      */
     List<String> selectStockUpOrderDetl();
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index 4d9cc0e..81b1438 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -71,6 +71,11 @@
     void locMove(String sourceLocNo, String locNo, Long userId);
 
     /**
+     * 璺ㄥ贩閬撳簱浣嶇Щ杞�
+     */
+    void autoLocMove(String orderNo,String sourceLocNo, String locNo, Long userId);
+
+    /**
      * 鎵嬪姩瀹屾垚宸ヤ綔妗�
      */
     void completeWrkMast(String workNo, Long userId);
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 2de975b..c702b1d 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1341,6 +1341,8 @@
         wrkMast.setWrkSts(2L);
         if(wrkMast.getIoType() == 10){
             wrkMast.setBarcode(param.getBarcode());
+        } else if(wrkMast.getIoType() == 12) { // 璺ㄥ贩閬撹浆绉诲叆搴�
+
         }
         wrkMastService.updateById(wrkMast);
 
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 228bb31..eeffb60 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -43,6 +43,19 @@
     // 搴撲綅鎺掑彿鍒嗛厤榛樿绫诲埆
     private static final int DEFAULT_ROW_NO_TYPE = 1;
 
+    // 鍫嗗灈鏈烘槧灏勪竴妤肩殑鍏ュ簱鍑哄簱绔欑偣
+    private static final Map<Integer,List<Integer>> crnMapNo;
+
+    static {
+        crnMapNo = new HashMap<>();
+        crnMapNo.put(1,new ArrayList<Integer>(){{add(3001);add(3002);}});
+        crnMapNo.put(2,new ArrayList<Integer>(){{add(3004);add(3003);}});
+        crnMapNo.put(3,new ArrayList<Integer>(){{add(3005);add(3006);}});
+        crnMapNo.put(4,new ArrayList<Integer>(){{add(3007);add(3008);}});
+        crnMapNo.put(5,new ArrayList<Integer>(){{add(3010);add(3009);}});
+        crnMapNo.put(6,new ArrayList<Integer>(){{add(3011);add(3012);}});
+    }
+
     @Autowired
     private MatService matService;
     @Autowired
@@ -831,6 +844,95 @@
 
     @Override
     @Transactional
+    public void autoLocMove(String orderNo,String sourceLocNo, String locNo, Long userId) {
+        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 = locMastService.selectById(locNo);
+        if (Cools.isEmpty(loc)){
+            throw new CoolException("鏈壘鍒板簱浣�");
+        }
+        if (!loc.getLocSts().equals("O") || (!sourceLoc.getLocSts().equals("F") && !sourceLoc.getLocSts().equals("D"))){
+            throw new CoolException("搴撲綅鐘舵�佸凡鏀瑰彉");
+        }
+//        if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
+//            throw new CoolException("绉昏浆搴撲綅灞炰簬涓嶅悓鍫嗗灈鏈�");
+//        }
+
+        Date now = new Date();
+        // 鑾峰彇宸ヤ綔鍙�
+        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
+        // 淇濆瓨宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(now);
+        wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+        wrkMast.setIoType(12); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+        wrkMast.setIoPri(10D);
+        wrkMast.setCrnNo(sourceLoc.getCrnNo());
+        wrkMast.setSourceLocNo(sourceLocNo); // 婧愬簱浣�
+        wrkMast.setLocNo(locNo); // 鐩爣搴撲綅
+        wrkMast.setSourceStaNo(crnMapNo.get(sourceLoc.getCrnNo()).get(1)); // 鍑哄簱婧愮珯鐐�
+        wrkMast.setStaNo(crnMapNo.get(loc.getCrnNo()).get(0)); // 鍏ュ簱鐩爣绔欑偣
+        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(userId);
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiUser(userId);
+        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.setOrderNo(orderNo);
+            wrkDetl.setWrkNo(workNo);
+            wrkDetl.setIoTime(now);
+            wrkDetl.setAnfme(locDetl.getAnfme());
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setAppeUser(userId);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setModiUser(userId);
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+            }
+        }
+        // 淇敼婧愬簱浣嶇姸鎬�
+        if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
+            sourceLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+            sourceLoc.setModiUser(userId);
+            sourceLoc.setModiTime(now);
+            if (!locMastService.updateById(sourceLoc)){
+                throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+            }
+        } else {
+            throw new CoolException("婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLoc.getLocSts$());
+        }
+        // 淇敼鐩爣搴撲綅鐘舵��
+        if (loc.getLocSts().equals("O")) {
+            loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+            loc.setModiTime(now);
+            loc.setModiUser(userId);
+            if (!locMastService.updateById(loc)) {
+                throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+loc.getLocSts$());
+        }
+    }
+
+    @Override
+    @Transactional
     public void completeWrkMast(String workNo, Long userId) {
         WrkMast wrkMast = wrkMastService.selectById(workNo);
         if (Cools.isEmpty(wrkMast)){
@@ -1019,7 +1121,7 @@
             } else if (wrkMast.getIoType() == 110) {
                 locSts = "D";
             // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉�
-            } else if (wrkMast.getIoType() == 11) {
+            } else if (wrkMast.getIoType() == 11 || wrkMast.getIoType() == 12) {
                 locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F";
                 // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
                 LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
@@ -1052,6 +1154,32 @@
             }
         }
 
+        // 鍙栨秷璺ㄥ贩閬撶Щ搴撲换鍔℃椂锛屽洖婊氬湪鎵ц鐨勪换鍔�
+        if (wrkMast.getIoType() == 12) {
+            List<Order> orderList = orderMapper.selectList(new EntityWrapper<Order>().eq("doc_type", 24).lt("settle", 3));
+            if (orderList.size() == 1) {
+                Order order = orderList.get(0);
+                // 鍥炴粴鍗曟嵁鏄庣粏鐨勭Щ搴撶姸鎬�
+                List<OrderDetl> orderDetlList1 = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo()).eq("specs", wrkMast.getSourceLocNo()));
+                for (OrderDetl orderDetl:orderDetlList1) {
+                    if (orderDetl.getBeBatch() != null) {
+                        orderDetl.setModel("");
+                    }
+                    orderDetl.setUpdateTime(now);
+                    orderDetl.setDanger(0);
+                    orderDetlMapper.updateById(orderDetl);
+                }
+                // 鍥炴粴鍗曟嵁鐘舵�侊紝鏈夊ぇ浜�0鐨勮鍗曟槑缁嗗垯鏄綔涓氫腑锛屾病鏈夊垯鏇存柊涓哄緟澶勭悊
+                Integer count = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo()).gt("danger", 0));
+                if (count == 0) {
+                    order.setSettle(1L);
+                    orderMapper.updateById(order);
+                }
+            } else {
+                log.error("鍥炴粴绉诲簱鍗曟嵁寮傚父锛屾棤婧愬簱浣嶆暟鎹細{}",wrkMast.getSourceLocNo());
+            }
+        }
+
         //鍙栨秷鍑哄簱宸ヤ綔妗f椂锛屾煡璇㈠崟鎹鐞嗚〃锛屽洖婊氫綔涓氫腑鏁伴噺
         if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107) {
             List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
diff --git a/src/main/java/com/zy/asrs/task/GhjtScheduler.java b/src/main/java/com/zy/asrs/task/GhjtScheduler.java
index f3366d6..075bbe7 100644
--- a/src/main/java/com/zy/asrs/task/GhjtScheduler.java
+++ b/src/main/java/com/zy/asrs/task/GhjtScheduler.java
@@ -1,7 +1,9 @@
 package com.zy.asrs.task;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.OrderDetl;
 import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.mapper.OrderDetlMapper;
 import com.zy.asrs.mapper.OrderMapper;
 import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.task.handler.GhjtHandler;
@@ -35,6 +37,9 @@
     @Resource
     private ConfigMapper configMapper;
 
+    @Resource
+    private OrderDetlMapper orderDetlMapper;
+
     // 鑷姩澶囪揣(鏍规嵁鍑哄簱鍗曪紝鎶婅鍑虹殑璐ф彁鍓嶆斁鍒伴潬杩戝嚭搴撳彛浣嶇疆)
     // 瀹氭椂浠诲姟鑾峰彇寰呭璐ц鍗曟槑缁�->鑾峰彇鍫嗗灈鏈哄搴旂殑婧愬簱浣嶏紝鑾峰彇澶囪揣鍖哄簱浣�->鐢熸垚绉诲簱浠诲姟11->
     // 鎵ц绉诲簱浠诲姟12->鍏ュ簱瀹屾垚4->鏇存柊宸ヤ綔妗e畾鏃朵换鍔′腑鏇存柊璁㈠崟澶囪揣鐘舵�佸拰璁㈠崟鏄庣粏澶囪揣鐘舵��5->杞偍鍘嗗彶
@@ -59,7 +64,7 @@
     @Scheduled(cron = "0/2 * * * * ? ")
     public void ckrwPushGwcs() {
         // 鏌ヨ鐘舵�佷负13鐨勫伐浣滄。
-        List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().in("io_type", 101,103,107,110,3).eq("wrk_sts", 13));
+        List<WrkMast> wrkMasts = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().in("io_type", 101,103,107,110,3,12).eq("wrk_sts", 13));
         for (WrkMast wrkMast : wrkMasts) {
             try {
                 ghjtHandler.startCkrwPushGwcs(wrkMast);
@@ -69,6 +74,26 @@
         }
     }
 
+    // 鑷姩璺ㄥ贩閬撶Щ搴�
+    // 閰嶇疆寮�鍚�->鑾峰彇鍗曟嵁鏄庣粏->鑾峰彇婧愬簱浣嶇洰鏍囧簱浣�->鐢熸垚绉诲簱浠诲姟->鍙栨秷浠诲姟鍥炴粴鍗曟嵁->
+    // wcs鍑哄簱鍒板爢鍨涙満鍑哄簱鍙�->gwms缁檊wcs鎺ㄩ�佺洰鏍囩珯1->gwcs鍒拌揪鍫嗗灈鏈哄叆搴撳彛璇锋眰鍏ュ簱->鍫嗗灈鏈烘墽琛屽叆搴�->鍏ュ簱瀹屾垚->鏇存柊鍗曟嵁鐘舵��
+    // 11->12->13->1->2->3->4->5
+    @Scheduled(cron = "0/10 * * * * ?")
+    public synchronized void autoMoveLoc() {
+        // 鏌ヨ璺ㄥ贩閬撶Щ搴撻厤缃�
+        Config config = configMapper.selectConfigByCode("auto_move_loc");
+        if (config == null || config.getStatus() == 0) {
+            return;
+        }
+        // 鏌ヨ寰呯Щ搴撶殑鍗曟嵁鏄庣粏
+        List<OrderDetl> orderDetlList = orderDetlMapper.selectMoveLocDetl();
+        if (orderDetlList.isEmpty()) {
+            return;
+        }
+
+        ghjtHandler.autoMoveLoc(orderDetlList);
+    }
+
     // 绌洪棽鐞嗚揣
     @Scheduled(cron = "0/5 * * * * ? ")
     public void autoTallyGoods() {
diff --git a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
index a3f5e4b..3d61ebe 100644
--- a/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/GhjtHandler.java
@@ -4,16 +4,17 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
-import com.zy.asrs.entity.LocDetl;
-import com.zy.asrs.entity.LocMast;
-import com.zy.asrs.entity.WrkDetl;
-import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.ApiLogService;
 import com.zy.asrs.service.WorkService;
 import com.zy.asrs.service.WrkDetlService;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.constant.MesConstant;
+import com.zy.common.properties.SlaveProperties;
 import com.zy.common.utils.HttpHandler;
+import com.zy.system.entity.Config;
+import com.zy.system.mapper.ConfigMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -56,6 +57,12 @@
     @Resource
     private WorkService workService;
 
+    @Resource
+    private ConfigMapper configMapper;
+
+    @Autowired
+    private SlaveProperties slaveProperties;
+
     @Transactional
     public void startCkrwPushGwcs(WrkMast wrkMast) {
 
@@ -92,6 +99,9 @@
                 } else if (wrkMast.getIoType() == 3) {
                     // 淇敼宸ヤ綔涓绘。鐘舵��
                     wrkMast.setWrkSts(15L);
+                    wrkMast.setModiTime(new Date());
+                } else if(wrkMast.getIoType() == 12) { // 璺ㄥ贩閬撹浆绉�
+                    wrkMast.setWrkSts(1L); // 鐘舵�佹敼涓�1.鐢熸垚鍏ュ簱id
                     wrkMast.setModiTime(new Date());
                 }
                 wrkMastMapper.updateById(wrkMast);
@@ -168,6 +178,7 @@
     /**
      * 鑷姩澶囪揣澶勭悊
      */
+    @Transactional
     public void autoStockUpHandler(List<String> list,int columnNum) {
 
         // 鏍规嵁鍖呰缁勫彿鑾峰彇鎵�鍦ㄥ簱浣�
@@ -257,4 +268,109 @@
         }
 
     }
+
+    @Transactional
+    public void autoMoveLoc(List<OrderDetl> orderDetlList) {
+
+        // 鍒ゆ柇鏄惁宸茬粡鏈夋墽琛岀殑绉诲簱浠诲姟
+        Integer count = wrkMastMapper.selectCount(new EntityWrapper<WrkMast>().in("io_type", 11, 12));
+        if (count > 0) {
+            return;
+        }
+
+        OrderDetl detl = null; // 瑕佺Щ搴撶殑鏄庣粏
+        String staLoc = null; // 绉诲簱鐩爣搴撲綅
+
+        // 浠庡緟绉诲簱浣嶅垪琛ㄤ腑鍏堟祬鍚庢繁鑾峰彇涓�涓緟绉诲簱浣�
+        Optional<OrderDetl> any = orderDetlList.stream().filter(orderDetl -> Utils.isShallowLoc(slaveProperties,orderDetl.getSpecs())).findAny();
+
+        if (any.isPresent()){
+            detl = any.get();
+        }
+        // 鍓╀笅鐨勫簲璇ラ兘鏄繁搴撲綅锛岃幏鍙栫涓�涓�
+        if (detl == null) {
+            detl = orderDetlList.get(0);
+            // 瀵瑰簲娴呭簱浣嶆湁璐э紝鍦ㄥ爢鍨涙満鍑哄簱鐨勬椂鍊欎細妫�娴嬪埌锛屽湪閭i噷鐢熸垚绉诲簱浠诲姟
+        }
+
+        // 鑾峰彇澶囪揣鍖洪厤缃�
+        Config config = configMapper.selectConfigByCode("auto_stock_up");
+        if (config == null) {
+            return;
+        }
+        // 澶囪揣鍙栨槸鍓嶅嚑鍒�
+        int bay1 = Integer.parseInt(config.getValue());
+        // 鎸囧畾鐨勭洰鏍囧簱浣�
+        String model = detl.getModel();
+
+        // 鎸囧畾鐩爣搴撲綅
+        if (!Cools.isEmpty(model)) {
+            // 鐩爣搴撲綅鏄繁搴撲綅
+            if (Utils.isDeepLoc(slaveProperties,model)) {
+                // 鐩爣搴撲綅
+                LocMast locMast2 = locMastMapper.selectById(model);
+                if (locMast2 == null || !locMast2.getLocSts().equals("O")) {
+                    log.error("鎸囧畾鐨勭洰鏍囧簱浣嶃�恵}銆戠姸涓嶄负绌�", model);
+                    return;
+                }
+                // 鑾峰彇鍒板搴旀祬搴撲綅
+                String shallowLoc = Utils.getShallowLoc(slaveProperties, model);
+                LocMast locMast = locMastMapper.selectById(shallowLoc);
+                // 娴呭簱浣嶆湁璐�
+                if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) {
+                    log.error("閫夋嫨鐨勬繁搴撲綅銆恵}銆戯紝浣嗘槸娴呭簱浣嶃�恵}銆戞湁璐�", model, locMast.getLocNo());
+                    return;
+                }
+                // 閬垮紑澶囪揣鍖�
+                if (Utils.getBay(model) <= bay1) {
+                    log.error("鎸囧畾鐨勭洰鏍囧簱浣嶃�恵}銆戝湪澶囪揣鍖猴紝涓嶈兘杞Щ", model);
+                    return;
+                }
+            }
+            // 娣卞簱浣嶆娴嬮�氳繃锛屾垨鑰呮槸娴呭簱浣�
+            staLoc = model;
+        } else if ( detl.getBeBatch() != null) { // 鎸囧畾鐩爣宸烽亾
+            // 鐩爣宸烽亾
+            Integer beBatch = detl.getBeBatch();
+            // 浠庡贩閬撻噷闈㈠厛娣卞悗娴呭彇涓�涓┖搴撲綅锛屼笉瑕佸崰鐢ㄥ璐у尯
+            List<LocMast> locMasts = locMastMapper.selectList(new EntityWrapper<LocMast>().eq("crn_no", beBatch).eq("loc_sts", "O").gt("bay1", bay1));
+            if (locMasts.isEmpty()) {
+                log.error("鎸囧畾宸烽亾銆恵}銆戞病鏈夎兘绉诲簱鐨勭┖搴撲綅浜�",beBatch);
+                return;
+            }
+            // 鍏堣繃婊ゅ嚭娣卞簱浣�
+            Optional<LocMast> a = locMasts.stream().filter(locMast -> Utils.isDeepLoc(slaveProperties,locMast.getLocNo())).findAny();
+            if (a.isPresent()){
+                staLoc = a.get().getLocNo();
+                // 鑾峰彇鍒板搴旀祬搴撲綅
+                String shallowLoc = Utils.getShallowLoc(slaveProperties, staLoc);
+                LocMast locMast = locMastMapper.selectById(shallowLoc);
+                // 娴呭簱浣嶆湁璐�
+                if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) {
+                    log.error("鎸囧畾鐨勭洰鏍囧贩閬撴繁搴撲綅銆恵}銆戯紝浣嗘槸娴呭簱浣嶃�恵}銆戞湁璐�",staLoc,locMast.getLocNo());
+                    return;
+                }
+            }
+            // 娣卞簱浣嶆病鏈夊垯鍙栨祬搴撲綅
+            if (staLoc == null) {
+                staLoc = locMasts.get(0).getLocNo();
+            }
+        } else {
+            log.error("鐩爣搴撲綅鎴栫洰鏍囧贩閬撴湁璇細{}",detl);
+            return;
+        }
+
+        // 鐢熸垚璺ㄥ贩閬撶Щ搴撲换鍔�
+        workService.autoLocMove(detl.getOrderNo(),detl.getSpecs(),staLoc,29L);
+
+        // 鏇存柊鍗曟嵁鏄庣粏绉诲簱鐘舵�佷负绉诲簱涓�
+        detl.setDanger(1);
+        if (detl.getBeBatch() != null) {
+            detl.setModel(staLoc); // 琛ュ厖鐩爣搴撲綅
+        }
+        orderDetlMapper.updateById(detl);
+        // 鏇存柊鍗曟嵁鐘舵�佷负2澶勭悊涓�
+        orderMapper.updatePendingSettleByOrderNo(detl.getOrderNo(),2L);
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index 93032b4..a0fcb1b 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -17,6 +17,7 @@
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -364,6 +365,94 @@
                         return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                     }
                     break;
+                // 璺ㄥ贩閬撳簱浣嶇Щ杞畬鎴�
+                case 12:
+                    // 榛樿鐩爣搴撲綅鏄┖鏉�
+                    String locSts2 = "D";
+                    // 搴撲綅绉昏浆鍒ゆ柇鏄惁涓虹┖鏉跨Щ杞�
+                    if (wrkMast.getEmptyMk().equals("N")) {
+                        locSts2 = "F";
+                        // 杞Щ搴撳瓨鏄庣粏鏁版嵁: 搴撳瓨鍙� 鐢卞伐浣滄。婧愬簱浣嶅彉涓虹洰鏍囧簱浣�
+                        if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) {
+//                            exceptionHandle("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触锛沎婧愬簱浣�={0}],[鐩爣搴撲綅={1}]", wrkMast.getSourceLocNo(), wrkMast.getLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("搴撲綅绉昏浆 ===>> 杞Щ搴撳瓨鏄庣粏鏁版嵁澶辫触; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                        }
+                    }
+                    // 璺ㄥ贩閬撶Щ搴擄紝鏇存柊璁㈠崟鏄庣粏鍙婅鍗曠姸鎬�
+                    List<WrkDetl> wrkDetlList2 = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    if (!wrkDetlList2.isEmpty()) {
+                        // 鍒ゆ柇鏈夋棤鍗曟嵁缂栧彿
+                        Optional<WrkDetl> any = wrkDetlList2.stream().filter(wrkDetl -> wrkDetl.getOrderNo() != null).findAny();
+                        if (any.isPresent()) {
+                            String orderNo = any.get().getOrderNo();
+                            // 鏍规嵁鍗曟嵁缂栧彿鍜屽簱浣嶅彿鏌ヨ鍗曟嵁鏄庣粏
+                            List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("order_no",orderNo).eq("specs",wrkMast.getSourceLocNo()));
+                            // 鏇存柊鍗曟嵁鏄庣粏鐨勭Щ搴撶姸鎬�
+                            for(OrderDetl orderDetl: orderDetlList) {
+                                orderDetl.setDanger(2);
+                                orderDetl.setUpdateTime(now);
+                                orderDetlMapper.updateById(orderDetl);
+                            }
+                            // 鍒ゆ柇鍗曟嵁鏄庣粏鏄笉鏄叏閮ㄧЩ搴撳畬鎴�
+                            Integer count = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().lt("danger", 2).eq("order_no", orderNo));
+                            if (count == 0) {
+                                // 鏇存柊鍗曟嵁涓哄凡瀹屾垚
+                                orderMapper.updateSettleByOrderNo(orderNo,4,null);
+                            }
+                        }
+                    } else { // 绌烘澘杞Щ娌℃湁宸ヤ綔鏄庣粏,浣嗘槸瑕佹洿鏂板崟鎹槑缁嗙姸鎬�
+
+                        // 鍙湁涓�鏉′綔涓氫腑鐨勭Щ搴撳崟鎹�
+                        List<Order> orderList = orderMapper.selectList(new EntityWrapper<Order>().eq("doc_type", 24).le("settle", 3));
+                        if(orderList.isEmpty()) {
+                            log.error("娌℃湁鑾峰彇鍒版鍦ㄦ墽琛屼腑鐨勭Щ搴撳崟鎹�");
+                        } else {
+                            Order order = orderList.get(0);
+                            // 鏍规嵁鍗曟嵁缂栧彿鍜屽簱浣嶅彿鏌ヨ鍗曟嵁鏄庣粏
+                            List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("order_no",order.getOrderNo()).eq("specs",wrkMast.getSourceLocNo()));
+                            // 鏇存柊鍗曟嵁鏄庣粏鐨勭Щ搴撶姸鎬�
+                            for(OrderDetl orderDetl: orderDetlList) {
+                                orderDetl.setDanger(2);
+                                orderDetl.setUpdateTime(now);
+                                orderDetlMapper.updateById(orderDetl);
+                            }
+                            // 鍒ゆ柇鍗曟嵁鏄庣粏鏄笉鏄叏閮ㄧЩ搴撳畬鎴�
+                            Integer count = orderDetlMapper.selectCount(new EntityWrapper<OrderDetl>().lt("danger", 2).eq("order_no", order.getOrderNo()));
+                            if (count == 0) {
+                                // 鏇存柊鍗曟嵁涓哄凡瀹屾垚
+                                orderMapper.updateSettleByOrderNo(order.getOrderNo(),4,null);
+                            }
+                        }
+
+                    }
+
+                    // 淇敼婧愬簱浣嶇姸鎬� ==> O
+                    LocMast sourceLoc2 = locMastService.selectById(wrkMast.getSourceLocNo());
+                    if (null != sourceLoc2) {
+                        sourceLoc2.setBarcode("");
+                        sourceLoc2.setLocSts("O");
+                        sourceLoc2.setSheetNo("0");
+                        sourceLoc2.setModiTime(now);
+                        sourceLoc2.setIoTime(now);
+                        if (!locMastService.updateById(sourceLoc2)) {
+//                            exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐ワ紱[workNo={0}],[sourceLoc={1}]", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼婧愬簱浣嶇姸鎬佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                        }
+                    }
+                    // 淇敼鐩爣搴撲綅鐘舵�� ==> .locSts
+                    locMast.setLocSts(locSts2);
+                    locMast.setBarcode(wrkMast.getBarcode());
+                    locMast.setSheetNo("0");
+                    locMast.setIoTime(now);
+                    locMast.setModiTime(now);
+                    if (!locMastService.updateById(locMast)) {
+//                        exceptionHandle("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐ワ紱[workNo={0}],[locNo={1}]", wrkMast.getWrkNo(), wrkMast.getLocNo());
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        return FAIL.setMsg("搴撲綅绉昏浆 ===>> 淇敼鐩爣搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
+                    }
+                    break;
                 default:
                     break;
             }
diff --git a/src/main/resources/mapper/OrderDetlMapper.xml b/src/main/resources/mapper/OrderDetlMapper.xml
index 84b5fb9..371ada8 100644
--- a/src/main/resources/mapper/OrderDetlMapper.xml
+++ b/src/main/resources/mapper/OrderDetlMapper.xml
@@ -126,6 +126,18 @@
         and mdt.pakout = 1
         <include refid="pakOutPageCondition"></include>
     </select>
+    <select id="selectMoveLocDetl" resultMap="BaseResultMap">
+        select
+        md.*
+        from
+        man_order mo
+        left join man_order_detl md on
+        mo.order_no = md.order_no
+        where
+        mo.doc_type = 24
+        and mo.settle &lt;= 2
+        and md.danger = 0
+    </select>
 
     <update id="increase">
         update man_order_detl
@@ -171,7 +183,7 @@
     </insert>
     <insert id="batchDetls">
         INSERT INTO
-        man_order_detl(brand,batch,order_id,order_no,create_by,create_time,status,qty,anfme)
+        man_order_detl(brand,batch,order_id,order_no,specs,model,be_batch,create_by,create_time,status,qty,anfme)
         VALUES
         <foreach collection="list" item="item" index="index" separator=",">
             (
@@ -179,6 +191,9 @@
             #{item.batch},
             #{item.orderId},
             #{item.orderNo},
+             #{item.specs},
+             #{item.model},
+             #{item.beBatch},
             #{item.createBy},
             #{item.createTime},
             #{item.status},
diff --git a/src/main/resources/mapper/OrderMapper.xml b/src/main/resources/mapper/OrderMapper.xml
index 9a84bc0..be78b61 100644
--- a/src/main/resources/mapper/OrderMapper.xml
+++ b/src/main/resources/mapper/OrderMapper.xml
@@ -66,6 +66,9 @@
     <update id="updateStatusByOrderNo">
         update man_order set account_day = #{status},update_time = getdate(),update_by = #{userId} where order_no = #{orderNo}
     </update>
+    <update id="updatePendingSettleByOrderNo">
+        update man_order set settle = #{status},update_time = getdate() where order_no = #{orderNo} and settle = 1
+    </update>
 
     <select id="selectComplete" resultMap="BaseResultMap">
         select
diff --git a/src/main/webapp/static/js/order/order.js b/src/main/webapp/static/js/order/order.js
index 2f5ff3d..8ff12fe 100644
--- a/src/main/webapp/static/js/order/order.js
+++ b/src/main/webapp/static/js/order/order.js
@@ -261,6 +261,10 @@
                             // {field: 'color', title: '棰滆壊'},
                             // {field: 'specs', title: '鎺ュご'},
                             {field: 'qty$', title: '鍑哄簱鐘舵��', style: 'font-weight: bold'},
+                            {field: 'specs', title: '婧愬簱浣�', style: 'font-weight: bold'},
+                            {field: 'model', title: '鐩爣搴撲綅', style: 'font-weight: bold'},
+                            {field: 'beBatch', title: '璺ㄥ贩閬�', style: 'font-weight: bold'},
+                            {field: 'danger$', title: '绉诲簱鐘舵��', style: 'font-weight: bold'},
                             {field: 'inspect$', title: '澶囪揣鐘舵��', style: 'font-weight: bold'}
                         ]],
                         request: {

--
Gitblit v1.9.1