From 299cd2a4b79f32f9e1b55997e48bbe7e598c2d3f Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期三, 27 八月 2025 17:31:47 +0800
Subject: [PATCH] 添加openApi模块 添加下发任务接口模块

---
 rsf-server/pom.xml                                                                     |  113 -------
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsRcsService.java          |   17 +
 rsf-framework/pom.xml                                                                  |   24 +
 rsf-common/pom.xml                                                                     |  109 ++++++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/RcsPubTaskParams.java |   48 +++
 rsf-open-api/src/main/resources/application-dev.yml                                    |  102 ++++++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/CommonResponse.java          |   30 +
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java |  119 +++++++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java    |   80 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java      |   20 +
 pom.xml                                                                                |    1 
 rsf-open-api/pom.xml                                                                   |   28 +
 rsf-open-api/src/main/resources/application.yml                                        |   25 +
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/RestTemplateConfig.java      |   20 +
 rsf-open-api/src/main/resources/application-prod.yml                                   |   68 ++++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/LocStasEnum.java              |   26 +
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/TaskTypeEnum.java             |   26 +
 rsf-server/src/main/java/com/vincent/rsf/server/common/config/SwaggerConfig.java       |   17 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/RcsConstant.java    |    7 
 rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java  |   15 
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/OpenApi.java                        |   13 
 rsf-server/src/main/resources/application-dev.yml                                      |    7 
 22 files changed, 798 insertions(+), 117 deletions(-)

diff --git a/pom.xml b/pom.xml
index 4f8f968..722b109 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,6 +20,7 @@
         <module>rsf-common</module>
         <module>rsf-framework</module>
         <module>rsf-server</module>
+        <module>rsf-open-api</module>
     </modules>
 
     <properties>
diff --git a/rsf-common/pom.xml b/rsf-common/pom.xml
index e3d17b7..1409cae 100644
--- a/rsf-common/pom.xml
+++ b/rsf-common/pom.xml
@@ -18,6 +18,7 @@
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <gson.version>2.11.0</gson.version>
         <fastjson.version>1.2.58</fastjson.version>
+        <mysql-driver.version>5.1.47</mysql-driver.version>
     </properties>
 
     <dependencies>
@@ -49,11 +50,119 @@
             <artifactId>validation-api</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.ibeetl</groupId>
+            <artifactId>beetl</artifactId>
+            <version>3.6.1.RELEASE</version>
+        </dependency>
+
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql-driver.version}</version>
+        </dependency>
+
+        <!-- mybatis-plus -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+        <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
             <version>30.1.1-jre</version>
             <scope>compile</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.1.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.poi</groupId>
+                    <artifactId>poi</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+            <version>1.9.19</version>  <!-- 纭繚浣跨敤鏈�鏂扮増鏈� -->
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjweaver</artifactId>
+            <version>1.9.19</version>  <!-- 鐢ㄤ簬缁囧叆鍒囬潰 -->
+        </dependency>
+        <!-- swagger -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <!-- jjwt -->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-impl</artifactId>
+            <version>0.11.2</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-jackson</artifactId>
+            <version>0.11.2</version>
+        </dependency>
+
+        <!-- 鍥惧舰楠岃瘉鐮� -->
+        <dependency>
+            <groupId>com.github.whvcse</groupId>
+            <artifactId>easy-captcha</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+
+        <!-- open office, 鐢ㄤ簬鏂囨。杞琾df瀹炵幇鍦ㄧ嚎棰勮 -->
+        <dependency>
+            <groupId>com.github.livesense</groupId>
+            <artifactId>jodconverter-core</artifactId>
+            <version>1.0.5</version>
+        </dependency>
+
+        <!-- tika, 鐢ㄤ簬FileServer鑾峰彇content-type -->
+        <dependency>
+            <groupId>org.apache.tika</groupId>
+            <artifactId>tika-core</artifactId>
+            <version>2.1.0</version>
+        </dependency>
+
+        <!-- druid -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.2.6</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/rsf-framework/pom.xml b/rsf-framework/pom.xml
index e599113..5d80a0f 100644
--- a/rsf-framework/pom.xml
+++ b/rsf-framework/pom.xml
@@ -28,6 +28,30 @@
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.46</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.6.6</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.83</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/rsf-open-api/pom.xml b/rsf-open-api/pom.xml
new file mode 100644
index 0000000..3136260
--- /dev/null
+++ b/rsf-open-api/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.vincent</groupId>
+        <artifactId>rsf</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>rsf-open-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.vincent</groupId>
+            <artifactId>rsf-common</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/OpenApi.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/OpenApi.java
new file mode 100644
index 0000000..b058da5
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/OpenApi.java
@@ -0,0 +1,13 @@
+package com.vincent.rsf.openApi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
+import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration;
+
+@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, UserDetailsServiceAutoConfiguration.class })
+public class OpenApi {
+    public static void main(String[] args) {
+        SpringApplication.run(OpenApi.class, args);
+    }
+}
\ No newline at end of file
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/RestTemplateConfig.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/RestTemplateConfig.java
new file mode 100644
index 0000000..26c3fd5
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/RestTemplateConfig.java
@@ -0,0 +1,20 @@
+package com.vincent.rsf.openApi.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author Ryan
+ * @date 2025/8/27
+ * @description: 鍒濆鍖朢estTemplage
+ * @version 1.0
+ */
+@Configuration
+public class RestTemplateConfig {
+
+    @Bean
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java
new file mode 100644
index 0000000..db251dd
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java
@@ -0,0 +1,80 @@
+package com.vincent.rsf.openApi.controller;
+
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.openApi.entity.params.RcsPubTaskParams;
+import com.vincent.rsf.openApi.service.WmsRcsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+import java.util.Objects;
+
+@RestController
+@Api("RCS璋冨害浜や簰鎺ュ彛")
+@RequestMapping("/rcs")
+public class WmsRcsController {
+
+    @Autowired
+    private WmsRcsService wmsRcsService;
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: 浠诲姟涓嬪彂
+     * @version 1.0
+     */
+    @ApiOperation("璋冨害浠诲姟涓嬪彂")
+    @PostMapping("/pub/task")
+    public R pubTasks(@RequestBody RcsPubTaskParams params) {
+        if (Objects.isNull(params)) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+       return wmsRcsService.pubTasks(params);
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: 鍙栨秷浠诲姟
+     * @version 1.0
+     */
+    @ApiOperation("鍙栨秷璋冨害浠诲姟")
+    @PostMapping("/cancel/task")
+    public R cancelTasks(@RequestBody Map<String, Object> params) {
+        return wmsRcsService.cancelTasks(params);
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: 浠诲姟鍥炶皟锛岀姸鎬佸洖鍐�
+     * @version 1.0
+     */
+    @ApiOperation("寮傚父浠诲姟鍥炶皟")
+    @PostMapping("/callback/event")
+    public R callBackEvent(@RequestBody Map<String, Object> params) {
+        return wmsRcsService.callBackEvent(params);
+    }
+
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: RCS搴撲綅淇℃伅鍚屾
+     * @version 1.0
+     */
+    @ApiOperation("RCS搴撲綅淇℃伅鍚屾")
+    @PostMapping("/sync/locs")
+    public R syncLocsToWms() {
+         wmsRcsService.syncLocs();
+         return R.ok();
+    }
+
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/CommonResponse.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/CommonResponse.java
new file mode 100644
index 0000000..5d944a9
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/CommonResponse.java
@@ -0,0 +1,30 @@
+package com.vincent.rsf.openApi.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @author Ryan
+ * @date 2025/8/27
+ * @description: 閫氱敤鍝嶅簲缁撴灉
+ * @version 1.0
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "CommonResponse", description = "閫氱敤鍝嶅簲缁撴灉 ")
+public class CommonResponse {
+
+    @ApiModelProperty("鍝嶅簲缂栫爜")
+    private Integer code;
+
+    @ApiModelProperty("鍝嶅簲娑堟伅")
+    private String msg;
+
+    @ApiModelProperty("鍝嶅簲缁撴灉")
+    private Object data;
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/RcsConstant.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/RcsConstant.java
new file mode 100644
index 0000000..fcdb232
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/RcsConstant.java
@@ -0,0 +1,7 @@
+package com.vincent.rsf.openApi.entity.constant;
+
+public class RcsConstant {
+
+    public static String pubTask = "/api/open/bus/submit";
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/RcsPubTaskParams.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/RcsPubTaskParams.java
new file mode 100644
index 0000000..c81580d
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/RcsPubTaskParams.java
@@ -0,0 +1,48 @@
+package com.vincent.rsf.openApi.entity.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "RcsPubTaskParams", description = "涓嬪彂浠诲姟鍙傛暟")
+public class RcsPubTaskParams implements Serializable {
+
+    @ApiModelProperty("鎵规")
+    private String batch;
+
+    @ApiModelProperty("浠诲姟鏄庣粏")
+    private List<TaskParam> taskList;
+}
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "TaskItem", description = "浠诲姟鍒楄〃")
+class TaskParam {
+
+    @ApiModelProperty("浠诲姟绫诲瀷{LOC_TO_LOC: 绉诲簱, LOC_TO_STA: 鍑哄簱, STA_TO_LOC: 鍏ュ簱, STA_TO_STA: 绔欑偣闂存惉杩恾")
+    private String taskType;
+
+    @ApiModelProperty("璧峰搴撲綅")
+    private String oriLoc;
+
+    @ApiModelProperty("璧峰绔欑偣")
+    private String oriSta;
+
+    @ApiModelProperty("鐩爣搴撲綅")
+    private String destLoc;
+
+    @ApiModelProperty("鐩爣绔欑偣")
+    private String destSta;
+
+    @ApiModelProperty("鎵樼洏鐮�")
+    private String zpallet;
+
+    @ApiModelProperty("浼樺厛绾�")
+    private Integer priority;
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/LocStasEnum.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/LocStasEnum.java
new file mode 100644
index 0000000..42a39a4
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/LocStasEnum.java
@@ -0,0 +1,26 @@
+package com.vincent.rsf.openApi.enums;
+
+/**
+ * @author Ryan
+ * @date 2025/8/27
+ * @description: 搴撲綅鐘舵��
+ * @version 1.0
+ */
+public enum LocStasEnum {
+    /**搴撲綅鐘舵��*/
+    LOC_STAS_ENUM_IDLE("IDLE", "绌洪棽"),
+    LOC_STAS_ENUM_STOCK("STOCK", "鍦ㄥ簱"),
+    LOC_STAS_ENUM_PAKIN("PAKIN", "鍏ュ簱棰勭害"),
+    LOC_STAS_ENUM_PAKOUT("PAKOUT", "鍑哄簱棰勭害"),
+    LOC_STAS_ENUM_DISABLED("DISABLED", "绂佺敤"),
+    ;
+
+
+    LocStasEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    private String code;
+    private String desc;
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/TaskTypeEnum.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/TaskTypeEnum.java
new file mode 100644
index 0000000..27e93d9
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/TaskTypeEnum.java
@@ -0,0 +1,26 @@
+package com.vincent.rsf.openApi.enums;
+
+/**
+ * @author Ryan
+ * @date 2025/8/27
+ * @description: 浠诲姟绫诲瀷鏋氫妇
+ * @version 1.0
+ */
+public enum TaskTypeEnum {
+    //浠诲姟绫诲瀷
+    TASK_TYPE_ENUM_TRANSFER("LOC_TO_LOC", "绉诲簱"),
+    TASK_TYPE_ENUM_OUT("LOC_TO_STA", "鍑哄簱"),
+    TASK_TYPE_ENUM_IN("LOC_TO_LOC", "鍏ュ簱"),
+    TASK_TYPE_ENUM_STA("STA_TO_STA", "绔欑偣闂存惉杩�")
+    ;
+
+    TaskTypeEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    private String code;
+
+    private String desc;
+
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsRcsService.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsRcsService.java
new file mode 100644
index 0000000..e96c585
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsRcsService.java
@@ -0,0 +1,17 @@
+package com.vincent.rsf.openApi.service;
+
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.openApi.entity.params.RcsPubTaskParams;
+
+import java.util.Map;
+
+public interface WmsRcsService {
+
+    R pubTasks(RcsPubTaskParams params);
+
+    R cancelTasks(Map<String, Object> params);
+
+    R callBackEvent(Map<String, Object> params);
+
+    void syncLocs();
+}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java
new file mode 100644
index 0000000..37caa2c
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java
@@ -0,0 +1,119 @@
+package com.vincent.rsf.openApi.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.cfg.CoercionAction;
+import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.openApi.entity.CommonResponse;
+import com.vincent.rsf.openApi.entity.constant.RcsConstant;
+import com.vincent.rsf.openApi.entity.params.RcsPubTaskParams;
+import com.vincent.rsf.openApi.service.WmsRcsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+@Slf4j
+@Service("wmsRcsServiceImpl")
+public class WmsRcsServiceImpl implements WmsRcsService {
+
+//    @Autowired
+//    private RemotesInfoProperties.RcsApi rcsApi;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    /**RCS鍩虹閰嶇疆閾炬帴*/
+//    private final String rcsUrl =  rcsApi.getHost() + rcsApi.getPort();
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: 浠诲姟涓嬪彂
+     * @version 1.0
+     */
+    @Override
+    @Transactional(timeout = 60, rollbackFor = Exception.class)
+    public R pubTasks(RcsPubTaskParams params)  {
+        log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", "" + RcsConstant.pubTask, JSONObject.toJSONString(params));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        headers.add("api-version", "v2.0");
+        HttpEntity httpEntity = new HttpEntity(params, headers);
+        ResponseEntity<String> exchange = restTemplate.exchange("rcsUrl" + RcsConstant.pubTask, HttpMethod.POST, httpEntity, String.class);
+        log.info("浠诲姟涓嬪彂鍚庯紝鍝嶅簲缁撴灉锛� {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");
+        } else {
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.coercionConfigDefaults()
+                    .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+            try {
+                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+                if (result.getCode() == 200) {
+                    return R.ok(result);
+                } else {
+                    throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");
+                }
+            } catch (JsonProcessingException e) {
+                throw new CoolException(e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: 鍙栨秷浠诲姟
+     * @version 1.0
+     */
+    @Override
+    public R cancelTasks(Map<String, Object> params) {
+        return null;
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: RCS鐘舵�佸洖鍐�
+     * @version 1.0
+     */
+    @Override
+    public R callBackEvent(Map<String, Object> params) {
+        return null;
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: 搴撲綅淇℃伅鍚屾
+     * @version 1.0
+     */
+    @Override
+    public void syncLocs() {
+        ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);
+        scheduled.scheduleWithFixedDelay(new Runnable() {
+            int current = 1;
+            @Override
+            public void run() {
+                log.info("<UNK>{}<UNK>", current);
+                current ++;
+                log.info("{}", current);
+            }
+        }, 3, 3, TimeUnit.SECONDS);
+    }
+}
diff --git a/rsf-open-api/src/main/resources/application-dev.yml b/rsf-open-api/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..85e4cc3
--- /dev/null
+++ b/rsf-open-api/src/main/resources/application-dev.yml
@@ -0,0 +1,102 @@
+server:
+  port: 8081
+  servlet:
+    context-path: /@pom.artifactId@
+spring:
+  application:
+    name: @pom.artifactId@
+  mvc:
+    static-path-pattern: /**
+    path match:
+      matching-strategy: ANT_PATH_MATCHER
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+#    url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+#    username: rsf
+    username: root
+    url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    password: 34821015
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      initial-size: 5
+      min-idle: 5
+      max-active: 20
+      max-wait: 30000
+      time-between-eviction-runs-millis: 60000
+      min-evictable-idle-time-millis: 300000
+      test-while-idle: true
+      test-on-borrow: true
+      test-on-return: false
+      remove-abandoned: true
+      remove-abandoned-timeout: 1800
+      #pool-prepared-statements: false
+      #max-pool-prepared-statement-per-connection-size: 20
+      filters: stat, wall
+      validation-query: SELECT 'x'
+      aop-patterns: com.zy.*.*.service.*
+      stat-view-servlet:
+        url-pattern: /druid/*
+        reset-enable: true
+        login-username: admin
+        login-password: admin
+        enabled: true
+  servlet:
+    multipart:
+      maxFileSize: 100MB
+      maxRequestSize: 100MB
+  jmx:
+    enabled: false
+  mail:
+    from: t1731253606@163.com
+    host: smtp.163.com
+    port: 465
+    username: t1731253606@163.com
+    password: FCqETysH8TfuPqkY
+    properties:
+      mail:
+        smtp:
+          auth: true
+          ssl: true
+          connectiontimeout: 5000
+          timeout: 5000
+          socketFactory:
+            class: javax.net.ssl.SSLSocketFactory
+redis:
+  host: 127.0.0.1
+  password: xltys1995
+  port: 6379
+  timeout: 5000
+  index: 15
+
+#骞冲彴鎺ュ彛淇℃伅閰嶇疆(濡傦細ERP, QMS, WCS绛�)
+platform:
+  #浼佷笟ERP骞冲彴
+  erp:
+    #localhost
+    host: http://127.0.0.1
+    #绔彛鍙�
+    port: 8080
+    #鎺ュ搧閾炬帴鍓嶇紑
+    pre-path: rsf-server
+    #鎺ュ彛鏄庣粏
+    api:
+      #璐ㄦ涓婃姤鎺ュ彛
+      notify-inspect: /report/inspect
+  rcs:
+    #閾炬帴
+    host: http://192.168.4.84
+    #绔彛
+    port: 8088
+
+#浠撳簱鍔熻兘鍙傛暟閰嶇疆
+stock:
+  #鏄惁鍏佽鎵撳嵃璐х墿鏍囩锛� 榛樿鍏佽鎵撳嵃锛屼篃鍙敱渚涘簲鍟嗘彁渚涙爣绛�
+  flagPrinter: false
+  #鏄惁鑷姩鐢熸垚ASN鍗曪紙榛樿锛氭槸锛夛紝涓恒�庡惁銆忓垯寮�鍚疨O鍗曟墜鍔ㄧ敓鎴怉SN鍗曞姛鑳�
+  flagAutoAsn: false
+  #璐ㄦ鍔熻兘 鏄惁鏍¢獙涓婃灦锛堥粯璁わ細鏄級锛屾槸鍚︽牎楠屾敹璐э紙榛樿锛氬惁锛�
+  inspect:
+    #鍒ゆ柇鏄悗妫�楠屽悎鏍煎悗锛屾墠鍏佽涓婃灦
+    flagAvailable: true
+    #鍒ゆ柇鏄惁鏍¢獙鍚堟牸鍚庯紝鎵嶅厑璁告敹璐�
+    flagReceiving: false
\ No newline at end of file
diff --git a/rsf-open-api/src/main/resources/application-prod.yml b/rsf-open-api/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..1c91565
--- /dev/null
+++ b/rsf-open-api/src/main/resources/application-prod.yml
@@ -0,0 +1,68 @@
+server:
+  port: 8080
+  servlet:
+    context-path: /@pom.artifactId@
+
+spring:
+  application:
+    name: @pom.artifactId@
+  mvc:
+    static-path-pattern: /**
+  datasource:
+    driver-class-name: com.mysql.jdbc.Driver
+    url: jdbc:mysql://192.168.4.24:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    username: root
+    password: 34821015
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      initial-size: 5
+      min-idle: 5
+      max-active: 20
+      max-wait: 30000
+      time-between-eviction-runs-millis: 60000
+      min-evictable-idle-time-millis: 300000
+      test-while-idle: true
+      test-on-borrow: true
+      test-on-return: false
+      remove-abandoned: true
+      remove-abandoned-timeout: 1800
+      #pool-prepared-statements: false
+      #max-pool-prepared-statement-per-connection-size: 20
+      filters: stat, wall
+      validation-query: SELECT 'x'
+      aop-patterns: com.zy.*.*.service.*
+      stat-view-servlet:
+        url-pattern: /druid/*
+        reset-enable: true
+        login-username: admin
+        login-password: admin
+        enabled: true
+  servlet:
+    multipart:
+      maxFileSize: 100MB
+      maxRequestSize: 100MB
+  jmx:
+    enabled: false
+  mail:
+    from: whatsflow.team@gmail.com
+    host: smtp.gmail.com
+    port: 587
+    username: whatsflow.team@gmail.com
+    password: elpc vfwk twnu uoyy
+    properties:
+      mail:
+        smtp:
+          auth: true
+          starttls.enable: true
+          connectiontimeout: 5000
+          timeout: 5000
+
+redis:
+  host: 127.0.0.1
+  password: xltys1995
+  port: 6379
+  timeout: 5000
+  index: 11
+
+stock:
+  flagAvailable: true
diff --git a/rsf-open-api/src/main/resources/application.yml b/rsf-open-api/src/main/resources/application.yml
new file mode 100644
index 0000000..4e2b57e
--- /dev/null
+++ b/rsf-open-api/src/main/resources/application.yml
@@ -0,0 +1,25 @@
+spring:
+  profiles:
+    active: dev
+
+mybatis-plus:
+  mapper-locations: classpath:mapper/*/*.xml
+  #  global-config:
+  #    field-strategy: 0
+  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    map-underscore-to-camel-case: true
+    cache-enabled: true
+    call-setters-on-nulls: true
+  global-config:
+    :banner: false
+    db-config:
+      id-type: auto
+      logic-delete-value: 1
+      logic-not-delete-value: 0
+super:
+  pwd: xltys1995
+
+logging:
+  file:
+    path: logs/@pom.artifactId@
diff --git a/rsf-server/pom.xml b/rsf-server/pom.xml
index 86be1e6..e1848c5 100644
--- a/rsf-server/pom.xml
+++ b/rsf-server/pom.xml
@@ -19,7 +19,6 @@
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 		<mysql-driver.version>5.1.47</mysql-driver.version>
 	</properties>
-
 	<dependencies>
 		<dependency>
 			<groupId>com.vincent</groupId>
@@ -30,121 +29,9 @@
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>
 		</dependency>
-
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-security</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-mail</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-websocket</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>com.ibeetl</groupId>
-			<artifactId>beetl</artifactId>
-			<version>3.6.1.RELEASE</version>
-		</dependency>
-
-		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-			<version>${mysql-driver.version}</version>
-		</dependency>
-
-		<!-- mybatis-plus -->
-		<dependency>
-			<groupId>com.baomidou</groupId>
-			<artifactId>mybatis-plus-boot-starter</artifactId>
-			<version>3.4.1</version>
-		</dependency>
-		<dependency>
-			<groupId>com.baomidou</groupId>
-			<artifactId>mybatis-plus-generator</artifactId>
-			<version>3.4.1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi</artifactId>
-			<version>4.1.0</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.apache.poi</groupId>
-					<artifactId>poi</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>cn.afterturn</groupId>
-			<artifactId>easypoi-spring-boot-starter</artifactId>
-			<version>4.1.0</version>
-		</dependency>
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjrt</artifactId>
-			<version>1.9.19</version>  <!-- 纭繚浣跨敤鏈�鏂扮増鏈� -->
-		</dependency>
-		<dependency>
-			<groupId>org.aspectj</groupId>
-			<artifactId>aspectjweaver</artifactId>
-			<version>1.9.19</version>  <!-- 鐢ㄤ簬缁囧叆鍒囬潰 -->
-		</dependency>
-
-		<!-- swagger -->
-		<dependency>
-			<groupId>io.springfox</groupId>
-			<artifactId>springfox-boot-starter</artifactId>
-			<version>3.0.0</version>
-		</dependency>
-		<dependency>
-			<groupId>com.github.xiaoymin</groupId>
-			<artifactId>knife4j-spring-boot-starter</artifactId>
-			<version>3.0.2</version>
-		</dependency>
-		<!-- jjwt -->
-		<dependency>
-			<groupId>io.jsonwebtoken</groupId>
-			<artifactId>jjwt-impl</artifactId>
-			<version>0.11.2</version>
-		</dependency>
-		<dependency>
-			<groupId>io.jsonwebtoken</groupId>
-			<artifactId>jjwt-jackson</artifactId>
-			<version>0.11.2</version>
-		</dependency>
-
-		<!-- 鍥惧舰楠岃瘉鐮� -->
-		<dependency>
-			<groupId>com.github.whvcse</groupId>
-			<artifactId>easy-captcha</artifactId>
-			<version>1.6.2</version>
-		</dependency>
-
-		<!-- open office, 鐢ㄤ簬鏂囨。杞琾df瀹炵幇鍦ㄧ嚎棰勮 -->
-		<dependency>
-			<groupId>com.github.livesense</groupId>
-			<artifactId>jodconverter-core</artifactId>
-			<version>1.0.5</version>
-		</dependency>
-
-		<!-- tika, 鐢ㄤ簬FileServer鑾峰彇content-type -->
-		<dependency>
-			<groupId>org.apache.tika</groupId>
-			<artifactId>tika-core</artifactId>
-			<version>2.1.0</version>
-		</dependency>
-
-		<!-- druid -->
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>druid-spring-boot-starter</artifactId>
-			<version>1.2.6</version>
 		</dependency>
     </dependencies>
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java
index b8fae24..18d5c2c 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java
@@ -40,6 +40,21 @@
         private String notifyInspect;
     }
 
+    @Data
+    @Configuration
+    @ConfigurationProperties(prefix = "platform.rcs")
+    public class RcsApi {
+        /**
+         * rcs璋冪敤璺緞
+         */
+        private String host;
+
+        /**rcs璋冪敤绔彛**/
+        private String port;
+
+    }
+
+
     public String getBaseUrl() {
         return  this.host + ":" + this.port + "/" + this.prePath;
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
index 9d7c18f..dc0352f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
@@ -4,6 +4,7 @@
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
 import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
+import com.vincent.rsf.server.common.annotation.OperationLog;
 import com.vincent.rsf.server.manager.enums.TaskType;
 import com.vincent.rsf.server.api.service.WcsService;
 import com.vincent.rsf.server.system.controller.BaseController;
@@ -22,6 +23,9 @@
 
     @Autowired
     private WcsService wcsService;
+
+//    @Autowired
+//    private WmsRcsService wmsRcsService;
 
     @ApiOperation(value = "wcs鐢熸垚鍏ュ簱浠诲姟鎺ュ彛")
     @PostMapping("/create/in/task")
@@ -81,4 +85,20 @@
 
         return R.ok();
     }
+
+
+    /**
+     * @author Ryan
+     * @date 2025/8/27
+     * @description: RCS搴撲綅淇℃伅鍚屾
+     * @version 1.0
+     */
+    @ApiOperation("RCS搴撲綅淇℃伅鍚屾")
+    @OperationLog("RCS搴撲綅淇℃伅鍚屾")
+    @PostMapping("/sync/locs")
+    public R syncLocsToWms() {
+
+        return R.ok();
+//        return wmsRcsService.syncLocs();
+    }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/SwaggerConfig.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/SwaggerConfig.java
index 4dc8b27..e0bcb41 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/SwaggerConfig.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/SwaggerConfig.java
@@ -42,7 +42,6 @@
                 .select()
                 //apis锛� 娣诲姞swagger鎺ュ彛鎻愬彇鑼冨洿
                 .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
-//                .apis(RequestHandlerSelectors.basePackage("com.vincent.rsf.server.manager.controller"))
                 .paths(PathSelectors.any())
                 .build();
 
@@ -56,9 +55,21 @@
                 .enable("dev".equals(active))
                 .groupName("ERP鎺ュ彛瀵规帴")
                 .select()
-                //apis锛� 娣诲姞swagger鎺ュ彛鎻愬彇鑼冨洿
                 .apis(RequestHandlerSelectors.basePackage("com.vincent.rsf.server.api.controller.erp"))
-                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .paths(PathSelectors.any())
+                .build();
+
+        return docket;
+    }
+
+    @Bean
+    public Docket rcsDocket() {
+        Docket docket = new Docket(DocumentationType.OAS_30)
+                .apiInfo(apiInfo())
+                .enable("dev".equals(active))
+                .groupName("RCS浠诲姟璋冨害")
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.vincent.rsf.openApi.controller"))
                 .paths(PathSelectors.any())
                 .build();
 
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 9c4faaf..c783677 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -10,7 +10,7 @@
     path match:
       matching-strategy: ANT_PATH_MATCHER
   datasource:
-    driver-class-name: com.mysql.jdbc.Driver
+    driver-class-name: com.mysql.cj.jdbc.Driver
 #    url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
 #    username: rsf
     username: root
@@ -82,6 +82,11 @@
     api:
       #璐ㄦ涓婃姤鎺ュ彛
       notify-inspect: /report/inspect
+  rcs:
+    #閾炬帴
+    host: http://192.168.4.84
+    #绔彛
+    port: 8088
 
 #浠撳簱鍔熻兘鍙傛暟閰嶇疆
 stock:

--
Gitblit v1.9.1