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> 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, 用于文档转pdf实现在线预览 --> <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> 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> rsf-open-api/pom.xml
New file @@ -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> rsf-open-api/src/main/java/com/vincent/rsf/openApi/OpenApi.java
New file @@ -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); } } rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/RestTemplateConfig.java
New file @@ -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: 初始化RestTemplage * @version 1.0 */ @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(); } } rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java
New file @@ -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(); } } rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/CommonResponse.java
New file @@ -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; } rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/RcsConstant.java
New file @@ -0,0 +1,7 @@ package com.vincent.rsf.openApi.entity.constant; public class RcsConstant { public static String pubTask = "/api/open/bus/submit"; } rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/RcsPubTaskParams.java
New file @@ -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; } rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/LocStasEnum.java
New file @@ -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; } rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/TaskTypeEnum.java
New file @@ -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; } rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsRcsService.java
New file @@ -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(); } rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java
New file @@ -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); } } rsf-open-api/src/main/resources/application-dev.yml
New file @@ -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单(默认:是),为『否』则开启PO单手动生成ASN单功能 flagAutoAsn: false #质检功能 是否校验上架(默认:是),是否校验收货(默认:否) inspect: #判断是后检验合格后,才允许上架 flagAvailable: true #判断是否校验合格后,才允许收货 flagReceiving: false rsf-open-api/src/main/resources/application-prod.yml
New file @@ -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 rsf-open-api/src/main/resources/application.yml
New file @@ -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@ 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, 用于文档转pdf实现在线预览 --> <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> 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; } 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(); } } 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(); 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: