From be5373a650a8a40e808ab1664e59c60807809a7c Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期日, 21 十二月 2025 08:50:58 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/task/SyncLocDetlScheduler.java        |  137 ++++++
 src/main/webapp/static/js/pakStore/locCheckOut.js               |    2 
 src/main/webapp/views/locDetl/locDetl.html                      |    7 
 src/main/webapp/static/js/pakStore/emptyOut.js                  |    2 
 src/main/java/com/zy/common/properties/SystemProperties.java    |    2 
 src/main/webapp/static/js/basDevp/basDevp.js                    |    6 
 src/main/java/com/zy/asrs/service/BasDevpService.java           |   18 
 src/main/java/com/zy/asrs/mapper/BasDevpMapper.java             |    4 
 src/main/java/com/zy/asrs/controller/WorkController.java        |   57 +
 src/main/webapp/views/order/outReturn.html                      |    8 
 src/main/java/com/zy/asrs/service/OpenService.java              |    2 
 src/main/webapp/views/order/outUQ.html                          |    8 
 src/main/java/com/zy/common/constant/MesConstant.java           |    3 
 src/main/webapp/views/basDevp/basDevp.html                      |    2 
 src/main/webapp/views/locDetl/locDetlJudged.html                |  134 ++++++
 src/main/java/com/zy/common/task/ActivateScheduler.java         |    4 
 src/main/java/com/zy/asrs/controller/LocDetlController.java     |  116 +++-
 src/main/java/com/zy/asrs/controller/ReviewController.java      |    6 
 src/main/java/com/zy/asrs/controller/MobileController.java      |    1 
 src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java |   16 
 src/main/webapp/static/js/review/review.js                      |    1 
 src/main/webapp/static/js/locDetl/locDetl2.js                   |  619 ++++++++++++++++++++++++++++
 src/main/webapp/static/js/locDetl/locDetl.js                    |   22 +
 src/main/webapp/views/order/out.html                            |    8 
 src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java  |   16 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java     |   77 +++
 src/main/resources/mapper/BasDevpMapper.xml                     |   22 +
 src/main/webapp/views/order/outMes.html                         |    8 
 28 files changed, 1,221 insertions(+), 87 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/LocDetlController.java b/src/main/java/com/zy/asrs/controller/LocDetlController.java
index 952ed10..8769b94 100644
--- a/src/main/java/com/zy/asrs/controller/LocDetlController.java
+++ b/src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -13,6 +13,7 @@
 import com.core.common.DateUtils;
 import com.core.common.R;
 import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.Mat;
 import com.zy.asrs.entity.param.ProductCalibrationExcelParam;
 import com.zy.asrs.importexcle.LocMat;
@@ -23,6 +24,9 @@
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.MatService;
 import com.zy.common.web.BaseController;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
+import lombok.Synchronized;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -97,7 +101,7 @@
     @Transactional(rollbackFor = Exception.class)
     public void importLocData1(MultipartFile multipartFile) throws IOException {
         EasyExcel.read(multipartFile.getInputStream(), LocMat.class,
-                new LocMatListener(locMastService,locDetlMapper,getUserId())).sheet().doReadSync();
+                new LocMatListener(locMastService, locDetlMapper, getUserId())).sheet().doReadSync();
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -122,7 +126,7 @@
 
     @RequestMapping(value = "/locDetl/auth")
     @ManagerAuth
-    public R stockOutList(@RequestParam(value = "locNos[]") List<String> locNos){
+    public R stockOutList(@RequestParam(value = "locNos[]") List<String> locNos) {
         if (!locNos.isEmpty()) {
             List<LocDetl> res = new ArrayList<>();
             for (String locNo : new HashSet<>(locNos)) {
@@ -138,10 +142,10 @@
 
     @RequestMapping(value = "/stock/out/list/auth")
     @ManagerAuth
-    public R stockOutList(@RequestParam(defaultValue = "1")Integer curr,
-                          @RequestParam(defaultValue = "10")Integer limit,
-                          @RequestParam Map<String, Object> param){
-        if (!Cools.isEmpty(param.get("modi_time"))){
+    public R stockOutList(@RequestParam(defaultValue = "1") Integer curr,
+                          @RequestParam(defaultValue = "10") Integer limit,
+                          @RequestParam Map<String, Object> param) {
+        if (!Cools.isEmpty(param.get("modi_time"))) {
             String val = String.valueOf(param.get("modi_time"));
             if (val.contains(RANGE_TIME_LINK)) {
                 String[] dates = val.split(RANGE_TIME_LINK);
@@ -151,7 +155,7 @@
             }
         }
         Page<LocDetl> stockOut = locDetlService.getStockOut(toPage(curr, limit, param, LocDetl.class));
-        if (stockOut.getRecords().size()==0){
+        if (stockOut.getRecords().size() == 0) {
             stockOut = locDetlService.getStockOut(toPage(1, limit, param, LocDetl.class));
         }
         return R.ok(stockOut);
@@ -159,10 +163,10 @@
 
     @RequestMapping(value = "/stock/boxOut/list/auth")
     @ManagerAuth
-    public R boxOut(@RequestParam(defaultValue = "1")Integer curr,
-                          @RequestParam(defaultValue = "10")Integer limit,
-                          @RequestParam Map<String, Object> param){
-        if (!Cools.isEmpty(param.get("modi_time"))){
+    public R boxOut(@RequestParam(defaultValue = "1") Integer curr,
+                    @RequestParam(defaultValue = "10") Integer limit,
+                    @RequestParam Map<String, Object> param) {
+        if (!Cools.isEmpty(param.get("modi_time"))) {
             String val = String.valueOf(param.get("modi_time"));
             if (val.contains(RANGE_TIME_LINK)) {
                 String[] dates = val.split(RANGE_TIME_LINK);
@@ -171,9 +175,9 @@
                 param.remove("modi_time");
             }
         }
-        param.put("matnr","绌虹");
+        param.put("matnr", "绌虹");
         Page<LocDetl> stockOut = locDetlService.getStockOut(toPage(curr, limit, param, LocDetl.class));
-        if (stockOut.getRecords().size()==0){
+        if (stockOut.getRecords().size() == 0) {
             stockOut = locDetlService.getStockOut(toPage(1, limit, param, LocDetl.class));
         }
         return R.ok(stockOut);
@@ -181,12 +185,12 @@
 
     @RequestMapping(value = "/locDetl/list/auth")// /locDetl/list/auth 鎺ュ彛闂
     @ManagerAuth
-    public R list(@RequestParam(defaultValue = "1")Integer curr,
-                  @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){
+    public R list(@RequestParam(defaultValue = "1") Integer curr,
+                  @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) {
 //        String row = "";
         EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
 //        if (param.get("row") != null) {
@@ -202,7 +206,9 @@
         excludeTrash(param);
         convert(param, wrapper);
         allLike(LocDetl.class, param.keySet(), wrapper, condition);
-        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        if (!Cools.isEmpty(orderByField)) {
+            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        }
 //        if (!row.equals("")){
 //            wrapper.and()
 //                    .where("loc_no like '" +row +"%'");
@@ -211,10 +217,10 @@
     }
 
 
-    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
-        for (Map.Entry<String, Object> entry : map.entrySet()){
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper) {
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
             String val = String.valueOf(entry.getValue());
-            if (val.contains(RANGE_TIME_LINK)){
+            if (val.contains(RANGE_TIME_LINK)) {
                 String[] dates = val.split(RANGE_TIME_LINK);
                 wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                 wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
@@ -239,10 +245,10 @@
         return R.ok();
     }
 
-	@RequestMapping(value = "/locDetl/update/auth")
-	@ManagerAuth(memo = "搴撲綅鏄庣粏淇敼")
-    public R update(LocDetl locDetl){
-        if (Cools.isEmpty(locDetl) || null==locDetl.getMatnr()){
+    @RequestMapping(value = "/locDetl/update/auth")
+    @ManagerAuth(memo = "搴撲綅鏄庣粏淇敼")
+    public R update(LocDetl locDetl) {
+        if (Cools.isEmpty(locDetl) || null == locDetl.getMatnr()) {
             return R.error();
         }
         locDetl.setModiUser(getUserId());
@@ -253,12 +259,12 @@
 
     @RequestMapping(value = "/locDetl/delete/auth")
     @ManagerAuth(memo = "搴撲綅鏄庣粏鍒犻櫎")
-    public R delete(@RequestParam String param){
+    public R delete(@RequestParam String param) {
         List<LocDetl> list = JSONArray.parseArray(param, LocDetl.class);
-        if (Cools.isEmpty(list)){
+        if (Cools.isEmpty(list)) {
             return R.error();
         }
-        for (LocDetl entity : list){
+        for (LocDetl entity : list) {
             locDetlService.delete(new EntityWrapper<>(entity));
         }
         return R.ok();
@@ -266,7 +272,7 @@
 
     @RequestMapping(value = "/locDetl/export/auth")
     @ManagerAuth(memo = "搴撲綅鏄庣粏瀵煎嚭")
-    public R export(@RequestBody JSONObject param){
+    public R export(@RequestBody JSONObject param) {
         List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
         EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
         Map<String, Object> map = excludeTrash(param.getJSONObject("locDetl"));
@@ -276,15 +282,15 @@
             if (chooseRow.length() == 1) {
                 row = "0" + chooseRow;
                 map.remove("row");
-            }else {
+            } else {
                 row = chooseRow;
                 map.remove("row");
             }
         }
         convert(map, wrapper);
-        if (!row.equals("")){
+        if (!row.equals("")) {
             wrapper.and()
-                    .where("loc_no like '" +row +"%'");
+                    .where("loc_no like '" + row + "%'");
         }
         List<LocDetl> list = locDetlService.selectList(wrapper);
         return R.ok(exportSupport(list, fields));
@@ -297,7 +303,7 @@
         wrapper.like("matnr", condition);
         Page<LocDetl> page = locDetlService.selectPage(new Page<>(0, 10), wrapper);
         List<Map<String, Object>> result = new ArrayList<>();
-        for (LocDetl locDetl : page.getRecords()){
+        for (LocDetl locDetl : page.getRecords()) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", locDetl.getMatnr());
             map.put("value", locDetl.getMatnr());
@@ -310,7 +316,7 @@
     @ManagerAuth
     public R query(@RequestBody JSONObject param) {
         Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
-        if (null != locDetlService.selectOne(wrapper)){
+        if (null != locDetlService.selectOne(wrapper)) {
             return R.parse(BaseRes.REPEAT).add(getComment(LocDetl.class, String.valueOf(param.get("key"))));
         }
         return R.ok();
@@ -318,8 +324,8 @@
 
     @RequestMapping(value = "/locDetl/statis/auth")
     @ManagerAuth
-    public R statis(@RequestParam(defaultValue = "1")Integer curr,
-                    @RequestParam(defaultValue = "10")Integer limit,
+    public R statis(@RequestParam(defaultValue = "1") Integer curr,
+                    @RequestParam(defaultValue = "10") Integer limit,
                     @RequestParam Map<String, Object> param) {
         Page<LocDetl> stockStatis = locDetlService.getStockStatis(toPage(curr, limit, param, LocDetl.class));
         for (LocDetl locDetl : stockStatis.getRecords()) {
@@ -333,6 +339,10 @@
 
     @Autowired
     private LocDetlMapper LocDetlMapper;
+
+
+    @Autowired
+    private ConfigService configService;
 
     @RequestMapping(value = "/locDetl/statis/export")
 //    @ManagerAuth
@@ -356,12 +366,40 @@
 
     /**
      * 鑾峰彇搴撳瓨鎬绘暟
+     *
      * @return
      */
     @RequestMapping("/locDetl/count")
-    public R getAllCount(){
+    public R getAllCount() {
         Integer sum = locDetlService.sum();
         return R.ok(sum);
     }
 
+
+    @RequestMapping(value = "/locDetl/sync/auth")
+    @ManagerAuth
+    @Synchronized
+    public R sync() {
+        EntityWrapper<LocMast> locMastEntityWrapper = new EntityWrapper<>();
+        int i = locMastService.selectCount(locMastEntityWrapper.in("loc_sts", "S", "R", "P", "Q"));
+        if (i > 0) {
+            return R.error("鏈�" + i + "鏉℃暟鎹浜庡嚭鍏ュ簱棰勭害鎴栫洏鐐规嫞鏂欎腑锛屾棤娉曞悓姝ュ簱瀛�");
+        }
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","sync"));
+        if (config==null){
+            config=new Config();
+            config.setValue("1");
+            config.setStatus((short) 1);
+            config.setCode("sync");
+            config.setType((short) 1);
+            config.setName("鍚屾鏈熷垵鏁版嵁MES");
+        }else {
+            if (config.getValue().equals("1")){
+                return R.error("鏁版嵁鍚屾涓紝璇峰嬁閲嶅鐐瑰嚮");
+            }
+            config.setValue("1");
+            configService.updateById(config);
+        }
+        return R.ok();
+    }
 }
diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index fd69bdf..794b363 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -675,7 +675,6 @@
     @PostMapping("/reviewCheck")
     @ManagerAuth(memo = "鍗曟嵁澶嶆牳")
     public synchronized R reviewCheck(@RequestBody List<ReviewDetl> param) {
-        System.out.println(JSONObject.toJSONString(param));
         if (Cools.isEmpty(param)) {
             return R.parse("鍙傛暟鏈夎锛岃妫�鏌ュ弬鏁�");
         }
diff --git a/src/main/java/com/zy/asrs/controller/ReviewController.java b/src/main/java/com/zy/asrs/controller/ReviewController.java
index c5cff58..f10aedd 100644
--- a/src/main/java/com/zy/asrs/controller/ReviewController.java
+++ b/src/main/java/com/zy/asrs/controller/ReviewController.java
@@ -18,6 +18,8 @@
 import com.zy.asrs.service.ReviewDetlService;
 import com.zy.asrs.service.ReviewService;
 import com.zy.common.web.BaseController;
+import com.zy.system.service.ConfigService;
+import com.zy.system.service.impl.ConfigServiceImpl;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
@@ -53,6 +55,8 @@
 
     @Resource
     private HttpServletResponse response;
+    @Autowired
+    private ConfigService configService;
 
 
     @RequestMapping("/exportReview")
@@ -96,7 +100,7 @@
     public void importOrder(MultipartFile multipartFile) throws IOException {
         // 鑰冩牳鏁版嵁鐨勫垽閲嶄娇鐢╫rder_id,check_type鐨勭粍鍚堝敮涓�绱㈠紩瑙e喅
         EasyExcel.read(multipartFile.getInputStream(), ImportReviewDto.class,
-                new ImportReviewListener(transactionManager, reviewService, reviewDetlService, snowflakeIdWorker, getUserId())).sheet().doReadSync();
+                new ImportReviewListener(configService,transactionManager, reviewService, reviewDetlService, snowflakeIdWorker, getUserId())).sheet().doReadSync();
     }
 
 
diff --git a/src/main/java/com/zy/asrs/controller/WorkController.java b/src/main/java/com/zy/asrs/controller/WorkController.java
index 0fb0d13..72f0af3 100644
--- a/src/main/java/com/zy/asrs/controller/WorkController.java
+++ b/src/main/java/com/zy/asrs/controller/WorkController.java
@@ -3,6 +3,7 @@
 import com.core.annotations.ManagerAuth;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.entity.WaitPakin;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.param.FullStoreParam;
@@ -37,32 +38,32 @@
 
     @RequestMapping("/available/put/site")
     @ManagerAuth()
-    public R availablePutSite(){
+    public R availablePutSite() {
         return R.ok().add(basDevpService.getAvailableInSite());
     }
 
     @RequestMapping("/available/empty/put/site")
     @ManagerAuth()
-    public R availableEmptyPutSite(){
+    public R availableEmptyPutSite() {
         return R.ok().add(basDevpService.getAvailableEmptyInSite());
     }
 
     @RequestMapping("/available/take/site")
     @ManagerAuth()
-    public R availableTakeSite(){
+    public R availableTakeSite() {
         List<Map<String, Object>> result = new ArrayList<>();
-        List<Integer> outSite = basDevpService.getAvailableOutSite(101);
-        for (Integer siteId : outSite) {
+        List<BasDevp> outSite = basDevpService.getAvailableOutSiteAndDesc(101);
+        for (BasDevp siteId : outSite) {
             Map<String, Object> map = new HashMap<>();
-            map.put("siteId", siteId);
-            map.put("desc", siteId + "锛堝叏鏉垮嚭搴撳彛锛�");
+            map.put("siteId", siteId.getDevNo());
+            map.put("desc", siteId.getDevNo() + siteId.getDecDesc());
             result.add(map);
         }
-        List<Integer> pickOutSite = basDevpService.getAvailableOutSite(103);
-        for (Integer siteId : pickOutSite) {
+        List<BasDevp> pickOutSite = basDevpService.getAvailableOutSiteAndDesc(103);
+        for (BasDevp siteId : pickOutSite) {
             Map<String, Object> map = new HashMap<>();
-            map.put("siteId", siteId);
-            map.put("desc", siteId + "锛堟嫞鏂欏嚭搴撳彛锛�");
+            map.put("siteId", siteId.getDevNo());
+            map.put("desc", siteId.getDevNo() + siteId.getDecDesc());
             result.add(map);
         }
         return R.ok().add(result);
@@ -70,20 +71,42 @@
 
     @RequestMapping("/available/take/check/site")
     @ManagerAuth()
-    public R availableTakeCheckSite(){
+    public R availableTakeCheckSite() {
         return R.ok().add(basDevpService.getAvailableOutSite(107));
     }
 
     @RequestMapping("/available/empty/take/site")
     @ManagerAuth()
-    public R availableEmptyTakeSite(){
+    public R availableEmptyTakeSite() {
         return R.ok().add(basDevpService.getAvailableEmptyOutSite());
+    }
+
+    @RequestMapping("/available/take/check/siteDesc")
+    @ManagerAuth()
+    public R availableTakeCheckSiteDesc() {
+        List<BasDevp> availableOutSite = basDevpService.getAvailableOutSiteAndDesc(107);
+        List<String> data = new ArrayList<>();
+        for (BasDevp siteId : availableOutSite) {
+            data.add(siteId.getDevNo() + siteId.getDecDesc());
+        }
+        return R.ok().add(data);
+    }
+
+    @RequestMapping("/available/empty/take/siteDesc")
+    @ManagerAuth()
+    public R availableEmptyTakeSiteDesc() {
+        List<BasDevp> availableOutSite = basDevpService.getAvailableEmptyOutSiteAndDesc();
+        List<String> data = new ArrayList<>();
+        for (BasDevp siteId : availableOutSite) {
+            data.add(siteId.getDevNo() + siteId.getDecDesc());
+        }
+        return R.ok().add(data);
     }
 
     @RequestMapping("/full/store/put/start")
     @ManagerAuth(memo = "鍏ㄦ澘鍏ュ簱")
     public R fullStorePutStart(@RequestBody FullStoreParam fullStoreParam) {
-        return R.ok("鍏ュ簱鍚姩鎴愬姛").add(workService.startupFullPutStore(fullStoreParam,getUserId()));
+        return R.ok("鍏ュ簱鍚姩鎴愬姛").add(workService.startupFullPutStore(fullStoreParam, getUserId()));
     }
 
     @RequestMapping("/plate/out/start")
@@ -131,10 +154,10 @@
     @RequestMapping("/mat/turn/over/out/start")
     @ManagerAuth(memo = "鍝佸彿绉讳氦")
     public R turnMatLocDetl(@RequestBody EmptyPlateOutParam param) {
-        if (Cools.isEmpty(param) || Cools.isEmpty(param.getLocDetls(),param.getMatId()) || Cools.isEmpty(param.getLocDetls().get(0)) || Cools.isEmpty(param.getLocDetls().get(0).getMatnr())){
+        if (Cools.isEmpty(param) || Cools.isEmpty(param.getLocDetls(), param.getMatId()) || Cools.isEmpty(param.getLocDetls().get(0)) || Cools.isEmpty(param.getLocDetls().get(0).getMatnr())) {
             return R.error("鍙傛暟涓虹┖");
         }
-        if (param.getLocDetls().size()>1){
+        if (param.getLocDetls().size() > 1) {
             return R.error("璇峰崟鏉℃暟鎹慨鏀癸紝璋ㄦ厧鎿嶄綔锛�");
         }
         workService.turnMatLocDetl(param, getUserId());
@@ -151,7 +174,7 @@
     @RequestMapping("/hand/control/wrkMast")
     @ManagerAuth(memo = "鎵嬪姩澶勭悊宸ヤ綔妗�")
     public R handControlWrkMast(@RequestParam String workNo,
-                                @RequestParam Integer type){
+                                @RequestParam Integer type) {
         if (type == 1) {
             workService.completeWrkMast(workNo, getUserId());
             return R.ok("宸ヤ綔妗e凡瀹屾垚");
diff --git a/src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java b/src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java
index 1ce2a78..08408e1 100644
--- a/src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java
+++ b/src/main/java/com/zy/asrs/importexcle/ImportReviewListener.java
@@ -12,6 +12,8 @@
 import com.zy.asrs.entity.ReviewDetl;
 import com.zy.asrs.service.ReviewDetlService;
 import com.zy.asrs.service.ReviewService;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.transaction.PlatformTransactionManager;
@@ -48,15 +50,18 @@
     private final Long userId;
     private TransactionStatus transactionStatus;
 
+    private ConfigService configService;
+
     /**
      * 濡傛灉浣跨敤浜唖pring,璇蜂娇鐢ㄨ繖涓瀯閫犳柟娉曘�傛瘡娆″垱寤篖istener鐨勬椂鍊欓渶瑕佹妸spring绠$悊鐨勭被浼犺繘鏉�
      */
-    public ImportReviewListener(PlatformTransactionManager transactionManager, ReviewService reviewService, ReviewDetlService reviewDetlService, SnowflakeIdWorker snowflakeIdWorker, Long userId) {
+    public ImportReviewListener(ConfigService configService, PlatformTransactionManager transactionManager, ReviewService reviewService, ReviewDetlService reviewDetlService, SnowflakeIdWorker snowflakeIdWorker, Long userId) {
         this.transactionManager = transactionManager;
         this.reviewService = reviewService;
         this.reviewDetlService = reviewDetlService;
         this.snowflakeIdWorker = snowflakeIdWorker;
         this.userId = userId;
+        this.configService = configService;
     }
 
     private Set<String> uniquePackNos = new HashSet<>(); // 鐢ㄤ簬鍘婚噸鍖呰缁勫彿
@@ -82,13 +87,20 @@
         // 棣栨鍑虹幇锛岃褰曞苟澶勭悊
         uniquePackNos.add(data.getColumn1());
 
+        String orderNo = "";
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "orderNo"));
+        if (config != null && config.getStatus() == 1 && config.getValue() != null) {
+            orderNo = config.getValue();
+        }
+
         String time = DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F);
         Review review = reviewService.selectOne(new EntityWrapper<Review>().eq("order_no", data.getColumn1()));
         if (review == null) {
             review = new Review();
             review.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
-            review.setOrderNo(data.getColumn1());
+            review.setOrderNo(orderNo + data.getColumn1());
             review.setOrderTime(time);
+            review.setDefNumber("Excel瀵煎叆");
             review.setSettle(1L);
             review.setStatus(1);
             review.setCreateBy(userId);
diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
index 668d2ca..91e96f6 100644
--- a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
@@ -15,4 +15,8 @@
     List<Integer> getAvailableInSite(@Param("typeNo") Integer typeNo);
 
     List<Integer> getAvailableOutSite(@Param("typeNo") Integer typeNo);
+
+    List<BasDevp> getAvailableInSiteAndDesc(@Param("typeNo") Integer typeNo);
+
+    List<BasDevp> getAvailableOutSiteAndDesc(@Param("typeNo") Integer typeNo);
 }
diff --git a/src/main/java/com/zy/asrs/service/BasDevpService.java b/src/main/java/com/zy/asrs/service/BasDevpService.java
index 3e8f21f..74b891e 100644
--- a/src/main/java/com/zy/asrs/service/BasDevpService.java
+++ b/src/main/java/com/zy/asrs/service/BasDevpService.java
@@ -20,18 +20,36 @@
     List<Integer> getAvailableEmptyInSite();
 
     /**
+     * 绌烘澘鍏ュ簱绔�
+     * @return
+     */
+    List<BasDevp> getAvailableEmptyInSiteAndDesc();
+
+    /**
      * 鍑哄簱绔�
      * @return
      */
     List<Integer> getAvailableOutSite(Integer typeNo);
 
     /**
+     * 鍑哄簱绔�
+     * @return
+     */
+    List<BasDevp>   getAvailableOutSiteAndDesc(Integer typeNo);
+
+    /**
      * 绌烘澘鍑哄簱绔�
      * @return
      */
     List<Integer> getAvailableEmptyOutSite();
 
     /**
+     * 绌烘澘鍑哄簱绔�
+     * @return
+     */
+    List<BasDevp> getAvailableEmptyOutSiteAndDesc();
+
+    /**
      * 鐩爣绔欑偣鐘舵�佹娴�
      * @param devpNo
      */
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index 965968d..65a4355 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -159,6 +159,8 @@
 
     R groupOrderConfirm(GroupOrderConfirmParam param);
 
+    R groupOrderConfirmV2(GroupOrderConfirmParam param);
+
     R returnOrder(ReturnOrderConfirmParam param);
 
     R unQualifiedOrder(UnQualifiedOrderConfirmParam param);
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
index fa2dd99..60a62d1 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -28,8 +28,18 @@
     }
 
     @Override
+    public List<BasDevp> getAvailableEmptyInSiteAndDesc() {
+        return this.baseMapper.getAvailableInSiteAndDesc(10);
+    }
+
+    @Override
     public List<Integer> getAvailableOutSite(Integer typeNo) {
         return this.baseMapper.getAvailableOutSite(typeNo);
+    }
+
+    @Override
+    public List<BasDevp> getAvailableOutSiteAndDesc(Integer typeNo) {
+        return this.baseMapper.getAvailableOutSiteAndDesc(typeNo);
     }
 
     @Override
@@ -37,6 +47,12 @@
         return this.baseMapper.getAvailableOutSite(110);
     }
 
+
+    public List<BasDevp> getAvailableEmptyOutSiteAndDesc() {
+        return this.baseMapper.getAvailableOutSiteAndDesc(110);
+    }
+
+
     @Override
     public BasDevp checkSiteStatus(Integer devpNo) {
         return checkSiteStatus(devpNo, false);
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 343d469..b19268d 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -99,6 +99,9 @@
     @Autowired
     private ApiLogService apiLogService;
 
+    @Autowired
+    private WrkDetlLogService wrkDetlLogService;
+
     @Resource
     private MatMapper matMapper;
 
@@ -116,6 +119,14 @@
 
     @Resource
     private BasCrnpMapper basCrnpMapper;
+
+    @Resource
+    private ReviewService reviewService;
+
+
+    @Resource
+    private ReviewDetlService reviewDetlService;
+
 
     @Override
     @Transactional
@@ -1260,7 +1271,7 @@
                     // 绠卞彿
                     HashMap<String, Object> zz = new HashMap<>();
                     List<GwmsGenerateInventoryDto.Rolls> rolls = obj.getRolls();
-                    for(GwmsGenerateInventoryDto.Rolls roll :rolls) {
+                    for (GwmsGenerateInventoryDto.Rolls roll : rolls) {
                         barcodeCount2 = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("model", roll.getRollNo()));
                         if (barcodeCount2 > 0) {
                             throw new CoolException("鍗峰彿宸插瓨鍦ㄥ伐浣滄。锛堣緭閫佺嚎锛夛細" + roll.getRollNo());
@@ -2385,6 +2396,70 @@
 
     @Override
     @Transactional
+    public R groupOrderConfirmV2(GroupOrderConfirmParam param) {
+        // 1. 鏌ヨ鍗曟嵁鏄惁瀛樺湪
+        String time = DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F);
+        Review review = reviewService.selectOne(new EntityWrapper<Review>().eq("order_no", param.getGroupOrderNumber()));
+        if (review == null) {
+            review = new Review();
+            review.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+            review.setOrderNo(param.getGroupOrderNumber());
+            review.setOrderTime(time);
+            review.setDefNumber("绯荤粺鍚屾");
+            review.setSettle(1L);
+            review.setStatus(1);
+            review.setCreateBy(9527L);
+            review.setCreateTime(new Date());
+
+            reviewService.insert(review);
+            review = reviewService.selectOne(new EntityWrapper<Review>().eq("order_no", param.getGroupOrderNumber()));
+        } else {
+            // 1.2 瀛樺湪锛屾洿鏂板崟鎹姸鎬�
+            review.setSettle(1L);
+            reviewService.updateById(review);
+        }
+        reviewService.delete(
+                new EntityWrapper<Review>().eq("order_no", param.getGroupOrderNumber())
+        );
+
+        // 2. 涓�涓�瀵瑰簲閬嶅巻
+        List<GroupOrderConfirmParam.PackageGroupNo> pkgList = param.getPackageGroupNos();
+        List<GroupOrderConfirmParam.VolumeNumber> volList = param.getVolumeNumbers();
+
+        int size = Math.min(pkgList.size(), volList.size()); // 闃叉瓒婄晫
+        for (int i = 0; i < size; i++) {
+            GroupOrderConfirmParam.PackageGroupNo pg = pkgList.get(i);
+            GroupOrderConfirmParam.VolumeNumber vn = volList.get(i);
+
+            // 鏌ヨ鏄惁宸插瓨鍦ㄨ detl
+            ReviewDetl detl = reviewDetlService.selectOne(new EntityWrapper<ReviewDetl>().eq("order_no", param.getGroupOrderNumber()).eq("brand", pg.getPackageGroupNo()).eq("model", vn.getVolumeNumber()));
+
+            if (detl == null) {
+                List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectList(new EntityWrapper<WrkDetlLog>().eq("brand", pg.getPackageGroupNo()).eq("model", vn.getVolumeNumber()));
+                detl = new ReviewDetl();
+                if (wrkDetlLogs != null && !wrkDetlLogs.isEmpty() && wrkDetlLogs.size() >= 1) {
+                    detl.setSpecs(wrkDetlLogs.get(0).getSpecs());
+                    detl.setBatch(wrkDetlLogs.get(0).getBatch());
+                    detl.setAnfme(wrkDetlLogs.get(0).getAnfme());
+                    detl.setMatnr(wrkDetlLogs.get(0).getMatnr());
+                    detl.setMaktx(wrkDetlLogs.get(0).getMaktx());
+                    detl.setUnit(wrkDetlLogs.get(0).getUnit());
+                    detl.setDeadTime(wrkDetlLogs.get(0).getModiTime$());
+                }
+                detl.setOrderId(review.getId());
+                detl.setOrderNo(param.getGroupOrderNumber());
+                detl.setCreateTime(new Date());
+                detl.setBrand(pg.getPackageGroupNo());   // 鍖呰缁勫彿
+                detl.setModel(vn.getVolumeNumber());     // 鍗峰彿
+                reviewDetlService.insert(detl);
+            }
+        }
+        return R.ok("缁勮揣纭鎴愬姛");
+    }
+
+
+    @Override
+    @Transactional
     public R returnOrder(ReturnOrderConfirmParam param) {
         if (Cools.isEmpty(param.getOrderNumber())) {
             param.setOrderNumber("THCK" + DateUtils.convert(new Date(), DateUtils.yyyyMMdd));
diff --git a/src/main/java/com/zy/asrs/task/SyncLocDetlScheduler.java b/src/main/java/com/zy/asrs/task/SyncLocDetlScheduler.java
new file mode 100644
index 0000000..6b35b47
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/SyncLocDetlScheduler.java
@@ -0,0 +1,137 @@
+package com.zy.asrs.task;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.param.GwmsGenerateInventoryDto;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.service.LocDetlService;
+import com.zy.common.constant.MesConstant;
+import com.zy.common.utils.HttpHandler;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ */
+@Component
+@Slf4j
+public class SyncLocDetlScheduler {
+
+    @Autowired
+    private LocDetlService locDetlService;
+
+    @Autowired
+    private ApiLogService apiLogService;
+
+    @Autowired
+    private ConfigService configService;
+
+    @Scheduled(fixedRate = 3000)
+    @Async("orderThreadPool")
+    public void sync() {
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "sync"));
+        if (config != null && config.getValue() != null && (config.getValue().equals("true") || config.getValue().equals("1"))) {
+            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<>());
+            GwmsGenerateInventoryDto gwmsGenerateInventoryDto = new GwmsGenerateInventoryDto();
+            gwmsGenerateInventoryDto.setWarehouseType(4);
+            List<GwmsGenerateInventoryDto.MatList> matLists = new ArrayList<>();
+            for (LocDetl wrkDetl : locDetls) {
+                gwmsGenerateInventoryDto.setBarcode(wrkDetl.getBarcode());
+                //gwmsGenerateInventoryDto.setPalletizingNo(wrkMast.getStaNo());
+
+                boolean flag = true;
+                for (GwmsGenerateInventoryDto.MatList matList : matLists) {
+                    if (matList.getPackageGroupNo().equals(wrkDetl.getBrand())) {
+                        matList.getRolls().add(new GwmsGenerateInventoryDto.Rolls(wrkDetl.getModel(),
+                                wrkDetl.getUnit(), wrkDetl.getMaktx(), wrkDetl.getLength(),
+                                Integer.parseInt(wrkDetl.getSpecs()), wrkDetl.getWeight(), wrkDetl.getVolume(),
+                                wrkDetl.getManuDate()));
+                        flag = false;
+                        break;
+                    }
+                }
+                if (flag) {
+                    GwmsGenerateInventoryDto.MatList matList = new GwmsGenerateInventoryDto.MatList();
+                    matList.setBoxPos(wrkDetl.getOrigin());
+                    matList.setPackageGroupNo(wrkDetl.getBrand());
+                    matList.setOutOrIn("in");
+                    matList.setStockType("鎴愬搧鍏ュ簱");
+                    matList.setBoxType(wrkDetl.getColor());
+                    matList.setRollType(wrkDetl.getManu());
+                    matList.setWideInWidth(wrkDetl.getItemNum());
+                    matList.setThickness(wrkDetl.getSku());
+                    List<GwmsGenerateInventoryDto.Rolls> rollsList = new ArrayList<>();
+                    GwmsGenerateInventoryDto.Rolls roll = new GwmsGenerateInventoryDto.Rolls(wrkDetl.getModel(),
+                            wrkDetl.getUnit(), wrkDetl.getMaktx(), wrkDetl.getLength(),
+                            Integer.parseInt(wrkDetl.getSpecs()), wrkDetl.getWeight(), wrkDetl.getVolume(),
+                            wrkDetl.getManuDate());
+                    rollsList.add(roll);
+                    matList.setRolls(rollsList);
+                    matLists.add(matList);
+                }
+            }
+            gwmsGenerateInventoryDto.setMatList(matLists);
+            boolean success = false;
+            // 鑾峰彇璇锋眰澶�
+            Map<String, Object> headers = new HashMap<>();
+            headers.put("Content-Type", "application/json;charset=UTF-8");
+
+            // 鏋勯�犺姹備綋
+            String body = JSON.toJSONString(gwmsGenerateInventoryDto);
+            String response = "";
+            try {
+                response = new HttpHandler.Builder()
+                        .setUri(MesConstant.MES_CC_IP_PORT)
+                        .setPath(MesConstant.MES_CC_KCTB_URL)
+                        .setHeaders(headers)
+                        .setJson(body)
+                        .build()
+                        .doGet();
+                if (!Cools.isEmpty(response)) {
+                    JSONObject jsonObject1 = JSONObject.parseObject(response);
+                    int code = (int) jsonObject1.get("code");
+                    boolean state = jsonObject1.getBoolean("state");
+                    if (code == 200 && state) {
+                        success = true;
+                    }
+                } else {
+                    log.error("鍚屾鏈熷垵鏁版嵁澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_KCTB_URL, body, response);
+                }
+            } catch (Exception e) {
+                log.error("鍚屾鏈熷垵鏁版嵁寮傚父锛歿}", e.getMessage());
+            } finally {
+                config.setValue("0");
+                configService.updateById(config);
+                try {
+                    // 淇濆瓨鎺ュ彛鏃ュ織
+                    apiLogService.save(
+                            "鍚屾鏈熷垵鏁版嵁",
+                            MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_KCTB_URL,
+                            null,
+                            "127.0.0.1",
+                            null,
+                            response,
+                            success
+                    );
+                } catch (Exception e) {
+                    log.error("", e);
+                }
+            }
+        }
+
+    }
+
+}
diff --git a/src/main/java/com/zy/common/constant/MesConstant.java b/src/main/java/com/zy/common/constant/MesConstant.java
index 10681bd..7d36d27 100644
--- a/src/main/java/com/zy/common/constant/MesConstant.java
+++ b/src/main/java/com/zy/common/constant/MesConstant.java
@@ -30,6 +30,9 @@
     // 涓�妤艰繑淇叆搴撴帹閫乵es鍋氳褰�
     public static final String MES_CC_FXRK_URL = "/productInventory/v1/saveDto";
 
+    //鍚屾鏈熷垵鏁版嵁(MES鎻愪緵)
+    public static final String MES_CC_KCTB_URL = "/productInventory/v1/saveListDto";
+
     // MES璐ㄩ噺IP鍦板潃**********************************************************
     public static final String MES_ZL_IP_PORT = "http://172.22.152.3:8157";
 
diff --git a/src/main/java/com/zy/common/properties/SystemProperties.java b/src/main/java/com/zy/common/properties/SystemProperties.java
index 047cbc6..8ef3b4a 100644
--- a/src/main/java/com/zy/common/properties/SystemProperties.java
+++ b/src/main/java/com/zy/common/properties/SystemProperties.java
@@ -15,7 +15,7 @@
     public static final String SALT = "123456789qwertyu";
 
     // 绯荤粺婵�娲荤姸鎬� (榛樿鏈縺娲�)
-    public static boolean SYSTEM_ACTIVATION = Boolean.FALSE;
+    public static boolean SYSTEM_ACTIVATION = Boolean.TRUE;
 
     public static String getActivationCode(String fileName){
         StringBuilder activationCode = new StringBuilder();
diff --git a/src/main/java/com/zy/common/task/ActivateScheduler.java b/src/main/java/com/zy/common/task/ActivateScheduler.java
index 4b96119..968b76a 100644
--- a/src/main/java/com/zy/common/task/ActivateScheduler.java
+++ b/src/main/java/com/zy/common/task/ActivateScheduler.java
@@ -18,8 +18,8 @@
 public class ActivateScheduler {
 
 //    @Scheduled(cron = "0/1 * 8 * * ? ") // 姣忓ぉ8鐐�
-    @Scheduled(cron = "* 0/1 * * * ? ") // 姣忓垎閽�
-    @PostConstruct
+    //@Scheduled(cron = "* 0/1 * * * ? ") // 姣忓垎閽�
+    //@PostConstruct
     private void execute(){
         // 鑾峰彇婵�娲荤爜
         String activationCode = SystemProperties.getActivationCode(OSinfo.getOSname().getActivationCodePath());
diff --git a/src/main/resources/mapper/BasDevpMapper.xml b/src/main/resources/mapper/BasDevpMapper.xml
index 7cd9d8e..1e6e104 100644
--- a/src/main/resources/mapper/BasDevpMapper.xml
+++ b/src/main/resources/mapper/BasDevpMapper.xml
@@ -68,4 +68,26 @@
         group by abd.dev_no
     </select>
 
+    <select id="getAvailableInSiteAndDesc" resultMap="BaseResultMap">
+        select
+            abd.dev_no,abd.dec_desc
+        from asr_bas_devp abd
+                 left join asr_sta_desc asd on abd.dev_no = asd.stn_no
+        where 1=1
+          and asd.type_no = #{typeNo}
+        -- and abd.in_enable = 'Y'
+        group by abd.dev_no,abd.dec_desc
+    </select>
+
+    <select id="getAvailableOutSiteAndDesc" resultMap="BaseResultMap">
+        select
+            abd.dev_no,abd.dec_desc
+        from asr_bas_devp abd
+                 left join asr_sta_desc asd on abd.dev_no = asd.stn_no
+        where 1=1
+          and asd.type_no = #{typeNo}
+        -- and abd.out_enable = 'Y'
+        group by abd.dev_no,abd.dec_desc
+    </select>
+
 </mapper>
diff --git a/src/main/webapp/static/js/basDevp/basDevp.js b/src/main/webapp/static/js/basDevp/basDevp.js
index 535e6e7..6b694c9 100644
--- a/src/main/webapp/static/js/basDevp/basDevp.js
+++ b/src/main/webapp/static/js/basDevp/basDevp.js
@@ -21,7 +21,7 @@
             {type: 'checkbox', fixed: 'left'}
 //            ,{field: 'id', title: 'ID', sort: true,align: 'center', fixed: 'left', width: 80}
             ,{field: 'devNo', align: 'center',sort:true,title: '缂栧彿'}
-            // ,{field: 'decDesc', align: 'center',title: '璁惧鎻忚堪'}
+            ,{field: 'decDesc', align: 'center',title: '璁惧鎻忚堪'}
             // ,{field: 'devMk', align: 'center',title: '澶囨敞'}
             ,{field: 'inEnable', align: 'center',title: '鍙叆', templet:function(row){
                     var html = "<input value='inEnable' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
@@ -68,13 +68,13 @@
                     if(row.inreq1 === 'Y'){html += " checked ";}
                     html += ">";
                     return html;
-                }}
+                }, hide:true}
             ,{field: 'inreq2', align: 'center',title: '闇�姹�2', templet:function(row){
                     var html = "<input value='inreq2' type='checkbox' lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'";
                     if(row.inreq2 === 'Y'){html += " checked ";}
                     html += ">";
                     return html;
-                }}
+                }, hide:true}
             ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�', edit:true,  style:'color: blue;font-weight: bold'}
             // ,{field: 'wrkNo1', align: 'center',title: ''}
             ,{field: 'locType1$', align: 'center',title: '楂樹綆'}
diff --git a/src/main/webapp/static/js/locDetl/locDetl.js b/src/main/webapp/static/js/locDetl/locDetl.js
index b6adad1..9d58342 100644
--- a/src/main/webapp/static/js/locDetl/locDetl.js
+++ b/src/main/webapp/static/js/locDetl/locDetl.js
@@ -72,6 +72,7 @@
         elem: '#locDetl',
         headers: {token: localStorage.getItem('token')},
         url: baseUrl+'/locDetl/list/auth',
+
         page: true,
         limit: 16,
         limits: [16, 30, 50, 100, 200, 500],
@@ -492,6 +493,26 @@
         tableReload(false);
     });
 
+    // 鍚屾鎺ュ彛
+    form.on('submit(sync)', function (data) {
+        layer.confirm('纭畾鍚屾鏁版嵁鍚�', function(){
+            $.ajax({
+                url: baseUrl+"/locDetl/sync/auth",
+                headers: {'token': localStorage.getItem('token')},
+                method: 'GET',
+                success: function (res) {
+                    if (res.code === 200){
+                        layer.closeAll();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg)
+                    }
+                }
+            })
+        });
+    });
+
     // 鏃堕棿閫夋嫨鍣�
     layDate.render({
         elem: '#modiTime\\$',
@@ -512,6 +533,7 @@
 
 function tableReload(child) {
     var searchData = {
+        "three_code":"寰呭垽"
     };
     $.each($('#search-box [name]').serializeArray(), function() {
         searchData[this.name] = this.value;
diff --git a/src/main/webapp/static/js/locDetl/locDetl2.js b/src/main/webapp/static/js/locDetl/locDetl2.js
new file mode 100644
index 0000000..7412403
--- /dev/null
+++ b/src/main/webapp/static/js/locDetl/locDetl2.js
@@ -0,0 +1,619 @@
+var pageCurr;
+function getCol() {
+    var cols = [
+        {field: 'locNo$', align: 'center',title: '搴撲綅鍙�'}
+        // ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О', sort:true,hide: true}
+        // ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', hide: true}
+        // ,{field: 'batch', align: 'center',title: '鎵规', width: 250, sort:true,hide: true}
+        ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+        ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'}
+        ,{field: 'matnr', align: 'center',title: '瑙勬牸', sort:true,width: 150}
+        ,{field: 'batch', align: 'center',title: '绌虹灏哄', hide: true}
+        ,{field: 'memo', align: 'center',title: '绌虹澶囨敞', hide: true}
+        ,{field: 'brand', align: 'center',title: '鍖呰缁勫彿', hide: false,width: 150}
+        ,{field: 'model', align: 'center',title: '鍗峰彿', hide: false,width: 150}
+        ,{field: 'unit', align: 'center',title: '绠卞彿', hide: false,width: 150}
+        ,{field: 'color', align: 'center',title: '鏈ㄧ绫诲瀷', hide: false}
+        ,{field: 'manu', align: 'center',title: '绠¤姱绫诲瀷', hide: true}
+        ,{field: 'sku', align: 'center',title: '瀹炴祴瀹藉箙', hide: true}
+        ,{field: 'itemNum', align: 'center',title: '鐢熺當鍘氬害', hide: true}
+        ,{field: 'manuDate', align: 'center',title: '鍒嗗垏涓嬫枡鏃堕棿', hide: true,width: 180}
+        ,{field: 'brand$', align: 'center',title: '鏈ㄧ绫诲瀷', hide: true}
+        // ,{field: 'price', align: 'center',title: '浠锋牸', hide: true}
+        // ,{field: 'units', align: 'center',title: '鍗曚綅閲�', hide: true}
+        // ,{field: 'barcode', align: 'center',title: '鏉$爜', hide: true}
+        ,{field: 'origin', align: 'center',title: '鏈ㄧ浣嶇疆', hide: true}
+        // ,{field: 'safeQty', align: 'center',title: '瀹夊叏搴撳瓨閲�', hide: true}
+        ,{field: 'weight', align: 'center',title: '鍗曠鍑�閲�', hide: false}
+        ,{field: 'length', align: 'center',title: '闀垮害', hide: false}
+        ,{field: 'volume', align: 'center',title: '鍗曠姣涢噸', hide: true}
+        ,{field: 'specs', align: 'center',title: '鎺ュご', hide:true}
+        ,{field: 'suppCode', align: 'center',title: '鏂版棫', hide:true}
+        ,{field: 'deadWarn$', align: 'center',title: '鐞嗚揣鐘舵��', hide: false}
+
+
+        ,{
+            field: 'threeCode',
+            align: 'center',
+            title: '鍚堟牸鍚�',
+            hide: false,
+            templet: function(d) {
+                return d.threeCode ? d.threeCode : '寰呭垽';
+            }
+        }
+        // ,{field: 'supp', align: 'center',title: '渚涘簲鍟�', hide: true}
+        // ,{field: 'suppCode', align: 'center',title: '渚涘簲鍟嗙紪鐮�', hide: true}
+        // ,{field: 'beBatch$', align: 'center',title: '鏄惁鎵规', hide: true}
+        // ,{field: 'deadTime', align: 'center',title: '淇濊川鏈�', hide: true}
+        // ,{field: 'deadWarn', align: 'center',title: '棰勮澶╂暟', hide: true}
+        // ,{field: 'source$', align: 'center',title: '鍒惰喘', hide: true}
+        // ,{field: 'check$', align: 'center',title: '瑕佹眰妫�楠�', hide: true}
+        // ,{field: 'danger$', align: 'center',title: '鍗遍櫓鍝�', hide: true}
+
+    ];
+
+    // cols.push.apply(cols, detlCols);
+    cols.push({field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',hide: true}
+        ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿',width: 200}
+    )
+    return cols;
+}
+
+layui.use(['table','laydate', 'form','upload','layer'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var upload = layui.upload;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#locDetl',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/locDetl/list/auth',
+        page: true,
+        where: {
+            "three_code":"寰呭垽"
+        },
+        limit: 16,
+        limits: [16, 30, 50, 100, 200, 500],
+        even: true,
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        cols: [getCol()],
+        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();
+            form.on('checkbox(tableCheckbox)', function (data) {
+                var _index = $(data.elem).attr('table-index')||0;
+                if(data.elem.checked){
+                    res.data[_index][data.value] = 'Y';
+                }else{
+                    res.data[_index][data.value] = 'N';
+                }
+            });
+        }
+    });
+
+    upload.render({
+        elem: '#uploadExcel', // 缁戝畾鍏冪礌
+        url: baseUrl+'/productCalibration', // 涓婁紶鎺ュ彛锛屾浛鎹负浣犵殑鍚庣鎺ュ彛
+        headers:{'token': localStorage.getItem('token')},
+        accept: 'file', // 鍏佽涓婁紶鐨勬枃浠剁被鍨�
+        exts: 'xls|xlsx', // 鍏佽涓婁紶鐨勬枃浠跺悗缂�
+        done: function(res){
+            // 涓婁紶瀹屾瘯鍥炶皟
+            if(res.code === 200){
+                layer.msg(res.msg);
+                console.log('鏂囦欢鏁版嵁:', res.data);
+            } else {
+                layer.msg(res.msg || '涓婁紶澶辫触');
+            }
+        },
+        error: function(){
+            // 璇锋眰寮傚父鍥炶皟
+            layer.msg('涓婁紶澶辫触锛岃閲嶈瘯');
+        }
+    });
+
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(locDetl)', 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
+            },
+            done: function (res, curr, count) {
+                if (res.code === 403) {
+                    top.location.href = baseUrl+"/";
+                }
+                pageCurr=curr;
+                limit();
+            }
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(locDetl)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id);
+        switch(obj.event) {
+            case 'addData':
+                layer.open({
+                    type: 2,
+                    title: '鏂板',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'locDetl_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-edit', index).hide();
+                    	clearFormVal(layer.getChildFrame('#detail', index));
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                    }
+                });
+                break;
+            case 'refreshData':
+                tableIns.reload({
+                    page: {
+                        curr: pageCurr
+                    }
+                });
+                limit();
+                break;
+            case 'deleteData':
+                var data = checkStatus.data;
+                if (data.length === 0){
+                    layer.msg('璇烽�夋嫨鏁版嵁');
+                } else {
+                    layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){
+                        $.ajax({
+                            url: baseUrl+"/locDetl/delete/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {param: JSON.stringify(data)},
+                            method: 'POST',
+                            traditional:true,
+                            success: function (res) {
+                                if (res.code === 200){
+                                    layer.closeAll();
+                                    tableReload(false);
+                                } else if (res.code === 403){
+                                    top.location.href = baseUrl+"/";
+                                } else {
+                                    layer.msg(res.msg)
+                                }
+                            }
+                        })
+                    });
+                }
+                break;
+            case 'exportData':
+                layer.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 = {
+                        'locDetl': exportData,
+                        'fields': fields
+                    };
+                    var loadIndex = layer.msg('姝e湪瀵煎嚭...', {icon: 16, shade: 0.01, time: false});
+                    $.ajax({
+                        url: baseUrl+"/locDetl/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.close(loadIndex);
+                            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)
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(locDetl)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            // 璇︽儏
+            case 'detail':
+                layer.open({
+                    type: 2,
+                    title: '璇︽儏',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'locDetl_detail.html',
+                    success: function(layero, index){
+                        setFormVal(layer.getChildFrame('#detail', index), data, true);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                        layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            // 缂栬緫
+            case 'edit':
+                layer.open({
+                    type: 2,
+                    title: '淇敼',
+                    maxmin: true,
+                    area: [top.detailWidth, top.detailHeight],
+                    shadeClose: false,
+                    content: 'locDetl_detail.html',
+                    success: function(layero, index){
+                        layer.getChildFrame('#data-detail-submit-save', index).hide();
+                        setFormVal(layer.getChildFrame('#detail', index), data, false);
+                        top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false);
+                        top.convertDisabled(layer.getChildFrame('#locNo,#matnr', index), true);
+                        layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                        layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                        layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                    }
+                });
+                break;
+            case 'locNo':
+                var param = top.reObject(data).locNo;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '搴撲綅鍙疯鎯�',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../locMast/locMast_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/locMast/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'modiUser':
+                var param = top.reObject(data).modiUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '淇敼浜哄憳璇︽儏',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+            case 'appeUser':
+                var param = top.reObject(data).appeUser;
+                if (param === undefined) {
+                    layer.msg("鏃犳暟鎹�");
+                } else {
+                   layer.open({
+                       type: 2,
+                       title: '鍒涘缓鑰呰鎯�',
+                       maxmin: true,
+                       area: [top.detailWidth, top.detailHeight],
+                       shadeClose: false,
+                       content: '../user/user_detail.html',
+                       success: function(layero, index){
+                           $.ajax({
+                               url: baseUrl+"/user/"+ param +"/auth",
+                               headers: {'token': localStorage.getItem('token')},
+                               method: 'GET',
+                               success: function (res) {
+                                   if (res.code === 200){
+                                       setFormVal(layer.getChildFrame('#detail', index), res.data, true);
+                                       top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true);
+                                       layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide();
+                                       layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"});
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('select');
+                                       layero.find('iframe')[0].contentWindow.layui.form.render('checkbox');
+                                   } else if (res.code === 403){
+                                       parent.location.href = "/";
+                                   }else {
+                                       layer.msg(res.msg)
+                                   }
+                               }
+                           })
+                       }
+                   });
+                }
+                break;
+
+        }
+    });
+
+    // 鏁版嵁淇濆瓨鍔ㄤ綔
+    form.on('submit(save)', function () {
+        if (banMsg != null){
+            layer.msg(banMsg);
+            return;
+        }
+        method("add");
+    });
+
+    // 鏁版嵁淇敼鍔ㄤ綔
+    form.on('submit(edit)', function () {
+        method("update")
+    });
+
+    function method(name){
+        var index = layer.load(1, {
+            shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙
+        });
+        var data = {
+//            id: $('#id').val(),
+            locNo: $('#locNo').val(),
+            matnr: $('#matnr').val(),
+            lgnum: $('#lgnum').val(),
+            tbnum: $('#tbnum').val(),
+            tbpos: $('#tbpos').val(),
+            zmatid: $('#zmatid').val(),
+            maktx: $('#maktx').val(),
+            werks: $('#werks').val(),
+            anfme: $('#anfme').val(),
+            altme: $('#altme').val(),
+            zpallet: $('#zpallet').val(),
+            bname: $('#bname').val(),
+            memo: $('#memo').val(),
+            modiUser: $('#modiUser').val(),
+            modiTime: top.strToDate($('#modiTime\\$').val()),
+            appeUser: $('#appeUser').val(),
+            appeTime: top.strToDate($('#appeTime\\$').val()),
+
+        };
+        $.ajax({
+            url: baseUrl+"/locDetl/"+name+"/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: top.reObject(data),
+            method: 'POST',
+            success: function (res) {
+                if (res.code === 200){
+                    parent.layer.closeAll();
+                    parent.$(".layui-laypage-btn")[0].click();
+                    $("#data-detail :input").each(function () {
+                        $(this).val("");
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                }else {
+                    layer.msg(res.msg)
+                }
+                layer.close(index);
+            }
+        })
+    }
+
+    // 澶嶉�夋浜嬩欢
+    form.on('checkbox(detailCheckbox)', function (data) {
+        var el = data.elem;
+        if (el.checked) {
+            $(el).val('Y');
+        } else {
+            $(el).val('N');
+        }
+    });
+
+    // 鎼滅储鏍忔悳绱簨浠�
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+
+    // 鎼滅储鏍忛噸缃簨浠�
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鍚屾鎺ュ彛
+    form.on('submit(sync)', function (data) {
+        layer.confirm('纭畾鍚屾鏁版嵁鍚�', function(){
+            $.ajax({
+                url: baseUrl+"/locDetl/sync/auth",
+                headers: {'token': localStorage.getItem('token')},
+                method: 'GET',
+                success: function (res) {
+                    if (res.code === 200){
+                        layer.closeAll();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg)
+                    }
+                }
+            })
+        });
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    layDate.render({
+        elem: '#modiTime\\$',
+        type: 'datetime'
+    });
+    layDate.render({
+        elem: '#appeTime\\$',
+        type: 'datetime'
+    });
+
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {
+        "three_code":"寰呭垽"
+    };
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    (child ? parent.tableIns : tableIns).reload({
+        where: searchData,
+        page: {
+            curr: pageCurr
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            if (res.data.length === 0 && count !== 0) {
+                tableIns.reload({
+                    where: searchData,
+                    page: {
+                        curr: pageCurr-1
+                    }
+                });
+                pageCurr -= 1;
+            }
+            limit(child);
+        }
+    });
+}
+
+function setFormVal(el, data, showImg) {
+    for (var val in data) {
+        var find = el.find(":input[id='" + val + "']");
+        if (find[0]!=null){
+            if (find[0].type === 'checkbox'){
+                if (data[val]==='Y'){
+                    find.attr("checked","checked");
+                    find.val('Y');
+                } else {
+                    find.remove("checked");
+                    find.val('N');
+                }
+                continue;
+            }
+        }
+        find.val(data[val]);
+        if (showImg){
+            var next = find.next();
+            if (next.get(0)){
+                if (next.get(0).localName === "img") {
+                    find.hide();
+                    next.attr("src", data[val]);
+                    next.show();
+                }
+            }
+        }
+    }
+}
+
+function clearFormVal(el) {
+    $(':input', el)
+        .val('')
+        .removeAttr('checked')
+        .removeAttr('selected');
+}
+
+function detailScreen(index) {
+    var detail = layer.getChildFrame('#data-detail', index);
+    var height = detail.height()+60;
+    if (height > ($(window).height()*0.9)) {
+        height = ($(window).height()*0.8);
+    }
+    layer.style(index, {
+//        top: (($(window).height()-height)/3)+"px",
+        height: height+'px'
+    });
+}
+
+$('body').keydown(function () {
+    if (event.keyCode === 13) {
+        $("#search").click();
+    }
+});
diff --git a/src/main/webapp/static/js/pakStore/emptyOut.js b/src/main/webapp/static/js/pakStore/emptyOut.js
index 8bbc97c..0e230fd 100644
--- a/src/main/webapp/static/js/pakStore/emptyOut.js
+++ b/src/main/webapp/static/js/pakStore/emptyOut.js
@@ -13,7 +13,7 @@
     // 鑾峰彇鍑哄簱鍙�
     function getOutBound(){
         $.ajax({
-            url: baseUrl+"/available/empty/take/site",
+            url: baseUrl+"/available/empty/take/siteDesc",
             headers: {'token': localStorage.getItem('token')},
             method: 'POST',
             async: false,
diff --git a/src/main/webapp/static/js/pakStore/locCheckOut.js b/src/main/webapp/static/js/pakStore/locCheckOut.js
index 638a859..6343657 100644
--- a/src/main/webapp/static/js/pakStore/locCheckOut.js
+++ b/src/main/webapp/static/js/pakStore/locCheckOut.js
@@ -80,7 +80,7 @@
     // 鑾峰彇鍑哄簱鍙�
     function getOutBound(){
         $.ajax({
-            url: baseUrl+"/available/take/check/site",
+            url: baseUrl+"/available/take/check/siteDesc",
             headers: {'token': localStorage.getItem('token')},
             method: 'POST',
             async: false,
diff --git a/src/main/webapp/static/js/review/review.js b/src/main/webapp/static/js/review/review.js
index 155f7b1..9f831b2 100644
--- a/src/main/webapp/static/js/review/review.js
+++ b/src/main/webapp/static/js/review/review.js
@@ -31,6 +31,7 @@
         cols: [[
             {type: 'checkbox', fixed: 'left'},
             {field: 'orderNo', title: '鍗曟嵁缂栧彿'},
+            {field: 'defNumber', title: '鏉ユ簮'},
             {field: 'cstmrName', align: 'center', title: '瀹㈡埛鍚嶇О'},
             {align: 'center', title: '鏄庣粏', toolbar: '#tbLook', minWidth: 250, width: 250},
             {field: 'createTime$', title: '鍒涘缓鏃堕棿', minWidth: 200, width: 200},
diff --git a/src/main/webapp/views/basDevp/basDevp.html b/src/main/webapp/views/basDevp/basDevp.html
index 18d4f9f..261be52 100644
--- a/src/main/webapp/views/basDevp/basDevp.html
+++ b/src/main/webapp/views/basDevp/basDevp.html
@@ -49,7 +49,7 @@
 <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/basDevp/basDevp.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/basDevp/basDevp.js?v=1" charset="utf-8"></script>
 
 <iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
 
diff --git a/src/main/webapp/views/locDetl/locDetl.html b/src/main/webapp/views/locDetl/locDetl.html
index 0799225..9e4bd3a 100644
--- a/src/main/webapp/views/locDetl/locDetl.html
+++ b/src/main/webapp/views/locDetl/locDetl.html
@@ -13,6 +13,9 @@
     #uploadExcel{
         display: none;
     }
+    /*.btn-sync {*/
+    /*    display: none;*/
+    /*}*/
     </style>
 </head>
 <body>
@@ -71,6 +74,8 @@
         <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
         <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
 <!--        <button id="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">鏌ョ湅寮傚父鏁版嵁</button>-->
+        <button id="sync" class="layui-btn layui-btn-primary layui-btn-radius btn-sync" lay-submit lay-filter="sync">鍚屾鏁版嵁</button>
+
     </div>
 
 </div>
@@ -121,7 +126,7 @@
 <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/locDetl/locDetl.js?v=12" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/locDetl/locDetl.js?v=2" charset="utf-8"></script>
 
 <iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
 
diff --git a/src/main/webapp/views/locDetl/locDetlJudged.html b/src/main/webapp/views/locDetl/locDetlJudged.html
new file mode 100644
index 0000000..1a1cb9c
--- /dev/null
+++ b/src/main/webapp/views/locDetl/locDetlJudged.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+    <link rel="stylesheet" href="../../static/css/common.css" media="all">
+    <style>
+    #uploadExcel{
+        display: none;
+    }
+    /*.btn-sync {*/
+    /*    display: none;*/
+    /*}*/
+    </style>
+</head>
+<body>
+
+<!-- 鎼滅储鏍� -->
+<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="loc_no" placeholder="搴撲綅鍙�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="zpallet" placeholder="鎵樼洏鐮�" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="brand" placeholder="鍖呰缁勫彿" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="unit" placeholder="绠卞彿" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="model" placeholder="鍗峰彿" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="specs" placeholder="鎺ュご" autocomplete="off">
+        </div>
+    </div>
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="suppCode" placeholder="鏂版棫" autocomplete="off">
+        </div>
+    </div>
+<!--    <div class="layui-inline">-->
+<!--        <div class="layui-input-inline">-->
+<!--            <input class="layui-input" type="text" name="row" placeholder="鎺掓暟" autocomplete="off">-->
+<!--        </div>-->
+<!--    </div>-->
+    <div class="layui-inline">
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+        </div>
+
+    </div>
+
+    <!-- 寰呮坊鍔� -->
+    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
+        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button>
+        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button>
+<!--        <button id="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">鏌ョ湅寮傚父鏁版嵁</button>-->
+
+    </div>
+
+</div>
+
+<!-- 琛ㄦ牸 -->
+<div class="layui-form">
+    <table class="layui-hide" id="locDetl" lay-filter="locDetl"></table>
+</div>
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button id="uploadExcel" class="layui-btn layui-btn-primary layui-btn-sm" >浜у搧鏍¢獙</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 1px">瀵煎嚭</button>
+    </div>
+<!--    <input type="file" id="fileInput" accept=".xlsx, .xls">-->
+<!--    <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-import" onclick="exportExc()" style="margin-top: 10px">瀵煎叆</button>-->
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a>
+</script>
+<script>
+    function exportExc() {
+        var fileInput = document.getElementById('fileInput');
+        var file = fileInput.files[0];
+        if (file === undefined) {
+            alert('璇峰厛閫夋嫨鏂囦欢')
+            return
+        }
+        var formData = new FormData();
+        formData.append('file', file);
+
+        fetch(baseUrl+'/importLocData', {
+            method: 'POST',
+            headers: {'token': localStorage.getItem('token')},
+            body: formData
+        }).then(response => {
+            response.text().then(data => {
+                var res = JSON.parse(data)
+                alert(res.msg)
+            })
+        }).catch(error => {
+            alert('瀵煎叆寮傚父');
+        });
+    }
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<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/locDetl/locDetl2.js?v=1" charset="utf-8"></script>
+
+<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
+
+</body>
+</html>
+
diff --git a/src/main/webapp/views/order/out.html b/src/main/webapp/views/order/out.html
index 8e9bd0e..7f6c6e2 100644
--- a/src/main/webapp/views/order/out.html
+++ b/src/main/webapp/views/order/out.html
@@ -169,13 +169,13 @@
         <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm"
                 lay-filter="checkModifySta"
                 lay-submit
-                style="display: block; float: right; margin-right: 3rem; transform: scale(1.2);margin-bottom: 3rem; transform-origin: right center;">
+                style="display: block; float: right; margin-right: 3rem;margin-bottom: 3rem; transform-origin: right center;">
             鐩樼偣鍧囧垎
         </button>
 
-<!--        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">-->
-<!--            鎵归噺淇敼-->
-<!--        </button>-->
+        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 3rem">
+            鎵归噺淇敼
+        </button>
     </div>
 </script>
 
diff --git a/src/main/webapp/views/order/outMes.html b/src/main/webapp/views/order/outMes.html
index 5e1cc05..a57ac6d 100644
--- a/src/main/webapp/views/order/outMes.html
+++ b/src/main/webapp/views/order/outMes.html
@@ -169,13 +169,13 @@
         <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm"
                 lay-filter="checkModifySta"
                 lay-submit
-                style="display: block; float: right; margin-right: 3rem; transform: scale(1.2);margin-bottom: 3rem; transform-origin: right center;">
+                style="display: block; float: right; margin-right: 3rem; margin-bottom: 3rem; transform-origin: right center;">
             鐩樼偣鍧囧垎
         </button>
 
-<!--        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">-->
-<!--            鎵归噺淇敼-->
-<!--        </button>-->
+        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">
+            鎵归噺淇敼
+        </button>
     </div>
 </script>
 
diff --git a/src/main/webapp/views/order/outReturn.html b/src/main/webapp/views/order/outReturn.html
index 752a241..1674526 100644
--- a/src/main/webapp/views/order/outReturn.html
+++ b/src/main/webapp/views/order/outReturn.html
@@ -169,13 +169,13 @@
         <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm"
                 lay-filter="checkModifySta"
                 lay-submit
-                style="display: block; float: right; margin-right: 3rem; transform: scale(1.2);margin-bottom: 3rem; transform-origin: right center;">
+                style="display: block; float: right; margin-right: 3rem; margin-bottom: 3rem; transform-origin: right center;">
             鐩樼偣鍧囧垎
         </button>
 
-<!--        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">-->
-<!--            鎵归噺淇敼-->
-<!--        </button>-->
+        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">
+            鎵归噺淇敼
+        </button>
     </div>
 </script>
 
diff --git a/src/main/webapp/views/order/outUQ.html b/src/main/webapp/views/order/outUQ.html
index dba9ce0..0921faf 100644
--- a/src/main/webapp/views/order/outUQ.html
+++ b/src/main/webapp/views/order/outUQ.html
@@ -169,13 +169,13 @@
         <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm"
                 lay-filter="checkModifySta"
                 lay-submit
-                style="display: block; float: right; margin-right: 3rem; transform: scale(1.2);margin-bottom: 3rem; transform-origin: right center;">
+                style="display: block; float: right; margin-right: 3rem; margin-bottom: 3rem; transform-origin: right center;">
             鐩樼偣鍧囧垎
         </button>
 
-<!--        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">-->
-<!--            鎵归噺淇敼-->
-<!--        </button>-->
+        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">
+            鎵归噺淇敼
+        </button>
     </div>
 </script>
 

--
Gitblit v1.9.1