Lin Qilong 1 mēnesi atpakaļ
vecāks
revīzija
6d630e23ed
100 mainītis faili ar 947 papildinājumiem un 2994 dzēšanām
  1. 0 0
      plugins/disabled.txt
  2. BIN
      plugins/gw-plugin-biz-3.8.8.jar
  3. BIN
      plugins/plugin-biz-http-3.8.8.jar
  4. 2 17
      pom.xml
  5. 1 20
      ruoyi-admin/pom.xml
  6. 5 18
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
  7. 0 263
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/PluginController.java
  8. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/geo/EquiSurface2.java
  9. 11 43
      ruoyi-admin/src/main/resources/application-dev.yml
  10. 0 121
      ruoyi-admin/src/main/resources/application-dm.yml
  11. 7 29
      ruoyi-admin/src/main/resources/application-prod.yml
  12. 0 132
      ruoyi-admin/src/main/resources/application-test.yml
  13. 1 1
      ruoyi-admin/src/main/resources/application.yml
  14. 0 21
      ruoyi-admin/src/main/resources/banner.txt
  15. 72 99
      ruoyi-admin/src/main/resources/logback.xml
  16. 0 258
      ruoyi-admin/src/test/java/com/ruoyi/JasyptTest.java
  17. 5 15
      ruoyi-admin/src/test/java/com/ruoyi/TinyflowTest.java
  18. 1 1
      ruoyi-api-patform/pom.xml
  19. 0 16
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/api/SnailJobApi.java
  20. 0 64
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/config/DockerConfig.java
  21. 0 110
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/MdFlowDispatchController.java
  22. 0 268
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/PtMapController.java
  23. 0 184
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/web/SnailJobController.java
  24. 0 35
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/web/SnailJobLogController.java
  25. 11 16
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/Job.java
  26. 0 12
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/vo/JobBatchResponseVo.java
  27. 1 3
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/vo/JobRequestVo.java
  28. 0 128
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/enums/DateTypeEnum.java
  29. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/BizDataShowConfigMapper.java
  30. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/GatewayRoutesMapper.java
  31. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdAppFlowMapper.java
  32. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdAppMapper.java
  33. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdAuditMapper.java
  34. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdCatalogMapper.java
  35. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataCateMapper.java
  36. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataFieldMapper.java
  37. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataItemMapper.java
  38. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetApiMapper.java
  39. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetFileMapper.java
  40. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetMapper.java
  41. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetParamMapper.java
  42. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetSqlMapper.java
  43. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdEstimateFirmlyMapper.java
  44. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdEstimateMapper.java
  45. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdFileUoloadMapper.java
  46. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdFlowDispatchMapper.java
  47. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdForecastDataMapper.java
  48. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdForecastPlanMapper.java
  49. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdForecastStormTideMapper.java
  50. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdJobScheduleMapper.java
  51. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelAclMapper.java
  52. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelCatetoryMapper.java
  53. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelFileMapper.java
  54. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelFlowMapper.java
  55. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelInfoMapper.java
  56. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelParamsMapper.java
  57. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelPargroupMapper.java
  58. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelRunLogMapper.java
  59. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtAppMapper.java
  60. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceLogMapper.java
  61. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceLogStatisMapper.java
  62. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceMapper.java
  63. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceMonitorMapper.java
  64. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceParamMapper.java
  65. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceReturnMapper.java
  66. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceRunLogMapper.java
  67. 0 4
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/SnailJobMapper.java
  68. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/SysMetaDatasourceMapper.java
  69. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/SysMetaFieldMapper.java
  70. 1 1
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/SysMetaTableMapper.java
  71. 0 89
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/SnailJobService.java
  72. 0 133
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/impl/MdFlowDispatchServiceImpl.java
  73. 0 355
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/impl/SnailJobServiceImpl.java
  74. 0 86
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/AuthService.java
  75. 0 50
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/CleanDataJob.java
  76. 0 36
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/FlowJob.java
  77. 0 76
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/ServiceLogStatisJob.java
  78. 0 20
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/TestJob.java
  79. 9 9
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/tinyflow/TinyflowUtil.java
  80. 58 0
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/tinyflow/node/CleanDataNode.java
  81. 1 3
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/tinyflow/node/SQLNode.java
  82. 21 0
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/tinyflow/parser/CleanDataNodeParser.java
  83. 2 2
      ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/utils/DbUtils.java
  84. 1 23
      ruoyi-common/pom.xml
  85. 23 190
      ruoyi-common/src/main/java/com/ruoyi/common/transition/CleanTransition.java
  86. 67 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/AddPrefixSuffixRule.java
  87. 11 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/CleaningRule.java
  88. 94 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/DateFormatUnifiedRule.java
  89. 44 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/DeduplicateByFieldsKeepFirstRule.java
  90. 63 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/FieldValueReplaceRule.java
  91. 45 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/NormalizeEnumMappingRule.java
  92. 54 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/NumericBoundaryRule.java
  93. 59 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/RegexReplaceRule.java
  94. 49 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/RemoveEmptyCombinationRule.java
  95. 13 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/RuleType.java
  96. 51 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/StringToDateRule.java
  97. 52 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/StringToNumberRule.java
  98. 69 0
      ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/ToBooleanRule.java
  99. 1 1
      ruoyi-framework/pom.xml
  100. 1 1
      ruoyi-generator/pom.xml

+ 0 - 0
plugins/disabled.txt


BIN
plugins/gw-plugin-biz-3.8.8.jar


BIN
plugins/plugin-biz-http-3.8.8.jar


+ 2 - 17
pom.xml

@@ -6,13 +6,13 @@
 
     <groupId>com.ruoyi</groupId>
     <artifactId>sh-platform</artifactId>
-    <version>3.8.8</version>
+    <version>3.8.89</version>
 
     <name>sh-platform</name>
     <description>上海水务海洋数字孪生模型平台</description>
 
     <properties>
-        <ruoyi.version>3.8.8</ruoyi.version>
+        <ruoyi.version>3.8.89</ruoyi.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
@@ -33,7 +33,6 @@
         <velocity.version>2.3</velocity.version>
         <jwt.version>0.9.1</jwt.version>
         <dom4j.version>2.1.4</dom4j.version>
-        <snail-job.version>1.7.1-jdk8</snail-job.version>
         <docker-java.version>3.4.0</docker-java.version>
         <jaxrs-api.version>2.1.1</jaxrs-api.version>
     </properties>
@@ -236,19 +235,6 @@
                 <artifactId>ruoyi-api-patform</artifactId>
                 <version>${ruoyi.version}</version>
             </dependency>
-
-            <dependency>
-                <groupId>com.ruoyi</groupId>
-                <artifactId>ruoyi-model-dpp</artifactId>
-                <version>${ruoyi.version}</version>
-            </dependency>
-
-            <!--            <dependency>-->
-            <!--                <groupId>cn.com.goldenwater</groupId>-->
-            <!--                <artifactId>gw-cloud-id</artifactId>-->
-            <!--                <version>0.0.1-SNAPSHOT</version>-->
-            <!--            </dependency>-->
-
             <dependency>
                 <groupId>com.squareup.okhttp3</groupId>
                 <artifactId>okhttp</artifactId>
@@ -285,7 +271,6 @@
         <module>ruoyi-quartz</module>
         <module>ruoyi-generator</module>
         <module>ruoyi-common</module>
-        <module>ruoyi-model-dpp</module>
     </modules>
     <packaging>pom</packaging>
 

+ 1 - 20
ruoyi-admin/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sh-platform</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.8.8</version>
+        <version>3.8.89</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
@@ -180,30 +180,11 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-api-patform</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-model-dpp</artifactId>
-        </dependency>
         <dependency>
             <groupId>com.github.ulisesbocchio</groupId>
             <artifactId>jasypt-spring-boot-starter</artifactId>
             <version>3.0.5</version>
         </dependency>
-
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>gw-plugin-common</artifactId>
-            <version>3.8.8</version>
-            <scope>system</scope>
-            <systemPath>${project.basedir}/libs/gw-plugin-common-3.8.8.jar</systemPath>
-        </dependency>
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>gw-plugin-starter</artifactId>
-            <version>3.8.8</version>
-            <scope>system</scope>
-            <systemPath>${project.basedir}/libs/gw-plugin-starter-3.8.8.jar</systemPath>
-        </dependency>
         <dependency>
             <groupId>org.pf4j</groupId>
             <artifactId>pf4j</artifactId>

+ 5 - 18
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java

@@ -1,6 +1,5 @@
 package com.ruoyi;
 
-import com.aizuda.snailjob.client.starter.EnableSnailJob;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -9,28 +8,16 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * 启动程序
- * 
+ *
  * @author ruoyi
  */
-@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
-@EnableSnailJob
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
 @EnableScheduling
 @MapperScan("com.ruoyi.**.mapper")
-public class RuoYiApplication
-{
-    public static void main(String[] args)
-    {
+public class RuoYiApplication {
+    public static void main(String[] args) {
         // System.setProperty("spring.devtools.restart.enabled", "false");
         SpringApplication.run(RuoYiApplication.class, args);
-        System.out.println("(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  \n" +
-                " .-------.       ____     __        \n" +
-                " |  _ _   \\      \\   \\   /  /    \n" +
-                " | ( ' )  |       \\  _. /  '       \n" +
-                " |(_ o _) /        _( )_ .'         \n" +
-                " | (_,_).' __  ___(_ o _)'          \n" +
-                " |  |\\ \\  |  ||   |(_,_)'         \n" +
-                " |  | \\ `'   /|   `-'  /           \n" +
-                " |  |  \\    /  \\      /           \n" +
-                " ''-'   `'-'    `-..-'              ");
+        System.out.println("    启动成功    ");
     }
 }

+ 0 - 263
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/PluginController.java

@@ -1,263 +0,0 @@
-package com.ruoyi.web.controller.system;
-
-import cn.com.goldenwater.common.plugin.SpringPluginManager;
-import cn.com.goldenwater.common.plugin.autoconfigure.PluginProperties;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.domain.R;
-import lombok.RequiredArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
-import org.pf4j.PluginState;
-import org.pf4j.PluginWrapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.*;
-import java.util.stream.Collectors;
-
-
-/**
- * 插件管理
- *
- * @author Lipujun
- */
-
-@RestController
-@RequiredArgsConstructor
-@RequestMapping("/plugin/")
-//@ConditionalOnProperty(value = "golden.plugin.enabled", havingValue = "true")
-public class PluginController {
-
-    private PluginProperties pluginProperties;
-
-    @Autowired
-    private SpringPluginManager pluginManager;
-
-    @Autowired
-    public void setPluginProperties(PluginProperties pluginProperties) {
-        this.pluginProperties = pluginProperties;
-    }
-
-    @Autowired
-    public void setPluginManager(SpringPluginManager pluginManager) {
-        this.pluginManager = pluginManager;
-    }
-
-    /**
-     * 上传插件
-     *
-     * @param file
-     * @return
-     */
-    @PostMapping("upload")
-    public R<Void> uploadPlugin(@RequestParam("file") MultipartFile file) {
-        String path = pluginProperties.getPath();
-
-        String fileName = file.getOriginalFilename();
-        String suffixName = fileName.substring(fileName.lastIndexOf(".") + 1);
-        // 检查文件格式是否合法
-        if (StringUtils.isEmpty(suffixName)) {
-            return R.fail("文件格式不合格,请上传jar或zip文件");
-        }
-        if (!"jar".equalsIgnoreCase(suffixName) && !"zip".equalsIgnoreCase(suffixName)) {
-            return R.fail("文件格式不合格,请上传jar或zip文件");
-        }
-
-        // 第一步: 上传文件
-        try {
-            // 同名文件存在时,会出现 FileAlreadyExistsException 异常。
-            Files.copy(file.getInputStream(), Paths.get(path).resolve(file.getOriginalFilename()));
-        } catch (IOException e) {
-            return R.fail("文件重复上传!");
-        }
-
-        // 第二步: 启动插件
-        try {
-            // 加载并启动插件
-            String pluginId = pluginManager.loadPlugin(Paths.get(path, fileName));
-            PluginState state = pluginManager.startPlugin(pluginId);
-            if (state != PluginState.STARTED) {
-                return R.fail("插件启动失败");
-            }
-        } catch (Exception e) {
-            return R.fail("插件加载失败: " + e.getMessage());
-        }
-        return R.ok();
-    }
-
-    /**
-     *
-     */
-    @GetMapping("reload")
-    public void reloadPlugins() {
-        System.out.println("Reloading plugins...");
-        pluginManager.unloadPlugins();
-        pluginManager.loadPlugins();
-        pluginManager.startPlugins();
-        System.out.println("Reloading plugins success.");
-    }
-
-    /**
-     * 加载指定插件
-     *
-     * @param pluginId 插件唯一标识符
-     * @return 加载结果信息,成功时返回插件加载路径,失败时返回错误信息
-     */
-    @GetMapping("load/{pluginId}")
-    public String loadPlugin(@RequestParam() String pluginId) {
-        // 获取指定ID的插件信息
-        PluginWrapper plugin = pluginManager.getPlugin(pluginId);
-        if (plugin != null) {
-            // 如果插件存在,则加载该插件并返回加载结果
-            return pluginManager.loadPlugin(plugin.getPluginPath());
-        } else {
-            // 如果插件不存在,返回错误提示
-            return "Plugin not found";
-        }
-    }
-
-
-    /**
-     * 卸载指定的插件
-     *
-     * @param pluginId 插件唯一标识符,用于指定要卸载的插件
-     * @return 卸载操作的结果,true表示卸载成功,false表示卸载失败
-     */
-    @GetMapping("unload/{pluginId}")
-    public boolean unloadPlugin(@PathVariable String pluginId) {
-        return pluginManager.unloadPlugin(pluginId);
-    }
-
-
-    /**
-     * 启动指定插件
-     *
-     * @param pluginIds 插件唯一标识符
-     * @return 插件启动后的状态信息
-     */
-    @GetMapping("start/{pluginIds}")
-    public AjaxResult startPlugin(@PathVariable String pluginIds) {
-        Arrays.stream(pluginIds.split(","))
-                .forEach(pluginId -> pluginManager.startPlugin(pluginId));
-        return AjaxResult.success();
-    }
-
-
-    /**
-     * 停止指定插件的运行
-     *
-     * @param pluginId 插件唯一标识符,用于指定要停止的插件
-     * @return PluginState 插件停止后的状态信息
-     */
-    @GetMapping("stop/{pluginId}")
-    public PluginState stopPlugin(@PathVariable String pluginId) {
-        return pluginManager.stopPlugin(pluginId);
-    }
-
-
-    /**
-     * 禁用指定的插件
-     *
-     * @param pluginId 插件的唯一标识符
-     * @return true表示禁用成功,false表示禁用失败
-     */
-    @GetMapping("disable/{pluginId}")
-    public boolean disablePlugin(@PathVariable String pluginId) {
-        return pluginManager.disablePlugin(pluginId);
-    }
-
-
-    /**
-     * 启用指定的插件
-     *
-     * @param pluginId 插件唯一标识符
-     * @return 启用操作是否成功
-     */
-    @GetMapping("enable/{pluginId}")
-    public boolean enablePlugin(@PathVariable String pluginId) {
-        return pluginManager.enablePlugin(pluginId);
-    }
-
-
-    /**
-     * 删除指定插件
-     *
-     * @param pluginId 插件唯一标识符
-     * @return 删除操作是否成功
-     */
-    @GetMapping("delete/{pluginId}")
-    public boolean deletePlugin(@PathVariable String pluginId) {
-        Arrays.stream(pluginId.split(",")).forEach(id -> pluginManager.deletePlugin(id));
-        return true;
-    }
-
-
-    /**
-     * 获取插件列表
-     *
-     * @return 插件信息列表,每个元素为包含插件详细信息的JSONObject对象
-     */
-    @GetMapping("/list")
-    public List<Map<String, Object>> listPlugin(String name) {
-        ArrayList<Map<String, Object>> list = new ArrayList<>();
-        List<PluginWrapper> plugins = pluginManager.getPlugins();
-
-        if (StringUtils.isNotBlank(name)) {
-            plugins = plugins.stream().filter(plugin -> plugin.getPluginId().contains(name)).collect(Collectors.toList());
-        }
-        for (PluginWrapper plugin : plugins) {
-            Map<String, Object> map = new HashMap<>();
-            map.put("id", plugin.getPluginId());
-//            map.put("name", plugin.getDescriptor().getPluginName());
-            map.put("version", plugin.getDescriptor().getVersion());
-            map.put("path", plugin.getPluginPath().toString());
-            map.put("state", plugin.getPluginState());
-            map.put("class", plugin.getDescriptor().getPluginClass());
-            map.put("requires", plugin.getDescriptor().getRequires());
-            map.put("provider", plugin.getDescriptor().getProvider());
-            map.put("license", plugin.getDescriptor().getLicense());
-            map.put("dependencies", plugin.getDescriptor().getDependencies());
-            list.add(map);
-        }
-        String path = pluginProperties.getPath().toString();
-        System.out.println("plugin work path = " + path);
-        return list;
-    }
-
-    @GetMapping("/info/{pluginId}")
-    public R<Map> info(@PathVariable String pluginId) {
-        // 获取指定ID的插件信息
-        System.out.println("pluginId = " + pluginId);
-
-        PluginWrapper plugin = pluginManager.getPlugin(pluginId);
-
-
-        if (plugin == null) {
-            return R.ok("未获取到插件信息。");
-        } else {
-            Map<String, Object> map = new HashMap<String, Object>();
-            map.put("id", plugin.getPluginId());
-            map.put("version", plugin.getDescriptor().getVersion());
-            map.put("path", plugin.getPluginPath().toString());
-            map.put("state", plugin.getPluginState());
-            map.put("class", plugin.getDescriptor().getPluginClass());
-            map.put("requires", plugin.getDescriptor().getRequires());
-            map.put("provider", plugin.getDescriptor().getProvider());
-            map.put("license", plugin.getDescriptor().getLicense());
-            map.put("dependencies", plugin.getDescriptor().getDependencies());
-
-            return R.ok(map);
-        }
-    }
-
-//    @RequestMapping(value = "/extensions/list")
-//    public List<String> listExtensions() {
-//        List<PluginRegister> registers = pluginManager.getExtensions(PluginRegister.class);
-//        return registers.stream().map(PluginRegister::name).collect(Collectors.toList());
-//    }
-
-
-}

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/geo/EquiSurface2.java

@@ -66,7 +66,7 @@ public class EquiSurface2 {
             File file = new File(boundryFile);
             ShapefileDataStore shpDataStore = null;
 
-            shpDataStore = new ShapefileDataStore(file.toURL());
+            shpDataStore = new ShapefileDataStore(file.toURI().toURL());
             //   ñ
             Charset charset = Charset.forName("GBK");
             shpDataStore.setCharset(charset);

+ 11 - 43
ruoyi-admin/src/main/resources/application-dev.yml

@@ -1,12 +1,10 @@
 ruoyi:
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: /soft/sh-models/uploadPath
+  profile: D:/soft/sh-models/uploadPath
 sys:
   gateway:
     url: http://localhost:8081
-  map:
-    upload:
-      path: /soft/sh-model/map/
+
 # 数据源配置
 spring:
   datasource:
@@ -15,22 +13,13 @@ spring:
     druid:
       # 主库数据源
       master:
-        url: jdbc:dm://172.16.196.175:5236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SH_PROJECT
-        username: SH_PROJECT
-        password: ShProject@js123
+        url: jdbc:dm://39.98.38.2:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=TBA_GXPT
+        username: TBA_GXPT
+        password: Gxpt./1226
       # 从库数据源
       slave:
         # 从数据源开关/默认关闭
-        enabled: true
-        url: jdbc:dm://172.16.196.175:5236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SH_MODEL
-        username: SH_MODEL
-        password: ShModel@js123
-      job:
-        # 从数据源开关/默认关闭
-        enabled: true
-        url: jdbc:dm://172.16.196.175:5236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SNAIL_JOB
-        username: SNAIL_JOB
-        password: SnailJob@js123
+        enabled: false
       # 初始连接数
       initialSize: 5
       # 最小连接池数量
@@ -55,9 +44,9 @@ spring:
       testOnBorrow: false
       testOnReturn: false
       webStatFilter:
-        enabled: false
+        enabled: true
       statViewServlet:
-        enabled: false
+        enabled: true
         # 设置白名单,不填则允许所有访问
         allow:
         url-pattern: /druid/*
@@ -77,14 +66,13 @@ spring:
   # redis 配置
   redis:
     # 地址
-    #host: 192.168.0.146
-    host: 172.16.196.173
+    host: 39.98.38.2
     # 端口,默认为6379
-    port: 6379
+    port: 16379
     # 数据库索引
     database: 6
     # 密码
-    password: Gw./1601
+    password: ZjsthGw1125
     # 连接超时时间
     timeout: 20s
     lettuce:
@@ -97,23 +85,3 @@ spring:
         max-active: 8
         # #连接池最大阻塞等待时间(使用负值表示没有限制)
         max-wait: -1ms
-snail-job:
-  server:
-    port: 17888
-    host: 172.16.196.173
-  namespace: M18Z4tm7bKJmswwcLMlGgzLUEn5I2_A8
-  group: test_sh_group
-  token: SJ_bM5DeeFSAV6ltYwqqCKoA7v5HuwGH5Hr
-golden:
-  plugin:
-    mode: deployment
-    enabled: true
-    work-dir: /soft/plugins
-    path: /soft/plugins
-docker:
-  host: tcp://172.16.196.174:2375
-
-server:
-  monitor:
-    urls:
-      - http://172.16.196.174:18099

+ 0 - 121
ruoyi-admin/src/main/resources/application-dm.yml

@@ -1,121 +0,0 @@
-ruoyi:
-  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: D:/soft/sh-models/uploadPath
-sys:
-  gateway:
-    url: http://localhost:8081
-  map:
-    upload:
-      path: /soft/sh-model/map/
-# 数据源配置
-spring:
-  datasource:
-    type: com.alibaba.druid.pool.DruidDataSource
-    #driverClassName: com.mysql.cj.jdbc.Driver
-    driverClassName: dm.jdbc.driver.DmDriver
-    druid:
-      # 主库数据源
-      master:
-        #url: jdbc:mysql://192.168.0.146:3306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        #url: jdbc:mysql://39.98.38.2:13306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        url: jdbc:dm://192.168.0.145:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SH_PROJECT
-        username: SH_PROJECT
-        password: ShProject@js123
-      # 从库数据源
-      slave:
-        # 从数据源开关/默认关闭
-        enabled: true
-        #url: jdbc:mysql://192.168.0.146:3306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        url: jdbc:dm://192.168.0.145:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SH_MODEL
-        #url: jdbc:mysql://39.98.38.2:13306/sh_model?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        username: SH_MODEL
-        password: ShModel@js123
-      job:
-        # 从数据源开关/默认关闭
-        enabled: true
-        #url: jdbc:mysql://192.168.0.146:3306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        url: jdbc:dm://192.168.0.145:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SNAIL_JOB
-        #url: jdbc:mysql://39.98.38.2:13306/sh_model?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        username: SNAIL_JOB
-        password: SnailJob@js123
-      # 初始连接数
-      initialSize: 5
-      # 最小连接池数量
-      minIdle: 10
-      # 最大连接池数量
-      maxActive: 20
-      # 配置获取连接等待超时的时间
-      maxWait: 60000
-      # 配置连接超时时间
-      connectTimeout: 30000
-      # 配置网络超时时间
-      socketTimeout: 60000
-      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-      timeBetweenEvictionRunsMillis: 60000
-      # 配置一个连接在池中最小生存的时间,单位是毫秒
-      minEvictableIdleTimeMillis: 300000
-      # 配置一个连接在池中最大生存的时间,单位是毫秒
-      maxEvictableIdleTimeMillis: 900000
-      # 配置检测连接是否有效
-      validationQuery: SELECT 1 FROM DUAL
-      testWhileIdle: true
-      testOnBorrow: false
-      testOnReturn: false
-      webStatFilter:
-        enabled: true
-      statViewServlet:
-        enabled: true
-        # 设置白名单,不填则允许所有访问
-        allow:
-        url-pattern: /druid/*
-        # 控制台管理用户名和密码
-        login-username: ruoyi
-        login-password: 123456
-      filter:
-        stat:
-          enabled: true
-          # 慢SQL记录
-          log-slow-sql: true
-          slow-sql-millis: 1000
-          merge-sql: true
-        wall:
-          config:
-            multi-statement-allow: true
-  # redis 配置
-  redis:
-    # 地址
-    #host: 192.168.0.146
-    host: 39.98.38.2
-    # 端口,默认为6379
-    port: 16379
-    # 数据库索引
-    database: 6
-    # 密码
-    password: 123456
-    # 连接超时时间
-    timeout: 20s
-    lettuce:
-      pool:
-        # 连接池中的最小空闲连接
-        min-idle: 0
-        # 连接池中的最大空闲连接
-        max-idle: 8
-        # 连接池的最大数据库连接数
-        max-active: 8
-        # #连接池最大阻塞等待时间(使用负值表示没有限制)
-        max-wait: -1ms
-snail-job:
-  server:
-    port: 17888
-    host: 127.0.0.1
-  namespace: M18Z4tm7bKJmswwcLMlGgzLUEn5I2_A8
-  group: test_sh_group
-  token: SJ_bM5DeeFSAV6ltYwqqCKoA7v5HuwGH5Hr
-golden:
-  plugin:
-    mode: deployment
-    enabled: true
-    work-dir: D:/Workspaces/sh-model-platform/plugins
-    path: D:/Workspaces/sh-model-platform/plugins
-docker:
-  host: tcp://localhost:2375

+ 7 - 29
ruoyi-admin/src/main/resources/application-druid.yml → ruoyi-admin/src/main/resources/application-prod.yml

@@ -4,27 +4,22 @@ ruoyi:
 sys:
   gateway:
     url: http://localhost:8081
-  map:
-    upload:
-      path: /soft/sh-model/map/
+
 # 数据源配置
 spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
-    driverClassName: com.mysql.cj.jdbc.Driver
+    driverClassName: dm.jdbc.driver.DmDriver
     druid:
       # 主库数据源
       master:
-        url: jdbc:mysql://39.98.38.2:13306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        username: shmodel
-        password: shmodel#$0526
+        url: jdbc:dm://192.168.0.145:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SH_PROJECT
+        username: SH_PROJECT
+        password: ShProject@js123
       # 从库数据源
       slave:
         # 从数据源开关/默认关闭
         enabled: false
-        url: jdbc:mysql://39.98.38.2:13306/sh_sh_model?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        username: zj-hhst
-        password: ENC(10zA4Za2Kj2pvnRnLDYCWWkP71Dcsavw)
       # 初始连接数
       initialSize: 5
       # 最小连接池数量
@@ -75,7 +70,7 @@ spring:
     # 端口,默认为6379
     port: 16379
     # 数据库索引
-    database: 5
+    database: 6
     # 密码
     password: 123456
     # 连接超时时间
@@ -89,21 +84,4 @@ spring:
         # 连接池的最大数据库连接数
         max-active: 8
         # #连接池最大阻塞等待时间(使用负值表示没有限制)
-        max-wait: -1ms
-snail-job:
-  server:
-    port: 17888
-    host: 127.0.0.1
-  namespace: M18Z4tm7bKJmswwcLMlGgzLUEn5I2_A8
-  group: test_sh_group
-  token: SJ_bM5DeeFSAV6ltYwqqCKoA7v5HuwGH5Hr
-golden:
-  plugin:
-    mode: deployment
-    enabled: true
-    work-dir: D:/Workspaces/sh-model-platform/plugins
-    path: D:/Workspaces/sh-model-platform/plugins
-docker:
-  host: tcp://localhost:2375
-  registry:
-    url:
+        max-wait: -1ms

+ 0 - 132
ruoyi-admin/src/main/resources/application-test.yml

@@ -1,132 +0,0 @@
-ruoyi:
-  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: D:/soft/sh-models/uploadPath
-sys:
-  gateway:
-    url: http://localhost:8081
-  report:
-    upload:
-      path: /soft/sh-model/report/
-  chart:
-    upload:
-      path: /soft/sh-model/chart/
-  map:
-    upload:
-      path: /soft/sh-model/map/
-# 数据源配置
-spring:
-  datasource:
-    type: com.alibaba.druid.pool.DruidDataSource
-    #driverClassName: com.mysql.cj.jdbc.Driver
-    driverClassName: dm.jdbc.driver.DmDriver
-    druid:
-      # 主库数据源
-      master:
-        #url: jdbc:mysql://192.168.0.146:3306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        #url: jdbc:mysql://39.98.38.2:13306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        url: jdbc:dm://39.98.38.2:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SH_PROJECT
-        username: SH_PROJECT
-        password: ShProject@js123
-      # 从库数据源
-      slave:
-        # 从数据源开关/默认关闭
-        enabled: true
-        #url: jdbc:mysql://192.168.0.146:3306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        url: jdbc:dm://39.98.38.2:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SH_MODEL
-        #url: jdbc:mysql://39.98.38.2:13306/sh_model?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        username: SH_MODEL
-        password: ShModel@js123
-      job:
-        # 从数据源开关/默认关闭
-        enabled: true
-        #url: jdbc:mysql://192.168.0.146:3306/sh_project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        url: jdbc:dm://39.98.38.2:30236?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&schema=SNAIL_JOB
-        #url: jdbc:mysql://39.98.38.2:13306/sh_model?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        username: SNAIL_JOB
-        password: SnailJob@js123
-      # 初始连接数
-      initialSize: 5
-      # 最小连接池数量
-      minIdle: 10
-      # 最大连接池数量
-      maxActive: 20
-      # 配置获取连接等待超时的时间
-      maxWait: 60000
-      # 配置连接超时时间
-      connectTimeout: 30000
-      # 配置网络超时时间
-      socketTimeout: 60000
-      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-      timeBetweenEvictionRunsMillis: 60000
-      # 配置一个连接在池中最小生存的时间,单位是毫秒
-      minEvictableIdleTimeMillis: 300000
-      # 配置一个连接在池中最大生存的时间,单位是毫秒
-      maxEvictableIdleTimeMillis: 900000
-      # 配置检测连接是否有效
-      validationQuery: SELECT 1 FROM DUAL
-      testWhileIdle: true
-      testOnBorrow: false
-      testOnReturn: false
-      webStatFilter:
-        enabled: true
-      statViewServlet:
-        enabled: true
-        # 设置白名单,不填则允许所有访问
-        allow:
-        url-pattern: /druid/*
-        # 控制台管理用户名和密码
-        login-username: ruoyi
-        login-password: 123456
-      filter:
-        stat:
-          enabled: true
-          # 慢SQL记录
-          log-slow-sql: true
-          slow-sql-millis: 1000
-          merge-sql: true
-        wall:
-          config:
-            multi-statement-allow: true
-  # redis 配置
-  redis:
-    # 地址
-    #host: 192.168.0.146
-    host: 39.98.38.2
-    # 端口,默认为6379
-    port: 16379
-    # 数据库索引
-    database: 6
-    # 密码
-    password: ZjsthGw1125
-    # 连接超时时间
-    timeout: 20s
-    lettuce:
-      pool:
-        # 连接池中的最小空闲连接
-        min-idle: 0
-        # 连接池中的最大空闲连接
-        max-idle: 8
-        # 连接池的最大数据库连接数
-        max-active: 8
-        # #连接池最大阻塞等待时间(使用负值表示没有限制)
-        max-wait: -1ms
-snail-job:
-  server:
-    port: 17888
-    host: 127.0.0.1
-  namespace: M18Z4tm7bKJmswwcLMlGgzLUEn5I2_A8
-  group: test_sh_group
-  token: SJ_bM5DeeFSAV6ltYwqqCKoA7v5HuwGH5Hr
-golden:
-  plugin:
-    mode: deployment
-    enabled: true
-    work-dir: D:/Workspaces/sh-model-platform/plugins
-    path: D:/Workspaces/sh-model-platform/plugins
-docker:
-  host: tcp://localhost:2375
-
-server:
-  monitor:
-    urls:
-      - http://localhost:18099

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -60,7 +60,7 @@ spring:
     basename: i18n/messages
   profiles:
     # 配置文件后缀
-    active: test
+    active: dev
   # 文件上传
   servlet:
     multipart:

+ 0 - 21
ruoyi-admin/src/main/resources/banner.txt

@@ -1,24 +1,3 @@
 Application Version: ${ruoyi.version}
 Spring Boot Version: ${spring-boot.version}
 ////////////////////////////////////////////////////////////////////
-//                          _ooOoo_                               //
-//                         o8888888o                              //
-//                         88" . "88                              //
-//                         (| ^_^ |)                              //
-//                         O\  =  /O                              //
-//                      ____/`---'\____                           //
-//                    .'  \\|     |//  `.                         //
-//                   /  \\|||  :  |||//  \                        //
-//                  /  _||||| -:- |||||-  \                       //
-//                  |   | \\\  -  /// |   |                       //
-//                  | \_|  ''\---/''  |   |                       //
-//                  \  .-\__  `-`  ___/-. /                       //
-//                ___`. .'  /--.--\  `. . ___                     //
-//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
-//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
-//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
-//      ========`-.____`-.___\_____/___.-`____.-'========         //
-//                           `=---='                              //
-//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
-//             佛祖保佑       永不宕机      永无BUG               //
-////////////////////////////////////////////////////////////////////

+ 72 - 99
ruoyi-admin/src/main/resources/logback.xml

@@ -1,26 +1,28 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
 
-    <!-- job配置↓↓↓↓↓↓↓↓↓↓↓↓↓ -->
+    <!-- 定义日志路径和格式属性 -->
+    <property name="log.base" value="/soft/sh-models/logs" />
+    <property name="log.path" value="${log.base}" />
+    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{256} - %msg%n" />
 
-    <property name="log.base" value="snail-job-demo" />
-
-    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+    <!-- 控制台输出 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{256} - %msg%n
-            </Pattern>
+            <pattern>${log.pattern}</pattern>
         </encoder>
     </appender>
 
+    <!-- Info日志文件输出 -->
     <appender name="fileInfo"
               class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>/soft/${log.base}/info/info.log</file>
+        <file>${log.base}/info/info.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <FileNamePattern>./soft/${log.base}/info/info.%d{yyyy-MM-dd}.log</FileNamePattern>
-            <MaxHistory>30</MaxHistory>
+            <fileNamePattern>${log.base}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>30</maxHistory>
         </rollingPolicy>
         <layout class="ch.qos.logback.classic.PatternLayout">
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{256} - %msg%n</pattern>
+            <pattern>${log.pattern}</pattern>
         </layout>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
@@ -29,15 +31,16 @@
         </filter>
     </appender>
 
-    <appender name="fileWarn" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>/soft/${log.base}/warn/warn.log</file>
+    <!-- Warn日志文件输出 -->
+    <appender name="fileWarn" 
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.base}/warn/warn.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <FileNamePattern>/soft/${log.base}/warn/warn.%d{yyyy-MM-dd}.log
-            </FileNamePattern>
-            <MaxHistory>30</MaxHistory>
+            <fileNamePattern>${log.base}/warn/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>30</maxHistory>
         </rollingPolicy>
         <layout class="ch.qos.logback.classic.PatternLayout">
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{256} - %msg%n</pattern>
+            <pattern>${log.pattern}</pattern>
         </layout>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>WARN</level>
@@ -46,15 +49,16 @@
         </filter>
     </appender>
 
-    <appender name="fileError" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>/soft/${log.base}/error/error.log</file>
+    <!-- Error日志文件输出 -->
+    <appender name="fileError" 
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.base}/error/error.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <FileNamePattern>/soft/${log.base}/error/error.%d{yyyy-MM-dd}.log
-            </FileNamePattern>
-            <MaxHistory>30</MaxHistory>
+            <fileNamePattern>${log.base}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>30</maxHistory>
         </rollingPolicy>
         <layout class="ch.qos.logback.classic.PatternLayout">
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{256} - %msg%n</pattern>
+            <pattern>${log.pattern}</pattern>
         </layout>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>ERROR</level>
@@ -63,122 +67,91 @@
         </filter>
     </appender>
 
-    <appender name ="asyncInfo" class= "ch.qos.logback.classic.AsyncAppender">
-        <discardingThreshold >100</discardingThreshold>
+    <!-- 异步Info日志 -->
+    <appender name="asyncInfo" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>100</discardingThreshold>
         <queueSize>1024</queueSize>
-        <appender-ref ref ="fileInfo"/>
+        <appender-ref ref="fileInfo"/>
     </appender>
 
-    <appender name ="asyncWarn" class= "ch.qos.logback.classic.AsyncAppender">
-        <discardingThreshold >100</discardingThreshold>
+    <!-- 异步Warn日志 -->
+    <appender name="asyncWarn" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>100</discardingThreshold>
         <queueSize>1024</queueSize>
-        <appender-ref ref ="fileWarn"/>
+        <appender-ref ref="fileWarn"/>
     </appender>
 
-    <appender name ="asyncError" class= "ch.qos.logback.classic.AsyncAppender">
-        <discardingThreshold >100</discardingThreshold>
+    <!-- 异步Error日志 -->
+    <appender name="asyncError" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>100</discardingThreshold>
         <queueSize>1024</queueSize>
-        <appender-ref ref ="fileError"/>
+        <appender-ref ref="fileError"/>
     </appender>
 
-    <!-- Snail appender -->
-    <appender name="snailLogAppender" class="com.aizuda.snailjob.client.common.appender.SnailLogbackAppender">
-    </appender>
-
-    <!-- job配置↑↑↑↑↑↑↑↑↑↑↑↑↑ -->
-    <!-- 日志存放路径 -->
-	<property name="log.path" value="/soft/logs" />
-    <!-- 日志输出格式 -->
-	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
-
-	<!-- 控制台输出 -->
-	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<pattern>${log.pattern}</pattern>
-		</encoder>
-	</appender>
-	
-	<!-- 系统日志输出 -->
-	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
-	    <file>${log.path}/sys-info.log</file>
-        <!-- 循环政策:基于时间创建日志文件 -->
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志文件名格式 -->
-			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
-			<!-- 日志最大的历史 60天 -->
-			<maxHistory>60</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${log.pattern}</pattern>
-		</encoder>
-		<filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <!-- 过滤的级别 -->
+    <!-- 系统Info日志输出 -->
+    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sys-info.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <level>INFO</level>
-            <!-- 匹配时的操作:接收(记录) -->
             <onMatch>ACCEPT</onMatch>
-            <!-- 不匹配时的操作:拒绝(不记录) -->
             <onMismatch>DENY</onMismatch>
         </filter>
-	</appender>
-	
-	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
-	    <file>${log.path}/sys-error.log</file>
-        <!-- 循环政策:基于时间创建日志文件 -->
+    </appender>
+    
+    <!-- 系统Error日志输出 -->
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sys-error.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志文件名格式 -->
             <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
-			<!-- 日志最大的历史 60天 -->
-			<maxHistory>60</maxHistory>
+            <maxHistory>60</maxHistory>
         </rollingPolicy>
         <encoder>
             <pattern>${log.pattern}</pattern>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <!-- 过滤的级别 -->
             <level>ERROR</level>
-			<!-- 匹配时的操作:接收(记录) -->
             <onMatch>ACCEPT</onMatch>
-			<!-- 不匹配时的操作:拒绝(不记录) -->
             <onMismatch>DENY</onMismatch>
         </filter>
     </appender>
-	
-	<!-- 用户访问日志输出  -->
+    
+    <!-- 用户访问日志输出 -->
     <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${log.path}/sys-user.log</file>
+        <file>${log.path}/sys-user.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 按天回滚 daily -->
             <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
-            <!-- 日志最大的历史 60天 -->
             <maxHistory>60</maxHistory>
         </rollingPolicy>
         <encoder>
             <pattern>${log.pattern}</pattern>
         </encoder>
     </appender>
-	
-	<!-- 系统模块日志级别控制  -->
-	<logger name="com.ruoyi" level="info" />
-	<!-- Spring日志级别控制  -->
-	<logger name="org.springframework" level="warn" />
+    
+    <!-- 系统模块日志级别控制 -->
+    <logger name="com.ruoyi" level="info" />
+    <!-- Spring日志级别控制 -->
+    <logger name="org.springframework" level="warn" />
 
-	<root level="info">
-		<appender-ref ref="console" />
-	</root>
-	
-	<!--系统操作日志-->
+    <!-- 系统用户操作日志 -->
+    <logger name="sys-user" level="info">
+        <appender-ref ref="sys-user"/>
+    </logger>
+
+    <!-- 根日志配置 -->
     <root level="info">
+        <appender-ref ref="console" />
         <appender-ref ref="file_info" />
         <appender-ref ref="file_error" />
-        <appender-ref ref="stdout" />
         <appender-ref ref="asyncInfo" />
         <appender-ref ref="asyncWarn" />
         <appender-ref ref="asyncError" />
-        <appender-ref ref="snailLogAppender" />
     </root>
-	
-	<!--系统用户操作日志-->
-    <logger name="sys-user" level="info">
-        <appender-ref ref="sys-user"/>
-    </logger>
-</configuration> 
+    
+</configuration>

+ 0 - 258
ruoyi-admin/src/test/java/com/ruoyi/JasyptTest.java

@@ -1,258 +0,0 @@
-package com.ruoyi;
-
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.SM4Util;
-import com.ruoyi.interfaces.domain.*;
-import com.ruoyi.interfaces.domain.job.JobTaskBatch;
-import com.ruoyi.interfaces.domain.vo.JobTaskVo;
-import com.ruoyi.interfaces.mapper.*;
-import com.ruoyi.interfaces.service.impl.MdModelInfoServiceImpl;
-import com.ruoyi.system.mapper.SysDeptMapper;
-import com.ruoyi.system.mapper.SysRoleMapper;
-import com.ruoyi.system.mapper.SysUserMapper;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-
-@SpringBootTest(classes = RuoYiApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-@RunWith(SpringRunner.class)
-public class JasyptTest {
-    private static final Logger log = LoggerFactory.getLogger(MdModelInfoServiceImpl.class);
-    @Autowired
-    private SM4Util sm4Util;
-
-    @Autowired
-    private MdModelInfoMapper modelMapper;
-
-    @Autowired
-    private PtServiceMapper ptServiceMapper;
-    @Autowired
-    private SysMetaDatasourceMapper datasourceMapper;
-    @Autowired
-    private SysDeptMapper deptMapper;
-    @Autowired
-    private SysUserMapper userService;
-    @Autowired
-    private SysRoleMapper roleMapper;
-
-    @Autowired
-    private PtServiceLogMapper serviceLogMapper;
-
-    @Autowired
-    private SnailJobMapper snailJobMapper;
-
-
-    @Test
-    public void test() throws IOException {
-        Random random = new Random();
-
-
-        List<JobTaskBatch> jobTaskVos = snailJobMapper.selectJobTaskBatch();
-        Long dayLong = DateUtils.DAY_LONG;
-        Date stateDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD, "2025-10-15");
-
-
-        for (long i = stateDate.getTime(); i < DateUtils.getNowDate().getTime(); i += dayLong) {
-            List<Job> jobs = snailJobMapper.selectJobList(new Job());
-
-            for (int j = 0; j < 100; j++) {
-                JobTaskBatch jobTaskVo = jobTaskVos.get(random.nextInt(jobTaskVos.size() - 1));
-                Job job = jobs.get(random.nextInt(jobs.size() - 1));
-
-                jobTaskVo.setJobId(job.getId());
-                jobTaskVo.setTaskBatchStatus(3);
-                jobTaskVo.setCreateDt(new Date(i + random.nextInt(Integer.parseInt(dayLong + ""))));
-                jobTaskVo.setExecutionAt(jobTaskVo.getCreateDt().getTime()+random.nextInt(500000)+50000);
-                jobTaskVo.setUpdateDt(new Date(jobTaskVo.getExecutionAt()+random.nextInt(500000)+50000));
-                //System.out.println(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,serviceLog.getTm()));
-                snailJobMapper.insertJobTaskBatch(jobTaskVo);
-            }
-        }
-
-       /* List<PtService> ptServices = ptServiceMapper.selectAll(new PtService());
-
-
-        Long dayLong = DateUtils.DAY_LONG;
-
-        Date stateDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD, "2025-10-15");
-        for (long i = stateDate.getTime(); i < DateUtils.getNowDate().getTime(); i += dayLong) {
-            List<PtServiceLog> serviceLogs = serviceLogMapper.selectDbmsRandom();
-            for (int j = 0; j < 300; j++) {
-                PtService ptService = ptServices.get(random.nextInt(ptServices.size() - 1));
-                PtServiceLog serviceLog = serviceLogs.get(random.nextInt(199));
-                serviceLog.setSerId(serviceLog.getSerId());
-                serviceLog.setMdId(serviceLog.getMdId());
-                serviceLog.setUrl(ptService.getUrl());
-                serviceLog.setTm(new Date(i + random.nextInt(Integer.parseInt(dayLong + ""))));
-                //System.out.println(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,serviceLog.getTm()));
-                serviceLog.setLogId(null);
-                serviceLogMapper.insertPtServiceLog(serviceLog);
-            }
-        }*/
-
-
-
-
-
-
-
-
-/*        String s = SecurityUtils.encryptPassword( "Gw#$1601");
-        System.out.println(s);
-        boolean b = SecurityUtils.matchesPassword( "Gw#$1601", s);
-        System.out.println(b);*/
-
-/*
-        List<MdModelInfo> mdModelInfos = modelMapper.selectMdModelInfoList(new MdModelInfo());
-        mdModelInfos.forEach(p -> {
-            p.sign();
-            boolean b = p.verifySignature();
-            if (b){
-                log.info("MdModelInfo 验签成功"+p.toString());
-            }else {
-                log.error("验签失败:"+p.toString());
-            }
-
-        });
-
-
-        List<PtService> ptServices = ptServiceMapper.selectAllColumns(new PtService());
-        ptServices.forEach(p->{
-            p.sign();
-            boolean b = p.verifySignature();
-            if (b){
-                log.info("PtService 验签成功"+p.toString());
-            }else {
-                log.error("验签失败:"+p.toString());
-            }
-        });
-
-
-        List<SysMetaDatasource> sysMetaDatasources = datasourceMapper.selectSysMetaDatasourceList(new SysMetaDatasource());
-        sysMetaDatasources.forEach(p -> {
-            p.sign();
-            boolean b = p.verifySignature();
-            if (b){
-                log.info("SysMetaDatasource 验签成功"+p.toString());
-            }else {
-                log.error("验签失败:"+p.toString());
-            }
-        });
-
-
-        List<SysRole> sysRoles = roleMapper.selectRoleList(new SysRole());
-        sysRoles.forEach(p -> {
-            p.sign();
-            boolean b = p.verifySignature();
-            if (b){
-                log.info("SysRole 验签成功"+p.toString());
-            }else {
-                log.error("验签失败:"+p.toString());
-            }
-        });
-
-        List<SysDept> sysDepts = deptMapper.selectDeptList(new SysDept());
-        sysDepts.forEach(p -> {
-            p.sign();
-            boolean b = p.verifySignature();
-            if (b){
-                log.info("SysDept 验签成功"+p.toString());
-            }else {
-                log.error("验签失败:"+p.toString());
-            }
-        });*/
-
-       /* List<SysUser> sysUsers = userService.selectUserList(new SysUser());
-        sysUsers.forEach(p -> {
-            //p.setEmail(sm4Util.encrypt(p.getEmail()));
-            p.sign();
-            boolean b = p.verifySignature();
-            if (b){
-                log.info("SysUser 验签成功"+p.toString());
-            }else {
-                log.error("验签失败:"+p.toString());
-            }
-*//*            //System.out.println(p.getEmail());
-            System.out.println(p.getDataSignature());*//*
-        });*/
-
-
-        //System.out.println(sm4Util.encrypt("Gw#$1601"));
-/*
-
-        List<MdModelInfo> mdModelInfos = modelMapper.selectMdModelInfoList(new MdModelInfo());
-        mdModelInfos.forEach(p -> {
-            p.sign();
-            modelMapper.updateMdModelInfo(p);
-        });
-
-
-
-        List<SysMetaDatasource> sysMetaDatasources = datasourceMapper.selectSysMetaDatasourceList(new SysMetaDatasource());
-        sysMetaDatasources.forEach(p -> {
-                p.sign();
-            datasourceMapper.updateSysMetaDatasource(p);
-        });
-
-
-        List<SysRole> sysRoles = roleMapper.selectRoleList(new SysRole());
-        sysRoles.forEach(p -> {
-            p.sign();
-            roleMapper.updateRole(p);
-        });
-
-        List<SysDept> sysDepts = deptMapper.selectDeptList(new SysDept());
-        sysDepts.forEach(p -> {
-            p.sign();
-            deptMapper.updateDept(p);
-        });
-
-        List<SysUser> sysUsers = userService.selectUserList(new SysUser());
-        sysUsers.forEach(p -> {
-            //p.setEmail(sm4Util.encrypt(p.getEmail()));
-            p.sign();
-            System.out.println(p.getEmail());
-            System.out.println(p.getDataSignature());
-        });
-*/
-
-/*
-
-
-
-
-
-        String encrypt = sm4Util.decrypt("oMd930VR5zYn5ySU4ZJHPg==");
-
-        System.out.println(encrypt);
-
-
-        List<SysMetaDatasource> sysMetaDatasources = datasourceService.selectSysMetaDatasourceList(null);
-        String prettyJsonString = JSONUtils.toPrettyJsonString(sysMetaDatasources);
-        System.out.println(prettyJsonString);
-*/
-
-
-
-/*
-        String encrypt = sm4Util.encrypt("admin");
-        String common = sm4Util.encrypt("common");
-
-        System.out.println(encrypt);
-        System.out.println(common);
-*/
-
-    }
-}

+ 5 - 15
ruoyi-admin/src/test/java/com/ruoyi/TinyflowTest.java

@@ -2,29 +2,19 @@ package com.ruoyi;
 
 import com.agentsflex.core.chain.Chain;
 import com.agentsflex.core.chain.ChainEvent;
-import com.agentsflex.core.chain.ChainNode;
 import com.agentsflex.core.chain.event.ChainStartEvent;
 import com.agentsflex.core.chain.event.ChainStatusChangeEvent;
 import com.agentsflex.core.chain.event.NodeEndEvent;
 import com.agentsflex.core.chain.event.NodeStartEvent;
 import com.agentsflex.core.chain.listener.ChainEventListener;
-import com.agentsflex.core.chain.listener.ChainOutputListener;
-import com.agentsflex.llm.openai.OpenAILlm;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.ruoyi.interfaces.tinyflow.parser.PrintNodeParser;
 import com.ruoyi.interfaces.tinyflow.parser.ServiceNodeParser;
-import com.ruoyi.model.dpp.dal.dataobject.etl.DppEtlTaskDO;
-import com.ruoyi.model.etl.mapper.DppEtlTaskMapper;
 import dev.tinyflow.core.Tinyflow;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -384,13 +374,13 @@ public class TinyflowTest {
             "}";
 
     @Test
-    public void test1(){
+    public void test1() {
 
-    //public static void main(String[] args) {
-System.out.println(data1);
+        //public static void main(String[] args) {
+        System.out.println(data1);
         Tinyflow tinyflow = new Tinyflow(data1);
-        tinyflow.getChainParser().addNodeParser("printNode",new PrintNodeParser());
-        tinyflow.getChainParser().addNodeParser("serviceNode",new ServiceNodeParser());
+        tinyflow.getChainParser().addNodeParser("printNode", new PrintNodeParser());
+        tinyflow.getChainParser().addNodeParser("serviceNode", new ServiceNodeParser());
 //        tinyflow.setLlmProvider(id -> OpenAILlm.of(""));
 
         Map<String, Object> variables = new HashMap<>();

+ 1 - 1
ruoyi-api-patform/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sh-platform</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.8.8</version>
+        <version>3.8.89</version>
     </parent>
     <build>
         <plugins>

+ 0 - 16
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/api/SnailJobApi.java

@@ -1,16 +0,0 @@
-package com.ruoyi.interfaces.api;
-
-import com.aizuda.snailjob.client.job.core.handler.query.RequestQueryHandler;
-import com.ruoyi.common.annotation.DataSource;
-import com.ruoyi.common.enums.DataSourceType;
-import org.springframework.beans.factory.annotation.Value;
-
-import javax.naming.ldap.PagedResultsControl;
-
-public class SnailJobApi {
-
-
-    public static RequestQueryHandler getJobDetail(Long jobId) {
-        return new RequestQueryHandler(jobId);
-    }
-}

+ 0 - 64
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/config/DockerConfig.java

@@ -1,64 +0,0 @@
-package com.ruoyi.interfaces.config;
-
-import com.alibaba.fastjson.JSONObject;
-import com.github.dockerjava.api.DockerClient;
-import com.github.dockerjava.api.model.Info;
-import com.github.dockerjava.core.DefaultDockerClientConfig;
-import com.github.dockerjava.core.DockerClientImpl;
-import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
-import com.github.dockerjava.transport.DockerHttpClient;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.time.Duration;
-
-@Slf4j
-@Configuration
-public class DockerConfig {
-
-    @Value("${docker.host}")
-    private String dockerHost;
-
-    /**
-     * 连接docker服务器
-     *
-     * @return
-     */
-    @Bean("dockerClient")
-    public DockerClient connectDocker() {
-        try {
-            DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
-                    .withDockerTlsVerify(false)
-                    // 这里填最上面填的ip端口号,ip换成服务器ip
-                    .withDockerHost(dockerHost)
-                    // docker API版本号,可以用docker version查看
-//                .withApiVersion("1.41")
-                    // 默认
-//                .withRegistryUrl("https://index.docker.io/v1/")
-                    .build();
-
-            DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
-                    .dockerHost(config.getDockerHost())
-                    .sslConfig(config.getSSLConfig())
-                    .maxConnections(100)
-                    .connectionTimeout(Duration.ofSeconds(30))
-                    .responseTimeout(Duration.ofSeconds(45))
-                    .build();
-
-            DockerClient dockerClient = DockerClientImpl.getInstance(config, httpClient);
-
-            Info info = dockerClient.infoCmd().exec();
-            String infoStr = JSONObject.toJSONString(info);
-            log.info("docker的环境信息如下:{}", infoStr);
-            return dockerClient;
-
-        } catch (Exception e) {
-            log.warn("无法连接到 Docker 服务,Docker 功能将不可用", e);
-            // 返回一个空实现或者null(取决于你的业务逻辑如何处理)
-            return null;
-        }
-    }
-
-}

+ 0 - 110
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/MdFlowDispatchController.java

@@ -1,110 +0,0 @@
-package com.ruoyi.interfaces.controller;
-
-import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.enums.ExecutorName;
-import com.ruoyi.common.utils.Arith;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.interfaces.domain.vo.FlowDispatchBatchVo;
-import com.ruoyi.interfaces.domain.vo.JobTaskVo;
-import com.ruoyi.interfaces.domain.vo.MdFlowDispatchVo;
-import com.ruoyi.interfaces.service.IMdFlowDispatchService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-
-/**
- * 计算调度控制层
- */
-@RestController
-@RequestMapping("/flow/dispatch")
-public class MdFlowDispatchController extends BaseController {
-
-    @Autowired
-    IMdFlowDispatchService mdFlowDispatchService;
-
-    @GetMapping("/list")
-    public TableDataInfo list(MdFlowDispatchVo par) {
-        startPage();
-        return getDataTable(mdFlowDispatchService.selectFlowDispatch(par));
-    }
-
-    @GetMapping("/{id}")
-    public AjaxResult getInfo(@PathVariable String id) {
-        return success(mdFlowDispatchService.getInfo(id));
-    }
-
-
-    @PostMapping
-    public AjaxResult add(@RequestBody MdFlowDispatchVo flowDispatchVo) {
-        flowDispatchVo.setCreateBy(getUsername());
-        flowDispatchVo.setJobName(flowDispatchVo.getFlowJobName());
-        return success(mdFlowDispatchService.add(flowDispatchVo));
-    }
-
-
-    @PutMapping
-    public AjaxResult update(@RequestBody MdFlowDispatchVo flowDispatchVo) {
-        flowDispatchVo.setUpdateBy(getUsername());
-        flowDispatchVo.setJobName(flowDispatchVo.getFlowJobName());
-        Long update = mdFlowDispatchService.update(flowDispatchVo);
-        if (update.equals(0L)) return error("更新失败");
-        return success();
-    }
-
-    @DeleteMapping("/{id}")
-    public AjaxResult delete(@PathVariable String id) {
-        MdFlowDispatchVo info = mdFlowDispatchService.getInfo(id);
-        if (StringUtils.isNull(info)) return error("任务不存在");
-        if ("1".equals(info.getJobStatus())) return error("请先关闭任务");
-        Set<Long> ids = new HashSet<>();
-        ids.add(info.getId());
-        SnailJobOpenApi.deleteJob(ids).execute();
-        Long delete = mdFlowDispatchService.delete(id);
-        return success(delete);
-    }
-
-    /**
-     * 计算任务执行批次
-     *
-     * @param par
-     * @return
-     */
-
-    @GetMapping("/getBatchDataTable")
-    public TableDataInfo getBatchDataTable(FlowDispatchBatchVo par) {
-        startPage();
-        List<FlowDispatchBatchVo> data = mdFlowDispatchService.selectFlowDispatchBatch(par);
-        data.forEach(item -> {
-            if (StringUtils.isNotNull(item.getExecutionAt()) && StringUtils.isNotNull(item.getCreateDt())) {
-                double sub = Arith.sub(item.getExecutionAt(), item.getCreateDt().getTime());
-                item.setExecutionAtMi(Arith.div(sub, 1000, 2)
-                );
-            }
-
-        });
-        return getDataTable(data);
-    }
-
-
-    /**
-     * 计算任务详情
-     *
-     * @param par
-     * @return
-     */
-    @GetMapping("/getJobTaskPage")
-    public TableDataInfo getJobTaskPage(JobTaskVo par) {
-        startPage();
-
-        return getDataTable(mdFlowDispatchService.selectJobTask(par));
-    }
-
-
-}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 268
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/PtMapController.java


+ 0 - 184
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/web/SnailJobController.java

@@ -1,184 +0,0 @@
-package com.ruoyi.interfaces.controller.web;
-
-import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
-import com.aizuda.snailjob.common.core.enums.StatusEnum;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.interfaces.domain.Job;
-import com.ruoyi.interfaces.domain.job.JobLineQueryVo;
-import com.ruoyi.interfaces.domain.vo.JobRequestVo;
-import com.ruoyi.interfaces.service.SnailJobService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-import java.util.Set;
-
-@RestController
-@RequestMapping("/snail/job")
-public class SnailJobController extends BaseController {
-
-    @Autowired
-    private SnailJobService snailJobService;
-
-
-    @GetMapping("/jobList")
-    public TableDataInfo jobList(Job jobRequestVo) {
-        startPage();
-        List<Job> list = snailJobService.selectJobList(jobRequestVo);
-        return getDataTable(list);
-    }
-
-    /**
-     * 根据任务id获取job任务详情
-     *
-     * @return
-     */
-    @GetMapping("/getJobDetail")
-    public AjaxResult getJobDetail(Long jobId) {
-        return success(SnailJobOpenApi.getJobDetail(jobId).execute());
-    }
-
-    /**
-     * @return
-     */
-    @GetMapping("/getJobBatchDetail")
-    public AjaxResult getJobBatchDetail(Long jobId) {
-        return success(SnailJobOpenApi.getJobBatchDetail(jobId).execute());
-    }
-
-    /**
-     * @return
-     */
-    @GetMapping("/getWorkflowBatchDetail")
-    public AjaxResult getWorkflowBatchDetail(Long jobId) {
-        return success(SnailJobOpenApi.getWorkflowBatchDetail(jobId).execute());
-    }
-
-
-    /**
-     * 更新定时任务状态
-     *
-     * @param jobId  定时任务ID
-     * @param status
-     */
-    @GetMapping("/updateJobStatus")
-    public AjaxResult updateJobStatus(Long jobId, Long status) {
-        return success(SnailJobOpenApi
-                .updateJobStatus(jobId)
-                .setStatus(StatusEnum.YES.getStatus().equals(status.intValue()) ? StatusEnum.YES : StatusEnum.NO)
-                .execute());
-    }
-
-    /**
-     * 更新工作流任务状态
-     *
-     * @param workFlowId 工作流ID
-     * @param status
-     */
-    @GetMapping("/updateWorkFlowStatus")
-    public AjaxResult updateWorkFlowStatus(Long workFlowId, Long status) {
-        return success(SnailJobOpenApi
-                .updateWorkFlowStatus(workFlowId)
-                .setStatus(StatusEnum.YES.getStatus().equals(status.intValue()) ? StatusEnum.YES : StatusEnum.NO)
-                .execute());
-    }
-
-    /**
-     * 手动调度任务
-     *
-     * @param jobId 任务Id
-     */
-    @GetMapping("/triggerJob")
-    public AjaxResult triggerJob(Long jobId, Integer taskType) {
-        switch (taskType) {
-            case 1:
-                return success(SnailJobOpenApi.triggerClusterJob(jobId).execute());
-            case 2:
-                return success(SnailJobOpenApi.triggerBroadcastJob(jobId).execute());
-            case 3:
-                return success(SnailJobOpenApi.triggerShardingJob(jobId).execute());
-            case 4:
-                return success(SnailJobOpenApi.triggerMapJob(jobId).execute());
-            case 5:
-                return success(SnailJobOpenApi.triggerMapReduceJob(jobId).execute());
-            case 6:
-                return success(SnailJobOpenApi.triggerWorkFlow(jobId).execute());
-        }
-        return success(false);
-    }
-
-    @DeleteMapping("job")
-    public AjaxResult deleteJob(@RequestParam Set<Long> jobIds) {
-        return success(SnailJobOpenApi.deleteJob(jobIds).execute());
-    }
-
-    /**
-     * 删除工作流任务
-     *
-     * @param workflowIds 工作流任务ID
-     */
-    @DeleteMapping("workflow")
-    public AjaxResult deleteWorkflow(Set<Long> workflowIds) {
-        return success(SnailJobOpenApi.deleteWorkflow(workflowIds).execute());
-    }
-
-    /**
-     * 新增任务
-     *
-     * @param jobRequest
-     * @return
-     */
-    @PostMapping()
-    public AjaxResult saveJob(@RequestBody JobRequestVo jobRequest) {
-        switch (jobRequest.getTaskType()) {
-            case 1:
-                return success(snailJobService.addClusterJob(jobRequest));
-            case 2:
-                return success(snailJobService.addBroadcastJob(jobRequest));
-            case 3:
-                return success(snailJobService.addShardingJob(jobRequest));
-            case 4:
-                return success(snailJobService.addMapJob(jobRequest));
-            case 5:
-                return success(snailJobService.addMapReduceJob(jobRequest));
-        }
-        return success(0L);
-    }
-
-
-    /**
-     * 更新任务
-     *
-     * @param jobRequest
-     * @return
-     */
-    @PutMapping()
-    public AjaxResult updateJob(@RequestBody JobRequestVo jobRequest) {
-        switch (jobRequest.getTaskType()) {
-            case 1:
-                return success(snailJobService.updateClusterJob(jobRequest));
-            case 2:
-                return success(snailJobService.updateBroadcastJob(jobRequest));
-            case 3:
-                return success(snailJobService.updateShardingJob(jobRequest));
-            case 4:
-                return success(snailJobService.updateMapJob(jobRequest));
-            case 5:
-                return success(snailJobService.updateMapReduceJob(jobRequest));
-        }
-        return success(false);
-    }
-
-    @GetMapping("/task-retry-job")
-    public AjaxResult taskRetryJob() {
-        return AjaxResult.success(snailJobService.taskRetryJob());
-    }
-
-    @GetMapping("/line")
-    public AjaxResult jobLineList(JobLineQueryVo queryVO) {
-        return AjaxResult.success(snailJobService.jobLineList(queryVO));
-    }
-
-}

+ 0 - 35
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/web/SnailJobLogController.java

@@ -1,35 +0,0 @@
-package com.ruoyi.interfaces.controller.web;
-
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.interfaces.domain.JobLogVo;
-import com.ruoyi.interfaces.domain.vo.JobRequestVo;
-import com.ruoyi.interfaces.service.SnailJobService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/snail/job/log")
-public class SnailJobLogController extends BaseController {
-
-    @Autowired
-    private SnailJobService snailJobService;
-
-    @GetMapping("/listOfPage")
-    public TableDataInfo listOfPage(JobRequestVo jobRequestVo) {
-        startPage();
-        List<JobLogVo> list = snailJobService.listOfJobLog(jobRequestVo);
-        return getDataTable(list);
-    }
-
-    @GetMapping("/statistics")
-    public AjaxResult statistics() {
-        return AjaxResult.success(snailJobService.statistics());
-    }
-
-}

+ 11 - 16
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/Job.java

@@ -1,12 +1,10 @@
 package com.ruoyi.interfaces.domain;
 
-import com.aizuda.snailjob.common.core.enums.ExecutorTypeEnum;
-import com.aizuda.snailjob.common.core.enums.JobTaskTypeEnum;
-import com.aizuda.snailjob.common.core.enums.StatusEnum;
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.apache.ibatis.type.JdbcType;
 
 /**
  * 任务信息
@@ -15,7 +13,7 @@ import org.apache.ibatis.type.JdbcType;
  * @since 2023-09-24
  */
 @Data
-public class Job  {
+public class Job {
 
     /**
      * 主键
@@ -36,25 +34,25 @@ public class Job  {
     /**
      * 名称
      */
-    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
+    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
     private String jobName;
 
     /**
      * 执行方法参数
      */
-    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
+    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
     private String argsStr;
 
     /**
      * 参数类型 text/json
      */
-    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
+    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
     private Integer argsType;
 
     /**
      * 扩展字段
      */
-    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
+    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
     private String extAttrs;
 
     /**
@@ -64,7 +62,6 @@ public class Job  {
 
     /**
      * 重试状态 0、关闭、1、开启
-     * {@link StatusEnum}
      */
     private Integer jobStatus;
 
@@ -75,7 +72,6 @@ public class Job  {
 
     /**
      * 执行器类型 1、Java
-     * {@link ExecutorTypeEnum}
      */
     private Integer executorType;
 
@@ -92,7 +88,7 @@ public class Job  {
     /**
      * 间隔时长
      */
-    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
+    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
     private String triggerInterval;
 
     /**
@@ -117,7 +113,6 @@ public class Job  {
 
     /**
      * 任务类型
-     * {@link JobTaskTypeEnum}
      */
     private Integer taskType;
 
@@ -160,7 +155,7 @@ public class Job  {
      * 标签
      * json格式,如:{"key1":"value1","key2":"value2"}
      */
-    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
+    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
     private String labels;
 
 }

+ 0 - 12
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/vo/JobBatchResponseVo.java

@@ -1,7 +1,5 @@
 package com.ruoyi.interfaces.domain.vo;
 
-import com.aizuda.snailjob.model.request.CallbackConfig;
-import com.aizuda.snailjob.model.request.DecisionConfigRequest;
 import lombok.Data;
 
 import java.util.Date;
@@ -67,16 +65,6 @@ public class JobBatchResponseVo {
      */
     private String executorInfo;
 
-    /**
-     * 工作流的回调节点信息
-     */
-    private CallbackConfig callback;
-
-    /**
-     * 工作流的决策节点信息
-     */
-    private DecisionConfigRequest decision;
-
     /**
      * 工作流批次id
      */

+ 1 - 3
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/vo/JobRequestVo.java

@@ -1,11 +1,9 @@
 package com.ruoyi.interfaces.domain.vo;
 
-import com.aizuda.snailjob.model.request.base.JobRequest;
-
 import java.util.Date;
 import java.util.HashMap;
 
-public class JobRequestVo extends JobRequest {
+public class JobRequestVo {
     private HashMap<String, Object> argsStrMap;
 
     private String[] shardingArgs;

+ 0 - 128
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/enums/DateTypeEnum.java

@@ -1,128 +0,0 @@
-package com.ruoyi.interfaces.enums;
-
-import cn.hutool.core.date.LocalDateTimeUtil;
-import com.aizuda.snailjob.common.core.util.StreamUtils;
-import com.ruoyi.interfaces.domain.job.DashboardLineResponseVO;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.TemporalAdjusters;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Consumer;
-import java.util.function.Function;
-
-/**
- * @author: byteblogs
- * @date: 2020/1/19 20:36
- */
-@AllArgsConstructor
-@Getter
-public enum DateTypeEnum {
-    /**
-     * 天(按小时)
-     */
-    DAY(
-            voList -> {
-                Map<String, DashboardLineResponseVO> responseVoMap = StreamUtils.toIdentityMap(voList,
-                        DashboardLineResponseVO::getCreateDt);
-                int hourNow = LocalDateTime.now().getHour();
-                for (int hourOffset = 0; hourOffset <= hourNow; hourOffset++) {
-                    String createDt = LocalDateTime.now().plusHours(hourOffset).format(DateTimeFormatter.ofPattern("HH"));
-                    if (!responseVoMap.containsKey(createDt)) {
-                        voList.add(buildZeroedVoWithCreateDt(createDt));
-                    }
-                }
-            },
-            (startTime) -> LocalDateTimeUtil.beginOfDay(startTime),
-            (endTime) -> LocalDateTimeUtil.endOfDay(endTime)
-    ),
-
-    /**
-     * 周
-     */
-    WEEK(
-            voList -> {
-                Map<String, DashboardLineResponseVO> responseVoMap = StreamUtils.toIdentityMap(
-                        voList, DashboardLineResponseVO::getCreateDt);
-                for (int dayOffset = 0; dayOffset < 7; dayOffset++) {
-                    String createDt = LocalDateTime.now().minusDays(dayOffset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                    if (!responseVoMap.containsKey(createDt)) {
-                        voList.add(buildZeroedVoWithCreateDt(createDt));
-                    }
-                }
-            },
-            (startTime) -> LocalDateTimeUtil.beginOfDay(startTime).minusDays(7),
-            (endTime) -> LocalDateTimeUtil.endOfDay(endTime)
-    ),
-
-    /**
-     * 月
-     */
-    MONTH(
-            voList -> {
-                Map<String, DashboardLineResponseVO> responseVoMap = StreamUtils.toIdentityMap(
-                        voList, DashboardLineResponseVO::getCreateDt);
-                int lastDayOfMonth = LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
-                for (int dayOffset = 0; dayOffset < lastDayOfMonth; dayOffset++) {
-                    String createDt = LocalDate.now().minusDays(dayOffset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                    if (!responseVoMap.containsKey(createDt)) {
-                        voList.add(buildZeroedVoWithCreateDt(createDt));
-                    }
-                }
-            },
-            (startTime) -> LocalDateTimeUtil.beginOfDay(startTime).minusMonths(1),
-            (endTime) -> LocalDateTimeUtil.endOfDay(endTime)
-    ),
-
-    /**
-     * 年
-     */
-    YEAR(
-            voList -> {
-                Map<String, DashboardLineResponseVO> responseVoMap = StreamUtils.toIdentityMap(
-                        voList, DashboardLineResponseVO::getCreateDt);
-                for (int monthOffset = 0; monthOffset < 12; monthOffset++) {
-                    String createDt = LocalDateTime.now().minusMonths(monthOffset).format(DateTimeFormatter.ofPattern("yyyy-MM"));
-                    if (!responseVoMap.containsKey(createDt)) {
-                        voList.add(buildZeroedVoWithCreateDt(createDt));
-                    }
-                }
-            },
-            (startTime) -> LocalDateTimeUtil.beginOfDay(LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear())),
-            (endTime) -> LocalDateTimeUtil.endOfDay(LocalDateTime.now().with(TemporalAdjusters.lastDayOfYear()))
-    ),
-
-    /**
-     * 其他类型
-     */
-    OTHERS(
-            voList -> {
-            },
-            (startTime) -> LocalDateTimeUtil.beginOfDay(startTime),
-            (endTime) -> LocalDateTimeUtil.endOfDay(endTime));
-
-    private Consumer<List<DashboardLineResponseVO>> consumer;
-    private Function<LocalDateTime, LocalDateTime> startTime;
-    private Function<LocalDateTime, LocalDateTime> endTime;
-
-    private static DashboardLineResponseVO buildZeroedVoWithCreateDt(String createDt) {
-        return new DashboardLineResponseVO()
-                .setTotal(0L)
-                .setTotalNum(0L)
-                .setFail(0L)
-                .setFailNum(0L)
-                .setMaxCountNum(0L)
-                .setRunningNum(0L)
-                .setSuccess(0L)
-                .setSuccessNum(0L)
-                .setSuspendNum(0L)
-                .setStop(0L)
-                .setCancel(0L)
-                .setCreateDt(createDt);
-    }
-
-}

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/BizDataShowConfigMapper.java

@@ -14,7 +14,7 @@ import java.util.List;
  * @date 2025-07-15
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface BizDataShowConfigMapper {
 
     int insert(BizDataShowConfig entity);

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/GatewayRoutesMapper.java

@@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
 import java.util.List;
 
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface GatewayRoutesMapper {
 
     int insert(GatewayRoutes entity);

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdAppFlowMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdAppFlow;
  * @author 朱得糠
  * @date 2025-08-19
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdAppFlowMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdAppMapper.java

@@ -17,7 +17,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @date 2025-08-19
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdAppMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdAuditMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdAudit;
  * @author 朱得糠
  * @date 2025-09-23
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdAuditMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdCatalogMapper.java

@@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdCatalogMapper {
 
     int insertCatalog(MdCatalog catalog);

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataCateMapper.java

@@ -12,7 +12,7 @@ import java.util.List;
  * @author 朱得糠
  * @date 2025-07-25
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdDataCateMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataFieldMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdDataField;
  * @author 朱得糠
  * @date 2025-09-04
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdDataFieldMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataItemMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdDataItem;
  * @author ruoyi
  * @date 2025-07-25
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdDataItemMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetApiMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdDataSetApi;
  * @author 朱得糠
  * @date 2025-09-02
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdDataSetApiMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetFileMapper.java

@@ -13,7 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @author 朱得糠
  * @date 2025-09-02
  */
-@DataSource(DataSourceType.SLAVE)
+
 @Mapper
 public interface MdDataSetFileMapper 
 {

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetMapper.java

@@ -12,7 +12,7 @@ import java.util.List;
  * @author 朱得糠
  * @date 2025-07-30
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdDataSetMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetParamMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdDataSetParam;
  * @author 朱得糠
  * @date 2025-09-03
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdDataSetParamMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdDataSetSqlMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdDataSetSql;
  * @author 朱得糠
  * @date 2025-09-02
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdDataSetSqlMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdEstimateFirmlyMapper.java

@@ -17,7 +17,7 @@ import java.util.List;
  * @date 2025-10-28
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdEstimateFirmlyMapper {
     /**
      * 查询模型评价认定

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdEstimateMapper.java

@@ -15,7 +15,7 @@ import java.util.List;
  * @date 2025-10-19
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdEstimateMapper
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdFileUoloadMapper.java

@@ -14,7 +14,7 @@ import java.util.List;
  * @date 2025-11-01
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdFileUoloadMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdFlowDispatchMapper.java

@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
 import java.util.List;
 
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdFlowDispatchMapper {
     Long insertMdFlowJob(MdFlowDispatchVo jobRequest);
 

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdForecastDataMapper.java

@@ -12,7 +12,7 @@ import java.util.List;
  * @author ruoyi
  * @date 2025-11-07
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdForecastDataMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdForecastPlanMapper.java

@@ -12,7 +12,7 @@ import java.util.List;
  * @author ruoyi
  * @date 2025-11-07
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdForecastPlanMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdForecastStormTideMapper.java

@@ -12,7 +12,7 @@ import java.util.List;
  * @author ruoyi
  * @date 2025-11-12
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdForecastStormTideMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdJobScheduleMapper.java

@@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Param;
 import java.util.Date;
 
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdJobScheduleMapper {
     Date selectScheduleByProCode(@Param("proCode") String proCode);
 

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelAclMapper.java

@@ -14,7 +14,7 @@ import java.util.List;
  * @date 2025-07-15
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdModelAclMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelCatetoryMapper.java

@@ -14,7 +14,7 @@ import java.util.List;
  * @date 2025-07-15
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdModelCatetoryMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelFileMapper.java

@@ -15,7 +15,7 @@ import java.util.List;
  * @date 2025-07-15
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdModelFileMapper extends BaseMapper<MdModelFile> {
     /**
      * 查询模型文件信息

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelFlowMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdModelFlow;
  * @author 朱得糠
  * @date 2025-08-02
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdModelFlowMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelInfoMapper.java

@@ -14,7 +14,7 @@ import org.apache.ibatis.annotations.Param;
  * @author 朱得糠
  * @date 2025-07-31
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdModelInfoMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelParamsMapper.java

@@ -14,7 +14,7 @@ import java.util.List;
  * @date 2025-07-15
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdModelParamsMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelPargroupMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.MdModelPargroup;
  * @author 朱得糠
  * @date 2025-08-01
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdModelPargroupMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/MdModelRunLogMapper.java

@@ -12,7 +12,7 @@ import java.util.List;
  * @author ruoyi
  * @date 2025-11-02
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface MdModelRunLogMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtAppMapper.java

@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface PtAppMapper {
 
     int insert(PtApp entity);

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceLogMapper.java

@@ -16,7 +16,7 @@ import java.util.List;
  * @date 2025-09-01
  */
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface PtServiceLogMapper
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceLogStatisMapper.java

@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
 import java.util.List;
 
 @Mapper
-@DataSource(DataSourceType.SLAVE)
+
 public interface PtServiceLogStatisMapper {
     PtServiceLogStatisVo getInfoPtServiceLogStatis(PtServiceLogStatis serviceLogStatis);
 

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceMapper.java

@@ -13,7 +13,7 @@ import org.springframework.stereotype.Repository;
 import java.util.List;
 
 @Repository
-@DataSource(DataSourceType.SLAVE)
+
 public interface PtServiceMapper extends BaseMapper<PtService> {
 
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceMonitorMapper.java

@@ -7,7 +7,7 @@ import java.util.List;
 import java.util.Map;
 
 
-@DataSource(DataSourceType.SLAVE)
+
 public interface PtServiceMonitorMapper {
 
     List<Map<String, Object>> viewNumByCity();

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceParamMapper.java

@@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository;
 import java.util.List;
 
 @Repository
-@DataSource(DataSourceType.SLAVE)
+
 public interface PtServiceParamMapper {
 
     int deleteByPrimaryKey(PtServiceParamKey key);

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceReturnMapper.java

@@ -13,7 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
  * @author 朱得糠
  * @date 2025-08-29
  */
-@DataSource(DataSourceType.SLAVE)
+
 @Mapper
 public interface PtServiceReturnMapper 
 {

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/PtServiceRunLogMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.PtServiceRunLog;
  * @author 朱得糠
  * @date 2025-09-23
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface PtServiceRunLogMapper 
 {
     /**

+ 0 - 4
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/SnailJobMapper.java

@@ -1,18 +1,14 @@
 package com.ruoyi.interfaces.mapper;
 
-import com.ruoyi.common.annotation.DataSource;
-import com.ruoyi.common.enums.DataSourceType;
 import com.ruoyi.interfaces.domain.Job;
 import com.ruoyi.interfaces.domain.JobLogVo;
 import com.ruoyi.interfaces.domain.job.JobTaskBatch;
 import com.ruoyi.interfaces.domain.vo.JobRequestVo;
-import com.ruoyi.interfaces.domain.vo.JobTaskVo;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
 
 @Mapper
-@DataSource(DataSourceType.JOB)
 public interface SnailJobMapper {
     List<Job> selectJobList(Job jobRequestVo);
 

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/SysMetaDatasourceMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.SysMetaDatasource;
  * @author 朱得糠
  * @date 2025-08-02
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface SysMetaDatasourceMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/SysMetaFieldMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.SysMetaField;
  * @author 朱得糠
  * @date 2025-08-02
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface SysMetaFieldMapper 
 {
     /**

+ 1 - 1
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/mapper/SysMetaTableMapper.java

@@ -12,7 +12,7 @@ import com.ruoyi.interfaces.domain.SysMetaTable;
  * @author 朱得糠
  * @date 2025-08-02
  */
-@DataSource(DataSourceType.SLAVE)
+
 public interface SysMetaTableMapper 
 {
     /**

+ 0 - 89
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/SnailJobService.java

@@ -1,89 +0,0 @@
-package com.ruoyi.interfaces.service;
-
-import com.ruoyi.interfaces.domain.Job;
-import com.ruoyi.interfaces.domain.JobLogVo;
-import com.ruoyi.interfaces.domain.job.DashboardLineResponseVO;
-import com.ruoyi.interfaces.domain.job.JobLineQueryVo;
-import com.ruoyi.interfaces.domain.job.JobTask;
-import com.ruoyi.interfaces.domain.vo.JobRequestVo;
-
-import java.util.List;
-import java.util.Map;
-
-public interface SnailJobService {
-    List<Job> selectJobList(Job jobRequestVo);
-
-    public Long addClusterJob(JobRequestVo jobRequest);
-
-    public Boolean updateClusterJob(JobRequestVo jobRequest);
-
-    /**
-     * 新增广播模式的任务
-     *
-     * @param jobRequest
-     * @return
-     */
-    public Long addBroadcastJob(JobRequestVo jobRequest);
-
-    /**
-     * 修改广播任务
-     */
-    public Boolean updateBroadcastJob(JobRequestVo jobRequest);
-
-    /**
-     * 新增Sharding模式的任务
-     *
-     * @param jobRequest 任务名称
-     * @return 任务id
-     */
-    public Long addShardingJob(JobRequestVo jobRequest);
-
-    /**
-     * 修改Sharding模式的任务
-     *
-     * @param jobRequest 任务名称
-     * @return 任务id
-     */
-    public Boolean updateShardingJob(JobRequestVo jobRequest);
-
-    /**
-     * 新增Map模式的任务
-     *
-     * @param jobRequest 任务名称
-     * @return 任务id
-     */
-    public Long addMapJob(JobRequestVo jobRequest);
-
-
-    /**
-     * 修改Map模式的任务
-     *
-     * @param jobRequest
-     * @return
-     */
-    public Boolean updateMapJob(JobRequestVo jobRequest);
-
-    /**
-     * 新增MapReduce模式的任务
-     *
-     * @param jobRequest
-     * @return 任务id
-     */
-    public Long addMapReduceJob(JobRequestVo jobRequest);
-
-    /**
-     * 修改MapReduce模式的任务
-     *
-     * @param jobRequest
-     * @return 任务id
-     */
-    public Boolean updateMapReduceJob(JobRequestVo jobRequest);
-
-    List<JobLogVo> listOfJobLog(JobRequestVo jobRequestVo);
-
-    Map<String, Long> statistics();
-
-    JobTask taskRetryJob();
-
-    List<DashboardLineResponseVO> jobLineList(JobLineQueryVo queryVO);
-}

+ 0 - 133
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/impl/MdFlowDispatchServiceImpl.java

@@ -1,133 +0,0 @@
-package com.ruoyi.interfaces.service.impl;
-
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.interfaces.domain.vo.FlowDispatchBatchVo;
-import com.ruoyi.interfaces.domain.vo.JobTaskVo;
-import com.ruoyi.interfaces.domain.vo.MdFlowDispatchVo;
-import com.ruoyi.interfaces.mapper.MdFlowDispatchMapper;
-import com.ruoyi.interfaces.service.IMdAppFlowService;
-import com.ruoyi.interfaces.service.IMdFlowDispatchService;
-import com.ruoyi.interfaces.service.SnailJobService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-
-@Service
-public class MdFlowDispatchServiceImpl implements IMdFlowDispatchService {
-
-    @Autowired
-    private SnailJobService snailJobService;
-
-    @Autowired
-    private MdFlowDispatchMapper flowDispatchMapper;
-
-    @Autowired
-    private IMdAppFlowService appFlowService;
-
-    @Override
-    public Long add(MdFlowDispatchVo jobRequest) {
-
-        HashMap<String, Object> argsMap = new HashMap<>();
-        argsMap.put("appId", jobRequest.getAppId());
-        argsMap.put("params", jobRequest.getFlowParam());
-
-
-        jobRequest.setArgsStrMap(argsMap);
-
-        Long jobId = null;
-        switch (jobRequest.getTaskType()) {
-            case 1:
-                jobId = snailJobService.addClusterJob(jobRequest);
-                break;
-            case 2:
-                jobId = snailJobService.addBroadcastJob(jobRequest);
-                break;
-            case 3:
-                jobId = snailJobService.addShardingJob(jobRequest);
-                break;
-            case 4:
-                jobId = snailJobService.addMapJob(jobRequest);
-                break;
-            case 5:
-                jobId = snailJobService.addMapReduceJob(jobRequest);
-                break;
-        }
-        jobRequest.setId(jobId);
-        jobRequest.setCreateTime(DateUtils.getNowDate());
-        jobRequest.setFlowJobId(IdUtils.fastUUID());
-        return flowDispatchMapper.insertMdFlowJob(jobRequest);
-    }
-
-    @Override
-    public List<MdFlowDispatchVo> selectFlowDispatch(MdFlowDispatchVo par) {
-
-        return flowDispatchMapper.selectFlowDispatch(par);
-    }
-
-    @Override
-    public MdFlowDispatchVo getInfo(String id) {
-        MdFlowDispatchVo info = flowDispatchMapper.getInfo(id);
-        if (StringUtils.isNull(info)) return info;
-        info.initFlowParam();
-        return info;
-    }
-
-    @Override
-    public Long update(MdFlowDispatchVo flowDispatchVo) {
-        flowDispatchVo.flowParamStringSetNull();
-
-        HashMap<String, Object> argsMap = new HashMap<>();
-        argsMap.put("appId", flowDispatchVo.getAppId());
-        argsMap.put("params", flowDispatchVo.getFlowParam());
-
-
-        flowDispatchVo.setArgsStrMap(argsMap);
-
-        Boolean updateState = false;
-        switch (flowDispatchVo.getTaskType()) {
-            case 1:
-                updateState = snailJobService.updateClusterJob(flowDispatchVo);
-                break;
-            case 2:
-                updateState = snailJobService.updateBroadcastJob(flowDispatchVo);
-                break;
-            case 3:
-                updateState = snailJobService.updateShardingJob(flowDispatchVo);
-                break;
-            case 4:
-                updateState = snailJobService.updateMapJob(flowDispatchVo);
-                break;
-            case 5:
-                updateState = snailJobService.updateMapReduceJob(flowDispatchVo);
-                break;
-        }
-        if (!updateState) {
-            return 0L;
-        }
-
-        return flowDispatchMapper.updateMdFlowJob(flowDispatchVo);
-    }
-
-    @Override
-    public Long delete(String id) {
-
-        return flowDispatchMapper.deleteMdFlowJobById(id);
-    }
-
-    @Override
-    public List<FlowDispatchBatchVo> selectFlowDispatchBatch(FlowDispatchBatchVo par) {
-
-        return flowDispatchMapper.selectFlowDispatchBatch(par);
-    }
-
-    @Override
-    public List<JobTaskVo> selectJobTask(JobTaskVo par) {
-
-        return flowDispatchMapper.selectJobTask(par);
-    }
-}

+ 0 - 355
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/impl/SnailJobServiceImpl.java

@@ -1,355 +0,0 @@
-package com.ruoyi.interfaces.service.impl;
-
-import cn.hutool.core.util.ObjUtil;
-import com.aizuda.snailjob.client.job.core.enums.AllocationAlgorithmEnum;
-import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum;
-import com.aizuda.snailjob.client.job.core.handler.add.BroadcastAddHandler;
-import com.aizuda.snailjob.client.job.core.handler.add.ClusterAddHandler;
-import com.aizuda.snailjob.client.job.core.handler.update.BroadcastUpdateHandler;
-import com.aizuda.snailjob.client.job.core.handler.update.ClusterUpdateHandler;
-import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
-import com.aizuda.snailjob.common.core.enums.JobBlockStrategyEnum;
-import com.aizuda.snailjob.common.core.enums.StatusEnum;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.interfaces.domain.Job;
-import com.ruoyi.interfaces.domain.JobLogVo;
-import com.ruoyi.interfaces.domain.job.DashboardLineResponseVO;
-import com.ruoyi.interfaces.domain.job.JobLineQueryVo;
-import com.ruoyi.interfaces.domain.job.JobSummary;
-import com.ruoyi.interfaces.domain.job.JobTask;
-import com.ruoyi.interfaces.domain.vo.JobRequestVo;
-import com.ruoyi.interfaces.enums.DashboardLineEnum;
-import com.ruoyi.interfaces.enums.DateTypeEnum;
-import com.ruoyi.interfaces.mapper.JobSummaryMapper;
-import com.ruoyi.interfaces.mapper.SnailJobMapper;
-import com.ruoyi.interfaces.service.SnailJobService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.*;
-
-@Service
-public class SnailJobServiceImpl implements SnailJobService {
-
-    @Value("${snail-job.group}")
-    private String groupName;
-
-
-    @Autowired
-    private SnailJobMapper snailJobMapper;
-
-    @Autowired
-    private JobSummaryMapper jobSummaryMapper;
-
-    @Override
-    public List<Job> selectJobList(Job jobRequestVo) {
-        jobRequestVo.setGroupName(groupName);
-        return snailJobMapper.selectJobList(jobRequestVo);
-    }
-
-    /**
-     * 新增集群模式的任务
-     *
-     * @param jobRequest
-     * @return 任务id
-     */
-    public Long addClusterJob(JobRequestVo jobRequest) {
-        ClusterAddHandler clusterAddHandler = SnailJobOpenApi.addClusterJob()
-                //.setRouteKey(AllocationAlgorithmEnum.RANDOM)
-                .setRouteKey(getAllocationAlgorithmEnum(jobRequest.getRouteKey()))
-                .setJobName(jobRequest.getJobName())//
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .setJobStatus(StatusEnum.of(jobRequest.getJobStatus()))  //状态不能为空
-                .setRetryInterval(jobRequest.getRetryInterval());
-
-        HashMap<String, Object> argsMap = jobRequest.getArgsStrMap();
-        if (StringUtils.isNotEmpty(argsMap)) {
-            argsMap.forEach(clusterAddHandler::addArgsStr);
-        }
-        return clusterAddHandler.execute();
-    }
-
-    /**
-     * 修改集群模式的任务
-     */
-    public Boolean updateClusterJob(JobRequestVo jobRequest) {
-        ClusterUpdateHandler clusterUpdateHandler = SnailJobOpenApi.updateClusterJob(jobRequest.getId())
-                .setRouteKey(getAllocationAlgorithmEnum(jobRequest.getRouteKey()))
-                .setJobName(jobRequest.getJobName())//
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .setRetryInterval(jobRequest.getRetryInterval());
-
-        HashMap<String, Object> argsMap = jobRequest.getArgsStrMap();
-        if (StringUtils.isNotEmpty(argsMap)) {
-            argsMap.forEach(clusterUpdateHandler::addArgsStr);
-        }
-
-        return clusterUpdateHandler.execute();
-
-    }
-
-
-    /**
-     * 新增广播模式的任务
-     *
-     * @param jobRequest
-     * @return
-     */
-    public Long addBroadcastJob(JobRequestVo jobRequest) {
-        BroadcastAddHandler broadcastAddHandler = SnailJobOpenApi.addBroadcastJob()
-                .setJobName(jobRequest.getJobName())
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .setJobStatus(StatusEnum.of(jobRequest.getJobStatus()))  //状态不能为空
-                .setRetryInterval(jobRequest.getRetryInterval());
-        HashMap<String, Object> argsMap = jobRequest.getArgsStrMap();
-        if (StringUtils.isNotEmpty(argsMap)) {
-            argsMap.forEach(broadcastAddHandler::addArgsStr);
-        }
-        return broadcastAddHandler.execute();
-    }
-
-
-    /**
-     * 修改广播任务
-     */
-    public Boolean updateBroadcastJob(JobRequestVo jobRequest) {
-        BroadcastUpdateHandler broadcastUpdateHandler = SnailJobOpenApi.updateBroadcastJob(jobRequest.getId())
-                .setJobName(jobRequest.getJobName())
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .setRetryInterval(jobRequest.getRetryInterval());
-        HashMap<String, Object> argsMap = jobRequest.getArgsStrMap();
-        if (StringUtils.isNotEmpty(argsMap)) {
-            argsMap.forEach(broadcastUpdateHandler::addArgsStr);
-        }
-        return broadcastUpdateHandler.execute();
-    }
-
-    /**
-     * 新增Sharding模式的任务
-     *
-     * @param jobRequest 任务名称
-     * @return 任务id
-     */
-    public Long addShardingJob(JobRequestVo jobRequest) {
-        return SnailJobOpenApi.addShardingJob()
-                .setJobName(jobRequest.getJobName())
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .addShardingArgs(jobRequest.getShardingArgs())
-                .setParallelNum(jobRequest.getParallelNum())
-                .setJobStatus(StatusEnum.of(jobRequest.getJobStatus()))  //状态不能为空
-                .setRetryInterval(jobRequest.getRetryInterval())
-                .execute();
-    }
-
-    /**
-     * 修改Sharding模式的任务
-     *
-     * @param jobRequest 任务名称
-     * @return 任务id
-     */
-    public Boolean updateShardingJob(JobRequestVo jobRequest) {
-        return SnailJobOpenApi.updateShardingJob(jobRequest.getId())
-                .setJobName(jobRequest.getJobName())
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .addShardingArgs(jobRequest.getShardingArgs())
-                .setParallelNum(jobRequest.getParallelNum())
-                .setRetryInterval(jobRequest.getRetryInterval())
-                .execute();
-    }
-
-    /**
-     * 新增Map模式的任务
-     *
-     * @param jobRequest 任务名称
-     * @return 任务id
-     */
-    public Long addMapJob(JobRequestVo jobRequest) {
-        return SnailJobOpenApi.addMapJob()
-                .setJobName(jobRequest.getJobName())
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .setParallelNum(jobRequest.getParallelNum())
-                .setRetryInterval(jobRequest.getRetryInterval())
-                .setJobStatus(StatusEnum.of(jobRequest.getJobStatus()))  //状态不能为空
-                .execute();
-    }
-
-    /**
-     * 修改Map模式的任务
-     *
-     * @param jobRequest
-     * @return
-     */
-    public Boolean updateMapJob(JobRequestVo jobRequest) {
-        return SnailJobOpenApi.updateMapJob(jobRequest.getId())
-                .setJobName(jobRequest.getJobName())
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .setParallelNum(jobRequest.getParallelNum())
-                .setRetryInterval(jobRequest.getRetryInterval())
-                .execute();
-    }
-
-    /**
-     * 新增MapReduce模式的任务
-     *
-     * @param jobRequest
-     * @return 任务id
-     */
-    public Long addMapReduceJob(JobRequestVo jobRequest) {
-        return SnailJobOpenApi.addMapReduceJob()
-                .setJobName(jobRequest.getJobName())
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .setParallelNum(jobRequest.getParallelNum())
-                .setShardNum(jobRequest.getShardNum())
-                .setRetryInterval(jobRequest.getRetryInterval())
-                .execute();
-    }
-
-    /**
-     * 修改MapReduce模式的任务
-     *
-     * @param jobRequest
-     * @return 任务id
-     */
-    public Boolean updateMapReduceJob(JobRequestVo jobRequest) {
-        return SnailJobOpenApi.updateMapReduceJob(jobRequest.getId())
-                .setJobName(jobRequest.getJobName())
-                .setExecutorInfo(jobRequest.getExecutorInfo())
-                .setExecutorTimeout(jobRequest.getExecutorTimeout())
-                .setDescription(jobRequest.getDescription())
-                .setBlockStrategy(JobBlockStrategyEnum.valueOf(jobRequest.getBlockStrategy()))
-                .setMaxRetryTimes(jobRequest.getMaxRetryTimes())
-                .setTriggerType(getTriggerTypeEnum(jobRequest.getTriggerType()))
-                .setTriggerInterval(jobRequest.getTriggerInterval())
-                .setParallelNum(jobRequest.getParallelNum())
-                .setShardNum(jobRequest.getShardNum())
-                .setRetryInterval(jobRequest.getRetryInterval())
-                .execute();
-
-    }
-
-    @Override
-    public List<JobLogVo> listOfJobLog(JobRequestVo jobRequestVo) {
-        return snailJobMapper.listOfJobLog(jobRequestVo);
-    }
-
-    @Override
-    public Map<String, Long> statistics() {
-        Map<String, Long> ret = new HashMap<>();
-        List<Job> jobs = snailJobMapper.selectJobList(null);
-        ret.put("total", jobs.stream().count());
-        Long jobRuns = snailJobMapper.listOfJobLogCount(null);
-        ret.put("runTotal", jobRuns);
-        JobRequestVo jobRequestVo = new JobRequestVo();
-        jobRequestVo.setStartTime(new Date());
-        Long nowJobRuns = snailJobMapper.listOfJobLogCount(jobRequestVo);
-        ret.put("nowRunTotal", nowJobRuns);
-        JobRequestVo jobRequestVo2 = new JobRequestVo();
-        jobRequestVo2.setStartTime(DateUtils.parseDate(DateUtils.dateTimeBeforeDays(DateUtils.YYYY_MM_DD, 30)));
-        Long monthJobRuns = snailJobMapper.listOfJobLogCount(jobRequestVo2);
-        ret.put("monthRunTotal", monthJobRuns);
-        return ret;
-    }
-
-
-    public AllocationAlgorithmEnum getAllocationAlgorithmEnum(Integer type) {
-        for (AllocationAlgorithmEnum algorithm : AllocationAlgorithmEnum.values()) {
-            if (type.equals(algorithm.getType())) {
-                return algorithm;
-            }
-        }
-        return null;
-    }
-
-    public TriggerTypeEnum getTriggerTypeEnum(Integer type) {
-        for (TriggerTypeEnum triggerTypeEnum : TriggerTypeEnum.values()) {
-            if (type.equals(triggerTypeEnum.getType())) {
-                return triggerTypeEnum;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public JobTask taskRetryJob() {
-        JobSummary jobSummary = new JobSummary();
-        jobSummary.setSystemTaskType(3);
-        return jobSummaryMapper.selectJobTask(jobSummary);
-    }
-
-    @Override
-    public List<DashboardLineResponseVO> jobLineList(JobLineQueryVo queryVO) {
-        // 折线图
-        DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(queryVO.getType());
-        LocalDateTime startDateTime = dateTypeEnum.getStartTime().apply(
-                ObjUtil.isNotNull(queryVO.getStartDt()) ? queryVO.getStartDt() : LocalDateTime.now());
-        LocalDateTime endDateTime = dateTypeEnum.getEndTime().apply(
-                ObjUtil.isNotNull(queryVO.getEndDt()) ? queryVO.getEndDt() : LocalDateTime.now());
-        JobSummary jobSummary = new JobSummary();
-        jobSummary.setSystemTaskType(3);
-        jobSummary.setStartTime(startDateTime);
-        jobSummary.setEndTime(endDateTime);
-        jobSummary.setDateFormat(DashboardLineEnum.dateFormat(queryVO.getType()));
-        List<DashboardLineResponseVO> dashboardLineResponseDOList = jobSummaryMapper.selectJobLineList(jobSummary);
-        dashboardLineResponseDOList.sort(Comparator.comparing(DashboardLineResponseVO::getCreateDt));
-        return dashboardLineResponseDOList;
-    }
-
-
-}

+ 0 - 86
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/AuthService.java

@@ -1,86 +0,0 @@
-/*
-package com.ruoyi.interfaces.snailJob;
-
-import com.google.gson.Gson;
-import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.redis.RedisCache;
-import com.ruoyi.common.utils.JsonUtils;
-import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.http.HttpUtils;
-import com.ruoyi.interfaces.domain.vo.JobUserResponseVO;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.*;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import javax.json.JsonObject;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-@Component
-public class AuthService {
-    @Value("${snail-job.login.url}")
-    private  String url;
-    @Value("${snail-job.login.username}")
-    private String username;
-    @Value("${snail-job.login.password}")
-    private String password;
-    @Value("${snail-job.login.timeout}")
-    private Integer timeout;
-
-    public static final String AUTHENTICATION = "SNAIL-JOB-AUTH";
-    public static final String NAMESPACE_ID = "SNAIL-JOB-NAMESPACE-ID";
-    @Autowired
-    private RedisCache redisCache;
-
-    private static final String JOB_USER_KEY = "JOB_USER_KEY";
-
-    public JobUserResponseVO authenticate() {
-
-        String bodyPar = "{\n" +
-                "  \"username\": \"" + username + "\",\n" +
-                "  \"password\": \"" + password + "\"\n" +
-                "}";
-        String token = "";
-        JobUserResponseVO response = new JobUserResponseVO();
-        try {
-            token = HttpUtils.sendBodyPostTest(url+"/auth/login", bodyPar, null);
-            System.out.println(token);
-            String data = new JSONObject(token).getString("data");
-            System.out.println(data);
-            Gson gson = new Gson();
-            response = gson.fromJson(data, JobUserResponseVO.class);
-            redisCache.setCacheObject(JOB_USER_KEY, response, timeout, TimeUnit.MINUTES);
-        } catch (IOException | JSONException e) {
-            throw new RuntimeException(e);
-        }
-        return response;
-    }
-
-    public JobUserResponseVO getJobUserResponse() {
-        JobUserResponseVO jobUser = redisCache.getCacheObject(JOB_USER_KEY);
-        if (StringUtils.isNull(jobUser)) {
-            return authenticate();
-        }
-        return jobUser;
-    }
-
-    public String getUrl(){
-        return url;
-    }
-    public HashMap<String, String> getHeaders(){
-        HashMap<String, String> map = new HashMap<>();
-        HttpServletRequest request = ServletUtils.getRequest();
-        map.put(AUTHENTICATION,request.getHeader(AUTHENTICATION));
-        map.put(NAMESPACE_ID,ServletUtils.getRequest().getHeader(NAMESPACE_ID));
-        return map;
-    }
-}*/

+ 0 - 50
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/CleanDataJob.java

@@ -1,50 +0,0 @@
-package com.ruoyi.interfaces.snailJob;
-
-import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
-import com.aizuda.snailjob.client.job.core.dto.JobArgs;
-import com.aizuda.snailjob.model.dto.ExecuteResult;
-import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.common.utils.JsonUtils;
-import org.springframework.stereotype.Component;
-
-@Component
-public class CleanDataJob {
-
-    public final static String PRO_CODE = "CLEAN_DATA";
-
-    @JobExecutor(name = "cleanDataJob")
-    public ExecuteResult cleanDataJob(JobArgs jobArgs) {
-        String paramsString = String.valueOf(jobArgs.getJobParams());
-        JSONObject configObject = JsonUtils.jsonToPojo(paramsString, JSONObject.class);
-        return ExecuteResult.failure("参数配置异常!");
-//        if (configObject == null) {
-//            return ExecuteResult.failure("参数配置异常!");
-//        }
-//        // 1. 获取数据
-//        String queryOptions = Optional.ofNullable(configObject).map(a -> a.getString("queryOptions")).orElse(null);
-//        if (StringUtils.isNotBlank(queryOptions)) {
-//            return ExecuteResult.failure("数据源配置异常!");
-//        }
-//        String ruleListString = Optional.ofNullable(configObject).map(a -> a.getString("ruleList")).orElse(null);
-//        if (StringUtils.isNotBlank(ruleListString)) {
-//            return ExecuteResult.failure("清洗规则配置异常!");
-//        }
-//        List<Map<String, Object>> data = (List<Map<String, Object>>) BizDataApiRequest.requestByQueryOptions(queryOptions);
-//        if (data == null || data.isEmpty()) {
-//            return ExecuteResult.failure("未获取到数据!");
-//        }
-//        List<BizDataApiParam> columnList = BizDataApiRequest.getColumns(queryOptions);
-//        if (columnList == null || columnList.isEmpty()) {
-//            return ExecuteResult.failure("参数列表获取异常!");
-//        }
-//        List<String> columns = columnList.stream().map(BizDataApiParam::getKey).collect(Collectors.toList());
-//        DataTable dataTable = new DataTable(columns, data);
-//        List<Map> ruleList = JsonUtils.jsonToList(ruleListString, Map.class);
-//        // 2. 清洗转换数据
-//        CleanTransition cleanTransition = new CleanTransition();
-//        com.alibaba.fastjson2.JSONObject parameter = new com.alibaba.fastjson2.JSONObject();
-//        parameter.put("tableFields", ruleList);
-//        DataTable resultTable = cleanTransition.transition(dataTable, parameter);
-//        return ExecuteResult.success(JsonUtils.objectToJson(resultTable));
-    }
-}

+ 0 - 36
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/FlowJob.java

@@ -1,36 +0,0 @@
-package com.ruoyi.interfaces.snailJob;
-
-import com.agentsflex.core.chain.Chain;
-import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
-import com.aizuda.snailjob.client.job.core.dto.JobArgs;
-import com.aizuda.snailjob.model.dto.ExecuteResult;
-import com.ruoyi.common.enums.ExecutorName;
-import com.ruoyi.common.utils.JsonUtils;
-import com.ruoyi.interfaces.domain.MdAppFlow;
-import com.ruoyi.interfaces.service.IMdAppFlowService;
-import com.ruoyi.interfaces.service.impl.MdAppFlowServiceImpl;
-import com.ruoyi.interfaces.tinyflow.TinyflowUtil;
-import dev.tinyflow.core.Tinyflow;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-@Component
-public class FlowJob {
-    @Autowired
-    private IMdAppFlowService  mdAppFlowService;
-    @JobExecutor(name = "runFolwJob")
-    public ExecuteResult runJob(JobArgs jobArgs) {
-
-        System.out.println(jobArgs.getJobParams());
-        MdAppFlow flowPar = JsonUtils.jsonToPojo(jobArgs.getJobParams().toString(), MdAppFlow.class);
-        MdAppFlow mdAppFlow = mdAppFlowService.selectMdAppFlowByAppId(flowPar.getAppId());
-        System.out.println(mdAppFlow.getFlowGraph());
-        Tinyflow tinyflow = TinyflowUtil.getTinyflow(mdAppFlow.getFlowGraph());
-        Chain chain = tinyflow.toChain();
-        Map<String, Object> stringObjectMap = chain.executeForResult(flowPar.getParams());
-        System.out.println(stringObjectMap);
-        return ExecuteResult.success(stringObjectMap);
-    }
-}

+ 0 - 76
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/ServiceLogStatisJob.java

@@ -1,76 +0,0 @@
-package com.ruoyi.interfaces.snailJob;
-
-import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
-import com.aizuda.snailjob.client.job.core.dto.JobArgs;
-import com.aizuda.snailjob.model.dto.ExecuteResult;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.JsonUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.interfaces.domain.MdAppFlow;
-import com.ruoyi.interfaces.domain.PtServiceLog;
-import com.ruoyi.interfaces.domain.PtServiceLogStatis;
-import com.ruoyi.interfaces.domain.vo.PtServiceLogStatisVo;
-import com.ruoyi.interfaces.mapper.MdJobScheduleMapper;
-import com.ruoyi.interfaces.mapper.PtServiceLogMapper;
-import com.ruoyi.interfaces.service.IPtServiceLogService;
-import com.ruoyi.interfaces.service.IPtServiceLogStatisService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-
-@Component
-public class ServiceLogStatisJob {
-
-
-    public final static String PRO_CODE = "SERVICE_LOG_STATIS";
-
-    @Autowired
-    private IPtServiceLogService ptServiceLogService;
-
-    @Autowired
-    private IPtServiceLogStatisService serviceLogStatisService;
-
-    @Autowired
-    private MdJobScheduleMapper jobScheduleMapper;
-
-
-    @JobExecutor(name = "serviceLogStatisJob")
-    public ExecuteResult ServiceLogStatisJob(JobArgs jobArgs) {
-        HashMap<String, String> hashMap = null;
-
-        if (StringUtils.isNotNull(jobArgs.getJobParams()))
-            if (StringUtils.isNotEmpty(jobArgs.getJobParams().toString()))
-                hashMap = JsonUtils.jsonToPojo(jobArgs.getJobParams().toString(), HashMap.class);
-        Date schedule = null;
-        Date endTime = DateUtils.getNowDate();
-
-        if (StringUtils.isEmpty(hashMap)) {
-            schedule = jobScheduleMapper.selectScheduleByProCode(PRO_CODE);
-            if (StringUtils.isNull(schedule)) {
-                Date lastHourTime = DateUtils.getLastHourTime(new Date(), 24);
-                schedule = DateUtils.getDateDD(lastHourTime);
-                jobScheduleMapper.insertScheduleByProCode(PRO_CODE, schedule);
-            }
-        } else {
-            if (StringUtils.isNotNull(hashMap.get("beginTime")))
-                schedule = DateUtils.dateTime(DateUtils.YYYY_MM_DD, hashMap.get("beginTime").toString());
-            if (StringUtils.isNotNull(hashMap.get("endTime")))
-                endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD, hashMap.get("endTime").toString());
-        }
-
-        for (long i = schedule.getTime(); i <= endTime.getTime(); ) {
-            PtServiceLogStatis serviceLogStatis = new PtServiceLogStatis();
-            serviceLogStatis.getParams().put("beginTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, new Date(i)));
-            serviceLogStatis.getParams().put("endTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.getLastHourTime(new Date(i), -24)));
-            List<PtServiceLogStatisVo> ptServiceLogStatis = ptServiceLogService.selectServiceLogStatis(serviceLogStatis);
-            ptServiceLogStatis.forEach(serviceLogStatisService::insertPtServiceLogStatis);
-            i = DateUtils.getLastHourTime(new Date(i), -24).getTime();
-            if (StringUtils.isEmpty(hashMap))
-                jobScheduleMapper.updateScheduleByProCode(PRO_CODE, new Date(i));
-        }
-        return ExecuteResult.success("执行成功");
-    }
-}

+ 0 - 20
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/snailJob/TestJob.java

@@ -1,20 +0,0 @@
-package com.ruoyi.interfaces.snailJob;
-
-import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
-import com.aizuda.snailjob.client.job.core.dto.JobArgs;
-import com.aizuda.snailjob.common.log.SnailJobLog;
-import com.aizuda.snailjob.model.dto.ExecuteResult;
-import org.springframework.stereotype.Component;
-
-@Component
-public class TestJob {
-    @JobExecutor(name = "testJob")
-    public ExecuteResult job(JobArgs jobArgs) {
-        System.out.println(jobArgs.toString());
-        SnailJobLog.REMOTE.info("=======调用成功========");
-        SnailJobLog.REMOTE.info("=======调用成功========");
-        SnailJobLog.REMOTE.info("=======调用成功========");
-        SnailJobLog.REMOTE.info("=======调用成功========");
-        return ExecuteResult.success("成功");
-    }
-}

+ 9 - 9
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/tinyflow/TinyflowUtil.java

@@ -1,18 +1,18 @@
 package com.ruoyi.interfaces.tinyflow;
 
-import com.ruoyi.interfaces.tinyflow.parser.PrintNodeParser;
-import com.ruoyi.interfaces.tinyflow.parser.SQLNodeParser;
-import com.ruoyi.interfaces.tinyflow.parser.SaveNodeParser;
-import com.ruoyi.interfaces.tinyflow.parser.ServiceNodeParser;
+import com.ruoyi.interfaces.tinyflow.parser.*;
 import dev.tinyflow.core.Tinyflow;
 
 public class TinyflowUtil {
-    public static Tinyflow  getTinyflow(String data) {
+
+    public static Tinyflow getTinyflow(String data) {
         Tinyflow tinyflow = new Tinyflow(data);
-        tinyflow.getChainParser().addNodeParser("printNode",new PrintNodeParser());
-        tinyflow.getChainParser().addNodeParser("serviceNode",new ServiceNodeParser());
-        tinyflow.getChainParser().addNodeParser("SQLNodeParser",new SQLNodeParser());
-        tinyflow.getChainParser().addNodeParser("saveNode",new SaveNodeParser());
+        tinyflow.getChainParser().addNodeParser("printNode", new PrintNodeParser());
+        tinyflow.getChainParser().addNodeParser("serviceNode", new ServiceNodeParser());
+        tinyflow.getChainParser().addNodeParser("SQLNodeParser", new SQLNodeParser());
+        tinyflow.getChainParser().addNodeParser("saveNode", new SaveNodeParser());
+        tinyflow.getChainParser().addNodeParser("cleanDataNode", new CleanDataNodeParser());
         return tinyflow;
     }
+
 }

+ 58 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/tinyflow/node/CleanDataNode.java

@@ -0,0 +1,58 @@
+package com.ruoyi.interfaces.tinyflow.node;
+
+import com.agentsflex.core.chain.Chain;
+import com.agentsflex.core.chain.node.BaseNode;
+import com.ruoyi.common.dataobject.DataTable;
+import com.ruoyi.common.transition.CleanTransition;
+import com.ruoyi.common.utils.JsonUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class CleanDataNode extends BaseNode {
+
+    private String ruleListString;
+
+    @Override
+    protected Map<String, Object> execute(Chain chain) {
+        List<Map> ruleList = JsonUtils.jsonToList(ruleListString, Map.class);
+        assert ruleList != null;
+        List<String> columns = ruleList.stream()
+                .flatMap(rule -> {
+                    Object cols = rule.get("columns");
+                    if (cols instanceof List) {
+                        return ((List<?>) cols).stream().map(Object::toString);
+                    }
+                    return java.util.stream.Stream.empty();
+                })
+                .collect(Collectors.toList());
+
+        Map<String, Object> executeResult = chain.getExecuteResult();
+        List<Map<String, Object>> data = (List<Map<String, Object>>) executeResult.get("result");
+        if (data == null) {
+            data = new ArrayList<>();
+            data.add(executeResult);
+        }
+
+        DataTable dataTable = new DataTable(columns, data);
+        CleanTransition cleanTransition = new CleanTransition();
+        com.alibaba.fastjson2.JSONObject parameter = new com.alibaba.fastjson2.JSONObject();
+        parameter.put("tableFields", ruleList);
+        DataTable resultTable = cleanTransition.transition(dataTable, parameter);
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("result", resultTable.getRows());
+        return result;
+    }
+
+    public void setRuleListString(String ruleListString) {
+        this.ruleListString = ruleListString;
+    }
+
+    public String getRuleListString() {
+        return ruleListString;
+    }
+}

+ 1 - 3
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/tinyflow/node/SQLNode.java

@@ -27,12 +27,10 @@ public class SQLNode  extends BaseNode {
     protected Map<String, Object> execute(Chain chain) {
         Map<String,Object> map = new HashMap<>();
 
-        Map<String, Object> parameterValues = chain.getParameterValues(this); //获取参数
-
+        Map<String, Object> parameterValues = chain.getParameterValues(this); // 获取参数
         SysMetaDatasourceMapper mapper = SpringUtils.getBean(SysMetaDatasourceMapper.class);
         DynamicDataSourceManager dynamic = SpringUtils.getBean(DynamicDataSourceManager.class);
 
-
         return Collections.emptyMap();
     }
 }

+ 21 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/tinyflow/parser/CleanDataNodeParser.java

@@ -0,0 +1,21 @@
+package com.ruoyi.interfaces.tinyflow.parser;
+
+import com.agentsflex.core.chain.node.BaseNode;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.interfaces.tinyflow.node.CleanDataNode;
+import dev.tinyflow.core.Tinyflow;
+import dev.tinyflow.core.parser.BaseNodeParser;
+
+public class CleanDataNodeParser extends BaseNodeParser {
+    @Override
+    protected BaseNode doParse(JSONObject root, JSONObject data, Tinyflow tinyflow) {
+        CleanDataNode cleanDataNode = new CleanDataNode();
+        if (data != null) {
+            cleanDataNode.setId(data.getString("id"));
+            cleanDataNode.setName(data.getString("name"));
+            cleanDataNode.setDescription(data.getString("description"));
+            cleanDataNode.setRuleListString(data.getString("cleanData"));
+        }
+        return cleanDataNode;
+    }
+}

+ 2 - 2
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/utils/DbUtils.java

@@ -1,6 +1,6 @@
 package com.ruoyi.interfaces.utils;
 
-import com.aizuda.snailjob.common.core.context.SnailSpringContext;
+import cn.hutool.extra.spring.SpringUtil;
 import com.ruoyi.common.enums.DbTypeEnum;
 import org.springframework.core.env.Environment;
 
@@ -13,7 +13,7 @@ import org.springframework.core.env.Environment;
 public class DbUtils {
 
     public static DbTypeEnum getDbType() {
-        Environment environment = SnailSpringContext.getBean(Environment.class);
+        Environment environment = SpringUtil.getApplicationContext().getBean(Environment.class);
         String url = environment.getProperty("spring.datasource.url");
         return DbTypeEnum.modeOf(url);
     }

+ 1 - 23
ruoyi-common/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sh-platform</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.8.8</version>
+        <version>3.8.89</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>ruoyi-common</artifactId>
@@ -169,28 +169,6 @@
             <artifactId>lombok</artifactId>
         </dependency>
 
-        <!-- snail-job 客户端依赖 -->
-        <dependency>
-            <groupId>com.aizuda</groupId>
-            <artifactId>snail-job-client-starter</artifactId>
-            <version>${snail-job.version}</version>
-        </dependency>
-
-        <!-- snail-job 重试相关依赖 -->
-        <dependency>
-            <groupId>com.aizuda</groupId>
-            <artifactId>snail-job-client-retry-core</artifactId>
-            <version>${snail-job.version}</version>
-        </dependency>
-
-        <!-- snail-job 客户端核心依赖 -->
-        <dependency>
-            <groupId>com.aizuda</groupId>
-            <artifactId>snail-job-client-job-core</artifactId>
-            <version>${snail-job.version}</version>
-        </dependency>
-
-
         <!-- 多数据源 -->
         <dependency>
             <groupId>com.baomidou</groupId>

+ 23 - 190
ruoyi-common/src/main/java/com/ruoyi/common/transition/CleanTransition.java

@@ -4,18 +4,33 @@ import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.dataobject.DataTable;
 import com.ruoyi.common.enums.TaskComponentTypeEnum;
+import com.ruoyi.common.transition.rule.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
-import org.apache.commons.lang3.StringUtils;
 
 import java.util.*;
-import java.util.stream.Collectors;
 
 import static com.alibaba.fastjson2.JSONWriter.Feature.PrettyFormat;
 
 @Slf4j
 public class CleanTransition implements Transition {
 
+    private static final Map<String, CleaningRule> cleaningRules = new HashMap<>();
+
+    static {
+        cleaningRules.put("WITHIN_BOUNDARY", new NumericBoundaryRule());
+        cleaningRules.put("REMOVE_EMPTY_COMBINATION", new RemoveEmptyCombinationRule());
+        cleaningRules.put("ADD_PREFIX_SUFFIX", new AddPrefixSuffixRule());
+        cleaningRules.put("MENU_CUSTOM", new NormalizeEnumMappingRule());
+        cleaningRules.put("KEEP_LATEST_OR_FIRST", new DeduplicateByFieldsKeepFirstRule());
+        cleaningRules.put("STRING_TO_NUMBER", new StringToNumberRule());
+        cleaningRules.put("STRING_TO_DATE", new StringToDateRule());
+        cleaningRules.put("TO_BOOLEAN", new ToBooleanRule());
+        cleaningRules.put("DATE_FORMAT_UNIFIED", new DateFormatUnifiedRule());
+        cleaningRules.put("FIELD_VALUE_REPLACE", new FieldValueReplaceRule());
+        cleaningRules.put("SIMPLE_REPLACE", new RegexReplaceRule());
+    }
+
     @Override
     public DataTable transition(DataTable dataset, JSONObject parameter) {
         log.info("*********************************  Initialize task context  ***********************************");
@@ -40,25 +55,13 @@ public class CleanTransition implements Transition {
                 continue;
             }
 
-            switch (ruleType) {
-                case "WITHIN_BOUNDARY":
-                    dataset = applyNumericBoundary(dataset, ruleConfig);
-                    break;
-                case "REMOVE_EMPTY_COMBINATION":
-                    dataset = applyDeleteIfAllNull(dataset, ruleConfig);
-                    break;
-                case "ADD_PREFIX_SUFFIX":
-                    dataset = applyPrefixSuffix(dataset, ruleConfig);
-                    break;
-                case "MENU_CUSTOM":
-                    dataset = normalizeEnumMapping(dataset, ruleConfig);
-                    break;
-                case "KEEP_LATEST_OR_FIRST":
-                    dataset = deduplicateByFieldsKeepFirst(dataset, ruleConfig);
-                    break;
-                default:
-                    log.warn("未知规则:" + ruleCode);
+            CleaningRule cleaningRule = cleaningRules.get(ruleType);
+            if (cleaningRule != null) {
+                dataset = cleaningRule.apply(dataset, ruleConfig);
+            } else {
+                log.warn("未知规则:" + ruleCode);
             }
+
         }
         return dataset;
     }
@@ -68,109 +71,6 @@ public class CleanTransition implements Transition {
         return TaskComponentTypeEnum.SPARK_CLEAN.getCode();
     }
 
-    private DataTable deduplicateByFieldsKeepFirst(DataTable dataTable, JSONObject cfg) {
-        List<String> allCols = Optional.ofNullable(cfg.getJSONArray("columns"))
-                .map(a -> a.toJavaList(String.class))
-                .orElse(Collections.emptyList());
-
-        if (allCols.isEmpty()) {
-            throw new IllegalArgumentException("规则029配置缺失:columns 不能为空");
-        }
-
-        // 简化实现,仅保留基于字段值去重的逻辑
-        Set<String> uniqueKeys = new HashSet<>();
-        List<Map<String, Object>> uniqueRows = new ArrayList<>();
-
-        for (Map<String, Object> row : dataTable.getRows()) {
-            StringBuilder keyBuilder = new StringBuilder();
-            for (String col : allCols) {
-                keyBuilder.append(row.get(col)).append("|");
-            }
-            String key = keyBuilder.toString();
-
-            if (!uniqueKeys.contains(key)) {
-                uniqueKeys.add(key);
-                uniqueRows.add(new HashMap<>(row));
-            }
-        }
-
-        return new DataTable(dataTable.getColumnNames(), uniqueRows);
-    }
-
-    private DataTable normalizeEnumMapping(DataTable dataTable, JSONObject cfg) {
-        String col = cfg.getJSONArray("columns").getString(0);
-        List<JSONObject> list = cfg.getList("stringValue", JSONObject.class);
-
-        if (StringUtils.isBlank(col) || list == null || list.size() < 1) {
-            throw new IllegalArgumentException("规则024配置缺失:columns/stringValue 不能为空");
-        }
-
-        Map<String, String> mapping = new HashMap<>();
-        for (JSONObject dict : list) {
-            mapping.put(dict.getString("value"), dict.getString("name"));
-        }
-
-        List<Map<String, Object>> newRows = new ArrayList<>();
-        for (Map<String, Object> row : dataTable.getRows()) {
-            Map<String, Object> newRow = new HashMap<>(row);
-            Object value = row.get(col);
-            if (value != null && mapping.containsKey(value.toString())) {
-                newRow.put(col, mapping.get(value.toString()));
-            }
-            newRows.add(newRow);
-        }
-
-        return new DataTable(dataTable.getColumnNames(), newRows);
-    }
-
-    private DataTable applyPrefixSuffix(DataTable dataTable, JSONObject cfg) {
-        String colName = cfg.getJSONArray("columns").getString(0);
-        String stringValue = cfg.getString("stringValue");
-        String handleType = cfg.getString("handleType");
-
-        if (StringUtils.isBlank(colName) || StringUtils.isBlank(stringValue) || StringUtils.isBlank(handleType)) {
-            throw new IllegalArgumentException("规则107配置缺失:columns/stringValue/handleType 不能为空");
-        }
-
-        if (!("1".equals(handleType) || "2".equals(handleType) || "3".equals(handleType) || "4".equals(handleType))) {
-            throw new IllegalArgumentException("规则107 handleType 非法:" + handleType);
-        }
-
-        List<Map<String, Object>> newRows = new ArrayList<>();
-        for (Map<String, Object> row : dataTable.getRows()) {
-            Map<String, Object> newRow = new HashMap<>(row);
-            Object value = row.get(colName);
-
-            if (value != null) {
-                String strValue = value.toString();
-                switch (handleType) {
-                    case "1": // 加前缀
-                        if (!strValue.startsWith(stringValue)) {
-                            newRow.put(colName, stringValue + strValue);
-                        }
-                        break;
-                    case "2": // 加后缀
-                        if (!strValue.endsWith(stringValue)) {
-                            newRow.put(colName, strValue + stringValue);
-                        }
-                        break;
-                    case "3": // 去除匹配上的前缀
-                        if (strValue.startsWith(stringValue)) {
-                            newRow.put(colName, strValue.substring(stringValue.length()));
-                        }
-                        break;
-                    case "4": // 去除匹配上的后缀
-                        if (strValue.endsWith(stringValue)) {
-                            newRow.put(colName, strValue.substring(0, strValue.length() - stringValue.length()));
-                        }
-                        break;
-                }
-            }
-            newRows.add(newRow);
-        }
-
-        return new DataTable(dataTable.getColumnNames(), newRows);
-    }
 
     private boolean checkColumnsExist(DataTable dataTable, JSONObject ruleConfig) {
         List<String> allColumns = dataTable.getColumnNames();
@@ -185,72 +85,5 @@ public class CleanTransition implements Transition {
         return allColumns.containsAll(targetCols);
     }
 
-    private DataTable applyNumericBoundary(DataTable dataTable, JSONObject cfg) {
-        String col = cfg.getJSONArray("columns").getString(0);
-        double min = cfg.getDoubleValue("min");
-        double max = cfg.getDoubleValue("max");
-        int handleType = cfg.getIntValue("handleType");
-
-        List<Map<String, Object>> newRows = new ArrayList<>();
-        for (Map<String, Object> row : dataTable.getRows()) {
-            Map<String, Object> newRow = new HashMap<>(row);
-            Object value = row.get(col);
-            double numValue = Double.parseDouble(value.toString());
-            switch (handleType) {
-                case 1: // 超出边界设为边界值
-                    if (numValue < min) {
-                        newRow.put(col, min);
-                    } else if (numValue > max) {
-                        newRow.put(col, max);
-                    }
-                    break;
-                case 2: // 超出边界设为最小值
-                    if (numValue < min || numValue > max) {
-                        newRow.put(col, min);
-                    }
-                    break;
-                case 3: // 超出边界设为最大值
-                    if (numValue < min || numValue > max) {
-                        newRow.put(col, max);
-                    }
-                    break;
-            }
-            newRows.add(newRow);
-        }
-
-        return new DataTable(dataTable.getColumnNames(), newRows);
-    }
-
-    private DataTable applyDeleteIfAllNull(DataTable dataTable, JSONObject cfg) {
-        List<String> cols = cfg.getJSONArray("columns").toJavaList(String.class);
-        if (cols == null || cols.isEmpty()) return dataTable;
-
-        List<String> missing = cols.stream()
-                .filter(c -> !dataTable.getColumnNames().contains(c))
-                .collect(Collectors.toList());
-
-        if (!missing.isEmpty()) {
-            throw new IllegalArgumentException("组合判空配置包含不存在的列:" + missing);
-        }
-
-        List<Map<String, Object>> filteredRows = new ArrayList<>();
-        for (Map<String, Object> row : dataTable.getRows()) {
-            boolean allNull = true;
-            for (String col : cols) {
-                Object value = row.get(col);
-                if (value != null && !"".equals(value.toString().trim())) {
-                    if (!(value instanceof Double && ((Double) value).isNaN()) &&
-                            !(value instanceof Float && ((Float) value).isNaN())) {
-                        allNull = false;
-                        break;
-                    }
-                }
-            }
-            if (!allNull) {
-                filteredRows.add(row);
-            }
-        }
 
-        return new DataTable(dataTable.getColumnNames(), filteredRows);
-    }
 }

+ 67 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/AddPrefixSuffixRule.java

@@ -0,0 +1,67 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+import com.ruoyi.common.utils.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class AddPrefixSuffixRule implements CleaningRule {
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return applyPrefixSuffix(dataTable, config);
+    }
+
+    private DataTable applyPrefixSuffix(DataTable dataTable, JSONObject cfg) {
+        String colName = cfg.getJSONArray("columns").getString(0);
+        String stringValue = cfg.getString("stringValue");
+        String handleType = cfg.getString("handleType");
+
+        if (StringUtils.isBlank(colName) || StringUtils.isBlank(stringValue) || StringUtils.isBlank(handleType)) {
+            throw new IllegalArgumentException("规则107配置缺失:columns/stringValue/handleType 不能为空");
+        }
+
+        if (!("1".equals(handleType) || "2".equals(handleType) || "3".equals(handleType) || "4".equals(handleType))) {
+            throw new IllegalArgumentException("规则107 handleType 非法:" + handleType);
+        }
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(colName);
+
+            if (value != null) {
+                String strValue = value.toString();
+                switch (handleType) {
+                    case "1": // 加前缀
+                        if (!strValue.startsWith(stringValue)) {
+                            newRow.put(colName, stringValue + strValue);
+                        }
+                        break;
+                    case "2": // 加后缀
+                        if (!strValue.endsWith(stringValue)) {
+                            newRow.put(colName, strValue + stringValue);
+                        }
+                        break;
+                    case "3": // 去除匹配上的前缀
+                        if (strValue.startsWith(stringValue)) {
+                            newRow.put(colName, strValue.substring(stringValue.length()));
+                        }
+                        break;
+                    case "4": // 去除匹配上的后缀
+                        if (strValue.endsWith(stringValue)) {
+                            newRow.put(colName, strValue.substring(0, strValue.length() - stringValue.length()));
+                        }
+                        break;
+                }
+            }
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+}
+

+ 11 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/CleaningRule.java

@@ -0,0 +1,11 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+
+/**
+ * @author linqilong
+ */
+public interface CleaningRule {
+    DataTable apply(DataTable dataTable, JSONObject config);
+}

+ 94 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/DateFormatUnifiedRule.java

@@ -0,0 +1,94 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class DateFormatUnifiedRule implements CleaningRule {
+
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return unifyDateFormat(dataTable, config);
+    }
+
+    private DataTable unifyDateFormat(DataTable dataTable, JSONObject cfg) {
+        String col = cfg.getJSONArray("columns").getString(0);
+        String targetFormat = cfg.getString("targetFormat"); // 目标日期格式,如 "yyyy-MM-dd"
+        String sourceFormat = cfg.getString("sourceFormat"); // 源日期格式,如 "yyyy/MM/dd"
+
+        if (targetFormat == null || targetFormat.isEmpty()) {
+            targetFormat = "yyyy-MM-dd"; // 默认目标格式
+        }
+
+        SimpleDateFormat targetSdf = new SimpleDateFormat(targetFormat);
+        targetSdf.setLenient(false);
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(col);
+
+            if (value != null) {
+                String dateStr = value.toString().trim();
+                if (!dateStr.isEmpty()) {
+                    Date parsedDate = null;
+
+                    // 如果指定了源格式,则使用指定格式解析
+                    if (sourceFormat != null && !sourceFormat.isEmpty()) {
+                        try {
+                            SimpleDateFormat sourceSdf = new SimpleDateFormat(sourceFormat);
+                            sourceSdf.setLenient(false);
+                            parsedDate = sourceSdf.parse(dateStr);
+                        } catch (ParseException e) {
+                            // 解析失败,尝试其他方式
+                        }
+                    }
+
+                    // 如果没有指定源格式或指定格式解析失败,则尝试常见格式
+                    if (parsedDate == null) {
+                        parsedDate = tryParseWithCommonFormats(dateStr);
+                    }
+
+                    // 如果成功解析,则格式化为目标格式
+                    if (parsedDate != null) {
+                        newRow.put(col, targetSdf.format(parsedDate));
+                    }
+                }
+            }
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+
+    private Date tryParseWithCommonFormats(String dateStr) {
+        String[] commonFormats = {
+                "yyyy-MM-dd",
+                "yyyy/MM/dd",
+                "yyyy-MM-dd HH:mm:ss",
+                "yyyy/MM/dd HH:mm:ss",
+                "MM-dd-yyyy",
+                "MM/dd/yyyy",
+                "dd-MM-yyyy",
+                "dd/MM/yyyy"
+        };
+
+        for (String format : commonFormats) {
+            try {
+                SimpleDateFormat sdf = new SimpleDateFormat(format);
+                sdf.setLenient(false);
+                return sdf.parse(dateStr);
+            } catch (ParseException e) {
+                // 继续尝试下一个格式
+            }
+        }
+        return null;
+    }
+}

+ 44 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/DeduplicateByFieldsKeepFirstRule.java

@@ -0,0 +1,44 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+
+import java.util.*;
+
+public class DeduplicateByFieldsKeepFirstRule implements CleaningRule {
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return deduplicateByFieldsKeepFirst(dataTable, config);
+    }
+
+    private DataTable deduplicateByFieldsKeepFirst(DataTable dataTable, JSONObject cfg) {
+        List<String> allCols = Optional.ofNullable(cfg.getJSONArray("columns"))
+                .map(a -> a.toJavaList(String.class))
+                .orElse(Collections.emptyList());
+
+        if (allCols.isEmpty()) {
+            throw new IllegalArgumentException("规则029配置缺失:columns 不能为空");
+        }
+
+        // 简化实现,仅保留基于字段值去重的逻辑
+        Set<String> uniqueKeys = new HashSet<>();
+        List<Map<String, Object>> uniqueRows = new ArrayList<>();
+
+        for (Map<String, Object> row : dataTable.getRows()) {
+            StringBuilder keyBuilder = new StringBuilder();
+            for (String col : allCols) {
+                keyBuilder.append(row.get(col)).append("|");
+            }
+            String key = keyBuilder.toString();
+
+            if (!uniqueKeys.contains(key)) {
+                uniqueKeys.add(key);
+                uniqueRows.add(new HashMap<>(row));
+            }
+        }
+
+        return new DataTable(dataTable.getColumnNames(), uniqueRows);
+    }
+
+}
+

+ 63 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/FieldValueReplaceRule.java

@@ -0,0 +1,63 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.*;
+
+public class FieldValueReplaceRule implements CleaningRule {
+
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return replaceFieldValue(dataTable, config);
+    }
+
+    private DataTable replaceFieldValue(DataTable dataTable, JSONObject cfg) {
+        String col = cfg.getJSONArray("columns").getString(0);
+        String defaultValue = cfg.getString("defaultValue"); // 默认值
+        Boolean replaceEmpty = cfg.getBoolean("replaceEmpty"); // 是否替换空值
+        Boolean replaceNull = cfg.getBoolean("replaceNull"); // 是否替换null值
+        List<String> invalidValues = cfg.getJSONArray("invalidValues") != null ?
+                cfg.getJSONArray("invalidValues").toJavaList(String.class) : Collections.emptyList(); // 无效值列表
+
+        // 如果没有配置任何替换条件,则直接返回原数据
+        if (replaceEmpty == null && replaceNull == null && invalidValues.isEmpty()) {
+            return dataTable;
+        }
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(col);
+
+            boolean shouldReplace = false;
+
+            // 检查是否需要替换null值
+            if (Boolean.TRUE.equals(replaceNull) && value == null) {
+                shouldReplace = true;
+            }
+            // 检查是否需要替换空值
+            else if (Boolean.TRUE.equals(replaceEmpty) && (value == null || StringUtils.isBlank(value.toString()))) {
+                shouldReplace = true;
+            }
+            // 检查是否在无效值列表中
+            else if (!invalidValues.isEmpty() && value != null &&
+                    invalidValues.contains(value.toString().trim())) {
+                shouldReplace = true;
+            }
+
+            if (shouldReplace) {
+                if (defaultValue != null) {
+                    newRow.put(col, defaultValue);
+                } else {
+                    newRow.put(col, null); // 设置为空值
+                }
+            }
+
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+}

+ 45 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/NormalizeEnumMappingRule.java

@@ -0,0 +1,45 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class NormalizeEnumMappingRule implements CleaningRule {
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return normalizeEnumMapping(dataTable, config);
+    }
+
+    private DataTable normalizeEnumMapping(DataTable dataTable, JSONObject cfg) {
+        String col = cfg.getJSONArray("columns").getString(0);
+        List<JSONObject> list = cfg.getList("stringValue", JSONObject.class);
+
+        if (StringUtils.isBlank(col) || list == null || list.size() < 1) {
+            throw new IllegalArgumentException("规则024配置缺失:columns/stringValue 不能为空");
+        }
+
+        Map<String, String> mapping = new HashMap<>();
+        for (JSONObject dict : list) {
+            mapping.put(dict.getString("value"), dict.getString("name"));
+        }
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(col);
+            if (value != null && mapping.containsKey(value.toString())) {
+                newRow.put(col, mapping.get(value.toString()));
+            }
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+
+}
+

+ 54 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/NumericBoundaryRule.java

@@ -0,0 +1,54 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class NumericBoundaryRule implements CleaningRule {
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return applyNumericBoundary(dataTable, config);
+    }
+
+    private DataTable applyNumericBoundary(DataTable dataTable, JSONObject cfg) {
+        String col = cfg.getJSONArray("columns").getString(0);
+        double min = cfg.getDoubleValue("min");
+        double max = cfg.getDoubleValue("max");
+        int handleType = cfg.getIntValue("handleType");
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(col);
+            double numValue = Double.parseDouble(value.toString());
+            switch (handleType) {
+                case 1: // 超出边界设为边界值
+                    if (numValue < min) {
+                        newRow.put(col, min);
+                    } else if (numValue > max) {
+                        newRow.put(col, max);
+                    }
+                    break;
+                case 2: // 超出边界设为最小值
+                    if (numValue < min || numValue > max) {
+                        newRow.put(col, min);
+                    }
+                    break;
+                case 3: // 超出边界设为最大值
+                    if (numValue < min || numValue > max) {
+                        newRow.put(col, max);
+                    }
+                    break;
+            }
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+
+}
+

+ 59 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/RegexReplaceRule.java

@@ -0,0 +1,59 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+public class RegexReplaceRule implements CleaningRule {
+
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return regexReplace(dataTable, config);
+    }
+
+    private DataTable regexReplace(DataTable dataTable, JSONObject cfg) {
+        String col = cfg.getJSONArray("columns").getString(0);
+        String regexPattern = cfg.getString("regexPattern"); // 正则表达式模式
+        String replacement = cfg.getString("replacement"); // 替换内容
+        Boolean caseSensitive = cfg.getBoolean("caseSensitive"); // 是否区分大小写,默认true
+
+        if (regexPattern == null || regexPattern.isEmpty()) {
+            return dataTable;
+        }
+
+        if (replacement == null) {
+            replacement = ""; // 默认替换为空字符串
+        }
+
+        if (caseSensitive == null) {
+            caseSensitive = true; // 默认区分大小写
+        }
+
+        // 编译正则表达式
+        Pattern pattern = caseSensitive ?
+                Pattern.compile(regexPattern) :
+                Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE);
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(col);
+
+            if (value != null) {
+                String strValue = value.toString();
+                Matcher matcher = pattern.matcher(strValue);
+                String replacedValue = matcher.replaceAll(replacement);
+                newRow.put(col, replacedValue);
+            }
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+}

+ 49 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/RemoveEmptyCombinationRule.java

@@ -0,0 +1,49 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class RemoveEmptyCombinationRule implements CleaningRule {
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return applyDeleteIfAllNull(dataTable, config);
+    }
+
+    private DataTable applyDeleteIfAllNull(DataTable dataTable, JSONObject cfg) {
+        List<String> cols = cfg.getJSONArray("columns").toJavaList(String.class);
+        if (cols == null || cols.isEmpty()) return dataTable;
+
+        List<String> missing = cols.stream()
+                .filter(c -> !dataTable.getColumnNames().contains(c))
+                .collect(Collectors.toList());
+
+        if (!missing.isEmpty()) {
+            throw new IllegalArgumentException("组合判空配置包含不存在的列:" + missing);
+        }
+
+        List<Map<String, Object>> filteredRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            boolean allNull = true;
+            for (String col : cols) {
+                Object value = row.get(col);
+                if (value != null && !"".equals(value.toString().trim())) {
+                    if (!(value instanceof Double && ((Double) value).isNaN()) &&
+                            !(value instanceof Float && ((Float) value).isNaN())) {
+                        allNull = false;
+                        break;
+                    }
+                }
+            }
+            if (!allNull) {
+                filteredRows.add(row);
+            }
+        }
+
+        return new DataTable(dataTable.getColumnNames(), filteredRows);
+    }
+}

+ 13 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/RuleType.java

@@ -0,0 +1,13 @@
+package com.ruoyi.common.transition.rule;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface RuleType {
+    String value();
+}
+

+ 51 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/StringToDateRule.java

@@ -0,0 +1,51 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class StringToDateRule implements CleaningRule {
+
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return convertStringToDate(dataTable, config);
+    }
+
+    private DataTable convertStringToDate(DataTable dataTable, JSONObject cfg) {
+        String col = cfg.getJSONArray("columns").getString(0);
+        String dateFormat = cfg.getString("dateFormat"); // 日期格式,如 "yyyy-MM-dd" 或 "yyyy/MM/dd HH:mm:ss"
+
+        if (dateFormat == null || dateFormat.isEmpty()) {
+            dateFormat = "yyyy-MM-dd"; // 默认格式
+        }
+
+        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
+        sdf.setLenient(false); // 严格解析
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(col);
+
+            if (value != null && value instanceof String) {
+                String strValue = (String) value;
+                if (!strValue.trim().isEmpty()) {
+                    try {
+                        newRow.put(col, sdf.parse(strValue));
+                    } catch (ParseException e) {
+                        // 如果解析失败,保持原值
+                    }
+                }
+            }
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+}

+ 52 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/StringToNumberRule.java

@@ -0,0 +1,52 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+@Slf4j
+public class StringToNumberRule implements CleaningRule {
+
+    private static final Pattern NUMBER_PATTERN = Pattern.compile("-?\\d+(\\.\\d+)?");
+
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return convertStringToNumber(dataTable, config);
+    }
+
+    private DataTable convertStringToNumber(DataTable dataTable, JSONObject cfg) {
+        String col = cfg.getJSONArray("columns").getString(0);
+        String targetType = cfg.getString("targetType"); // "INTEGER" or "DOUBLE"
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(col);
+
+            if (value != null && value instanceof String) {
+                String strValue = (String) value;
+                if (NUMBER_PATTERN.matcher(strValue).matches()) {
+                    try {
+                        if ("INTEGER".equals(targetType)) {
+                            newRow.put(col, Integer.parseInt(strValue));
+                        } else {
+                            newRow.put(col, Double.parseDouble(strValue));
+                        }
+                    } catch (NumberFormatException e) {
+                        // 如果转换失败,保持原值
+                        log.warn("无法将字符串 {} 转换为数字", strValue);
+                    }
+                }
+            }
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+}

+ 69 - 0
ruoyi-common/src/main/java/com/ruoyi/common/transition/rule/ToBooleanRule.java

@@ -0,0 +1,69 @@
+package com.ruoyi.common.transition.rule;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.dataobject.DataTable;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ToBooleanRule implements CleaningRule {
+
+    @Override
+    public DataTable apply(DataTable dataTable, JSONObject config) {
+        return convertToBoolean(dataTable, config);
+    }
+
+    private DataTable convertToBoolean(DataTable dataTable, JSONObject cfg) {
+        String col = cfg.getJSONArray("columns").getString(0);
+
+        List<Map<String, Object>> newRows = new ArrayList<>();
+        for (Map<String, Object> row : dataTable.getRows()) {
+            Map<String, Object> newRow = new HashMap<>(row);
+            Object value = row.get(col);
+
+            if (value != null) {
+                Boolean boolValue = parseToBoolean(value);
+                if (boolValue != null) {
+                    newRow.put(col, boolValue);
+                }
+            }
+            newRows.add(newRow);
+        }
+
+        return new DataTable(dataTable.getColumnNames(), newRows);
+    }
+
+    private Boolean parseToBoolean(Object value) {
+        if (value instanceof Boolean) {
+            return (Boolean) value;
+        }
+
+        if (value instanceof String) {
+            String strValue = ((String) value).toLowerCase().trim();
+            switch (strValue) {
+                case "true":
+                case "是":
+                case "yes":
+                case "y":
+                case "1":
+                    return true;
+                case "false":
+                case "否":
+                case "no":
+                case "n":
+                case "0":
+                    return false;
+                default:
+                    return null;
+            }
+        }
+
+        if (value instanceof Number) {
+            return ((Number) value).intValue() != 0;
+        }
+
+        return null;
+    }
+}

+ 1 - 1
ruoyi-framework/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sh-platform</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.8.8</version>
+        <version>3.8.89</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
ruoyi-generator/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>sh-platform</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.8.8</version>
+        <version>3.8.89</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels