From 0eb4bcffe0c6e017f9a9967576f12818c9b05db7 Mon Sep 17 00:00:00 2001
From: 18516761980 <4761516tqsxp>
Date: 星期六, 11 九月 2021 13:36:44 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/mapper/LocDetlMapper.java               |    4 
 src/main/java/com/zy/asrs/utils/VersionUtils.java                 |   43 +
 src/main/java/com/zy/asrs/mapper/PltBarcodeMapper.java            |    8 
 src/main/resources/mapper/LocMastMapper.xml                       |   15 
 src/main/java/com/zy/asrs/service/impl/MatStoreServiceImpl.java   |    5 
 src/main/java/com/zy/asrs/task/PltBarcodeLogScheduler.java        |   30 +
 src/main/java/com/zy/common/web/WcsController.java                |   35 +
 src/main/resources/mapper/WaitMatoutMapper.xml                    |    1 
 src/main/webapp/static/js/ioCompleteLog/ioCompleteLog.js          |    2 
 src/main/webapp/static/js/waitMatoutLog/waitMatoutLog.js          |    2 
 src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java         |    9 
 src/main/webapp/static/js/pltBarcode/pltBarcode.js                |    4 
 src/main/java/com/zy/asrs/utils/Utils.java                        |  175 ++++++++
 src/main/java/com/zy/ints/controller/WaitMatinLogController.java  |   16 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java       |   92 +--
 src/main/java/com/zy/asrs/mapper/LocMastMapper.java               |    7 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java     |   12 
 src/main/java/com/zy/ints/controller/IoCompleteLogController.java |   16 
 src/main/webapp/views/waitMatchkLog/waitMatchkLog.html            |   12 
 src/main/java/com/zy/common/service/CommonService.java            |  328 ++++++++++++++--
 src/main/webapp/views/waitMatoutLog/waitMatoutLog.html            |   12 
 src/main/webapp/views/waitMatchk/waitMatchk.html                  |   54 +-
 src/main/java/com/zy/asrs/service/impl/PltBarcodeServiceImpl.java |   13 
 src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java    |   13 
 src/main/webapp/static/js/waitMatchkLog/waitMatchkLog.js          |    2 
 src/main/java/com/zy/asrs/service/LocDetlService.java             |    2 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java       |   35 +
 src/main/webapp/static/js/waitMatinLog/waitMatinLog.js            |    2 
 src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java    |    4 
 src/main/resources/mapper/WaitMatinMapper.xml                     |    1 
 src/main/webapp/views/ioCompleteLog/ioCompleteLog.html            |   12 
 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java    |    4 
 src/main/java/com/zy/ints/task/IoCompleteLogScheduler.java        |    2 
 src/main/java/com/zy/common/model/LocTypeDto.java                 |   27 
 src/main/java/com/zy/asrs/task/handler/PltBarcodeLogHandle.java   |   39 +
 src/main/java/com/zy/asrs/service/PltBarcodeService.java          |    4 
 src/main/java/com/zy/ints/controller/WaitMatoutLogController.java |   16 
 src/main/webapp/views/waitMatinLog/waitMatinLog.html              |   12 
 src/main/java/com/zy/common/properties/SlaveProperties.java       |   24 +
 src/main/java/com/zy/ints/controller/IoCompleteController.java    |   16 
 src/main/java/com/zy/ints/controller/WaitMatchkLogController.java |   16 
 src/main/java/com/zy/ints/controller/WaitMatchkController.java    |   16 
 src/main/java/com/zy/asrs/controller/MatStoreController.java      |    1 
 src/main/java/com/zy/asrs/service/LocMastService.java             |    9 
 src/main/resources/application.yml                                |    9 
 45 files changed, 911 insertions(+), 250 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/MatStoreController.java b/src/main/java/com/zy/asrs/controller/MatStoreController.java
index bbfe7ff..d7ce416 100644
--- a/src/main/java/com/zy/asrs/controller/MatStoreController.java
+++ b/src/main/java/com/zy/asrs/controller/MatStoreController.java
@@ -28,7 +28,6 @@
     @RequestMapping("/mat/store/start")
     @ManagerAuth(memo = "鍏ュ簱鍚姩(閫氱煡妗�)")
     public R matStoreStart(@RequestBody FullStoreParam fullStoreParam) {
-//        return R.ok("鍏ュ簱鍚姩鎴愬姛").add(workService.startupFullPutStore(fullStoreParam,getUserId()));
         return R.ok("鍏ュ簱鍚姩鎴愬姛").add(matStoreService.startupFullStore(fullStoreParam,getUserId()));
     }
 }
diff --git a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
index af54ed6..e7bd2f6 100644
--- a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -25,8 +25,8 @@
     @Update("update asr_loc_detl set loc_no = #{newLocNo}, modi_time=getDate() where loc_no = #{oldLocNo}")
     int updateLocNo(String newLocNo, String oldLocNo);
 
-    @Select("SELECT ld.loc_no FROM asr_loc_detl ld LEFT JOIN asr_loc_mast lm ON ld.loc_no = lm.loc_no WHERE (1 = 1 AND ld.mat_no = #{matNo} AND lm.loc_sts = 'F' AND DateDiff(dd, lm.modi_time, getdate()) = 0) ORDER BY lm.modi_time ASC")
-    List<String> selectSameDetlToday(String matNo);
+    @Select("SELECT ld.loc_no FROM asr_loc_detl ld LEFT JOIN asr_loc_mast lm ON ld.loc_no = lm.loc_no WHERE (1 = 1 AND ld.mat_no = #{matNo} AND (lm.row1 >= #{start} AND lm.row1 <= #{end})  AND lm.loc_sts = 'F' AND DateDiff(dd, lm.modi_time, getdate()) = 0) ORDER BY lm.modi_time ASC")
+    List<String> selectSameDetlToday(@Param("matNo") String matNo, @Param("start") Integer start, @Param("end") Integer end);
 
     List<LocDetl> selectLocDetlList(@Param("mat_no") String matNo);
 
diff --git a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
index 57c635b..ed685a1 100644
--- a/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -13,9 +13,14 @@
 @Repository
 public interface LocMastMapper extends BaseMapper<LocMast> {
 
-    LocMast queryFreeLocMast(@Param("row") Integer row);
+    LocMast queryFreeLocMast(@Param("row") Integer row, @Param("locType1") Short locType1, @Param("locType2") Short locType2, @Param("locType3") Short locType3);
 
     @Select("select loc_no from asr_loc_mast where 1=1 and loc_sts = 'O' and crn_no = #{crnNo}")
     List<String> queryGroupEmptyStock(Integer crnNo);
 
+//    @Select("select count(*) as count from asr_loc_mast where 1=1 and loc_sts = 'O' and loc_type1 = #{locType1} and loc_type2 = #{locType2} and loc_type3 = #{locType3} and crn_no = #{crnNo}")
+@Select("select count(*) as count from asr_loc_mast where 1=1 and loc_sts = 'O' and crn_no = #{crnNo} and (loc_type1 is null or loc_type1 = #{locType1}) " +
+        "and (loc_type2 is null or loc_type2 = #{locType2}) and (loc_type3 is null or loc_type3 = #{locType3}) ")
+    Integer selectEmptyLocCount(@Param("locType1") Short locType1, @Param("locType2") Short locType2, @Param("locType3") Short locType3, @Param("crnNo") Integer crnNo);
+
 }
diff --git a/src/main/java/com/zy/asrs/mapper/PltBarcodeMapper.java b/src/main/java/com/zy/asrs/mapper/PltBarcodeMapper.java
index 5615121..1833bd7 100644
--- a/src/main/java/com/zy/asrs/mapper/PltBarcodeMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/PltBarcodeMapper.java
@@ -1,12 +1,18 @@
 package com.zy.asrs.mapper;
 
-import com.zy.asrs.entity.PltBarcode;
 import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.PltBarcode;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
 
 @Mapper
 @Repository
 public interface PltBarcodeMapper extends BaseMapper<PltBarcode> {
 
+    @Select("select * from asr_plt_barcode where io_status>=2")
+    List<PltBarcode> selectToBeHistoryData();
+
 }
diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java
index 119d56f..f5860b0 100644
--- a/src/main/java/com/zy/asrs/service/LocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -24,7 +24,7 @@
      * @param matNo 浜у搧鍙�
      * @return locNo 搴撲綅鍙�
      */
-    List<String> getSameDetlToday(String matNo);
+    List<String> getSameDetlToday(String matNo, Integer start, Integer end);
 
     /**
      *
diff --git a/src/main/java/com/zy/asrs/service/LocMastService.java b/src/main/java/com/zy/asrs/service/LocMastService.java
index 95932ad..4dea9b5 100644
--- a/src/main/java/com/zy/asrs/service/LocMastService.java
+++ b/src/main/java/com/zy/asrs/service/LocMastService.java
@@ -10,7 +10,7 @@
     /**
      * 妫�绱㈠彲鐢ㄥ簱浣�
      */
-    LocMast queryFreeLocMast(Integer row);
+    LocMast queryFreeLocMast(Integer row, Short locType1, Short locType2, Short locType3);
 
     /**
      * 鑾峰彇鍚岀粍璐ф灦鐨勭┖搴撲綅
@@ -18,4 +18,11 @@
      * @return 鍚岀粍绌哄簱浣嶉泦鍚�
      */
     List<String> queryGroupEmptyStock(String sourceLocNo);
+
+    /**
+     * 妫�鏌ュ綋鍓嶅簱浣嶆墍灞炲贩閬撶殑绌哄簱浣嶆暟閲�
+     * @param locMast
+     * @return
+     */
+    Boolean checkEmptyCount(LocMast locMast);
 }
diff --git a/src/main/java/com/zy/asrs/service/PltBarcodeService.java b/src/main/java/com/zy/asrs/service/PltBarcodeService.java
index 7ec5a15..4ae3619 100644
--- a/src/main/java/com/zy/asrs/service/PltBarcodeService.java
+++ b/src/main/java/com/zy/asrs/service/PltBarcodeService.java
@@ -3,6 +3,10 @@
 import com.zy.asrs.entity.PltBarcode;
 import com.baomidou.mybatisplus.service.IService;
 
+import java.util.List;
+
 public interface PltBarcodeService extends IService<PltBarcode> {
 
+    public List<PltBarcode> selectToBeHistoryData();
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
index 91aca46..a53840d 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -41,8 +41,8 @@
     }
 
     @Override
-    public List<String> getSameDetlToday(String matNo) {
-        return this.baseMapper.selectSameDetlToday(matNo);
+    public List<String> getSameDetlToday(String matNo, Integer start, Integer end) {
+        return this.baseMapper.selectSameDetlToday(matNo, start, end);
     }
 
     @Override
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 c90868c..12cd14e 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -18,8 +18,8 @@
     private RowLastnoService rowLastnoService;
 
     @Override
-    public LocMast queryFreeLocMast(Integer row) {
-        return this.baseMapper.queryFreeLocMast(row);
+    public LocMast queryFreeLocMast(Integer row, Short locType1, Short locType2, Short locType3) {
+        return this.baseMapper.queryFreeLocMast(row, locType1, locType2, locType3);
     }
 
     @Override
@@ -33,4 +33,13 @@
         }
         return this.baseMapper.queryGroupEmptyStock(sourceStock.getCrnNo());
     }
+
+    @Override
+    public Boolean checkEmptyCount(LocMast locMast) {
+        if (locMast == null) {
+            return false;
+        }
+        return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getLocType2(), locMast.getLocType3(), locMast.getCrnNo()) > 1;
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MatStoreServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MatStoreServiceImpl.java
index 05bd433..fcc708d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MatStoreServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MatStoreServiceImpl.java
@@ -8,6 +8,7 @@
 import com.zy.asrs.entity.param.FullStoreParam;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.VersionUtils;
+import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
 import com.zy.ints.entity.WaitMatin;
@@ -57,7 +58,9 @@
         int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
         // 妫�绱㈠簱浣�
         List<String> matNos = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatNo).distinct().collect(Collectors.toList());
-        StartupDto startupDtodto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matNos, 0);
+        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+        locTypeDto.setLocType1((short) 1);
+        StartupDto startupDtodto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(),false, matNos,locTypeDto, 0);
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 52ccdc3..b3b7741 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -16,7 +16,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Random;
 
 /**
  * 绉诲姩绔湇鍔℃牳蹇冪被
@@ -53,15 +55,21 @@
 
         Date now = new Date();
         if (Cools.isEmpty(param.getBillNo())) {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+            Random rand = new Random();
+            Integer r = rand.nextInt(900)+ 100;
+            String billNo = sdf.format(new Date()) + r;
+            Integer seqNo=0;
             for (CombParam.CombMat combMat : param.getCombMats()) {
                 MatCode matCode = matCodeService.selectOne(new EntityWrapper<MatCode>().eq("mat_no", combMat.getMatNo()));
                 if (Cools.isEmpty(matCode)) {
                     throw new CoolException("鐗╂枡鏁版嵁閿欒");
                 }
+                seqNo++;
                 PltBarcode pltBarcode = new PltBarcode();
                 pltBarcode.setBarcode(param.getBarcode());
-                pltBarcode.setBillNo("");
-                pltBarcode.setSeqNo(0);
+                pltBarcode.setBillNo(billNo);
+                pltBarcode.setSeqNo(seqNo);
                 pltBarcode.setBillType(5);
                 pltBarcode.setMatNo(matCode.getMatNo());
                 pltBarcode.setMatName(matCode.getMatName());
diff --git a/src/main/java/com/zy/asrs/service/impl/PltBarcodeServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/PltBarcodeServiceImpl.java
index 6bb6e49..d35d875 100644
--- a/src/main/java/com/zy/asrs/service/impl/PltBarcodeServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/PltBarcodeServiceImpl.java
@@ -1,12 +1,19 @@
 package com.zy.asrs.service.impl;
 
-import com.zy.asrs.mapper.PltBarcodeMapper;
-import com.zy.asrs.entity.PltBarcode;
-import com.zy.asrs.service.PltBarcodeService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.PltBarcode;
+import com.zy.asrs.mapper.PltBarcodeMapper;
+import com.zy.asrs.service.PltBarcodeService;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 @Service("pltBarcodeService")
 public class PltBarcodeServiceImpl extends ServiceImpl<PltBarcodeMapper, PltBarcode> implements PltBarcodeService {
 
+    @Override
+    public List<PltBarcode> selectToBeHistoryData() {
+        return this.baseMapper.selectToBeHistoryData();
+    }
+
 }
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 b67cfb9..a489602 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -14,12 +14,11 @@
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.VersionUtils;
 import com.zy.common.model.LocDetlDto;
+import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.OutLocDto;
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
-import com.zy.ints.entity.IoComplete;
 import com.zy.ints.entity.WaitMatchk;
-import com.zy.ints.entity.WaitMatout;
 import com.zy.ints.service.IoCompleteService;
 import com.zy.ints.service.WaitMatchkService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -83,7 +82,9 @@
         int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
         // 妫�绱㈠簱浣�
         List<String> matNos = param.getList().stream().map(FullStoreParam.MatCodeStore::getMatNo).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(), matNos, 0);
+        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+        locTypeDto.setLocType1((short) 1);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 1, param.getDevpNo(),false, matNos,locTypeDto, 0);
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
@@ -156,7 +157,7 @@
             }
         }
         if (!locDetlDtos.isEmpty()) {
-            // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
+            // 鍚姩鍑哄簱寮�濮� 101.103鍑哄簱
             stockOut(staNo, locDetlDtos, null, userId);
         } else {
             throw new CoolException("搴撲綅浜у搧涓嶅瓨鍦�");
@@ -183,37 +184,38 @@
             }
             dtos.add(new OutLocDto(locNo, list));
         }
-        //鐢熸垚鐩樼偣鏂囨。
-        for (LocDetlDto locDetlDto : locDetlDtos) {
 
-            String id="";
+        if(ioType == 107) {
             //鑾峰彇褰撳墠鏃堕棿鎴�
             SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
             String temp = sf.format(new Date());
-            //鑾峰彇6浣嶉殢鏈烘暟
-            int random=(int) ((Math.random()+1)*1000);
-            id=temp+random;
-
+            //鑾峰彇3浣嶉殢鏈烘暟
+            Random rand = new Random();
+            Integer r = rand.nextInt(900) + 100;
+            String billNo = temp + r;
+            //鐢熸垚鐩樼偣閫氱煡妗�
+            for (LocDetlDto locDetlDto : locDetlDtos) {
 //            String replace = UUID.randomUUID().toString().replace("-", "");
-            LocDetl locDetl = locDetlDto.getLocDetl();
-            //鐢熸垚鐩樼偣妗�
-            WaitMatchk waitMatchk = new WaitMatchk();
-            waitMatchk.setBillNo(id);//璁㈠崟缂栧彿
-            waitMatchk.setLocNo(locDetl.getLocNo());//搴撲綅鍙�
-            waitMatchk.setStockQty(locDetl.getQty());
-            waitMatchk.setMatNo(locDetl.getMatNo());//浜у搧缂栧彿
-            waitMatchk.setMatName(locDetl.getMatName());//閾插钩鍚嶇О
-            waitMatchk.setSeqNo(i);
-            waitMatchk.setIoTime(new Date());
-            waitMatchk.setZpallet(locDetl.getZpallet());
-            waitMatchk.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
-            waitMatchk.setAppeTime(new Date());
-            waitMatchk.setModiUser(userId);
-            waitMatchk.setModiTime(new Date());
-            if (!waitMatchkService.insert(waitMatchk)){
-                throw new CoolException("淇濆瓨鐩樼偣妗eけ璐�");
+                LocDetl locDetl = locDetlDto.getLocDetl();
+                //鐢熸垚鐩樼偣妗�
+                WaitMatchk waitMatchk = new WaitMatchk();
+                waitMatchk.setBillNo(billNo);//璁㈠崟缂栧彿
+                waitMatchk.setLocNo(locDetl.getLocNo());//搴撲綅鍙�
+                waitMatchk.setStockQty(locDetl.getQty());
+                waitMatchk.setMatNo(locDetl.getMatNo());//浜у搧缂栧彿
+                waitMatchk.setMatName(locDetl.getMatName());//閾插钩鍚嶇О
+                waitMatchk.setSeqNo(i);
+                waitMatchk.setIoTime(new Date());
+                waitMatchk.setZpallet(locDetl.getZpallet());
+                waitMatchk.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
+                waitMatchk.setAppeTime(new Date());
+                waitMatchk.setModiUser(userId);
+                waitMatchk.setModiTime(new Date());
+                if (!waitMatchkService.insert(waitMatchk)) {
+                    throw new CoolException("淇濆瓨鐩樼偣妗eけ璐�");
+                }
+                i++;
             }
-            i++;
         }
 
         // 鐢熸垚宸ヤ綔妗�
@@ -236,7 +238,6 @@
             }
             // 鐢熸垚宸ヤ綔鍙�
             int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
-
 
             // 鐢熸垚宸ヤ綔妗�
             WrkMast wrkMast = new WrkMast();
@@ -302,7 +303,9 @@
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
         // 妫�绱㈠簱浣�
-        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, null, 0);
+        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+        locTypeDto.setLocType1((short) 1);
+        StartupDto dto = commonService.getLocNo(DEFAULT_ROW_NO_TYPE, 10, devpNo, true,null,locTypeDto, 0);
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
         wrkMast.setWrkNo(workNo);
@@ -533,32 +536,7 @@
         } else if (wrkMast.getWrkSts() > 10) {
             wrkMast.setWrkSts(14L);
         }
-        //鏌ヨ鏄庣粏
-        List<WrkDetl> detls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
-        int i=1;
-        for (WrkDetl detl : detls) {
-            //鐢熸垚鍥炴姤妗�
-            IoComplete ioComplete = new IoComplete();
-            ioComplete.setBillNo(detl.getBillNo());
-            ioComplete.setMatNo(detl.getMatNo());
-            ioComplete.setMatName(detl.getMatName());
-            ioComplete.setSeqNo(i);
-            ioComplete.setQty(detl.getQty());
-            ioComplete.setZpallet(detl.getZpallet());
-            ioComplete.setAppeUser(userId);
-            if (wrkMast.getWrkSts()==4L){
-                ioComplete.setTaskType(1);
-                ioComplete.setLocNo(wrkMast.getLocNo());
-            }else if (wrkMast.getWrkSts()==14L){
-                ioComplete.setTaskType(2);
-                ioComplete.setLocNo(wrkMast.getSourceLocNo());
-            }
-            ioComplete.setAppeTime(new Date());
-            if (!ioCompleteService.insert(ioComplete)){
-                throw new CoolException("鐢熸垚鍥炴姤妗eけ璐�");
-            }
-            i++;
-        }
+
         // 瀹屾垚鎿嶄綔浜哄憳璁板綍
         wrkMast.setManuType("鎵嬪姩瀹屾垚");
         Date now = new Date();
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
index a4c1ff4..77f6ceb 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -40,8 +40,8 @@
             wrkDetl.setIoTime(new Date());
             wrkDetl.setQty(dto.getCount()); // 鏁伴噺
             VersionUtils.setWrkDetl(wrkDetl, matCode); // 鐗堟湰鎺у埗
-            wrkDetl.setBillNo("0");
-            wrkDetl.setSeqNo(0);
+            wrkDetl.setBillNo((null != dto.getBillNo()) ? dto.getBillNo() : "0");
+            wrkDetl.setSeqNo((null != dto.getSeqNo()) ? dto.getSeqNo() : 0);
             wrkDetl.setZpallet(barcode); // 鎵樼洏鏉$爜
             wrkDetl.setAppeUser(userId);
             wrkDetl.setAppeTime(new Date());
diff --git a/src/main/java/com/zy/asrs/task/PltBarcodeLogScheduler.java b/src/main/java/com/zy/asrs/task/PltBarcodeLogScheduler.java
new file mode 100644
index 0000000..28c206a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/PltBarcodeLogScheduler.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.task;
+
+import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.handler.PltBarcodeLogHandle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by vincent on 2021/9/10
+ */
+@Component
+public class PltBarcodeLogScheduler {
+
+    private static final Logger log = LoggerFactory.getLogger(PltBarcodeLogScheduler.class);
+
+    @Autowired
+    private PltBarcodeLogHandle pltBarcodeLogHandle;
+
+    @Scheduled(cron = "0/30 * * * * ? ")
+    private void execute(){
+        ReturnT<String> returnT = pltBarcodeLogHandle.start();
+        if (!returnT.isSuccess()) {
+            log.error(returnT.getMsg());
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java b/src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java
index d2cecf1..bd76722 100644
--- a/src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/PlcLogHandler.java
@@ -28,6 +28,15 @@
                     exceptionHandle("鍫嗗灈鏈�&PLC鍛戒护杞巻鍙叉。閿欒 ! ");
                 }
             }
+
+//            //鏉$爜缁勬墭鏁版嵁杞巻鍙叉。 2021-09-10 TQS ADD
+//            int updateBarcodeCount = jdbcTemplate.update("insert into asr_plt_barcode_log select * from asr_plt_barcode where io_status>=2;");
+//            if (updateBarcodeCount > 0) {
+//                int deleteBarcodeCount = jdbcTemplate.update("delete from asr_plt_barcode where io_status>=2;");
+//                if (deleteBarcodeCount <= 0) {
+//                    exceptionHandle("鏉$爜缁勬墭鏁版嵁杞巻鍙叉。閿欒 ! ");
+//                }
+//            }
         } catch (Exception e) {
             e.printStackTrace();
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
diff --git a/src/main/java/com/zy/asrs/task/handler/PltBarcodeLogHandle.java b/src/main/java/com/zy/asrs/task/handler/PltBarcodeLogHandle.java
new file mode 100644
index 0000000..718cce6
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/handler/PltBarcodeLogHandle.java
@@ -0,0 +1,39 @@
+package com.zy.asrs.task.handler;
+
+import com.zy.asrs.task.AbstractHandler;
+import com.zy.asrs.task.core.ReturnT;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+/**
+ * Created by TQS on 2021/9/10
+ */
+@Service
+public class PltBarcodeLogHandle extends AbstractHandler<String> {
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Transactional
+    public ReturnT<String> start() {
+        try {
+            //鏉$爜缁勬墭鏁版嵁杞巻鍙叉。 2021-09-10 TQS ADD
+            int updateCount = jdbcTemplate.update("insert into asr_plt_barcode_log select * from asr_plt_barcode where io_status>=2;");
+            if (updateCount > 0) {
+                int deleteCount = jdbcTemplate.update("delete from asr_plt_barcode where io_status>=2;");
+                if (deleteCount <= 0) {
+                    exceptionHandle("鏉$爜缁勬墭鏁版嵁杞巻鍙叉。閿欒 ! ");
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+        return SUCCESS;
+    }
+
+}
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 0d02f62..ab64af7 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -1,14 +1,9 @@
 package com.zy.asrs.task.handler;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
-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.service.LocDetlService;
-import com.zy.asrs.service.LocMastService;
-import com.zy.asrs.service.WrkDetlService;
-import com.zy.asrs.service.WrkMastService;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.service.*;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.utils.VersionUtils;
@@ -46,6 +41,8 @@
     private WaitMatoutService waitMatoutService;
     @Autowired
     private IoCompleteService ioCompleteService;
+    @Autowired
+    private PltBarcodeService pltBarcodeService;
 
     /**
      * ERP鎺ュ彛鏄惁鍚敤
@@ -76,6 +73,7 @@
                 case 10:
                     // 淇敼搴撲綅鐘舵��=D
                     if (locMast.getLocSts().equals("S") || locMast.getLocSts().equals("Q")) {
+                        locMast.setFullPlt(wrkMast.getFullPlt());
                         locMast.setLocSts("D");
                         locMast.setIoTime(now);
                         locMast.setModiTime(now);
@@ -115,6 +113,18 @@
                             }
                         }
 
+                        //鏇存柊缁勬墭鏁版嵁鐘舵�佷负鍏ュ簱瀹屾垚 IoStatus ====>> 2
+                        Wrapper<PltBarcode> wrapper = new EntityWrapper<PltBarcode>().eq("barcode", wrkDetl.getZpallet())
+                                .eq("bill_no", wrkDetl.getBillNo()).eq("seq_no", wrkDetl.getSeqNo()).eq("mat_no", wrkDetl.getMatNo());
+                        PltBarcode pltBarcode = pltBarcodeService.selectOne(wrapper);
+                        if(null != pltBarcode) {
+                            pltBarcode.setIoStatus(2);//鍏ュ簱瀹屾垚
+                            boolean res = pltBarcodeService.update(pltBarcode, wrapper);
+                            if(!res){
+//                                exceptionHandle("鍏ㄦ澘鍏ュ簱 ===>> 鏇存柊缁勬墭鏁版嵁澶辫触锛沎workNo={0}],[billNo={1}],[seqNo={2}]", wrkMast.getWrkNo(),wrkDetl.getBillNo(),wrkDetl.getSeqNo());
+                            }
+                        }
+
                         // 鏇存柊鍏ュ簱閫氱煡妗� ioStatus ====>> 2
                         WaitMatin waitMatin = waitMatinService.selectOne(new EntityWrapper<WaitMatin>().eq("bill_no",wrkDetl.getBillNo()).eq("seq_no",wrkDetl.getSeqNo()));
                         if(null != waitMatin && waitMatin.getInQty() >= waitMatin.getQty()){
@@ -149,6 +159,7 @@
                     }
                     // 淇敼搴撲綅鐘舵�� S ====>> F
                     if (locMast.getLocSts().equals("S")) {
+                        locMast.setFullPlt(wrkMast.getFullPlt());
                         locMast.setLocSts("F");
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
@@ -207,6 +218,7 @@
                     }
                     // 淇敼搴撲綅鐘舵�� Q ====>> F
                     if (locMast.getLocSts().equals("Q")) {
+                        locMast.setFullPlt(wrkMast.getFullPlt());
                         locMast.setLocSts("F");
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
@@ -275,6 +287,7 @@
                     }
                     // 淇敼搴撲綅鐘舵�� Q ====>> F
                     if (locMast.getLocSts().equals("Q")) {
+                        locMast.setFullPlt(wrkMast.getFullPlt());
                         locMast.setLocSts("F");
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
@@ -293,6 +306,7 @@
                     }
                     // 淇敼搴撲綅鐘舵�� Q ====>> F
                     if (locMast.getLocSts().equals("Q")) {
+                        locMast.setFullPlt(wrkMast.getFullPlt());
                         locMast.setLocSts("F");
                         locMast.setBarcode(wrkMast.getBarcode());
                         locMast.setIoTime(now);
@@ -316,7 +330,9 @@
                     }
                     // 淇敼婧愬簱浣嶇姸鎬� ==> O
                     LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo());
+                    String fullPlt = sourceLoc.getFullPlt();
                     if (null != sourceLoc) {
+                        sourceLoc.setFullPlt("N");
                         sourceLoc.setBarcode("");
                         sourceLoc.setLocSts("O");
                         sourceLoc.setModiTime(now);
@@ -326,6 +342,7 @@
                         }
                     }
                     // 淇敼鐩爣搴撲綅鐘舵�� ==> .locSts
+                    locMast.setFullPlt(fullPlt);
                     locMast.setLocSts(locSts);
                     locMast.setBarcode(wrkMast.getBarcode());
                     locMast.setIoTime(now);
@@ -403,6 +420,7 @@
                     }
                     // 淇敼婧愬簱浣嶇姸鎬� R ===>> O
                     if (locMast.getLocSts().equals("R")) {
+                        locMast.setFullPlt("N");
                         locMast.setLocSts("O");
                         locMast.setBarcode("");
                         locMast.setModiTime(now);
@@ -416,6 +434,7 @@
                 case 110:
                     // 淇敼搴撲綅鐘舵�� R ===>> O
                     if (locMast.getLocSts().equals("R")) {
+                        locMast.setFullPlt("N");
                         locMast.setLocSts("O");
                         locMast.setBarcode("");
                         locMast.setModiTime(now);
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
new file mode 100644
index 0000000..e80f7e5
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -0,0 +1,175 @@
+package com.zy.asrs.utils;
+
+import com.core.common.Arith;
+import com.core.common.Cools;
+import com.zy.common.properties.SlaveProperties;
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/8/27
+ */
+public class Utils {
+
+    private static final DecimalFormat fmt = new DecimalFormat("##0.00");
+
+    public static float scale(Float f){
+        if (f == null || f == 0f || Float.isNaN(f)) {
+            return 0f;
+        }
+        return (float) Arith.multiplys(2, f, 1);
+    }
+
+    public static String zerofill(String msg, Integer count){
+        if (msg.length() == count){
+            return msg;
+        } else if (msg.length() > count){
+            return msg.substring(0, 16);
+        } else {
+            StringBuilder msgBuilder = new StringBuilder(msg);
+            for (int i = 0; i<count-msg.length(); i++){
+                msgBuilder.insert(0,"0");
+            }
+            return msgBuilder.toString();
+        }
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁涓烘繁搴撲綅
+     */
+    public static boolean isDeepLoc(SlaveProperties slaveProperties, String locNo){
+        if (slaveProperties.isDoubleDeep()) {
+            int row = getRow(locNo);
+            return slaveProperties.getDoubleLocs().contains(row);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁涓烘繁搴撲綅
+     */
+    public static boolean isDeepLoc(SlaveProperties slaveProperties, Integer row){
+        if (slaveProperties.isDoubleDeep()) {
+            return slaveProperties.getDoubleLocs().contains(row);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁涓烘祬搴撲綅
+     */
+    public static boolean isShallowLoc(SlaveProperties slaveProperties, String locNo){
+        if (slaveProperties.isDoubleDeep()) {
+            int row = getRow(locNo);
+            return !slaveProperties.getDoubleLocs().contains(row);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁涓烘祬搴撲綅
+     */
+    public static boolean isShallowLoc(SlaveProperties slaveProperties, Integer row){
+        if (slaveProperties.isDoubleDeep()) {
+            return !slaveProperties.getDoubleLocs().contains(row);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 鑾峰彇 娣卞簱浣嶅搴旂殑娴呭簱浣嶅彿
+     */
+    public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) {
+        int row = getRow(deepLoc);
+        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
+        int shallowRow = remainder == 1 ? (row + 1) : (row - 1);
+        return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2);
+    }
+
+    /**
+     * 鑾峰彇 娣卞簱浣嶆帓瀵瑰簲鐨勬祬搴撲綅鎺�
+     */
+    public static Integer getShallowRow(SlaveProperties slaveProperties, Integer deepRow) {
+        int remainder = (int) Arith.remainder(deepRow, slaveProperties.getGroupCount());
+        return remainder == 1 ? (deepRow + 1) : (deepRow - 1);
+    }
+
+    /**
+     * 鑾峰彇 娴呭簱浣嶅搴旂殑娣卞簱浣嶅彿
+     */
+    public static String getDeepLoc(SlaveProperties slaveProperties, String shallowLoc) {
+        int row = getRow(shallowLoc);
+        int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount());
+        int targetRow;
+        if (remainder == 2) {
+            targetRow = row - 1;
+        } else if (remainder == 3) {
+            targetRow = row + 1;
+        } else {
+            throw new RuntimeException(shallowLoc + "涓嶆槸娴呭簱浣嶏紝绯荤粺绻佸繖");
+        }
+        return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
+    }
+
+    /**
+     * 鑾峰彇 娴呭簱浣嶆帓瀵瑰簲鐨勬繁搴撲綅鎺�
+     */
+    public static Integer getDeepRow(SlaveProperties slaveProperties, Integer shallowRow) {
+        int remainder = (int) Arith.remainder(shallowRow, slaveProperties.getGroupCount());
+        int targetRow;
+        if (remainder == 2) {
+            targetRow = shallowRow - 1;
+        } else if (remainder == 3) {
+            targetRow = shallowRow + 1;
+        } else {
+            throw new RuntimeException(shallowRow + "涓嶆槸娴呭簱浣嶆帓锛岀郴缁熺箒蹇�");
+        }
+        return targetRow;
+    }
+
+    /**
+     * 閫氳繃搴撲綅鍙疯幏鍙� 鎺�
+     */
+    public static int getRow(String locNo) {
+        if (!Cools.isEmpty(locNo)) {
+            return Integer.parseInt(locNo.substring(0, 2));
+        }
+        throw new RuntimeException("搴撲綅瑙f瀽寮傚父");
+    }
+
+    /**
+     * 褰撴绱㈠埌鍙屾繁搴撲綅鐨勬祬搴撲綅鏃讹紝濡傛灉娣卞簱浣嶆棤璐э紝鍒欐斁鍏ュ搴旂殑娣卞簱浣�
+     */
+    public static void toDeepIfEmptyByShallow(String shallowLoc) {
+        int row = getRow(shallowLoc);
+        int remainder = (int) Arith.remainder(row, 4);
+        int targetRow = 0;
+        if (remainder == 2) {
+            targetRow = row - 1;
+        } else if (remainder == 3) {
+            targetRow = row + 1;
+        } else {
+            throw new RuntimeException(shallowLoc + "涓嶆槸娴呭簱浣嶏紝绯荤粺绻佸繖");
+        }
+        String targetLoc = zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2);
+
+    }
+
+    public static void main(String[] args) {
+        SlaveProperties slaveProperties = new SlaveProperties();
+        slaveProperties.setDoubleDeep(true);
+        List<Integer> list = new ArrayList<>();
+        list.add(1);list.add(4);list.add(5);list.add(8);list.add(9);list.add(12);
+        slaveProperties.setDoubleLocs(list);
+        slaveProperties.setGroupCount(4);
+        Integer deepRow = getDeepRow(slaveProperties, 6);
+        System.out.println(deepRow);
+
+    }
+}
diff --git a/src/main/java/com/zy/asrs/utils/VersionUtils.java b/src/main/java/com/zy/asrs/utils/VersionUtils.java
index 590e82b..dc9cad3 100644
--- a/src/main/java/com/zy/asrs/utils/VersionUtils.java
+++ b/src/main/java/com/zy/asrs/utils/VersionUtils.java
@@ -1,9 +1,8 @@
 package com.zy.asrs.utils;
 
-import com.zy.asrs.entity.LocDetl;
-import com.zy.asrs.entity.MatCode;
-import com.zy.asrs.entity.WaitPakin;
-import com.zy.asrs.entity.WrkDetl;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.common.model.LocTypeDto;
 import com.zy.common.utils.excel.matcode.MatCodeExcel;
 
 /**
@@ -121,5 +120,41 @@
         matCode.setNum5(excel.getNum5());
     }
 
+    /**
+     *  搴撲綅绉昏浆鏃剁被鍨嬫娴�
+     **/
+    public static void locMoveCheckLocType(LocMast sourceLoc, LocMast loc){
+        // 濡傛灉婧愬簱浣嶆槸楂樺簱浣嶏紝鐩爣搴撲綅鏄綆搴撲綅
+        if (sourceLoc.getLocType1() == 2 && loc.getLocType1() == 1) {
+            throw new CoolException("楂樺簱浣嶄笉鑳界Щ杞嚦浣庡簱浣�");
+        }
+//        // 濡傛灉婧愬簱浣嶆槸瀹藉簱浣嶏紝鐩爣搴撲綅鏄獎搴撲綅
+//        if (sourceLoc.getLocType2() == 2 && loc.getLocType2() == 1) {
+//            throw new CoolException("瀹藉簱浣嶄笉鑳界Щ杞嚦绐勫簱浣�");
+//        }
+//        // 濡傛灉婧愬簱浣嶆槸閲嶅簱浣嶏紝鐩爣搴撲綅鏄交搴撲綅
+//        if (sourceLoc.getLocType3() == 2 && loc.getLocType3() == 1) {
+//            throw new CoolException("閲嶅簱浣嶄笉鑳界Щ杞嚦杞诲簱浣�");
+//        }
+    }
+
+    /**
+     *  搴撲綅绉昏浆鏃剁被鍨嬫娴�
+     **/
+    public static boolean locMoveCheckLocType(LocMast loc, LocTypeDto dto){
+        // 濡傛灉婧愬簱浣嶆槸楂樺簱浣嶏紝鐩爣搴撲綅鏄綆搴撲綅
+        if (dto.getLocType1() == 2 && loc.getLocType1() == 1) {
+            return false;
+        }
+//        // 濡傛灉婧愬簱浣嶆槸瀹藉簱浣嶏紝鐩爣搴撲綅鏄獎搴撲綅
+//        if (dto.getLocType2() == 2 && loc.getLocType2() == 1) {
+//            return false;
+//        }
+//        // 濡傛灉婧愬簱浣嶆槸閲嶅簱浣嶏紝鐩爣搴撲綅鏄交搴撲綅
+//        if (dto.getLocType3() == 2 && loc.getLocType3() == 1) {
+//            return false;
+//        }
+        return true;
+    }
 
 }
diff --git a/src/main/java/com/zy/common/model/LocTypeDto.java b/src/main/java/com/zy/common/model/LocTypeDto.java
index ecf4732..276d7b7 100644
--- a/src/main/java/com/zy/common/model/LocTypeDto.java
+++ b/src/main/java/com/zy/common/model/LocTypeDto.java
@@ -4,11 +4,15 @@
 import com.zy.asrs.entity.BasDevp;
 import lombok.Data;
 
+import java.io.Serializable;
+
 /**
  * Created by vincent on 2020/10/19
  */
 @Data
-public class LocTypeDto {
+public class LocTypeDto implements Cloneable, Serializable {
+
+    private static final long serialVersionUID = 1L;
 
     // 楂樹綆绫诲瀷{0:鏈煡,1:浣庡簱浣�,2:楂樺簱浣峿
     private Short locType1;
@@ -19,8 +23,7 @@
     // 杞婚噸绫诲瀷{0:鏈煡,1:杞诲簱浣�,2:閲嶅簱浣峿
     private Short locType3;
 
-    public LocTypeDto() {
-    }
+
 
     public LocTypeDto(BasDevp basDevp) {
         if (basDevp.getLocType1() == null || basDevp.getLocType1() == 0) {
@@ -28,12 +31,10 @@
         }
         if (basDevp.getLocType1() == 1) {
             this.locType1 = 1; // 浣庡簱浣�
-        } else if (basDevp.getLocType1() == 2){
-            this.locType1 = 2; // 涓簱浣�
         } else {
-            this.locType1 = 3; // 楂樺簱浣�
+            this.locType1 = 2; // 楂樺簱浣�
         }
-//        if (basDevp.getLocType2() == 0) {
+//        if (basDevp.getLocType2() == null || basDevp.getLocType2() == 0) {
 //            throw new CoolException("plc瀹界獎妫�娴嬪紓甯�");
 //        }
 //        if (basDevp.getLocType2() == 1) {
@@ -41,7 +42,7 @@
 //        } else {
 //            this.locType2 = 2; // 瀹藉簱浣�
 //        }
-//        if (basDevp.getLocType3() == 0) {
+//        if (basDevp.getLocType3() == null || basDevp.getLocType3() == 0) {
 //            throw new CoolException("plc杞婚噸妫�娴嬪紓甯�");
 //        }
 //        if (basDevp.getLocType3() == 1) {
@@ -51,4 +52,14 @@
 //        }
     }
 
+    @Override
+    public LocTypeDto clone() {
+        try {
+            return (LocTypeDto) super.clone();
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
 }
diff --git a/src/main/java/com/zy/common/properties/SlaveProperties.java b/src/main/java/com/zy/common/properties/SlaveProperties.java
new file mode 100644
index 0000000..c5184c4
--- /dev/null
+++ b/src/main/java/com/zy/common/properties/SlaveProperties.java
@@ -0,0 +1,24 @@
+package com.zy.common.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/8/4
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "wcs-slave")
+public class SlaveProperties {
+
+    private boolean doubleDeep;
+
+    private List<Integer> doubleLocs = new ArrayList<>();
+
+    private int groupCount;
+
+}
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index b647bae..6df78ab 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -1,5 +1,6 @@
 package com.zy.common.service;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Arith;
@@ -7,8 +8,12 @@
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 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.Shelves;
 import com.zy.common.model.StartupDto;
+import com.zy.common.properties.SlaveProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -39,6 +44,8 @@
     private LocMastService locMastService;
     @Autowired
     private LocDetlService locDetlService;
+    @Autowired
+    private SlaveProperties slaveProperties;
 
     /**
      * 鐢熸垚宸ヤ綔鍙�
@@ -82,71 +89,132 @@
         return workNo;
     }
 
+    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, boolean emptyMk, List<String> matNos, LocTypeDto locTypeDto, int times) {
+        LocTypeDto oldLocType = locTypeDto.clone();
+        return getLocNo(whsType, staDescId, sourceStaNo, emptyMk, matNos, locTypeDto, oldLocType, times);
+    }
+
     /**
      * 妫�绱㈠簱浣嶅彿
      * @param whsType 绫诲瀷 1:鍙屾繁寮忚揣鏋�
      * @param staDescId 璺緞ID
      * @param sourceStaNo 婧愮珯
-     * @param matNos 浜у搧鍙烽泦鍚�
+     * @param matNos 鐗╂枡鍙烽泦鍚�
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
      */
-    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, int times) {
-//        if (sourceStaNo == 3) {
-//            whsType = 1;
-//        } else if (sourceStaNo == 7) {
-//            whsType = 2;
-//        } else if (sourceStaNo == 19) {
-//            whsType = 3;
-//        } else {
-//            throw new CoolException("鏃犳晥鍏ュ簱绔�");
-//        }
+    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, boolean emptyMk, List<String> matNos, LocTypeDto locTypeDto, LocTypeDto oldLocType, int times) {
         StartupDto startupDto = new StartupDto();
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = getWorkNo(0);
+//        if (locTypeDto.getLocType3() == 1) { // 杞昏揣淇″彿
+//            whsType = 2;    // 5 - 12 杞讳粨
+//        } else if (locTypeDto.getLocType3() == 2) { // 閲嶈揣淇″彿
+//            whsType = 1;    // 1 - 4 閲嶄粨
+//        }
         RowLastno rowLastno = rowLastnoService.selectById(whsType);
         if (Cools.isEmpty(rowLastno)) {
             throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
         }
-        int curRow = rowLastno.getCurrentRow();
-        int sRow = rowLastno.getsRow();
-        int eRow = rowLastno.geteRow();
-        int crn_qty = rowLastno.getCrnQty();
-        int rowCount = eRow - sRow + 1;
+        int curRow = rowLastno.getCurrentRow();  // 褰撳墠鍒�
+        int sRow = rowLastno.getsRow();          // 璧峰鍒�
+        int eRow = rowLastno.geteRow();          // 缁堟鍒�
+        int crn_qty = rowLastno.getCrnQty();     // 鍫嗗灈鏈烘暟閲忥紙宸烽亾鏁伴噺锛�
+        int rowCount = eRow - sRow + 1;          // 搴撴帓鎬绘暟
         // 鐩爣鍫嗗灈鏈哄彿
         int crnNo = 0;
         // 鐩爣搴撲綅
         LocMast locMast = null;
 
-
-        // 鎸夎鍒欒疆璇㈣揣鏋�
-        if (whsType == 1 || whsType == 2) {
-            if (curRow == sRow) {
-                curRow = eRow;
-            } else {
-                curRow = sRow;
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂�
+        if (!Cools.isEmpty(matNos)) {
+            List<String> locNos = locDetlService.getSameDetlToday(matNos.get(0), sRow, eRow);
+            for (String locNo : locNos) {
+                if (Utils.isShallowLoc(slaveProperties, locNo)) {
+                    continue;
+                }
+                String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo);
+                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
+                if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
+                    // 娴呭簱浣嶇鍚堝昂瀵告娴�
+                    if (VersionUtils.locMoveCheckLocType(shallowLoc, locTypeDto)) {
+                        // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
+                        if (locMastService.checkEmptyCount(shallowLoc)) {
+                            // 娴呭簱浣嶅搴斿爢鍨涙満蹇呴』鍙敤涓旀棤寮傚父
+                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
+                                locMast = shallowLoc;
+                                crnNo = locMast.getCrnNo();
+                                break;
+                            }
+                        }
+                    }
+                }
             }
-            crnNo = whsType;
-            basCrnpService.checkSiteStatus(crnNo, true);
-        } else {
+        }
+        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭
+        if (emptyMk) {
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow));
+            if (locMasts.size() > 0) {
+                for (LocMast loc : locMasts) {
+                    if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
+                        continue;
+                    }
+                    String shallowLocNo = Utils.getShallowLoc(slaveProperties,  loc.getLocNo());
+                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
+                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
+                        // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
+                        if (locMastService.checkEmptyCount(shallowLoc)) {
+                            // 娴呭簱浣嶅搴斿爢鍨涙満蹇呴』鍙敤涓旀棤寮傚父
+                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
+                                locMast = shallowLoc;
+                                crnNo = locMast.getCrnNo();
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        // 濡傛灉娌℃湁鐩歌繎鐗╂枡锛屽垯鎸夎鍒欒疆璇㈣揣鏋�
+        if (null == locMast) {
             Shelves shelves = new Shelves(rowCount, crn_qty);
-            curRow = curRow - 4;
-            for (int i = 0; i < shelves.group; i ++) {
-                curRow = shelves.start(curRow);
-                if (curRow < 0) {
-                    throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
+            // 閲嶅簱浣� 1 - 4鎺�
+            if (whsType == 1) {
+                for (int i = 0; i < shelves.group; i ++) {
+                    curRow = shelves.start(curRow);
+                    if (curRow < 0) {
+                        throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
+                    }
+                    Integer crnNo1 = shelves.getCrnNo(curRow);
+                    if (basCrnpService.checkSiteError(crnNo1, true)) {
+                        crnNo = crnNo1;
+                        break;
+                    }
                 }
-                Integer crnNo1 = shelves.getCrnNo(curRow);
-                if (basCrnpService.checkSiteError(crnNo1 + 2, true)) {
-                    // 鍋忕Щ閲忚ˉ鍋�
-                    curRow = curRow + 4;
-                    crnNo = crnNo1 + 2;
-                    break;
-                }
+//                // 杞诲簱浣� 5 - 12鎺�
+//            } else {
+//                curRow = curRow - 4;
+//                for (int i = 0; i < shelves.group; i ++) {
+//                    curRow = shelves.start(curRow);
+//                    if (curRow < 0) {
+//                        throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
+//                    }
+//                    Integer crnNo1 = shelves.getCrnNo(curRow);
+//                    if (basCrnpService.checkSiteError(crnNo1 + 1, true)) {
+//                        // 鍋忕Щ閲忚ˉ鍋�
+//                        curRow = curRow + 4;
+//                        crnNo = crnNo1 + 1;
+//                        break;
+//                    }
+//                }
             }
         }
 
         if (crnNo == 0) {
             throw new CoolException("娌℃湁鍙敤鐨勫爢鍨涙満");
         }
-
         // 鑾峰彇鐩爣绔�
         Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                 .eq("type_no", staDescId)
@@ -157,6 +225,7 @@
             log.error("鍏ュ簱璺緞涓嶅瓨鍦�, staDescId={}, sourceStaNo={}, crnNo={}", staDescId, sourceStaNo, crnNo);
             throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
         }
+
         // 妫�娴嬬洰鏍囩珯
         BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
         if (!staNo.getAutoing().equals("Y")) {
@@ -169,21 +238,79 @@
 
         // 寮�濮嬫煡鎵惧簱浣� ==============================>>
 
-        // 鏌ユ壘搴撲綅
-        locMast = locMastService.queryFreeLocMast(curRow);
+        // 1.褰撴绱㈠簱鎺掍负娴呭簱浣嶆帓鏃讹紝浼樺厛瀵绘壘褰撳墠搴撴帓鐨勬繁搴撲綅鎺�
+        if (locMast == null) {
+            if (Utils.isShallowLoc(slaveProperties, curRow)) {
+                Integer deepRow = Utils.getDeepRow(slaveProperties, curRow);
+                locMast = locMastService.queryFreeLocMast(deepRow, locTypeDto.getLocType1(), locTypeDto.getLocType2(), locTypeDto.getLocType3());
+                // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
+                if (!locMastService.checkEmptyCount(locMast)) {
+                    locMast = null;
+                }
+            }
+            if (Cools.isEmpty(locMast)) {
+                locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1(), locTypeDto.getLocType2(), locTypeDto.getLocType3());
+                // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
+                if (!locMastService.checkEmptyCount(locMast)) {
+                    locMast = null;
+                }
+                // 鐩爣搴撲綅 ===>> 娴呭簱浣嶏紝 鍒欐牎楠屽叾娣卞簱浣嶆槸鍚︿负 F D X
+                if (null != locMast && Utils.isShallowLoc(slaveProperties, locMast.getLocNo())) {
+                    LocMast deepLoc = locMastService.selectById(Utils.getDeepLoc(slaveProperties, locMast.getLocNo()));
+                    if (!deepLoc.getLocSts().equals("F") && !deepLoc.getLocSts().equals("D") && !deepLoc.getLocSts().equals("X")) {
+                        locMast = null;
+                    }
+                }
+                // 鐩爣搴撲綅 ===>> 娣卞簱浣嶏紝 鍒欐牎楠屽叾娴呭簱浣嶆槸鍚︿负 O
+                if (null != locMast && Utils.isDeepLoc(slaveProperties, locMast.getLocNo())) {
+                    LocMast shallowLoc = locMastService.selectById(Utils.getShallowLoc(slaveProperties, locMast.getLocNo()));
+                    if (!shallowLoc.getLocSts().equals("O")) {
+                        locMast = null;
+                    }
+                }
+            }
+        }
 
+        // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
         if (Cools.isEmpty(locMast)) {
             // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
-            if (times >= rowCount) {
-                log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒");
-                throw new CoolException("娌℃湁绌哄簱浣�");
+            if (times < rowCount) {
+                times = times + 1;
+                return getLocNo(1, staDescId, sourceStaNo, emptyMk, matNos, locTypeDto, oldLocType, times);
+            } else {
+                times = 0;
             }
-            times = times + 1;
-            return getLocNo(1, staDescId, sourceStaNo, matNos, times);
+            // 璐х墿妫�绱綆搴撲綅浠撳け璐ワ紝鍏煎楂樺簱浣嶄粨鍚庣户缁墽琛�
+            if (locTypeDto.getLocType1() == 1) {
+                locTypeDto.setLocType1((short) 2);
+                return getLocNo(1, staDescId, sourceStaNo, emptyMk, matNos, locTypeDto, oldLocType, times);
+            }
+//            // 璐х墿妫�绱㈢獎搴撲綅浠撳け璐ワ紝鍏煎瀹藉簱浣嶄粨鍚庣户缁墽琛�
+//            if (locTypeDto.getLocType2() == 1) {
+//                locTypeDto.setLocType2((short) 2);
+//                if (oldLocType.getLocType1() == 1) {
+//                    locTypeDto.setLocType1((short) 1);
+//                }
+//                return getLocNo(null, staDescId, sourceStaNo, emptyMk, matNos, locTypeDto, oldLocType, times);
+//            }
+//            // 璐х墿妫�绱㈣交搴撲綅浠撳け璐ワ紝鍏煎閲嶅簱浣嶄粨鍚庣户缁墽琛�
+//            if (locTypeDto.getLocType3() == 1) {
+//                locTypeDto.setLocType3((short) 2);
+//                if (oldLocType.getLocType1() == 1) {
+//                    locTypeDto.setLocType1((short) 1);
+//                }
+//                if (oldLocType.getLocType2() == 1) {
+//                    locTypeDto.setLocType2((short) 1);
+//                }
+//                return getLocNo(null, staDescId, sourceStaNo, emptyMk, matNos, locTypeDto, oldLocType, times);
+//            }
+            log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
+            throw new CoolException("娌℃湁绌哄簱浣�");
         }
         String locNo = locMast.getLocNo();
 
         // 杩斿洖dto
+        startupDto.setWorkNo(workNo);
         startupDto.setCrnNo(crnNo);
         startupDto.setSourceStaNo(sourceStaNo);
         startupDto.setStaNo(staNo.getDevNo());
@@ -191,6 +318,115 @@
         return startupDto;
     }
 
+//    /**
+//     * 妫�绱㈠簱浣嶅彿
+//     * @param whsType 绫诲瀷 1:鍙屾繁寮忚揣鏋�
+//     * @param staDescId 璺緞ID
+//     * @param sourceStaNo 婧愮珯
+//     * @param matNos 浜у搧鍙烽泦鍚�
+//     * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
+//     */
+//    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, int times) {
+////        if (sourceStaNo == 3) {
+////            whsType = 1;
+////        } else if (sourceStaNo == 7) {
+////            whsType = 2;
+////        } else if (sourceStaNo == 19) {
+////            whsType = 3;
+////        } else {
+////            throw new CoolException("鏃犳晥鍏ュ簱绔�");
+////        }
+//        StartupDto startupDto = new StartupDto();
+//        RowLastno rowLastno = rowLastnoService.selectById(whsType);
+//        if (Cools.isEmpty(rowLastno)) {
+//            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+//        }
+//        int curRow = rowLastno.getCurrentRow();
+//        int sRow = rowLastno.getsRow();
+//        int eRow = rowLastno.geteRow();
+//        int crn_qty = rowLastno.getCrnQty();
+//        int rowCount = eRow - sRow + 1;
+//        // 鐩爣鍫嗗灈鏈哄彿
+//        int crnNo = 0;
+//        // 鐩爣搴撲綅
+//        LocMast locMast = null;
+//
+//
+//        // 鎸夎鍒欒疆璇㈣揣鏋�
+//        if (whsType == 1 || whsType == 2) {
+//            if (curRow == sRow) {
+//                curRow = eRow;
+//            } else {
+//                curRow = sRow;
+//            }
+//            crnNo = whsType;
+//            basCrnpService.checkSiteStatus(crnNo, true);
+//        } else {
+//            Shelves shelves = new Shelves(rowCount, crn_qty);
+//            curRow = curRow - 4;
+//            for (int i = 0; i < shelves.group; i ++) {
+//                curRow = shelves.start(curRow);
+//                if (curRow < 0) {
+//                    throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
+//                }
+//                Integer crnNo1 = shelves.getCrnNo(curRow);
+//                if (basCrnpService.checkSiteError(crnNo1 + 2, true)) {
+//                    // 鍋忕Щ閲忚ˉ鍋�
+//                    curRow = curRow + 4;
+//                    crnNo = crnNo1 + 2;
+//                    break;
+//                }
+//            }
+//        }
+//
+//        if (crnNo == 0) {
+//            throw new CoolException("娌℃湁鍙敤鐨勫爢鍨涙満");
+//        }
+//
+//        // 鑾峰彇鐩爣绔�
+//        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+//                .eq("type_no", staDescId)
+//                .eq("stn_no", sourceStaNo)
+//                .eq("crn_no", crnNo);
+//        StaDesc staDesc = staDescService.selectOne(wrapper);
+//        if (Cools.isEmpty(staDesc)) {
+//            log.error("鍏ュ簱璺緞涓嶅瓨鍦�, staDescId={}, sourceStaNo={}, crnNo={}", staDescId, sourceStaNo, crnNo);
+//            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+//        }
+//        // 妫�娴嬬洰鏍囩珯
+//        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
+//        if (!staNo.getAutoing().equals("Y")) {
+//            throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
+//        }
+//
+//        // 鏇存柊搴撲綅鎺掑彿
+//        rowLastno.setCurrentRow(curRow);
+//        rowLastnoService.updateById(rowLastno);
+//
+//        // 寮�濮嬫煡鎵惧簱浣� ==============================>>
+//
+//        // 鏌ユ壘搴撲綅
+//        locMast = locMastService.queryFreeLocMast(curRow);
+//
+//        if (Cools.isEmpty(locMast)) {
+//            // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
+//            if (times >= rowCount) {
+//                log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒");
+//                throw new CoolException("娌℃湁绌哄簱浣�");
+//            }
+//            times = times + 1;
+//            return getLocNo(1, staDescId, sourceStaNo, matNos, times);
+//        }
+//        String locNo = locMast.getLocNo();
+//
+//        // 杩斿洖dto
+//        startupDto.setCrnNo(crnNo);
+//        startupDto.setSourceStaNo(sourceStaNo);
+//        startupDto.setStaNo(staNo.getDevNo());
+//        startupDto.setLocNo(locNo);
+//        return startupDto;
+//    }
+
     public static void main(String[] args) {
         System.out.println(Arith.remainder(1, 4));
         System.out.println("0200201".substring(0, 2));
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index eb0a9a9..d3c84c0 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -1,6 +1,7 @@
 package com.zy.common.web;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.common.R;
 import com.core.exception.CoolException;
@@ -42,6 +43,8 @@
     private WaitPakinService waitPakinService;
     @Autowired
     private  LocDetlService locDetlService;
+    @Autowired
+    private PltBarcodeService pltBarcodeService;
 
     @PostMapping("/pakin/loc/v1")
     @ResponseBody
@@ -52,13 +55,13 @@
         if (Cools.isEmpty(param.getSourceStaNo())) {
             return R.error("婧愮珯缂栧彿涓嶈兘涓虹┖");
         }
-        List<WaitPakin> waitPakins = null;
+        List<PltBarcode> pltBarcodes = null;
         if (param.getIoType() == 1) {
             if (Cools.isEmpty(param.getBarcode())) {
                 return R.error("鏉$爜涓嶈兘涓虹┖");
             }
-            waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
-            if (Cools.isEmpty(waitPakins)) {
+            pltBarcodes = pltBarcodeService.selectList(new EntityWrapper<PltBarcode>().eq("barcode", param.getBarcode()));
+            if (Cools.isEmpty(pltBarcodes)) {
                 return R.error("鏉$爜鏁版嵁閿欒");
             }
             int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
@@ -71,13 +74,15 @@
             return R.error("楂樹綆妫�娴嬩俊鍙蜂笉鑳戒负绌�");
         }
 
-        LocTypeDto locTypeDto = new LocTypeDto();
+        // 婧愮珯鐐圭姸鎬佹娴�
+        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
+        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
         locTypeDto.setLocType1(param.getLocType1());
 
         StartupDto dto = null;
         switch (param.getIoType()) {
             case 1:
-                dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins);
+                dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, pltBarcodes);
                 break;
             case 10:
                 dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto);
@@ -93,12 +98,12 @@
      * 鍏ㄦ澘鍏ュ簱 todo:luxiaotao 1.鐣欏嚭涓浆搴撲綅
      */
     @Transactional
-    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins) {
+    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<PltBarcode> pltBarcodes) {
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
-        List<String> matNos = waitPakins.stream().map(WaitPakin::getMatNo).distinct().collect(Collectors.toList());
-        StartupDto dto = commonService.getLocNo(null, 1, devpNo, matNos, locTypeDto);
+        List<String> matNos = pltBarcodes.stream().map(PltBarcode::getMatNo).distinct().collect(Collectors.toList());
+        StartupDto dto = commonService.getLocNo(1, 1, devpNo, false, matNos, locTypeDto,0);
         int workNo = dto.getWorkNo();
 
         // 鐢熸垚宸ヤ綔妗�
@@ -128,8 +133,16 @@
         }
         // 鐢熸垚宸ヤ綔妗f槑缁�
         List<MatCodeCountDto> matDtos = new ArrayList<>();
-        waitPakins.forEach(elem -> {
-            matDtos.add(new MatCodeCountDto(elem.getMatnr(), elem.getAnfme(),elem.getColor()));
+        pltBarcodes.forEach(elem -> {
+            matDtos.add(new MatCodeCountDto(elem.getBillNo(), elem.getSeqNo(), elem.getMatNo(), elem.getQty()));
+
+            //鏇存柊缁勬墭鏁版嵁鐘舵�佷负鍏ュ簱涓�
+            Wrapper<PltBarcode> wrapper = new EntityWrapper<PltBarcode>().eq("barcode", elem.getBarcode())
+                    .eq("bill_no", elem.getBillNo()).eq("seq_no", elem.getSeqNo()).eq("mat_no", elem.getMatNo());
+            PltBarcode pltBarcode = pltBarcodeService.selectOne(wrapper);
+            pltBarcode.setLocNo(dto.getLocNo());
+            pltBarcode.setIoStatus(1);//鍏ュ簱涓�
+            pltBarcodeService.update(pltBarcode,wrapper);
         });
         wrkDetlService.createWorkDetail(workNo, matDtos, barcode, null);
         // 鏇存柊婧愮珯鐐逛俊鎭�
@@ -157,7 +170,7 @@
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
-        StartupDto dto = commonService.getLocNo(null, 10, devpNo, null, locTypeDto);
+        StartupDto dto = commonService.getLocNo(1, 10, devpNo, true, null, locTypeDto,0);
         int workNo = dto.getWorkNo();
         // 鐢熸垚宸ヤ綔妗�
         WrkMast wrkMast = new WrkMast();
diff --git a/src/main/java/com/zy/ints/controller/IoCompleteController.java b/src/main/java/com/zy/ints/controller/IoCompleteController.java
index 1e0372c..d27b867 100644
--- a/src/main/java/com/zy/ints/controller/IoCompleteController.java
+++ b/src/main/java/com/zy/ints/controller/IoCompleteController.java
@@ -5,19 +5,21 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
-import com.core.common.DateUtils;
-import com.zy.common.web.BaseController;
-import com.zy.ints.entity.IoComplete;
-import com.zy.ints.service.IoCompleteService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
-import com.core.controller.AbstractBaseController;
+import com.zy.common.web.BaseController;
+import com.zy.ints.entity.IoComplete;
+import com.zy.ints.service.IoCompleteService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 public class IoCompleteController extends BaseController {
@@ -37,10 +39,12 @@
                   @RequestParam(defaultValue = "10")Integer limit,
                   @RequestParam(required = false)String orderByField,
                   @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
                   @RequestParam Map<String, Object> param){
         EntityWrapper<IoComplete> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
+        allLike(IoComplete.class, param.keySet(), wrapper, condition);
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(ioCompleteService.selectPage(new Page<>(curr, limit), wrapper));
     }
diff --git a/src/main/java/com/zy/ints/controller/IoCompleteLogController.java b/src/main/java/com/zy/ints/controller/IoCompleteLogController.java
index eed1cef..2891fa4 100644
--- a/src/main/java/com/zy/ints/controller/IoCompleteLogController.java
+++ b/src/main/java/com/zy/ints/controller/IoCompleteLogController.java
@@ -5,19 +5,21 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
-import com.core.common.DateUtils;
-import com.zy.common.web.BaseController;
-import com.zy.ints.entity.IoCompleteLog;
-import com.zy.ints.service.IoCompleteLogService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
-import com.core.controller.AbstractBaseController;
+import com.zy.common.web.BaseController;
+import com.zy.ints.entity.IoCompleteLog;
+import com.zy.ints.service.IoCompleteLogService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 public class IoCompleteLogController extends BaseController {
@@ -37,10 +39,12 @@
                   @RequestParam(defaultValue = "10")Integer limit,
                   @RequestParam(required = false)String orderByField,
                   @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
                   @RequestParam Map<String, Object> param){
         EntityWrapper<IoCompleteLog> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
+        allLike(IoCompleteLog.class, param.keySet(), wrapper, condition);
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(ioCompleteLogService.selectPage(new Page<>(curr, limit), wrapper));
     }
diff --git a/src/main/java/com/zy/ints/controller/WaitMatchkController.java b/src/main/java/com/zy/ints/controller/WaitMatchkController.java
index e6cb4a9..bd56002 100644
--- a/src/main/java/com/zy/ints/controller/WaitMatchkController.java
+++ b/src/main/java/com/zy/ints/controller/WaitMatchkController.java
@@ -5,19 +5,21 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
-import com.core.common.DateUtils;
-import com.zy.common.web.BaseController;
-import com.zy.ints.entity.WaitMatchk;
-import com.zy.ints.service.WaitMatchkService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
-import com.core.controller.AbstractBaseController;
+import com.zy.common.web.BaseController;
+import com.zy.ints.entity.WaitMatchk;
+import com.zy.ints.service.WaitMatchkService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 public class WaitMatchkController extends BaseController {
@@ -39,10 +41,12 @@
                   @RequestParam(defaultValue = "10")Integer limit,
                   @RequestParam(required = false)String orderByField,
                   @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
                   @RequestParam Map<String, Object> param){
         EntityWrapper<WaitMatchk> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
+        allLike(WaitMatchk.class, param.keySet(), wrapper, condition);
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(waitMatchkService.selectPage(new Page<>(curr, limit), wrapper));
     }
diff --git a/src/main/java/com/zy/ints/controller/WaitMatchkLogController.java b/src/main/java/com/zy/ints/controller/WaitMatchkLogController.java
index 076c3d8..7365237 100644
--- a/src/main/java/com/zy/ints/controller/WaitMatchkLogController.java
+++ b/src/main/java/com/zy/ints/controller/WaitMatchkLogController.java
@@ -5,19 +5,21 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
-import com.core.common.DateUtils;
-import com.zy.common.web.BaseController;
-import com.zy.ints.entity.WaitMatchkLog;
-import com.zy.ints.service.WaitMatchkLogService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
-import com.core.controller.AbstractBaseController;
+import com.zy.common.web.BaseController;
+import com.zy.ints.entity.WaitMatchkLog;
+import com.zy.ints.service.WaitMatchkLogService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 public class WaitMatchkLogController extends BaseController {
@@ -37,10 +39,12 @@
                   @RequestParam(defaultValue = "10")Integer limit,
                   @RequestParam(required = false)String orderByField,
                   @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
                   @RequestParam Map<String, Object> param){
         EntityWrapper<WaitMatchkLog> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
+        allLike(WaitMatchkLog.class, param.keySet(), wrapper, condition);
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(waitMatchkLogService.selectPage(new Page<>(curr, limit), wrapper));
     }
diff --git a/src/main/java/com/zy/ints/controller/WaitMatinLogController.java b/src/main/java/com/zy/ints/controller/WaitMatinLogController.java
index 812214e..6032d2a 100644
--- a/src/main/java/com/zy/ints/controller/WaitMatinLogController.java
+++ b/src/main/java/com/zy/ints/controller/WaitMatinLogController.java
@@ -5,19 +5,21 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
-import com.core.common.DateUtils;
-import com.zy.common.web.BaseController;
-import com.zy.ints.entity.WaitMatinLog;
-import com.zy.ints.service.WaitMatinLogService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
-import com.core.controller.AbstractBaseController;
+import com.zy.common.web.BaseController;
+import com.zy.ints.entity.WaitMatinLog;
+import com.zy.ints.service.WaitMatinLogService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 public class WaitMatinLogController extends BaseController {
@@ -37,10 +39,12 @@
                   @RequestParam(defaultValue = "10")Integer limit,
                   @RequestParam(required = false)String orderByField,
                   @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
                   @RequestParam Map<String, Object> param){
         EntityWrapper<WaitMatinLog> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
+        allLike(WaitMatinLog.class, param.keySet(), wrapper, condition);
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(waitMatinLogService.selectPage(new Page<>(curr, limit), wrapper));
     }
diff --git a/src/main/java/com/zy/ints/controller/WaitMatoutLogController.java b/src/main/java/com/zy/ints/controller/WaitMatoutLogController.java
index 7817a6e..68189a7 100644
--- a/src/main/java/com/zy/ints/controller/WaitMatoutLogController.java
+++ b/src/main/java/com/zy/ints/controller/WaitMatoutLogController.java
@@ -5,19 +5,21 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
-import com.core.common.DateUtils;
-import com.zy.common.web.BaseController;
-import com.zy.ints.entity.WaitMatoutLog;
-import com.zy.ints.service.WaitMatoutLogService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.common.R;
-import com.core.controller.AbstractBaseController;
+import com.zy.common.web.BaseController;
+import com.zy.ints.entity.WaitMatoutLog;
+import com.zy.ints.service.WaitMatoutLogService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 public class WaitMatoutLogController extends BaseController {
@@ -37,10 +39,12 @@
                   @RequestParam(defaultValue = "10")Integer limit,
                   @RequestParam(required = false)String orderByField,
                   @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
                   @RequestParam Map<String, Object> param){
         EntityWrapper<WaitMatoutLog> wrapper = new EntityWrapper<>();
         excludeTrash(param);
         convert(param, wrapper);
+        allLike(WaitMatoutLog.class, param.keySet(), wrapper, condition);
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
         return R.ok(waitMatoutLogService.selectPage(new Page<>(curr, limit), wrapper));
     }
diff --git a/src/main/java/com/zy/ints/task/IoCompleteLogScheduler.java b/src/main/java/com/zy/ints/task/IoCompleteLogScheduler.java
index 6e7f0b4..edfbbe8 100644
--- a/src/main/java/com/zy/ints/task/IoCompleteLogScheduler.java
+++ b/src/main/java/com/zy/ints/task/IoCompleteLogScheduler.java
@@ -33,7 +33,7 @@
     @Value("${erp.enabled}")
     private Boolean erpEnabled;
 
-    @Scheduled(cron = "0/3 * * * * ? ")
+    @Scheduled(cron = "0/10 * * * * ? ")
     private void execute(){
         if(!erpEnabled) return;
         List<IoComplete> ioCompletes = ioCompleteService.selectIoCompleteBySts();
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index acd4a9d..05e7da8 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -50,6 +50,15 @@
 swagger:
   enable: false
 
+# 涓嬩綅鏈洪厤缃�
+wcs-slave:
+  # 鍙屾繁
+  doubleDeep: true
+  # 鍙屾繁搴撲綅鎺掑彿
+  doubleLocs: 1,4,5,8,9,12
+  # 涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁�
+  groupCount: 4
+
 #ERP鎺ュ彛
 erp:
   enabled: true
\ No newline at end of file
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 61d8a3a..da76ae0 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -39,6 +39,19 @@
     </resultMap>
 
     <select id="queryFreeLocMast" resultMap="BaseResultMap">
-        select top 1 * from asr_loc_mast where row1=#{row} and loc_sts='O' order by loc_sts desc ,lev1 asc,bay1 asc
+        select top 1 *
+        from asr_loc_mast
+        where row1=#{row}
+        and loc_sts='O'
+        <if test="locType1 != null">
+            and loc_type1 = #{locType1}
+        </if>
+        <if test="locType2 != null">
+            and loc_type2 = #{locType2}
+        </if>
+        <if test="locType3 != null">
+            and loc_type3 = #{locType3}
+        </if>
+        order by loc_sts desc ,lev1 asc,bay1 asc
     </select>
 </mapper>
diff --git a/src/main/resources/mapper/WaitMatinMapper.xml b/src/main/resources/mapper/WaitMatinMapper.xml
index 8097c6a..8abd794 100644
--- a/src/main/resources/mapper/WaitMatinMapper.xml
+++ b/src/main/resources/mapper/WaitMatinMapper.xml
@@ -78,7 +78,6 @@
     <select id="selectWaitMatinBySts" resultMap="BaseResultMap">
        select * from ints_wait_matin
         where io_status=2
-		or (in_qty=qty)
         order by modi_time,mat_no asc
     </select>
 
diff --git a/src/main/resources/mapper/WaitMatoutMapper.xml b/src/main/resources/mapper/WaitMatoutMapper.xml
index f225bcd..3dfbdf5 100644
--- a/src/main/resources/mapper/WaitMatoutMapper.xml
+++ b/src/main/resources/mapper/WaitMatoutMapper.xml
@@ -78,7 +78,6 @@
     <select id="selectWaitMatOutBySts" resultMap="BaseResultMap">
         select * from ints_wait_matout
         where io_status=2
-		or (out_qty=qty)
         order by modi_time,mat_no asc
     </select>
 
diff --git a/src/main/webapp/static/js/ioCompleteLog/ioCompleteLog.js b/src/main/webapp/static/js/ioCompleteLog/ioCompleteLog.js
index 4d67906..e801807 100644
--- a/src/main/webapp/static/js/ioCompleteLog/ioCompleteLog.js
+++ b/src/main/webapp/static/js/ioCompleteLog/ioCompleteLog.js
@@ -36,7 +36,7 @@
             ,{field: 'appeUser$', align: 'center',title: '寤烘。浜哄憳',event:'appeUser', style: 'cursor:pointer',hide:true}
             ,{field: 'appeTime$', align: 'center',title: '寤烘。鏃堕棿',hide:true}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
         ]],
         request: {
             pageName: 'curr',
diff --git a/src/main/webapp/static/js/pltBarcode/pltBarcode.js b/src/main/webapp/static/js/pltBarcode/pltBarcode.js
index f25aaad..ed152f9 100644
--- a/src/main/webapp/static/js/pltBarcode/pltBarcode.js
+++ b/src/main/webapp/static/js/pltBarcode/pltBarcode.js
@@ -34,9 +34,9 @@
             ,{field: 'size', align: 'center',title: '灏哄', hide: true}
             ,{field: 'color', align: 'center',title: '棰滆壊', hide: true}
             ,{field: 'weight', align: 'center',title: '鍗曢噸', hide: true}
-            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞', hide: true}
             ,{field: 'linkErp$', align: 'center',title: 'ERP杩炵嚎', hide: true}
-            ,{field: 'ioStatus$', align: 'center',title: '瀹屾垚鐘舵��', hide: true}
+            ,{field: 'ioStatus$', align: 'center',title: '瀹屾垚鐘舵��'}
             ,{field: 'ioTime$', align: 'center',title: '瀹屾垚鏃堕棿', hide: true}
             ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',event: 'modiUser', style: 'cursor:pointer', hide: true}
             ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿', hide: true}
diff --git a/src/main/webapp/static/js/waitMatchkLog/waitMatchkLog.js b/src/main/webapp/static/js/waitMatchkLog/waitMatchkLog.js
index 57b5a2c..0defef6 100644
--- a/src/main/webapp/static/js/waitMatchkLog/waitMatchkLog.js
+++ b/src/main/webapp/static/js/waitMatchkLog/waitMatchkLog.js
@@ -39,7 +39,7 @@
             ,{field: 'appeUser$', align: 'center',title: '寤烘。浜哄憳',event: 'appeUser', style: 'cursor:pointer',hide:true}
             ,{field: 'appeTime$', align: 'center',title: '寤烘。鏃堕棿',hide:true}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
         ]],
         request: {
             pageName: 'curr',
diff --git a/src/main/webapp/static/js/waitMatinLog/waitMatinLog.js b/src/main/webapp/static/js/waitMatinLog/waitMatinLog.js
index 5e0817d..71dfd1f 100644
--- a/src/main/webapp/static/js/waitMatinLog/waitMatinLog.js
+++ b/src/main/webapp/static/js/waitMatinLog/waitMatinLog.js
@@ -41,7 +41,7 @@
             ,{field: 'appeUser$', align: 'center',title: '寤烘。浜哄憳',event: 'appeUser', style: 'cursor:pointer',hide:true}
             ,{field: 'appeTime$', align: 'center',title: '寤烘。鏃堕棿',hide:true}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
         ]],
         request: {
             pageName: 'curr',
diff --git a/src/main/webapp/static/js/waitMatoutLog/waitMatoutLog.js b/src/main/webapp/static/js/waitMatoutLog/waitMatoutLog.js
index 1322500..a75c6f1 100644
--- a/src/main/webapp/static/js/waitMatoutLog/waitMatoutLog.js
+++ b/src/main/webapp/static/js/waitMatoutLog/waitMatoutLog.js
@@ -41,7 +41,7 @@
             ,{field: 'appeUser$', align: 'center',title: '寤烘。浜哄憳',event: 'appeUser', style: 'cursor:pointer',hide:true}
             ,{field: 'appeTime$', align: 'center',title: '寤烘。鏃堕棿',hide:true}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:150}
         ]],
         request: {
             pageName: 'curr',
diff --git a/src/main/webapp/views/ioCompleteLog/ioCompleteLog.html b/src/main/webapp/views/ioCompleteLog/ioCompleteLog.html
index c887ae7..05cb885 100644
--- a/src/main/webapp/views/ioCompleteLog/ioCompleteLog.html
+++ b/src/main/webapp/views/ioCompleteLog/ioCompleteLog.html
@@ -16,7 +16,7 @@
 <div id="search-box" class="layui-form layui-card-header">
     <div class="layui-inline">
         <div class="layui-input-inline">
-            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
         </div>
     </div>
     <div class="layui-inline">
@@ -66,15 +66,15 @@
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
-        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
-        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
-        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
     </div>
 </script>
 
 <script type="text/html" id="operate">
-    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
-    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>-->
+<!--    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>-->
 </script>
 
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/waitMatchk/waitMatchk.html b/src/main/webapp/views/waitMatchk/waitMatchk.html
index 3963446..e088e34 100644
--- a/src/main/webapp/views/waitMatchk/waitMatchk.html
+++ b/src/main/webapp/views/waitMatchk/waitMatchk.html
@@ -16,7 +16,7 @@
 <div id="search-box" class="layui-form layui-card-header">
     <div class="layui-inline">
         <div class="layui-input-inline">
-            <input class="layui-input" type="text" name="bill_no" placeholder="缂栧彿" autocomplete="off">
+            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
         </div>
     </div>
     <div class="layui-inline">
@@ -30,28 +30,28 @@
             </div>
         </div>
     </div>
-    <div class="layui-inline">
-        <div class="layui-input-inline cool-auto-complete">
-            <input id="modiUser" class="layui-input" name="modi_user" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
-            <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="淇敼浜哄憳" onfocus=this.blur()>
-            <div class="cool-auto-complete-window">
-                <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
-                <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-                </select>
-            </div>
-        </div>
-    </div>
-    <div class="layui-inline">
-        <div class="layui-input-inline cool-auto-complete">
-            <input id="appeUser" class="layui-input" name="appe_user" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">
-            <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="寤烘。浜哄憳" onfocus=this.blur()>
-            <div class="cool-auto-complete-window">
-                <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
-                <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
-                </select>
-            </div>
-        </div>
-    </div>
+<!--    <div class="layui-inline">-->
+<!--        <div class="layui-input-inline cool-auto-complete">-->
+<!--            <input id="modiUser" class="layui-input" name="modi_user" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">-->
+<!--            <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="淇敼浜哄憳" onfocus=this.blur()>-->
+<!--            <div class="cool-auto-complete-window">-->
+<!--                <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                </select>-->
+<!--            </div>-->
+<!--        </div>-->
+<!--    </div>-->
+<!--    <div class="layui-inline">-->
+<!--        <div class="layui-input-inline cool-auto-complete">-->
+<!--            <input id="appeUser" class="layui-input" name="appe_user" type="text" placeholder="璇疯緭鍏�" autocomplete="off" style="display: none">-->
+<!--            <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="寤烘。浜哄憳" onfocus=this.blur()>-->
+<!--            <div class="cool-auto-complete-window">-->
+<!--                <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
+<!--                <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
+<!--                </select>-->
+<!--            </div>-->
+<!--        </div>-->
+<!--    </div>-->
 
     <!-- 寰呮坊鍔� -->
     <div id="data-search-btn" class="layui-btn-container layui-form-item">
@@ -66,15 +66,15 @@
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
-        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
-        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
-        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
     </div>
 </script>
 
 <script type="text/html" id="operate">
     <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
-    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+<!--    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>-->
 </script>
 
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/waitMatchkLog/waitMatchkLog.html b/src/main/webapp/views/waitMatchkLog/waitMatchkLog.html
index f8875e1..573d531 100644
--- a/src/main/webapp/views/waitMatchkLog/waitMatchkLog.html
+++ b/src/main/webapp/views/waitMatchkLog/waitMatchkLog.html
@@ -16,7 +16,7 @@
 <div id="search-box" class="layui-form layui-card-header">
     <div class="layui-inline">
         <div class="layui-input-inline">
-            <input class="layui-input" type="text" name="bill_no" placeholder="缂栧彿" autocomplete="off">
+            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
         </div>
     </div>
     <div class="layui-inline">
@@ -77,15 +77,15 @@
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
-        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
-        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
-        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
     </div>
 </script>
 
 <script type="text/html" id="operate">
-    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
-    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>-->
+<!--    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>-->
 </script>
 
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/waitMatinLog/waitMatinLog.html b/src/main/webapp/views/waitMatinLog/waitMatinLog.html
index d4fe5be..e2fb611 100644
--- a/src/main/webapp/views/waitMatinLog/waitMatinLog.html
+++ b/src/main/webapp/views/waitMatinLog/waitMatinLog.html
@@ -16,7 +16,7 @@
 <div id="search-box" class="layui-form layui-card-header">
     <div class="layui-inline">
         <div class="layui-input-inline">
-            <input class="layui-input" type="text" name="bill_no" placeholder="缂栧彿" autocomplete="off">
+            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
         </div>
     </div>
     <div class="layui-inline">
@@ -55,15 +55,15 @@
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
-        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
-        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
-        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
     </div>
 </script>
 
 <script type="text/html" id="operate">
-    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
-    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>-->
+<!--    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>-->
 </script>
 
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
diff --git a/src/main/webapp/views/waitMatoutLog/waitMatoutLog.html b/src/main/webapp/views/waitMatoutLog/waitMatoutLog.html
index 61b0f75..d91dde9 100644
--- a/src/main/webapp/views/waitMatoutLog/waitMatoutLog.html
+++ b/src/main/webapp/views/waitMatoutLog/waitMatoutLog.html
@@ -16,7 +16,7 @@
 <div id="search-box" class="layui-form layui-card-header">
     <div class="layui-inline">
         <div class="layui-input-inline">
-            <input class="layui-input" type="text" name="bill_no" placeholder="缂栧彿" autocomplete="off">
+            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
         </div>
     </div>
     <div class="layui-inline">
@@ -55,15 +55,15 @@
 </div>
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
-        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
-        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
-        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">瀵煎嚭</button>
+<!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>-->
+<!--        <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>-->
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button>
     </div>
 </script>
 
 <script type="text/html" id="operate">
-    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
-    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>-->
+<!--    <a class="layui-btn layui-btn-xs btn-edit" lay-event="edit">缂栬緫</a>-->
 </script>
 
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>

--
Gitblit v1.9.1