From 5cc40452e260550c709928d0679f6e713448ffe7 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期三, 01 十一月 2023 16:50:54 +0800
Subject: [PATCH] 库存编码规则 拣料更改料箱拣料

---
 src/main/java/com/zy/asrs/service/impl/LocRuleServiceImpl.java   |   30 +
 src/main/java/com/zy/asrs/service/LocDetlService.java            |    2 
 src/main/java/com/zy/asrs/service/LocRuleService.java            |    2 
 src/main/webapp/views/mat/mat.html                               |   16 
 src/main/webapp/views/saasRule/locRule.html                      |    6 
 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java   |    4 
 src/main/java/com/zy/common/entity/LocRuleExcel.java             |   10 
 src/main/java/com/zy/asrs/controller/MobileController.java       |   82 +++++
 src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java |    2 
 src/main/java/com/zy/common/web/WcsController.java               |    8 
 src/main/webapp/views/locRule/locRule.html                       |   10 
 src/main/java/com/zy/common/service/AgvCommonService.java        |   41 ++
 src/main/webapp/static/js/locRule/locRule.js                     |    4 
 src/main/java/com/zy/asrs/controller/LocRuleController.java      |   52 +++
 src/main/webapp/static/js/locRule/locCodeRule.js                 |  334 ++++++++++++++++++++++
 src/main/java/com/zy/asrs/utils/LocRuleExcelListener.java        |   37 ++
 src/main/java/com/zy/asrs/entity/param/ModifyPakoutParam.java    |   20 +
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java    |   54 ++-
 src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java      |    5 
 src/main/java/com/zy/asrs/entity/LocRule.java                    |   33 +
 src/main/java/com/zy/asrs/service/NodeService.java               |    2 
 src/main/java/com/zy/common/service/CommonService.java           |   53 +++
 src/main/java/com/zy/asrs/service/MobileService.java             |    6 
 src/main/webapp/views/locRule/locCodeRule.html                   |   39 +
 24 files changed, 792 insertions(+), 60 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/LocRuleController.java b/src/main/java/com/zy/asrs/controller/LocRuleController.java
index 017f75b..234fed0 100644
--- a/src/main/java/com/zy/asrs/controller/LocRuleController.java
+++ b/src/main/java/com/zy/asrs/controller/LocRuleController.java
@@ -1,5 +1,7 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
@@ -12,10 +14,18 @@
 import com.zy.asrs.entity.LocRule;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.LocRuleService;
+import com.zy.asrs.service.NodeService;
+import com.zy.asrs.utils.LocRuleExcelListener;
+import com.zy.common.entity.LocRuleExcel;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
 import java.util.*;
 
 @RestController
@@ -25,6 +35,8 @@
     private LocRuleService locRuleService;
     @Autowired
     private LocMastService locMastService;
+    @Autowired
+    private NodeService nodeService;
 
     @RequestMapping(value = "/locRule/{id}/auth")
     @ManagerAuth
@@ -80,11 +92,11 @@
         locRule.setUpdateBy(getUserId());
         locRule.setUpdateTime(now);
         Integer locType2 = 1;//鍗曞搧鍖哄煙
-        if (locRule.getMixed() == 1) {
-            //娣疯浇
-            locRule.setMatnr("00000000");
-            locType2 = 2;//娣锋斁鍖哄煙
-        }
+//        if (locRule.getMixed() == 1) {
+//            //娣疯浇
+//            //locRule.setMatnr("00000000");
+//            locType2 = 2;//娣锋斁鍖哄煙
+//        }
         locRuleService.insert(locRule);
         locMastService.updateLocType2ByRBL(locType2, locRule.getRowBeg(), locRule.getRowEnd(), locRule.getBayBeg(), locRule.getBayEnd(), locRule.getLevBeg(), locRule.getLevEnd());
         return R.ok();
@@ -167,4 +179,34 @@
         return R.ok();
     }
 
+    /*************************************** 鏁版嵁鐩稿叧 ***********************************************/
+
+    /**
+     * excel瀵煎叆妯℃澘涓嬭浇
+     */
+    @RequestMapping(value = "/locCodeRule/excel/import/mould")
+    public void matExcelImportMould(HttpServletResponse response) throws IOException {
+        List<LocRuleExcel> excels = new ArrayList<>();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        String fileName = URLEncoder.encode("搴撲綅缂栫爜瑙勫垯Excel瀵煎叆妯℃澘", "UTF-8");
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), LocRuleExcel.class)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                .sheet("sheet1")
+                .doWrite(excels);
+    }
+
+    // excel瀵煎叆
+    @PostMapping(value = "/locCodeRule/excel/import/auth")
+    @ManagerAuth(memo = "搴撲綅缂栫爜瑙勫垯鏁版嵁瀵煎叆")
+    @Transactional
+    public R matExcelImport(MultipartFile file) throws IOException {
+        LocRuleExcelListener listener = new LocRuleExcelListener();
+        EasyExcel.read(file.getInputStream(), LocRuleExcel.class, listener).sheet().doRead();
+        return R.ok("鎴愬姛鍚屾"+listener.getTotal()+"鏉″晢鍝佹暟鎹�");
+    }
+
+
+
 }
diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 1bd9767..be5faa2 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -8,6 +8,7 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.CombParam;
 import com.zy.asrs.entity.param.MobileAdjustParam;
+import com.zy.asrs.entity.param.ModifyPakoutParam;
 import com.zy.asrs.entity.param.NodePakoutParam;
 import com.zy.asrs.entity.result.MobileAdjustResult;
 import com.zy.asrs.service.*;
@@ -56,6 +57,10 @@
     private MatService matService;
     @Autowired
     private WaitPakinService waitPakinService;
+    @Autowired
+    private LocRuleService locRuleService;
+    @Autowired
+    private NodeService nodeService;
 
     // 缁勬墭 ----------------------------------------------------------------------------------------------------
 
@@ -337,8 +342,26 @@
     public R recommendNodeLoc(@RequestBody HashMap<String,String> param){
 
         String zpallet = param.get("zpallet");
+        List<WaitPakin> waitPakinList = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", zpallet));
+        for (WaitPakin waitPakin : waitPakinList){
+            List<LocRule> locRules = locRuleService.find(waitPakin.getMatnr());
+            if(!Cools.isEmpty(locRules)){
+                if(!Cools.isEmpty(findNodeLoc(locRules))){
+                    return R.ok(findNodeLoc(locRules)).add(waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet",zpallet)));
+                }
+            }
 
-        return R.ok("DT-C-010202").add(waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet",zpallet)));
+            if(!Cools.isEmpty(waitPakin.getBrand())){
+                List<LocRule> locCodeRules = locRuleService.find(waitPakin.getBrand().substring(0, 4));
+                if(!Cools.isEmpty(locRules)){
+                    if(!Cools.isEmpty(findNodeLoc(locRules))){
+                        return R.ok(findNodeLoc(locRules)).add(waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet",zpallet)));
+                    }
+                }
+            }
+        }
+
+        return R.ok("").add(waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet",zpallet)));
     }
 
 
@@ -422,4 +445,61 @@
         return R.ok().add(waitPakins);
     }
 
+    @RequestMapping("/wrkdetl/auth")
+    @ManagerAuth(memo = "鎷f枡淇℃伅")
+    public R checkWrkDetl(@RequestBody String barcode){
+        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
+        if(Cools.isEmpty(wrkMast)){
+            return R.error("璇ユ墭鐩樻病鏈夊伐浣滄。");
+        }
+        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+        return R.ok().add(wrkDetls);
+    }
+
+    @RequestMapping("/modify/wrkdetl/auth")
+    @ManagerAuth(memo = "淇敼鎷f枡淇℃伅")
+    public R modifyWrkDetl(@RequestBody ModifyPakoutParam param){
+
+        String barcode = param.getBarcode();
+        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
+        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+
+        Double allPakoutAnfme = 0.0;
+        Double allModifyPakoutAnfme = 0.0;
+        for (WrkDetl wrkDetl : wrkDetls){
+            allPakoutAnfme += wrkDetl.getAnfme();
+        }
+        for (ModifyPakoutParam.CA ca : param.getParams()){
+            allModifyPakoutAnfme += ca.getAnfme();
+        }
+
+        if(!allPakoutAnfme.equals(allModifyPakoutAnfme)){
+            return R.error("淇敼鍚庢嫞鏂欑殑鏁伴噺涓庡師鏁伴噺涓嶇鍚堬紝璇烽噸鏂版牳瀵规嫞鏂欐暟閲�");
+        }
+
+        mobileService.modifyWrkDetl(wrkDetls,param.getParams(),getUserId());
+        return R.ok();
+
+    }
+
+    private String findNodeLoc(List<LocRule> locRules){
+        for (LocRule locRule : locRules) {
+            if (Cools.isEmpty(locRule.getOther())) {
+                continue;
+            }
+            EntityWrapper<Node> wrapper = new EntityWrapper<>();
+            wrapper.between("row1", locRule.getRowBeg(), locRule.getRowEnd())
+                    .between("bay1", locRule.getBayBeg(), locRule.getBayEnd())
+                    .between("lev1", locRule.getLevBeg(), locRule.getLevEnd())
+                    .eq("parent_name", locRule.getOther())
+                    .eq("status", "1");
+
+            Node node = nodeService.selectOne(wrapper);
+            if (Cools.isEmpty(node)) {
+                continue;
+            }
+            return node.getName();
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/com/zy/asrs/entity/LocRule.java b/src/main/java/com/zy/asrs/entity/LocRule.java
index 7449fae..b56eccb 100644
--- a/src/main/java/com/zy/asrs/entity/LocRule.java
+++ b/src/main/java/com/zy/asrs/entity/LocRule.java
@@ -1,24 +1,21 @@
 package com.zy.asrs.entity;
 
-import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
-import com.baomidou.mybatisplus.enums.IdType;
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
 import com.core.common.SpringUtils;
-import com.zy.system.service.UserService;
 import com.zy.system.entity.User;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import org.springframework.format.annotation.DateTimeFormat;
-import com.core.common.SpringUtils;
 import com.zy.system.service.UserService;
-import com.zy.system.entity.User;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import com.baomidou.mybatisplus.annotations.TableName;
+import org.springframework.format.annotation.DateTimeFormat;
+
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 
 @Data
 @TableName("asr_loc_rule")
@@ -36,7 +33,8 @@
     /**
      * 鍟嗗搧缂栧彿
      */
-    @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+    @ApiModelProperty(value= "鐗╂枡鍙�")
+    @ExcelProperty(value = "鐗╂枡缂栫爜鍓�4浣�")
     private String matnr;
 
     /**
@@ -61,12 +59,14 @@
      * 鎵瑰彿
      */
     @ApiModelProperty(value= "鎵瑰彿")
+    @ExcelProperty(value = "鎵瑰彿")
     private String batch;
 
     /**
      * 鍏朵粬
      */
     @ApiModelProperty(value= "鍏朵粬")
+    @ExcelProperty(value = "搴撳尯")
     private String other;
 
     /**
@@ -74,6 +74,7 @@
      */
     @ApiModelProperty(value= "寮�濮嬫帓")
     @TableField("row_beg")
+    @ExcelProperty(value = "寮�濮嬫帓")
     private Integer rowBeg;
 
     /**
@@ -81,6 +82,7 @@
      */
     @ApiModelProperty(value= "缁撴潫鎺�")
     @TableField("row_end")
+    @ExcelProperty(value = "缁撴潫鎺�")
     private Integer rowEnd;
 
     /**
@@ -88,6 +90,7 @@
      */
     @ApiModelProperty(value= "寮�濮嬪垪")
     @TableField("bay_beg")
+    @ExcelProperty(value = "寮�濮嬪垪")
     private Integer bayBeg;
 
     /**
@@ -95,6 +98,7 @@
      */
     @ApiModelProperty(value= "缁撴潫鍒�")
     @TableField("bay_end")
+    @ExcelProperty(value = "缁撴潫鍒�")
     private Integer bayEnd;
 
     /**
@@ -102,6 +106,7 @@
      */
     @ApiModelProperty(value= "寮�濮嬪眰")
     @TableField("lev_beg")
+    @ExcelProperty(value = "寮�濮嬪眰")
     private Integer levBeg;
 
     /**
@@ -109,6 +114,7 @@
      */
     @ApiModelProperty(value= "缁撴潫灞�")
     @TableField("lev_end")
+    @ExcelProperty(value = "缁撴潫灞�")
     private Integer levEnd;
 
     /**
@@ -128,6 +134,7 @@
      */
     @ApiModelProperty(value= "娣诲姞浜哄憳")
     @TableField("create_by")
+    @ExcelProperty(value = "娣诲姞浜哄憳")
     private Long createBy;
 
     /**
diff --git a/src/main/java/com/zy/asrs/entity/param/ModifyPakoutParam.java b/src/main/java/com/zy/asrs/entity/param/ModifyPakoutParam.java
new file mode 100644
index 0000000..42ce7f9
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/ModifyPakoutParam.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ModifyPakoutParam {
+    //鎵樼洏鐮�
+    String barcode;
+    //鏂欑鍙栧嚭鐨勬暟閲�
+    List<CA> params;
+
+    @Data
+    public class CA{
+        String containerCode;
+        double anfme;
+    }
+}
+
diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java
index 7ff140e..5cc7743 100644
--- a/src/main/java/com/zy/asrs/service/LocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -73,4 +73,6 @@
 
     Set<String> selectLocNo(String matnr, String batch, String csocode, String isocode);
 
+    LocDetl selectByContainerCode(String containerCode);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/LocRuleService.java b/src/main/java/com/zy/asrs/service/LocRuleService.java
index 521df50..9e6e196 100644
--- a/src/main/java/com/zy/asrs/service/LocRuleService.java
+++ b/src/main/java/com/zy/asrs/service/LocRuleService.java
@@ -10,6 +10,8 @@
 
     List<LocRule> find(String matnr);
 
+    List<LocRule> findCode(String matnr, String other);
+
     //鎵炬贩杞藉簱浣嶈鍒�
     List<LocRule> findMixed();
 
diff --git a/src/main/java/com/zy/asrs/service/MobileService.java b/src/main/java/com/zy/asrs/service/MobileService.java
index 72e8cd3..6c6f79e 100644
--- a/src/main/java/com/zy/asrs/service/MobileService.java
+++ b/src/main/java/com/zy/asrs/service/MobileService.java
@@ -1,9 +1,13 @@
 package com.zy.asrs.service;
 
+import com.zy.asrs.entity.WrkDetl;
 import com.zy.asrs.entity.param.CombParam;
 import com.zy.asrs.entity.param.MobileAdjustParam;
+import com.zy.asrs.entity.param.ModifyPakoutParam;
 import com.zy.asrs.entity.param.NodePakoutParam;
 import com.zy.system.entity.User;
+
+import java.util.List;
 
 public interface MobileService {
 
@@ -22,4 +26,6 @@
     void nodePutway(String zpallet, String locNo, User user);
 
     void nodePakout(NodePakoutParam param, User user);
+
+    void modifyWrkDetl(List<WrkDetl> wrkDetls, List<ModifyPakoutParam.CA> params, Long userId);
 }
diff --git a/src/main/java/com/zy/asrs/service/NodeService.java b/src/main/java/com/zy/asrs/service/NodeService.java
index ae259d8..5b3357e 100644
--- a/src/main/java/com/zy/asrs/service/NodeService.java
+++ b/src/main/java/com/zy/asrs/service/NodeService.java
@@ -29,4 +29,6 @@
     void locMove(String sourceLocNo, String targetLocNo, Long userId,User user);
 
     Page<Node> getPage(Page<Node> page);
+
+    Node selectByParentName(String parentName);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
index 35730ae..fd4717c 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -162,7 +162,7 @@
             agvTaskParam.setTaskPriority(agvWrkMast.getIoPri().intValue());
 
             //AgvTaskkDescribeParam
-            if(agvWrkMast.getSourceLocNo().contains("C")){
+            if(agvWrkMast.getSourceLocNo().contains("CS") || agvWrkMast.getSourceLocNo().contains("SK")){
                 agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo());
             }
             agvTaskkDescribeParam.setToLocationCode(agvWrkMast.getLocNo());
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 2a12c7e..29ecb19 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -233,6 +233,10 @@
 
     }
 
+    public LocDetl selectByContainerCode(String containerCode) {
+        return this.selectOne(new EntityWrapper<LocDetl>().eq("supp_code",containerCode));
+    }
+
     @Override
     public int updateStockFreeze(String matnr, String locNo, Integer stockFreeze) {
         return this.baseMapper.updateStockFreeze(matnr, locNo, stockFreeze);
diff --git a/src/main/java/com/zy/asrs/service/impl/LocRuleServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocRuleServiceImpl.java
index 213c542..48d8271 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocRuleServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocRuleServiceImpl.java
@@ -1,20 +1,20 @@
 package com.zy.asrs.service.impl;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.core.common.Cools;
 import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.LocRule;
 import com.zy.asrs.entity.Mat;
 import com.zy.asrs.mapper.LocRuleMapper;
-import com.zy.asrs.entity.LocRule;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.LocRuleService;
-import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.zy.asrs.service.MatService;
 import com.zy.asrs.utils.Utils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @Service("locRuleService")
@@ -38,6 +38,30 @@
         return this.baseMapper.selectByMatnr(matnr);
     }
 
+    @Override
+    public List<LocRule> findCode(String matnr,String other) {
+        if (Cools.isEmpty(matnr)) {
+            return null;
+        }
+        Mat mat = matService.selectByMatnr(matnr);
+        if (Cools.isEmpty(mat)) {
+            return null;
+        }
+        if(Cools.isEmpty(mat.getBrand())){
+            return null;
+        }
+
+        Wrapper<LocRule> wrapper = new EntityWrapper<LocRule>()
+                .eq("matnr",mat.getBrand().substring(0,4))
+                .eq("mixed",0)
+                .eq("status",1);
+
+        Utils.wapperSetCondition(wrapper,"other",other);
+
+        return this.selectList(wrapper);
+
+    }
+
     //鎵炬贩杞藉簱浣嶈鍒�
     @Override
     public List<LocRule> findMixed() {
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 b5e36a0..5de7f20 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -7,10 +7,7 @@
 import com.core.common.*;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.CombParam;
-import com.zy.asrs.entity.param.MobileAdjustParam;
-import com.zy.asrs.entity.param.NodePakoutParam;
-import com.zy.asrs.entity.param.OpenOrderPakinParam;
+import com.zy.asrs.entity.param.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.handler.WorkLogHandler;
@@ -74,6 +71,8 @@
     private NodeService nodeService;
     @Autowired
     private ManPakOutService manPakOutService;
+    @Autowired
+    private LocDetlService locDetlService;
 
     @Override
     @Transactional
@@ -474,6 +473,10 @@
             SaasUtils.insertLog(0,locNo,waitPakin.getMatnr(), waitPakin.getAnfme(),user.getUsername());
 
         });
+        Node node = nodeService.selectByUuid(locNo);
+        node.setStatus(0);
+        nodeService.updateById(node);
+
         //鐢熸垚鍏ュ簱閫氱煡鍘嗗彶妗�
         waitPakinLogService.save(zpallet);
         //鍒犻櫎鍏ュ簱閫氱煡妗�
@@ -538,6 +541,7 @@
         //淇敼搴撳瓨
         manLocDetl.setAnfme(manLocDetl.getAnfme()-manPakOut.getCount());
         if (manLocDetl.getAnfme() == 0 ){
+            checkNodeStatus(manLocDetl.getLocNo());
             manLocDetlService.delete(manLocDetlWrapper);
         }else{
             manLocDetl.setStatus(1);
@@ -550,8 +554,28 @@
         //妫�娴嬭鍗曟槸鍚﹀畬鎴�
         orderService.checkComplete(param.getOrderNo());
 
+    }
 
+    @Transactional
+    public void modifyWrkDetl(List<WrkDetl> wrkDetls, List<ModifyPakoutParam.CA> params, Long userId) {
 
+        wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no",wrkDetls.get(0).getWrkNo()));
+
+        params.forEach(param ->{
+            WrkDetl wrkDetl = new WrkDetl();
+            LocDetl locDetl = locDetlService.selectByContainerCode(param.getContainerCode());
+            BeanUtils.copyProperties(locDetl,wrkDetl);
+            wrkDetl.setWrkNo(wrkDetls.get(0).getWrkNo());
+            if(wrkDetl.getAnfme() < param.getAnfme()){
+                throw new CoolException("鏂欑"+param.getContainerCode()+"鐨勭墿鏂欐暟閲忓皬浜庢嫞鏂欐暟閲忥紝璇烽噸鏂版牳瀵�");
+            }
+            wrkDetl.setAnfme(param.getAnfme());
+            wrkDetl.setModiTime(new Date());
+            wrkDetl.setAppeTime(new Date());
+            wrkDetl.setModiUser(userId);
+            wrkDetlService.insert(wrkDetl);
+
+        });
     }
 
     private void saveManlocDetl(WaitPakin waitPakin, Date now, String locNo){
@@ -588,21 +612,17 @@
 
         return status;
 
-
-
     }
 
-    public static void main(String[] args) {
-        ManPakOut m = new ManPakOut();
-        m.setAnfme(1.0);
-        NodePakoutParam n = new NodePakoutParam();
-        n.setAnfme(1.0);
-
-        double a = 1.0;
-        double b = 1.0;
-        System.out.println(m.getAnfme() == n.getAnfme());
-        System.out.println(a == b);
-        System.out.println(Double.doubleToLongBits(m.getAnfme()) == Double.doubleToLongBits(n.getAnfme()));
+    private void checkNodeStatus(String locNo){
+        ManLocDetl manLocDetl = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo));
+        //濡傛灉搴撳瓨淇℃伅涓病鏈夋敼搴撲綅锛屽垯淇敼搴撲綅鐘舵�佷负1
+        if(Cools.isEmpty(manLocDetl)){
+            Node node = nodeService.selectByUuid(locNo);
+            node.setStatus(1);
+            nodeService.updateById(node);
+        }
     }
 
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java
index 8cbfb19..c3411f3 100644
--- a/src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java
@@ -224,4 +224,9 @@
         page.setTotal(baseMapper.listByPageCount(page.getCondition()));
         return page;
     }
+
+    @Override
+    public Node selectByParentName(String parentName) {
+        return this.selectOne(new EntityWrapper<Node>().eq("parent_name",parentName));
+    }
 }
diff --git a/src/main/java/com/zy/asrs/utils/LocRuleExcelListener.java b/src/main/java/com/zy/asrs/utils/LocRuleExcelListener.java
new file mode 100644
index 0000000..9b9afbc
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/LocRuleExcelListener.java
@@ -0,0 +1,37 @@
+package com.zy.asrs.utils;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.LocRule;
+import com.zy.asrs.service.LocRuleService;
+import com.zy.common.entity.LocRuleExcel;
+
+import java.util.Date;
+
+public class LocRuleExcelListener extends AnalysisEventListener<LocRuleExcel> {
+    private int total = 0;
+    @Override
+    public void invoke(LocRuleExcel excel, AnalysisContext ctx) {
+        LocRuleService locRuleService = SpringUtils.getBean(LocRuleService.class);
+        Date now = new Date();
+        LocRule locRule = new LocRule();
+        locRule = excel;
+        //BeanUtils.copyProperties(excel,locRule);
+        locRule.setCreateTime(now);
+        locRule.setUpdateTime(now);
+        locRule.setCstmr("1");
+        locRule.setStatus(1);
+        locRuleService.insert(locRule);
+        total++;
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+    }
+
+    public int getTotal() {
+        return total;
+    }
+}
diff --git a/src/main/java/com/zy/common/entity/LocRuleExcel.java b/src/main/java/com/zy/common/entity/LocRuleExcel.java
new file mode 100644
index 0000000..03fb276
--- /dev/null
+++ b/src/main/java/com/zy/common/entity/LocRuleExcel.java
@@ -0,0 +1,10 @@
+package com.zy.common.entity;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.zy.asrs.entity.LocRule;
+import lombok.Data;
+
+@Data
+@ExcelIgnoreUnannotated
+public class LocRuleExcel extends LocRule {
+}
diff --git a/src/main/java/com/zy/common/service/AgvCommonService.java b/src/main/java/com/zy/common/service/AgvCommonService.java
index 1f21122..9b2e5f1 100644
--- a/src/main/java/com/zy/common/service/AgvCommonService.java
+++ b/src/main/java/com/zy/common/service/AgvCommonService.java
@@ -29,6 +29,8 @@
     private AgvLocMastService agvLocMastService;
     @Autowired
     private MatService matService;
+    @Autowired
+    private LocRuleService locRuleService;
 
     public int getWorkNo(Integer wrkMk) {
         AgvWrkLastno wrkLastno = agvWrkLastnoService.selectById(wrkMk);
@@ -76,6 +78,14 @@
         //搴撲綅瑙勫垯
         if(!Cools.isEmpty(agvWaitPakinList)){
             locMast = getLocByLocRule(agvWaitPakinList.get(0),floor);
+            if(!Cools.isEmpty(locMast)){
+                return locMast;
+            }
+        }
+
+        //搴撲綅缂栫爜瑙勫垯
+        if(!Cools.isEmpty(agvWaitPakinList)){
+            locMast = getLocByLocCodeRule(agvWaitPakinList.get(0),floor);
             if(!Cools.isEmpty(locMast)){
                 return locMast;
             }
@@ -150,6 +160,37 @@
     }
 
     /*
+    搴撲綅瑙勫垯鏌ユ壘
+     */
+    private AgvLocMast getLocByLocCodeRule(AgvWaitPakin agvWaitPakin, int floor) {
+        if(Cools.isEmpty(agvWaitPakin.getBrand())){
+            return null;
+        }
+
+        //搴撳尯
+        String other = "agv-" + floor;
+        List<LocRule> locRules = locRuleService.findCode(agvWaitPakin.getMatnr(), other);
+        if(Cools.isEmpty(locRules)){
+            return null;
+        }
+
+        for (LocRule agvLocRule : locRules) {
+            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+            wrapper.between("row1",agvLocRule.getRowBeg(),agvLocRule.getRowEnd())
+                    .between("bay1",agvLocRule.getBayBeg(),agvLocRule.getBayEnd())
+                    .between("lev1",agvLocRule.getLevBeg(),agvLocRule.getLevEnd())
+                    .eq("floor",floor)
+                    .eq("loc_sts","O");
+            AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper);
+            if(!Cools.isEmpty(agvLocMast)){
+                return agvLocMast;
+            }
+        }
+
+        return null;
+    }
+
+    /*
     闈犺繎鎽嗘斁瑙勫垯
      */
     private AgvLocMast getLocByProximityRule(){
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 1633fd3..f5e4231 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -144,6 +144,13 @@
             return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
         }
 
+        //瀛樿揣鍒嗙被缂栫爜瑙勫垯
+        locMast = getLocNoCodeStepRule(matNos, locTypeDto);
+        if (locMast != null) {
+            //鎵惧埌搴撲綅锛岃繑鍥瀌to
+            return getLocNoStep6(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+
         // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
         locMast = getLocNoStep3(staDescId, matNos, locTypeDto);
         if (locMast != null) {
@@ -213,6 +220,52 @@
         return locMast;
     }
 
+    /**
+     * 搴撲綅缂栫爜瑙勫垯
+     */
+    private LocMast getLocNoCodeStepRule(List<String> matNos, LocTypeDto locTypeDto) {
+        LocMast locMast = null;
+
+        //搴撲綅缂栫爜瑙勫垯鍙兘鍦ㄧ浉鍚岀紪鐮佽揣鐗╀腑鐢熸晥
+        String matnr = "";
+        for(String matNo : matNos){
+            if("".equals(matnr)){
+                matnr = matNo.substring(0, 4);
+            }
+            if(!matnr.equals(matNo.substring(0, 4))){
+                return null;
+            }
+        }
+
+        // 搴撳尯閿佸畾
+        List<LocRule> locRules = locRuleService.findCode(Cools.isEmpty(matNos) ? null : matNos.get(0),null);
+        if (locRules == null || locRules.isEmpty()) {
+            return null;//娌℃湁搴撲綅瑙勫垯锛岃烦鍑哄綋鍓嶄换鍔�
+        }
+
+        for (LocRule locRule : locRules) {
+            if (locRule == null) {
+                continue;
+            }
+
+            List<LocMast> locMasts = locMastService.queryFreeLocMast2(locTypeDto.getLocType1(), locRule.getRowBeg(), locRule.getRowEnd(), locRule.getBayBeg(), locRule.getBayEnd(), locRule.getLevBeg(), locRule.getLevEnd());
+            for (LocMast locMast0 : locMasts) {
+                //棰勭暀绌哄簱浣�
+                if (locMastService.checkEmptyCount(locMast0, 10)) {
+                    return locMast0;
+                }
+            }
+        }
+
+//            if (locRules.get(0).getKeepGo() == 0) {
+//                //鎵句笉鍒扮┖搴撲綅锛屼笖绂佹缁х画瀵绘壘鍏朵粬闈炴贩杞藉尯鍩熷簱浣�
+//                //鎵句笉鍒板簱浣嶏紝鎶涘嚭寮傚父
+//                throw new CoolException("瑙勫垯鍖哄煙娌℃湁绌哄簱浣�");
+//            }
+
+        return locMast;
+    }
+
     // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂�
     private LocMast getLocNoStep3(Integer staDescId, List<String> matNos, LocTypeDto locTypeDto) {
         LocMast locMast = null;
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 76cd9f5..5524d58 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -53,6 +53,8 @@
     private AgvWorkService agvWorkService;
     @Autowired
     private AgvBasDevpService agvBasDevpService;
+    @Autowired
+    private AgvWrkMastService agvWrkMastService;
 //    @Autowired
 //    private ErpService erpService;
 
@@ -345,9 +347,13 @@
         AgvBasDevp agvBasDevp = agvBasDevpService.getByDevNo(param.getDevNo());
 
         if(Cools.isEmpty(agvBasDevp) || !"O".equals(agvBasDevp.getLocSts())){
-            //鍘绘壘agv宸ヤ綔妗d换鍔�
             throw new CoolException("褰撳墠绔欑偣涓嶅瓨鍦ㄦ垨鑰呯珯鐐逛笉涓虹┖");
         }
+        //鍘绘壘agv宸ヤ綔妗d换鍔�
+        if(!Cools.isEmpty(agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>()
+                .eq("barcode",containerCode)))){
+            throw new CoolException("璇ユ枡绠辨鍦ㄥ叆搴撲腑");
+        }
         //缁戝畾绔欑偣
         agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"F",containerCode);
 
diff --git a/src/main/webapp/static/js/locRule/locCodeRule.js b/src/main/webapp/static/js/locRule/locCodeRule.js
new file mode 100644
index 0000000..6bebc9b
--- /dev/null
+++ b/src/main/webapp/static/js/locRule/locCodeRule.js
@@ -0,0 +1,334 @@
+var pageCurr;
+var admin;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).extend({
+    dropdown: 'dropdown/dropdown',
+}).use(['table','laydate', 'form', 'admin', 'dropdown', 'element'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#locRule',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/locRule/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        where:{cstmr : 1},
+        cols: [[
+            {type: 'checkbox'}
+            // ,{field: 'id', align: 'center',title: 'ID'}
+            ,{field: 'matnr', align: 'center',title: '鍟嗗搧缂栧彿'}
+            ,{field: 'specs', align: 'center',title: '瑙勬牸', hide: true}
+            ,{field: 'model', align: 'center',title: '閫氱敤鍨嬪彿', hide: true}
+            ,{field: 'cstmr', align: 'center',title: '瀹㈡埛', hide: true}
+            ,{field: 'batch', align: 'center',title: '鎵瑰彿'}
+            ,{field: 'other', align: 'center',title: '搴撳尯'}
+            ,{field: 'rowBeg', align: 'center',title: '寮�濮嬫帓'}
+            ,{field: 'rowEnd', align: 'center',title: '缁撴潫鎺�'}
+            ,{field: 'bayBeg', align: 'center',title: '寮�濮嬪垪'}
+            ,{field: 'bayEnd', align: 'center',title: '缁撴潫鍒�'}
+            ,{field: 'levBeg', align: 'center',title: '寮�濮嬪眰'}
+            ,{field: 'levEnd', align: 'center',title: '缁撴潫灞�'}
+            ,{field: 'limit', align: 'center',title: '涓婇檺', hide: true}
+            ,{field: 'status$', align: 'center',title: '鐘舵��', hide: true}
+            ,{field: 'createBy$', align: 'center',title: '娣诲姞浜哄憳', hide: true}
+            ,{field: 'createTime$', align: 'center',title: '娣诲姞鏃堕棿', hide: true}
+            ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳', hide: true}
+            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿', hide: true}
+            ,{field: 'memo', align: 'center',title: '澶囨敞', hide: true}
+            ,{field: 'mixed$', align: 'center',title: '娣疯浇'}
+            // ,{field: 'keepGo$', align: 'center',title: '缁х画鎼滅储'}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit',
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(locRule)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(locRule)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'locRule': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/locRule/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(locRule)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '1000px',
+            title: (mData ? '淇敼' : '娣诲姞') + '搴撳尯瑙勫垯',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    data.field.cstmr = 1;
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/locRule/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/locRule/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['updateTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// excel瀵煎叆妯℃澘涓嬭浇
+function excelMouldDownload(){
+    layer.load(1, {shade: [0.1,'#fff']});
+    location.href = baseUrl + "/locCodeRule/excel/import/mould";
+    layer.closeAll('loading');
+}
+
+// excel瀵煎叆
+function importExcel() {
+    $("#importExcel").trigger("click");
+}
+function upload(obj){
+    if(!obj.files) {
+        return;
+    }
+    var file = obj.files[0];
+    admin.confirm('纭鍚屾 [' + file.name +'] 鏂囦欢鍚楋紵', function (index) {
+        layer.load(1, {shade: [0.1,'#fff']});
+        var url = baseUrl + "/locCodeRule/excel/import/auth";
+        var form = new FormData();
+        form.append("file", file);
+        xhr = new XMLHttpRequest();
+        xhr.open("post", url, true); //post鏂瑰紡锛寀rl涓烘湇鍔″櫒璇锋眰鍦板潃锛宼rue 璇ュ弬鏁拌瀹氳姹傛槸鍚﹀紓姝ュ鐞嗐��
+        xhr.setRequestHeader('token', localStorage.getItem('token'));
+        xhr.onload = uploadComplete; //璇锋眰瀹屾垚
+        xhr.onerror =  uploadFailed; //璇锋眰澶辫触
+        xhr.onloadend = function () { // // 涓婁紶瀹屾垚閲嶇疆鏂囦欢娴�
+            layer.closeAll('loading');
+            $("#importExcel").val("");
+        };
+        // xhr.upload.onprogress = progressFunction;//銆愪笂浼犺繘搴﹁皟鐢ㄦ柟娉曞疄鐜般��
+        xhr.upload.onloadstart = function(){//涓婁紶寮�濮嬫墽琛屾柟娉�
+            ot = new Date().getTime();   //璁剧疆涓婁紶寮�濮嬫椂闂�
+            oloaded = 0;//璁剧疆涓婁紶寮�濮嬫椂锛屼互涓婁紶鐨勬枃浠跺ぇ灏忎负0
+        };
+        xhr.send(form);
+    }, function(index){
+        $("#importExcel").val("");
+    });
+}
+function uploadComplete(evt) {
+    var res = JSON.parse(evt.target.responseText);
+    if(res.code === 200) {
+        layer.msg(res.msg, {icon: 1});
+        loadTree("");
+    } else {
+        layer.msg(res.msg, {icon: 2});
+    }
+}
+function uploadFailed(evt) {
+    var res = JSON.parse(evt.target.responseText);
+    layer.msg(res.msg, {icon: 2});
+}
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/locRule/locRule.js b/src/main/webapp/static/js/locRule/locRule.js
index 1089ff5..536302b 100644
--- a/src/main/webapp/static/js/locRule/locRule.js
+++ b/src/main/webapp/static/js/locRule/locRule.js
@@ -20,6 +20,7 @@
         toolbar: '#toolbar',
         cellMinWidth: 50,
         height: 'full-120',
+        where:{cstmr : 0},
         cols: [[
             {type: 'checkbox'}
             // ,{field: 'id', align: 'center',title: 'ID'}
@@ -28,7 +29,7 @@
             ,{field: 'model', align: 'center',title: '閫氱敤鍨嬪彿', hide: true}
             ,{field: 'cstmr', align: 'center',title: '瀹㈡埛', hide: true}
             ,{field: 'batch', align: 'center',title: '鎵瑰彿'}
-            ,{field: 'other', align: 'center',title: '鍏朵粬', hide: true}
+            ,{field: 'other', align: 'center',title: '搴撳尯'}
             ,{field: 'rowBeg', align: 'center',title: '寮�濮嬫帓'}
             ,{field: 'rowEnd', align: 'center',title: '缁撴潫鎺�'}
             ,{field: 'bayBeg', align: 'center',title: '寮�濮嬪垪'}
@@ -166,6 +167,7 @@
                 layDateRender(mData);
                 form.val('detail', mData);
                 form.on('submit(editSubmit)', function (data) {
+                    data.field.cstmr = 0;
                     var loadIndex = layer.load(2);
                     $.ajax({
                         url: baseUrl+"/locRule/"+(mData?'update':'add')+"/auth",
diff --git a/src/main/webapp/views/locRule/locCodeRule.html b/src/main/webapp/views/locRule/locCodeRule.html
index de00d88..ad88cd4 100644
--- a/src/main/webapp/views/locRule/locCodeRule.html
+++ b/src/main/webapp/views/locRule/locCodeRule.html
@@ -52,6 +52,17 @@
         <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
         <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
         <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+
+        <div class="dropdown-menu" style="float: right">
+            <button class="layui-btn layui-btn-primary layui-border-black icon-btn layui-btn-sm">&nbsp;鏁版嵁鍚屾 <i class="layui-icon layui-icon-drop"></i></button>
+            <ul class="dropdown-menu-nav dark">
+                <div class="dropdown-anchor"></div>
+                <li class="title">1st menu</li>
+                <li><a onclick="excelMouldDownload()" style="font-size: 12px"><i class="layui-icon layui-icon-template-1"></i>妯℃澘涓嬭浇</a></li>
+                <li><a onclick="importExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-upload"></i>瀵煎叆 Excel</a></li>
+                <li style="display: none"><input id="importExcel" type="file" onchange="upload(this)" ></li>
+            </ul>
+        </div>
     </div>
 </script>
 
@@ -64,7 +75,8 @@
 <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
 <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
 <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
-<script type="text/javascript" src="../../static/js/locRule/locRule.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/locRule/locCodeRule.js" charset="utf-8"></script>
+
 </body>
 <!-- 琛ㄥ崟寮圭獥 -->
 <script type="text/html" id="editDialog">
@@ -104,9 +116,12 @@
                 </div>
                 <div class="layui-form-item">
                     <label class="layui-form-label">搴撳尯: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="batch" placeholder="璇疯緭鍏ュ簱鍖�">
+                    <div class="layui-input-block" title="agv-1浠h〃1妤糰gv搴撳尯锛宎gv-3浠h〃3妤糰gv搴撳尯">
+                        <input class="layui-input" name="other" placeholder="璇疯緭鍏ュ钩搴撴垨鑰卆gv搴撳尯锛屼笉濉垯榛樿涓哄洓椤瑰簱搴撲綅瑙勫垯">
                     </div>
+                </div>
+                <div class="layui-form-item">
+
                 </div>
 <!--                <div class="layui-form-item">-->
 <!--                    <label class="layui-form-label">鍏朵粬: </label>-->
@@ -120,15 +135,15 @@
 <!--                        <input class="layui-input" name="limit" placeholder="璇疯緭鍏ヤ笂闄�">-->
 <!--                    </div>-->
 <!--                </div>-->
-                <div class="layui-form-item">
-                    <label class="layui-form-label">娣疯浇: </label>
-                    <div class="layui-input-block">
-                        <select name="mixed">
-                            <option value="1" selected>鏄�</option>
-                            <option value="0">鍚�</option>
-                        </select>
-                    </div>
-                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">娣疯浇: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <select name="mixed">-->
+<!--                            <option value="1" >鏄�</option>-->
+<!--                            <option value="0" selected>鍚�</option>-->
+<!--                        </select>-->
+<!--                    </div>-->
+<!--                </div>-->
 <!--                <div class="layui-form-item">
                     <label class="layui-form-label">娣疯浇鏈壘鍒板簱浣嶇户缁悳绱�: </label>
                     <div class="layui-input-block">
diff --git a/src/main/webapp/views/locRule/locRule.html b/src/main/webapp/views/locRule/locRule.html
index 326cb19..5591047 100644
--- a/src/main/webapp/views/locRule/locRule.html
+++ b/src/main/webapp/views/locRule/locRule.html
@@ -102,6 +102,12 @@
                         <input class="layui-input" name="batch" placeholder="璇疯緭鍏ユ壒鍙�">
                     </div>
                 </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">搴撳尯: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="other" placeholder="璇疯緭鍏ュ簱鍖猴紝涓嶅~鍒欓粯璁や负鍥涢」搴撳簱浣嶈鍒�">
+                    </div>
+                </div>
 <!--                <div class="layui-form-item">-->
 <!--                    <label class="layui-form-label">鍏朵粬: </label>-->
 <!--                    <div class="layui-input-block">-->
@@ -118,8 +124,8 @@
                     <label class="layui-form-label">娣疯浇: </label>
                     <div class="layui-input-block">
                         <select name="mixed">
-                            <option value="1" selected>鏄�</option>
-                            <option value="0">鍚�</option>
+                            <option value="1">鏄�</option>
+                            <option value="0" selected>鍚�</option>
                         </select>
                     </div>
                 </div>
diff --git a/src/main/webapp/views/mat/mat.html b/src/main/webapp/views/mat/mat.html
index 6f2e8ce..cfe2b54 100644
--- a/src/main/webapp/views/mat/mat.html
+++ b/src/main/webapp/views/mat/mat.html
@@ -385,13 +385,17 @@
                 <!-- 棰勮鍥� 4 -->
                 <div id="template-preview-4" class="template-preview" style="display: none">
                     <table class="contain" width="280" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
-                        <tr style="height: 74px">
+                        <tr style="height: 37px">
                             <td align="center" scope="col" >鍟嗗搧</td>
                             <td align="center" scope="col" style="">xxxxxx-xx/xx</td>
-                            <td align="center" scope="col" colspan="2">
+                            <td align="center" scope="col" colspan="2" rowspan="2">
                                 <img class="template-code template-qrcode" src="" width="80%">
                                 <div style="letter-spacing: 1px;margin-top: 1px; text-align: center"><span>xxxxxx</span></div>
                             </td>
+                        </tr>
+                        <tr style="height: 37px">
+                            <td align="center" scope="col" >鏁伴噺</td>
+                            <td align="center" scope="col" style=""></td>
                         </tr>
                         <tr style="height: 74px">
                             <td align="center" >瑙勬牸</td>
@@ -492,16 +496,20 @@
 <script type="text/template" id="templatePreview4" class="template-qrcode">
     {{#each data}}
     <table class="contain" width="400px" style="overflow: hidden;font-size: xx-small;table-layout: fixed; color:#000;">
-        <tr style="height: 74px;font-size: 18px; font-weight: 400" >
+        <tr style="height: 50px;font-size: 18px; font-weight: 400" >
             <td width="50px" align="center" scope="col" colspan="1">鍟嗗搧</td>
             <td width="170px" align="center" scope="col" colspan="1">{{this.maktx}}</td>
-            <td align="center" scope="col" colspan="2" >
+            <td align="center" scope="col" colspan="2" rowspan="2">
                 <img class="template-code template-qrcode" src="{{this.barcodeUrl}}" width="80%">
                 <div style="letter-spacing: 1px;margin-top: 1px; text-align: center; font-weight: 400">
                     <span>{{this.matnr}}</span>
                 </div>
             </td>
         </tr>
+        <tr style="height: 24px;font-size: 18px; font-weight: 400" >
+            <td width="50px" align="center" scope="col" colspan="1">鏁伴噺</td>
+            <td width="170px" align="center" scope="col" colspan="1"></td>
+        </tr>
         <tr style="height: 50px; font-size: 18px;font-weight: 400">
             <td width="50px" align="center" colspan="1">瑙勬牸</td>
             <td align="center" colspan="3" style="
diff --git a/src/main/webapp/views/saasRule/locRule.html b/src/main/webapp/views/saasRule/locRule.html
index 00a770b..9888e99 100644
--- a/src/main/webapp/views/saasRule/locRule.html
+++ b/src/main/webapp/views/saasRule/locRule.html
@@ -102,6 +102,12 @@
                         <input class="layui-input" name="batch" placeholder="璇疯緭鍏ユ壒鍙�">
                     </div>
                 </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">搴撳尯: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="parentName" placeholder="璇疯緭鍏ュ簱鍖�">
+                    </div>
+                </div>
 <!--                <div class="layui-form-item">-->
 <!--                    <label class="layui-form-label">鍏朵粬: </label>-->
 <!--                    <div class="layui-input-block">-->

--
Gitblit v1.9.1