From 99a8838287cc16cc510899bc1ae82dee80d63cd9 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 12 十月 2023 19:00:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/tzskasrs' into tzskasrs

---
 src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java            |    3 
 src/main/webapp/views/home/agvMap.html                            |   86 +++++-----
 src/main/java/com/zy/asrs/controller/AgvOpenController.java       |   13 -
 src/main/java/com/zy/asrs/service/AgvWrkDetlService.java          |    2 
 src/main/java/com/zy/asrs/controller/AgvWorkController.java       |   14 +
 src/main/java/com/zy/asrs/controller/MobileController.java        |   16 ++
 src/main/java/com/zy/common/web/WcsController.java                |   12 +
 src/main/webapp/static/js/agvWrkMast/wrkMast.js                   |   10 
 src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java    |   10 +
 src/main/java/com/zy/asrs/controller/AgvLocMastController.java    |    2 
 src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java            |    4 
 src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java     |   11 
 src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java |    2 
 src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java      |   14 +
 src/main/java/com/zy/common/web/param/ReplenishmentParam.java     |   11 +
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java    |  162 ++++++++++++++++++++
 src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java |   73 ++++++--
 src/main/webapp/static/js/common.js                               |    1 
 src/main/java/com/zy/asrs/controller/OutController.java           |    2 
 src/main/java/com/zy/asrs/service/AgvWorkService.java             |   10 +
 src/main/resources/application.yml                                |    3 
 21 files changed, 368 insertions(+), 93 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/AgvLocMastController.java b/src/main/java/com/zy/asrs/controller/AgvLocMastController.java
index 28a5e7b..58b89f5 100644
--- a/src/main/java/com/zy/asrs/controller/AgvLocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvLocMastController.java
@@ -103,7 +103,7 @@
         //娓呯┖鍘熸湁搴撲綅
         agvLockMastService.clearLoc();
         //鍒濆鍖栦竴妤肩珯鐐�
-        agvLockMastService.initLocFloor1();
+        //agvLockMastService.initLocFloor1();
         //鍒濆鍖栦笁妤肩珯鐐�
         agvLockMastService.initLocFloor3();
 
diff --git a/src/main/java/com/zy/asrs/controller/AgvOpenController.java b/src/main/java/com/zy/asrs/controller/AgvOpenController.java
index 85395c6..702185d 100644
--- a/src/main/java/com/zy/asrs/controller/AgvOpenController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvOpenController.java
@@ -80,10 +80,6 @@
             return R.error("浠诲姟缂栧彿閿欒");
         }
 
-//        if(!checkParam(param,agvWrkMast)){
-//            return R.error("浠诲姟鍙傛暟涓庡伐浣滄。鍙傛暟涓嶇鍚�");
-//        }
-
         AgvTask agvTask = AgvTask.valueOf(param.getEventType());
         Class<AgvTask> clz = AgvTask.class;
         try {
@@ -101,15 +97,6 @@
         return R.ok();
     }
 
-    private boolean checkParam(AgvTaskCallBackParam param, AgvWrkMast agvWrkMast){
-        if(!agvWrkMast.getLocNo().equals(param.getLocationCode())){
-            return false;
-        }
-        if(!agvWrkMast.getSourceLocNo().equals(param.getStationCode())){
-            return false;
-        }
-        return true;
-    }
 
 }
 
diff --git a/src/main/java/com/zy/asrs/controller/AgvWorkController.java b/src/main/java/com/zy/asrs/controller/AgvWorkController.java
index 0e7637e..8fe7e30 100644
--- a/src/main/java/com/zy/asrs/controller/AgvWorkController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvWorkController.java
@@ -40,4 +40,18 @@
         workService.adjustLocDetl(param, getUserId());
         return R.ok("搴撳瓨璋冩暣鎴愬姛");
     }
+
+    @RequestMapping("/hand/control/wrkMast")
+    @ManagerAuth(memo = "鎵嬪姩澶勭悊宸ヤ綔妗�")
+    public R handControlWrkMast(@RequestParam String workNo,
+                                @RequestParam Integer type){
+        if (type == 1) {
+            workService.completeWrkMast(workNo, getUserId());
+            return R.ok("宸ヤ綔妗e凡瀹屾垚");
+        } else if (type == 2) {
+            workService.cancelWrkMast(workNo, getUserId());
+            return R.ok("宸ヤ綔妗e凡鍙栨秷");
+        }
+        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 bae8839..1bd9767 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -404,6 +404,22 @@
         return R.ok("涓婃灦鎴愬姛");
     }
 
+    @RequestMapping("/check/waitPakin/auth")
+    @ManagerAuth(memo = "鏌ヨ鎵樼洏鏄惁缁勬墭")
+    public R waitPakins(@RequestBody String barcode){
+        return R.ok().add(waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode)));
+    }
 
+    @RequestMapping("/untie/auth")
+    @ManagerAuth(memo = "瑙g粦")
+    public R untie(@RequestBody String barcode){
+        List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode));
+        for (WaitPakin waitPakin : waitPakins) {
+            if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", barcode))) {
+                return R.error("瑙g粦澶辫触");
+            }
+        }
+        return R.ok().add(waitPakins);
+    }
 
 }
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index f851843..41f3c3e 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -132,7 +132,7 @@
         agvWorkService.stockOutWrkMast(agvTaskDtos, getUserId());
 
         // 鐢熸垚鍑哄簱浠诲姟
-        List<String> excludeLocNos = taskDtos.stream().map(TaskDto::getLocNo).distinct().collect(Collectors.toList());
+        taskDtos.stream().map(TaskDto::getLocNo).distinct().collect(Collectors.toList());
         for (TaskDto taskDto : taskDtos) {
             BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
             workService.stockOut(staNo, taskDto, getUserId());
diff --git a/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java b/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java
index 0c93dc9..96abd30 100644
--- a/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java
@@ -9,7 +9,8 @@
 @Mapper
 public interface AgvLocMastMapper extends BaseMapper<AgvLocMast>{
 
-    @Delete("delete from agv_loc_mast")
+    //@Delete("delete from agv_loc_mast")
+    @Delete("delete from agv_loc_mast where floor = '3'")
     public void deleteAll();
 
     @Update("update agv_loc_mast set loc_type2 = ${locType2}" +
diff --git a/src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java b/src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java
index 0715ccf..0fab304 100644
--- a/src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/AgvWrkDetlMapper.java
@@ -5,6 +5,7 @@
 import com.zy.asrs.entity.WrkDetl;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -13,7 +14,8 @@
 @Repository
 public interface AgvWrkDetlMapper extends BaseMapper<AgvWrkDetl> {
 
-    List<WrkDetl> selectByWrkNo(Integer wrkNo);
+    @Select("SELECT * FROM agv_wrk_detl WHERE wrk_no = #{wrkNo}")
+    List<AgvWrkDetl> selectByWrkNo(@Param("wrkNo")Integer wrkNo);
 
     int deleteItem(@Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch);
 
diff --git a/src/main/java/com/zy/asrs/service/AgvWorkService.java b/src/main/java/com/zy/asrs/service/AgvWorkService.java
index cdc2396..9056644 100644
--- a/src/main/java/com/zy/asrs/service/AgvWorkService.java
+++ b/src/main/java/com/zy/asrs/service/AgvWorkService.java
@@ -49,4 +49,14 @@
      */
     void adjustLocDetl(LocDetlAdjustParam param, Long userId);
 
+    /**
+     * 鎵嬪姩瀹屾垚宸ヤ綔妗�
+     */
+    void completeWrkMast(String workNo, Long userId);
+
+    /**
+     * 鎵嬪姩鍙栨秷宸ヤ綔妗�
+     */
+    void cancelWrkMast(String workNo, Long userId);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/AgvWrkDetlService.java b/src/main/java/com/zy/asrs/service/AgvWrkDetlService.java
index d9522c0..3447454 100644
--- a/src/main/java/com/zy/asrs/service/AgvWrkDetlService.java
+++ b/src/main/java/com/zy/asrs/service/AgvWrkDetlService.java
@@ -10,7 +10,7 @@
 
     //void createWorkDetail(Integer workNo, List<DetlDto> detlDtos, String barcode, Long userId);
 
-    List<WrkDetl> selectByWrkNo(Integer wrkNo);
+    List<AgvWrkDetl> selectByWrkNo(Integer wrkNo);
 
     boolean updateAnfme(Double anfme, Integer wrkNo, String matnr, String batch);
 
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java
index 57250ad..c2860f1 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java
@@ -33,20 +33,20 @@
 
 
     public void initLocFloor3() {
-        //3妤� 1-33鎺� 1-14鍒� 8灞�
-        this.insertBatch(getLocMastList(1, 33, 1, 14, 1, 8, 3));
+        //3妤� 1-33鎺� 1-14鍒� 8灞� ------>  1-33鎺� 1-17鍒� 8灞�
+        this.insertBatch(getLocMastList(1, 33, 1, 17, 1, 8, 3));
 
-        //3妤� 1-27鎺� 15-34鍒� 8灞�
-        this.insertBatch(getLocMastList(1, 27, 15, 34, 1, 8, 3));
+        //3妤� 1-27鎺� 15-34鍒� 8灞� ------>  1-26鎺� 18-25鍒� 8灞�
+        this.insertBatch(getLocMastList(1, 27, 18, 25, 1, 8, 3));
 
-        //3妤� 1-25鎺� 35-46鍒� 8灞�
-        this.insertBatch(getLocMastList(1, 25, 35, 46, 1, 8, 3));
+        //3妤� 1-25鎺� 35-46鍒� 8灞� ------>  1-25鎺� 26-35鍒� 8灞�
+        this.insertBatch(getLocMastList(1, 25, 26, 35, 1, 8, 3));
 
-        //3妤� 3-25鎺� 47-60鍒� 8灞�
-        this.insertBatch(getLocMastList(3, 25, 47, 60, 1, 8, 3));
+        //3妤� 3-25鎺� 47-60鍒� 8灞� ------>  1-23鎺� 36-70鍒� 8灞�
+        this.insertBatch(getLocMastList(1, 23, 36, 70, 1, 8, 3));
 
         //3妤� 4-25鎺� 61-70鍒� 8灞�
-        this.insertBatch(getLocMastList(4, 25, 61, 70, 1, 8, 3));
+        //this.insertBatch(getLocMastList(4, 25, 61, 70, 1, 8, 3));
 
     }
 
@@ -57,16 +57,21 @@
         for(int row=rowIndex; row<=rowMax; row++) {
             for (int bay = bayIndex; bay <= bayMax; bay++) {
                 for (int lev = levIndex; lev <= levMax; lev++) {
-                    if(row == 8 || row == 9){
-                        if((bay >=8 && bay <=11)
-                                || (bay >= 20 && bay <=23)
-                                || (bay>=37 && bay <=39)
-                                || (bay>=50 && bay <=52)
-                                || (bay>=63 && bay <=64)
-                                || (bay>=79 && bay <=80)){
-                            continue;
-                        }
+
+                    if(!checkLocExist(row,bay,floor)){
+                        continue;
                     }
+
+//                    if(floor == 1 && (row == 8 || row == 9)){
+//                        if((bay >=8 && bay <=11)
+//                                || (bay >= 20 && bay <=23)
+//                                || (bay>=37 && bay <=39)
+//                                || (bay>=50 && bay <=52)
+//                                || (bay>=63 && bay <=64)
+//                                || (bay>=79 && bay <=80)){
+//                            continue;
+//                        }
+//                    }
 
                     AgvLocMast loc = new AgvLocMast();
                     String locRow = row < 10 ? "-00" + row : "-0" + row;
@@ -90,6 +95,38 @@
         return  agvLocMastList;
     }
 
+    private boolean checkLocExist(int row, int bay, int floor){
+        if(floor == 1 && (row == 8 || row == 9)){
+            if((bay >=8 && bay <=11)
+                    || (bay >= 20 && bay <=23)
+                    || (bay>=37 && bay <=39)
+                    || (bay>=50 && bay <=52)
+                    || (bay>=63 && bay <=64)
+                    || (bay>=79 && bay <=80)){
+                return false;
+            }
+        }
+
+        if(floor == 3){
+            if(row == 1 && bay > 63){
+                return false;
+            }
+            if(row ==  2 && bay > 65){
+                return false;
+            }
+            if(row > 23 && bay == 1){
+                return false;
+            }
+
+            if(bay > 35 && bay < 39){
+                if(row == 4 || row == 5 || row == 10 || row == 11 || row == 17 || row == 18){
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
     @Override
     public List<AgvLocMast> queryFreeLocMast2(Short locType1, Integer rowBeg, Integer rowEnd, Integer bayBeg, Integer bayEnd, Integer levBeg, Integer levEnd) {
         return this.baseMapper.queryFreeLocMast2(locType1, rowBeg, rowEnd, bayBeg, bayEnd, levBeg, levEnd);
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index bbd57fe..cf82a7a 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
+import com.core.common.DateUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
@@ -24,6 +25,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Created by vincent on 2020/6/11
@@ -59,6 +61,10 @@
     private OrderDetlService orderDetlService;
     @Autowired
     private AdjDetlService adjDetlService;
+    @Autowired
+    private AgvWrkMastLogService agvWrkMastLogService;
+    @Autowired
+    private AgvWrkDetlLogService agvWrkDetlLogService;
 
 
     /*
@@ -434,6 +440,162 @@
         }
     }
 
+    @Override
+    @Transactional
+    public void completeWrkMast(String workNo, Long userId) {
+        AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
+        if (Cools.isEmpty(wrkMast)){
+            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+        }
+        if (wrkMast.getWrkSts() == 9 || wrkMast.getWrkSts() == 29) {
+            throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
+        }
+        // 鍏ュ簱 + 搴撲綅杞Щ
+        if (wrkMast.getWrkSts() < 9 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
+            wrkMast.setWrkSts(9L);
+            // 鍑哄簱
+        } else if (wrkMast.getWrkSts() > 20) {
+            wrkMast.setWrkSts(29L);
+        }
+        Date now = new Date();
+        wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
+        wrkMast.setCrnEndTime(now);
+        wrkMast.setModiTime(now);
+        wrkMast.setModiUser(userId);
+        // 瀹屾垚鎿嶄綔浜哄憳璁板綍
+        wrkMast.setManuType("鎵嬪姩瀹屾垚");
+        if (!agvWrkMastService.updateById(wrkMast)) {
+            throw new CoolException("淇敼宸ヤ綔妗eけ璐�");
+        }
+    }
+
+    @Transactional
+    public void cancelWrkMast(String workNo, Long userId) {
+        AgvWrkMast wrkMast = agvWrkMastService.selectById(workNo);
+        if (Cools.isEmpty(wrkMast)){
+            throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪");
+        }
+
+        if (wrkMast.getWrkSts() == 200) {
+            //灏忚溅绉诲簱浠诲姟锛岀洿鎺ュ垹闄ゅ伐浣滄。
+            agvWrkMastService.deleteById(wrkMast);
+            return;
+        }
+
+        String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
+        String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
+        // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
+        if (wrkMast.getWrkSts() < 9) {
+            locNo = wrkMast.getLocNo();
+            locSts = "O";
+
+            // 搴撲綅杞Щ
+            if (wrkMast.getIoType() == 11) {
+                // 搴撲綅杞Щ锛氭簮搴撲綅
+                AgvLocMast locMast = agvLocMastService.selectById(wrkMast.getSourceLocNo());
+                if (Cools.isEmpty(locMast)) {
+                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:"+ wrkMast.getSourceLocNo());
+                }
+                locMast.setLocSts("F");
+                locMast.setModiTime(new Date());
+                locMast.setModiUser(userId);
+                agvLocMastService.updateById(locMast);
+            }
+            // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
+        } else if (wrkMast.getWrkSts() > 20) {
+            locNo = wrkMast.getSourceLocNo();
+            // 鍑哄簱 ===>> F.鍦ㄥ簱
+            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
+                locSts = "F";
+                // 绌烘澘鍑哄簱 ===>> D.绌烘《/绌烘爤鏉�
+            } else if (wrkMast.getIoType() == 110) {
+                locSts = "D";
+                // 搴撲綅杞Щ ===>> D.绌烘《/绌烘爤鏉�
+            } else if (wrkMast.getIoType() == 11) {
+                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N")?"D":"F";
+                // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
+                AgvLocMast locMast = agvLocMastService.selectById(wrkMast.getLocNo());
+                if (Cools.isEmpty(locMast)) {
+                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:"+ wrkMast.getSourceLocNo());
+                }
+                locMast.setLocSts("O");
+                locMast.setModiTime(new Date());
+                locMast.setModiUser(userId);
+                agvLocMastService.updateById(locMast);
+            }
+        } else {
+            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
+        }
+        // 璁㈠崟鍏宠仈
+        List<AgvWrkDetl> wrkDetls = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+        for (AgvWrkDetl wrkDetl : wrkDetls) {
+            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
+                if (!BaseController.isJSON(wrkDetl.getOrderNo())) {
+                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
+                        throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
+                    }
+                } else {
+                    // 璁㈠崟鍚堝苟鍑哄簱
+
+                    //瀹為檯鍙栨秷鐨勫嚭搴撴暟閲�
+                    Double wrkDetlAnfme = wrkDetl.getAnfme();
+                    //璁㈠崟瀹為檯鍑哄簱鏁伴噺
+                    Double orderAnfme;
+
+                    List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class);
+                    for (OrderDto orderDto : orderDtoList) {
+
+                        if(wrkDetlAnfme > orderDto.getAnfme()){
+                            orderAnfme = orderDto.getAnfme();
+                            wrkDetlAnfme -= orderAnfme;
+                        }else {
+                            orderAnfme = wrkDetlAnfme;
+                        }
+
+                        if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderAnfme)) {
+                            throw new CoolException("璁㈠崟鏁版嵁鍥炴粴澶辫触");
+                        }
+                    }
+                }
+            }
+        }
+        // 鍙栨秷鎿嶄綔浜哄憳璁板綍
+        wrkMast.setManuType("鎵嬪姩鍙栨秷");
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(new Date());
+        if (!agvWrkMastService.updateById(wrkMast)) {
+            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐�");
+        }
+        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+        if (!agvWrkMastLogService.save(wrkMast)) {
+            throw new CoolException("淇濆瓨宸ヤ綔鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
+        }
+        // 鍒犻櫎宸ヤ綔涓绘。
+        boolean wrkMastRes = agvWrkMastService.deleteById(wrkMast);
+
+        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
+            // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+            if (!agvWrkDetlLogService.save(wrkMast.getWrkNo())) {
+//                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
+            }
+            // 鍒犻櫎宸ヤ綔妗f槑缁�
+            boolean wrkDetlRes = agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", workNo));
+        }
+
+        // 淇敼搴撲綅鐘舵��
+        AgvLocMast locMast = agvLocMastService.selectById(locNo);
+        if (Cools.isEmpty(locMast)) {
+            throw new CoolException("鍙栨秷宸ヤ綔妗eけ璐ワ紝搴撲綅涓嶅瓨鍦�:"+ locNo);
+        }
+        locMast.setLocSts(locSts);
+        locMast.setModiTime(new Date());
+        locMast.setModiUser(userId);
+        boolean locMastRes = agvLocMastService.updateById(locMast);
+        if (!wrkMastRes || !locMastRes) {
+            throw new CoolException("淇濆瓨鏁版嵁澶辫触");
+        }
+    }
+
     /*
     鏇存柊鐩爣搴撲綅淇℃伅
      */
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java
index 647b9b3..f8cd847 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkDetlServiceImpl.java
@@ -50,7 +50,7 @@
     }
     */
     @Override
-    public List<WrkDetl> selectByWrkNo(Integer wrkNo) {
+    public List<AgvWrkDetl> selectByWrkNo(Integer wrkNo) {
         return this.baseMapper.selectByWrkNo(wrkNo);
     }
 
diff --git a/src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java
index 6fe345c..5d142eb 100644
--- a/src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/DocTypeServiceImpl.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.service.impl;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.mapper.DocTypeMapper;
@@ -24,8 +25,15 @@
             docType = this.selectById(docName);
         } catch (Exception ignore) {}
         if (docType == null) {
-            docType = this.selectOne(new EntityWrapper<DocType>().eq("doc_name", docName));
+            Wrapper<DocType> wrapper = new EntityWrapper<DocType>().eq("doc_name", docName);
+            if(pakin){
+                wrapper.eq("pakin",1);
+            }else {
+                wrapper.eq("pakout",1);
+            }
+            docType = this.selectOne(wrapper);
         }
+
         if (docType == null) {
             long docId = 1L;
             DocType last = this.selectOne(new EntityWrapper<DocType>().orderBy("doc_id", false));
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
index 0f56ff6..8ff6339 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -201,11 +201,23 @@
     public void report(Long orderId, Long userId) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Order order = this.selectById(orderId);
-        Map<String, String> param = new HashMap<>();
+        Map<String, Object> param = new HashMap<>();
         param.put("id",order.getOrderNo());
         param.put("dDate",sdf.format(new Date()));
         param.put("cHandler",userId.toString());
 
+        List<Map<String,Object>> orderDetlsParam = new ArrayList<>();
+        param.put("orderDetails",orderDetlsParam);
+
+        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(orderId);
+
+        for (OrderDetl orderDetl : orderDetls){
+            Map<String, Object> odMap = new HashMap<>();
+            odMap.put("autoid",orderDetl.getItemNum());
+            odMap.put("iQuantity",orderDetl.getQty());
+            orderDetlsParam.add(odMap);
+        }
+
         int code = doHttpRequest(param, "鍗曟嵁瀹℃牳", url, orderReportPath, null, "127.0.0.1");
         //int code = doHttpRequest(param, "鍗曟嵁瀹℃牳", "localhost:8080", "/test/report", null, "127.0.0.1");
         if(code == 200){
diff --git a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
index ef79460..3a59dba 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -80,6 +80,12 @@
             //淇敼婧愬簱浣嶇姸鎬佷负O
             agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O");
         }
+
+        //鍒犻櫎AGV宸ヤ綔妗�
+        agvWrkMastService.deleteById(wrkNo);
+        //鍒犻櫎AGV宸ヤ綔鏄庣粏妗�
+        agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
+
         if(!isJSON(orderNo)){
             //妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚
             orderService.checkComplete(orderNo);
@@ -90,11 +96,6 @@
                 orderService.checkComplete(o);
             });
         }
-
-        //鍒犻櫎AGV宸ヤ綔妗�
-        agvWrkMastService.deleteById(wrkNo);
-        //鍒犻櫎AGV宸ヤ綔鏄庣粏妗�
-        agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
 
         return SUCCESS;
     }
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 8420fc6..d2ccfbb 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -11,6 +11,7 @@
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
 import com.zy.common.service.erp.ErpService;
+import com.zy.common.web.param.ReplenishmentParam;
 import com.zy.common.web.param.SearchLocParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -297,4 +298,15 @@
         return commonService.getLocNo(1, ioType - 50, devpNo, matnrList, locTypeDto,0); // 搴撲綅鍙凤紝 鍫嗗灈鏈猴紝鐩爣绔�
     }
 
+    /*
+    鍥涢」搴撳線AGV琛ヨ揣锛寃cs璋冪敤姝ゆ帴鍙�
+     */
+    @PostMapping("/replenishment")
+    @ResponseBody
+    public R replenishment(@RequestBody ReplenishmentParam param){
+
+
+        return R.ok();
+    }
+
 }
diff --git a/src/main/java/com/zy/common/web/param/ReplenishmentParam.java b/src/main/java/com/zy/common/web/param/ReplenishmentParam.java
new file mode 100644
index 0000000..ee6c515
--- /dev/null
+++ b/src/main/java/com/zy/common/web/param/ReplenishmentParam.java
@@ -0,0 +1,11 @@
+package com.zy.common.web.param;
+
+import lombok.Data;
+
+@Data
+public class ReplenishmentParam {
+    //瀹瑰櫒缂栫爜
+    private String containerCode;
+    //agv绔欑偣
+    private String devNo;
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c28a4a0..330352b 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -10,8 +10,9 @@
     enabled: false
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+    url: jdbc:sqlserver://localhost:1433;databasename=tzskasrs
     #url: jdbc:sqlserver://192.168.4.15:1433;databasename=tzskasrs
-    url: jdbc:sqlserver://10.10.10.40:1433;databasename=tzskasrs
+    #url: jdbc:sqlserver://10.10.10.40:1433;databasename=tzskasrs
     username: sa
     password: sa@123
   mvc:
diff --git a/src/main/webapp/static/js/agvWrkMast/wrkMast.js b/src/main/webapp/static/js/agvWrkMast/wrkMast.js
index 85ad9a2..63ae9f5 100644
--- a/src/main/webapp/static/js/agvWrkMast/wrkMast.js
+++ b/src/main/webapp/static/js/agvWrkMast/wrkMast.js
@@ -320,7 +320,7 @@
             // 瀹屾垚
             case 'complete':
                 layer.confirm('纭瀹屾垚璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
-                    http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:1}, function (res) {
+                    http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:1}, function (res) {
                         $(".layui-laypage-btn")[0].click();
                         layer.msg(data.wrkNo + res.msg);
                     })
@@ -332,7 +332,7 @@
             case 'cancel':
                 if (data.pdcType === "Y") {
                     layer.confirm('褰撳墠浠诲姟鍏宠仈ERP閿�鍞崟锛屽彇娑堝皢閲嶆柊鐢熸垚鍑哄簱浣滀笟锛屾槸鍚︾户缁紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
-                        http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) {
+                        http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) {
                             $(".layui-laypage-btn")[0].click();
                             layer.msg(data.wrkNo + res.msg);
                         })
@@ -340,7 +340,7 @@
                     });
                 } else {
                     layer.confirm('纭鍙栨秷璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
-                        http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) {
+                        http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:2}, function (res) {
                             $(".layui-laypage-btn")[0].click();
                             layer.msg(data.wrkNo + res.msg);
                         })
@@ -351,7 +351,7 @@
             //  鎷f枡鍏ュ簱
             case 'pick':
                 layer.confirm('鎷f枡鍏ュ簱璇ョ瑪宸ヤ綔妗o紵', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
-                    http.post(baseUrl+"/hand/control/wrkMast", {workNo: data.wrkNo, type:3}, function (res) {
+                    http.post(baseUrl+"/agv/hand/control/wrkMast", {workNo: data.wrkNo, type:3}, function (res) {
                         $(".layui-laypage-btn")[0].click();
                         layer.msg(data.wrkNo + res.msg);
                     })
@@ -361,7 +361,7 @@
             //  鍏堝叆鍝�
             case 'preHave':
                 layer.confirm('浠诲姟鍙戠敓鍏堝叆鍝佸紓甯搞�傚闇�閲嶆柊鍏ュ簱锛岃纭繚璐х墿宸叉斁鑷冲爢鍨涙満鍑哄簱绔欙紒', {title: '宸ヤ綔鍙凤細'+data.wrkNo, shadeClose: true}, function(){
-                    http.post(baseUrl+"/deal/preHave/start", {wrkNo: data.wrkNo}, function (res) {
+                    http.post(baseUrl+"/agv/deal/preHave/start", {wrkNo: data.wrkNo}, function (res) {
                         $(".layui-laypage-btn")[0].click();
                         layer.msg(data.wrkNo + res.msg, {icon: 1});
                     })
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index b409c37..6b2f84a 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -228,6 +228,7 @@
     ,{field: 'suppCode', align: 'center',title: '鏂欑鐮�', hide: false, width: 110}
     ,{field: 'matnr', align: 'center',title: '瀛樿揣缂栫爜',hide: true}
     ,{field: 'matnr', align: 'center',title: '瀛樿揣缂栫爜'}
+    ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
     ,{field: 'batch', align: 'center',title: '搴忓垪鐮�', width: 300, sort:true, hide: true}
     ,{field: 'maktx', align: 'center',title: '瀛樿揣鍚嶇О'}
     ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', hide: false}
diff --git a/src/main/webapp/views/home/agvMap.html b/src/main/webapp/views/home/agvMap.html
index e3c0e7a..1501b18 100644
--- a/src/main/webapp/views/home/agvMap.html
+++ b/src/main/webapp/views/home/agvMap.html
@@ -443,50 +443,50 @@
     <div style="padding: 40px 20px 10px 10px;" :style="window.innerWidth < 2000 ? 'margin-top: 0px;' : 'flex: 5;margin-top: -70px;'">
         <el-slider v-model="showScale" :marks="showScaleMarks"></el-slider>
         <div style="display: flex;justify-content: space-between;flex-wrap: wrap;">
-            <div class="hoverCard" style="width: 100%;">
-                <div class="card-details" style="place-content: normal;height: auto;">
-                    <div class="text-body" style="display: flex;flex-wrap: wrap;">
-                        <div style="width: 100%;margin-bottom: 20px;">
-                            <div style="display: flex;justify-content: space-between;">
-                                <div><input v-model="searchMatnr" placeholder="鐗╂枡鍙�" type="text" class="search-input"></div>
-                                <div><input v-model="searchOrderNo" placeholder="璁㈠崟鍙�" type="text" class="search-input"></div>
-                            </div>
-                            <div style="display: flex;justify-content: space-between;margin-top: 10px;">
-                                <div><input style="width: 110px;" v-model="searchMaktx" placeholder="鐗╂枡鍚嶇О" type="text" class="search-input"></div>
-                                <div><input style="width: 110px;" v-model="searchSpecs" placeholder="瑙勬牸" type="text" class="search-input"></div>
-                                <div><input style="width: 110px;" v-model="searchLocNo" placeholder="搴撲綅鍙�" type="text" class="search-input"></div>
-                            </div>
-                            <button style="width: 100%;margin-top: 10px;" @click="searchLoc" class="layui-btn layui-btn-sm">鎼滅储</button>
-                        </div>
-<!--                        <div>-->
-<!--                            <button @click="locToLoc2" class="layui-btn layui-btn-sm">渚ц竟绉诲簱</button>-->
+<!--            <div class="hoverCard" style="width: 100%;">-->
+<!--                <div class="card-details" style="place-content: normal;height: auto;">-->
+<!--                    <div class="text-body" style="display: flex;flex-wrap: wrap;">-->
+<!--                        <div style="width: 100%;margin-bottom: 20px;">-->
+<!--                            <div style="display: flex;justify-content: space-between;">-->
+<!--                                <div><input v-model="searchMatnr" placeholder="鐗╂枡鍙�" type="text" class="search-input"></div>-->
+<!--                                <div><input v-model="searchOrderNo" placeholder="璁㈠崟鍙�" type="text" class="search-input"></div>-->
+<!--                            </div>-->
+<!--                            <div style="display: flex;justify-content: space-between;margin-top: 10px;">-->
+<!--                                <div><input style="width: 110px;" v-model="searchMaktx" placeholder="鐗╂枡鍚嶇О" type="text" class="search-input"></div>-->
+<!--                                <div><input style="width: 110px;" v-model="searchSpecs" placeholder="瑙勬牸" type="text" class="search-input"></div>-->
+<!--                                <div><input style="width: 110px;" v-model="searchLocNo" placeholder="搴撲綅鍙�" type="text" class="search-input"></div>-->
+<!--                            </div>-->
+<!--                            <button style="width: 100%;margin-top: 10px;" @click="searchLoc" class="layui-btn layui-btn-sm">鎼滅储</button>-->
 <!--                        </div>-->
-                        <div>
-                            <button @click="init" class="layui-btn layui-btn-sm">鍒锋柊</button>
-                        </div>
-                        <div style="margin-left: 10px;">
-                            <button @click="resetSearch" class="layui-btn layui-btn-sm">閲嶇疆</button>
-                        </div>
-                        <div v-if="!locOutStatus" style="margin-left: 10px;">
-                            <button @click="locOutStatus = true" class="layui-btn layui-btn-sm">鍑哄簱閫夋嫨</button>
-                        </div>
-                        <div v-else style="margin-left: 10px;border: 1px red solid;display: flex;">
-                            <div>
-                                <button @click="cancelSelectLoc" class="layui-btn layui-btn-sm">鍙栨秷閫夋嫨</button>
-                            </div>
-                            <div style="display: flex;justify-content: center;align-items: center;">
-                                <select v-model="outSite">
-                                    <option v-for="(item,index) in outSites" :key="index" :value="item.siteId">{{ item.desc }}</option>
-                                </select>
-                            </div>
-                            <div>
-                                <button @click="locOut" class="layui-btn layui-btn-sm">鍑哄簱</button>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <button class="card-button">鍔熻兘鍖�</button>
-            </div>
+<!--&lt;!&ndash;                        <div>&ndash;&gt;-->
+<!--&lt;!&ndash;                            <button @click="locToLoc2" class="layui-btn layui-btn-sm">渚ц竟绉诲簱</button>&ndash;&gt;-->
+<!--&lt;!&ndash;                        </div>&ndash;&gt;-->
+<!--                        <div>-->
+<!--                            <button @click="init" class="layui-btn layui-btn-sm">鍒锋柊</button>-->
+<!--                        </div>-->
+<!--                        <div style="margin-left: 10px;">-->
+<!--                            <button @click="resetSearch" class="layui-btn layui-btn-sm">閲嶇疆</button>-->
+<!--                        </div>-->
+<!--                        <div v-if="!locOutStatus" style="margin-left: 10px;">-->
+<!--                            <button @click="locOutStatus = true" class="layui-btn layui-btn-sm">鍑哄簱閫夋嫨</button>-->
+<!--                        </div>-->
+<!--                        <div v-else style="margin-left: 10px;border: 1px red solid;display: flex;">-->
+<!--                            <div>-->
+<!--                                <button @click="cancelSelectLoc" class="layui-btn layui-btn-sm">鍙栨秷閫夋嫨</button>-->
+<!--                            </div>-->
+<!--                            <div style="display: flex;justify-content: center;align-items: center;">-->
+<!--                                <select v-model="outSite">-->
+<!--                                    <option v-for="(item,index) in outSites" :key="index" :value="item.siteId">{{ item.desc }}</option>-->
+<!--                                </select>-->
+<!--                            </div>-->
+<!--                            <div>-->
+<!--                                <button @click="locOut" class="layui-btn layui-btn-sm">鍑哄簱</button>-->
+<!--                            </div>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--                <button class="card-button">鍔熻兘鍖�</button>-->
+<!--            </div>-->
 
             <div class="hoverCard">
                 <div class="card-details">

--
Gitblit v1.9.1