skyouc
19 小时以前 299cd2a4b79f32f9e1b55997e48bbe7e598c2d3f
添加openApi模块
添加下发任务接口模块
8个文件已修改
14个文件已添加
915 ■■■■ 已修改文件
pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-common/pom.xml 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-framework/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/pom.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/OpenApi.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/RestTemplateConfig.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/WmsRcsController.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/CommonResponse.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/RcsConstant.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/RcsPubTaskParams.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/LocStasEnum.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/enums/TaskTypeEnum.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/WmsRcsService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/resources/application-dev.yml 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/resources/application-prod.yml 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/resources/application.yml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/pom.xml 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/common/config/SwaggerConfig.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/application-dev.yml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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: