From be322af3013501b822e4dab60ca348cc3db8bcbc Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期日, 21 十二月 2025 18:51:52 +0800
Subject: [PATCH] 济南二机床wcs功能调试完善

---
 src/main/java/com/zy/controller/MonitorController.java   |   47 ++-
 src/main/java/com/zy/service/RcsService.java             |   16 +
 src/main/java/com/zy/controller/SiteController.java      |    2 
 src/main/java/com/zy/service/impl/ApiLogServiceImpl.java |   51 +++
 src/main/java/com/zy/entity/RcsReporterTask.java         |   18 +
 src/main/java/com/zy/enums/RcsRetMethodEnum.java         |   38 ++
 src/main/java/com/zy/controller/RcsController.java       |   30 ++
 src/main/java/com/zy/core/ServerBootstrap.java           |    6 
 src/main/java/com/zy/service/ApiLogService.java          |   12 
 src/main/java/com/zy/entity/ApiLog.java                  |  198 +++++++++++++++
 src/main/java/com/zy/service/impl/RcsServiceImpl.java    |  191 ++++++++++++++
 src/main/resources/mapper/ApiLogMapper.xml               |   32 ++
 src/main/java/com/zy/mapper/ApiLogMapper.java            |   14 +
 src/main/java/com/zy/core/thread/SiemensDevpThread.java  |    6 
 src/main/java/com/zy/entity/RcsReturn.java               |   20 +
 src/main/resources/application.yml                       |   70 -----
 16 files changed, 660 insertions(+), 91 deletions(-)

diff --git a/src/main/java/com/zy/controller/MonitorController.java b/src/main/java/com/zy/controller/MonitorController.java
index e566421..532e1ae 100644
--- a/src/main/java/com/zy/controller/MonitorController.java
+++ b/src/main/java/com/zy/controller/MonitorController.java
@@ -75,13 +75,16 @@
      * 鑾峰彇鍏朵粬淇℃伅
      */
     @GetMapping("/other")
-    public R monitorOther(@RequestParam("crnId") Integer crnId, @RequestParam("ledId") Integer sta) {
+    public R monitorOther(@RequestParam("crnId") Integer crnId, @RequestParam("ledId") String ledIdString) {
         Integer ledId = 0;
-        for (LedSlave led : slaveProperties.getLed()) {
-            for (Integer staNo : led.getStaArr()) {
-                if (staNo.equals(sta)) {
-                    ledId = led.getId();
-                    break;
+        String[] ledIds = ledIdString.split(",");
+        for (String id : ledIds) {
+            for (LedSlave led : slaveProperties.getLed()) {
+                for (Integer staNo : led.getStaArr()) {
+                    if (staNo.equals(Integer.parseInt(id))) {
+                        ledId = led.getId();
+                        break;
+                    }
                 }
             }
         }
@@ -261,15 +264,18 @@
      * 鑾峰彇鍏朵粬淇℃伅
      */
     @GetMapping("/led")
-    public R monitorLed(@RequestParam("ledId") Integer ledId) {
+    public R monitorLed(@RequestParam("ledId") String ledIdString) {
+        String[] ledIds = ledIdString.split(",");
         String ledContent = "";
         List<LedCommand> commandList = null;
-        for (LedSlave slave : slaveProperties.getLed()) {
-            if (slave.getStaArr().contains(ledId)) {
-                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
-                if (null != ledThread) {
-                    ledContent = ledThread.getStringBuffer().toString();
-                    commandList = ledThread.getCommandList();
+        for(String ledId: ledIds) {
+            for (LedSlave slave : slaveProperties.getLed()) {
+                if (slave.getStaArr().contains(Integer.parseInt(ledId))) {
+                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
+                    if (null != ledThread) {
+                        ledContent = ledThread.getStringBuffer().toString();
+                        commandList = ledThread.getCommandList();
+                    }
                 }
             }
         }
@@ -280,13 +286,16 @@
      * 寮傚父閫氱煡
      */
     @GetMapping("/led/error")
-    public R monitorLedError(@RequestParam("ledId") Integer ledId) {
+    public R monitorLedError(@RequestParam("ledId") String ledIdString) {
         String errorMsg = "";
-        for (LedSlave slave : slaveProperties.getLed()) {
-            if (slave.getStaArr().contains(ledId)) {
-                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
-                if (null != ledThread) {
-                    errorMsg = ledThread.getErrorMsg().toString();
+        String[] ledIds = ledIdString.split(",");
+        for(String ledId: ledIds) {
+            for (LedSlave slave : slaveProperties.getLed()) {
+                if (slave.getStaArr().contains(Integer.parseInt(ledId))) {
+                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
+                    if (null != ledThread) {
+                        errorMsg = ledThread.getErrorMsg().toString();
+                    }
                 }
             }
         }
diff --git a/src/main/java/com/zy/controller/RcsController.java b/src/main/java/com/zy/controller/RcsController.java
new file mode 100644
index 0000000..a533daa
--- /dev/null
+++ b/src/main/java/com/zy/controller/RcsController.java
@@ -0,0 +1,30 @@
+package com.zy.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zy.common.web.BaseController;
+import com.zy.entity.RcsReporterTask;
+import com.zy.entity.RcsReturn;
+import com.zy.service.RcsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Slf4j
+public class RcsController extends BaseController {
+
+    @Resource
+    private RcsService rcsService;
+
+
+    // 鍙嶉浠诲姟鎵ц缁撴灉
+    @PostMapping("/api/robot/reporter/task")
+    public RcsReturn reporterTask(@RequestBody RcsReporterTask param){
+        log.info("agv浠诲姟鎵ц鍙嶉璇锋眰锛歿}",JSONObject.toJSONString(param));
+        return rcsService.reporterTask(param);
+    }
+
+}
diff --git a/src/main/java/com/zy/controller/SiteController.java b/src/main/java/com/zy/controller/SiteController.java
index 3fe8c23..a4d70c1 100644
--- a/src/main/java/com/zy/controller/SiteController.java
+++ b/src/main/java/com/zy/controller/SiteController.java
@@ -153,7 +153,7 @@
     }
 
     @PostMapping("/detl/update")
-    @ManagerAuth(memo = "淇敼绔欑偣鏁版嵁")
+    @ManagerAuth(memo = "淇敼绔欑偣鏁版嵁",value = ManagerAuth.Auth.NONE)
     public R siteDetlUpdate(@RequestParam Integer siteId,
                             @RequestParam Integer workNo,
                             @RequestParam Short staNo,
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index b0dda94..5b15d24 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -58,9 +58,9 @@
             MessageQueue.init(SlaveType.Crn, crn);
         }
         // 鍒濆鍖朢gv灏忚溅mq
-        for (Slave rgv : slaveProperties.getRgv()) {
-            MessageQueue.init(SlaveType.Rgv, rgv);
-        }
+//        for (Slave rgv : slaveProperties.getRgv()) {
+//            MessageQueue.init(SlaveType.Rgv, rgv);
+//        }
         // 鍒濆鍖栬緭閫佺嚎mq
         for (Slave devp : slaveProperties.getDevp()) {
             MessageQueue.init(SlaveType.Devp, devp);
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 7181d32..304e3aa 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -182,8 +182,8 @@
      */
     private void read() {
 
-        // 绔欑偣淇℃伅
-        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (8*5));
+        // 璇昏揣浣嶄俊鎭弽棣�
+        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNos.size() * 8));
         if (result.IsSuccess) {
             for (int i = 0; i < staNos.size(); i++) {
                 Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
@@ -220,7 +220,7 @@
             return;
         }
 
-        // 鏉$爜鎵弿鍣�
+        // 鏉$爜淇℃伅鍙嶉
         OperateResultExOne<byte[]> barcodeResult = siemensS7Net.Read("DB101.600", (short) (BarcodeList.size() * 10));
         if (barcodeResult.IsSuccess) {
             for (int i = 0; i < BarcodeList.size(); i++) {
diff --git a/src/main/java/com/zy/entity/ApiLog.java b/src/main/java/com/zy/entity/ApiLog.java
new file mode 100644
index 0000000..33c226c
--- /dev/null
+++ b/src/main/java/com/zy/entity/ApiLog.java
@@ -0,0 +1,198 @@
+package com.zy.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("man_api_log")
+public class ApiLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value = "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鏃ュ織缂栧彿
+     */
+    @ApiModelProperty(value = "鏃ュ織缂栧彿")
+    private String uuid;
+
+    /**
+     * 鍚嶇О绌洪棿
+     */
+    @ApiModelProperty(value = "鍚嶇О绌洪棿")
+    private String namespace;
+
+    /**
+     * 鎺ュ彛鍦板潃
+     */
+    @ApiModelProperty(value = "鎺ュ彛鍦板潃")
+    private String url;
+
+    /**
+     * 骞冲彴瀵嗛挜
+     */
+    @ApiModelProperty(value = "骞冲彴瀵嗛挜")
+    private String appkey;
+
+    /**
+     * 鏃堕棿鎴�
+     */
+    @ApiModelProperty(value = "鏃堕棿鎴�")
+    private String timestamp;
+
+    /**
+     * 瀹㈡埛绔疘P
+     */
+    @ApiModelProperty(value = "瀹㈡埛绔疘P")
+    @TableField("client_ip")
+    private String clientIp;
+
+    /**
+     * 璇锋眰鍐呭
+     */
+    @ApiModelProperty(value = "璇锋眰鍐呭")
+    private String request;
+
+    /**
+     * 鍝嶅簲鍐呭
+     */
+    @ApiModelProperty(value = "鍝嶅簲鍐呭")
+    private String response;
+
+    /**
+     * 寮傚父鍐呭
+     */
+    @ApiModelProperty(value = "寮傚父鍐呭")
+    private String err;
+
+    /**
+     * 缁撴灉 1: 鎴愬姛  0: 澶辫触
+     */
+    @ApiModelProperty(value = "缁撴灉 1: 鎴愬姛  0: 澶辫触  ")
+    private Integer result;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤
+     */
+    @ApiModelProperty(value = "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value = "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String memo;
+
+    public ApiLog() {
+    }
+
+    public ApiLog(String uuid, String namespace, String url, String appkey, String timestamp, String clientIp, String request, String response, String err, Integer result, Integer status, Date createTime, Date updateTime, String memo) {
+        this.uuid = uuid;
+        this.namespace = namespace;
+        this.url = url;
+        this.appkey = appkey;
+        this.timestamp = timestamp;
+        this.clientIp = clientIp;
+        this.request = request;
+        this.response = response;
+        this.err = err;
+        this.result = result;
+        this.status = status;
+        this.createTime = createTime;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    ApiLog apiLog = new ApiLog(
+//            null,    // 鏃ュ織缂栧彿
+//            null,    // 鍚嶇О绌洪棿
+//            null,    // 鎺ュ彛鍦板潃
+//            null,    // 骞冲彴瀵嗛挜
+//            null,    // 鏃堕棿鎴�
+//            null,    // 瀹㈡埛绔疘P
+//            null,    // 璇锋眰鍐呭
+//            null,    // 鍝嶅簲鍐呭
+//            null,    // 寮傚父鍐呭
+//            null,    // 缁撴灉
+//            null,    // 鐘舵��
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getResult$() {
+        if (null == this.result) {
+            return null;
+        }
+        switch (this.result) {
+            case 1:
+                return "鎴愬姛";
+            case 0:
+                return "澶辫触";
+            default:
+                return String.valueOf(this.result);
+        }
+    }
+
+    public String getStatus$() {
+        if (null == this.status) {
+            return null;
+        }
+        switch (this.status) {
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateTime$() {
+        if (Cools.isEmpty(this.createTime)) {
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$() {
+        if (Cools.isEmpty(this.updateTime)) {
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/entity/RcsReporterTask.java b/src/main/java/com/zy/entity/RcsReporterTask.java
new file mode 100644
index 0000000..63623c4
--- /dev/null
+++ b/src/main/java/com/zy/entity/RcsReporterTask.java
@@ -0,0 +1,18 @@
+package com.zy.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+// 浠诲姟鎵ц鍙嶉
+@Data
+public class RcsReporterTask {
+
+    // 浠诲姟鍙�
+    private String robotTaskCode;
+    // 褰撳墠鎵ц浠诲姟鐨勬満鍣ㄤ汉鍞竴鏍囪瘑銆�
+    private String singleRobotCode;
+    // 鐩爣璺緞搴忓垪锛�0 璧风偣搴忓彿锛�1 缁堢偣搴忓彿銆�
+    private Integer currentSeq;
+    // 璇︾粏淇℃伅
+    private JSONObject extra;
+}
diff --git a/src/main/java/com/zy/entity/RcsReturn.java b/src/main/java/com/zy/entity/RcsReturn.java
new file mode 100644
index 0000000..e0500f5
--- /dev/null
+++ b/src/main/java/com/zy/entity/RcsReturn.java
@@ -0,0 +1,20 @@
+package com.zy.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+// 娴峰悍杩斿洖
+@Data
+public class RcsReturn {
+
+    // SUCCESS 鎴愬姛
+//    Err_TaskTypeNotSupport 浠诲姟绫诲瀷涓嶆敮鎸�
+//    Err_RobotGroupsNotMatch 鏈哄櫒浜鸿祫婧愮粍缂栧彿涓庝换鍔′笉鍖归厤锛屾棤娉曡皟搴�
+//    Err_RobotCodeNotMatch 鏈哄櫒浜虹紪鍙蜂笌浠诲姟涓嶅尮閰嶏紝鏃犳硶璋冨害
+//    Err_TargetRouteError 浠诲姟璺緞鍙傛暟鏈夎
+    private String code;
+
+    private String message;
+
+    private JSONObject data;
+}
diff --git a/src/main/java/com/zy/enums/RcsRetMethodEnum.java b/src/main/java/com/zy/enums/RcsRetMethodEnum.java
new file mode 100644
index 0000000..07f8409
--- /dev/null
+++ b/src/main/java/com/zy/enums/RcsRetMethodEnum.java
@@ -0,0 +1,38 @@
+package com.zy.enums;
+
+public enum RcsRetMethodEnum {
+
+    TASK_START("start", "浠诲姟寮�濮�"),
+    TASK_END("end", "浠诲姟瀹屾垚"),
+    TASK_OUT_BIN("outbin", "璧板嚭鍌ㄤ綅"),
+
+    APPLY_IN_STATION("applyInStation", "鍏ョ珯璇锋眰"),
+    APPLY_OFF_STATION("applyOutStation", "绂荤珯璇锋眰"),
+    ARRIVE_ON_STATION("arriveOnStation", "鍒扮珯瀹屾垚"),
+    ARRIVE_OFF_STATION("arriveOffStation", "绂荤珯瀹屾垚");
+
+    private String code;
+    private String message;
+
+    RcsRetMethodEnum(String code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public static RcsRetMethodEnum getEnum(String code) {
+        for (RcsRetMethodEnum method : RcsRetMethodEnum.values()) {
+            if (method.getCode().equals(code)) {
+                return method;
+            }
+        }
+        return null;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}
diff --git a/src/main/java/com/zy/mapper/ApiLogMapper.java b/src/main/java/com/zy/mapper/ApiLogMapper.java
new file mode 100644
index 0000000..10a1dd9
--- /dev/null
+++ b/src/main/java/com/zy/mapper/ApiLogMapper.java
@@ -0,0 +1,14 @@
+package com.zy.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.entity.ApiLog;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface ApiLogMapper extends BaseMapper<ApiLog> {
+
+    int clearWeekBefore();
+
+}
diff --git a/src/main/java/com/zy/service/ApiLogService.java b/src/main/java/com/zy/service/ApiLogService.java
new file mode 100644
index 0000000..3adfbc8
--- /dev/null
+++ b/src/main/java/com/zy/service/ApiLogService.java
@@ -0,0 +1,12 @@
+package com.zy.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.entity.ApiLog;
+
+public interface ApiLogService extends IService<ApiLog> {
+
+    void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success);
+
+    boolean clearWeekBefore();
+
+}
diff --git a/src/main/java/com/zy/service/RcsService.java b/src/main/java/com/zy/service/RcsService.java
new file mode 100644
index 0000000..8860e0e
--- /dev/null
+++ b/src/main/java/com/zy/service/RcsService.java
@@ -0,0 +1,16 @@
+package com.zy.service;
+
+import com.zy.entity.RcsReporterTask;
+import com.zy.entity.RcsReturn;
+
+public interface RcsService {
+
+    /**
+     * 2.2.1浠诲姟鎵ц鍥為
+     *
+     * @param rcsReporterTask
+     * @return
+     */
+    RcsReturn reporterTask(RcsReporterTask rcsReporterTask);
+
+}
diff --git a/src/main/java/com/zy/service/impl/ApiLogServiceImpl.java b/src/main/java/com/zy/service/impl/ApiLogServiceImpl.java
new file mode 100644
index 0000000..07a573d
--- /dev/null
+++ b/src/main/java/com/zy/service/impl/ApiLogServiceImpl.java
@@ -0,0 +1,51 @@
+package com.zy.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.SnowflakeIdWorker;
+import com.zy.entity.ApiLog;
+import com.zy.mapper.ApiLogMapper;
+import com.zy.service.ApiLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Slf4j
+@Service("apiLogService")
+public class ApiLogServiceImpl extends ServiceImpl<ApiLogMapper, ApiLog> implements ApiLogService {
+
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+
+    @Async
+    @Override
+    public void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success) {
+        Date now = new Date();
+        ApiLog apiLog = new ApiLog(
+                String.valueOf(snowflakeIdWorker.nextId()),    // 鏃ュ織缂栧彿
+                namespace,    // 鍚嶇О绌洪棿
+                url,    // 鎺ュ彛鍦板潃
+                appkey,    // 骞冲彴瀵嗛挜
+                String.valueOf(now.getTime()),    // 鏃堕棿鎴�
+                ip,    // 瀹㈡埛绔疘P
+                request,    // 璇锋眰鍐呭
+                response,
+                null,    // 寮傚父鍐呭
+                success ? 1 : 0,    // 缁撴灉
+                1,    // 鐘舵��
+                now,    // 娣诲姞鏃堕棿
+                null,    // 淇敼鏃堕棿
+                null    // 澶囨敞
+        );
+        if (!this.insert(apiLog)) {
+            log.error("鎺ュ彛璋冪敤鏃ュ織淇濆瓨澶辫触锛�");
+        }
+    }
+
+    @Override
+    public boolean clearWeekBefore() {
+        return this.baseMapper.clearWeekBefore() > 0;
+    }
+}
diff --git a/src/main/java/com/zy/service/impl/RcsServiceImpl.java b/src/main/java/com/zy/service/impl/RcsServiceImpl.java
new file mode 100644
index 0000000..0b67aef
--- /dev/null
+++ b/src/main/java/com/zy/service/impl/RcsServiceImpl.java
@@ -0,0 +1,191 @@
+package com.zy.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.core.DevpThread;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.DevpSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.entity.RcsReporterTask;
+import com.zy.entity.RcsReturn;
+import com.zy.entity.WrkDetl;
+import com.zy.entity.WrkMast;
+import com.zy.enums.RcsRetMethodEnum;
+import com.zy.service.ApiLogService;
+import com.zy.service.RcsService;
+import com.zy.service.WrkDetlService;
+import com.zy.service.WrkMastService;
+import com.zy.utils.HttpHandler;
+import com.zy.utils.News;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+@Service
+public class RcsServiceImpl implements RcsService {
+
+    @Value("${dj.url}")
+    public String DJ_URL;
+
+    @Resource
+    private WrkMastService wrkMastService;
+
+    @Resource
+    private WrkDetlService wrkDetlService;
+
+    @Resource
+    private SlaveProperties slaveProperties;
+
+    @Resource
+    private ApiLogService apiLogService;
+    /**
+     * 2.2.1浠诲姟鎵ц鍥為
+     * 鍘傚锛氭捣閲忋�佸崕鏅�
+     *
+     * @param rcsReporterTask
+     * @return
+     */
+    public RcsReturn reporterTask(RcsReporterTask rcsReporterTask) {
+
+        RcsReturn rcsReturn = new RcsReturn();
+
+        String robotTaskCode = rcsReporterTask.getRobotTaskCode();
+        String singleRobotCode = rcsReporterTask.getSingleRobotCode();
+        JSONObject values = rcsReporterTask.getExtra().getJSONObject("values");
+        String method = values.getString("method");
+        Date now = new Date();
+
+        try {
+            if (singleRobotCode.equals("14") || singleRobotCode.equals("15")) { // 涓ゅ彴CTU搴撴満鍣ㄤ汉缂栧彿
+                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("task_no", robotTaskCode));
+                if (wrkMast != null) {
+                    Integer ioType = wrkMast.getIoType();
+                    if (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method)) == RcsRetMethodEnum.TASK_END) {
+                        if ((ioType == 101 || ioType == 110 || ioType == 103) && wrkMast.getWrkSts() == 12) {
+                            // 缁欒緭閫佺嚎涓嬪彂鍛戒护
+                            for (DevpSlave devp : slaveProperties.getDevp()) {
+                                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                                Map<Integer, StaProtocol> station = devpThread.getStation();
+                                StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo());
+                                if (staProtocol == null) {
+                                    continue;
+                                } else {
+                                    staProtocol = staProtocol.clone();
+                                }
+                                staProtocol.setWorkNo(wrkMast.getWrkNo());
+                                staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                                boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                                if (result) {
+                                    News.info("RCS缁橶CS鍙嶉end,杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛锛歿}", wrkMast.getWrkNo());
+                                } else {
+                                    rcsReturn.setCode("Err_Internal");
+                                    rcsReturn.setMessage("RCS缁橶CS鍙嶉end,杈撻�佺嚎鍛戒护涓嬪彂澶辫触");
+                                    JSONObject data = new JSONObject();
+                                    data.put("robotTaskCode", robotTaskCode);
+                                    rcsReturn.setData(data);
+                                    return rcsReturn;
+                                }
+                            }
+                            wrkMast.setWrkSts(14L);
+                            wrkMast.setCrnEndTime(now);
+                            wrkMast.setModiTime(now);
+                            wrkMastService.updateById(wrkMast);
+                            // 缁橳MS鍙嶉鍑哄簱璐х墿淇℃伅
+                            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                            if (!wrkDetls.isEmpty()) {
+                                WrkDetl wrkDetl = wrkDetls.get(0);
+                                String orderNo = wrkDetl.getOrderNo();
+                                if (!Cools.isEmpty(orderNo)) {
+                                    // 鏋勯�犺姹傚弬鏁�
+                                    JSONObject jsonObject = new JSONObject();
+                                    jsonObject.put("billType",wrkDetl.getThreeCode());
+                                    jsonObject.put("orderNo", wrkDetl.getOrderNo());
+                                    jsonObject.put("createTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now));
+                                    JSONArray jsonArray = new JSONArray();
+                                    for (WrkDetl detl : wrkDetls) {
+                                        JSONObject object = new JSONObject();
+                                        object.put("itemNo", detl.getMatnr());
+                                        object.put("anfme", detl.getAnfme());
+                                        jsonArray.add(object);
+                                    }
+                                    jsonObject.put("details", jsonArray);
+                                    String url = DJ_URL + "api/OutboundOrder/WmsOutFinish";
+                                    String request = jsonObject.toJSONString();
+                                    String response = "";
+                                    boolean success = false;
+                                    try {
+                                        response = new HttpHandler.Builder()
+                                                .setUri(DJ_URL)
+                                                .setPath("api/OutboundOrder/WmsOutFinish")
+                                                .setJson(request)
+                                                .build()
+                                                .doPost();
+                                        JSONObject responseJson = JSON.parseObject(response);
+                                        if (responseJson.getString("Success").equals("1")) {
+                                            success = true;
+                                            log.info("CTU鍑哄簱鍙嶉end,涓婃姤TMS鎴愬姛,宸ヤ綔鍙凤細{}锛屾槑缁嗭細{}", wrkMast.getWrkNo(), request);
+                                        } else {
+                                            log.error("CTU鍑哄簱鍙嶉end,涓婃姤TMS澶辫触锛�,宸ヤ綔鍙凤細{}锛屾槑缁嗭細{}", wrkMast.getWrkNo(), request);
+                                            log.error("鍑哄簱瀹屾垚涓婃姤TMS澶辫触锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, request, response);
+                                        }
+                                    } catch (Exception e) {
+                                        log.error("鍑哄簱瀹屾垚涓婃姤TMS寮傚父,request:{}",request);
+                                        e.printStackTrace();
+                                    } finally {
+                                        try {
+                                            // 淇濆瓨鎺ュ彛鏃ュ織
+                                            apiLogService.save(
+                                                    "鍑哄簱瀹屾垚涓婃姤TMS",
+                                                    url,
+                                                    null,
+                                                    "127.0.0.1",
+                                                    request,
+                                                    response,
+                                                    success
+                                            );
+                                        } catch (Exception e) {
+                                            log.error("鍏ュ簱淇濆瓨鎺ュ彛鏃ュ織寮傚父", e);
+                                        }
+                                    }
+                                }
+                            }
+                        } else {
+                            log.error("{}ioType{}涓嶅湪end鍙嶉澶勭悊涓�", wrkMast.getWrkNo(), ioType);
+                        }
+                    }
+                }
+            }
+            // 杩斿洖RCS
+            rcsReturn.setCode("SUCCESS");
+            rcsReturn.setMessage("");
+            JSONObject data = new JSONObject();
+            data.put("robotTaskCode", robotTaskCode);
+            rcsReturn.setData(data);
+        } catch (Exception e) {
+            log.error("RCS鍙嶉浠诲姟杩涘害澶勭悊寮傚父 - {}", rcsReporterTask, e);
+            rcsReturn.setCode("Err_Internal");
+            rcsReturn.setMessage("鍐呴儴澶勭悊寮傚父");
+            JSONObject data = new JSONObject();
+            data.put("robotTaskCode", robotTaskCode);
+            rcsReturn.setData(data);
+        }
+
+        return rcsReturn;
+    }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c61bea5..8402316 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -94,7 +94,7 @@
   # 杈撻�佺嚎1
   devp[0]:
     id: 1
-    ip: 172.26.11.42
+    ip: 172.26.11.50
     port: 102
     rack: 0
     slot: 0
@@ -104,96 +104,36 @@
       barcode: ${wcs-slave.barcode[0].id}
       backSta: 103
       led: ${wcs-slave.led[0].id}
-#    # 鍏ュ簱鍙�2
-#    inSta[1]:
-#      staNo: 205
-#      barcode: ${wcs-slave.barcode[2].id}
-#      led: ${wcs-slave.led[2].id}
-#    # 鍏ュ簱鍙�3
-#    inSta[2]:
-#      staNo: 203
-#      barcode: ${wcs-slave.barcode[1].id}
-#      led: ${wcs-slave.led[1].id}
-#      backSta: 204
     # 绌烘澘鍏ュ簱鍙�1
     emptyInSta[0]:
       staNo: 104
       barcode: ${wcs-slave.barcode[0].id}
       backSta: 103
       led: ${wcs-slave.led[0].id}
-    # 绌烘澘鍏ュ簱鍙�2
-#    emptyInSta[1]:
-#      staNo: 205
-#      barcode: ${wcs-slave.barcode[2].id}
-#      led: ${wcs-slave.led[2].id}
-#    # 绌烘澘鍏ュ簱鍙�3
-#    emptyInSta[2]:
-#      staNo: 203
-#      barcode: ${wcs-slave.barcode[1].id}
-#      backSta: 204
-#      led: ${wcs-slave.led[1].id}
     # 鎷f枡鍏ュ簱鍙�1
     pickSta[0]:
       staNo: 104
       barcode: ${wcs-slave.barcode[0].id}
       backSta: 103
       led: ${wcs-slave.led[0].id}
-#    # 鎷f枡鍏ュ簱鍙�2
-#    pickSta[1]:
-#      staNo: 106
-#      barcode: ${wcs-slave.barcode[1].id}
-#      backSta: 105
-#      led: ${wcs-slave.led[2].id}
     # 鍑哄簱鍙�1
     outSta[0]:
       staNo: 101
       led: ${wcs-slave.led[0].id}
-    # 鍑哄簱鍙�2
-#    outSta[1]:
-#      staNo: 205
-#      led: ${wcs-slave.led[2].id}
-#    # 鍑哄簱鍙�3
-#    outSta[2]:
-#      staNo: 202
-#      led: ${wcs-slave.led[1].id}
 
   # 鏉$爜鎵弿浠�1
   barcode[0]:
     id: 1
     ip: 172.26.11.43
     port: 51236
-  # 鏉$爜鎵弿浠�2
-#  barcode[1]:
-#    id: 2
-#    ip: 172.26.11.44
-#    port: 51236
-#  # 鏉$爜鎵弿浠�3
-#  barcode[2]:
-#    id: 3
-#    ip: 172.26.11.45
-#    port: 51236
 
   # LED1
   led[0]:
     id: 1
-    ip: 192.168.5.104
+    ip: 127.0.0.1
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 202
+    staArr: 103,104
     crnId: 1
-  # LED2
-#  led[1]:
-#    id: 2
-#    ip: 192.168.5.105
-#    port: 5005
-#    devpPlcId: ${wcs-slave.devp[0].id}
-#    staArr: 204
-#    crnId: 1
-#  # LED3
-#  led[2]:
-#    id: 3
-#    ip: 192.168.5.106
-#    port: 5005
-#    devpPlcId: ${wcs-slave.devp[0].id}
-#    staArr: 205
-#    crnId: 1
\ No newline at end of file
+dj:
+  url: http://172.26.11.2/
\ No newline at end of file
diff --git a/src/main/resources/mapper/ApiLogMapper.xml b/src/main/resources/mapper/ApiLogMapper.xml
new file mode 100644
index 0000000..922b8f6
--- /dev/null
+++ b/src/main/resources/mapper/ApiLogMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.mapper.ApiLogMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.entity.ApiLog">
+        <id column="id" property="id" />
+        <result column="uuid" property="uuid" />
+        <result column="namespace" property="namespace" />
+        <result column="url" property="url" />
+        <result column="appkey" property="appkey" />
+        <result column="timestamp" property="timestamp" />
+        <result column="client_ip" property="clientIp" />
+        <result column="request" property="request" />
+        <result column="response" property="response" />
+        <result column="err" property="err" />
+        <result column="result" property="result" />
+        <result column="status" property="status" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="memo" property="memo" />
+
+    </resultMap>
+
+    <delete id="clearWeekBefore">
+        delete from man_api_log
+        where 1=1
+        and datediff(week,create_time,getdate()) >= 1
+        and result != 1
+    </delete>
+
+</mapper>

--
Gitblit v1.9.1