From d65679fefe52fc2bf2435825c65aec3a329e3b9e Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 22 四月 2025 14:40:21 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/WorkService.java            |   10 
 version/立库 WMS接口文档 2024 0807.docx                             |    0 
 src/main/java/com/zy/asrs/task/TaskLogScheduler.java          |   76 +---
 src/main/java/com/zy/asrs/controller/OpenController.java      |   85 +++-
 src/main/java/com/zy/asrs/entity/param/TaskCreateInParam.java |   32 +
 src/main/java/com/zy/asrs/utils/NotifyUtils.java              |  100 +++++
 src/main/java/com/zy/asrs/task/NotifyScheduler.java           |  149 ++++++++
 src/main/java/com/zy/asrs/domain/enums/RedisKeyType.java      |   13 
 src/main/java/com/zy/asrs/controller/WorkController.java      |   18 -
 src/main/java/com/zy/asrs/service/OpenService.java            |    3 
 src/main/java/com/zy/asrs/domain/dto/NotifyDto.java           |   49 ++
 src/main/java/com/zy/common/config/RedisConfig.java           |    3 
 src/main/java/com/zy/asrs/domain/enums/NotifyMsgType.java     |   40 ++
 src/main/java/com/zy/common/utils/RedisUtil.java              |    1 
 src/main/java/com/zy/asrs/utils/Utils.java                    |   89 -----
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java   |  207 -----------
 src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java   |    1 
 src/main/java/com/zy/asrs/controller/TaskWrkController.java   |   75 ---
 src/main/java/com/zy/core/MainProcess.java                    |    3 
 src/main/java/com/zy/asrs/domain/dto/NotifyCustomDataDto.java |   14 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java   |   41 ++
 src/main/resources/application.yml                            |    8 
 22 files changed, 534 insertions(+), 483 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 2a3e840..13cef9e 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -57,6 +57,17 @@
         add("ea1f0459efc02a79f046f982767939ae");
     }};
 
+    private void auth(String appkey, Object obj, HttpServletRequest request) {
+        log.info("{}鎺ュ彛琚闂紱appkey:{}锛涜姹傛暟鎹細{}", request.getServletPath(), appkey, JSON.toJSONString(obj));
+        request.setAttribute("cache", obj);
+        if (Cools.isEmpty(appkey)) {
+            throw new CoolException("璁よ瘉澶辫触锛岃纭appkey鏃犺锛�");
+        }
+        if (!APP_KEY_LIST.contains(appkey)) {
+            throw new CoolException("璁よ瘉澶辫触锛岃纭appkey鏃犺锛�");
+        }
+    }
+
     //鍒涘缓浠诲姟
     @PostMapping("/taskCreate")
     @Transactional
@@ -81,26 +92,26 @@
                     return R.error("鏉$爜[barcode]涓嶈兘涓虹┖");
                 }
                 String locNo=null;
-                if(param.getIoType()==1){
-                    locNo=param.getTargetPoint();
-                }else{
-                    locNo=param.getStartPoint();
+                if (param.getIoType() == 1) {
+                    locNo = param.getTargetPoint();
+                } else {
+                    locNo = param.getStartPoint();
                 }
-                try{
+                try {
                     LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
-                            .eq("loc_no", locNo).ne("loc_sts","X"));
-                    if (Cools.isEmpty(locMast)){
-                        log.error("搴撲綅鍙蜂笉瀛樺湪"+locNo);
-                        return R.error("搴撲綅鍙蜂笉瀛樺湪"+locNo).add("搴撲綅鍙蜂笉瀛樺湪"+locNo);
+                            .eq("loc_no", locNo).ne("loc_sts", "X"));
+                    if (Cools.isEmpty(locMast)) {
+                        log.error("搴撲綅鍙蜂笉瀛樺湪" + locNo);
+                        return R.error("搴撲綅鍙蜂笉瀛樺湪" + locNo).add("搴撲綅鍙蜂笉瀛樺湪" + locNo);
                     }
-                }catch (Exception e){
-                    log.error("搴撲綅鍙锋娴嬬▼搴忓紓甯�==銆嬪紓甯镐俊鎭�"+e);
-                    return R.error("搴撲綅鍙锋娴嬬▼搴忓紓甯�").add("搴撲綅鍙锋娴嬬▼搴忓紓甯�==銆嬪紓甯镐俊鎭�"+e);
+                } catch (Exception e) {
+                    log.error("搴撲綅鍙锋娴嬬▼搴忓紓甯�==銆嬪紓甯镐俊鎭�" + e);
+                    return R.error("搴撲綅鍙锋娴嬬▼搴忓紓甯�").add("搴撲綅鍙锋娴嬬▼搴忓紓甯�==銆嬪紓甯镐俊鎭�" + e);
                 }
-                LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>()
-                        .eq("loc_sts","F")
-                        .eq("loc_no",locNo)
-                        .eq("barcode",param.getBarcode()));
+                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                        .eq("loc_sts", "F")
+                        .eq("loc_no", locNo)
+                        .eq("barcode", param.getBarcode()));
                 if(Cools.isEmpty(locMast)){
                     return R.error("璇ュ簱浣嶄笉婊¤冻鍑哄簱鏉′欢"+param.getTargetPoint());
                 }
@@ -108,12 +119,41 @@
                     locNoList.add(locMast.getLocNo());
                     paramList.add(param);
                 }else {
-                    return R.error("璇ュ簱浣嶄笉鑳藉悓鏃朵笅鍙戜袱绗斾换鍔�"+locMast.getLocNo());
+                    return R.error("璇ュ簱浣嶄笉鑳藉悓鏃朵笅鍙戜袱绗斾换鍔�" + locMast.getLocNo());
                 }
             }
             for (TaskCreateParam param : paramList){
                 openService.taskCreate(param);
             }
+        }catch (Exception e){
+            log.error("浠诲姟涓嬪彂寮傚父"+e);
+            return R.error();
+        }
+        return R.ok();
+    }
+
+    //鍒涘缓鍏ュ簱浠诲姟
+    @PostMapping("/taskCreateIn")
+    @Transactional
+    public R taskCreateIn(@RequestHeader String appkey,
+                        @RequestBody TaskCreateInParam param,
+                        HttpServletRequest request) {
+        auth(appkey, param, request);
+        try{
+            if (Cools.isEmpty(param)) {
+                return R.parse(BaseRes.PARAM);
+            }
+            if (Cools.isEmpty(param.getTaskNo())) {
+                return R.error("浠诲姟鍙穂taskNo]涓嶈兘涓虹┖");
+            }
+            if (Cools.isEmpty(param.getIoType())) {
+                return R.error("浠诲姟绫诲瀷[ioType]涓嶈兘涓虹┖");
+            }
+            if (Cools.isEmpty(param.getBarcode())) {
+                return R.error("鏉$爜[barcode]涓嶈兘涓虹┖");
+            }
+
+            openService.taskCreateIn(param);
         }catch (Exception e){
             log.error("浠诲姟涓嬪彂寮傚父"+e);
             return R.error();
@@ -147,17 +187,6 @@
 
         List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskNo);
         return R.ok().add(commandInfos);
-    }
-
-    private void auth(String appkey, Object obj, HttpServletRequest request) {
-        log.info("{}鎺ュ彛琚闂紱appkey:{}锛涜姹傛暟鎹細{}", request.getServletPath(), appkey, JSON.toJSONString(obj));
-        request.setAttribute("cache", obj);
-        if (Cools.isEmpty(appkey)) {
-            throw new CoolException("璁よ瘉澶辫触锛岃纭appkey鏃犺锛�");
-        }
-        if (!APP_KEY_LIST.contains(appkey)) {
-            throw new CoolException("璁よ瘉澶辫触锛岃纭appkey鏃犺锛�");
-        }
     }
 
     //浠诲姟涓嬪彂鎺ュ彛
diff --git a/src/main/java/com/zy/asrs/controller/TaskWrkController.java b/src/main/java/com/zy/asrs/controller/TaskWrkController.java
index b9b6763..7a21695 100644
--- a/src/main/java/com/zy/asrs/controller/TaskWrkController.java
+++ b/src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -6,12 +6,11 @@
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.DateUtils;
-import com.core.exception.CoolException;
+import com.zy.asrs.domain.dto.NotifyCustomDataDto;
+import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.domain.enums.TaskStatusType;
-import com.zy.asrs.entity.CommandInfo;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.TaskWrk;
-import com.zy.asrs.entity.param.TaskOverToWms;
 import com.zy.asrs.service.ApiLogService;
 import com.zy.asrs.service.CommandInfoService;
 import com.zy.asrs.service.LocMastService;
@@ -20,6 +19,7 @@
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.zy.asrs.utils.NotifyUtils;
 import com.zy.common.utils.HttpHandler;
 import com.zy.common.web.BaseController;
 import lombok.extern.slf4j.Slf4j;
@@ -35,21 +35,18 @@
 
     @Value("${wms.url}")
     private String wmsUrl;
-
     @Autowired
     private TaskWrkService taskWrkService;
-
     @Autowired
     private CommandInfoService commandInfoService;
-
     @Autowired
     private LocMastService locMastService;
-
     @Value("${wms.TaskExecCallback}")
     private String TaskExecCallback;
-
     @Autowired
     private ApiLogService apiLogService;
+    @Autowired
+    private NotifyUtils notifyUtils;
 
     @RequestMapping(value = "/taskWrk/{wrkNo}/auth")
     @ManagerAuth
@@ -179,9 +176,9 @@
         if (Cools.isEmpty(taskWrk) || taskWrk.getStatus()>=3){
             return R.error("宸插畬缁撴垨宸插彇娑�") ;
         }
-        LocMast locMast=new LocMast();
+        LocMast locMast = new LocMast();
         if(taskWrk.getIoType()==1){//鍏ュ簱浠诲姟瀹屾垚搴撲綅涓篎
-            locMast=locMastService.selectByLocNo(taskWrk.getTargetPoint());
+            locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint());
             if(Cools.isEmpty(locMast)){
               R.error("娌℃湁鎵惧埌璇ュ簱浣�") ;
             }
@@ -189,14 +186,14 @@
             locMast.setModiTime(new Date());
             locMast.setBarcode(taskWrk.getBarcode());
         }else if(taskWrk.getIoType()==2){//鍑哄簱浠诲姟瀹屾垚搴撲綅涓篛
-            locMast=locMastService.selectByLocNo(taskWrk.getStartPoint());
+            locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
             if(Cools.isEmpty(locMast)){
                 R.error("娌℃湁鎵惧埌璇ュ簱浣�") ;
             }
             locMast.setLocSts("O");
             locMast.setModiTime(new Date());
         }else if(taskWrk.getIoType()==3){
-            locMast=locMastService.selectByLocNo(taskWrk.getStartPoint());
+            locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
             if(Cools.isEmpty(locMast)){
                 R.error("娌℃湁鎵惧埌璇ュ簱浣�") ;
             }
@@ -212,34 +209,7 @@
             locMast.setBarcode(taskWrk.getBarcode());
 
         }
-        String response="";
-        try{
-            HashMap<String, Object> headParam = new HashMap<>();
-            headParam.put("TaskNo",taskWrk.getTaskNo());
-            headParam.put("Result",1);
-//            headParam.put("reportTime",new Date());
-            log.info("wcs鎵嬪姩瀹屾垚浠诲姟涓婃姤wms={}", taskWrk);
-            response = new HttpHandler.Builder()
-                    // .setHeaders(headParam)
-                    .setUri(wmsUrl)
-                    .setPath(TaskExecCallback)
-                    .setJson(JSON.toJSONString(headParam))
-                    .build()
-                    .doPost();
 
-            JSONObject jsonObject = JSON.parseObject(response);
-            apiLogService.save("wcs鎵嬪姩瀹屾垚浠诲姟涓婃姤wms"
-                    ,wmsUrl+TaskExecCallback
-                    ,null
-                    ,"127.0.0.1"
-                    ,JSON.toJSONString(headParam)
-                    ,response
-                    ,true
-            );
-        }catch (Exception e){
-            log.error("wcs鎵嬪姩瀹屾垚浠诲姟涓婃姤wms澶眥},杩斿洖鍊�={}", taskWrk,response);
-//            throw new CoolException(e);
-        }
         locMastService.updateById(locMast);
         taskWrk.setStatus(7);//鎵嬪姩瀹屾垚浠诲姟
         taskWrk.setModiTime(new Date());
@@ -288,34 +258,7 @@
         }catch (Exception e){
             taskWrk.setModiUser(9999L);//鎿嶄綔鍛�
         }
-        String response="";
-        try{
-            HashMap<String, Object> headParam = new HashMap<>();
-            headParam.put("TaskNo",taskWrk.getTaskNo());
-            headParam.put("Result",0);
-//            headParam.put("reportTime",new Date());
 
-            log.info("wcs鎵嬪姩鍙栨秷浠诲姟涓婃姤wm={}", taskWrk);
-            response = new HttpHandler.Builder()
-                    // .setHeaders(headParam)
-                    .setUri(wmsUrl)
-                    .setPath(TaskExecCallback)
-                    .setJson(JSON.toJSONString(headParam))
-                    .build()
-                    .doPost();
-            JSONObject jsonObject = JSON.parseObject(response);
-            apiLogService.save("wcs鎵嬪姩鍙栨秷浠诲姟涓婃姤wms"
-                    ,wmsUrl+TaskExecCallback
-                    ,null
-                    ,"127.0.0.1"
-                    ,JSON.toJSONString(headParam)
-                    ,response
-                    ,true
-            );
-        }catch (Exception e){
-            log.error("wcs鎵嬪姩鍙栨秷浠诲姟涓婃姤wms澶辫触={},杩斿洖鍊�={}", taskWrk,response);
-//            throw new CoolException(e);
-        }
         taskWrk.setCompleteTime(now);//瀹岀粨鏃堕棿
         taskWrkService.updateById(taskWrk);
         return R.ok();
diff --git a/src/main/java/com/zy/asrs/controller/WorkController.java b/src/main/java/com/zy/asrs/controller/WorkController.java
index 7bb57fc..4dbb68e 100644
--- a/src/main/java/com/zy/asrs/controller/WorkController.java
+++ b/src/main/java/com/zy/asrs/controller/WorkController.java
@@ -1,12 +1,8 @@
 package com.zy.asrs.controller;
 
-import com.core.annotations.ManagerAuth;
-import com.core.common.R;
 import com.zy.asrs.service.WorkService;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 
@@ -19,19 +15,5 @@
 
     @Autowired
     private WorkService workService;
-
-    @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("浠诲姟宸插畬鎴�");
-        } else if (type == 2) {
-            workService.cancelWrkMast(workNo, getUserId());
-            return R.ok("浠诲姟宸插彇娑�");
-        }
-        return R.ok();
-    }
 
 }
diff --git a/src/main/java/com/zy/asrs/domain/dto/NotifyCustomDataDto.java b/src/main/java/com/zy/asrs/domain/dto/NotifyCustomDataDto.java
new file mode 100644
index 0000000..92a2c58
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/dto/NotifyCustomDataDto.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class NotifyCustomDataDto {
+
+    private String uri;
+
+    private String path;
+
+    private String data;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/dto/NotifyDto.java b/src/main/java/com/zy/asrs/domain/dto/NotifyDto.java
new file mode 100644
index 0000000..1c69e23
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/dto/NotifyDto.java
@@ -0,0 +1,49 @@
+package com.zy.asrs.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class NotifyDto {
+
+    private Long id;
+
+    //閫氱煡绫诲瀷
+    private String notifyType;
+
+    //璁惧鍙�
+    private Integer device;
+
+    //宸ヤ綔鍙�
+    private String taskNo;
+
+    //涓婄骇绯荤粺宸ヤ綔鍙�
+    private String superTaskNo;
+
+    //娑堟伅绫诲瀷
+    private String msgType;
+
+    //娑堟伅鎻忚堪
+    private String msgDesc;
+
+    //娑堟伅鏁版嵁
+    private String data;
+
+    //鍙戦�佽嚜瀹氫箟娑堟伅鏁版嵁锛岄粯璁ゆ爣鍑嗘牸寮�
+    private Boolean sendCustomData = false;
+
+    //鑷畾涔夋秷鎭暟鎹牸寮�
+    private NotifyCustomDataDto customData;
+
+    //澶辫触閲嶈瘯娆℃暟
+    private Integer failTimes = 3;
+
+    //閲嶈瘯娆℃暟
+    private Integer retryTimes = 0;
+
+    //閲嶈瘯闂撮殧榛樿30s
+    private Integer retryTime = 30;
+
+    //涓婃閲嶈瘯鏃堕棿
+    private Long lastRetryTime = 0L;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/enums/NotifyMsgType.java b/src/main/java/com/zy/asrs/domain/enums/NotifyMsgType.java
new file mode 100644
index 0000000..94e316e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/enums/NotifyMsgType.java
@@ -0,0 +1,40 @@
+package com.zy.asrs.domain.enums;
+
+public enum NotifyMsgType {
+    //浠诲姟
+    TASK_COMPLETE("task_complete", "浠诲姟瀹屾垚"),
+    TASK_CANCEL("task_cancel", "浠诲姟鍙栨秷"),
+    ;
+
+    public String flag;
+    public String desc;
+
+    NotifyMsgType(String flag, String desc) {
+        this.flag = flag;
+        this.desc = desc;
+    }
+
+    public static NotifyMsgType get(String flag) {
+        if (null == flag) {
+            return null;
+        }
+        for (NotifyMsgType type : NotifyMsgType.values()) {
+            if (type.flag.equals(flag)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static NotifyMsgType get(NotifyMsgType type) {
+        if (null == type) {
+            return null;
+        }
+        for (NotifyMsgType type2 : NotifyMsgType.values()) {
+            if (type2 == type) {
+                return type2;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/domain/enums/RedisKeyType.java b/src/main/java/com/zy/asrs/domain/enums/RedisKeyType.java
new file mode 100644
index 0000000..d096fd3
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/enums/RedisKeyType.java
@@ -0,0 +1,13 @@
+package com.zy.asrs.domain.enums;
+
+public enum RedisKeyType {
+
+    QUEUE_TASK("queue_task_"),
+    ;
+
+    public String key;
+
+    RedisKeyType(String key) {
+        this.key = key;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/TaskCreateInParam.java b/src/main/java/com/zy/asrs/entity/param/TaskCreateInParam.java
new file mode 100644
index 0000000..15e3f76
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/TaskCreateInParam.java
@@ -0,0 +1,32 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class TaskCreateInParam {
+
+    //浠诲姟鍙�
+    private String taskNo;
+
+    //浠诲姟绫诲瀷
+    private Integer ioType;
+
+    //浼樺厛绾�
+    private Integer taskPriority;
+
+    //缁堢偣
+    private String targetPoint;
+
+    //鏄惁绌烘墭鐩� Y:鏄� N锛氬惁
+    private String emptyContainer;
+
+    //鏉$爜
+    private String barcode;
+
+    //澶囨敞
+    private String memo;
+
+    //鍫嗗灈鏈�
+    private Integer crn;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java b/src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java
index 0d5534d..4e6930e 100644
--- a/src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/TaskCreateParam.java
@@ -1,6 +1,5 @@
 package com.zy.asrs.entity.param;
 
-import io.swagger.models.auth.In;
 import lombok.Data;
 
 @Data
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index 19d5500..a997979 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service;
 
+import com.zy.asrs.entity.param.TaskCreateInParam;
 import com.zy.asrs.entity.param.TaskCreateParam;
 import java.util.HashMap;
 
@@ -8,4 +9,6 @@
     //鍒涘缓浠诲姟
     HashMap<String,Object> taskCreate(TaskCreateParam param);
 
+    HashMap<String,Object> taskCreateIn(TaskCreateInParam param);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index 197a32a..e52ff2a 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -2,14 +2,4 @@
 
 public interface WorkService {
 
-    /**
-     * 鎵嬪姩瀹屾垚宸ヤ綔妗�
-     */
-    void completeWrkMast(String workNo, Long userId);
-
-    /**
-     * 鎵嬪姩鍙栨秷宸ヤ綔妗�
-     */
-    void cancelWrkMast(String workNo, Long userId);
-
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 60bf3cd..cd5f403 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -5,6 +5,7 @@
 import com.zy.asrs.domain.enums.TaskStatusType;
 import com.zy.asrs.domain.enums.WorkNoType;
 import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.TaskCreateInParam;
 import com.zy.asrs.entity.param.TaskCreateParam;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.Utils;
@@ -56,7 +57,7 @@
         if (param.getIoType() == 1) {
             taskWrk.setWrkSts(1);
             if (!Cools.isEmpty(param.getTargetPoint())) {
-                taskWrk.setTargetPoint(Utils.getWcsLocNo(param.getTargetPoint()));//缁堢偣
+                taskWrk.setTargetPoint(param.getTargetPoint());//缁堢偣
                 taskWrk.setOriginTargetPoint(param.getTargetPoint());
             }
 
@@ -90,4 +91,42 @@
         return map;
     }
 
+    @Override
+    public HashMap<String, Object> taskCreateIn(TaskCreateInParam param) {
+        HashMap<String, Object> map = new HashMap<>();
+        TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
+        if (taskWrk != null) {
+            map.put("Code","0");
+            map.put("Msg", param.getTaskNo() + "浠诲姟宸茬粡鐢熸垚锛�");
+            return map;
+        }
+
+        Date now = new Date();
+        taskWrk = new TaskWrk();
+        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", param.getTargetPoint()));
+        int workNo1 = commonService.getWorkNo(WorkNoType.PAKIN.type);//鑾峰彇鍏ュ簱宸ヤ綔鍙�
+        taskWrk.setTaskNo(param.getTaskNo());//浠诲姟鍙�
+        taskWrk.setWrkNo(workNo1);
+        taskWrk.setStatus(TaskStatusType.RECEIVE.id);//浠诲姟鐘舵�侊細鎺ユ敹
+        taskWrk.setCreateTime(now);
+        taskWrk.setIoType(param.getIoType());//浠诲姟绫诲瀷
+        taskWrk.setIoPri(param.getTaskPriority());//浼樺厛绾�
+        taskWrk.setBarcode(param.getBarcode());//鏉$爜
+        taskWrk.setCrnNo(locMast.getCrnNo());
+        taskWrk.setWrkSts(1);
+        taskWrk.setTargetPoint(param.getTargetPoint());//缁堢偣
+        taskWrk.setOriginTargetPoint(param.getTargetPoint());
+        if (!Cools.isEmpty(param.getMemo())) {
+            taskWrk.setMemo(param.getMemo());//澶囨敞
+        }
+
+        if (!taskWrkService.insert(taskWrk)) {
+            map.put("Code", "0");
+            map.put("Msg", param.getTaskNo() + "鍒涘缓浠诲姟澶辫触锛�");
+            return map;
+        }
+        map.put("Code","1");
+        map.put("Msg","ok");
+        return map;
+    }
 }
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 4df73f7..99a0306 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -1,211 +1,12 @@
 package com.zy.asrs.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.core.common.Cools;
-import com.core.common.DateUtils;
-import com.core.exception.CoolException;
-import com.zy.asrs.entity.LocMast;
-import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.service.*;
-import com.zy.common.utils.HttpHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.concurrent.TimeUnit;
+import com.zy.asrs.service.WorkService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
 @Slf4j
 @Service
 public class WorkServiceImpl implements WorkService {
 
-    @Autowired
-    private WrkMastService wrkMastService;
-    @Autowired
-    private LocMastService locMastService;
-    @Autowired
-    private WaitPakinService waitPakinService;
-    @Autowired
-    private WrkMastLogService wrkMastLogService;
-    @Autowired
-    private WrkDetlLogService wrkDetlLogService;
-    @Autowired
-    private WrkDetlService wrkDetlService;
-    @Autowired
-    private ApiLogService apiLogService;
-    @Value("${wms.url}")
-    private String wmsUrl;
-    @Value("${wms.inboundTaskApplyPath}")
-    private String inboundTaskApplyPath;
-    @Value("${wms.movePath}")
-    private String movePath;
-    @Value("${wms.taskStatusFeedbackPath}")
-    private String taskStatusFeedbackPath;
-
-    @Override
-    @Transactional
-    public void completeWrkMast(String workNo, Long userId) {
-        WrkMast wrkMast = wrkMastService.selectById(workNo);
-        if (Cools.isEmpty(wrkMast)) {
-            throw new CoolException(workNo + "宸ヤ綔妗d笉瀛樺湪");
-        }
-        if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) {
-            throw new CoolException("褰撳墠宸ヤ綔妗e凡瀹屾垚");
-        }
-        // 鍏ュ簱 + 搴撲綅杞Щ
-        if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) {
-            wrkMast.setWrkSts(4L);
-            // 鍑哄簱
-        } else if (wrkMast.getWrkSts() > 10) {
-            wrkMast.setWrkSts(14L);
-        }
-        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 (!wrkMastService.updateById(wrkMast)) {
-            throw new CoolException("淇敼宸ヤ綔妗eけ璐�");
-        }
-
-        HashMap<String,Object> headParam = new HashMap<>();
-        headParam.put("TaskNo",wrkMast.getTaskNo());
-        headParam.put("Result",0);//瀹屾垚
-
-        try {
-            String response;
-            log.error("wcs鎵嬪姩瀹岀粨浠诲姟涓婃姤wms={}", wrkMast);
-
-            response = new HttpHandler.Builder()
-                    // .setHeaders(headParam)
-                    .setUri(wmsUrl)
-                    .setPath(taskStatusFeedbackPath)
-                    .setJson(JSON.toJSONString(headParam))
-                    .build()
-                    .doPost();
-            apiLogService.save("wcs鎵嬪姩瀹屾垚浠诲姟涓婃姤wms"
-                    , wmsUrl + taskStatusFeedbackPath
-                    , null
-                    , "127.0.0.1"
-                    , JSON.toJSONString(headParam)
-                    , response
-                    , true
-            );
-        } catch (Exception e) {
-            log.error("wcs鎵嬪姩瀹岀粨浠诲姟涓婃姤wms澶辫触={}", wrkMast);
-            log.error("wcs鎵嬪姩瀹岀粨浠诲姟涓婃姤wms澶辫触,鎶ラ敊淇℃伅锛�", e);
-//                        throw new CoolException("wcs娲惧彂鍏ュ簱浠诲姟涓婃姤wms澶辫触");
-        }
-    }
-
-    @Override
-    @Transactional
-    public void cancelWrkMast(String workNo, Long userId) {
-        Date now = new Date();
-        WrkMast wrkMast = wrkMastService.selectById(workNo);
-
-        String locNo = ""; // 寰呬慨鏀圭洰鏍囧簱浣�
-        String locSts = ""; // 寰呬慨鏀圭洰鏍囧簱浣嶇姸鎬�
-        // 鍏ュ簱鍙栨秷锛堜慨鏀圭洰鏍囧簱浣嶏級
-        if (wrkMast.getWrkSts() < 4) {
-            locNo = wrkMast.getLocNo();
-            locSts = "O";
-
-            // 搴撲綅杞Щ
-            if (wrkMast.getIoType() == 11) {
-                // 搴撲綅杞Щ锛氭簮搴撲綅
-                LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛屾簮搴撲綅涓嶅瓨鍦�:" + wrkMast.getSourceLocNo());
-                }
-                locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F");
-                locMast.setModiTime(now);
-                locMast.setModiUser(userId);
-                locMastService.updateById(locMast);
-            }
-            // 鍑哄簱鍙栨秷锛堜慨鏀规簮搴撲綅锛�
-        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
-            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";
-                // 搴撲綅杞Щ锛氱洰鏍囧簱浣�
-                LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
-                if (Cools.isEmpty(locMast)) {
-                    throw new CoolException("鍙栨秷搴撲綅杞Щ澶辫触锛岀洰鏍囧簱浣嶄笉瀛樺湪:" + wrkMast.getSourceLocNo());
-                }
-                locMast.setLocSts("O");
-                locMast.setModiTime(now);
-                locMast.setModiUser(userId);
-                locMastService.updateById(locMast);
-            }
-        } else {
-            throw new CoolException("褰撳墠宸ヤ綔鐘舵�佹棤娉曞彇娑�");
-        }
-        // 鍙栨秷鎿嶄綔浜哄憳璁板綍
-        wrkMast.setManuType("鎵嬪姩鍙栨秷");
-        wrkMast.setModiUser(userId);
-        wrkMast.setModiTime(now);
-        if (!wrkMastService.updateById(wrkMast)) {
-            throw new CoolException("鍙栨秷浠诲姟澶辫触");
-        }
-        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
-            throw new CoolException("淇濆瓨浠诲姟鍘嗗彶妗eけ璐�, workNo = " + wrkMast.getWrkNo());
-        }
-
-        // 鍒犻櫎宸ヤ綔涓绘。
-        boolean wrkMastRes = wrkMastService.deleteById(wrkMast);
-
-        // 淇敼搴撲綅鐘舵��
-        LocMast locMast = locMastService.selectById(locNo);
-        if (Cools.isEmpty(locMast)) {
-            throw new CoolException("鍙栨秷浠诲姟澶辫触锛屽簱浣嶄笉瀛樺湪:" + locNo);
-        }
-        locMast.setLocSts(locSts);
-        locMast.setModiTime(now);
-        locMast.setModiUser(userId);
-        boolean locMastRes = locMastService.updateById(locMast);
-        if (!wrkMastRes || !locMastRes) {
-            throw new CoolException("淇濆瓨鏁版嵁澶辫触");
-        }
-        HashMap<String,Object> headParam = new HashMap<>();
-        headParam.put("TaskNo",wrkMast.getTaskNo());
-        headParam.put("Result",1);//鍙栨秷
-
-        try {
-            String response;
-            log.error("wcs鎵嬪姩鍙栨秷浠诲姟涓婃姤wms={}", wrkMast);
-
-            response = new HttpHandler.Builder()
-                    // .setHeaders(headParam)
-                    .setUri(wmsUrl)
-                    .setPath(taskStatusFeedbackPath)
-                    .setJson(JSON.toJSONString(headParam))
-                    .build()
-                    .doPost();
-            apiLogService.save("wcs鎵嬪姩鍙栨秷浠诲姟涓婃姤wms"
-                    , wmsUrl + taskStatusFeedbackPath
-                    , null
-                    , "127.0.0.1"
-                    , JSON.toJSONString(headParam)
-                    , response
-                    , true
-            );
-        } catch (Exception e) {
-            log.error("wcs鎵嬪姩鍙栨秷浠诲姟涓婃姤wms澶辫触={}", wrkMast);
-            log.error("wcs鎵嬪姩鍙栨秷浠诲姟涓婃姤wms澶辫触,鎶ラ敊淇℃伅锛�", e);
-//                        throw new CoolException("wcs娲惧彂鍏ュ簱浠诲姟涓婃姤wms澶辫触");
-        }
-    }
 }
diff --git a/src/main/java/com/zy/asrs/task/NotifyScheduler.java b/src/main/java/com/zy/asrs/task/NotifyScheduler.java
new file mode 100644
index 0000000..3dfc3a2
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/NotifyScheduler.java
@@ -0,0 +1,149 @@
+package com.zy.asrs.task;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.domain.dto.NotifyCustomDataDto;
+import com.zy.asrs.domain.dto.NotifyDto;
+import com.zy.asrs.entity.ApiLog;
+import com.zy.asrs.service.ApiLogService;
+import com.zy.asrs.utils.NotifyUtils;
+import com.zy.common.utils.HttpHandler;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+@Component
+@Slf4j
+public class NotifyScheduler {
+
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private NotifyUtils notifyUtils;
+    @Autowired
+    private SlaveProperties slaveProperties;
+    @Autowired
+    private ConfigService configService;
+    @Autowired
+    private ApiLogService apiLogService;
+
+    @Scheduled(cron = "0/3 * * * * ? ")
+    public synchronized void notifyTask(){
+        notifyMsg("task", 1);
+    }
+
+    private synchronized void notifyMsg(String notifyType, Integer device) {
+        Config notifyEnableConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "notifyEnable"));
+        if(notifyEnableConfig == null){
+            return;
+        }
+        String notifyEnable = notifyEnableConfig.getValue();
+        if (!notifyEnable.equals("Y")) {
+            return;
+        }
+
+        Config notifyUriConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "notifyUri"));
+        if(notifyUriConfig == null){
+            return;
+        }
+        String notifyUri = notifyUriConfig.getValue();
+
+        Config notifyUriPathConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "notifyUriPath"));
+        if(notifyUriPathConfig == null){
+            return;
+        }
+        String notifyUriPath = notifyUriPathConfig.getValue();
+
+        List<String> keys = notifyUtils.takeKeys(notifyType, device);
+        if(keys == null){
+            return;
+        }
+
+        if (keys.isEmpty()) {
+            return;
+        }
+
+        for (String key : keys) {
+            Object object = redisUtil.get(key);
+            if (object == null) {
+                continue;
+            }
+            NotifyDto notifyDto = (NotifyDto) object;
+
+            if (System.currentTimeMillis() - notifyDto.getLastRetryTime() < 1000 * notifyDto.getRetryTime()) {
+                continue;
+            }
+
+            ApiLog apiLog = new ApiLog();
+
+            try {
+                //瑙﹀彂閫氱煡
+                String response = null;
+                if (notifyDto.getSendCustomData()) {
+                    //鑷畾涔夋秷鎭牸寮�
+                    NotifyCustomDataDto customData = notifyDto.getCustomData();
+                    response = new HttpHandler.Builder()
+                            .setUri(customData.getUri())
+                            .setPath(customData.getPath())
+                            .setJson(customData.getData())
+                            .build()
+                            .doPost();
+
+                    apiLog.setUrl(customData.getUri() + customData.getPath());
+                    apiLog.setRequest(customData.getData());
+                    apiLog.setCreateTime(new Date());
+                }else {
+                    response = new HttpHandler.Builder()
+                            .setUri(notifyUri)
+                            .setPath(notifyUriPath)
+                            .setJson(JSON.toJSONString(notifyDto))
+                            .build()
+                            .doPost();
+
+                    apiLog.setUrl(notifyUri + notifyUriPath);
+                    apiLog.setRequest(JSON.toJSONString(notifyDto));
+                    apiLog.setCreateTime(new Date());
+                }
+
+                apiLog.setResponse(response);
+
+                JSONObject jsonObject = JSON.parseObject(response);
+                Integer code = jsonObject.getInteger("code");
+                if(code == 200){
+                    //閫氱煡鎴愬姛
+                    redisUtil.del(key);
+
+                    continue;
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }finally {
+                //淇濆瓨璁板綍
+                apiLogService.insert(apiLog);
+            }
+
+            //閫氱煡澶辫触
+            int times = notifyDto.getRetryTimes() + 1;
+            if (times >= notifyDto.getFailTimes()) {
+                //瓒呰繃娆℃暟
+                redisUtil.del(key);
+                continue;
+            }
+
+            notifyDto.setLastRetryTime(System.currentTimeMillis());
+            notifyDto.setRetryTimes(times);
+            redisUtil.set(key, notifyDto);
+            continue;
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/task/TaskLogScheduler.java b/src/main/java/com/zy/asrs/task/TaskLogScheduler.java
index 1e53034..c299dc2 100644
--- a/src/main/java/com/zy/asrs/task/TaskLogScheduler.java
+++ b/src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -1,17 +1,14 @@
 package com.zy.asrs.task;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.exception.CoolException;
+import com.zy.asrs.domain.dto.NotifyCustomDataDto;
+import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.domain.enums.TaskStatusType;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.TaskOverToWms;
-import com.zy.asrs.entity.param.TaskStatusFeedbackParam;
 import com.zy.asrs.service.*;
 import com.zy.asrs.service.impl.TaskWrkLogServiceImpl;
-import com.zy.asrs.utils.PostMesDataUtils;
-import com.zy.common.utils.HttpHandler;
+import com.zy.asrs.utils.NotifyUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -19,10 +16,7 @@
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
-import java.util.Date;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 /**
  * 瀹氭椂灏嗕换鍔�(瀹屾垚銆佸彇娑�)杞垚鏃ュ織
@@ -33,17 +27,6 @@
 
     @Autowired
     private TaskWrkService taskWrkService;
-    @Autowired
-    private CommandInfoService commandInfoService;
-    @Autowired
-    private ApiLogService apiLogService;
-    @Autowired
-    private BasDevpService basDevpService;
-
-    @Autowired
-    private StaDescService staDescService;
-    @Autowired
-    private LocMastService locMastService;
     @Autowired
     private TaskWrkLogServiceImpl wrkLogService;
 
@@ -57,49 +40,32 @@
     private String TaskExecCallback;
     @Value("${wms.taskStatusFeedbackPath}")
     private String taskStatusFeedbackPath;
+    @Autowired
+    private NotifyUtils notifyUtils;
 
     @Scheduled(cron = "0/3 * * * * ? ")
     public void execute() throws IOException {
-
         for (TaskWrk taskWrk : taskWrkService.selectToBeHistoryData()) {
             HashMap<String, Object> headParam = new HashMap<>();
+            headParam.put("TaskNo", taskWrk.getTaskNo());
             if (taskWrk.getStatus().equals(TaskStatusType.OVER.id) || taskWrk.getStatus() == 7) {//瀹屾垚
-                headParam.put("Result", 1);
+                headParam.put("Result", 1);//瀹屾垚
             } else if (taskWrk.getStatus().equals(TaskStatusType.CANCEL.id)) {
-                headParam.put("Result", 2);
+                headParam.put("Result", 2);//鍙栨秷
             }
-            String response = "";
-            Boolean bool = false;
-            try {
-                headParam.put("TaskNo", taskWrk.getTaskNo());
-                log.info("wcs鎵嬪姩瀹屾垚浠诲姟涓婃姤wms={}", taskWrk);
-                response = new HttpHandler.Builder()
-                        // .setHeaders(headParam)
-                        .setUri(wmsUrl)
-                        .setPath(TaskExecCallback)
-                        .setJson(JSON.toJSONString(headParam))
-                        .build()
-                        .doPost();
-                JSONObject jsonObject = JSON.parseObject(response);
-                TaskWrkLog taskWrkLog = new TaskWrkLog(taskWrk);
-                if (!wrkLogService.insert(taskWrkLog)) {
-                    throw new CoolException("杞巻鍙叉。澶辫触" + taskWrkLog);
-                }
-                if (!taskWrkService.deleteById(taskWrk)) {
-                    throw new CoolException("浠诲姟妗e垹闄ゅけ璐�" + taskWrkLog);
-                }
-                bool = true;
-            } catch (Exception e) {
-                log.error("wcs鎵嬪姩瀹屾垚浠诲姟涓婃姤wms澶辫触{},杩斿洖鍊�={}", taskWrk, response);
-            } finally {
-                apiLogService.save("wcs瀹屾垚鎴栬�呭彇娑堜换鍔′笂鎶ms"
-                        , wmsUrl + TaskExecCallback
-                        , null
-                        , "127.0.0.1"
-                        , JSON.toJSONString(headParam)
-                        , response
-                        , bool
-                );
+
+            NotifyCustomDataDto customDataDto = new NotifyCustomDataDto();
+            customDataDto.setUri(wmsUrl);
+            customDataDto.setPath(TaskExecCallback);
+            customDataDto.setData(JSON.toJSONString(headParam));
+            notifyUtils.notify("task", 1, String.valueOf(taskWrk.getWrkNo()), taskWrk.getTaskNo(), NotifyMsgType.TASK_COMPLETE, JSON.toJSONString(taskWrk), true, customDataDto);
+
+            TaskWrkLog taskWrkLog = new TaskWrkLog(taskWrk);
+            if (!wrkLogService.insert(taskWrkLog)) {
+                throw new CoolException("杞巻鍙叉。澶辫触" + taskWrkLog);
+            }
+            if (!taskWrkService.deleteById(taskWrk)) {
+                throw new CoolException("浠诲姟妗e垹闄ゅけ璐�" + taskWrkLog);
             }
         }
     }
diff --git a/src/main/java/com/zy/asrs/utils/NotifyUtils.java b/src/main/java/com/zy/asrs/utils/NotifyUtils.java
new file mode 100644
index 0000000..d764ffb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/NotifyUtils.java
@@ -0,0 +1,100 @@
+package com.zy.asrs.utils;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.SnowflakeIdWorker;
+import com.zy.asrs.domain.dto.NotifyCustomDataDto;
+import com.zy.asrs.domain.dto.NotifyDto;
+import com.zy.asrs.domain.enums.NotifyMsgType;
+import com.zy.asrs.domain.enums.RedisKeyType;
+import com.zy.common.utils.RedisUtil;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+@Component
+public class NotifyUtils {
+
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private ConfigService configService;
+
+    public synchronized boolean notify(String notifyType, Integer device, String taskNo, String superTaskNo, NotifyMsgType msgType) {
+        return append(notifyType, device, taskNo, superTaskNo, msgType, null, false, null);
+    }
+
+    public synchronized boolean notify(String notifyType, Integer device, String taskNo, String superTaskNo, NotifyMsgType msgType, String data, Boolean sendCustomData, NotifyCustomDataDto customData) {
+        return append(notifyType, device, taskNo, superTaskNo, msgType, data, sendCustomData, customData);
+    }
+
+    public synchronized List<String> takeKeys(String notifyType, Integer device) {
+        String key = getKey(notifyType, device);
+        if(key == null){
+            return null;
+        }
+
+        Set keys = redisUtil.keys(key + "*");
+        if (keys == null) {
+            return null;
+        }
+
+        List<String> list = new ArrayList<>();
+        for (Object object : keys) {
+            list.add(object.toString());
+        }
+        return list;
+    }
+
+    public String getKey(String notifyType, Integer device) {
+        String key = null;
+        if (notifyType.equals("task")) {
+            key = RedisKeyType.QUEUE_TASK.key + device;
+        } else {
+            return null;
+        }
+
+        return key;
+    }
+
+    private boolean append(String notifyType, Integer device, String taskNo, String superTaskNo, NotifyMsgType msgType, String data, Boolean sendCustomData, NotifyCustomDataDto customData) {
+        String key = getKey(notifyType, device);
+        if (key == null) {
+            return false;
+        }
+
+        NotifyDto dto = new NotifyDto();
+        dto.setId(snowflakeIdWorker.nextId());
+        dto.setNotifyType(notifyType);
+        dto.setDevice(device);
+        dto.setMsgType(msgType.flag);
+        dto.setMsgDesc(msgType.desc);
+        dto.setData(data);
+        dto.setTaskNo(taskNo);
+        dto.setSuperTaskNo(superTaskNo);
+        dto.setSendCustomData(sendCustomData);
+        dto.setCustomData(customData);
+
+        //閲嶈瘯娆℃暟
+        Config notifyFailTimesConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "notifyFailTimes"));
+        if (notifyFailTimesConfig != null) {
+            dto.setFailTimes(Integer.parseInt(notifyFailTimesConfig.getValue()));
+        }
+
+        //閲嶈瘯闂撮殧
+        Config notifyRetryTimeConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "notifyRetryTime"));
+        if (notifyRetryTimeConfig != null) {
+            dto.setRetryTime(Integer.parseInt(notifyRetryTimeConfig.getValue()));
+        }
+
+        redisUtil.set(key + "_" + dto.getId(), dto);
+        return true;
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 91ae550..c16eb10 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -59,93 +59,6 @@
         return crnNo == 1 ? s : 3 - s;
     }
 
-
-
-
-    //杞崲wms浼犺緭鐨勫簱浣嶅彿
-    public static String getWcsLocNo(String locNo){
-        String[] split = locNo.split("-");
-        int[] wcsRow = getWcsRow(split[0]);
-        int[] ints = null;
-        if (split[3].equals("01")){
-            ints = Arrays.copyOfRange(wcsRow, 0, (wcsRow.length+2-1) / 2);
-            if (split[4].equals("01")){
-                if (ints.length<2){
-
-                }else {
-                    ints = Arrays.copyOfRange(ints, ints.length / 2, ints.length);
-                }
-            }else {
-                if (ints.length<2){
-
-                }else {
-                    ints = Arrays.copyOfRange(ints, ints.length / 2-1,ints.length-1);
-                }
-            }
-        }else {
-            ints = Arrays.copyOfRange(wcsRow, (wcsRow.length+2-1) / 2,wcsRow.length );
-            if (split[4].equals("01")){
-                if (ints.length<2){
-
-                }else {
-                    ints = Arrays.copyOfRange(ints, ints.length / 2-1,ints.length-1);
-                }
-            }else {
-                if (ints.length<2){
-
-                }else {
-                    ints = Arrays.copyOfRange(ints, ints.length / 2, ints.length);
-                }
-
-
-            }
-        }
-        int i = ints[0];
-        String wcsLocNo = "";
-        Integer bay = Integer.parseInt(split[1])+1;
-        String bay2 = "";
-        if (bay>9){
-            bay2 = bay.toString();
-        }else {
-            bay2 = "0"+bay;
-        }
-        if (i>9){
-            wcsLocNo = i+"0"+bay2+split[2];
-        }else {
-            wcsLocNo = "0"+i+"0"+bay2+split[2];
-        }
-
-
-
-        return wcsLocNo;
-    }
-    public static int[] getWcsRow(String row){
-        int[] array = null;
-        switch (row){
-            case "01":
-                 array= new int[]{1, 2, 3, 4};
-                break;
-            case "02":
-                 array= new int[]{5,6};
-                break;
-            case "03":
-                 array= new int[]{7,8,9,10};
-                break;
-            case "04":
-                 array= new int[]{11,12,13,14};
-                break;
-            case "05":
-                 array= new int[]{15,16,17,18};
-                break;
-            case "06":
-                 array= new int[]{19,20,21};
-                break;
-            default:
-
-        }
-        return array;
-    }
-
     public static float scale(Float f){
         if (f == null || f == 0f || Float.isNaN(f)) {
             return 0f;
@@ -382,8 +295,6 @@
 //        slaveProperties.setGroupCount(4);
 //        Integer deepRow = getDeepRow(slaveProperties, 6);
 //        System.out.println(deepRow);
-        String wcsLocNo = getWcsLocNo("01-01-01-01-01");
-        System.out.println(wcsLocNo);
     }
 
     public static Integer StaNoCrnNo(Integer staNo) {
diff --git a/src/main/java/com/zy/common/config/RedisConfig.java b/src/main/java/com/zy/common/config/RedisConfig.java
index d356517..cf99252 100644
--- a/src/main/java/com/zy/common/config/RedisConfig.java
+++ b/src/main/java/com/zy/common/config/RedisConfig.java
@@ -5,6 +5,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
 import org.springframework.data.redis.core.*;
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
@@ -14,7 +15,7 @@
  * Redis閰嶇疆绫�
  * Created by vincent on 2019-12-23
  */
-//@Configuration
+@Configuration
 //@EnableCaching // 寮�鍚暟鎹紦瀛樻満鍒�
 public class RedisConfig extends CachingConfigurerSupport {
 
diff --git a/src/main/java/com/zy/common/utils/RedisUtil.java b/src/main/java/com/zy/common/utils/RedisUtil.java
index 95da6dc..dd3e607 100644
--- a/src/main/java/com/zy/common/utils/RedisUtil.java
+++ b/src/main/java/com/zy/common/utils/RedisUtil.java
@@ -2,7 +2,6 @@
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index bec8a76..b8b7b06 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -26,9 +26,6 @@
     // 棰戠巼
     private int i = 0;
 
-    @Value("${wms.maxCirle}")
-    private Integer maxCount;
-
     /**
      * =====>>  寮�濮嬪伐浣�
      */
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c1f0ecf..317ac0d 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -8,7 +8,7 @@
     name: @pom.build.finalName@
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://192.168.4.42:1433;databasename=czbrasrs
+    url: jdbc:sqlserver://192.168.4.42:1433;databasename=ynhfasrs
     username: sa
     password: sa@123
   mvc:
@@ -46,18 +46,12 @@
 wms:
   #杈撻�佺嚎鏆傚瓨鏁�
   count: 8
-  maxCirle: 3
   # 鏄惁寮�鍚笂鎶�
   start: true
   # WMS绯荤粺ip
-  #url: 10.32.53.195:8080
-  # WMS绯荤粺ip
-  #  url: 10.210.157.109:8090
   url: 10.10.10.222:2410
   # 鍏ュ簱浠诲姟鐢宠鎺ュ彛
-  #inboundTaskApplyPath: api/InterFace/inboundTaskApply
   inboundTaskApplyPath: api/StereoscopicCallBack/AcceptTaskStatus
-  #  inboundTaskApplyPath: open/asrs/inboundTaskApply
   # 浠诲姟寮�濮嬫椂锛學CS鍥炶皟WMS
   taskStatusFeedbackPath: api/StereoscopicCallBack/TaskExecCallback
   # 浠诲姟瀹屾垚缁撴潫鏃讹紝WCS鍥炶皟WMS
diff --git "a/version/\347\253\213\345\272\223 WMS\346\216\245\345\217\243\346\226\207\346\241\243 2024 0807.docx" "b/version/\347\253\213\345\272\223 WMS\346\216\245\345\217\243\346\226\207\346\241\243 2024 0807.docx"
new file mode 100644
index 0000000..8de18d0
--- /dev/null
+++ "b/version/\347\253\213\345\272\223 WMS\346\216\245\345\217\243\346\226\207\346\241\243 2024 0807.docx"
Binary files differ

--
Gitblit v1.9.1