From 3f30983db5b3cd2b25cb215579501a2ef134883c Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期五, 04 八月 2023 17:00:11 +0800
Subject: [PATCH] agv 订单出库功能完善

---
 src/main/webapp/views/mat/mat.html                                |    2 
 src/main/java/com/zy/asrs/service/AgvWrkMastService.java          |    7 
 src/main/java/com/zy/common/model/AgvBasDevpDto.java              |    3 
 src/main/java/com/zy/asrs/controller/AgvOpenController.java       |   99 ++++---
 src/main/java/com/zy/asrs/controller/AgvWrkMastController.java    |    4 
 src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java |   31 +
 src/main/java/com/zy/asrs/controller/AgvBasDevpController.java    |  104 +++++++
 src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java  |   66 +++-
 src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html      |    6 
 src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java           |   56 ++++
 src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java     |  116 +++++++-
 src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java      |   50 +-
 src/main/webapp/static/js/agvBasDevp/basDevp.js                   |    7 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java       |   33 ++
 src/main/webapp/views/agvBasDevpVisualized/basDevp.html           |  101 ++++++-
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java    |   57 ++++
 src/main/webapp/static/js/common.js                               |    3 
 src/main/java/com/zy/asrs/controller/OutController.java           |    8 
 src/main/java/com/zy/asrs/service/AgvWorkService.java             |    6 
 19 files changed, 604 insertions(+), 155 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java b/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java
index 6587f41..241d8cd 100644
--- a/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java
@@ -10,15 +10,17 @@
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.R;
-import com.zy.asrs.entity.AgvBasDevp;
-import com.zy.asrs.entity.BasDevp;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.param.LocMastInitParam;
-import com.zy.asrs.service.AgvBasDevpService;
+import com.zy.asrs.service.*;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/agv")
@@ -26,6 +28,14 @@
 
     @Autowired
     AgvBasDevpService agvBasDevpService;
+    @Autowired
+    AgvWrkMastService agvWrkMastService;
+    @Autowired
+    AgvWrkDetlService agvWrkDetlService;
+    @Autowired
+    AgvWaitPakinService agvWaitPakinService;
+    @Autowired
+    AgvWorkService agvWorkService;
 
     @RequestMapping(value = "/basDevp/list/auth")
     @ManagerAuth
@@ -148,6 +158,36 @@
         return R.ok();
     }
 
+    @RequestMapping(value = "/basDevp/detail/list/auth")
+    public R basDevpDetailList(@RequestParam(defaultValue = "1")Integer curr,
+                               @RequestParam(defaultValue = "10")Integer limit,
+                               @RequestParam Map<String, Object> param){
+        String devNo = param.get("devNo").toString();
+        AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo);
+        if("F".equals(agvBasDevp.getLocSts()) || "R".equals(agvBasDevp.getLocSts())){
+            //鍏堝幓鍏ュ簱閫氱煡妗f壘鏄庣粏
+            Page<AgvWaitPakin> agvWaitPakinPage = agvWaitPakinService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvWaitPakin>()
+                    .eq("zpallet", agvBasDevp.getBarcode()));
+            if(agvWaitPakinPage.getRecords().size()>0){
+                return R.ok(agvWaitPakinPage);
+            }else {
+                //濡傛灉鍏ュ簱閫氭。鏄庣粏涓虹┖锛屽垯鍘诲伐浣滄。鎵炬槑缁�
+                AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>()
+                        .eq("loc_no", agvBasDevp.getDevNo())
+                        .or().eq("source_loc_no",agvBasDevp.getDevNo()));
+
+                Page<AgvWrkDetl> agvWrkDetlPage = agvWrkDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvWrkDetl>()
+                        .eq("wrk_no", agvWrkMast.getWrkNo()));
+
+                if(agvWrkDetlPage.getRecords().size()>0){
+                    return R.ok(agvWrkDetlPage);
+                }
+            }
+        }
+
+        return R.error("鏁版嵁寮傚父");
+    }
+
     @RequestMapping(value = "/basDevp/visualized/list/auth")
     public R visualizedList(@RequestBody JSONObject param){
 
@@ -159,6 +199,64 @@
         return R.ok(result);
     }
 
+    /*
+    瀹瑰櫒绂诲満
+     */
+    @RequestMapping(value = "/basDevp/visualized/container/moveOut")
+    public R visualiZedContainerMoveOut(@RequestBody Map<String,Object> map) {
+
+        List<String> devNos = (List<String>) map.get("devNo");
+        List<AgvWrkMast> agvWrkMastList = devNos.stream().map(devNo -> {
+            AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo));
+            if(agvWrkMast.getIoType() == 103){
+                throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓�103.鎷f枡鍏ュ簱锛屾棤娉曟墽琛屽鍣ㄧ鍦轰换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�");
+            }
+            return agvWrkMast;
+        }).collect(Collectors.toList());
+
+        try {
+           int code = agvWrkMastService.containerMoveOut(agvWrkMastList);
+           if(code == 0){
+               //灏嗗伐浣滃厷鐘舵�佹敼涓哄鍣ㄧ鍦�
+               agvWrkMastList.forEach(agvWrkMast -> {
+                   agvWrkMast.setWrkSts(207L);
+                   agvWrkMastService.updateById(agvWrkMast);
+               });
+               //淇敼绔欑偣鐘舵��
+               devNos.forEach(devNo -> {
+                   AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo);
+                   agvBasDevp.setBarcode("");
+                   agvBasDevp.setLocSts("O");
+                   agvBasDevpService.updateById(agvBasDevp);
+               });
+           }
+        } catch (IOException e) {
+            e.printStackTrace();
+            return R.error("瀹瑰櫒绂诲満澶辫触");
+        }
+
+        return R.ok("瀹瑰櫒绂诲満鎴愬姛");
+    }
+
+    /*
+    鎷f枡鍏ュ簱
+     */
+    @RequestMapping(value = "/basDevp/visualized/container/pickIn")
+    public R visualiZedPickIn(@RequestBody Map<String,Object> map){
+        List<String> devNos = (List<String>) map.get("devNo");
+        List<AgvWrkMast> agvWrkMastList = devNos.stream().map(devNo -> {
+            AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo));
+            if(agvWrkMast.getIoType() == 101){
+                throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓�101.鍏ュ簱锛屾棤娉曟墽琛屾嫞鏂欏叆搴撲换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�");
+            }
+            return agvWrkMast;
+        }).collect(Collectors.toList());
+
+        agvWorkService.pickIn(agvWrkMastList);
+
+        return R.ok("鐢熸垚鎷f枡鍑哄簱浠诲姟鎴愬姛");
+    }
+
     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());
diff --git a/src/main/java/com/zy/asrs/controller/AgvOpenController.java b/src/main/java/com/zy/asrs/controller/AgvOpenController.java
index d922dfe..9ad92d1 100644
--- a/src/main/java/com/zy/asrs/controller/AgvOpenController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvOpenController.java
@@ -70,8 +70,8 @@
         AgvTask agvTask = AgvTask.valueOf(param.getEventType());
         Class<AgvTask> clz = AgvTask.class;
         try {
-            Method method = clz.getDeclaredMethod(param.getStatus(),AgvTaskCallBackParam.class);
-            method.invoke(agvTask,param);
+            Method method = clz.getDeclaredMethod(param.getStatus(), AgvWrkMast.class, AgvTaskCallBackParam.class);
+            method.invoke(agvTask,agvWrkMast,param);
         } catch (NoSuchMethodException e) {
             return R.error("浠诲姟鐘舵�乻tatus鍙傛暟鏈夎");
         } catch (InvocationTargetException e) {
@@ -103,20 +103,26 @@
      */
     task{
         @Transactional
-        public void success(AgvTaskCallBackParam param) {
+        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
             //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚
-            agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),205);
+            agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),205);
+
+            //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱
+            if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103){
+                //淇敼鍑哄簱绔欑偣鐘舵��
+                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode());
+            }
         }
 
-        public void fail(AgvTaskCallBackParam param) {
+        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void cancel(AgvTaskCallBackParam param) {
+        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void suspend(AgvTaskCallBackParam param) {
+        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
     },
@@ -125,19 +131,19 @@
      */
     task_allocated{
         @Transactional
-        public void success(AgvTaskCallBackParam param) {
+        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void fail(AgvTaskCallBackParam param) {
+        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void cancel(AgvTaskCallBackParam param) {
+        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void suspend(AgvTaskCallBackParam param) {
+        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
     },
@@ -146,25 +152,36 @@
      */
     tote_load{
         @Transactional
-        public void success(AgvTaskCallBackParam param) {
-            //淇敼婧愮珯鐐圭姸鎬佷负O.绌猴紝浠ュ強瑙g粦鎵樼洏鏉$爜
-            agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getStationCode(),"O","");
+        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
+
+            //鍏ュ簱浠诲姟 || 鎷f枡鍏ュ簱浠诲姟
+            if(agvWrkMast.getIoType() == 1 || agvWrkMast.getIoType() == 53){
+                //淇敼婧愮珯鐐圭姸鎬佷负O.绌猴紝浠ュ強瑙g粦鎵樼洏鏉$爜
+                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","");
+            }
+
+            //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱
+            if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103){
+                //淇敼婧愬簱浣嶇姸鎬�
+
+            }
+
             //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负203.RCS鏀捐揣涓�
-            agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),203);
-            //淇敼AGV鍏ュ簱閫氱煡妗g姸鎬�
-            //agvWaitPakinService.updateIoStatus(Integer.valueOf(param.getTaskCode()),"Y");
+            agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),203);
+
+
 
         }
 
-        public void fail(AgvTaskCallBackParam param) {
+        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void cancel(AgvTaskCallBackParam param) {
+        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void suspend(AgvTaskCallBackParam param) {
+        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
     },
@@ -173,86 +190,86 @@
      */
     tote_unload{
         @Transactional
-        public void success(AgvTaskCallBackParam param) {
+        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
             //淇敼宸ヤ綔妗g姸鎬佷负204.鏀捐揣瀹屾垚
-            agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),204);
+            agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),204);
         }
 
-        public void fail(AgvTaskCallBackParam param) {
+        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void cancel(AgvTaskCallBackParam param) {
+        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void suspend(AgvTaskCallBackParam param) {
+        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
     },
     robot_reach{
         @Transactional
-        public void success(AgvTaskCallBackParam param) {
+        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void fail(AgvTaskCallBackParam param) {
+        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void cancel(AgvTaskCallBackParam param) {
+        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void suspend(AgvTaskCallBackParam param) {
+        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
     },
     weight{
         @Transactional
-        public void success(AgvTaskCallBackParam param) {
+        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void fail(AgvTaskCallBackParam param) {
+        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void cancel(AgvTaskCallBackParam param) {
+        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void suspend(AgvTaskCallBackParam param) {
+        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
     },
     rfid{
         @Transactional
-        public void success(AgvTaskCallBackParam param) {
+        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void fail(AgvTaskCallBackParam param) {
+        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void cancel(AgvTaskCallBackParam param) {
+        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
 
-        public void suspend(AgvTaskCallBackParam param) {
+        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
 
         }
     };
 
     //浠诲姟鐘舵�佷负鎴愬姛
-    public abstract void success(AgvTaskCallBackParam param);
+    public abstract void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
     //浠诲姟鐘舵�佷负澶辫触
-    public abstract void fail(AgvTaskCallBackParam param);
+    public abstract void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
     //浠诲姟鐘舵�佷负鍙栨秷
-    public abstract void cancel(AgvTaskCallBackParam param);
+    public abstract void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
     //浠诲姟鐘舵�佷负鎸傝捣
-    public abstract void suspend(AgvTaskCallBackParam param);
+    public abstract void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
 
     @Setter
     AgvBasDevpService agvBasDevpService;
diff --git a/src/main/java/com/zy/asrs/controller/AgvWrkMastController.java b/src/main/java/com/zy/asrs/controller/AgvWrkMastController.java
index a6cc241..b72a706 100644
--- a/src/main/java/com/zy/asrs/controller/AgvWrkMastController.java
+++ b/src/main/java/com/zy/asrs/controller/AgvWrkMastController.java
@@ -165,9 +165,9 @@
         if (Cools.isEmpty(agvWrkMastList)){
             return R.error();
         }
-        Map<String, List<Map<String, String>>> containerMoveParam = agvWrkMastService.startWrk(agvWrkMastList);
+        int startWrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway");
 
-        int code = agvWrkMastService.containerMove(containerMoveParam);
+        int code = agvWrkMastService.containerMove(agvWrkMastList);
 
         if(code == 0){
             agvWrkMastList.forEach(agvWrkMast -> {
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 79c18af..74f9ee9 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -287,12 +287,12 @@
                 continue;
             }
             //鍏堟壘AGV鐨勫簱瀛橈紝濡傛灉杩斿洖鐨刬ssued澶т簬0锛屽垯鍘诲洓椤瑰簱鎵�
-            issued = agvLocDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),null,locDtoList,issued);
+            issued = agvLocDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),JSON.toJSONString(vo.getOrderDtos()),locDtoList,issued);
             //浠庡洓椤瑰簱鐨勫簱瀛橀噷闈㈡壘锛�
-            issued = locDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),null,locDtoList,issued);
+            issued = locDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),JSON.toJSONString(vo.getOrderDtos()),locDtoList,issued);
 
             if (issued > 0) {
-                LocDto locDto = new LocDto(null, vo.getMatnr(), vo.getMaktx(), vo.getBatch(), null, issued);
+                LocDto locDto = new LocDto(null, vo.getMatnr(), vo.getMaktx(), vo.getBatch(), JSON.toJSONString(vo.getOrderDtos()), issued);
                 locDto.setLack(Boolean.TRUE);
                 locDtoList.add(locDto);
             }
@@ -377,6 +377,8 @@
             //TODO 鍋囧鍑哄簱绔欑偣涓嶈冻锛岃褰曟湭鍑哄簱鐨勫簱浣嶏紱
             return;
         }
+        agvBasDevp.setLocSts("S");
+        agvBasDevpService.updateById(agvBasDevp);
         TaskDto taskDto = new TaskDto(locDto.getLocNo(), agvBasDevp.getDevNo(), locDto);
         //TODO 鏆備笉鑰冭檻搴撲綅娣疯浇鐘舵�侊紙鍚庣画鐪嬫儏鍐垫槸鍚﹂渶瑕佸垽鏂級
         agvTaskDtos.add(taskDto);
diff --git a/src/main/java/com/zy/asrs/service/AgvWorkService.java b/src/main/java/com/zy/asrs/service/AgvWorkService.java
index a8f884a..f97aa5d 100644
--- a/src/main/java/com/zy/asrs/service/AgvWorkService.java
+++ b/src/main/java/com/zy/asrs/service/AgvWorkService.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.service;
 
 import com.zy.asrs.entity.AgvBasDevp;
+import com.zy.asrs.entity.AgvWrkMast;
 import com.zy.common.model.StartupDto;
 import com.zy.common.model.TaskDto;
 
@@ -18,5 +19,10 @@
      */
     void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId);
 
+    /*
+    鐢熸垚鎷f枡鍏ュ簱浠诲姟
+     */
+    void pickIn(List<AgvWrkMast> agvWrkMastList);
+
 
 }
diff --git a/src/main/java/com/zy/asrs/service/AgvWrkMastService.java b/src/main/java/com/zy/asrs/service/AgvWrkMastService.java
index 2ead2e4..d82d2b9 100644
--- a/src/main/java/com/zy/asrs/service/AgvWrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/AgvWrkMastService.java
@@ -5,13 +5,14 @@
 
 import java.io.IOException;
 import java.util.List;
-import java.util.Map;
 
 public interface AgvWrkMastService extends IService<AgvWrkMast> {
 
     public void updateWrkStsByWrkNo(int wrkNo, long wrkSts);
 
-    public Map<String,List<Map<String,String>>> startWrk(List<AgvWrkMast> agvWrkMastList) throws IOException;
+    public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException;
 
-    public int containerMove(Map<String, List<Map<String, String>>> containerMoveParam) throws IOException;
+    public int containerMove(List<AgvWrkMast> agvWrkMastList) throws IOException;
+
+    public int containerMoveOut(List<AgvWrkMast> agvWrkMastList) throws IOException;
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
index 636dc93..069fae5 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
@@ -5,6 +5,7 @@
 import com.core.common.Cools;
 import com.zy.asrs.entity.AgvBasDevp;
 import com.zy.asrs.entity.AgvWaitPakin;
+import com.zy.asrs.entity.AgvWrkDetl;
 import com.zy.asrs.entity.AgvWrkMast;
 import com.zy.asrs.mapper.AgvBasDevpMapper;
 import com.zy.asrs.service.AgvBasDevpService;
@@ -108,20 +109,36 @@
                 AgvBasDevpDto agvBasDevpDto = new AgvBasDevpDto();
                 BeanUtils.copyProperties(agvBasDevp, agvBasDevpDto);
 
-                if (Cools.isEmpty(agvBasDevpDto.getBarcode())) {
+//                if (Cools.isEmpty(agvBasDevpDto.getBarcode())) {
+//                    return agvBasDevpDto;
+//                }
+
+                if("O".equals(agvBasDevpDto.getLocSts())){
                     return agvBasDevpDto;
                 }
 
-                AgvWaitPakin agvWaitPakin = agvWaitPakinService.selectOne(new EntityWrapper<AgvWaitPakin>()
-                        .eq("zpallet", agvBasDevpDto.getBarcode()));
-
-                agvBasDevpDto.setAgvWaitPakin(agvWaitPakin);
-
+//              AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>()
+//                        .eq("barcode", agvBasDevpDto.getBarcode()));
                 AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>()
-                        .eq("barcode", agvBasDevpDto.getBarcode()));
+                        .eq("loc_no", agvBasDevpDto.getDevNo())
+                        .or().eq("source_loc_no",agvBasDevpDto.getDevNo()));
 
                 agvBasDevpDto.setAgvWrkMast(agvWrkMast);
 
+                if("F".equals(agvBasDevpDto.getLocSts()) || "R".equals(agvBasDevpDto.getLocSts())){
+                    AgvWaitPakin agvWaitPakin = agvWaitPakinService.selectOne(new EntityWrapper<AgvWaitPakin>()
+                            .eq("zpallet", agvBasDevpDto.getBarcode()));
+
+                    agvBasDevpDto.setAgvWaitPakin(agvWaitPakin);
+
+                    if(Cools.isEmpty(agvWaitPakin)){
+                        AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().
+                                eq("wrk_no",agvWrkMast.getWrkNo()));
+
+                        agvBasDevpDto.setAgvWrkDetl(agvWrkDetl);
+                    }
+                }
+
                 return agvBasDevpDto;
 
             }).collect(Collectors.toList());
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 8560782..f5ea49e 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -105,13 +105,14 @@
         agvTaskDtos.forEach(taskDto -> {
 
             AgvLocMast agvLocMast = agvLockMastService.selectById(taskDto.getLocNo());
+            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo()));
 
             //宸ヤ綔妗f墍闇�鍙傛暟
             double anfme = taskDto.getLocDtos().get(0).getAnfme();
             long wrkSts = 21L;
             String sourceLocNo = taskDto.getLocNo();
             String targetLocNo = taskDto.getAgvStaNo();
-            String barcode = agvLocMast.getBarcode();
+            String barcode = agvLocDetl.getZpallet();
             //鏄庣粏妗f墍闇�鍙傛暟
             String mantr = taskDto.getLocDtos().get(0).getMatnr();
             String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
@@ -126,9 +127,45 @@
             //淇敼璁㈠崟淇℃伅
             modifyOrderDetl(taskDto.getLocDtos().get(0), userId);
             //鏇存柊婧愮珯鐐逛俊鎭�
-            updateAgvLocMast(agvLockMastService.selectById(sourceLocNo),"R");
+            String locSts = ioType == 101 ? "R" : "P";
+            updateAgvLocMast(agvLockMastService.selectById(sourceLocNo),locSts);
             //鏇存柊鐩爣绔欑偣鐘舵��
+            //locSts = ioType == 101 ? "S" : "Q";
             updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S");
+
+        });
+    }
+
+    //鎷f枡鍏ュ簱
+    @Transactional
+    public void pickIn(List<AgvWrkMast> agvWrkMastList){
+        Date now = new Date();
+        agvWrkMastList.forEach(agvWrkMast -> {
+            //淇敼宸ヤ綔鍏�
+            agvWrkMast.setWrkSts(201L);
+            agvWrkMast.setIoType(53);
+            String locNo = agvWrkMast.getLocNo();
+            agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo());
+            agvWrkMast.setSourceLocNo(locNo);
+            agvWrkMast.setIoTime(now);
+            agvWrkMastService.updateById(agvWrkMast);
+
+            AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo()));
+            AgvLocMast agvLocMast = agvLockMastService.selectById(agvWrkMast.getLocNo());
+            AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocMast.getLocNo()));
+            AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getSourceLocNo());
+            //淇敼宸ヤ綔鍏氭槑缁�
+            agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme());
+            agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo()));
+            //淇敼搴撳瓨淇℃伅
+            agvLocDetl.setAnfme(agvWrkDetl.getAnfme());
+            agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo()));
+            //淇敼搴撲綅淇℃伅
+            agvLocMast.setLocSts("Q");
+            agvLockMastService.selectById(agvLocMast);
+            //淇敼绔欑偣淇℃伅
+            agvBasDevp.setLocSts("R");
+            agvBasDevpService.updateById(agvBasDevp);
 
         });
     }
@@ -309,12 +346,26 @@
         }else {
             //鍚堝苟鍑哄簱
             List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
+
+            //瀹為檯鍑哄簱鏁伴噺
+            Double locAnfme = locDto.getAnfme();
+            //璁㈠崟瀹為檯鍑哄簱鏁伴噺
+            Double orderAnfme;
+
             for (OrderDto orderDto : orderDtoList) {
                 OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
                 if (orderDetl == null) {
                     orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null);
                 }
-                if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) {
+
+                if(locAnfme > orderDetl.getAnfme()){
+                    orderAnfme = orderDetl.getAnfme();
+                    locAnfme -= orderAnfme;
+                }else {
+                    orderAnfme = locAnfme;
+                }
+
+                if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderAnfme)) {
                     throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
                 }
                 orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
index b23a41c..a0f8e09 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -9,6 +9,8 @@
 import com.zy.asrs.entity.param.AgvTaskParam;
 import com.zy.asrs.entity.param.AgvTaskkDescribeParam;
 import com.zy.asrs.mapper.AgvWrkMastMapper;
+import com.zy.asrs.service.AgvLocMastService;
+import com.zy.asrs.service.AgvWrkDetlService;
 import com.zy.asrs.service.AgvWrkMastService;
 import com.zy.asrs.service.ApiLogService;
 import com.zy.common.utils.HttpHandler;
@@ -40,6 +42,10 @@
     @Autowired
     AgvWrkMastMapper agvWrkMastMapper;
     @Autowired
+    AgvWrkDetlService agvWrkDetlService;
+    @Autowired
+    AgvLocMastService agvLocMastService;
+    @Autowired
     ApiLogService apiLogService;
 
     public void updateWrkStsByWrkNo(int wrkNo, long wrkSts) {
@@ -50,37 +56,66 @@
         this.updateById(agvWrkMast);
     }
 
+    // TODO 鍒ゆ柇瑙勫垯
     private boolean checkWrkSts(AgvWrkMast agvWrkMast,long wrkSts){
 
-        // 鍒ゆ柇瑙勫垯TODO
+
 
         return true;
     }
 
-    public Map<String,List<Map<String,String>>> startWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
+    public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException {
 
         AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam();
-        agvTaskCreateParam.setTaskType("putaway");
+        agvTaskCreateParam.setTaskType(taskType);
 
+//        //璋冪敤瀹瑰櫒鍏ュ満鏃舵墍闇�瑕佸弬鏁�
+//        Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>();
+//        List<Map<String,String>> positionCodeMapList = new ArrayList<>();
+//        containerMoveParam.put("containerMoveIns",positionCodeMapList);
+
+        getRequestParam(agvTaskCreateParam,agvWrkMastList);
+
+        return doHttpRequest(agvTaskCreateParam,"涓婃灦浠诲姟涓嬪彂",url, taskCreatePath,null,"127.0.0.1");
+
+        //return containerMoveParam;
+    }
+
+    //瀹瑰櫒鍏ュ満
+    public int containerMove(List<AgvWrkMast> agvWrkMastList) throws IOException {
         //璋冪敤瀹瑰櫒鍏ュ満鏃舵墍闇�瑕佸弬鏁�
         Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>();
         List<Map<String,String>> positionCodeMapList = new ArrayList<>();
         containerMoveParam.put("containerMoveIns",positionCodeMapList);
 
-        getRequestParam(agvTaskCreateParam,agvWrkMastList,positionCodeMapList);
-
-        doHttpRequest(agvTaskCreateParam,"涓婃灦浠诲姟涓嬪彂",url, taskCreatePath,null,"127.0.0.1");
-
-        return containerMoveParam;
-    }
-
-    public int containerMove(Map<String, List<Map<String, String>>> containerMoveParam) throws IOException {
-
+        getContainerMoveParam(agvWrkMastList,positionCodeMapList);
         return doHttpRequest(containerMoveParam,"瀹瑰櫒鍏ュ満浠诲姟涓嬪彂",url, containerMoveInPath,null,"127.0.0.1");
 
     }
 
-    private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){
+    //瀹瑰櫒绂诲満
+    public int containerMoveOut(List<AgvWrkMast> agvWrkMastList){
+        Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>();
+        List<Map<String,String>> positionCodeMapList = new ArrayList<>();
+        containerMoveParam.put("containerMoveOuts",positionCodeMapList);
+        for(AgvWrkMast agvWrkMast : agvWrkMastList){
+            Map<String,String> positionCodeMap = new HashMap<>();
+            positionCodeMap.put("positionCode",agvWrkMast.getLocNo());
+            positionCodeMapList.add(positionCodeMap);
+        }
+        return doHttpRequest(containerMoveParam,"瀹瑰櫒鍏ュ満浠诲姟涓嬪彂",url, containerMoveInPath,null,"127.0.0.1");
+    }
+
+    private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){
+        //寰�瀹瑰櫒鍏ュ満鍙傛暟涓斁鍏ユ簮绔欑偣浣嶇疆
+        for(AgvWrkMast agvWrkMast : agvWrkMastList){
+            Map<String,String> positionCodeMap = new HashMap<>();
+            positionCodeMap.put("positionCode",agvWrkMast.getSourceLocNo());
+            positionCodeMapList.add(positionCodeMap);
+        }
+    }
+
+    private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,List<AgvWrkMast> agvWrkMastList){
         List<AgvTaskParam> agvTaskParamList = agvWrkMastList.stream().map(agvWrkMast -> {
             AgvTaskParam agvTaskParam = new AgvTaskParam();
             AgvTaskkDescribeParam agvTaskkDescribeParam = new AgvTaskkDescribeParam();
@@ -88,11 +123,6 @@
             //AgvTaskParam
             agvTaskParam.setTaskCode(agvWrkMast.getWrkNo().toString());
             agvTaskParam.setTaskPriority(agvWrkMast.getIoPri().intValue());
-
-            //寰�瀹瑰櫒鍏ュ満鍙傛暟涓斁鍏ユ簮绔欑偣浣嶇疆
-            Map<String,String> positionCodeMap = new HashMap<>();
-            positionCodeMap.put("positionCode",agvWrkMast.getSourceLocNo());
-            positionCodeMapList.add(positionCodeMap);
 
             //AgvTaskkDescribeParam
             agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo());
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 6d9e534..2c6449c 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -85,32 +85,32 @@
         }
         // 濡傛灉 浣滀笟鏁伴噺绛変簬鍗曟嵁鎬绘暟閲� && 宸ヤ綔鏄庣粏妗d腑鏃犺鍗曟嵁鐨勬暟鎹� && AGV宸ヤ綔鏄庣粏妗d腑鏃犺鍗曟嵁鐨勬暟鎹�
         if (complete
-                && wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no", orderNo)) < 1
-                && agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().eq("order_no",orderNo)) < 1) {
+                && wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().like("order_no", orderNo)) < 1
+                && agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().like("order_no",orderNo)) < 1) {
             // 鍑哄簱璁㈠崟閲嶆柊鏁寸悊鏄庣粏
-            DocType docType = docTypeService.selectById(order.getDocType());
-            if (null != docType && docType.getPakout() == 1) {
-                // 閲嶇粍鏄庣粏
-                if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
-                    throw new CoolException("閲嶆暣鍑哄簱璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戞槑缁嗗け璐�");
-                }
-                List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo);
-                for (WrkDetl wrkDetl : wrkDetls) {
-                    OrderDetl orderDetl = new OrderDetl();
-                    orderDetl.sync(wrkDetl);
-                    orderDetl.setQty(orderDetl.getAnfme());
-                    orderDetl.setOrderId(order.getId());
-                    orderDetl.setOrderNo(orderNo);
-                    orderDetl.setStatus(1);
-                    orderDetl.setCreateTime(order.getCreateTime());
-                    orderDetl.setCreateBy(order.getCreateBy());
-                    orderDetl.setUpdateTime(order.getUpdateTime());
-                    orderDetl.setUpdateBy(order.getUpdateBy());
-                    if (!orderDetlService.insert(orderDetl)) {
-                        throw new CoolException("閲嶆暣鍑哄簱璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戞槑缁嗗け璐�");
-                    }
-                }
-            }
+//            DocType docType = docTypeService.selectById(order.getDocType());
+//            if (null != docType && docType.getPakout() == 1) {
+//                // 閲嶇粍鏄庣粏
+//                if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
+//                    throw new CoolException("閲嶆暣鍑哄簱璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戞槑缁嗗け璐�");
+//                }
+//                List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo);
+//                for (WrkDetl wrkDetl : wrkDetls) {
+//                    OrderDetl orderDetl = new OrderDetl();
+//                    orderDetl.sync(wrkDetl);
+//                    orderDetl.setQty(orderDetl.getAnfme());
+//                    orderDetl.setOrderId(order.getId());
+//                    orderDetl.setOrderNo(orderNo);
+//                    orderDetl.setStatus(1);
+//                    orderDetl.setCreateTime(order.getCreateTime());
+//                    orderDetl.setCreateBy(order.getCreateBy());
+//                    orderDetl.setUpdateTime(order.getUpdateTime());
+//                    orderDetl.setUpdateBy(order.getUpdateBy());
+//                    if (!orderDetlService.insert(orderDetl)) {
+//                        throw new CoolException("閲嶆暣鍑哄簱璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戞槑缁嗗け璐�");
+//                    }
+//                }
+//            }
 
             if (!this.updateSettle(order.getId(), 4L, null)) {
                 throw new CoolException("淇敼璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戠姸鎬佷负宸插畬鎴愬け璐�");
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index fc9d604..6a84d5b 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -27,7 +27,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.swing.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -446,12 +445,26 @@
             } else {
                 // 璁㈠崟鍚堝苟鍑哄簱
                 List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
+
+                //瀹為檯鍑哄簱鏁伴噺
+                Double locAnfme = locDto.getAnfme();
+                //璁㈠崟瀹為檯鍑哄簱鏁伴噺
+                Double orderAnfme;
+
                 for (OrderDto orderDto : orderDtoList) {
                     OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
                     if (orderDetl == null) {
                         orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null);
                     }
-                    if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) {
+
+                    if(locAnfme > orderDetl.getAnfme()){
+                        orderAnfme = orderDetl.getAnfme();
+                        locAnfme -= orderAnfme;
+                    }else {
+                        orderAnfme = locAnfme;
+                    }
+
+                    if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderAnfme)) {
                         throw new CoolException("淇敼璁㈠崟鏄庣粏鏁伴噺澶辫触");
                     }
                     orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
@@ -947,9 +960,23 @@
                     }
                 } else {
                     // 璁㈠崟鍚堝苟鍑哄簱
+
+                    //瀹為檯鍙栨秷鐨勫嚭搴撴暟閲�
+                    Double wrkDetlAnfme = wrkDetl.getAnfme();
+                    //璁㈠崟瀹為檯鍑哄簱鏁伴噺
+                    Double orderAnfme;
+
                     List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class);
                     for (OrderDto orderDto : orderDtoList) {
-                        if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) {
+
+                        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("璁㈠崟鏁版嵁鍥炴粴澶辫触");
                         }
                     }
diff --git a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
index e5f5ad1..a706936 100644
--- a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
@@ -16,7 +16,12 @@
 import java.util.List;
 
 /**
- * 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚鐨勬暟鎹�
+ * 浠诲姟绫诲瀷锛�
+ * 飦� putaway锛氫笂鏋躲��
+ * 飦� carry锛氭惉杩愶紝缁熸寚鍑哄簱銆佺Щ搴撱�佺偣鍒扮偣鎼繍绛夈��
+ * 飦� scan锛氭壂鎻忕洏鐐广��
+ * 飦� weight锛氱О閲嶇洏鐐广��
+ * 飦� rfid锛歳fid鐩樼偣銆�
  */
 @Slf4j
 @Component
@@ -27,11 +32,16 @@
     @Autowired
     AgvWrkMastService agvWrkMastService;
 
+
+    /*
+    瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 涓� 锛�1.鍏ュ簱 || 53锛屾嫞鏂欏叆搴�)鐨勬暟鎹�
+     */
     @Scheduled(cron = "0/5 * * * * ? ")
     public void excutePutwayWrk(){
         List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
                 .eq("wrk_sts", 205)
-                .eq("io_type",1));
+                .andNew().eq("io_type",53)
+                .or().eq("io_type",1));
         if(!Cools.isEmpty(agvWrkMastList)){
             agvWrkMastList.stream().forEach(agvWrkMast -> {
                 ReturnT<String> returnT = agvWrkMastHandler.completedPutWayWrk(agvWrkMast);
@@ -39,12 +49,31 @@
         }
     }
 
+    /*
+    瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 涓� 101鍑哄簱绫诲瀷鐨勬暟鎹�
+     */
+    @Scheduled(cron = "0/5 * * * * ? ")
+    public void excuteCarryWrk(){
+        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
+                .eq("wrk_sts", 207)
+                .eq("io_type",101));
+        if(!Cools.isEmpty(agvWrkMastList)){
+            agvWrkMastList.stream().forEach(agvWrkMast -> {
+                ReturnT<String> returnT = agvWrkMastHandler.completedCarryWrk(agvWrkMast);
+            });
+        }
+    }
+
+    /*
+    putaway锛氫笂鏋�
+     */
     @Scheduled(cron = "0/5 * * * * ? ")
     public void startPutwayWrk(){
 
         List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
                 ,new EntityWrapper<AgvWrkMast>()
-                .eq("wrk_sts", 201)
+                .eq("wrk_sts", 201)   //201.鐢熸垚鍏ュ簱浠诲姟ID
+                .andNew().eq("io_type", 53).or() //53.鎷f枡鍐嶅叆搴�
                 .eq("io_type", 1)).getRecords();
 
         if(!Cools.isEmpty(agvWrkMastList)){
@@ -55,4 +84,25 @@
             }
         }
     }
+
+    /*
+    carry锛氭惉杩愶紝缁熸寚鍑哄簱銆佺Щ搴撱�佺偣鍒扮偣鎼繍绛�
+     */
+    @Scheduled(cron = "0/5 * * * * ? ")
+    public void startCarryWrk(){
+
+        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
+                ,new EntityWrapper<AgvWrkMast>()
+                        .eq("wrk_sts", 21)   //21.鐢熸垚鍑哄簱浠诲姟
+                        .andNew().eq("io_type", 101).or()
+                        .eq("io_type", 103)).getRecords();
+
+        if(!Cools.isEmpty(agvWrkMastList)){
+            try {
+                ReturnT<String> returnT = agvWrkMastHandler.startCarryWrk(agvWrkMastList);
+            } catch (IOException e) {
+                log.error(e.getMessage());
+            }
+        }
+    }
 }
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 a0c3d12..8084635 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -1,6 +1,9 @@
 package com.zy.asrs.task.handler;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.entity.AgvLocDetl;
 import com.zy.asrs.entity.AgvWaitPakin;
 import com.zy.asrs.entity.AgvWrkDetl;
 import com.zy.asrs.entity.AgvWrkMast;
@@ -48,39 +51,102 @@
         agvWrkMastService.updateById(agvWrkMast);
         //淇敼鐩爣搴撲綅鐘舵�佷负F.鍦ㄥ簱
         agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F");
-        //鏇存柊鐩爣搴撲綅鏄庣粏
-        agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo);
         //鐢熸垚AGV宸ヤ綔鍘嗗彶妗�
         agvWrkMastLogService.save(wrkNo);
         //鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗�
         agvWrkDetlLogService.save(wrkNo);
-        //鐢熸垚鍏ュ簱閫氱煡鍘嗗彶妗�
-        agvWaitPakinLogService.save(barcode);
         //鍒犻櫎AGV宸ヤ綔妗�
         agvWrkMastService.deleteById(wrkNo);
         //鍒犻櫎AGV宸ヤ綔鏄庣粏妗�
         agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
-        //鍒犻櫎鍏ュ簱閫氱煡妗�
-        agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("zpallet",barcode));
+        if(agvWrkMast.getIoType() == 1){
+            //鏇存柊鐩爣搴撲綅鏄庣粏
+            agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo);
+            //鐢熸垚鍏ュ簱閫氱煡鍘嗗彶妗�
+            agvWaitPakinLogService.save(barcode);
+            //鍒犻櫎鍏ュ簱閫氱煡妗�
+            agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("zpallet",barcode));
 
-        //妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚
-        orderService.checkComplete(orderNo);
+        }
+        if(!isJSON(orderNo)){
+            //妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚
+            orderService.checkComplete(orderNo);
+        }else{
+            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
+            maps.forEach(map -> {
+                String o = map.get("orderNo").toString();
+                orderService.checkComplete(o);
+            });
+        }
 
         return SUCCESS;
     }
 
     @Transactional
-    public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
-        Map<String, List<Map<String, String>>> containerMoveParam = agvWrkMastService.startWrk(agvWrkMastList);
+    public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) {
+        int wrkNo = agvWrkMast.getWrkNo();
+        String orderNo = getOrderNoByWrkNo(wrkNo);
+        //淇敼宸ヤ綔妗g姸鎬佷负206.搴撳瓨鏇存柊瀹屾垚
+        agvWrkMast.setWrkSts(206L);
+        agvWrkMastService.updateById(agvWrkMast);
+        //淇敼婧愬簱浣嶇姸鎬佷负O
+        agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O");
+        //鏇存柊鐩爣搴撲綅鏄庣粏
+        agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
+        //鐢熸垚AGV宸ヤ綔鍘嗗彶妗�
+        agvWrkMastLogService.save(wrkNo);
+        //鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗�
+        agvWrkDetlLogService.save(wrkNo);
+        //鍒犻櫎AGV宸ヤ綔妗�
+        agvWrkMastService.deleteById(wrkNo);
+        //鍒犻櫎AGV宸ヤ綔鏄庣粏妗�
+        agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
+        if(!isJSON(orderNo)){
+            //妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚
+            orderService.checkComplete(orderNo);
+        }else{
+            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
+            maps.forEach(map -> {
+                String o = map.get("orderNo").toString();
+                orderService.checkComplete(o);
+            });
+        }
+        return SUCCESS;
+    }
 
-        int code = agvWrkMastService.containerMove(containerMoveParam);
+    @Transactional
+    public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
+
+        int startWwrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway");
+
+        int code = agvWrkMastService.containerMove(agvWrkMastList);
 
         if(code == 0){
             agvWrkMastList.forEach(agvWrkMast -> {
                 //202.RCS鍙栬揣涓�
                 agvWrkMast.setWrkSts((long)202);
-                //淇敼AGV鍏ュ簱閫氱煡妗g姸鎬佸叆鍑虹姸鎬佷负Y
-                agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y");
+                agvWrkMastService.updateById(agvWrkMast);
+                if(agvWrkMast.getIoType() == 1){
+                    //淇敼AGV鍏ュ簱閫氱煡妗g姸鎬佸叆鍑虹姸鎬佷负Y
+                    agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y");
+                }
+
+            });
+            //agvWrkMastService.updateBatchById(agvWrkMastList);
+
+            return SUCCESS;
+        }
+
+        return FAIL;
+    }
+
+    @Transactional
+    public ReturnT<String> startCarryWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
+        int code = agvWrkMastService.startWrk(agvWrkMastList,"carry");
+        if(code == 0){
+            agvWrkMastList.forEach(agvWrkMast -> {
+                //202.RCS鍙栬揣涓�
+                agvWrkMast.setWrkSts((long)202);
                 agvWrkMastService.updateById(agvWrkMast);
             });
             //agvWrkMastService.updateBatchById(agvWrkMastList);
@@ -95,4 +161,28 @@
         AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkNo));
         return agvWrkDetl.getOrderNo();
     }
+
+    public static void main(String[] args) {
+        String order = "[{\"anfme\":50.0,\"orderNo\":\"CS110011001111\"},{\"anfme\":50.0,\"orderNo\":\"CS110011001110\"}]";
+        List<Map> maps = JSONArray.parseArray(order, Map.class);
+        maps.forEach(map -> {
+            Object orderNo = map.get("orderNo");
+            System.out.println(orderNo );
+        });
+    }
+
+    private boolean isJSON(String str) {
+        if (Cools.isEmpty(str)) {
+            return false;
+        } else {
+            str = str.trim();
+            if (str.startsWith("{") && str.endsWith("}")) {
+                return true;
+            } else if (str.startsWith("[") && str.endsWith("]")) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+    }
 }
diff --git a/src/main/java/com/zy/common/model/AgvBasDevpDto.java b/src/main/java/com/zy/common/model/AgvBasDevpDto.java
index da9de2d..0f0047f 100644
--- a/src/main/java/com/zy/common/model/AgvBasDevpDto.java
+++ b/src/main/java/com/zy/common/model/AgvBasDevpDto.java
@@ -2,6 +2,7 @@
 
 import com.zy.asrs.entity.AgvBasDevp;
 import com.zy.asrs.entity.AgvWaitPakin;
+import com.zy.asrs.entity.AgvWrkDetl;
 import com.zy.asrs.entity.AgvWrkMast;
 import lombok.Data;
 
@@ -15,4 +16,6 @@
 
     private AgvWaitPakin agvWaitPakin;
 
+    private AgvWrkDetl agvWrkDetl;
+
 }
diff --git a/src/main/webapp/static/js/agvBasDevp/basDevp.js b/src/main/webapp/static/js/agvBasDevp/basDevp.js
index 75c55ac..c17a0b3 100644
--- a/src/main/webapp/static/js/agvBasDevp/basDevp.js
+++ b/src/main/webapp/static/js/agvBasDevp/basDevp.js
@@ -385,7 +385,7 @@
                     layer.msg("姝ょ珯鐐圭殑鐘舵�佷笉瀛樺湪鐗╂枡");
                     return;
                 }
-                locDetlToLayer(data.barcode);
+                locDetlToLayer(data.devNo,data.barcode);
                 break;
             case 'unbind':
                 // locDetl(data.locNo);
@@ -572,8 +572,9 @@
     }
 
     // iframe鐗╂枡璇︽儏
-    function locDetlToLayer(val) {
-        barcode = val;
+    function locDetlToLayer(val1,val2) {
+        devNo = val1;
+        barcode = val2;
         layer.open({
             type: 2,
             title: '绔欑偣鏄庣粏',
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index b719bce..5f5f4ca 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -220,7 +220,8 @@
 ]
 
 var detlCols = [
-    ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', width: 110}
+    ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', hide: true}
+    ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', hide: false}
     ,{field: 'matnr', align: 'center',title: '鐗╂枡鍙�'}
     ,{field: 'batch', align: 'center',title: '搴忓垪鐮�', width: 300, sort:true, hide: false}
     ,{field: 'maktx', align: 'center',title: '鐗╂枡鍚嶇О'}
diff --git a/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html b/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html
index 86336b7..1318a19 100644
--- a/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html
+++ b/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html
@@ -52,16 +52,16 @@
         }else {
             $('#zpallet').val(tmp);
         }
-
         // 鏁版嵁娓叉煋
         tableIns = table.render({
             elem: '#locDetlByMap',
             headers: {token: localStorage.getItem('token')},
-            url: baseUrl+'/agv/waitPakin/list/auth',
+            url: baseUrl+'/agv/basDevp/detail/list/auth',
             page: true,
             limit: 20,
             skin: 'line',
-            where: {zpallet: $('#zpallet').val()},
+            //where: {zpallet: $('#zpallet').val()},
+            where: {devNo: parent.devNo},
             even: true,
             cellMinWidth: 50,
             cols: [getCol()],
diff --git a/src/main/webapp/views/agvBasDevpVisualized/basDevp.html b/src/main/webapp/views/agvBasDevpVisualized/basDevp.html
index 521e936..acec6aa 100644
--- a/src/main/webapp/views/agvBasDevpVisualized/basDevp.html
+++ b/src/main/webapp/views/agvBasDevpVisualized/basDevp.html
@@ -57,6 +57,19 @@
                     <input type="checkbox" lay-skin="primary" name="cardCheckBox" value="{{devNo}}"/>
                 </div>
                 <div style="float:right; width:85%;">
+<!--                    <div>-->
+<!--                        <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}">鎷f枡鍏ュ簱</button>-->
+<!--                    </div>-->
+
+                    {{#if agvWrkDetl}}
+                    <div style=" padding-bottom: 20px">
+
+                        <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}" lay-submit lay-filter="containerMoveOut">瀹瑰櫒绂诲満</button>
+                        <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}" lay-submit lay-filter="pickIn">鎷f枡鍏ュ簱</button>
+
+                    </div>
+                    {{/if}}
+
                     <div>
                         宸ヤ綔绔欑紪鐮侊細{{devNo}} </br>
                         绔欑偣鐘舵�侊細{{locSts$}}
@@ -76,6 +89,16 @@
                         宸ヤ綔鍙凤細{{agvWrkMast.wrkNo}} </br>
                         宸ヤ綔鐘舵�侊細{{agvWrkMast.wrkSts$ }} </br>
                         宸ヤ綔绫诲瀷锛歿{agvWrkMast.ioType$}}
+                    </div>
+                    {{/if}}
+                    {{#if agvWrkDetl}}
+                    <div style="padding-top: 10px;">
+                        鐗╂枡鍙凤細{{agvWrkDetl.matnr}} </br>
+                        {{#if agvWrkDetl.batch}}
+                        搴忓垪鐮侊細{{agvWrkDetl.batch}} </br>
+                        {{/if}}
+                        鎵樼洏鐮侊細{{agvWrkDetl.zpallet}} </br>
+                        鏁伴噺锛歿{agvWrkDetl.anfme}}
                     </div>
                     {{/if}}
                 </div>
@@ -114,6 +137,7 @@
         var table = layui.table;
         var layer = layui.layer;
         var param = {'stationCode' : 'CS-101'};
+        loadData(param);
 
         form.on('select(floorSelect)', function (data) {
 
@@ -136,26 +160,6 @@
             param = null;
             param = {'stationCode' : $('#rowSelect').val()};
             loadData(param);
-            // $.ajax({
-            //     url: baseUrl+"/agv/basDevp/visualized/list/auth",
-            //     headers: {'token': localStorage.getItem('token')},
-            //     data: JSON.stringify(param),
-            //     dataType:'json',
-            //     contentType:'application/json;charset=UTF-8',
-            //     method: 'POST',
-            //     success: function (res) {
-            //         if (res.code === 200){
-            //             var tpl = $("#basDevpMapTemplate").html();
-            //             var template = Handlebars.compile(tpl);
-            //             var html = template(res.data);
-            //             $('#basDevpMap').html(html);
-            //         } else if (res.code === 403){
-            //             top.location.href = baseUrl+"/";
-            //         }else {
-            //             layer.msg(res.msg)
-            //         }
-            //     }
-            // })
         });
 
         //鍏ㄩ��
@@ -172,6 +176,57 @@
             for (var i = 0; i < cks.length; i++) {
                 cks[i].checked = !cks[i].checked;
             }
+        });
+
+        //瀹瑰櫒绂诲満
+        form.on('submit(containerMoveOut)', function () {
+            var devNoList = [];
+            devNoList.push(this.value);
+            var moveOutParam = {'devNo' : devNoList};
+            $.ajax({
+                url: baseUrl+"/agv/basDevp/visualized/container/moveOut",
+                headers: {'token': localStorage.getItem('token')},
+                data: JSON.stringify(moveOutParam),
+                dataType:'json',
+                contentType:'application/json;charset=UTF-8',
+                method: 'POST',
+                success: function (res) {
+                    if (res.code === 200){
+                        layer.msg(res.msg);
+                        loadData(param);
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg)
+                    }
+                }
+            })
+
+        });
+
+        //鎷f枡鍏ュ簱
+        form.on('submit(pickIn)', function () {
+            var devNoList = [];
+            devNoList.push(this.value);
+            var pickInParam = {'devNo' : devNoList};
+            $.ajax({
+                url: baseUrl+"/agv/basDevp/visualized/container/pickIn",
+                headers: {'token': localStorage.getItem('token')},
+                data: JSON.stringify(pickInParam),
+                dataType:'json',
+                contentType:'application/json;charset=UTF-8',
+                method: 'POST',
+                success: function (res) {
+                    if (res.code === 200){
+                        layer.msg(res.msg);
+                        loadData(param);
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg)
+                    }
+                }
+            })
         });
 
         //鍚姩鍏ュ簱
@@ -206,9 +261,9 @@
         //瀹氭椂鍒锋柊鏁版嵁
         //setInterval(loadData(param), 1000);
 
-        setInterval(function() {
-            loadData(param);
-        }, 1000);
+        // setInterval(function() {
+        //     loadData(param);
+        // }, 1000);
 
         function loadData(param){
             $.ajax({
diff --git a/src/main/webapp/views/mat/mat.html b/src/main/webapp/views/mat/mat.html
index 4f734c4..7103755 100644
--- a/src/main/webapp/views/mat/mat.html
+++ b/src/main/webapp/views/mat/mat.html
@@ -459,7 +459,7 @@
                 </div>
             </td>
         </tr>
-        <tr style="height: 74px; font-size: 18px;font-weight: 400">
+        <tr style="height: 50px; font-size: 18px;font-weight: 400">
             <td width="50px" align="center" colspan="1">瑙勬牸</td>
             <td align="center" colspan="3" style="
                 overflow:hidden;

--
Gitblit v1.9.1