supeng 18 uur geleden
bovenliggende
commit
87bbbcd7d3
50 gewijzigde bestanden met toevoegingen van 1090 en 376 verwijderingen
  1. 3 10
      pom.xml
  2. 2 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/base/Constant.java
  3. 0 35
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/DataStatusEnum.java
  4. 64 24
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/ExceptionEnum.java
  5. 21 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/IsDeleteEnum.java
  6. 26 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/SubTaskStatusEnum.java
  7. 22 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/SubTaskTypeEnum.java
  8. 27 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/TaskStatusEnum.java
  9. 22 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/TaskTypeEnum.java
  10. 35 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/config/MybatisPlusConfig.java
  11. 0 33
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/generator/MybatisGeneratorMain.java
  12. 10 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdPromptTemplateMapper.java
  13. 10 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdStrategyMapper.java
  14. 10 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdSubTaskMapper.java
  15. 10 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdSubTaskRawResultMapper.java
  16. 10 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdSubTaskResultItemMapper.java
  17. 10 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdTaskMapper.java
  18. 10 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdTaskResultMapper.java
  19. 37 51
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/handle/GlobalExceptionHandle.java
  20. 0 160
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/dto/BaseInfoDTO.java
  21. 0 1
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/dto/PageDTO.java
  22. 28 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/param/TaskCreateParam.java
  23. 47 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdPromptTemplate.java
  24. 49 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdStrategy.java
  25. 63 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdSubTask.java
  26. 43 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdSubTaskRawResult.java
  27. 56 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdSubTaskResultItem.java
  28. 91 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdTask.java
  29. 42 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdTaskResult.java
  30. 8 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/OpenRouterService.java
  31. 13 2
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/TaskService.java
  32. 14 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/impl/OpenRouterServiceImpl.java
  33. 38 1
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/impl/TaskServiceImpl.java
  34. 107 0
      supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/util/IdGeneratorUtil.java
  35. 9 3
      supply-demand-engine-core/src/main/resources/mybatis-generator-config.xml
  36. 1 1
      supply-demand-engine-job/src/main/java/com/tzld/piaoquan/supply/demand/engine/Application.java
  37. 94 0
      supply-demand-engine-job/src/main/java/com/tzld/piaoquan/supply/demand/engine/job/TaskJob.java
  38. 6 6
      supply-demand-engine-job/src/main/resources/application-dev.yml
  39. 3 3
      supply-demand-engine-job/src/main/resources/application-pre.yml
  40. 3 3
      supply-demand-engine-job/src/main/resources/application-prod.yml
  41. 3 3
      supply-demand-engine-job/src/main/resources/application-stress.yml
  42. 3 3
      supply-demand-engine-job/src/main/resources/application-test.yml
  43. 1 1
      supply-demand-engine-service/src/main/java/com/tzld/piaoquan/supply/demand/engine/Application.java
  44. 3 6
      supply-demand-engine-service/src/main/java/com/tzld/piaoquan/supply/demand/engine/controller/TaskController.java
  45. 6 6
      supply-demand-engine-service/src/main/resources/application-dev.yml
  46. 6 6
      supply-demand-engine-service/src/main/resources/application-pre.yml
  47. 6 6
      supply-demand-engine-service/src/main/resources/application-prod.yml
  48. 6 6
      supply-demand-engine-service/src/main/resources/application-stress.yml
  49. 6 6
      supply-demand-engine-service/src/main/resources/application-test.yml
  50. 6 0
      supply-demand-engine-service/src/main/resources/application.yml

+ 3 - 10
pom.xml

@@ -94,16 +94,9 @@
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.mybatis.spring.boot</groupId>
-            <artifactId>mybatis-spring-boot-starter</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.mybatis.generator</groupId>
-            <artifactId>mybatis-generator-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.github.pagehelper</groupId>
-            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.6</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 2 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/base/Constant.java

@@ -27,4 +27,6 @@ public class Constant {
      * 接口请求开始时间戳
      */
     public static final String REQUEST_START_TIME = "request_start_time";
+
+    public static final String SYSTEM_USER = "system";
 }

+ 0 - 35
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/DataStatusEnum.java

@@ -1,35 +0,0 @@
-package com.tzld.piaoquan.supply.demand.engine.common.enums;
-
-/**
- * 数据状态
- *
- * @author supeng
- * @Date 2020/7/31
- */
-public enum DataStatusEnum {
-    INVALID(0, "无效"),
-    VALID(1, "有效");
-    private Integer value;
-    private String desc;
-
-    DataStatusEnum(int value, String desc) {
-        this.value = value;
-        this.desc = desc;
-    }
-
-    public Integer getValue() {
-        return value;
-    }
-
-    public void setValue(Integer value) {
-        this.value = value;
-    }
-
-    public String getDesc() {
-        return desc;
-    }
-
-    public void setDesc(String desc) {
-        this.desc = desc;
-    }
-}

+ 64 - 24
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/ExceptionEnum.java

@@ -1,40 +1,80 @@
 package com.tzld.piaoquan.supply.demand.engine.common.enums;
 
+import lombok.Getter;
+
 /**
  * 异常
  *
  * @author supeng
- * @date 2020/08/31
  */
+@Getter
 public enum ExceptionEnum {
 
     SUCCESS(0, "成功"),
-    SYSTEM_ERROR(1, "系统错误"),
-    PARAMS_INVALID(2, "参数错误"),
-    DATA_NOT_EXIST(3, "数据不存在"),
-    DATA_ERROR(4, "数据错误"),
-    EXIST_RELATED_DATA(5, "存在关联数据"),
-    DATA_EXIST(6, "数据已存在"),
-    ILLEGAL_OPERATION (7, "非法操作"),
-    CONFIG_ERROR (8, "配置异常"),
-    FLOW_POOL_AUTO_ENTER_ERROR (9, "只能同时一个流量池打开【自动入池】开关"),
-    FLOW_POOL_1_AUTO_ENTER_HOLD (10, "流量池【id=1】,作为尾号流量池的开关切换策略,需要保持【自动入池】状态"),
-    FLOW_POOL_AUTO_ENTER_EXCEPT_SUPPLY (11, "除了供给池,只能同时一个流量池打开【自动入池】开关"),
-    ;
-
-    private int code;
-    private String msg;
-
-    public int getCode() {
-        return code;
-    }
 
+    // ========================= 1000 系统/平台错误 =========================
+    SYSTEM_ERROR(1000, "系统错误"),
+    CONFIG_ERROR(1001, "配置异常"),
+    SERVICE_UNAVAILABLE(1002, "服务不可用"),
+    DATABASE_CONNECTION_ERROR(1003, "数据库连接失败"),
+    CACHE_ERROR(1004, "缓存错误"),
+    UNKNOWN_ERROR(1005, "未知系统异常"),
 
-    public String getMsg() {
-        return msg;
-    }
+    // ========================= 2000 认证/权限类 =========================
+    UNAUTHORIZED(2000, "未认证或认证失败"),
+    FORBIDDEN(2001, "无权限"),
+    TOKEN_EXPIRED(2002, "令牌过期"),
+    ACCOUNT_LOCKED(2003, "账号锁定"),
+    SESSION_INVALID(2004, "会话失效"),
+
+    // ========================= 3000 参数/校验类 =========================
+    PARAMS_INVALID(3000, "参数无效"),
+    MISSING_PARAM(3001, "缺少参数"),
+    TYPE_MISMATCH(3002, "参数类型不匹配"),
+    FORMAT_INVALID(3003, "参数格式错误"),
+    VALUE_OUT_OF_RANGE(3004, "参数值超出范围"),
+
+    // ========================= 4000 数据/资源类 =========================
+    DATA_NOT_EXIST(4000, "数据不存在"),
+    DATA_ERROR(4001, "数据错误"),
+    DATA_EXIST(4002, "数据已存在"),
+    EXIST_RELATED_DATA(4003, "存在关联数据"),
+    RESOURCE_NOT_FOUND(4004, "资源未找到"),
+    DATA_CONFLICT(4005, "数据冲突"),
+    DATA_INTEGRITY_VIOLATION(4006, "数据完整性异常"),
+
+    // ========================= 5000 外部依赖/网络类 =========================
+    EXTERNAL_SERVICE_ERROR(5000, "外部服务异常"),
+    EXTERNAL_SERVICE_TIMEOUT(5001, "外部服务超时"),
+    NETWORK_ERROR(5002, "网络错误"),
+    HTTP_REQUEST_ERROR(5003, "HTTP请求异常"),
+
+    // ========================= 6000 业务规则/操作类 =========================
+    ILLEGAL_OPERATION(6000, "非法操作"),
+    BUSINESS_RULE_VIOLATION(6001, "业务规则冲突"),
+    FEATURE_FLAG_CONFLICT(6002, "功能开关冲突"),
+    FLOW_POOL_AUTO_ENTER_CONFLICT(6003, "只能同时一个流量池打开自动入池开关"),
+    FLOW_POOL_TAIL_POLICY_HOLD(6004, "流量池作为尾号流量池时必须保持自动入池"),
+    FLOW_POOL_AUTO_ENTER_EXCEPT_SUPPLY(6005, "供给池以外只能同时一个流量池打开自动入池开关"),
+
+    // ========================= 7000 并发/事务类 =========================
+    CONCURRENT_MODIFICATION(7000, "并发修改冲突"),
+    LOCK_ACQUIRE_FAILED(7001, "锁获取失败"),
+    TRANSACTION_FAILED(7002, "事务失败"),
+
+    // ========================= 8000 限流/风控类 =========================
+    RATE_LIMITED(8000, "请求被限流"),
+    QUOTA_EXCEEDED(8001, "配额超限"),
+    RISK_BLOCKED(8002, "风控拦截"),
+
+    // ========================= 9000 灰度/实验类 =========================
+    FEATURE_UNAVAILABLE_IN_GRAY(9000, "灰度功能不可用"),
+    EXPERIMENTAL_FEATURE_DISABLED(9001, "实验功能禁用");
+
+    private final Integer code;
+    private final String msg;
 
-    ExceptionEnum(int code, String msg) {
+    ExceptionEnum(Integer code, String msg) {
         this.code = code;
         this.msg = msg;
     }

+ 21 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/IsDeleteEnum.java

@@ -0,0 +1,21 @@
+package com.tzld.piaoquan.supply.demand.engine.common.enums;
+
+import lombok.Getter;
+
+/**
+ * 逻辑删除
+ *
+ * @author supeng
+ */
+@Getter
+public enum IsDeleteEnum {
+    NORMAL(0, "正常"),
+    DELETED(1, "已删除");
+    private final Integer value;
+    private final String desc;
+
+    IsDeleteEnum(int value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}

+ 26 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/SubTaskStatusEnum.java

@@ -0,0 +1,26 @@
+package com.tzld.piaoquan.supply.demand.engine.common.enums;
+
+import lombok.Getter;
+
+/**
+ * 子任务状态
+ *
+ * @author supeng
+ */
+@Getter
+public enum SubTaskStatusEnum {
+    INIT(0, "初始化"),
+    SUBMITTED(1, "已提交"),
+    RUNNING(2, "运行中"),
+    SUCCESS(3, "成功"),
+    FAILED(4, "失败"),
+    TIMEOUT(5, "超时");
+
+    private final Integer value;
+    private final String desc;
+
+    SubTaskStatusEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}

+ 22 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/SubTaskTypeEnum.java

@@ -0,0 +1,22 @@
+package com.tzld.piaoquan.supply.demand.engine.common.enums;
+
+import lombok.Getter;
+
+/**
+ * 子任务类型
+ *
+ * @author supeng
+ */
+@Getter
+public enum SubTaskTypeEnum {
+    DECONSTRUCT(1, "解构"),
+    CLUSTER(2, "聚类");
+
+    private final Integer value;
+    private final String desc;
+
+    SubTaskTypeEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}

+ 27 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/TaskStatusEnum.java

@@ -0,0 +1,27 @@
+package com.tzld.piaoquan.supply.demand.engine.common.enums;
+
+import lombok.Getter;
+
+/**
+ * 任务状态
+ *
+ * @author supeng
+ */
+@Getter
+public enum TaskStatusEnum {
+    INIT(0, "初始化"),
+    PRE_PROCESSING(1, "前置处理/子任务处理中"),
+    READY(2, "就绪"),
+    PROCESSING(3, "处理中"),
+    SUCCESS(4, "成功"),
+    FAILED(5, "失败"),
+    TIMEOUT(6, "超时");
+
+    private final Integer value;
+    private final String desc;
+
+    TaskStatusEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}

+ 22 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/TaskTypeEnum.java

@@ -0,0 +1,22 @@
+package com.tzld.piaoquan.supply.demand.engine.common.enums;
+
+import lombok.Getter;
+
+/**
+ * 任务类型
+ *
+ * @author supeng
+ */
+@Getter
+public enum TaskTypeEnum {
+    DECONSTRUCT(1, "解构"),
+    CLUSTER(2, "聚类");
+
+    private final Integer value;
+    private final String desc;
+
+    TaskTypeEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}

+ 35 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/config/MybatisPlusConfig.java

@@ -0,0 +1,35 @@
+package com.tzld.piaoquan.supply.demand.engine.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 分页配置
+ *
+ * @author supeng
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+
+        PaginationInnerInterceptor paginationInterceptor =
+                new PaginationInnerInterceptor(DbType.MYSQL);
+
+        //超过最大页数是否回到首页(false = 抛异常)
+        paginationInterceptor.setOverflow(false);
+
+        //单页最大条数(防止一次查几十万)
+        paginationInterceptor.setMaxLimit(10000L);
+
+        interceptor.addInnerInterceptor(paginationInterceptor);
+
+        return interceptor;
+    }
+}
+

+ 0 - 33
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/generator/MybatisGeneratorMain.java

@@ -1,33 +0,0 @@
-package com.tzld.piaoquan.supply.demand.engine.dao.generator;
-
-import java.io.File;
-import java.io.IOException;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.mybatis.generator.api.MyBatisGenerator;
-import org.mybatis.generator.config.Configuration;
-import org.mybatis.generator.config.xml.ConfigurationParser;
-import org.mybatis.generator.exception.InvalidConfigurationException;
-import org.mybatis.generator.exception.XMLParserException;
-import org.mybatis.generator.internal.DefaultShellCallback;
-
-/**
- * @author supeng
- */
-public class MybatisGeneratorMain {
-
-	public static void main(String[] args)
-			throws SQLException, IOException, InterruptedException, InvalidConfigurationException, XMLParserException {
-		List<String> warnings = new ArrayList<String>();
-		boolean overwrite = true;
-		File configFile = new File(MybatisGeneratorMain.class.getResource("/mybatis-generator-config.xml").getFile());
-		ConfigurationParser cp = new ConfigurationParser(warnings);
-		Configuration config = cp.parseConfiguration(configFile);
-		DefaultShellCallback callback = new DefaultShellCallback(overwrite);
-		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
-		myBatisGenerator.generate(null);
-		System.out.println("generate finish");
-	}
-}

+ 10 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdPromptTemplateMapper.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.supply.demand.engine.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdPromptTemplate;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SdPromptTemplateMapper extends BaseMapper<SdPromptTemplate> {
+
+}

+ 10 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdStrategyMapper.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.supply.demand.engine.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdStrategy;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SdStrategyMapper extends BaseMapper<SdStrategy> {
+
+}

+ 10 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdSubTaskMapper.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.supply.demand.engine.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdSubTask;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SdSubTaskMapper extends BaseMapper<SdSubTask> {
+
+}

+ 10 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdSubTaskRawResultMapper.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.supply.demand.engine.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdSubTaskRawResult;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SdSubTaskRawResultMapper extends BaseMapper<SdSubTaskRawResult> {
+
+}

+ 10 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdSubTaskResultItemMapper.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.supply.demand.engine.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdSubTaskResultItem;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SdSubTaskResultItemMapper extends BaseMapper<SdSubTaskResultItem> {
+
+}

+ 10 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdTaskMapper.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.supply.demand.engine.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdTask;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SdTaskMapper extends BaseMapper<SdTask> {
+
+}

+ 10 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/dao/mapper/SdTaskResultMapper.java

@@ -0,0 +1,10 @@
+package com.tzld.piaoquan.supply.demand.engine.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdTaskResult;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SdTaskResultMapper extends BaseMapper<SdTaskResult> {
+
+}

+ 37 - 51
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/handle/GlobalExceptionHandle.java

@@ -1,15 +1,10 @@
 package com.tzld.piaoquan.supply.demand.engine.handle;
 
 import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
+import java.util.stream.Collectors;
 
 import com.tzld.piaoquan.supply.demand.engine.common.base.CommonResponse;
 import lombok.extern.slf4j.Slf4j;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.CollectionUtils;
-import org.springframework.validation.BindException;
 import org.springframework.validation.ObjectError;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -20,57 +15,48 @@ import com.tzld.piaoquan.supply.demand.engine.common.exception.CommonException;
 
 /**
  * 全局异常处理器
- * 
+ *
  * @author supeng
  */
 @Slf4j
 @RestControllerAdvice
 public class GlobalExceptionHandle {
+    /**
+     * 处理自定义业务异常
+     */
+    @ExceptionHandler(CommonException.class)
+    public CommonResponse<Object> handleCommonException(CommonException e) {
+        return CommonResponse.create(e.getCode(), e.getMsg());
+    }
+
+    /**
+     * 处理参数校验异常
+     */
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    public CommonResponse<Object> handleValidationException(MethodArgumentNotValidException e) {
+        List<String> errors = e.getBindingResult()
+                .getAllErrors()
+                .stream()
+                .map(ObjectError::getDefaultMessage)
+                .collect(Collectors.toList());
+        // 第一条错误信息
+//        String firstError = errors.isEmpty() ? "参数校验失败" : errors.get(0);
+        // 所有错误信息拼接
+        String allErrors = String.join("|", errors);
+        allErrors = allErrors.isEmpty() ? "参数校验失败" : allErrors;
+        return CommonResponse.create(ExceptionEnum.PARAMS_INVALID.getCode(), allErrors);
+    }
 
-    @ExceptionHandler
-    public Object handleException(HttpServletRequest req, Exception exception) throws Exception {
-        String uri = req.getRequestURI();
-        CommonResponse<Object> response = new CommonResponse<Object>();
-        // 业务异常
-        if (exception instanceof CommonException) {
-            CommonException e = (CommonException) exception;
-            response.setCode(e.getCode());
-            response.setMsg(e.getMsg());
-            log.warn("uri:" + uri + "\n" + "CustomException log.", exception);
-        } else if (exception instanceof MethodArgumentNotValidException) {
-            // 参数校验异常
-            MethodArgumentNotValidException e = (MethodArgumentNotValidException) exception;
-            List<ObjectError> errorList = e.getBindingResult().getAllErrors();
-            StringBuilder errorMsg = new StringBuilder();
-            errorMsg.append("|");
-            if (!CollectionUtils.isEmpty(errorList)) {
-                for (ObjectError objectError : errorList) {
-                    errorMsg.append(objectError.getDefaultMessage()).append("|");
-                }
-            }
-            response.setCode(ExceptionEnum.PARAMS_INVALID.getCode());
-            response.setMsg(errorMsg.toString());
-            log.warn("uri:" + uri + "\n" + "MethodArgumentNotValidException log.", exception);
-        } else if (exception instanceof BindException) {
-            // 参数绑定异常
-            BindException e = (BindException) exception;
-            List<ObjectError> errorList = e.getBindingResult().getAllErrors();
-            StringBuilder errorMsg = new StringBuilder();
-            errorMsg.append("|");
-            if (!CollectionUtils.isEmpty(errorList)) {
-                for (ObjectError objectError : errorList) {
-                    errorMsg.append(objectError.getDefaultMessage()).append("|");
-                }
-            }
-            response.setCode(ExceptionEnum.PARAMS_INVALID.getCode());
-            response.setMsg(errorMsg.toString());
-            log.warn("uri:" + uri + "\n" + "BindException log.", exception);
-        } else {
-            response.setCode(ExceptionEnum.SYSTEM_ERROR.getCode());
-            response.setMsg(ExceptionEnum.SYSTEM_ERROR.getMsg());
-            log.error("uri:" + uri + "\n" + "unknow exception log.", exception);
-        }
-        return response;
+    /**
+     * 未知异常
+     */
+    @ExceptionHandler(Exception.class)
+    public CommonResponse<Object> handleUnknownException(Exception e) {
+        log.error(e.getMessage(), e);
+        return CommonResponse.create(
+                ExceptionEnum.SYSTEM_ERROR.getCode(),
+                ExceptionEnum.SYSTEM_ERROR.getMsg()
+        );
     }
 
 }

+ 0 - 160
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/dto/BaseInfoDTO.java

@@ -1,170 +1,10 @@
 package com.tzld.piaoquan.supply.demand.engine.model.dto;
 
-import io.swagger.annotations.ApiModelProperty;
-
 /**
  * 基础信息
  *
  * @author supeng
- * @date 2020/08/28
  */
 public class BaseInfoDTO {
-    /// 用户信息
-    @ApiModelProperty(value = "公共参数-token值")
-    private String token;
-    @ApiModelProperty(value = "公共参数-登录用户ID")
-    private Long loginUid;
-
-    /// 应用信息
-    @ApiModelProperty(value = "公共参数-应用版本号")
-    private Integer appVersionCode;
-    @ApiModelProperty(value = "公共参数-产品代号")
-    private Integer appType;
-
-    /// 设备信息
-    @ApiModelProperty(value = "公共参数-手机设备的唯一码")
-    private String machineCode;
-    @ApiModelProperty(value = "公共参数-ios,android")
-    private String platform;
-    @ApiModelProperty(value = "公共参数-系统版本(例:ios10.1)")
-    private String systemVersion;
-    @ApiModelProperty(value = "公共参数-手机信息")
-    private String machineInfo;
-    @ApiModelProperty(value = "公共参数-网络类型 WI-FI 5G 4G 3G 2G")
-    private String networkType;
-    @ApiModelProperty(value = "公共参数-客户端ip")
-    private String clientIp;
-
-    // pageSource相关的参数
-    @ApiModelProperty(value = "公共参数-页面来源")
-    private String pageSource;
-
-    // 某次操作相关的参数
-    @ApiModelProperty(value = "公共参数-前端请求时间")
-    private Long clientTimestamp;
-    @ApiModelProperty(value = "公共参数-sessionId")
-    private String sessionId;
-    @ApiModelProperty(value = "公共参数-requestId,每次请求客户端生成唯一ID,不超过64位")
-    private String requestId;
-
-    public String getToken() {
-        return token;
-    }
-
-    public void setToken(String token) {
-        this.token = token;
-    }
-
-    public Long getLoginUid() {
-        return loginUid;
-    }
-
-    public void setLoginUid(Long loginUid) {
-        this.loginUid = loginUid;
-    }
-
-    public Integer getAppVersionCode() {
-        return appVersionCode;
-    }
-
-    public void setAppVersionCode(Integer appVersionCode) {
-        this.appVersionCode = appVersionCode;
-    }
-
-    public Integer getAppType() {
-        return appType;
-    }
-
-    public void setAppType(Integer appType) {
-        this.appType = appType;
-    }
-
-    public String getMachineCode() {
-        return machineCode;
-    }
-
-    public void setMachineCode(String machineCode) {
-        this.machineCode = machineCode;
-    }
-
-    public String getPlatform() {
-        return platform;
-    }
-
-    public void setPlatform(String platform) {
-        this.platform = platform;
-    }
-
-    public String getSystemVersion() {
-        return systemVersion;
-    }
-
-    public void setSystemVersion(String systemVersion) {
-        this.systemVersion = systemVersion;
-    }
-
-    public String getMachineInfo() {
-        return machineInfo;
-    }
-
-    public void setMachineInfo(String machineInfo) {
-        this.machineInfo = machineInfo;
-    }
-
-    public String getNetworkType() {
-        return networkType;
-    }
-
-    public void setNetworkType(String networkType) {
-        this.networkType = networkType;
-    }
-
-    public String getClientIp() {
-        return clientIp;
-    }
-
-    public void setClientIp(String clientIp) {
-        this.clientIp = clientIp;
-    }
-
-    public String getPageSource() {
-        return pageSource;
-    }
-
-    public void setPageSource(String pageSource) {
-        this.pageSource = pageSource;
-    }
-
-    public Long getClientTimestamp() {
-        return clientTimestamp;
-    }
-
-    public void setClientTimestamp(Long clientTimestamp) {
-        this.clientTimestamp = clientTimestamp;
-    }
-
-    public String getSessionId() {
-        return sessionId;
-    }
-
-    public void setSessionId(String sessionId) {
-        this.sessionId = sessionId;
-    }
-
-    public String getRequestId() {
-        return requestId;
-    }
-
-    public void setRequestId(String requestId) {
-        this.requestId = requestId;
-    }
-
-    @Override
-    public String toString() {
-        return String.format(
-            "BaseInfoDTO [token=%s, appVersionCode=%s, appType=%s, machineCode=%s, platform=%s, systemVersion=%s, machineInfo=%s, networkType=%s, clientIp=%s, pageSource=%s, clientTimestamp=%s, sessionId=%s, requestId=%s]",
-            token, appVersionCode, appType, machineCode, platform, systemVersion, machineInfo, networkType, clientIp,
-            pageSource, clientTimestamp, sessionId, requestId);
-    }
 
 }

+ 0 - 1
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/dto/PageDTO.java

@@ -2,7 +2,6 @@ package com.tzld.piaoquan.supply.demand.engine.model.dto;
 
 /**
  * @author supeng
- * @date 2020/09/01
  */
 public class PageDTO {
 

+ 28 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/param/TaskCreateParam.java

@@ -0,0 +1,28 @@
+package com.tzld.piaoquan.supply.demand.engine.model.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 任务创建参数
+ *
+ * @author supeng
+ */
+@Data
+public class TaskCreateParam {
+    /**
+     * 任务类型
+     *
+     * @see com.tzld.piaoquan.supply.demand.engine.common.enums.TaskTypeEnum
+     */
+    @NotNull(message = "任务类型不能为空")
+    private Integer taskType;
+    /**
+     * 票圈videoId list
+     */
+    @NotEmpty(message = "票圈视频ID不能为空")
+    private List<Long> videoIds;
+}

+ 47 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdPromptTemplate.java

@@ -0,0 +1,47 @@
+package com.tzld.piaoquan.supply.demand.engine.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Prompt提示词模板库
+ *
+ * @author supeng
+ */
+@Data
+@TableName("sd_prompt_template")
+public class SdPromptTemplate {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 模板名称
+     */
+    private String templateName;
+    /**
+     * 版本号(如:v1.0.0)
+     */
+    private String version;
+    /**
+     * 记录创建时间,由数据库自动生成
+     */
+    private Date createTime;
+    /**
+     * 记录最后更新时间,由数据库自动维护
+     */
+    private Date updateTime;
+    /**
+     * 逻辑删除标记:0-正常状态,1-已删除
+     */
+    private Integer isDeleted;
+    /**
+     * Prompt模版内容
+     */
+    private String promptContent;
+}

+ 49 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdStrategy.java

@@ -0,0 +1,49 @@
+package com.tzld.piaoquan.supply.demand.engine.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 需求提取策略表
+ * @author supeng
+ */
+@Data
+@TableName("sd_strategy")
+public class SdStrategy {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 策略名称(如:健康类解构需求提取策略-GPT4版)
+     */
+    private String strategyName;
+
+    /**
+     * 关联 sd_prompt_template.id
+     */
+    private Long promptTemplateId;
+
+    /**
+     * 策略配置:json格式,包括模型配置等
+     */
+    private String config;
+    /**
+     * 记录创建时间,由数据库自动生成
+     */
+    private Date createTime;
+    /**
+     * 记录最后更新时间,由数据库自动维护
+     */
+    private Date updateTime;
+    /**
+     * 逻辑删除标记:0-正常状态,1-已删除
+     */
+    private Integer isDeleted;
+}

+ 63 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdSubTask.java

@@ -0,0 +1,63 @@
+package com.tzld.piaoquan.supply.demand.engine.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 供需子任务表
+ *
+ * @author supeng
+ */
+@Data
+@TableName("sd_sub_task")
+public class SdSubTask {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 父任务ID,关联 sd_task.id
+     */
+    private Long taskId;
+    /**
+     * 子任务业务编号,用于异步回调时的精确匹配 & 对外暴露
+     */
+    private String subTaskNo;
+    /**
+     * 子任务类型:1 DECONSTRUCT(解构), 2 CLUSTER(聚类)
+     *
+     * @see com.tzld.piaoquan.supply.demand.engine.common.enums.SubTaskTypeEnum
+     */
+    private Integer subTaskType;
+    /**
+     * 执行状态:0 INIT, 1 SUBMITTED(已提交), 2 RUNNING(运行中), 3 SUCCESS, 4 FAILED 5 TIMEOUT
+     *
+     * @see com.tzld.piaoquan.supply.demand.engine.common.enums.SubTaskStatusEnum
+     */
+    private Integer taskStatus;
+    /**
+     * 第三方服务的JobID
+     */
+    private String externalJobId;
+    /**
+     * 执行失败时的错误详细描述
+     */
+    private String errorMsg;
+    /**
+     * 记录创建时间,由数据库自动生成
+     */
+    private Date createTime;
+    /**
+     * 记录最后更新时间,由数据库自动维护
+     */
+    private Date updateTime;
+    /**
+     * 逻辑删除标记:0-正常状态,1-已删除
+     */
+    private Integer isDeleted;
+}

+ 43 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdSubTaskRawResult.java

@@ -0,0 +1,43 @@
+package com.tzld.piaoquan.supply.demand.engine.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 子任务原始结果表
+ *
+ * @author supeng
+ */
+@Data
+@TableName("sd_sub_task_raw_result")
+public class SdSubTaskRawResult {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 关联子任务ID,关联 sd_sub_task.id
+     */
+    private Long subTaskId;
+    /**
+     * 原始结果数据
+     */
+    private String rawResult;
+    /**
+     * 记录创建时间,由数据库自动生成
+     */
+    private Date createTime;
+    /**
+     * 记录最后更新时间,由数据库自动维护
+     */
+    private Date updateTime;
+    /**
+     * 逻辑删除标记:0-正常状态,1-已删除
+     */
+    private Integer isDeleted;
+}

+ 56 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdSubTaskResultItem.java

@@ -0,0 +1,56 @@
+package com.tzld.piaoquan.supply.demand.engine.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 子任务结果明细项表
+ *
+ * @author supeng
+ */
+@Data
+@TableName("sd_sub_task_result_item")
+public class SdSubTaskResultItem {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 冗余主任务ID,支持直接跨过子任务查全量结果,关联 sd_task.id
+     */
+    private Long taskId;
+    /**
+     * 来源子任务ID,关联 sd_sub_task.id
+     */
+    private Long subTaskId;
+    /**
+     * 明细类型:1 灵感点, 2 目的点-意图, 3 关键点
+     */
+    private Integer itemType;
+    /**
+     * 提取出的标题或关键词,用于列表页快速渲染
+     */
+    private String itemTitle;
+    /**
+     * 原始结果拆分后的内容。该条目的结构化属性
+     */
+    private String itemContent;
+
+    /**
+     * 记录创建时间,由数据库自动生成
+     */
+    private Date createTime;
+    /**
+     * 记录最后更新时间,由数据库自动维护
+     */
+    private Date updateTime;
+    /**
+     * 逻辑删除标记:0-正常状态,1-已删除
+     */
+    private Integer isDeleted;
+}

+ 91 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdTask.java

@@ -0,0 +1,91 @@
+package com.tzld.piaoquan.supply.demand.engine.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 供需任务表
+ *
+ * @author supeng
+ */
+@Data
+@TableName("sd_task")
+public class SdTask {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 任务编号,对外暴露(如API、前端URL),具备业务语义
+     */
+    private String taskNo;
+
+    /**
+     * 任务名称,方便用户识别
+     */
+    private String taskName;
+
+    /**
+     * 任务类型:1 DECONSTRUCT(解构), 2 CLUSTER(聚类)
+     *
+     * @see com.tzld.piaoquan.supply.demand.engine.common.enums.TaskTypeEnum
+     */
+    private Integer taskType;
+    /**
+     * 任务状态:0 INIT(初始化), 1 PRE_PROCESSING(前置处理/子任务处理中),
+     * 2 READY(就绪), 3 PROCESSING(处理中), 4 SUCCESS(成功) 5 FAILED(失败) 6 TIMEOUT(超时)
+     *
+     * @see com.tzld.piaoquan.supply.demand.engine.common.enums.TaskStatusEnum
+     */
+    private Integer taskStatus;
+    /**
+     * 关联 sd_strategy.id
+     */
+    private Long strategyId;
+    /**
+     * 扩展配置。存储非通用参数
+     */
+    private String extConfig;
+    /**
+     * 输入参数/内容
+     */
+    private String inputPayload;
+    /**
+     * 子任务总数
+     */
+    private Integer subTaskCount;
+    /**
+     * 已结束的子任务数
+     */
+    private Integer finishedSubTaskCount;
+    /**
+     * 任务实际结束时间,仅在状态转为SUCCESS/FAILED/TIMEOUT时填入
+     */
+    private Date finishedTime;
+    /**
+     * 创建者标识(用户ID或系统ID)
+     */
+    private String creator;
+    /**
+     * 记录创建时间,由数据库自动生成
+     */
+    private Date createTime;
+    /**
+     * 记录最后更新时间,由数据库自动维护
+     */
+    private Date updateTime;
+    /**
+     * 逻辑删除标记:0-正常状态,1-已删除
+     */
+    private Integer isDeleted;
+    /**
+     * 执行失败时的错误详细描述
+     */
+    private String errorMsg;
+}

+ 42 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/po/SdTaskResult.java

@@ -0,0 +1,42 @@
+package com.tzld.piaoquan.supply.demand.engine.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 供需任务提取需求结果表
+ * @author supeng
+ */
+@Data
+@TableName("sd_task_result")
+public class SdTaskResult {
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 关联 sd_task.id
+     */
+    private Long taskId;
+    /**
+     * 记录创建时间,由数据库自动生成
+     */
+    private Date createTime;
+    /**
+     * 记录最后更新时间,由数据库自动维护
+     */
+    private Date updateTime;
+    /**
+     * 逻辑删除标记:0-正常状态,1-已删除
+     */
+    private Integer isDeleted;
+    /**
+     * 引擎最终提取出的需求结果
+     */
+    private String result;
+}

+ 8 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/OpenRouterService.java

@@ -0,0 +1,8 @@
+package com.tzld.piaoquan.supply.demand.engine.service;
+
+/**
+ *
+ * @author supeng
+ */
+public interface OpenRouterService {
+}

+ 13 - 2
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/TaskService.java

@@ -1,5 +1,8 @@
 package com.tzld.piaoquan.supply.demand.engine.service;
 
+import com.tzld.piaoquan.supply.demand.engine.common.base.CommonRequest;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskCreateParam;
+
 /**
  *
  * @author supeng
@@ -7,9 +10,9 @@ package com.tzld.piaoquan.supply.demand.engine.service;
 public interface TaskService {
     /**
      * 创建任务
-     * @param object
+     * @param request
      */
-    void create(Object object);
+    void create(CommonRequest<TaskCreateParam> request);
 
     /**
      * 任务调度
@@ -22,4 +25,12 @@ public interface TaskService {
      * @param object
      */
     void get(Object object);
+
+    void subTaskSubmitHandler();
+
+    void subTaskSyncHandler();
+
+    void taskStatusCheckHandler();
+
+    void taskExecuteHandler();
 }

+ 14 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/impl/OpenRouterServiceImpl.java

@@ -0,0 +1,14 @@
+package com.tzld.piaoquan.supply.demand.engine.service.impl;
+
+import com.tzld.piaoquan.supply.demand.engine.service.OpenRouterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author supeng
+ */
+@Slf4j
+@Service
+public class OpenRouterServiceImpl implements OpenRouterService {
+
+}

+ 38 - 1
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/impl/TaskServiceImpl.java

@@ -1,9 +1,19 @@
 package com.tzld.piaoquan.supply.demand.engine.service.impl;
 
+import com.tzld.piaoquan.supply.demand.engine.common.base.CommonRequest;
+import com.tzld.piaoquan.supply.demand.engine.common.enums.ExceptionEnum;
+import com.tzld.piaoquan.supply.demand.engine.common.exception.CommonException;
+import com.tzld.piaoquan.supply.demand.engine.dao.mapper.SdTaskMapper;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskCreateParam;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdTask;
 import com.tzld.piaoquan.supply.demand.engine.service.TaskService;
+import com.tzld.piaoquan.supply.demand.engine.util.IdGeneratorUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Objects;
+
 /**
  *
  * @author supeng
@@ -12,8 +22,15 @@ import org.springframework.stereotype.Service;
 @Service
 public class TaskServiceImpl implements TaskService {
 
+    @Autowired
+    private SdTaskMapper sdTaskMapper;
+
     @Override
-    public void create(Object object) {
+    public void create(CommonRequest<TaskCreateParam> request) {
+        TaskCreateParam params = request.getParams();
+        SdTask sdTask = new SdTask();
+        sdTask.setTaskNo(IdGeneratorUtil.generateTaskNo());
+        sdTaskMapper.insert(sdTask);
 
     }
 
@@ -26,4 +43,24 @@ public class TaskServiceImpl implements TaskService {
     public void get(Object object) {
 
     }
+
+    @Override
+    public void subTaskSubmitHandler() {
+
+    }
+
+    @Override
+    public void subTaskSyncHandler() {
+
+    }
+
+    @Override
+    public void taskStatusCheckHandler() {
+
+    }
+
+    @Override
+    public void taskExecuteHandler() {
+
+    }
 }

+ 107 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/util/IdGeneratorUtil.java

@@ -0,0 +1,107 @@
+package com.tzld.piaoquan.supply.demand.engine.util;
+
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+/**
+ * ID 生成器 (基于 MyBatis-Plus IdWorker)
+ */
+public class IdGeneratorUtil {
+
+    // ================= 配置常量 =================
+    /**
+     * 供需任务前缀
+     */
+    private static final String TASK_PREFIX = "TK";
+
+    /**
+     * 子任务分隔符
+     */
+    private static final String SUB_TASK_SEPARATOR = "-";
+
+    /**
+     * 日期格式 (用于主任务前缀,方便按天归档/分表)
+     */
+    private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyyMMdd");
+
+    /**
+     * 子任务随机后缀长度 (6位 约568亿组合,碰撞概率极低)
+     */
+    private static final int SUFFIX_LEN = 6;
+
+    /**
+     * 随机字符集 (0-9, A-Z, a-z)
+     */
+    private static final char[] ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();
+
+    // ================= 核心方法 =================
+    /**
+     * 生成主任务编号 (taskNo)
+     * 格式: TK + yyyyMMdd + 雪花ID
+     * 示例: TK202601141756281923812
+     */
+    public static String generateTaskNo() {
+        // 1. 获取日期前缀
+        String dateStr = LocalDateTime.now().format(DATE_FMT);
+
+        // 2. 获取 MyBatis-Plus 内置雪花ID (Long)
+        long workerId = IdWorker.getId();
+
+        // 3. 拼接返回
+        return TASK_PREFIX + dateStr + workerId;
+    }
+
+    /**
+     * 生成单个子任务编号 (SubTaskNo)
+     * 格式: TaskNo + "-" + 6位随机码
+     * 示例: TK202601141756281923812-Ab9Xz1
+     */
+    public static String generateSubTaskNo(String taskNo) {
+        if (taskNo == null || taskNo.isEmpty()) {
+            throw new IllegalArgumentException("TaskNo cannot be empty");
+        }
+        // 预分配 StringBuilder 容量,避免扩容
+        StringBuilder sb = new StringBuilder(taskNo.length() + 1 + SUFFIX_LEN);
+        sb.append(taskNo).append(SUB_TASK_SEPARATOR);
+
+        ThreadLocalRandom random = ThreadLocalRandom.current();
+        for (int i = 0; i < SUFFIX_LEN; i++) {
+            sb.append(ALPHABET[random.nextInt(ALPHABET.length)]);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 批量生成子任务编号
+     *
+     * @param taskNo 主任务编号
+     * @param count  需要生成的数量
+     */
+    public static List<String> generateSubTaskNos(String taskNo, int count) {
+        if (count <= 0) {
+            return new ArrayList<>(0);
+        }
+        List<String> list = new ArrayList<>(count);
+        for (int i = 0; i < count; i++) {
+            list.add(generateSubTaskNo(taskNo));
+        }
+        return list;
+    }
+
+    // ================= 测试 Main =================
+    public static void main(String[] args) {
+        // 1. 测试生成主任务
+        String mainTaskNo = generateTaskNo();
+        System.out.println("主任务 No: " + mainTaskNo);
+
+        // 2. 测试生成 5 个子任务
+        System.out.println("\n--- 子任务列表 ---");
+        List<String> subIds = generateSubTaskNos(mainTaskNo, 5);
+        subIds.forEach(System.out::println);
+    }
+}

+ 9 - 3
supply-demand-engine-core/src/main/resources/mybatis-generator-config.xml

@@ -24,8 +24,8 @@
         </commentGenerator>
 
         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
-                        connectionURL="jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false"
-                        userId="wx2016_longvideo" password="wx2016_longvideoP@assword1234">
+                        connectionURL="jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand-test?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false"
+                        userId="supply_rw" password="1q68AdnXFBEWWokY">
         </jdbcConnection>
 
         <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
@@ -46,7 +46,13 @@
             <property name="enableSubPackages" value="true"/>
         </javaClientGenerator>
 
-        <table tableName="flow_pool_level_video" domainObjectName="FlowPoolLevelVideo" alias=""/>
+        <table tableName="sd_task" domainObjectName="SdTask" alias=""/>
+        <table tableName="sd_task_result" domainObjectName="SdTaskResult" alias=""/>
+        <table tableName="sd_sub_task" domainObjectName="SdSubTask" alias=""/>
+        <table tableName="sd_sub_task_raw_result" domainObjectName="SdSubTaskRawResult" alias=""/>
+        <table tableName="sd_sub_task_result_item" domainObjectName="SdSubTaskResultItem" alias=""/>
+        <table tableName="sd_strategy" domainObjectName="SdStrategy" alias=""/>
+        <table tableName="sd_prompt_template" domainObjectName="SdPromptTemplate" alias=""/>
 
     </context>
 

+ 1 - 1
supply-demand-engine-job/src/main/java/com/tzld/piaoquan/supply/demand/engine/Application.java

@@ -16,7 +16,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
  */
 @Slf4j
 @SpringBootApplication
-@MapperScan("com.tzld.piaoquan.supply.demand.engine")
+@MapperScan("com.tzld.piaoquan.supply.demand.engine.dao.mapper")
 @ServletComponentScan("com.tzld.piaoquan.supply.demand.engine")
 @EnableFeignClients
 @EnableEurekaClient

+ 94 - 0
supply-demand-engine-job/src/main/java/com/tzld/piaoquan/supply/demand/engine/job/TaskJob.java

@@ -0,0 +1,94 @@
+package com.tzld.piaoquan.supply.demand.engine.job;
+
+import com.tzld.piaoquan.supply.demand.engine.service.TaskService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author supeng
+ */
+@Slf4j
+@Component
+public class TaskJob {
+
+    @Autowired
+    private TaskService taskService;
+
+    /**
+     * 子任务提交
+     *
+     * @param params
+     * @return
+     */
+    @XxlJob("subTaskSubmitHandler")
+    public ReturnT<String> subTaskSubmitHandler(String params) {
+        XxlJobLogger.log("subTaskSubmitHandler start");
+        try {
+            taskService.subTaskSubmitHandler();
+        } catch (Exception e) {
+            XxlJobLogger.log("subTaskSubmitHandler error", e);
+            return ReturnT.FAIL;
+        } finally {
+            XxlJobLogger.log("subTaskSubmitHandler end");
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    /**
+     * 子任务状态/结果同步
+     *
+     * @param params
+     * @return
+     */
+    @XxlJob("subTaskSyncHandler")
+    public ReturnT<String> subTaskSyncHandler(String params) {
+        XxlJobLogger.log("subTaskSyncHandler start");
+        try {
+            taskService.subTaskSyncHandler();
+        } catch (Exception e) {
+            XxlJobLogger.log("subTaskSyncHandler error", e);
+            return ReturnT.FAIL;
+        } finally {
+            XxlJobLogger.log("subTaskSyncHandler end");
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    /**
+     * 任务状态检测更新
+     *
+     * @param params
+     * @return
+     */
+    @XxlJob("taskStatusCheckHandler")
+    public ReturnT<String> taskStatusCheckHandler(String params) {
+        XxlJobLogger.log("taskStatusCheckHandler start");
+        try {
+            taskService.taskStatusCheckHandler();
+        } catch (Exception e) {
+            XxlJobLogger.log("taskStatusCheckHandler error", e);
+            return ReturnT.FAIL;
+        } finally {
+            XxlJobLogger.log("taskStatusCheckHandler end");
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    @XxlJob("taskExecuteHandler")
+    public ReturnT<String> taskExecuteHandler(String params) {
+        XxlJobLogger.log("taskExecuteHandler start");
+        try {
+            taskService.taskExecuteHandler();
+        } catch (Exception e) {
+            XxlJobLogger.log("taskExecuteHandler error", e);
+            return ReturnT.FAIL;
+        } finally {
+            XxlJobLogger.log("taskExecuteHandler end");
+        }
+        return ReturnT.SUCCESS;
+    }
+}

+ 6 - 6
supply-demand-engine-job/src/main/resources/application-dev.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand-test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10
@@ -36,9 +36,9 @@ spring:
         max-idle: 8
         min-idle: 0
 
-mybatis:
-  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
-  mapper-locations: classpath:mapper/*.xml
+#mybatis:
+#  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
+#  mapper-locations: classpath:mapper/*.xml
 
 
 logging:

+ 3 - 3
supply-demand-engine-job/src/main/resources/application-pre.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1661607875x9596.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10

+ 3 - 3
supply-demand-engine-job/src/main/resources/application-prod.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1661607875x9596.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10

+ 3 - 3
supply-demand-engine-job/src/main/resources/application-stress.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand-test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10

+ 3 - 3
supply-demand-engine-job/src/main/resources/application-test.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand-test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10

+ 1 - 1
supply-demand-engine-service/src/main/java/com/tzld/piaoquan/supply/demand/engine/Application.java

@@ -16,7 +16,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
  * @author supeng
  */
 @SpringBootApplication
-@MapperScan("com.tzld.piaoquan.supply.demand.engine")
+@MapperScan("com.tzld.piaoquan.supply.demand.engine.dao.mapper")
 @ServletComponentScan("com.tzld.piaoquan.supply.demand.engine")
 @EnableFeignClients
 @EnableEurekaClient

+ 3 - 6
supply-demand-engine-service/src/main/java/com/tzld/piaoquan/supply/demand/engine/controller/TaskController.java

@@ -5,6 +5,7 @@ import com.tzld.piaoquan.supply.demand.engine.common.base.CommonResponse;
 import com.tzld.piaoquan.supply.demand.engine.common.enums.ExceptionEnum;
 import com.tzld.piaoquan.supply.demand.engine.common.exception.CommonException;
 import com.tzld.piaoquan.supply.demand.engine.model.dto.BaseInfoDTO;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskCreateParam;
 import com.tzld.piaoquan.supply.demand.engine.service.TaskService;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -30,12 +31,8 @@ public class TaskController {
 
     @ApiOperation(value = "创建任务", notes = "创建任务")
     @PostMapping("/create")
-    public CommonResponse<String> create(@RequestBody CommonRequest<Map<String, String>> request) {
-        BaseInfoDTO baseInfo = request.getBaseInfo();
-        if (baseInfo == null) {
-            throw new CommonException(ExceptionEnum.PARAMS_INVALID);
-        }
-        taskService.create(baseInfo);
+    public CommonResponse<String> create(@RequestBody CommonRequest<TaskCreateParam> request) {
+        taskService.create(request);
         return CommonResponse.create();
     }
 

+ 6 - 6
supply-demand-engine-service/src/main/resources/application-dev.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand-test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10
@@ -36,9 +36,9 @@ spring:
         max-idle: 8
         min-idle: 0
 
-mybatis:
-  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
-  mapper-locations: classpath:mapper/*.xml
+#mybatis:
+#  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
+#  mapper-locations: classpath:mapper/*.xml
 
 
 logging:

+ 6 - 6
supply-demand-engine-service/src/main/resources/application-pre.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1661607875x9596.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10
@@ -36,9 +36,9 @@ spring:
         max-idle: 8
         min-idle: 0
 
-mybatis:
-  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
-  mapper-locations: classpath:mapper/*.xml
+#mybatis:
+#  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
+#  mapper-locations: classpath:mapper/*.xml
 
 
 logging:

+ 6 - 6
supply-demand-engine-service/src/main/resources/application-prod.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1661607875x9596.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10
@@ -36,9 +36,9 @@ spring:
         max-idle: 8
         min-idle: 0
 
-mybatis:
-  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
-  mapper-locations: classpath:mapper/*.xml
+#mybatis:
+#  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
+#  mapper-locations: classpath:mapper/*.xml
 
 logging:
   file:

+ 6 - 6
supply-demand-engine-service/src/main/resources/application-stress.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand-test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10
@@ -36,9 +36,9 @@ spring:
         max-idle: 8
         min-idle: 0
 
-mybatis:
-  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
-  mapper-locations: classpath:mapper/*.xml
+#mybatis:
+#  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
+#  mapper-locations: classpath:mapper/*.xml
 
 
 logging:

+ 6 - 6
supply-demand-engine-service/src/main/resources/application-test.yml

@@ -15,9 +15,9 @@ eureka:
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/flowpool?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
-    username: wx2016_longvideo
-    password: wx2016_longvideoP@assword1234
+    url: jdbc:mysql://mr-oaax8p2qw5oc03m34d.rwlb.rds.aliyuncs.com:3306/supply-demand-test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: supply_rw
+    password: 1q68AdnXFBEWWokY
     type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 10
@@ -36,9 +36,9 @@ spring:
         max-idle: 8
         min-idle: 0
 
-mybatis:
-  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
-  mapper-locations: classpath:mapper/*.xml
+#mybatis:
+#  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
+#  mapper-locations: classpath:mapper/*.xml
 
 logging:
   file:

+ 6 - 0
supply-demand-engine-service/src/main/resources/application.yml

@@ -20,6 +20,12 @@ server:
 pagehelper:
   helper-dialect: mysql
 
+mybatis-plus:
+  mapper-locations: classpath:mapper/*.xml
+  type-aliases-package: com.tzld.piaoquan.supply.demand.engine.model.po
+  configuration:
+    map-underscore-to-camel-case: true
+
 aliyun:
   log:
     endpoint: cn-hangzhou-intranet.log.aliyuncs.com