소스 검색

Merge branch 'develop_allen' of www/taais into master

allen 8 달 전
부모
커밋
bdc99b882b
100개의 변경된 파일6888개의 추가작업 그리고 46개의 파일을 삭제
  1. 20 0
      pom.xml
  2. 56 0
      script/nginx.conf
  3. 749 0
      script/sql/postgresql/data(postgresql).sql
  4. BIN
      script/sql/postgresql/taais20240619.sql
  5. 53 0
      script/sql/postgresql/update_task_and_subtask.sql
  6. 9 6
      taais-admin/pom.xml
  7. 4 1
      taais-admin/src/main/java/com/taais/TaaisApplication.java
  8. 96 8
      taais-admin/src/main/java/com/taais/web/controller/common/CommonController.java
  9. 2 2
      taais-admin/src/main/resources/application-dev.yml
  10. 51 11
      taais-admin/src/main/resources/application-prod.yml
  11. 5 3
      taais-admin/src/main/resources/application.yml
  12. 10 0
      taais-common/taais-common-core/pom.xml
  13. 8 1
      taais-common/taais-common-core/src/main/java/com/taais/common/core/config/TaaisConfig.java
  14. 1 0
      taais-common/taais-common-core/src/main/java/com/taais/common/core/constant/Constants.java
  15. 8 0
      taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/DateUtils.java
  16. 3 3
      taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/ServletUtils.java
  17. 7 1
      taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/file/FileUploadUtils.java
  18. 77 0
      taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/file/FileUtils.java
  19. 4 1
      taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/file/MimeTypeUtils.java
  20. 132 0
      taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/file/UnPackedUtil.java
  21. 5 1
      taais-common/taais-common-orm/src/main/java/com/taais/common/orm/helper/DataBaseHelper.java
  22. 1 1
      taais-common/taais-common-security/src/main/java/com/taais/common/security/config/SecurityConfig.java
  23. 4 0
      taais-common/taais-common-web/src/main/java/com/taais/common/web/config/ResourcesConfig.java
  24. 0 1
      taais-extra/taais-powerjob-server/src/main/java/com/taais/powerjob/PowerJobServerApplication.java
  25. 19 6
      taais-extra/taais-powerjob-server/src/main/resources/application-dev.properties
  26. 1 0
      taais-modules/pom.xml
  27. 64 0
      taais-modules/taais-biz/pom.xml
  28. 22 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/component/ScheduledTasks.java
  29. 13 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/component/WebClientConfig.java
  30. 67 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/constant/BizConstant.java
  31. 141 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmBizProcessController.java
  32. 114 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmConfigController.java
  33. 109 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmDataProcessController.java
  34. 109 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmDataSetController.java
  35. 109 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmModelController.java
  36. 114 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmSubtaskController.java
  37. 109 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmSubtaskDetailController.java
  38. 180 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmTaskController.java
  39. 226 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/DataController.java
  40. 83 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/PublicController.java
  41. 85 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmBizProcess.java
  42. 59 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmConfig.java
  43. 82 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmDataProcess.java
  44. 76 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmDataSet.java
  45. 56 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmModel.java
  46. 73 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmSubtask.java
  47. 64 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmSubtaskDetail.java
  48. 61 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmTask.java
  49. 73 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/Data.java
  50. 100 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmBizProcessBo.java
  51. 61 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmConfigBo.java
  52. 95 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmDataProcessBo.java
  53. 85 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmDataSetBo.java
  54. 59 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmModelBo.java
  55. 80 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmSubtaskBo.java
  56. 68 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmSubtaskDetailBo.java
  57. 62 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmTaskBo.java
  58. 109 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/DataBo.java
  59. 23 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/AlgorithmConfigParamDto.java
  60. 18 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/AlgorithmRequestDto.java
  61. 11 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/TaskResultDTO.java
  62. 18 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/AlgorithmSubtaskParamDto.java
  63. 43 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/CreateTaskDto.java
  64. 18 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/DataSelectDto.java
  65. 13 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/TaskDto.java
  66. 13 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/TestResultDto.java
  67. 18 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/TranResultDto.java
  68. 98 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmBizProcessImportVo.java
  69. 106 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmBizProcessVo.java
  70. 66 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmConfigImportVo.java
  71. 74 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmConfigVo.java
  72. 94 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmDataProcessImportVo.java
  73. 102 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmDataProcessVo.java
  74. 86 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmDataSetImportVo.java
  75. 94 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmDataSetVo.java
  76. 60 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmModelImportVo.java
  77. 68 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmModelVo.java
  78. 71 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmSubtaskDetailImportVo.java
  79. 79 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmSubtaskDetailVo.java
  80. 83 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmSubtaskImportVo.java
  81. 91 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmSubtaskVo.java
  82. 67 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmTaskImportVo.java
  83. 75 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmTaskVo.java
  84. 86 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/DataImportVo.java
  85. 91 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/DataVo.java
  86. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmBizProcessImportListener.java
  87. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmConfigImportListener.java
  88. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmDataProcessImportListener.java
  89. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmDataSetImportListener.java
  90. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmModelImportListener.java
  91. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmSubtaskDetailImportListener.java
  92. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmSubtaskImportListener.java
  93. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmTaskImportListener.java
  94. 25 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmBizProcessMapper.java
  95. 19 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmConfigMapper.java
  96. 20 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmDataProcessMapper.java
  97. 16 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmDataSetMapper.java
  98. 18 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmModelMapper.java
  99. 16 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmSubtaskDetailMapper.java
  100. 23 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmSubtaskMapper.java

+ 20 - 0
pom.xml

@@ -348,6 +348,19 @@
                 <artifactId>transmittable-thread-local</artifactId>
                 <version>${alibaba-ttl.version}</version>
             </dependency>
+            <!--            解压-->
+            <dependency>
+                <groupId>com.github.junrar</groupId>
+                <artifactId>junrar</artifactId>
+                <version>7.4.1</version>
+            </dependency>
+
+            <dependency>
+                <groupId>net.lingala</groupId>
+                <artifactId>zip4j</artifactId>
+                <version>1.3.3</version>
+            </dependency>
+
 
             <!--短信sms4j-->
             <!--            <dependency>-->
@@ -409,6 +422,13 @@
                 <version>${revision}</version>
             </dependency>
 
+            <!-- biz模块 -->
+            <dependency>
+                <groupId>com.taais</groupId>
+                <artifactId>taais-biz</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 

+ 56 - 0
script/nginx.conf

@@ -0,0 +1,56 @@
+worker_processes  1;
+
+events {
+    worker_connections  1024;
+}
+
+http {
+    include       mime.types;
+    default_type  application/octet-stream;
+    sendfile        on;
+    keepalive_timeout  65;
+
+    # 开启gzip压缩
+    gzip on;
+    # 不压缩临界值,大于1K的才压缩,一般不用改
+    gzip_min_length 1k;
+    # 压缩缓冲区
+    gzip_buffers 16 64K;
+    # 压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
+    gzip_http_version 1.1;
+    # 压缩级别,1-10,数字越大压缩的越好,时间也越长
+    gzip_comp_level 5;
+    # 进行压缩的文件类型
+    gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
+    # 跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding"
+    gzip_vary on;
+    # IE6对Gzip不怎么友好,不给它Gzip了
+    gzip_disable "MSIE [1-6]\.";
+    # 设置上传文件大小限制为100MB
+    client_max_body_size 4000M;
+
+    server {
+        listen       80;
+        server_name  localhost;
+		charset utf-8;
+
+		location / {
+            root   /home/zxt/soft/taais-ui/;
+			try_files $uri $uri/ /index.html;
+            index  index.html index.htm;
+        }
+
+		location /prod-api/ {
+			proxy_set_header Host $http_host;
+			proxy_set_header X-Real-IP $remote_addr;
+			proxy_set_header REMOTE-HOST $remote_addr;
+			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+			proxy_pass http://localhost:9090/;
+		}
+
+        error_page   500 502 503 504  /50x.html;
+        location = /50x.html {
+            root   html;
+        }
+    }
+}

+ 749 - 0
script/sql/postgresql/data(postgresql).sql

@@ -0,0 +1,749 @@
+-- Table: public.data
+
+DROP TABLE IF EXISTS public.data;
+
+CREATE TABLE IF NOT EXISTS public.data
+(
+    id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
+    name character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    data_type character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    file_type character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    object_type character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    object_subtype character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    batch_num bigint,
+    scene character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    data_source character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    gather_time timestamp without time zone,
+    gather_spot character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    url character varying(225) COLLATE pg_catalog."default",
+    labelUrl character varying(225) COLLATE pg_catalog."default",
+    increment character varying(225) COLLATE pg_catalog."default" DEFAULT ''::character varying,
+    labeled boolean DEFAULT false,
+    CONSTRAINT data_pkey PRIMARY KEY (id)
+    )
+
+    TABLESPACE pg_default;
+
+
+
+COMMENT ON TABLE public.data
+    IS '数据管理表';
+
+COMMENT ON COLUMN public.data.id
+    IS 'id';
+
+COMMENT ON COLUMN public.data.name
+    IS '名称';
+
+COMMENT ON COLUMN public.data.data_type
+    IS '数据类型';
+
+COMMENT ON COLUMN public.data.file_type
+    IS '文件类型';
+
+COMMENT ON COLUMN public.data.object_type
+    IS '目标类型';
+
+COMMENT ON COLUMN public.data.object_subtype
+    IS '目标子类型';
+
+COMMENT ON COLUMN public.data.batch_num
+    IS '批次号';
+
+COMMENT ON COLUMN public.data.scene
+    IS '场景';
+
+COMMENT ON COLUMN public.data.data_source
+    IS '数据源';
+
+COMMENT ON COLUMN public.data.gather_time
+    IS '采集时间';
+
+COMMENT ON COLUMN public.data.gather_spot
+    IS '采集地点';
+
+COMMENT ON COLUMN public.data.url
+    IS '图片url';
+
+COMMENT ON COLUMN public.data.labelUrl
+    IS '标注url';
+
+COMMENT ON COLUMN public.data.increment
+    IS '扩增方式';
+
+COMMENT ON COLUMN public.data.labeled
+    IS '是否标注';
+
+-- 菜单 SQL
+INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, component_name, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, version, create_by, create_time, update_by, update_time, remark) VALUES (2002, '数据管理查询', 2001, 1, NULL, '', NULL, NULL, '1', '0', 'F', '0', '0', 'demo:data:query', NULL, 0, 1, '2024-04-22 17:21:27.187713', 1, NULL, '');
+INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, component_name, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, version, create_by, create_time, update_by, update_time, remark) VALUES (2003, '数据管理新增', 2001, 2, NULL, '', NULL, NULL, '1', '0', 'F', '0', '0', 'demo:data:add', NULL, 0, 1, '2024-04-22 17:21:27.187713', 1, NULL, '');
+INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, component_name, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, version, create_by, create_time, update_by, update_time, remark) VALUES (2004, '数据管理修改', 2001, 3, NULL, '', NULL, NULL, '1', '0', 'F', '0', '0', 'demo:data:edit', NULL, 0, 1, '2024-04-22 17:21:27.187713', 1, NULL, '');
+INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, component_name, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, version, create_by, create_time, update_by, update_time, remark) VALUES (2005, '数据管理删除', 2001, 4, NULL, '', NULL, NULL, '1', '0', 'F', '0', '0', 'demo:data:remove', NULL, 0, 1, '2024-04-22 17:21:27.187713', 1, NULL, '');
+INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, component_name, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, version, create_by, create_time, update_by, update_time, remark) VALUES (2006, '数据管理导出', 2001, 5, NULL, '', NULL, NULL, '1', '0', 'F', '0', '0', 'demo:data:export', NULL, 0, 1, '2024-04-22 17:21:27.187713', 1, NULL, '');
+INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, component_name, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, version, create_by, create_time, update_by, update_time, remark) VALUES (2001, '数据管理', 2, 1, '/demo/data', 'demo/data/index', '数据管理', NULL, '1', '0', 'C', '0', '0', 'demo:data:list', NULL, 6, 1, '2024-04-22 17:21:27.187713', 1, '2024-04-23 20:38:36.673', '数据管理菜单');
+INSERT INTO public.sys_menu (menu_id, menu_name, parent_id, order_num, path, component, component_name, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, version, create_by, create_time, update_by, update_time, remark) VALUES (2, '数据管理', 0, 2, 'data', NULL, NULL, NULL, '1', '0', 'M', '0', '0', NULL, 'data', 0, 1, NULL, 1, NULL, '数据管理目录');
+
+-- 算法配置表
+DROP TABLE IF EXISTS public.algorithm_config;
+
+CREATE TABLE "public"."algorithm_config" (
+ "id" "pg_catalog"."int8" NOT NULL,
+ "type" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "parent_id" "pg_catalog"."int8",
+ "subsystem" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "algorithm_name" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "algorithm_address" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "parameter_config" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "create_by" "pg_catalog"."int8",
+ "create_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "update_by" "pg_catalog"."int8",
+ "update_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "remarks" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
+ "tenant_id" "pg_catalog"."int8" DEFAULT 0,
+ version           integer                 DEFAULT 0,
+ del_flag      smallint               DEFAULT '0'::smallint         NOT NULL,
+ "system" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ CONSTRAINT "algorithm_config_pkey" PRIMARY KEY ("id")
+);
+
+ALTER TABLE "public"."algorithm_config"
+    OWNER TO "postgres";
+
+COMMENT ON COLUMN "public"."algorithm_config"."id" IS '主键ID';
+
+COMMENT ON COLUMN "public"."algorithm_config"."type" IS '类型';
+
+COMMENT ON COLUMN "public"."algorithm_config"."parent_id" IS '父id';
+
+COMMENT ON COLUMN "public"."algorithm_config"."subsystem" IS '分系统';
+
+COMMENT ON COLUMN "public"."algorithm_config"."algorithm_name" IS '算法名称';
+
+COMMENT ON COLUMN "public"."algorithm_config"."algorithm_address" IS '算法地址';
+
+COMMENT ON COLUMN "public"."algorithm_config"."parameter_config" IS '参数配置';
+
+COMMENT ON COLUMN public.algorithm_config.version IS '乐观锁';
+
+COMMENT ON COLUMN public.algorithm_config.tenant_id IS '租户编码';
+
+COMMENT ON COLUMN public.algorithm_config.del_flag IS '逻辑删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "public"."algorithm_config"."create_by" IS '创建人';
+
+COMMENT ON COLUMN "public"."algorithm_config"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "public"."algorithm_config"."update_by" IS '更新人';
+
+COMMENT ON COLUMN "public"."algorithm_config"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "public"."algorithm_config"."remarks" IS '备注';
+
+COMMENT ON COLUMN "public"."algorithm_config"."system" IS '系统';
+
+COMMENT ON TABLE "public"."algorithm_config" IS '算法配置表';
+
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052717402600, '算法配置', 152584418900430848, '1', 'config', 'ag/config/index', 1, 0, 'C', '0', '0', 'ag:config:list', '', 1, now(), 1, null, '算法配置菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052717402601, '算法配置查询', 2024052717402600, '1',  '', '', 1, 0, 'F', '0', '0', 'ag:config:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052717402602, '算法配置新增', 2024052717402600, '2',  '', '', 1, 0, 'F', '0', '0', 'ag:config:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052717402603, '算法配置修改', 2024052717402600, '3',  '', '', 1, 0, 'F', '0', '0', 'ag:config:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052717402604, '算法配置删除', 2024052717402600, '4',  '', '', 1, 0, 'F', '0', '0', 'ag:config:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052717402605, '算法配置导出', 2024052717402600, '5',  '', '', 1, 0, 'F', '0', '0', 'ag:config:export',       '', 1, now(), 1, null, '');
+
+-- 算法模型表
+DROP TABLE IF EXISTS public.algorithm_model;
+
+CREATE TABLE "public"."algorithm_model" (
+ "id" "pg_catalog"."int8" NOT NULL,
+ "algorithm_id" "pg_catalog"."int8" NOT NULL,
+ "model_name" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "model_address" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "sample_number" "pg_catalog"."int8",
+ "cycle_epoch" "pg_catalog"."int8",
+ "create_by" "pg_catalog"."int8",
+ "create_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "update_by" "pg_catalog"."int8",
+ "update_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "remarks" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
+ "tenant_id" "pg_catalog"."int8" DEFAULT 0,
+ version           integer                 DEFAULT 0,
+ del_flag      smallint               DEFAULT '0'::smallint         NOT NULL,
+ "system" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ CONSTRAINT "algorithm_model_pkey" PRIMARY KEY ("id")
+);
+
+ALTER TABLE "public"."algorithm_model"
+    OWNER TO "postgres";
+
+COMMENT ON COLUMN "public"."algorithm_model"."id" IS '主键ID';
+
+COMMENT ON COLUMN "public"."algorithm_model"."algorithm_id" IS '算法';
+
+COMMENT ON COLUMN "public"."algorithm_model"."model_name" IS '模型名称';
+
+COMMENT ON COLUMN "public"."algorithm_model"."model_address" IS '模型';
+
+COMMENT ON COLUMN "public"."algorithm_model"."sample_number" IS '训练样本数';
+
+COMMENT ON COLUMN "public"."algorithm_model"."cycle_epoch" IS '训练循环次数';
+
+COMMENT ON COLUMN "public"."algorithm_model"."create_by" IS '创建人';
+
+COMMENT ON COLUMN "public"."algorithm_model"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "public"."algorithm_model"."update_by" IS '更新人';
+
+COMMENT ON COLUMN "public"."algorithm_model"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "public"."algorithm_model"."remarks" IS '备注';
+
+COMMENT ON COLUMN "public"."algorithm_model"."system" IS '系统';
+
+COMMENT ON COLUMN "public"."algorithm_model"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "public"."algorithm_model"."tenant_id" IS '租户编码';
+
+COMMENT ON COLUMN "public"."algorithm_model"."del_flag" IS '逻辑删除标志(0代表存在 1代表删除)';
+
+COMMENT ON TABLE "public"."algorithm_model" IS '算法模型配置表';
+
+
+-- 算法任务表
+DROP TABLE IF EXISTS public.algorithm_task;
+
+CREATE TABLE "public"."algorithm_task" (
+ "id" "pg_catalog"."int8" NOT NULL,
+ "name" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "status" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" DEFAULT 0 NOT NULL,
+ "start_time" "pg_catalog"."timestamp",
+ "end_time" "pg_catalog"."timestamp",
+ "cost_second" "pg_catalog"."int8",
+ "log" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "create_by" "pg_catalog"."int8",
+ "create_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "update_by" "pg_catalog"."int8",
+ "update_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "remarks" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
+ "tenant_id" "pg_catalog"."int8" DEFAULT 0,
+ version           integer                 DEFAULT 0,
+ del_flag      smallint               DEFAULT '0'::smallint         NOT NULL,
+ "system" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ CONSTRAINT "algorithm_task_pkey" PRIMARY KEY ("id")
+);
+
+ALTER TABLE "public"."algorithm_task"
+    OWNER TO "postgres";
+
+COMMENT ON COLUMN "public"."algorithm_task"."id" IS '主键ID';
+
+COMMENT ON COLUMN "public"."algorithm_task"."name" IS '任务名称';
+
+COMMENT ON COLUMN "public"."algorithm_task"."status" IS '任务状态';
+
+COMMENT ON COLUMN "public"."algorithm_task"."start_time" IS '开始时间';
+
+COMMENT ON COLUMN "public"."algorithm_task"."end_time" IS '结束时间';
+
+COMMENT ON COLUMN "public"."algorithm_task"."cost_second" IS '耗时';
+
+COMMENT ON COLUMN "public"."algorithm_task"."log" IS '日志';
+
+COMMENT ON COLUMN "public"."algorithm_task"."create_by" IS '创建人';
+
+COMMENT ON COLUMN "public"."algorithm_task"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "public"."algorithm_task"."update_by" IS '更新人';
+
+COMMENT ON COLUMN "public"."algorithm_task"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "public"."algorithm_task"."remarks" IS '备注';
+
+COMMENT ON COLUMN "public"."algorithm_task"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "public"."algorithm_task"."tenant_id" IS '租户编码';
+
+COMMENT ON COLUMN "public"."algorithm_task"."del_flag" IS '逻辑删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "public"."algorithm_task"."system" IS '系统';
+
+COMMENT ON TABLE "public"."algorithm_task" IS '算法任务表';
+
+
+-- 算法子任务表
+DROP TABLE IF EXISTS public.algorithm_subtask;
+
+CREATE TABLE "public"."algorithm_subtask" (
+ "id" "pg_catalog"."int8" NOT NULL,
+ "task_id" "pg_catalog"."int8",
+ "name" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "type" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "status" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL,
+ "parameters" "pg_catalog"."text" COLLATE "pg_catalog"."default" NOT NULL,
+ "start_time" "pg_catalog"."timestamp",
+ "end_time" "pg_catalog"."timestamp",
+ "cost_second" "pg_catalog"."int8",
+ "log" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "index" "pg_catalog"."int8" DEFAULT 0,
+ "create_by" "pg_catalog"."int8",
+ "create_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "update_by" "pg_catalog"."int8",
+ "update_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "remarks" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
+ "tenant_id" "pg_catalog"."int8" DEFAULT 0,
+ version           integer                 DEFAULT 0,
+ del_flag      smallint               DEFAULT '0'::smallint         NOT NULL,
+ "system" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ CONSTRAINT "algorithm_subtask_pkey" PRIMARY KEY ("id")
+);
+
+ALTER TABLE "public"."algorithm_subtask"
+    OWNER TO "postgres";
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."id" IS '主键ID';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."task_id" IS '任务ID';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."name" IS '任务名称';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."type" IS '任务类型';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."status" IS '任务状态';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."parameters" IS '调用算法时所用的参数';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."start_time" IS '开始时间';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."end_time" IS '结束时间';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."cost_second" IS '耗时';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."log" IS '日志';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."index" IS '序号';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."create_by" IS '创建人';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."update_by" IS '更新人';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."remarks" IS '备注';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."tenant_id" IS '租户编码';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."del_flag" IS '逻辑删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "public"."algorithm_subtask"."system" IS '系统';
+
+COMMENT ON TABLE "public"."algorithm_subtask" IS '算法子任务表';
+
+-- 算法业务处理表
+DROP TABLE IF EXISTS public.algorithm_biz_process;
+
+CREATE TABLE "public"."algorithm_biz_process" (
+ "id" "pg_catalog"."int8" NOT NULL,
+ "sub_task_id" "pg_catalog"."int8" NOT NULL,
+ "name" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "type" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "status" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "algorithm_id" "pg_catalog"."int8",
+ "model_id" "pg_catalog"."int8",
+ "parameters" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "preprocess_path" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "result_path" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "index" "pg_catalog"."int8" DEFAULT 0,
+ "start_time" "pg_catalog"."timestamp",
+ "end_time" "pg_catalog"."timestamp",
+ "cost_second" "pg_catalog"."int8",
+ "log" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "create_by" "pg_catalog"."int8",
+ "create_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "update_by" "pg_catalog"."int8",
+ "update_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "remarks" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
+ "tenant_id" "pg_catalog"."int8" DEFAULT 0,
+ version           integer                 DEFAULT 0,
+ del_flag      smallint               DEFAULT '0'::smallint         NOT NULL,
+ "system" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ CONSTRAINT "algorithm_biz_process_pkey" PRIMARY KEY ("id")
+);
+
+
+ALTER TABLE "public"."algorithm_biz_process"
+    OWNER TO "postgres";
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."id" IS '主键ID';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."sub_task_id" IS '子任务id';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."name" IS '任务名称';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."type" IS '任务类型';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."status" IS '任务状态';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."algorithm_id" IS '算法';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."model_id" IS '模型';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."parameters" IS '调用算法时所用的参数';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."preprocess_path" IS '预处理数据路径';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."result_path" IS '结果数据路径';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."index" IS '序号';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."start_time" IS '开始时间';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."end_time" IS '结束时间';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."cost_second" IS '耗时';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."log" IS '日志';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."create_by" IS '创建人';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."update_by" IS '更新人';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."remarks" IS '备注';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."tenant_id" IS '租户编码';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."del_flag" IS '逻辑删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "public"."algorithm_biz_process"."system" IS '系统';
+
+COMMENT ON TABLE "public"."algorithm_biz_process" IS '算法业务处理表';
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210100, '算法模型配置', 152584418900430848, '1', 'model', 'ag/model/index', 1, 0, 'C', '0', '0', 'ag:model:list', '', 1, now(), 1, null, '算法模型配置菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210001, '算法模型配置查询', 2024052914210100, '1',  '', '', 1, 0, 'F', '0', '0', 'ag:model:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210002, '算法模型配置新增', 2024052914210100, '2',  '', '', 1, 0, 'F', '0', '0', 'ag:model:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210003, '算法模型配置修改', 2024052914210100, '3',  '', '', 1, 0, 'F', '0', '0', 'ag:model:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210004, '算法模型配置删除', 2024052914210100, '4',  '', '', 1, 0, 'F', '0', '0', 'ag:model:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210005, '算法模型配置导出', 2024052914210100, '5',  '', '', 1, 0, 'F', '0', '0', 'ag:model:export',       '', 1, now(), 1, null, '');
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210200, '算法任务', 153308760386924544, '1', 'task', 'task/task/index', 1, 0, 'C', '0', '0', 'task:task:list', '', 1, now(), 1, null, '算法任务菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210101, '算法任务查询', 2024052914210200, '1',  '', '', 1, 0, 'F', '0', '0', 'task:task:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210102, '算法任务新增', 2024052914210200, '2',  '', '', 1, 0, 'F', '0', '0', 'task:task:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210103, '算法任务修改', 2024052914210200, '3',  '', '', 1, 0, 'F', '0', '0', 'task:task:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210104, '算法任务删除', 2024052914210200, '4',  '', '', 1, 0, 'F', '0', '0', 'task:task:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210105, '算法任务导出', 2024052914210200, '5',  '', '', 1, 0, 'F', '0', '0', 'task:task:export',       '', 1, now(), 1, null, '');
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210300, '算法子任务', 153308760386924544, '1', 'subtask', 'task/subtask/index', 1, 0, 'C', '0', '0', 'task:subtask:list', '', 1, now(), 1, null, '算法子任务菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210201, '算法子任务查询', 2024052914210300, '1',  '', '', 1, 0, 'F', '0', '0', 'task:subtask:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210202, '算法子任务新增', 2024052914210300, '2',  '', '', 1, 0, 'F', '0', '0', 'task:subtask:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210203, '算法子任务修改', 2024052914210300, '3',  '', '', 1, 0, 'F', '0', '0', 'task:subtask:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210204, '算法子任务删除', 2024052914210300, '4',  '', '', 1, 0, 'F', '0', '0', 'task:subtask:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210205, '算法子任务导出', 2024052914210300, '5',  '', '', 1, 0, 'F', '0', '0', 'task:subtask:export',       '', 1, now(), 1, null, '');
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210400, '算法子任务详情', 153308760386924544, '1', 'subtaskDetail', 'task/subtaskDetail/index', 1, 0, 'C', '0', '0', 'task:subtaskDetail:list', '', 1, now(), 1, null, '算法子任务详情菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210301, '算法子任务详情查询', 2024052914210400, '1',  '', '', 1, 0, 'F', '0', '0', 'task:subtaskDetail:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210302, '算法子任务详情新增', 2024052914210400, '2',  '', '', 1, 0, 'F', '0', '0', 'task:subtaskDetail:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210303, '算法子任务详情修改', 2024052914210400, '3',  '', '', 1, 0, 'F', '0', '0', 'task:subtaskDetail:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210304, '算法子任务详情删除', 2024052914210400, '4',  '', '', 1, 0, 'F', '0', '0', 'task:subtaskDetail:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024052914210305, '算法子任务详情导出', 2024052914210400, '5',  '', '', 1, 0, 'F', '0', '0', 'task:subtaskDetail:export',       '', 1, now(), 1, null, '');
+
+
+-- 2024/6/11 添加
+
+-- 算法数据集合表
+DROP TABLE IF EXISTS public.algorithm_data_set;
+
+CREATE TABLE "public"."algorithm_data_set" (
+ "id" "pg_catalog"."int8" NOT NULL,
+ "sub_task_id" "pg_catalog"."int8" NOT NULL,
+ "name" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "type" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "status" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "parameters" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "result_path" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "index" "pg_catalog"."int8" DEFAULT 0,
+ "start_time" "pg_catalog"."timestamp",
+ "end_time" "pg_catalog"."timestamp",
+ "cost_second" "pg_catalog"."int8",
+ "log" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "create_by" "pg_catalog"."int8",
+ "create_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "update_by" "pg_catalog"."int8",
+ "update_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "remarks" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
+ "tenant_id" "pg_catalog"."int8" DEFAULT 0,
+ version           integer                 DEFAULT 0,
+ del_flag      smallint               DEFAULT '0'::smallint         NOT NULL,
+ "system" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ CONSTRAINT "algorithm_data_set_pkey" PRIMARY KEY ("id")
+);
+
+ALTER TABLE "public"."algorithm_data_set"
+    OWNER TO "postgres";
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."id" IS '主键ID';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."sub_task_id" IS '子任务id';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."name" IS '任务名称';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."type" IS '任务类型';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."status" IS '任务状态';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."parameters" IS '调用算法时所用的参数';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."result_path" IS '结果数据路径';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."index" IS '序号';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."start_time" IS '开始时间';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."end_time" IS '结束时间';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."cost_second" IS '耗时';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."log" IS '日志';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."create_by" IS '创建人';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."update_by" IS '更新人';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."remarks" IS '备注';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."tenant_id" IS '租户编码';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."del_flag" IS '逻辑删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "public"."algorithm_data_set"."system" IS '系统';
+
+COMMENT ON TABLE "public"."algorithm_data_set" IS '算法数据集合表';
+
+
+-- 算法数据处理表
+DROP TABLE IF EXISTS public.algorithm_data_process;
+
+CREATE TABLE "public"."algorithm_data_process" (
+ "id" "pg_catalog"."int8" NOT NULL,
+ "sub_task_id" "pg_catalog"."int8" NOT NULL,
+ "name" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "type" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "status" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "algorithm_id" "pg_catalog"."int8",
+ "parameters" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "preprocess_path" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "result_path" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ "index" "pg_catalog"."int8" DEFAULT 0,
+ "start_time" "pg_catalog"."timestamp",
+ "end_time" "pg_catalog"."timestamp",
+ "cost_second" "pg_catalog"."int8",
+ "log" "pg_catalog"."text" COLLATE "pg_catalog"."default",
+ "create_by" "pg_catalog"."int8",
+ "create_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "update_by" "pg_catalog"."int8",
+ "update_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "remarks" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
+ "tenant_id" "pg_catalog"."int8" DEFAULT 0,
+ version           integer                 DEFAULT 0,
+ del_flag      smallint               DEFAULT '0'::smallint         NOT NULL,
+ "system" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
+ CONSTRAINT "algorithm_data_process_pkey" PRIMARY KEY ("id")
+);
+
+ALTER TABLE "public"."algorithm_data_process"
+    OWNER TO "postgres";
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."id" IS '主键ID';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."sub_task_id" IS '子任务id';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."name" IS '任务名称';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."type" IS '任务类型';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."status" IS '任务状态';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."algorithm_id" IS '算法';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."parameters" IS '调用算法时所用的参数';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."preprocess_path" IS '预处理数据路径';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."result_path" IS '结果数据路径';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."index" IS '序号';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."start_time" IS '开始时间';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."end_time" IS '结束时间';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."cost_second" IS '耗时';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."log" IS '日志';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."create_by" IS '创建人';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."update_by" IS '更新人';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."remarks" IS '备注';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."tenant_id" IS '租户编码';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."del_flag" IS '逻辑删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "public"."algorithm_data_process"."system" IS '系统';
+
+COMMENT ON TABLE "public"."algorithm_data_process" IS '算法数据处理表';
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115343900, '算法业务处理', 153308760386924544, '1', 'bizProcess', 'task/bizProcess/index', 1, 0, 'C', '0', '0', 'task:bizProcess:list', '', 1, now(), 1, null, '算法业务处理菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115343901, '算法业务处理查询', 2024061115343900, '1',  '', '', 1, 0, 'F', '0', '0', 'task:bizProcess:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115343902, '算法业务处理新增', 2024061115343900, '2',  '', '', 1, 0, 'F', '0', '0', 'task:bizProcess:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115343903, '算法业务处理修改', 2024061115343900, '3',  '', '', 1, 0, 'F', '0', '0', 'task:bizProcess:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115343904, '算法业务处理删除', 2024061115343900, '4',  '', '', 1, 0, 'F', '0', '0', 'task:bizProcess:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115343905, '算法业务处理导出', 2024061115343900, '5',  '', '', 1, 0, 'F', '0', '0', 'task:bizProcess:export',       '', 1, now(), 1, null, '');
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344000, '算法数据处理', 153308760386924544, '1', 'dataProcess', 'task/dataProcess/index', 1, 0, 'C', '0', '0', 'task:dataProcess:list', '', 1, now(), 1, null, '算法数据处理菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344001, '算法数据处理查询', 2024061115344000, '1',  '', '', 1, 0, 'F', '0', '0', 'task:dataProcess:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344002, '算法数据处理新增', 2024061115344000, '2',  '', '', 1, 0, 'F', '0', '0', 'task:dataProcess:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344003, '算法数据处理修改', 2024061115344000, '3',  '', '', 1, 0, 'F', '0', '0', 'task:dataProcess:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344004, '算法数据处理删除', 2024061115344000, '4',  '', '', 1, 0, 'F', '0', '0', 'task:dataProcess:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344005, '算法数据处理导出', 2024061115344000, '5',  '', '', 1, 0, 'F', '0', '0', 'task:dataProcess:export',       '', 1, now(), 1, null, '');
+
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344100, '算法数据集合', 153308760386924544, '1', 'dataSet', 'task/dataSet/index', 1, 0, 'C', '0', '0', 'task:dataSet:list', '', 1, now(), 1, null, '算法数据集合菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344101, '算法数据集合查询', 2024061115344100, '1',  '', '', 1, 0, 'F', '0', '0', 'task:dataSet:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344102, '算法数据集合新增', 2024061115344100, '2',  '', '', 1, 0, 'F', '0', '0', 'task:dataSet:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344103, '算法数据集合修改', 2024061115344100, '3',  '', '', 1, 0, 'F', '0', '0', 'task:dataSet:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344104, '算法数据集合删除', 2024061115344100, '4',  '', '', 1, 0, 'F', '0', '0', 'task:dataSet:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024061115344105, '算法数据集合导出', 2024061115344100, '5',  '', '', 1, 0, 'F', '0', '0', 'task:dataSet:export',       '', 1, now(), 1, null, '');

BIN
script/sql/postgresql/taais20240619.sql


+ 53 - 0
script/sql/postgresql/update_task_and_subtask.sql

@@ -0,0 +1,53 @@
+CREATE OR REPLACE PROCEDURE update_task_and_subtask(
+    IN p_biz_id bigint,
+    IN p_bizType VARCHAR
+)
+LANGUAGE plpgsql
+AS $$
+BEGIN
+    IF p_bizType = 'dataBizProcess' THEN
+    RAISE NOTICE 'Starting dataBizProcess';
+        -- 检查 subtask 状态 --失败场景暂时不更新上层任务
+        -- PERFORM 1 FROM algorithm_biz_process WHERE subtaskId = p_biz_id AND status = '3';
+        -- IF FOUND THEN
+            -- 如果有一个状态是3(失败),更新 algorithm_subtask 表为3(失败)
+        --    UPDATE algorithm_subtask
+        --    SET status = 3
+        --    WHERE id = p_biz_id;
+        -- ELSE
+            -- 如果algorithm_biz_process所有状态都是2(成功),更新 algorithm_subtask 表为2(成功)
+            PERFORM 1 FROM algorithm_biz_process WHERE status <> '2' AND sub_task_id = ( SELECT sub_task_id FROM algorithm_biz_process WHERE id = p_biz_id) ;
+            IF NOT FOUND THEN
+                UPDATE algorithm_subtask
+                SET status = '2'
+                WHERE id = ( SELECT sub_task_id FROM algorithm_biz_process WHERE id = p_biz_id);
+            END IF;
+            -- 如果algorithm_subtask表所有状态都是2(成功),更新 algorithm_task 表为2(成功)
+            PERFORM 1 FROM algorithm_subtask WHERE status <> '2' AND task_id = (select task_id FROM algorithm_subtask WHERE id = (SELECT sub_task_id FROM algorithm_biz_process WHERE id = p_biz_id));
+            IF NOT FOUND THEN
+                UPDATE algorithm_task
+                SET status = '2'
+                WHERE id =  (SELECT task_id FROM algorithm_subtask WHERE id = (SELECT sub_task_id FROM algorithm_biz_process WHERE id = p_biz_id));
+            END IF;
+
+        --END IF;
+    ELSIF p_bizType = 'dataProcess' THEN
+    RAISE NOTICE 'Starting dataProcess';
+        -- 如果algorithm_data_process所有状态都是2(成功),更新 algorithm_subtask 表为2(成功)
+        PERFORM 1 FROM algorithm_data_process WHERE status <> '2' AND sub_task_id = ( SELECT sub_task_id FROM algorithm_data_process WHERE id = p_biz_id);
+        IF NOT FOUND THEN
+            UPDATE algorithm_subtask
+            SET status = '2'
+            WHERE id = ( SELECT sub_task_id FROM algorithm_data_process WHERE id = p_biz_id);
+        END IF;
+        -- 如果algorithm_subtask表所有状态都是2(成功),更新 algorithm_task 表为2(成功)
+        PERFORM 1 FROM algorithm_subtask WHERE status <> '2' AND task_id = (SELECT task_id FROM algorithm_subtask WHERE id = (SELECT sub_task_id FROM algorithm_data_process WHERE id = p_biz_id));
+        IF NOT FOUND THEN
+            UPDATE algorithm_task
+            SET status = '2'
+            WHERE id =  (SELECT task_id FROM algorithm_subtask WHERE id = (SELECT sub_task_id FROM algorithm_data_process WHERE id = p_biz_id));
+        END IF;
+    END IF;
+END;
+$$;
+

+ 9 - 6
taais-admin/pom.xml

@@ -60,17 +60,15 @@
             <artifactId>taais-generator</artifactId>
         </dependency>
 
-        <!--  demo模块  -->
-        <dependency>
-            <groupId>com.taais</groupId>
-            <artifactId>taais-demo</artifactId>
-        </dependency>
-
         <!--  spring-boot-admin 监控客户端  -->
         <dependency>
             <groupId>de.codecentric</groupId>
             <artifactId>spring-boot-admin-starter-client</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-core</artifactId>
+        </dependency>
 
         <!--  powerjob 客户端  -->
         <!--        <dependency>-->
@@ -78,6 +76,11 @@
         <!--            <artifactId>powerjob-worker-spring-boot-starter</artifactId>-->
         <!--        </dependency>-->
 
+        <dependency>
+            <groupId>com.taais</groupId>
+            <artifactId>taais-biz</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 4 - 1
taais-admin/src/main/java/com/taais/TaaisApplication.java

@@ -2,13 +2,16 @@ package com.taais;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * Km启动程序
  *
  * @author wgk
  */
-@SpringBootApplication
+@EnableScheduling
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}, scanBasePackages = {"com.taais"})
 public class TaaisApplication {
     public static void main(String[] args) {
         SpringApplication.run(TaaisApplication.class, args);

+ 96 - 8
taais-admin/src/main/java/com/taais/web/controller/common/CommonController.java

@@ -1,5 +1,6 @@
 package com.taais.web.controller.common;
 
+import cn.hutool.core.convert.Convert;
 import com.taais.common.core.config.TaaisConfig;
 import com.taais.common.core.constant.Constants;
 import com.taais.common.core.core.domain.CommonResult;
@@ -7,6 +8,9 @@ import com.taais.common.core.utils.StringUtils;
 import com.taais.common.core.utils.file.FileUploadUtils;
 import com.taais.common.core.utils.file.FileUtils;
 import com.taais.system.config.ServerConfig;
+import com.taais.system.domain.vo.SysOssUploadVo;
+import com.taais.system.domain.vo.SysOssVo;
+import com.taais.system.service.ISysOssService;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import org.slf4j.Logger;
@@ -19,10 +23,18 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import static com.taais.common.security.utils.LoginHelper.getLoginUser;
+
 
 /**
  * 通用请求处理
@@ -34,9 +46,15 @@ import java.util.Map;
 public class CommonController {
     private static final Logger log = LoggerFactory.getLogger(CommonController.class);
     private static final String FILE_DELIMETER = ",";
+    private final ISysOssService sysOssService;
+
     @Autowired
     private ServerConfig serverConfig;
 
+    public CommonController(ISysOssService sysOssService) {
+        this.sysOssService = sysOssService;
+    }
+
     /**
      * 通用下载请求
      *
@@ -62,29 +80,41 @@ public class CommonController {
             log.error("下载文件失败", e);
         }
     }
-
     /**
      * 通用上传请求(单个)
      */
     @PostMapping("/upload")
-    public CommonResult<Map<String, Object>> uploadFile(MultipartFile file) throws Exception {
+    public CommonResult<SysOssUploadVo> uploadFile(MultipartFile file) throws Exception {
         try {
             // 上传文件路径
             String filePath = TaaisConfig.getUploadPath();
+
             // 上传并返回新文件名称
+
             String fileName = FileUploadUtils.upload(filePath, file);
             String url = serverConfig.getUrl() + fileName;
-            Map<String, Object> map = new HashMap<>();
-            map.put("url", url);
-            map.put("fileName", fileName);
-            map.put("newFileName", FileUtils.getName(fileName));
-            map.put("originalFilename", file.getOriginalFilename());
-            return CommonResult.success(map);
+            String  originalFilename = file.getOriginalFilename();
+//            Map<String, Object> map = new HashMap<>();
+//            map.put("url", url);
+//            map.put("fileName", fileName);
+//            map.put("newFileName", FileUtils.getName(fileName));
+//            map.put("originalFilename", originalFilename);
+            assert originalFilename != null;
+            String suffix = StringUtils.substring(originalFilename, originalFilename.lastIndexOf("."), originalFilename.length());
+            // 信息保存在文件管理
+            SysOssVo oss = sysOssService.saveResultEntity(file.getOriginalFilename(),suffix, url,fileName);
+            SysOssUploadVo uploadVo = new SysOssUploadVo();
+            uploadVo.setUrl(oss.getUrl());
+            uploadVo.setFileName(oss.getOriginalName());
+            uploadVo.setOssId(oss.getOssId().toString());
+            return CommonResult.success(uploadVo);
         } catch (Exception e) {
             return CommonResult.fail(e.getMessage());
         }
     }
 
+
+
     /**
      * 通用上传请求(多个)
      */
@@ -140,4 +170,62 @@ public class CommonController {
             log.error("下载文件失败", e);
         }
     }
+
+    /**
+     * 文件打包下载
+     * @param response
+     * @param files
+     */
+    @GetMapping ("/zip")
+    public void downloadZip(HttpServletResponse response, String files){
+        //下载压缩文件的名称
+        String zipname= getLoginUser().getUsername();
+
+        String[] filesPaths = Convert.toStrArray(files);
+
+        String fileName = zipname + ".zip";
+        response.setContentType("application/zip");
+        response.setHeader("content-disposition", "attachment;filename=" + fileName);
+
+        ZipOutputStream zos = null;
+        BufferedInputStream bis = null;
+        try{
+            zos = new ZipOutputStream(response.getOutputStream());
+            byte[] buf = new byte[8192];
+            int len;
+            for (int i = 0; i < filesPaths.length; i++) {
+                File file = new File(filesPaths[i]);
+                if (!file.isFile()) {
+                    continue;
+                }
+                ZipEntry ze = new ZipEntry(file.getName());
+                zos.putNextEntry(ze);
+                bis = new BufferedInputStream(new FileInputStream(file));
+                while ((len = bis.read(buf)) > 0) {
+                    zos.write(buf, 0, len);
+                }
+                zos.closeEntry();
+            }
+            zos.closeEntry();
+        }catch(Exception ex){
+            ex.printStackTrace();
+        }finally {
+            if(bis != null){
+                try{
+                    bis.close();
+                }catch(Exception e){
+                    e.printStackTrace();
+                }
+            }
+            if(zos != null){
+                try{
+                    zos.close();
+                }catch(Exception e){
+                    e.printStackTrace();
+                }
+            }
+        }
+
+    }
+
 }

+ 2 - 2
taais-admin/src/main/resources/application-dev.yml

@@ -35,7 +35,7 @@ mybatis-flex:
       #      password: Root@369
       #postgresql数据库
       driver-class-name: org.postgresql.Driver
-      url: jdbc:postgresql://localhost:5432/taais?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
+      url: jdbc:postgresql://192.168.101.34:5432/taais?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
       username: postgres
       password: P3x0LG8jzyHRX59l
 
@@ -108,7 +108,7 @@ powerjob:
     # 如何开启调度中心请查看文档教程
     enabled: false
     # 需要先在 powerjob 登录页执行应用注册后才能使用
-    app-name: taais-worker
+    app-name: taais
     # 28080 端口 随着主应用端口飘逸 避免集群冲突
     port: 2${server.port}
     protocol: http

+ 51 - 11
taais-admin/src/main/resources/application-prod.yml

@@ -19,9 +19,9 @@ spring:
       keepaliveTime: 30000
 mybatis-flex:
   # sql审计
-  audit_enable: false
+  audit_enable: true
   # sql打印
-  sql_print: false
+  sql_print: true
   datasource:
     # 数据源-1
     ds1:
@@ -37,7 +37,7 @@ mybatis-flex:
       driver-class-name: org.postgresql.Driver
       url: jdbc:postgresql://localhost:5432/taais?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
       username: postgres
-      password: postgres@369
+      password: P3x0LG8jzyHRX59l
 
 #    # 数据源-2
 #    ds2:
@@ -64,7 +64,7 @@ spring.data:
     # 数据库索引
     database: 0
     # 密码(如没有密码请注释掉)
-    # password:
+    password: CWwYsGjafmv8Sr7g
     # 连接超时时间
     timeout: 10s
     # 是否开启ssl
@@ -74,17 +74,17 @@ redisson:
   # redis key前缀
   keyPrefix: taais
   # 线程池数量
-  threads: 16
+  threads: 4
   # Netty线程池数量
-  nettyThreads: 32
+  nettyThreads: 8
   # 单节点配置
   singleServerConfig:
     # 客户端名称
     clientName: ${taais.name}
     # 最小空闲连接数
-    connectionMinimumIdleSize: 32
+    connectionMinimumIdleSize: 8
     # 连接池大小
-    connectionPoolSize: 64
+    connectionPoolSize: 32
     # 连接空闲超时,单位:毫秒
     idleConnectionTimeout: 10000
     # 命令等待超时,单位:毫秒
@@ -95,7 +95,7 @@ redisson:
 --- # 监控中心客户端配置
 spring.boot.admin.client:
   # 增加客户端开关
-  enabled: true
+  enabled: false
   url: http://localhost:9090/admin
   instance:
     service-host-type: IP
@@ -106,9 +106,9 @@ spring.boot.admin.client:
 powerjob:
   worker:
     # 如何开启调度中心请查看文档教程
-    enabled: true
+    enabled: false
     # 需要先在 powerjob 登录页执行应用注册后才能使用
-    app-name: taais-worker
+    app-name: taais
     # 28080 端口 随着主应用端口飘逸 避免集群冲突
     port: 2${server.port}
     protocol: http
@@ -117,3 +117,43 @@ powerjob:
     allow-lazy-connect-server: false
     max-appended-wf-context-length: 4096
     max-result-length: 4096
+
+--- # sms 短信 支持 华为 阿里云 腾讯云 等等各式各样的短信服务商
+# https://sms4j.com/doc3/ 文档地址 各个厂商可同时使用
+sms:
+  # 标注从yml读取配置
+  config-type: yaml
+  is-print: true
+  blends:
+    # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文)
+    tx1:
+      #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
+      supplier: tencent
+      #您的accessKey
+      access-key-id: 您的accessKey
+      #您的accessKeySecret
+      access-key-secret: 您的accessKeySecret
+      #您的短信签名
+      signature: 您的短信签名
+      #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置
+      template-id: xxxxxxxx
+      #短信自动重试间隔时间  默认五秒
+      retry-interval: 5
+      # 短信重试次数,默认0次不重试,如果你需要短信重试则根据自己的需求修改值即可
+      max-retries: 0
+      #您的sdkAppId
+      sdk-app-id: 您的sdkAppId
+    # 自定义的标识,也就是configId这里可以是任意值(最好不要是中文)
+    tx2:
+      #厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
+      supplier: tencent
+      #您的accessKey
+      access-key-id: 您的accessKey
+      #您的accessKeySecret
+      access-key-secret: 您的accessKeySecret
+      #您的短信签名
+      signature: 您的短信签名
+      #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置
+      template-id: xxxxxxxx
+      #您的sdkAppId
+      sdk-app-id: 您的sdkAppId

+ 5 - 3
taais-admin/src/main/resources/application.yml

@@ -9,7 +9,8 @@ taais:
   # 实例演示开关
   demoEnabled: true
   # 文件路径 示例( Windows配置D:/km/uploadPath,Linux配置 /home/km/uploadPath)
-  profile: D:/taais/uploadPath
+  # profile: D:/taais/uploadPath
+  profile: /home/ObjectDetection_Web
   # 获取ip地址开关
   addressEnabled: false
 
@@ -90,9 +91,9 @@ spring:
   servlet:
     multipart:
       # 单个文件大小
-      max-file-size: 10MB
+      max-file-size: 4096MB
       # 设置总上传的文件大小
-      max-request-size: 20MB
+      max-request-size: 4096MB
   mvc:
     format:
       date-time: yyyy-MM-dd HH:mm:ss
@@ -287,6 +288,7 @@ security:
     # 公共路径
     - /favicon.ico
     - /error
+    - /public/**
     # swagger 文档配置
     - /*/api-docs
     - /*/api-docs/**

+ 10 - 0
taais-common/taais-common-core/pom.xml

@@ -149,6 +149,16 @@
             <artifactId>mybatis-flex-spring-boot3-starter</artifactId>
         </dependency>
 
+        <!--            解压-->
+        <dependency>
+            <groupId>com.github.junrar</groupId>
+            <artifactId>junrar</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>net.lingala</groupId>
+            <artifactId>zip4j</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 8 - 1
taais-common/taais-common-core/src/main/java/com/taais/common/core/config/TaaisConfig.java

@@ -1,5 +1,6 @@
 package com.taais.common.core.config;
 
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
@@ -9,12 +10,14 @@ import org.springframework.stereotype.Component;
  * @author wgk
  */
 @Component
-@ConfigurationProperties(prefix = "km")
+//@ConfigurationProperties(prefix = "km")
+@ConfigurationProperties(prefix = "taais")
 public class TaaisConfig {
 
     /**
      * 文件路径
      */
+
     private static String profile;
     /**
      * 获取地址开关
@@ -37,10 +40,13 @@ public class TaaisConfig {
      */
     private boolean demoEnabled;
 
+
     public static String getProfile() {
+
         return profile;
     }
 
+//    @Value("${taais.profile}")
     public void setProfile(String profile) {
         TaaisConfig.profile = profile;
     }
@@ -81,6 +87,7 @@ public class TaaisConfig {
         return getProfile() + "/upload";
     }
 
+
     public String getName() {
         return name;
     }

+ 1 - 0
taais-common/taais-common-core/src/main/java/com/taais/common/core/constant/Constants.java

@@ -84,6 +84,7 @@ public class Constants {
     /**
      * 资源映射路径 前缀
      */
+
     public static final String RESOURCE_PREFIX = "/profile";
 
 

+ 8 - 0
taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/DateUtils.java

@@ -86,6 +86,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         Date now = new Date();
         return DateFormatUtils.format(now, "yyyy/MM/dd");
     }
+    public static final String allDatePath() {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyy/MM/dd/HHmmssSSS");
+    }
+
 
     /**
      * 日期路径 即年/月/日 如20180808
@@ -123,6 +128,9 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
     public static int differentDaysByMillisecond(Date date1, Date date2) {
         return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
     }
+    public static long differentSecondByDate(Date date1, Date date2) {
+        return (date2.getTime() - date1.getTime()) / 1000;
+    }
 
     /**
      * 计算时间差

+ 3 - 3
taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/ServletUtils.java

@@ -29,7 +29,7 @@ public class ServletUtils extends JakartaServletUtil {
      * 获取String参数
      */
     public static String getParameter(String name) {
-        return getRequest().getParameter(name);
+        return getRequest() == null ? null :getRequest().getParameter(name);
     }
 
     /**
@@ -57,7 +57,7 @@ public class ServletUtils extends JakartaServletUtil {
      * 获取Boolean参数
      */
     public static Boolean getParameterToBool(String name) {
-        return Convert.toBool(getRequest().getParameter(name));
+        return Convert.toBool(getRequest() == null ? null: getRequest().getParameter(name));
     }
 
     /**
@@ -96,7 +96,7 @@ public class ServletUtils extends JakartaServletUtil {
      * 获取request
      */
     public static HttpServletRequest getRequest() {
-        return getRequestAttributes().getRequest();
+        return getRequestAttributes() == null ? null : getRequestAttributes().getRequest();
     }
 
     /**

+ 7 - 1
taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/file/FileUploadUtils.java

@@ -7,6 +7,7 @@ import com.taais.common.core.exception.file.FileSizeLimitExceededException;
 import com.taais.common.core.exception.file.InvalidExtensionException;
 import com.taais.common.core.utils.DateUtils;
 import com.taais.common.core.utils.StringUtils;
+
 import com.taais.common.core.utils.uuid.Seq;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.web.multipart.MultipartFile;
@@ -25,7 +26,7 @@ public class FileUploadUtils {
     /**
      * 默认大小 50M
      */
-    public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
+    public static final long DEFAULT_MAX_SIZE = 4L * 1024 * 1024 * 1024;
 
     /**
      * 默认的文件名最大长度 100
@@ -102,6 +103,7 @@ public class FileUploadUtils {
 
         String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
         file.transferTo(Paths.get(absPath));
+
         return getPathFileName(baseDir, fileName);
     }
 
@@ -112,6 +114,10 @@ public class FileUploadUtils {
         return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
             FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file));
     }
+    public static final String extractFilename2(MultipartFile file) {
+        return StringUtils.format("{}/{}.{}", DateUtils.allDatePath(),
+            FilenameUtils.getBaseName(file.getOriginalFilename()), getExtension(file));
+    }
 
     public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
         File desc = new File(uploadDir + File.separator + fileName);

+ 77 - 0
taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/file/FileUtils.java

@@ -2,6 +2,7 @@ package com.taais.common.core.utils.file;
 
 import cn.hutool.core.io.FileUtil;
 import com.taais.common.core.config.TaaisConfig;
+import com.taais.common.core.constant.Constants;
 import com.taais.common.core.utils.DateUtils;
 import com.taais.common.core.utils.StringUtils;
 import com.taais.common.core.utils.uuid.IdUtils;
@@ -22,6 +23,11 @@ import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 文件处理工具类
@@ -106,6 +112,7 @@ public class FileUtils extends FileUtil {
         // 路径为文件且不为空则进行删除
         if (file.isFile() && file.exists()) {
             flag = file.delete();
+
         }
         return flag;
     }
@@ -251,4 +258,74 @@ public class FileUtils extends FileUtil {
         String baseName = FilenameUtils.getBaseName(fileName);
         return baseName;
     }
+
+    public static void copyFile(String source, String target) throws IOException {
+        // 源文件路径
+        Path sourcePath = Paths.get(source);
+
+        // 目标文件夹路径
+        Path targetDirectory = Paths.get(target);
+
+        // 如果目标文件夹不存在,创建它
+        if (!Files.exists(targetDirectory)) {
+            Files.createDirectories(targetDirectory);
+        }
+
+        // 目标文件路径
+        Path targetPath = targetDirectory.resolve(sourcePath.getFileName());
+
+        // 执行文件复制
+        Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
+    }
+
+    public static List<String> getAllFileNamesAndExtensions(String directoryPath) throws IOException {
+        List<String> fileNamesAndExtensions = new ArrayList<>();
+
+        // 使用 Files.walk 遍历目录
+        try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(directoryPath))) {
+            for (Path entry : stream) {
+                if (Files.isRegularFile(entry)) {
+                    String fileName = entry.getFileName().toString();
+                    fileNamesAndExtensions.add(fileName);
+                }
+            }
+        } catch (IOException e) {
+            throw new IOException("Error reading directory", e);
+        }
+
+        return fileNamesAndExtensions;
+    }
+
+    public static Path getTxtPath(String pathFileName) {
+        Path path = Paths.get(TaaisConfig.getProfile()+StringUtils.substringAfter(pathFileName, Constants.RESOURCE_PREFIX));
+
+        // 获取文件名并替换后缀
+        String newFileName = path.getFileName().toString().replaceFirst("[.][^.]+$", "") + ".txt";
+
+        // 创建新的Path对象
+        return path.resolveSibling(newFileName);
+    }
+    public static String getTxtPathStr(String pathFileName) {
+        Path path = Paths.get(pathFileName);
+
+        // 获取文件名并替换后缀
+        String newFileName = path.getFileName().toString().replaceFirst("[.][^.]+$", "") + ".txt";
+
+        // 创建新的Path对象
+        Path newPath = path.resolveSibling(newFileName);
+        return newPath.toAbsolutePath().toString();
+    }
+
+    public static Long getNumberOfFileByFolderPath(String folderPath) {
+
+        File folder = new File(folderPath);
+        File[] list = folder.listFiles();
+        long fileCount = 0;
+        for (File file : list) {
+            if (file.isFile()) {
+                fileCount++;
+            }
+        }
+        return fileCount;
+    }
 }

+ 4 - 1
taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/file/MimeTypeUtils.java

@@ -35,7 +35,10 @@ public class MimeTypeUtils {
         // 视频格式
         "mp4", "avi", "rmvb",
         // pdf
-        "pdf"};
+        "pdf",
+        // pt
+        "pt"
+    };
 
     public static String getExtension(String prefix) {
         switch (prefix) {

+ 132 - 0
taais-common/taais-common-core/src/main/java/com/taais/common/core/utils/file/UnPackedUtil.java

@@ -0,0 +1,132 @@
+package com.taais.common.core.utils.file;
+import com.github.junrar.Archive;
+import com.github.junrar.rarfile.FileHeader;
+import net.lingala.zip4j.core.ZipFile;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class UnPackedUtil {
+    private static final Logger logger = LoggerFactory.getLogger(UnPackedUtil.class);
+
+    /**
+     * zip文件解压
+     *
+     * @param destPath 解压文件路径
+     * @param zipFile  压缩文件
+     */
+    public static List<net.lingala.zip4j.model.FileHeader> unPackZip(File zipFile, String destPath) {
+        List<net.lingala.zip4j.model.FileHeader> fileHeaders = new ArrayList<>();
+        try {
+
+            ZipFile zip = new ZipFile(zipFile);
+            /*zip4j默认用GBK编码去解压,这里设置编码为GBK的*/
+            zip.setFileNameCharset("GBK");
+            logger.info("begin unpack zip file....");
+            zip.extractAll(destPath);
+            fileHeaders = zip.getFileHeaders();
+
+        } catch (Exception e) {
+
+            logger.error("解压失败:", e.getMessage(), e);
+
+        }
+        return fileHeaders;
+    }
+
+    /**
+     * rar文件解压(不支持有密码的压缩包)
+     *
+     * @param rarFile  rar压缩包
+     * @param destPath 解压保存路径
+     */
+    public static List<FileHeader> unPackRar(File rarFile, String destPath) {
+        List<FileHeader> fileHeaders = new ArrayList<>();
+        try (Archive archive = new Archive(rarFile)) {
+            if (null != archive) {
+                FileHeader fileHeader = archive.nextFileHeader();
+                File file = null;
+                while (null != fileHeader) {
+                    fileHeaders.add(fileHeader);
+                    // 防止文件名中文乱码问题的处理
+                    String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() : fileHeader.getFileNameW();
+                    if (fileHeader.isDirectory()) {
+                        //是文件夹
+                        file = new File(destPath + File.separator + fileName);
+                        file.mkdirs();
+                    } else {
+                        //不是文件夹
+                        file = new File(destPath + File.separator + fileName.trim());
+                        if (!file.exists()) {
+                            if (!file.getParentFile().exists()) {
+                                // 相对路径可能多级,可能需要创建父目录.
+                                file.getParentFile().mkdirs();
+                            }
+                            file.createNewFile();
+                        }
+                        FileOutputStream os = new FileOutputStream(file);
+                        archive.extractFile(fileHeader, os);
+                        os.close();
+                    }
+                    fileHeader = archive.nextFileHeader();
+                }
+            }
+        } catch (Exception e) {
+            logger.error("解压失败:", e.getMessage(), e);
+        }
+
+        return fileHeaders;
+    }
+
+    // MultipartFile 转 File
+    private static File multipartFileToFile(MultipartFile multipartFile) {
+        File file = null;
+        InputStream inputStream = null;
+        OutputStream outputStream = null;
+        try {
+            inputStream = multipartFile.getInputStream();
+            file = new File(multipartFile.getOriginalFilename());
+            outputStream = new FileOutputStream(file);
+            write(inputStream, outputStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return file;
+    }
+
+    public static void write(InputStream inputStream, OutputStream outputStream) {
+        byte[] buffer = new byte[4096];
+        try {
+            int count = inputStream.read(buffer, 0, buffer.length);
+            while (count != -1) {
+                outputStream.write(buffer, 0, count);
+                count = inputStream.read(buffer, 0, buffer.length);
+            }
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+
+}

+ 5 - 1
taais-common/taais-common-orm/src/main/java/com/taais/common/orm/helper/DataBaseHelper.java

@@ -8,7 +8,7 @@ import lombok.NoArgsConstructor;
 /**
  * 数据库助手:判断数据库类型
  *
- * @author wgk
+ * @author taais
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class DataBaseHelper {
@@ -20,4 +20,8 @@ public class DataBaseHelper {
     public static boolean isPostgreSql() {
         return DbType.POSTGRE_SQL == FlexGlobalConfig.getDefaultConfig().getDbType();
     }
+
+    public static boolean isDmSql() {
+        return DbType.DM == FlexGlobalConfig.getDefaultConfig().getDbType();
+    }
 }

+ 1 - 1
taais-common/taais-common-security/src/main/java/com/taais/common/security/config/SecurityConfig.java

@@ -41,7 +41,7 @@ public class SecurityConfig implements WebMvcConfigurer {
                     SaRouter
                     // 获取所有的
                     .match(allUrlHandler.getUrls())  // 拦截的 path 列表
-                    .check(StpUtil::checkLogin);
+                    .check(StpUtil::checkLogin).notMatch("/public/**");
             })).addPathPatterns("/**")
             // 排除不需要拦截的路径
             .excludePathPatterns(securityProperties.getExcludes());

+ 4 - 0
taais-common/taais-common-web/src/main/java/com/taais/common/web/config/ResourcesConfig.java

@@ -1,5 +1,7 @@
 package com.taais.common.web.config;
 
+import com.taais.common.core.config.TaaisConfig;
+import com.taais.common.core.constant.Constants;
 import com.taais.common.web.interceptor.FlexWebInvokeTimeInterceptor;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.Bean;
@@ -26,6 +28,8 @@ public class ResourcesConfig implements WebMvcConfigurer {
 
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**")
+            .addResourceLocations("file:" + TaaisConfig.getProfile() + "/");
     }
 
     /**

+ 0 - 1
taais-extra/taais-powerjob-server/src/main/java/com/taais/powerjob/PowerJobServerApplication.java

@@ -21,5 +21,4 @@ public class PowerJobServerApplication {
         SpringApplication.run(tech.powerjob.server.PowerJobServerApplication.class, args);
         log.info("文档地址: https://www.yuque.com/powerjob/guidence/problem");
     }
-
 }

+ 19 - 6
taais-extra/taais-powerjob-server/src/main/resources/application-dev.properties

@@ -1,21 +1,34 @@
 oms.env=dev
 ####### Database properties(Configure according to the the environment) #######
+#spring.datasource.remote.hibernate.properties.hibernate.dialect=tech.powerjob.server.persistence.config.dialect.PowerJobPGDialect
+#spring.datasource.core.driver-class-name=org.postgresql.Driver
+#spring.datasource.core.jdbc-url=jdbc:postgresql://localhost:5432/km?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+#spring.datasource.core.username=postgres
+#spring.datasource.core.password=P3x0LG8jzyHRX59l
+## DM???????
+#spring.datasource.remote.hibernate.properties.hibernate.dialect=org.hibernate.dialect.DmDialect
+#spring.datasource.core.driver-class-name=dm.jdbc.driver.DmDriver
+#spring.datasource.core.jdbc-url=jdbc:dm://127.0.0.1:5236?schema=km&useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
+#spring.datasource.core.username=SYSDBA
+#spring.datasource.core.password=SYSDBA123
+## postgres
 spring.datasource.remote.hibernate.properties.hibernate.dialect=tech.powerjob.server.persistence.config.dialect.PowerJobPGDialect
 spring.datasource.core.driver-class-name=org.postgresql.Driver
-spring.datasource.core.jdbc-url=jdbc:postgresql://localhost:5432/km?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+spring.datasource.core.jdbc-url=jdbc:postgresql://localhost:5432/taais?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
 spring.datasource.core.username=postgres
-spring.datasource.core.password=postgres@369
-## MySQL数据库连接参数
+spring.datasource.core.password=P3x0LG8jzyHRX59l
+## MySQL???????
+#spring.datasource.remote.hibernate.properties.hibernate.dialect=tech.powerjob.server.persistence.config.dialect.PowerJobPGDialect
 #spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver
 #spring.datasource.core.jdbc-url=jdbc:mysql://localhost:3306/km?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
 #spring.datasource.core.username=root
 #spring.datasource.core.password=Root@369
 spring.datasource.core.maximum-pool-size=20
 spring.datasource.core.minimum-idle=5
-# 监控配置
-# 客户端开关
+# ????
+# ?????
 spring.boot.admin.client.enabled=true
-# 设置 Spring Boot Admin Server 地址
+# ?? Spring Boot Admin Server ??
 spring.boot.admin.client.url:http://localhost:9090/admin
 spring.boot.admin.client.instance.service-host-type=IP
 spring.boot.admin.client.username=km

+ 1 - 0
taais-modules/pom.xml

@@ -15,6 +15,7 @@
         <module>taais-generator</module>
         <module>taais-job</module>
         <module>taais-system</module>
+        <module>taais-biz</module>
     </modules>
 
     <artifactId>taais-modules</artifactId>

+ 64 - 0
taais-modules/taais-biz/pom.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.taais</groupId>
+        <artifactId>taais-modules</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>jar</packaging>
+
+    <artifactId>taais-biz</artifactId>
+
+    <description>
+        biz模块
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.taais</groupId>
+            <artifactId>taais-common-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.taais</groupId>
+            <artifactId>taais-common-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.taais</groupId>
+            <artifactId>taais-common-springdoc</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.taais</groupId>
+            <artifactId>taais-common-excel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.taais</groupId>
+            <artifactId>taais-common-log</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.taais</groupId>
+            <artifactId>taais-system</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webflux</artifactId>
+        </dependency>
+        <!--        <dependency>-->
+<!--            <groupId>org.apache.httpcomponents</groupId>-->
+<!--            <artifactId>httpclient</artifactId>-->
+<!--            <version>4.5.14</version>-->
+<!--        </dependency>-->
+
+    </dependencies>
+
+</project>

+ 22 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/component/ScheduledTasks.java

@@ -0,0 +1,22 @@
+package com.taais.biz.component;
+
+import com.taais.biz.service.IAlgorithmTaskService;
+import jakarta.annotation.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ScheduledTasks {
+    private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
+
+    @Resource
+    IAlgorithmTaskService algorithmTaskService;
+    @Scheduled(fixedRate = 10000)
+    public void runTask() {
+        log.info("ScheduledTasks.runTask start");
+        algorithmTaskService.taskRun();
+        log.info("ScheduledTasks.runTask end");
+    }
+}

+ 13 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/component/WebClientConfig.java

@@ -0,0 +1,13 @@
+package com.taais.biz.component;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.reactive.function.client.WebClient;
+
+@Configuration
+public class WebClientConfig {
+    @Bean
+    public WebClient.Builder webClientBuilder() {
+        return WebClient.builder();
+    }
+}

+ 67 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/constant/BizConstant.java

@@ -0,0 +1,67 @@
+package com.taais.biz.constant;
+
+/**
+ * @author allen
+ */
+public class BizConstant {
+
+    public static final String TASK_FOLDER_PATH_HEAD = "/task/";
+
+    public static final String TASK_FOLDER_PATH_MID_TRAIN = "/train/";
+    public static final String TASK_FOLDER_PATH_MID_TEST = "/test/";
+
+    public static final String TASK_FOLDER_PATH_MID_REASONING = "/reasoning/";
+
+    public static final String TASK_FOLDER_PATH_TRAIL_ORIGINAL = "/original/";
+
+    public static final String TASK_FOLDER_PATH_TRAIL_ENHANCEMENT = "/enhancement/";
+
+    public static final String TASK_FOLDER_PATH_TRAIL_EXPANSION = "/expansion/";
+
+    public static final String TASK_FOLDER_PATH_TRAIL_RESULT= "/result/";
+
+    public static final String TASK_FOLDER_PATH_LOG= "log/";
+    public static final String TASK_FOLDER_LOG_PATH= TASK_FOLDER_PATH_LOG+"log.log";
+    public static final String IMAGE = "images/";
+    public static final String LABEL = "labels/";
+
+    public static final String STEP1_SELECT_TASK = "1";
+    public static final String STEP2_TRAIN_DATA_SELECT = "2";
+    public static final String STEP3_TRAIN_DATA_ENHANCEMENT = "3";
+    public static final String STEP4_TRAIN_DATA_EXPANSION = "4";
+    public static final String STEP5_TRAIN = "5";
+
+    public static final String STEP6_TEST_DATA_SELECT = "6";
+    public static final String STEP7_TEST_DATA_ENHANCEMENT = "7";
+    public static final String STEP8_TEST_DATA_EXPANSION = "8";
+    public static final String STEP9_TEST = "9";
+
+    public static final String STEP10_REASONING_DATA_SELECT = "10";
+    public static final String STEP11_REASONING_DATA_ENHANCEMENT = "11";
+    public static final String STEP12_REASONING_DATA_EXPANSION = "12";
+    public static final String STEP13_REASONING = "13";
+
+    // task status 要和数据字典保持一致 biz_task_status
+    public static final String TASK_STATUS_PENDING = "0";
+    public static final String TASK_STATUS_PROCESSING = "1";
+    public static final String TASK_STATUS_SUCCEED = "2";
+    public static final String TASK_STATUS_FAILED = "3";
+    // 同步数据字典配置biz_ag_type
+    public static final String TASK_BIZ_AG_TYPE1_CODE = "1"; // 训练
+    public static final String TASK_BIZ_AG_TYPE1_CN = "训练"; // 训练
+    public static final String TASK_BIZ_AG_TYPE2_CODE = "2"; // 测试
+    public static final String TASK_BIZ_AG_TYPE2_CN = "验证"; // 测试
+    public static final String TASK_BIZ_AG_TYPE3_CODE = "3"; // 推理
+    public static final String TASK_BIZ_AG_TYPE3_CN = "测试"; // 推理
+    public static final String TASK_BIZ_AG_TYPE4_CODE = "4"; // 增广
+    public static final String TASK_BIZ_AG_TYPE4_CN = "增广"; // 增广
+
+    public static final String TYPE_DATA_PROCESS = "dataProcess";
+    public static final String TYPE_DATA_BIZ_PROCESS = "dataBizProcess";
+    public static final String R_CURVE = "R_curve.png";
+    public static final String P_CURVE = "P_curve.png";
+    public static final String F1_CURVE = "F1_curve.png";
+    public static final String ORIGINAL_IMAGE= "原始图片";
+    public static final String DOCKER_BASE_PATH= "/workspace";
+    public static final String DOCKER_PT_PATH= "weights/best.pt";
+}

+ 141 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmBizProcessController.java

@@ -0,0 +1,141 @@
+package com.taais.biz.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.taais.biz.domain.bo.AlgorithmBizProcessBo;
+import com.taais.biz.domain.dto.task.TestResultDto;
+import com.taais.biz.domain.dto.task.TranResultDto;
+import com.taais.biz.domain.vo.AlgorithmBizProcessVo;
+import com.taais.biz.service.IAlgorithmBizProcessService;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.core.core.page.PageResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 算法业务处理Controller
+ *
+ * @author 0
+ * 2024-06-14
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/task/bizProcess")
+public class AlgorithmBizProcessController extends BaseController {
+
+    private static final Logger log = LoggerFactory.getLogger(AlgorithmBizProcessController.class);
+    @Resource
+    private IAlgorithmBizProcessService algorithmBizProcessService;
+
+    /**
+     * 查询算法业务处理列表
+     */
+    @SaCheckPermission("task:bizProcess:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmBizProcessVo>> list(AlgorithmBizProcessBo algorithmBizProcessBo) {
+        return CommonResult.success(algorithmBizProcessService.selectPage(algorithmBizProcessBo));
+    }
+
+    /**
+     * 导出算法业务处理列表
+     */
+    @SaCheckPermission("task:bizProcess:export")
+    @Log(title = "算法业务处理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmBizProcessBo algorithmBizProcessBo) {
+        List<AlgorithmBizProcessVo> list = algorithmBizProcessService.selectList(algorithmBizProcessBo);
+        ExcelUtil.exportExcel(list, "算法业务处理", AlgorithmBizProcessVo.class, response);
+    }
+
+    /**
+     * 获取算法业务处理详细信息
+     */
+    @SaCheckPermission("task:bizProcess:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmBizProcessVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmBizProcessService.selectById(id));
+    }
+
+    /**
+     * 新增算法业务处理
+     */
+    @SaCheckPermission("task:bizProcess:add")
+    @Log(title = "算法业务处理", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmBizProcessBo algorithmBizProcessBo) {
+        boolean inserted = algorithmBizProcessService.insert(algorithmBizProcessBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法业务处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法业务处理
+     */
+    @SaCheckPermission("task:bizProcess:edit")
+    @Log(title = "算法业务处理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmBizProcessBo algorithmBizProcessBo) {
+        Boolean updated = algorithmBizProcessService.update(algorithmBizProcessBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法业务处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法业务处理
+     */
+    @SaCheckPermission("task:bizProcess:remove")
+    @Log(title = "算法业务处理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmBizProcessService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法业务处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    @GetMapping("/getProcessBySubtaskId/{subtaskId}")
+    public CommonResult<List<AlgorithmBizProcessVo>> getProcessBySubtaskId(@PathVariable Long subtaskId) {
+        return CommonResult.success(algorithmBizProcessService.getProcessBySubtaskId(subtaskId));
+    }
+
+    @GetMapping("/getTrainResult/{subtaskId}")
+    public CommonResult<TranResultDto> getTranResult(@PathVariable Long subtaskId) {
+        return CommonResult.success(algorithmBizProcessService.getTranResult(subtaskId));
+    }
+    @GetMapping("/getVerifyResult/{subtaskId}")
+    public CommonResult<TranResultDto> getVerifyResult(@PathVariable Long subtaskId) {
+        return CommonResult.success(algorithmBizProcessService.getTranResult(subtaskId));
+    }
+    @GetMapping("/getTestResult/{subtaskId}")
+    public CommonResult<TestResultDto> getTestResult(@PathVariable Long subtaskId) {
+        TestResultDto testResult = null;
+        try {
+            testResult = algorithmBizProcessService.getTestResult(subtaskId);
+        } catch (IOException e) {
+            // 日志
+            log.error("getTestResult 异常",e);
+            return CommonResult.fail("系统异常,请联系管理员");
+        }
+        return CommonResult.success(testResult);
+    }
+}

+ 114 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmConfigController.java

@@ -0,0 +1,114 @@
+package com.taais.biz.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.taais.biz.domain.vo.AlgorithmConfigVo;
+import com.taais.biz.domain.bo.AlgorithmConfigBo;
+import com.taais.biz.service.IAlgorithmConfigService;
+
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法配置Controller
+ *
+ * @author 0
+ * 2024-05-28
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/ag/config")
+public class AlgorithmConfigController extends BaseController {
+    @Resource
+    private IAlgorithmConfigService algorithmConfigService;
+
+    /**
+     * 查询算法配置列表
+     */
+    @SaCheckPermission("ag:config:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmConfigVo>> list(AlgorithmConfigBo algorithmConfigBo) {
+        return CommonResult.success(algorithmConfigService.selectPage(algorithmConfigBo));
+    }
+
+    /**
+     * 导出算法配置列表
+     */
+    @SaCheckPermission("ag:config:export")
+    @Log(title = "算法配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmConfigBo algorithmConfigBo) {
+        List<AlgorithmConfigVo> list = algorithmConfigService.selectList(algorithmConfigBo);
+        ExcelUtil.exportExcel(list, "算法配置", AlgorithmConfigVo.class, response);
+    }
+
+    /**
+     * 获取算法配置详细信息
+     */
+    @SaCheckPermission("ag:config:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmConfigVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmConfigService.selectById(id));
+    }
+
+    /**
+     * 新增算法配置
+     */
+    @SaCheckPermission("ag:config:add")
+    @Log(title = "算法配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmConfigBo algorithmConfigBo) {
+        boolean inserted = algorithmConfigService.insert(algorithmConfigBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法配置记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法配置
+     */
+    @SaCheckPermission("ag:config:edit")
+    @Log(title = "算法配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmConfigBo algorithmConfigBo) {
+        Boolean updated = algorithmConfigService.update(algorithmConfigBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法配置记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法配置
+     */
+    @SaCheckPermission("ag:config:remove")
+    @Log(title = "算法配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmConfigService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法配置记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    @GetMapping("/getOption")
+    public CommonResult<List> getOption() {
+        return CommonResult.success(algorithmConfigService.getOption());
+    }
+}

+ 109 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmDataProcessController.java

@@ -0,0 +1,109 @@
+package com.taais.biz.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.taais.biz.domain.vo.AlgorithmDataProcessVo;
+import com.taais.biz.domain.bo.AlgorithmDataProcessBo;
+import com.taais.biz.service.IAlgorithmDataProcessService;
+
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法数据处理Controller
+ *
+ * @author 0
+ * 2024-06-14
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/task/dataProcess")
+public class AlgorithmDataProcessController extends BaseController {
+    @Resource
+    private IAlgorithmDataProcessService algorithmDataProcessService;
+
+    /**
+     * 查询算法数据处理列表
+     */
+    @SaCheckPermission("task:dataProcess:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmDataProcessVo>> list(AlgorithmDataProcessBo algorithmDataProcessBo) {
+        return CommonResult.success(algorithmDataProcessService.selectPage(algorithmDataProcessBo));
+    }
+
+    /**
+     * 导出算法数据处理列表
+     */
+    @SaCheckPermission("task:dataProcess:export")
+    @Log(title = "算法数据处理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmDataProcessBo algorithmDataProcessBo) {
+        List<AlgorithmDataProcessVo> list = algorithmDataProcessService.selectList(algorithmDataProcessBo);
+        ExcelUtil.exportExcel(list, "算法数据处理", AlgorithmDataProcessVo.class, response);
+    }
+
+    /**
+     * 获取算法数据处理详细信息
+     */
+    @SaCheckPermission("task:dataProcess:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmDataProcessVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmDataProcessService.selectById(id));
+    }
+
+    /**
+     * 新增算法数据处理
+     */
+    @SaCheckPermission("task:dataProcess:add")
+    @Log(title = "算法数据处理", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmDataProcessBo algorithmDataProcessBo) {
+        boolean inserted = algorithmDataProcessService.insert(algorithmDataProcessBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法数据处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法数据处理
+     */
+    @SaCheckPermission("task:dataProcess:edit")
+    @Log(title = "算法数据处理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmDataProcessBo algorithmDataProcessBo) {
+        Boolean updated = algorithmDataProcessService.update(algorithmDataProcessBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法数据处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法数据处理
+     */
+    @SaCheckPermission("task:dataProcess:remove")
+    @Log(title = "算法数据处理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmDataProcessService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法数据处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

+ 109 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmDataSetController.java

@@ -0,0 +1,109 @@
+package com.taais.biz.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.taais.biz.domain.vo.AlgorithmDataSetVo;
+import com.taais.biz.domain.bo.AlgorithmDataSetBo;
+import com.taais.biz.service.IAlgorithmDataSetService;
+
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法数据集合Controller
+ *
+ * @author km
+ * 2024-06-14
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/task/dataSet")
+public class AlgorithmDataSetController extends BaseController {
+    @Resource
+    private IAlgorithmDataSetService algorithmDataSetService;
+
+    /**
+     * 查询算法数据集合列表
+     */
+    @SaCheckPermission("task:dataSet:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmDataSetVo>> list(AlgorithmDataSetBo algorithmDataSetBo) {
+        return CommonResult.success(algorithmDataSetService.selectPage(algorithmDataSetBo));
+    }
+
+    /**
+     * 导出算法数据集合列表
+     */
+    @SaCheckPermission("task:dataSet:export")
+    @Log(title = "算法数据集合", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmDataSetBo algorithmDataSetBo) {
+        List<AlgorithmDataSetVo> list = algorithmDataSetService.selectList(algorithmDataSetBo);
+        ExcelUtil.exportExcel(list, "算法数据集合", AlgorithmDataSetVo.class, response);
+    }
+
+    /**
+     * 获取算法数据集合详细信息
+     */
+    @SaCheckPermission("task:dataSet:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmDataSetVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmDataSetService.selectById(id));
+    }
+
+    /**
+     * 新增算法数据集合
+     */
+    @SaCheckPermission("task:dataSet:add")
+    @Log(title = "算法数据集合", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmDataSetBo algorithmDataSetBo) {
+        boolean inserted = algorithmDataSetService.insert(algorithmDataSetBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法数据集合记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法数据集合
+     */
+    @SaCheckPermission("task:dataSet:edit")
+    @Log(title = "算法数据集合", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmDataSetBo algorithmDataSetBo) {
+        Boolean updated = algorithmDataSetService.update(algorithmDataSetBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法数据集合记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法数据集合
+     */
+    @SaCheckPermission("task:dataSet:remove")
+    @Log(title = "算法数据集合", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmDataSetService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法数据集合记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

+ 109 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmModelController.java

@@ -0,0 +1,109 @@
+package com.taais.biz.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.taais.biz.domain.vo.AlgorithmModelVo;
+import com.taais.biz.domain.bo.AlgorithmModelBo;
+import com.taais.biz.service.IAlgorithmModelService;
+
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法模型配置Controller
+ *
+ * @author 0
+ * 2024-05-29
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/ag/model")
+public class AlgorithmModelController extends BaseController {
+    @Resource
+    private IAlgorithmModelService algorithmModelService;
+
+    /**
+     * 查询算法模型配置列表
+     */
+    @SaCheckPermission("ag:model:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmModelVo>> list(AlgorithmModelBo algorithmModelBo) {
+        return CommonResult.success(algorithmModelService.selectPage(algorithmModelBo));
+    }
+
+    /**
+     * 导出算法模型配置列表
+     */
+    @SaCheckPermission("ag:model:export")
+    @Log(title = "算法模型配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmModelBo algorithmModelBo) {
+        List<AlgorithmModelVo> list = algorithmModelService.selectList(algorithmModelBo);
+        ExcelUtil.exportExcel(list, "算法模型配置", AlgorithmModelVo.class, response);
+    }
+
+    /**
+     * 获取算法模型配置详细信息
+     */
+    @SaCheckPermission("ag:model:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmModelVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmModelService.selectById(id));
+    }
+
+    /**
+     * 新增算法模型配置
+     */
+    @SaCheckPermission("ag:model:add")
+    @Log(title = "算法模型配置", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmModelBo algorithmModelBo) {
+        boolean inserted = algorithmModelService.insert(algorithmModelBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法模型配置记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法模型配置
+     */
+    @SaCheckPermission("ag:model:edit")
+    @Log(title = "算法模型配置", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmModelBo algorithmModelBo) {
+        Boolean updated = algorithmModelService.update(algorithmModelBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法模型配置记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法模型配置
+     */
+    @SaCheckPermission("ag:model:remove")
+    @Log(title = "算法模型配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmModelService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法模型配置记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

+ 114 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmSubtaskController.java

@@ -0,0 +1,114 @@
+package com.taais.biz.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.taais.biz.domain.vo.AlgorithmSubtaskVo;
+import com.taais.biz.domain.bo.AlgorithmSubtaskBo;
+import com.taais.biz.service.IAlgorithmSubtaskService;
+
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法子任务Controller
+ *
+ * @author Allen
+ * 2024-06-11
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/task/subtask")
+public class AlgorithmSubtaskController extends BaseController {
+    @Resource
+    private IAlgorithmSubtaskService algorithmSubtaskService;
+
+    /**
+     * 查询算法子任务列表
+     */
+    @SaCheckPermission("task:subtask:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmSubtaskVo>> list(AlgorithmSubtaskBo algorithmSubtaskBo) {
+        return CommonResult.success(algorithmSubtaskService.selectPage(algorithmSubtaskBo));
+    }
+
+    /**
+     * 导出算法子任务列表
+     */
+    @SaCheckPermission("task:subtask:export")
+    @Log(title = "算法子任务", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmSubtaskBo algorithmSubtaskBo) {
+        List<AlgorithmSubtaskVo> list = algorithmSubtaskService.selectList(algorithmSubtaskBo);
+        ExcelUtil.exportExcel(list, "算法子任务", AlgorithmSubtaskVo.class, response);
+    }
+
+    /**
+     * 获取算法子任务详细信息
+     */
+    @SaCheckPermission("task:subtask:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmSubtaskVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmSubtaskService.selectById(id));
+    }
+
+    /**
+     * 新增算法子任务
+     */
+    @SaCheckPermission("task:subtask:add")
+    @Log(title = "算法子任务", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmSubtaskBo algorithmSubtaskBo) {
+        boolean inserted = algorithmSubtaskService.insert(algorithmSubtaskBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法子任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法子任务
+     */
+    @SaCheckPermission("task:subtask:edit")
+    @Log(title = "算法子任务", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmSubtaskBo algorithmSubtaskBo) {
+        Boolean updated = algorithmSubtaskService.update(algorithmSubtaskBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法子任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法子任务
+     */
+    @SaCheckPermission("task:subtask:remove")
+    @Log(title = "算法子任务", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmSubtaskService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法子任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    @GetMapping("/getSubtaskByTaskId/{taskId}")
+    public CommonResult<List<AlgorithmSubtaskVo>> getSubtaskByTaskId(@PathVariable Long taskId) {
+        return CommonResult.success(algorithmSubtaskService.getSubtaskByTaskId(taskId));
+    }
+}

+ 109 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmSubtaskDetailController.java

@@ -0,0 +1,109 @@
+package com.taais.biz.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.taais.biz.domain.vo.AlgorithmSubtaskDetailVo;
+import com.taais.biz.domain.bo.AlgorithmSubtaskDetailBo;
+import com.taais.biz.service.IAlgorithmSubtaskDetailService;
+
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法子任务详情Controller
+ *
+ * @author 0
+ * 2024-05-29
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/task/subtaskDetail")
+public class AlgorithmSubtaskDetailController extends BaseController {
+    @Resource
+    private IAlgorithmSubtaskDetailService algorithmSubtaskDetailService;
+
+    /**
+     * 查询算法子任务详情列表
+     */
+    @SaCheckPermission("task:subtaskDetail:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmSubtaskDetailVo>> list(AlgorithmSubtaskDetailBo algorithmSubtaskDetailBo) {
+        return CommonResult.success(algorithmSubtaskDetailService.selectPage(algorithmSubtaskDetailBo));
+    }
+
+    /**
+     * 导出算法子任务详情列表
+     */
+    @SaCheckPermission("task:subtaskDetail:export")
+    @Log(title = "算法子任务详情", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmSubtaskDetailBo algorithmSubtaskDetailBo) {
+        List<AlgorithmSubtaskDetailVo> list = algorithmSubtaskDetailService.selectList(algorithmSubtaskDetailBo);
+        ExcelUtil.exportExcel(list, "算法子任务详情", AlgorithmSubtaskDetailVo.class, response);
+    }
+
+    /**
+     * 获取算法子任务详情详细信息
+     */
+    @SaCheckPermission("task:subtaskDetail:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmSubtaskDetailVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmSubtaskDetailService.selectById(id));
+    }
+
+    /**
+     * 新增算法子任务详情
+     */
+    @SaCheckPermission("task:subtaskDetail:add")
+    @Log(title = "算法子任务详情", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmSubtaskDetailBo algorithmSubtaskDetailBo) {
+        boolean inserted = algorithmSubtaskDetailService.insert(algorithmSubtaskDetailBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法子任务详情记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法子任务详情
+     */
+    @SaCheckPermission("task:subtaskDetail:edit")
+    @Log(title = "算法子任务详情", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmSubtaskDetailBo algorithmSubtaskDetailBo) {
+        Boolean updated = algorithmSubtaskDetailService.update(algorithmSubtaskDetailBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法子任务详情记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法子任务详情
+     */
+    @SaCheckPermission("task:subtaskDetail:remove")
+    @Log(title = "算法子任务详情", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmSubtaskDetailService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法子任务详情记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

+ 180 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmTaskController.java

@@ -0,0 +1,180 @@
+package com.taais.biz.controller;
+
+import java.util.List;
+
+import com.taais.biz.domain.bo.AlgorithmConfigBo;
+import com.taais.biz.domain.bo.AlgorithmModelBo;
+import com.taais.biz.domain.bo.DataBo;
+import com.taais.biz.domain.dto.task.CreateTaskDto;
+import com.taais.biz.domain.vo.AlgorithmConfigVo;
+import com.taais.biz.domain.vo.AlgorithmModelVo;
+import com.taais.biz.domain.vo.DataVo;
+import com.taais.biz.service.IAlgorithmConfigService;
+import com.taais.biz.service.IAlgorithmModelService;
+import com.taais.biz.service.IDataService;
+import com.taais.common.core.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.taais.biz.domain.vo.AlgorithmTaskVo;
+import com.taais.biz.domain.bo.AlgorithmTaskBo;
+import com.taais.biz.service.IAlgorithmTaskService;
+
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法任务Controller
+ *
+ * @author 0
+ * 2024-05-29
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/task/task")
+public class AlgorithmTaskController extends BaseController {
+    @Resource
+    private IAlgorithmTaskService algorithmTaskService;
+    @Resource
+    private DataController dataController;
+    @Resource
+    private IAlgorithmConfigService algorithmConfigService;
+    @Resource
+    private IAlgorithmModelService modelService;
+
+    /**
+     * 查询算法任务列表
+     */
+    @SaCheckPermission("task:task:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmTaskVo>> list(AlgorithmTaskBo algorithmTaskBo) {
+        return CommonResult.success(algorithmTaskService.selectPage(algorithmTaskBo));
+    }
+
+    /**
+     * 导出算法任务列表
+     */
+    @SaCheckPermission("task:task:export")
+    @Log(title = "算法任务导出", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmTaskBo algorithmTaskBo) {
+        List<AlgorithmTaskVo> list = algorithmTaskService.selectList(algorithmTaskBo);
+        ExcelUtil.exportExcel(list, "算法任务", AlgorithmTaskVo.class, response);
+    }
+
+    /**
+     * 获取算法任务详细信息
+     */
+    @SaCheckPermission("task:task:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmTaskVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmTaskService.selectById(id));
+    }
+
+    /**
+     * 新增算法任务
+     */
+    @SaCheckPermission("task:task:add")
+    @Log(title = "算法任务", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmTaskBo algorithmTaskBo) {
+        boolean inserted = algorithmTaskService.insert(algorithmTaskBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法任务
+     */
+    @SaCheckPermission("task:task:edit")
+    @Log(title = "算法任务", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmTaskBo algorithmTaskBo) {
+        Boolean updated = algorithmTaskService.update(algorithmTaskBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法任务
+     */
+    @SaCheckPermission("task:task:remove")
+    @Log(title = "算法任务", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmTaskService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 新增算法任务
+     */
+    @SaCheckPermission("task:task:add")
+    @Log(title = "算法任务", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping("/create")
+    public CommonResult<Object> create(@RequestBody CreateTaskDto taskDto) {
+        String string = algorithmTaskService.create(taskDto);
+        if (StringUtils.isNotEmpty(string)) {
+            try {
+                return CommonResult.success(Long.parseLong(string));
+            } catch (NumberFormatException e) {
+                return CommonResult.fail("新增算法任务记录失败!失败圆晕:"+string);
+            }
+        }
+        return CommonResult.success();
+    }
+
+    @Log(title = "算法定时任务", businessType = BusinessType.INSERT)
+    @GetMapping("/taskRun")
+    public CommonResult<Void> taskRun() {
+        algorithmTaskService.taskRun();
+        return CommonResult.success();
+    }
+
+    @SaCheckPermission("task:task:add")
+    @PostMapping("/getImage")
+    public CommonResult<PageResult<DataVo>> getImage(@Validated @RequestBody DataBo data) {
+        return dataController.list(data);
+    }
+
+    @SaCheckPermission("task:task:add")
+    @PostMapping("/getAlgorithm/{type}/{subsystem}")
+    public CommonResult<List<AlgorithmConfigVo>> getAlgorithm(@PathVariable String type, @PathVariable String subsystem) {
+        AlgorithmConfigBo algorithmConfigBo = new AlgorithmConfigBo();
+        algorithmConfigBo.setType(type);
+        algorithmConfigBo.setSubsystem(subsystem);
+        return CommonResult.success(algorithmConfigService.selectList(algorithmConfigBo));
+    }
+
+    @SaCheckPermission("task:task:add")
+    @PostMapping("/getModel/{algorithmId}")
+    public CommonResult<List<AlgorithmModelVo>> getModel(@PathVariable Long algorithmId) {
+        AlgorithmModelBo algorithmModel = new AlgorithmModelBo();
+        algorithmModel.setAlgorithmId(algorithmId);
+        return CommonResult.success(modelService.selectList(algorithmModel));
+    }
+
+    @GetMapping("/getAlgorithmOption")
+    public CommonResult<List> getAlgorithmOption() {
+        return CommonResult.success(algorithmConfigService.getOption());
+    }
+}

+ 226 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/DataController.java

@@ -0,0 +1,226 @@
+package com.taais.biz.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.taais.common.core.config.TaaisConfig;
+import com.taais.common.core.constant.Constants;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.core.core.page.PageResult;
+import com.taais.common.core.utils.MapstructUtils;
+import com.taais.common.core.utils.StringUtils;
+import com.taais.common.core.utils.file.FileUploadUtils;
+import com.taais.common.core.utils.file.FileUtils;
+import com.taais.common.core.utils.file.UnPackedUtil;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import com.taais.biz.domain.Data;
+import com.taais.biz.domain.bo.DataBo;
+import com.taais.biz.domain.vo.DataVo;
+import com.taais.biz.service.IDataService;
+import com.taais.system.config.ServerConfig;
+import com.taais.system.domain.vo.SysOssUploadVo;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import net.lingala.zip4j.model.FileHeader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 数据管理Controller
+ *
+ * @author km
+ * 2024-04-22
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/demo/data")
+public class DataController extends BaseController {
+    @Resource
+    private IDataService dataService;
+    @Autowired
+    private ServerConfig serverConfig;
+
+    /**
+     * 查询数据管理列表
+     */
+    @SaCheckPermission("demo:data:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<DataVo>> list(DataBo dataBo) {
+
+        return CommonResult.success(dataService.selectPage(dataBo));
+
+    }
+
+    /**
+     * 导出数据管理列表
+     */
+    @SaCheckPermission("demo:data:export")
+    @Log(title = "数据管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, DataBo dataBo) {
+        List<DataVo> list = dataService.selectList(dataBo);
+        ExcelUtil.exportExcel(list, "数据管理", DataVo.class, response);
+    }
+
+    /**
+     * 获取数据管理详细信息
+     */
+    @SaCheckPermission("demo:data:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<DataVo> getInfo(@PathVariable Long id) {
+
+        return CommonResult.success(dataService.selectById(id));
+    }
+
+    /**
+     * 新增数据管理
+     */
+    @SaCheckPermission("demo:data:add")
+    @Log(title = "数据管理", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody DataBo dataBo) {
+        boolean inserted = dataService.insert(dataBo);
+        if (!inserted) {
+            return CommonResult.fail("新增数据管理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改数据管理
+     */
+    @SaCheckPermission("demo:data:edit")
+    @Log(title = "数据管理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody DataBo dataBo) {
+        Boolean updated = dataService.update(dataBo);
+        if (!updated) {
+            return CommonResult.fail("修改数据管理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除数据管理
+     */
+    @SaCheckPermission("demo:data:remove")
+    @Log(title = "数据管理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = dataService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除数据管理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response) {
+        ExcelUtil.exportExcel(new ArrayList<>(), "用户数据", DataVo.class, response);
+    }
+
+    @PostMapping("/zip/upload")
+    public CommonResult<SysOssUploadVo> uploadZipFile(@RequestParam("file") MultipartFile file, @RequestParam("excelFile") MultipartFile excelFile) throws Exception {
+
+        List<DataVo> dataVos = ExcelUtil.importExcel(excelFile.getInputStream(),DataVo.class);
+        Map<String, Data> picName2Obj = new HashMap<>();
+        //为插入数据库做准备
+        for(DataVo dataVo:dataVos){
+            picName2Obj.put(dataVo.getName(), MapstructUtils.convert(dataVo, Data.class));
+        }
+        String  originalFilename = file.getOriginalFilename();
+        assert originalFilename != null;
+        String suffix = StringUtils.substring(originalFilename, originalFilename.lastIndexOf("."), originalFilename.length());
+
+
+        // 解压
+        String basedir = TaaisConfig.getUploadPath();
+        File zipOrRarTemp = FileUploadUtils.getAbsoluteFile(basedir,FileUploadUtils.extractFilename2(file));// 解压目录
+        String destZip = zipOrRarTemp.getAbsolutePath();
+
+        file.transferTo(Paths.get(destZip));
+        String dest = zipOrRarTemp.getParent();
+
+        List<File> extractedFileList = new ArrayList<File>();
+        if(suffix.equals(".zip")){
+            List<FileHeader> fileheaders = UnPackedUtil.unPackZip(zipOrRarTemp,dest);
+            //添加解压目录
+            for(FileHeader fileHeader : fileheaders) {
+                if (!fileHeader.isDirectory()) {
+                    String fileHeaderName = fileHeader.getFileName();
+                    String fileHeaderSuffix = StringUtils.substring(fileHeaderName, fileHeaderName.lastIndexOf("."), fileHeaderName.length());
+                    if(!fileHeaderSuffix.equals(".jpg")&&!fileHeaderSuffix.equals(".jpeg")
+                        &&!fileHeaderSuffix.equals(".png")){
+                        continue;
+                    }
+                    extractedFileList.add(new File(dest,fileHeader.getFileName()));
+                }
+            }
+
+
+
+        }else if(suffix.equals(".rar")){
+            List<com.github.junrar.rarfile.FileHeader> fileheaders = UnPackedUtil.unPackRar(zipOrRarTemp,dest);
+
+
+            //添加解压目录
+            for(com.github.junrar.rarfile.FileHeader fileHeader : fileheaders) {
+
+                if (!fileHeader.isDirectory()) {
+                    String fileHeaderName = fileHeader.getFileName();
+                    String fileHeaderSuffix = StringUtils.substring(fileHeaderName, fileHeaderName.lastIndexOf("."), fileHeaderName.length());
+                    if(!fileHeaderSuffix.equals(".jpg")&&!fileHeaderSuffix.equals(".jpeg")
+                        &&!fileHeaderSuffix.equals(".png")){
+                        continue;
+                    }
+                    extractedFileList.add(new File(dest,fileHeader.getFileName()));
+                }
+            }
+        }
+
+        for(File efile:extractedFileList) {
+            String pathFileName = FileUploadUtils.getPathFileName(dest,efile.getName());
+            Data mydata = picName2Obj.get(efile.getName());
+
+            // 检查是否已标准抓住
+            if(checkLabeled(pathFileName)){
+                mydata.setLabeled(Boolean.TRUE);
+            } else {
+                mydata.setLabeled(Boolean.FALSE);
+            }
+            mydata.setUrl(pathFileName);
+            dataService.save(mydata);
+        }
+        //删除压缩文件
+        FileUtils.deleteFile(destZip);
+
+
+        return CommonResult.success("数据集上传成功!");
+    }
+
+    // 检查有没有标注信息有的话把标注数据置为已标注
+    private boolean checkLabeled(String pathFileName) {
+        Path newPath = FileUtils.getTxtPath(pathFileName);
+
+        // 检查替换后的文件是否存在
+        return Files.exists(newPath);
+    }
+
+}

+ 83 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/PublicController.java

@@ -0,0 +1,83 @@
+package com.taais.biz.controller;
+
+import com.taais.biz.constant.BizConstant;
+import com.taais.biz.domain.dto.TaskResultDTO;
+import com.taais.biz.service.IAlgorithmBizProcessService;
+import com.taais.biz.service.IAlgorithmDataProcessService;
+import com.taais.biz.service.IAlgorithmTaskService;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author allen
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/public")
+public class PublicController extends BaseController {
+    private static final Logger log = LoggerFactory.getLogger(PublicController.class);
+
+    @Resource
+    IAlgorithmDataProcessService dataProcessService;
+    @Resource
+    IAlgorithmBizProcessService bizProcessService;
+
+    @Resource
+    private IAlgorithmTaskService algorithmTaskService;
+    @PostMapping("/taskResult")
+    public CommonResult<Void> taskResult(@RequestBody TaskResultDTO resultDTO) {
+        log.info("taskResult start,params:{}",resultDTO);
+        String errorMsg = checkDTO(resultDTO);
+        if(StringUtils.isNotEmpty(errorMsg)){
+            log.error("taskResult error,{}",errorMsg);
+            return CommonResult.fail(errorMsg);
+        }
+        String bizType = resultDTO.getBizType();
+        if(BizConstant.TYPE_DATA_BIZ_PROCESS.equals(bizType)){
+            errorMsg = bizProcessService.taskResult(resultDTO);
+        } else if (BizConstant.TYPE_DATA_PROCESS.equals(bizType)) {
+            errorMsg = dataProcessService.taskResult(resultDTO);
+        } else {
+            log.error("这种情况是不可能发生的,参数:{}",resultDTO);
+            return CommonResult.fail("这种情况是不可能发生的");
+        }
+
+        if(StringUtils.isNotEmpty(errorMsg)){
+            return CommonResult.fail(errorMsg);
+        }
+        return CommonResult.success();
+    }
+
+    private String checkDTO(TaskResultDTO resultDTO) {
+        Integer status = resultDTO.getStatus();
+        if(status != 200 && status != 500){
+            return "status 只能是200或500";
+        }
+        Long bizId = resultDTO.getBizId();
+        if(bizId == null){
+            return "bizId 不能为null";
+        }
+        String bizType = resultDTO.getBizType();
+        if(!BizConstant.TYPE_DATA_BIZ_PROCESS.equals(bizType) && !BizConstant.TYPE_DATA_PROCESS.equals(bizType)){
+            return "status 只能是"+BizConstant.TYPE_DATA_BIZ_PROCESS+"或"+BizConstant.TYPE_DATA_PROCESS;
+        }
+        return null;
+    }
+
+    @GetMapping("/taskRun")
+    public CommonResult<Void> taskRun() {
+        algorithmTaskService.taskRun();
+        return CommonResult.success();
+    }
+
+}

+ 85 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmBizProcess.java

@@ -0,0 +1,85 @@
+package com.taais.biz.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法业务处理对象 algorithm_biz_process
+ *
+ * @author 0
+ * 2024-06-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_biz_process")
+public class AlgorithmBizProcess extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /** 子任务id */
+    private Long subTaskId;
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务类型 */
+    private String type;
+
+    /** 任务状态 */
+    private String status;
+
+    /** 算法 */
+    private Long algorithmId;
+
+    /** 模型 */
+    private Long modelId;
+
+    /** 调用算法时所用的参数 */
+    private String parameters;
+
+    /** 预处理数据路径 */
+    private String preprocessPath;
+
+    /** 结果数据路径 */
+    private String resultPath;
+
+    /** 序号 */
+    private Long index;
+
+    /** 开始时间 */
+    private Date startTime;
+
+    /** 结束时间 */
+    private Date endTime;
+
+    /** 耗时 */
+    private Long costSecond;
+
+    /** 日志 */
+    private String log;
+
+    /** 备注 */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    /** 系统 */
+    private String system;
+
+
+}

+ 59 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmConfig.java

@@ -0,0 +1,59 @@
+package com.taais.biz.domain;
+
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法配置对象 algorithm_config
+ *
+ * @author 0
+ * 2024-05-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_config")
+public class AlgorithmConfig extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /** 类型 */
+    private String type;
+
+    /** 父id */
+    private Long parentId;
+
+    /** 分系统 */
+    private String subsystem;
+
+    /** 算法名称 */
+    private String algorithmName;
+
+    /** 算法地址 */
+    private String algorithmAddress;
+
+    /** 参数配置 */
+    private String parameterConfig;
+
+    /** 备注 */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    /** 系统 */
+    private String system;
+
+
+}

+ 82 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmDataProcess.java

@@ -0,0 +1,82 @@
+package com.taais.biz.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法数据处理对象 algorithm_data_process
+ *
+ * @author 0
+ * 2024-06-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_data_process")
+public class AlgorithmDataProcess extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /** 子任务id */
+    private Long subTaskId;
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务类型 */
+    private String type;
+
+    /** 任务状态 */
+    private String status;
+
+    /** 算法 */
+    private Long algorithmId;
+
+    /** 调用算法时所用的参数 */
+    private String parameters;
+
+    /** 预处理数据路径 */
+    private String preprocessPath;
+
+    /** 结果数据路径 */
+    private String resultPath;
+
+    /** 开始时间 */
+    private Date startTime;
+
+    /** 序号 */
+    private Long index;
+
+    /** 结束时间 */
+    private Date endTime;
+
+    /** 耗时 */
+    private Long costSecond;
+
+    /** 日志 */
+    private String log;
+
+    /** 备注 */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    /** 系统 */
+    private String system;
+
+
+}

+ 76 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmDataSet.java

@@ -0,0 +1,76 @@
+package com.taais.biz.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法数据集合对象 algorithm_data_set
+ *
+ * @author km
+ * 2024-06-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_data_set")
+public class AlgorithmDataSet extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /** 子任务id */
+    private Long subTaskId;
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务类型 */
+    private String type;
+
+    /** 任务状态 */
+    private String status;
+
+    /** 调用算法时所用的参数 */
+    private String parameters;
+
+    /** 结果数据路径 */
+    private String resultPath;
+
+    /** 开始时间 */
+    private Date startTime;
+
+    /** 序号 */
+    private Long index;
+
+    /** 结束时间 */
+    private Date endTime;
+
+    /** 耗时 */
+    private Long costSecond;
+
+    /** 日志 */
+    private String log;
+
+    /** 备注 */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    /** 系统 */
+    private String system;
+
+
+}

+ 56 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmModel.java

@@ -0,0 +1,56 @@
+package com.taais.biz.domain;
+
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法模型配置对象 algorithm_model
+ *
+ * @author 0
+ * 2024-05-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_model")
+public class AlgorithmModel extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /** 算法 */
+    private Long algorithmId;
+
+    /** 模型名称 */
+    private String modelName;
+
+    /** 模型 */
+    private String modelAddress;
+
+    /** 训练样本数 */
+    private Long sampleNumber;
+
+    /** 训练循环次数 */
+    private Long cycleEpoch;
+
+    /** 备注 */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    /** 系统 */
+    private String system;
+
+
+}

+ 73 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmSubtask.java

@@ -0,0 +1,73 @@
+package com.taais.biz.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法子任务对象 algorithm_subtask
+ *
+ * @author Allen
+ * 2024-06-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_subtask")
+public class AlgorithmSubtask extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /** 任务ID */
+    private Long taskId;
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务状态 */
+    private String status;
+
+    /** 任务类型 */
+    private String type;
+
+    /** 调用算法时所用的参数 */
+    private String parameters;
+
+    /** 开始时间 */
+    private Date startTime;
+
+    /** 结束时间 */
+    private Date endTime;
+
+    /** 耗时 */
+    private Long costSecond;
+
+    /** 日志 */
+    private String log;
+
+    /** 序号 */
+    private Long index;
+
+    /** 备注 */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    /** 系统 */
+    private String system;
+
+
+}

+ 64 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmSubtaskDetail.java

@@ -0,0 +1,64 @@
+package com.taais.biz.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法子任务详情对象 algorithm_subtask_detail
+ *
+ * @author Allen
+ * 2024-05-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_subtask_detail")
+public class AlgorithmSubtaskDetail extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务状态 */
+    private String status;
+
+    /** 调用算法时所用的参数 */
+    private String parameters;
+
+    /** 开始时间 */
+    private Date startTime;
+
+    /** 结束时间 */
+    private Date endTime;
+
+    /** 耗时 */
+    private Long costSecond;
+
+    /** 日志 */
+    private String log;
+
+    /** 备注 */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    /** 系统 */
+    private String system;
+
+
+}

+ 61 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmTask.java

@@ -0,0 +1,61 @@
+package com.taais.biz.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法任务对象 algorithm_task
+ *
+ * @author 0
+ * 2024-05-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_task")
+public class AlgorithmTask extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务状态 */
+    private String status;
+
+    /** 开始时间 */
+    private Date startTime;
+
+    /** 结束时间 */
+    private Date endTime;
+
+    /** 耗时 */
+    private Long costSecond;
+
+    /** 日志 */
+    private String log;
+
+    /** 备注 */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    /** 系统 */
+    private String system;
+
+
+}

+ 73 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/Data.java

@@ -0,0 +1,73 @@
+package com.taais.biz.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.KeyType;
+import com.mybatisflex.annotation.Table;
+
+import java.util.Date;
+
+/**
+ * 数据管理对象 data
+ *
+ * @author km
+ * 2024-04-22
+ */
+@lombok.Data
+//@EqualsAndHashCode(callSuper = true)
+@Table(value = "data")
+public class Data {
+//    @Serial
+//    private static final long serialVersionUID = 1L;
+
+    /** id */
+    @Id(value = "id",keyType = KeyType.Auto)
+    private Long id;
+
+    /** 名称 */
+    private String name;
+
+    /** 数据类型 */
+    private String dataType;
+
+    /** 文件类型 */
+    private String fileType;
+
+    /** 目标类型 */
+    private String objectType;
+
+    /** 目标子类型 */
+    private String objectSubtype;
+
+    /** 批次号 */
+    private Long batchNum;
+
+    /** 场景 */
+    private String scene;
+
+    /** 数据源 */
+    private String dataSource;
+
+    /** 采集时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date gatherTime;
+
+    /** 采集地点 */
+    private String gatherSpot;
+
+    /** 图片url */
+    private String url;
+
+    /** 标注url */
+    private String labelurl;
+
+    /** 扩增方式 */
+    private String increment;
+
+    /** 是否标注 */
+//    @Column(onInsertValue = "false")
+    private Boolean labeled;
+
+
+}

+ 100 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmBizProcessBo.java

@@ -0,0 +1,100 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmBizProcess;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法业务处理业务对象 algorithm_biz_process
+ *
+ * @author 0
+ * @date 2024-06-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmBizProcess.class, reverseConvertGenerate = false)
+public class AlgorithmBizProcessBo extends BaseEntity{
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 子任务id
+     */
+    private Long subTaskId;
+
+    /**
+     * 任务名称
+     */
+    private String name;
+
+    /**
+     * 任务类型
+     */
+    private String type;
+
+    /**
+     * 任务状态
+     */
+    private String status;
+
+    /**
+     * 算法
+     */
+    private Long algorithmId;
+
+    /**
+     * 模型
+     */
+    private Long modelId;
+
+    /**
+     * 调用算法时所用的参数
+     */
+    private String parameters;
+
+    /**
+     * 预处理数据路径
+     */
+    private String preprocessPath;
+
+    /**
+     * 结果数据路径
+     */
+    private String resultPath;
+
+    /**
+     * 序号
+     */
+    private Long index;
+
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    private Long costSecond;
+
+    /**
+     * 日志
+     */
+    private String log;
+
+
+}

+ 61 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmConfigBo.java

@@ -0,0 +1,61 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmConfig;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法配置业务对象 algorithm_config
+ *
+ * @author 0
+ * @date 2024-05-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmConfig.class, reverseConvertGenerate = false)
+public class AlgorithmConfigBo extends BaseEntity{
+
+    private Long id;
+    /**
+     * 类型
+     */
+    @NotBlank(message = "类型不能为空")
+    private String type;
+
+    /**
+     * 父id
+     */
+    private Long parentId;
+
+    /**
+     * 分系统
+     */
+    private String subsystem;
+
+    /**
+     * 算法名称
+     */
+    @NotBlank(message = "算法名称不能为空")
+    private String algorithmName;
+
+    /**
+     * 算法地址
+     */
+    @NotBlank(message = "算法地址不能为空")
+    private String algorithmAddress;
+
+    /**
+     * 参数配置
+     */
+    private String parameterConfig;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+
+}

+ 95 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmDataProcessBo.java

@@ -0,0 +1,95 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmDataProcess;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法数据处理业务对象 algorithm_data_process
+ *
+ * @author 0
+ * @date 2024-06-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmDataProcess.class, reverseConvertGenerate = false)
+public class AlgorithmDataProcessBo extends BaseEntity{
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 子任务id
+     */
+    private Long subTaskId;
+
+    /**
+     * 任务名称
+     */
+    private String name;
+
+    /**
+     * 任务类型
+     */
+    private String type;
+
+    /**
+     * 任务状态
+     */
+    private String status;
+
+    /**
+     * 算法
+     */
+    private Long algorithmId;
+
+    /**
+     * 调用算法时所用的参数
+     */
+    private String parameters;
+
+    /**
+     * 预处理数据路径
+     */
+    private String preprocessPath;
+
+    /**
+     * 结果数据路径
+     */
+    private String resultPath;
+
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    /**
+     * 序号
+     */
+    private Long index;
+
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    private Long costSecond;
+
+    /**
+     * 日志
+     */
+    private String log;
+
+
+}

+ 85 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmDataSetBo.java

@@ -0,0 +1,85 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmDataSet;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法数据集合业务对象 algorithm_data_set
+ *
+ * @author km
+ * @date 2024-06-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmDataSet.class, reverseConvertGenerate = false)
+public class AlgorithmDataSetBo extends BaseEntity{
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 子任务id
+     */
+    private Long subTaskId;
+
+    /**
+     * 任务名称
+     */
+    private String name;
+
+    /**
+     * 任务类型
+     */
+    private String type;
+
+    /**
+     * 任务状态
+     */
+    private String status;
+
+    /**
+     * 调用算法时所用的参数
+     */
+    private String parameters;
+
+    /**
+     * 结果数据路径
+     */
+    private String resultPath;
+
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    /**
+     * 序号
+     */
+    private Long index;
+
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    private Long costSecond;
+
+    /**
+     * 日志
+     */
+    private String log;
+
+
+}

+ 59 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmModelBo.java

@@ -0,0 +1,59 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmModel;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法模型配置业务对象 algorithm_model
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmModel.class, reverseConvertGenerate = false)
+public class AlgorithmModelBo extends BaseEntity{
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 算法
+     */
+    @NotNull(message = "算法不能为空")
+    private Long algorithmId;
+
+    /**
+     * 模型名称
+     */
+    @NotBlank(message = "模型名称不能为空")
+    private String modelName;
+
+    /**
+     * 模型
+     */
+    @NotBlank(message = "模型不能为空")
+    private String modelAddress;
+
+    /**
+     * 训练样本数
+     */
+    private Long sampleNumber;
+
+    /**
+     * 训练循环次数
+     */
+    private Long cycleEpoch;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+
+}

+ 80 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmSubtaskBo.java

@@ -0,0 +1,80 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmSubtask;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法子任务业务对象 algorithm_subtask
+ *
+ * @author Allen
+ * @date 2024-06-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmSubtask.class, reverseConvertGenerate = false)
+public class AlgorithmSubtaskBo extends BaseEntity{
+
+    private Long id;
+    /**
+     * 任务ID
+     */
+    private Long taskId;
+
+    /**
+     * 任务名称
+     */
+    @NotBlank(message = "任务名称不能为空")
+    private String name;
+
+    /**
+     * 任务状态
+     */
+    @NotBlank(message = "任务状态不能为空")
+    private String status;
+
+    /**
+     * 任务类型
+     */
+    @NotBlank(message = "任务类型不能为空")
+    private String type;
+
+    /**
+     * 调用算法时所用的参数
+     */
+    private String parameters;
+
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    private Long costSecond;
+
+    /**
+     * 日志
+     */
+    private String log;
+
+    /**
+     * 序号
+     */
+    private Long index;
+
+
+}

+ 68 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmSubtaskDetailBo.java

@@ -0,0 +1,68 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmSubtaskDetail;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法子任务详情业务对象 algorithm_subtask_detail
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmSubtaskDetail.class, reverseConvertGenerate = false)
+public class AlgorithmSubtaskDetailBo extends BaseEntity{
+    /**
+     * 主键ID
+     */
+    @NotNull(message = "主键ID不能为空")
+    private Long id;
+
+    /**
+     * 任务名称
+     */
+    @NotBlank(message = "任务名称不能为空")
+    private String name;
+
+    /**
+     * 任务状态
+     */
+    @NotBlank(message = "任务状态不能为空")
+    private String status;
+
+    /**
+     * 调用算法时所用的参数
+     */
+    private String parameters;
+
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    private Long costSecond;
+
+    /**
+     * 日志
+     */
+    private String log;
+
+
+}

+ 62 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmTaskBo.java

@@ -0,0 +1,62 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmTask;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法任务业务对象 algorithm_task
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmTask.class, reverseConvertGenerate = false)
+public class AlgorithmTaskBo extends BaseEntity{
+    /**
+     * 主键ID
+     */
+    @NotNull(message = "主键ID不能为空")
+    private Long id;
+
+    /**
+     * 任务名称
+     */
+    @NotBlank(message = "任务名称不能为空")
+    private String name;
+
+    /**
+     * 任务状态
+     */
+    private String status;
+
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    private Long costSecond;
+
+    /**
+     * 日志
+     */
+    private String log;
+
+
+}

+ 109 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/DataBo.java

@@ -0,0 +1,109 @@
+package com.taais.biz.domain.bo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.biz.domain.Data;
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+
+import java.util.Date;
+
+/**
+ * 数据管理业务对象 data
+ *
+ * @author km
+ * @date 2024-04-22
+ */
+@lombok.Data
+//@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = Data.class, reverseConvertGenerate = false)
+public class DataBo {
+    /**
+     * id
+     */
+
+    private Long id;
+
+    /**
+     * 名称
+     */
+    @NotBlank(message = "名称不能为空")
+    private String name;
+
+    /**
+     * 数据类型
+     */
+    @NotBlank(message = "数据类型不能为空")
+    private String dataType;
+
+    /**
+     * 文件类型
+     */
+    @NotBlank(message = "文件类型不能为空")
+    private String fileType;
+
+    /**
+     * 目标类型
+     */
+    @NotBlank(message = "目标类型不能为空")
+    private String objectType;
+
+    /**
+     * 目标子类型
+     */
+    @NotBlank(message = "目标子类型不能为空")
+    private String objectSubtype;
+
+    /**
+     * 批次号
+     */
+    private Long batchNum;
+
+    /**
+     * 场景
+     */
+    @NotBlank(message = "场景不能为空")
+    private String scene;
+
+    /**
+     * 数据源
+     */
+    @NotBlank(message = "数据源不能为空")
+    private String dataSource;
+
+    /**
+     * 采集时间
+     */
+    @NotNull(message = "采集时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date gatherTime;
+
+    /**
+     * 采集地点
+     */
+    @NotBlank(message = "采集地点不能为空")
+    private String gatherSpot;
+
+    /**
+     * 图片url
+     */
+    private String url;
+
+    /**
+     * 标注url
+     */
+    private String labelurl;
+
+    /**
+     * 扩增方式
+     */
+    @NotBlank(message = "扩增方式不能为空")
+    private String increment;
+
+    /**
+     * 是否标注
+     */
+    private Boolean labeled;
+
+
+}

+ 23 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/AlgorithmConfigParamDto.java

@@ -0,0 +1,23 @@
+package com.taais.biz.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class AlgorithmConfigParamDto {
+    // 参数名称
+    private String name;
+    // 算法超参名称
+    private String agName;
+    // 参数值
+    private String value;
+    // 验证
+    private String validate;
+    // 默认值
+    private String defaultValue;
+    // 是否必填
+    private boolean required;
+    // 排序
+    private int index;
+    // 提示
+    private String prompt;
+}

+ 18 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/AlgorithmRequestDto.java

@@ -0,0 +1,18 @@
+package com.taais.biz.domain.dto;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author allen
+ */
+@Data
+public class AlgorithmRequestDto {
+    private String bizType;
+    private Long bizId;
+    private String sourcePath;
+    private String resultPath;
+    private String logPath;
+    private Map<String,Object> otherParams;
+}

+ 11 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/TaskResultDTO.java

@@ -0,0 +1,11 @@
+package com.taais.biz.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class TaskResultDTO {
+    private Integer status;
+    private String msg;
+    private String bizType;
+    private Long bizId;
+}

+ 18 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/AlgorithmSubtaskParamDto.java

@@ -0,0 +1,18 @@
+package com.taais.biz.domain.dto.task;
+
+import com.taais.biz.domain.dto.AlgorithmConfigParamDto;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author allen
+ */
+@Data
+public class AlgorithmSubtaskParamDto {
+    public String sourcePath;
+
+    public String resultPath;
+
+    public List<AlgorithmConfigParamDto> otherParams;
+}

+ 43 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/CreateTaskDto.java

@@ -0,0 +1,43 @@
+package com.taais.biz.domain.dto.task;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author allen
+ */
+@Data
+public class CreateTaskDto {
+
+    private String taskId;
+
+    private String taskName;
+
+    private List<String> selectTask;
+
+    private List<DataSelectDto> trainDataSelect;
+
+    private TaskDto trainDataEnhancement;
+
+    private TaskDto trainDataExpansion;
+
+    private List<TaskDto> train;
+
+    private List<DataSelectDto> testDataSelect;
+
+    private TaskDto testDataEnhancement;
+
+    private TaskDto testDataExpansion;
+
+    private List<TaskDto> test;
+
+    private List<DataSelectDto> reasoningDataSelect;
+
+    private TaskDto reasoningDataEnhancement;
+
+    private TaskDto reasoningDataExpansion;
+
+    private List<TaskDto> reasoning;
+
+}

+ 18 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/DataSelectDto.java

@@ -0,0 +1,18 @@
+package com.taais.biz.domain.dto.task;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author allen
+ */
+@Data
+public class DataSelectDto {
+
+    private Boolean conditionSelected;
+
+    private String condition;
+
+    private List<Long> dateSet;
+}

+ 13 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/TaskDto.java

@@ -0,0 +1,13 @@
+package com.taais.biz.domain.dto.task;
+
+import lombok.Data;
+
+/**
+ * @author allen
+ */
+@Data
+public class TaskDto {
+    private Long algorithmId;
+    private Long modelId;
+    private String params;
+}

+ 13 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/TestResultDto.java

@@ -0,0 +1,13 @@
+package com.taais.biz.domain.dto.task;
+
+import lombok.Data;
+import org.apache.commons.collections4.list.TreeList;
+
+import java.util.List;
+
+@Data
+public class TestResultDto {
+    List<String> agNameList = new TreeList<>();
+
+    List<List<String>> resultList = new TreeList<>();
+}

+ 18 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/TranResultDto.java

@@ -0,0 +1,18 @@
+package com.taais.biz.domain.dto.task;
+
+import lombok.Data;
+import org.apache.commons.collections4.list.TreeList;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author allen
+ */
+@Data
+public class TranResultDto {
+    private List<String> agNameList = new TreeList<>();
+    private List<String> rcureList = new TreeList<>();
+    private List<String> pcureList = new TreeList<>();
+    private List<String> f1cureList = new TreeList<>();
+}

+ 98 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmBizProcessImportVo.java

@@ -0,0 +1,98 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法业务处理导入视图对象 algorithm_biz_process
+ *
+ * @author 0
+ * @date 2024-06-14
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmBizProcessImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 子任务id */
+    @ExcelProperty(value = "子任务id")
+    private Long subTaskId;
+
+     /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+     /** 任务类型 */
+    @ExcelProperty(value = "任务类型")
+    private String type;
+
+     /** 任务状态 */
+    @ExcelProperty(value = "任务状态")
+    private String status;
+
+     /** 算法 */
+    @ExcelProperty(value = "算法")
+    private Long algorithmId;
+
+     /** 模型 */
+    @ExcelProperty(value = "模型")
+    private Long modelId;
+
+     /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+     /** 预处理数据路径 */
+    @ExcelProperty(value = "预处理数据路径")
+    private String preprocessPath;
+
+     /** 结果数据路径 */
+    @ExcelProperty(value = "结果数据路径")
+    private String resultPath;
+
+     /** 序号 */
+    @ExcelProperty(value = "序号")
+    private Long index;
+
+     /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+     /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+     /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+     /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+     /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+}

+ 106 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmBizProcessVo.java

@@ -0,0 +1,106 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.biz.domain.AlgorithmBizProcess;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法业务处理视图对象 algorithm_biz_process
+ *
+ * @author 0
+ * @date 2024-06-14
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmBizProcess.class)
+public class AlgorithmBizProcessVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 子任务id */
+    @ExcelProperty(value = "子任务id")
+    private Long subTaskId;
+
+    /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+    /** 任务类型 */
+    @ExcelProperty(value = "任务类型")
+    private String type;
+
+    /** 任务状态 */
+    @ExcelProperty(value = "任务状态")
+    private String status;
+
+    /** 算法 */
+    @ExcelProperty(value = "算法")
+    private Long algorithmId;
+
+    /** 模型 */
+    @ExcelProperty(value = "模型")
+    private Long modelId;
+
+    /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+    /** 预处理数据路径 */
+    @ExcelProperty(value = "预处理数据路径")
+    private String preprocessPath;
+
+    /** 结果数据路径 */
+    @ExcelProperty(value = "结果数据路径")
+    private String resultPath;
+
+    /** 序号 */
+    @ExcelProperty(value = "序号")
+    private Long index;
+
+    /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+    /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+    /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+    /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+
+}

+ 66 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmConfigImportVo.java

@@ -0,0 +1,66 @@
+package com.taais.biz.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法配置导入视图对象 algorithm_config
+ *
+ * @author 0
+ * @date 2024-05-28
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmConfigImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 类型 */
+    @ExcelProperty(value = "类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "sys_app_type")
+    private String type;
+
+     /** 父id */
+    @ExcelProperty(value = "父id")
+    private Long parentId;
+
+     /** 分系统 */
+    @ExcelProperty(value = "分系统", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "biz_sub_config")
+    private String subsystem;
+
+     /** 算法名称 */
+    @ExcelProperty(value = "算法名称")
+    private String algorithmName;
+
+     /** 算法地址 */
+    @ExcelProperty(value = "算法地址")
+    private String algorithmAddress;
+
+     /** 参数配置 */
+    @ExcelProperty(value = "参数配置")
+    private String parameterConfig;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+     /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+}

+ 74 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmConfigVo.java

@@ -0,0 +1,74 @@
+package com.taais.biz.domain.vo;
+
+import com.taais.biz.domain.AlgorithmConfig;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法配置视图对象 algorithm_config
+ *
+ * @author 0
+ * @date 2024-05-28
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmConfig.class)
+public class AlgorithmConfigVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 类型 */
+    @ExcelProperty(value = "类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "sys_app_type")
+    private String type;
+
+    /** 父id */
+    @ExcelProperty(value = "父id")
+    private Long parentId;
+
+    /** 分系统 */
+    @ExcelProperty(value = "分系统", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "biz_sub_config")
+    private String subsystem;
+
+    /** 算法名称 */
+    @ExcelProperty(value = "算法名称")
+    private String algorithmName;
+
+    /** 算法地址 */
+    @ExcelProperty(value = "算法地址")
+    private String algorithmAddress;
+
+    /** 参数配置 */
+    @ExcelProperty(value = "参数配置")
+    private String parameterConfig;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+
+}

+ 94 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmDataProcessImportVo.java

@@ -0,0 +1,94 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法数据处理导入视图对象 algorithm_data_process
+ *
+ * @author 0
+ * @date 2024-06-14
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmDataProcessImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 子任务id */
+    @ExcelProperty(value = "子任务id")
+    private Long subTaskId;
+
+     /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+     /** 任务类型 */
+    @ExcelProperty(value = "任务类型")
+    private String type;
+
+     /** 任务状态 */
+    @ExcelProperty(value = "任务状态")
+    private String status;
+
+     /** 算法 */
+    @ExcelProperty(value = "算法")
+    private Long algorithmId;
+
+     /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+     /** 预处理数据路径 */
+    @ExcelProperty(value = "预处理数据路径")
+    private String preprocessPath;
+
+     /** 结果数据路径 */
+    @ExcelProperty(value = "结果数据路径")
+    private String resultPath;
+
+     /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+     /** 序号 */
+    @ExcelProperty(value = "序号")
+    private Long index;
+
+     /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+     /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+     /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+     /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+}

+ 102 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmDataProcessVo.java

@@ -0,0 +1,102 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.biz.domain.AlgorithmDataProcess;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法数据处理视图对象 algorithm_data_process
+ *
+ * @author 0
+ * @date 2024-06-14
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmDataProcess.class)
+public class AlgorithmDataProcessVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 子任务id */
+    @ExcelProperty(value = "子任务id")
+    private Long subTaskId;
+
+    /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+    /** 任务类型 */
+    @ExcelProperty(value = "任务类型")
+    private String type;
+
+    /** 任务状态 */
+    @ExcelProperty(value = "任务状态")
+    private String status;
+
+    /** 算法 */
+    @ExcelProperty(value = "算法")
+    private Long algorithmId;
+
+    /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+    /** 预处理数据路径 */
+    @ExcelProperty(value = "预处理数据路径")
+    private String preprocessPath;
+
+    /** 结果数据路径 */
+    @ExcelProperty(value = "结果数据路径")
+    private String resultPath;
+
+    /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+    /** 序号 */
+    @ExcelProperty(value = "序号")
+    private Long index;
+
+    /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+    /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+    /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+
+}

+ 86 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmDataSetImportVo.java

@@ -0,0 +1,86 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法数据集合导入视图对象 algorithm_data_set
+ *
+ * @author km
+ * @date 2024-06-14
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmDataSetImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 子任务id */
+    @ExcelProperty(value = "子任务id")
+    private Long subTaskId;
+
+     /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+     /** 任务类型 */
+    @ExcelProperty(value = "任务类型")
+    private String type;
+
+     /** 任务状态 */
+    @ExcelProperty(value = "任务状态")
+    private String status;
+
+     /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+     /** 结果数据路径 */
+    @ExcelProperty(value = "结果数据路径")
+    private String resultPath;
+
+     /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+     /** 序号 */
+    @ExcelProperty(value = "序号")
+    private Long index;
+
+     /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+     /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+     /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+     /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+}

+ 94 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmDataSetVo.java

@@ -0,0 +1,94 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.biz.domain.AlgorithmDataSet;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法数据集合视图对象 algorithm_data_set
+ *
+ * @author km
+ * @date 2024-06-14
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmDataSet.class)
+public class AlgorithmDataSetVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 子任务id */
+    @ExcelProperty(value = "子任务id")
+    private Long subTaskId;
+
+    /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+    /** 任务类型 */
+    @ExcelProperty(value = "任务类型")
+    private String type;
+
+    /** 任务状态 */
+    @ExcelProperty(value = "任务状态")
+    private String status;
+
+    /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+    /** 结果数据路径 */
+    @ExcelProperty(value = "结果数据路径")
+    private String resultPath;
+
+    /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+    /** 序号 */
+    @ExcelProperty(value = "序号")
+    private Long index;
+
+    /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+    /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+    /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+
+}

+ 60 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmModelImportVo.java

@@ -0,0 +1,60 @@
+package com.taais.biz.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法模型配置导入视图对象 algorithm_model
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmModelImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 算法 */
+    @ExcelProperty(value = "算法")
+    private Long algorithmId;
+
+     /** 模型名称 */
+    @ExcelProperty(value = "模型名称")
+    private String modelName;
+
+     /** 模型 */
+    @ExcelProperty(value = "模型")
+    private String modelAddress;
+
+     /** 训练样本数 */
+    @ExcelProperty(value = "训练样本数")
+    private Long sampleNumber;
+
+     /** 训练循环次数 */
+    @ExcelProperty(value = "训练循环次数")
+    private Long cycleEpoch;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+     /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+}

+ 68 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmModelVo.java

@@ -0,0 +1,68 @@
+package com.taais.biz.domain.vo;
+
+import com.taais.biz.domain.AlgorithmModel;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法模型配置视图对象 algorithm_model
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmModel.class)
+public class AlgorithmModelVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 算法 */
+    @ExcelProperty(value = "算法")
+    private Long algorithmId;
+
+    /** 模型名称 */
+    @ExcelProperty(value = "模型名称")
+    private String modelName;
+
+    /** 模型 */
+    @ExcelProperty(value = "模型")
+    private String modelAddress;
+
+    /** 训练样本数 */
+    @ExcelProperty(value = "训练样本数")
+    private Long sampleNumber;
+
+    /** 训练循环次数 */
+    @ExcelProperty(value = "训练循环次数")
+    private Long cycleEpoch;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+
+}

+ 71 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmSubtaskDetailImportVo.java

@@ -0,0 +1,71 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法子任务详情导入视图对象 algorithm_subtask_detail
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmSubtaskDetailImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+     /** 任务状态 */
+    @ExcelProperty(value = "任务状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "biz_ag_type")
+    private String status;
+
+     /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+     /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+     /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+     /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+     /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+     /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+}

+ 79 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmSubtaskDetailVo.java

@@ -0,0 +1,79 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.biz.domain.AlgorithmSubtaskDetail;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法子任务详情视图对象 algorithm_subtask_detail
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmSubtaskDetail.class)
+public class AlgorithmSubtaskDetailVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+    /** 任务状态 */
+    @ExcelProperty(value = "任务状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "biz_ag_type")
+    private String status;
+
+    /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+    /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+    /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+    /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+    /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+
+}

+ 83 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmSubtaskImportVo.java

@@ -0,0 +1,83 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法子任务导入视图对象 algorithm_subtask
+ *
+ * @author Allen
+ * @date 2024-06-11
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmSubtaskImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 任务ID */
+    @ExcelProperty(value = "任务ID")
+    private Long taskId;
+
+     /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+     /** 任务状态 */
+    @ExcelProperty(value = "任务状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "biz_task_status")
+    private String status;
+
+     /** 任务类型 */
+    @ExcelProperty(value = "任务类型")
+    private String type;
+
+     /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+     /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+     /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+     /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+     /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+     /** 序号 */
+    @ExcelProperty(value = "序号")
+    private Long index;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+     /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+}

+ 91 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmSubtaskVo.java

@@ -0,0 +1,91 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.biz.domain.AlgorithmSubtask;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法子任务视图对象 algorithm_subtask
+ *
+ * @author Allen
+ * @date 2024-06-11
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmSubtask.class)
+public class AlgorithmSubtaskVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 任务ID */
+    @ExcelProperty(value = "任务ID")
+    private Long taskId;
+
+    /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+    /** 任务状态 */
+    @ExcelProperty(value = "任务状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "biz_task_status")
+    private String status;
+
+    /** 任务类型 */
+    @ExcelProperty(value = "任务类型")
+    private String type;
+
+    /** 调用算法时所用的参数 */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+    /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+    /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+    /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+    /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+    /** 序号 */
+    @ExcelProperty(value = "序号")
+    private Long index;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+
+}

+ 67 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmTaskImportVo.java

@@ -0,0 +1,67 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法任务导入视图对象 algorithm_task
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmTaskImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+     /** 任务状态 */
+    @ExcelProperty(value = "任务状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "biz_ag_type")
+    private String status;
+
+     /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+     /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+     /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+     /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+     /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+}

+ 75 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmTaskVo.java

@@ -0,0 +1,75 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.biz.domain.AlgorithmTask;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法任务视图对象 algorithm_task
+ *
+ * @author 0
+ * @date 2024-05-29
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmTask.class)
+public class AlgorithmTaskVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+    /** 任务状态 */
+    @ExcelProperty(value = "任务状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "biz_ag_type")
+    private String status;
+
+    /** 开始时间 */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+    /** 结束时间 */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+    /** 耗时 */
+    @ExcelProperty(value = "耗时")
+    private Long costSecond;
+
+    /** 日志 */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    /** 系统 */
+    @ExcelProperty(value = "系统")
+    private String system;
+
+
+
+}

+ 86 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/DataImportVo.java

@@ -0,0 +1,86 @@
+package com.taais.biz.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 数据管理导入视图对象 data
+ *
+ * @author km
+ * @date 2024-06-14
+ */
+
+@Data
+@NoArgsConstructor
+public class DataImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 名称 */
+    @ExcelProperty(value = "名称")
+    private String name;
+
+     /** 数据类型 */
+    @ExcelProperty(value = "数据类型")
+    private String dataType;
+
+     /** 文件类型 */
+    @ExcelProperty(value = "文件类型")
+    private String fileType;
+
+     /** 目标类型 */
+    @ExcelProperty(value = "目标类型")
+    private String objectType;
+
+     /** 目标子类型 */
+    @ExcelProperty(value = "目标子类型")
+    private String objectSubtype;
+
+     /** 批次号 */
+    @ExcelProperty(value = "批次号")
+    private Long batchNum;
+
+     /** 场景 */
+    @ExcelProperty(value = "场景")
+    private String scene;
+
+     /** 数据源 */
+    @ExcelProperty(value = "数据源")
+    private String dataSource;
+
+     /** 采集时间 */
+    @ExcelProperty(value = "采集时间")
+    private Date gatherTime;
+
+     /** 采集地点 */
+    @ExcelProperty(value = "采集地点")
+    private String gatherSpot;
+
+     /** 图片url */
+    @ExcelProperty(value = "图片url")
+    private String url;
+
+     /** 标注url */
+    @ExcelProperty(value = "标注url")
+    private String labelurl;
+
+     /** 扩增方式 */
+    @ExcelProperty(value = "扩增方式")
+    private String increment;
+
+     /** 是否标注 */
+    @ExcelProperty(value = "是否标注")
+    private String labeled;
+
+
+}

+ 91 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/DataVo.java

@@ -0,0 +1,91 @@
+package com.taais.biz.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.taais.biz.domain.Data;
+import io.github.linpeilie.annotations.AutoMapper;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 数据管理视图对象 data
+ *
+ * @author km
+ * @date 2024-04-22
+ */
+@lombok.Data
+@ExcelIgnoreUnannotated
+//@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = Data.class)
+public class DataVo  implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+//    @ExcelProperty(value = "id")
+    private Long id;
+
+    /** 名称 */
+    @ExcelProperty(value = "名称")
+    private String name;
+
+    /** 数据类型 */
+    @ExcelProperty(value = "数据类型")
+    private String dataType;
+
+    /** 文件类型 */
+    @ExcelProperty(value = "文件类型")
+    private String fileType;
+
+    /** 目标类型 */
+    @ExcelProperty(value = "目标类型")
+    private String objectType;
+
+    /** 目标子类型 */
+    @ExcelProperty(value = "目标子类型")
+    private String objectSubtype;
+
+    /** 批次号 */
+    @ExcelProperty(value = "批次号")
+    private Long batchNum;
+
+    /** 场景 */
+    @ExcelProperty(value = "场景")
+    private String scene;
+
+    /** 数据源 */
+    @ExcelProperty(value = "数据源")
+    private String dataSource;
+
+    /** 采集时间 */
+    @ExcelProperty(value = "采集时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date gatherTime;
+
+    /** 采集地点 */
+    @ExcelProperty(value = "采集地点")
+    private String gatherSpot;
+
+    /** 图片url */
+    @ExcelProperty(value = "图片url")
+    private String url;
+
+    /** 标注url */
+    @ExcelProperty(value = "标注url")
+    private String labelurl;
+
+    /** 扩增方式 */
+    @ExcelProperty(value = "扩增方式")
+    private String increment;
+
+    /** 是否标注 默认是false*/
+//    @ExcelProperty(value = "是否标注")
+    private Boolean labeled;
+
+
+
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmBizProcessImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmBizProcessBo;
+import com.taais.biz.domain.vo.AlgorithmBizProcessImportVo;
+import com.taais.biz.domain.vo.AlgorithmBizProcessVo;
+import com.taais.biz.service.IAlgorithmBizProcessService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法业务处理自定义导入
+ *
+ * @author 0
+ */
+@Slf4j
+public class AlgorithmBizProcessImportListener extends AnalysisEventListener<AlgorithmBizProcessImportVo> implements ExcelListener<AlgorithmBizProcessImportVo> {
+    private final IAlgorithmBizProcessService algorithmBizProcessService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmBizProcessImportListener(Boolean isUpdateSupport) {
+        this.algorithmBizProcessService = SpringUtils.getBean(IAlgorithmBizProcessService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmBizProcessImportVo algorithmBizProcessVo, AnalysisContext context) {
+        try {
+
+            AlgorithmBizProcessBo algorithmBizProcessBo = BeanUtil.toBean(algorithmBizProcessVo, AlgorithmBizProcessBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmBizProcessVo algorithmBizProcessVo1 = null;
+
+            //algorithmBizProcessVo1 = algorithmBizProcessService.selectBySomefield(algorithmBizProcessVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmBizProcessVo1)) {
+                //不存在就新增
+                algorithmBizProcessBo.setVersion(0);
+                ValidatorUtils.validate(algorithmBizProcessBo);
+                boolean inserted = algorithmBizProcessService.insert(algorithmBizProcessBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法业务处理 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法业务处理 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmBizProcessBo.setId(algorithmBizProcessVo1.getId());//主键
+                algorithmBizProcessBo.setVersion(algorithmBizProcessVo1.getVersion());
+                boolean updated = algorithmBizProcessService.update(algorithmBizProcessBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法业务处理 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法业务处理 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法业务处理 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmBizProcessImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmBizProcessImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmConfigImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmConfigBo;
+import com.taais.biz.domain.vo.AlgorithmConfigImportVo;
+import com.taais.biz.domain.vo.AlgorithmConfigVo;
+import com.taais.biz.service.IAlgorithmConfigService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法配置自定义导入
+ *
+ * @author 0
+ */
+@Slf4j
+public class AlgorithmConfigImportListener extends AnalysisEventListener<AlgorithmConfigImportVo> implements ExcelListener<AlgorithmConfigImportVo> {
+    private final IAlgorithmConfigService algorithmConfigService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmConfigImportListener(Boolean isUpdateSupport) {
+        this.algorithmConfigService = SpringUtils.getBean(IAlgorithmConfigService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmConfigImportVo algorithmConfigVo, AnalysisContext context) {
+        try {
+
+            AlgorithmConfigBo algorithmConfigBo = BeanUtil.toBean(algorithmConfigVo, AlgorithmConfigBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmConfigVo algorithmConfigVo1 = null;
+
+            //algorithmConfigVo1 = algorithmConfigService.selectBySomefield(algorithmConfigVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmConfigVo1)) {
+                //不存在就新增
+                algorithmConfigBo.setVersion(0);
+                ValidatorUtils.validate(algorithmConfigBo);
+                boolean inserted = algorithmConfigService.insert(algorithmConfigBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法配置 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法配置 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmConfigBo.setId(algorithmConfigVo1.getId());//主键
+                algorithmConfigBo.setVersion(algorithmConfigVo1.getVersion());
+                boolean updated = algorithmConfigService.update(algorithmConfigBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法配置 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法配置 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法配置 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmConfigImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmConfigImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmDataProcessImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmDataProcessBo;
+import com.taais.biz.domain.vo.AlgorithmDataProcessImportVo;
+import com.taais.biz.domain.vo.AlgorithmDataProcessVo;
+import com.taais.biz.service.IAlgorithmDataProcessService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法数据处理自定义导入
+ *
+ * @author 0
+ */
+@Slf4j
+public class AlgorithmDataProcessImportListener extends AnalysisEventListener<AlgorithmDataProcessImportVo> implements ExcelListener<AlgorithmDataProcessImportVo> {
+    private final IAlgorithmDataProcessService algorithmDataProcessService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmDataProcessImportListener(Boolean isUpdateSupport) {
+        this.algorithmDataProcessService = SpringUtils.getBean(IAlgorithmDataProcessService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmDataProcessImportVo algorithmDataProcessVo, AnalysisContext context) {
+        try {
+
+            AlgorithmDataProcessBo algorithmDataProcessBo = BeanUtil.toBean(algorithmDataProcessVo, AlgorithmDataProcessBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmDataProcessVo algorithmDataProcessVo1 = null;
+
+            //algorithmDataProcessVo1 = algorithmDataProcessService.selectBySomefield(algorithmDataProcessVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmDataProcessVo1)) {
+                //不存在就新增
+                algorithmDataProcessBo.setVersion(0);
+                ValidatorUtils.validate(algorithmDataProcessBo);
+                boolean inserted = algorithmDataProcessService.insert(algorithmDataProcessBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法数据处理 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法数据处理 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmDataProcessBo.setId(algorithmDataProcessVo1.getId());//主键
+                algorithmDataProcessBo.setVersion(algorithmDataProcessVo1.getVersion());
+                boolean updated = algorithmDataProcessService.update(algorithmDataProcessBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法数据处理 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法数据处理 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法数据处理 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmDataProcessImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmDataProcessImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmDataSetImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmDataSetBo;
+import com.taais.biz.domain.vo.AlgorithmDataSetImportVo;
+import com.taais.biz.domain.vo.AlgorithmDataSetVo;
+import com.taais.biz.service.IAlgorithmDataSetService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法数据集合自定义导入
+ *
+ * @author km
+ */
+@Slf4j
+public class AlgorithmDataSetImportListener extends AnalysisEventListener<AlgorithmDataSetImportVo> implements ExcelListener<AlgorithmDataSetImportVo> {
+    private final IAlgorithmDataSetService algorithmDataSetService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmDataSetImportListener(Boolean isUpdateSupport) {
+        this.algorithmDataSetService = SpringUtils.getBean(IAlgorithmDataSetService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmDataSetImportVo algorithmDataSetVo, AnalysisContext context) {
+        try {
+
+            AlgorithmDataSetBo algorithmDataSetBo = BeanUtil.toBean(algorithmDataSetVo, AlgorithmDataSetBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmDataSetVo algorithmDataSetVo1 = null;
+
+            //algorithmDataSetVo1 = algorithmDataSetService.selectBySomefield(algorithmDataSetVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmDataSetVo1)) {
+                //不存在就新增
+                algorithmDataSetBo.setVersion(0);
+                ValidatorUtils.validate(algorithmDataSetBo);
+                boolean inserted = algorithmDataSetService.insert(algorithmDataSetBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法数据集合 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法数据集合 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmDataSetBo.setId(algorithmDataSetVo1.getId());//主键
+                algorithmDataSetBo.setVersion(algorithmDataSetVo1.getVersion());
+                boolean updated = algorithmDataSetService.update(algorithmDataSetBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法数据集合 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法数据集合 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法数据集合 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmDataSetImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmDataSetImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmModelImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmModelBo;
+import com.taais.biz.domain.vo.AlgorithmModelImportVo;
+import com.taais.biz.domain.vo.AlgorithmModelVo;
+import com.taais.biz.service.IAlgorithmModelService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法模型配置自定义导入
+ *
+ * @author 0
+ */
+@Slf4j
+public class AlgorithmModelImportListener extends AnalysisEventListener<AlgorithmModelImportVo> implements ExcelListener<AlgorithmModelImportVo> {
+    private final IAlgorithmModelService algorithmModelService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmModelImportListener(Boolean isUpdateSupport) {
+        this.algorithmModelService = SpringUtils.getBean(IAlgorithmModelService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmModelImportVo algorithmModelVo, AnalysisContext context) {
+        try {
+
+            AlgorithmModelBo algorithmModelBo = BeanUtil.toBean(algorithmModelVo, AlgorithmModelBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmModelVo algorithmModelVo1 = null;
+
+            //algorithmModelVo1 = algorithmModelService.selectBySomefield(algorithmModelVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmModelVo1)) {
+                //不存在就新增
+                algorithmModelBo.setVersion(0);
+                ValidatorUtils.validate(algorithmModelBo);
+                boolean inserted = algorithmModelService.insert(algorithmModelBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法模型配置 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法模型配置 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmModelBo.setId(algorithmModelVo1.getId());//主键
+                algorithmModelBo.setVersion(algorithmModelVo1.getVersion());
+                boolean updated = algorithmModelService.update(algorithmModelBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法模型配置 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法模型配置 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法模型配置 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmModelImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmModelImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmSubtaskDetailImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmSubtaskDetailBo;
+import com.taais.biz.domain.vo.AlgorithmSubtaskDetailImportVo;
+import com.taais.biz.domain.vo.AlgorithmSubtaskDetailVo;
+import com.taais.biz.service.IAlgorithmSubtaskDetailService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法子任务详情自定义导入
+ *
+ * @author 0
+ */
+@Slf4j
+public class AlgorithmSubtaskDetailImportListener extends AnalysisEventListener<AlgorithmSubtaskDetailImportVo> implements ExcelListener<AlgorithmSubtaskDetailImportVo> {
+    private final IAlgorithmSubtaskDetailService algorithmSubtaskDetailService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmSubtaskDetailImportListener(Boolean isUpdateSupport) {
+        this.algorithmSubtaskDetailService = SpringUtils.getBean(IAlgorithmSubtaskDetailService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmSubtaskDetailImportVo algorithmSubtaskDetailVo, AnalysisContext context) {
+        try {
+
+            AlgorithmSubtaskDetailBo algorithmSubtaskDetailBo = BeanUtil.toBean(algorithmSubtaskDetailVo, AlgorithmSubtaskDetailBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmSubtaskDetailVo algorithmSubtaskDetailVo1 = null;
+
+            //algorithmSubtaskDetailVo1 = algorithmSubtaskDetailService.selectBySomefield(algorithmSubtaskDetailVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmSubtaskDetailVo1)) {
+                //不存在就新增
+                algorithmSubtaskDetailBo.setVersion(0);
+                ValidatorUtils.validate(algorithmSubtaskDetailBo);
+                boolean inserted = algorithmSubtaskDetailService.insert(algorithmSubtaskDetailBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法子任务详情 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法子任务详情 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmSubtaskDetailBo.setId(algorithmSubtaskDetailVo1.getId());//主键
+                algorithmSubtaskDetailBo.setVersion(algorithmSubtaskDetailVo1.getVersion());
+                boolean updated = algorithmSubtaskDetailService.update(algorithmSubtaskDetailBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法子任务详情 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法子任务详情 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法子任务详情 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmSubtaskDetailImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmSubtaskDetailImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmSubtaskImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmSubtaskBo;
+import com.taais.biz.domain.vo.AlgorithmSubtaskImportVo;
+import com.taais.biz.domain.vo.AlgorithmSubtaskVo;
+import com.taais.biz.service.IAlgorithmSubtaskService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法子任务自定义导入
+ *
+ * @author Allen
+ */
+@Slf4j
+public class AlgorithmSubtaskImportListener extends AnalysisEventListener<AlgorithmSubtaskImportVo> implements ExcelListener<AlgorithmSubtaskImportVo> {
+    private final IAlgorithmSubtaskService algorithmSubtaskService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmSubtaskImportListener(Boolean isUpdateSupport) {
+        this.algorithmSubtaskService = SpringUtils.getBean(IAlgorithmSubtaskService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmSubtaskImportVo algorithmSubtaskVo, AnalysisContext context) {
+        try {
+
+            AlgorithmSubtaskBo algorithmSubtaskBo = BeanUtil.toBean(algorithmSubtaskVo, AlgorithmSubtaskBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmSubtaskVo algorithmSubtaskVo1 = null;
+
+            //algorithmSubtaskVo1 = algorithmSubtaskService.selectBySomefield(algorithmSubtaskVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmSubtaskVo1)) {
+                //不存在就新增
+                algorithmSubtaskBo.setVersion(0);
+                ValidatorUtils.validate(algorithmSubtaskBo);
+                boolean inserted = algorithmSubtaskService.insert(algorithmSubtaskBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法子任务 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法子任务 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmSubtaskBo.setId(algorithmSubtaskVo1.getId());//主键
+                algorithmSubtaskBo.setVersion(algorithmSubtaskVo1.getVersion());
+                boolean updated = algorithmSubtaskService.update(algorithmSubtaskBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法子任务 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法子任务 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法子任务 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmSubtaskImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmSubtaskImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmTaskImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmTaskBo;
+import com.taais.biz.domain.vo.AlgorithmTaskImportVo;
+import com.taais.biz.domain.vo.AlgorithmTaskVo;
+import com.taais.biz.service.IAlgorithmTaskService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法任务自定义导入
+ *
+ * @author 0
+ */
+@Slf4j
+public class AlgorithmTaskImportListener extends AnalysisEventListener<AlgorithmTaskImportVo> implements ExcelListener<AlgorithmTaskImportVo> {
+    private final IAlgorithmTaskService algorithmTaskService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmTaskImportListener(Boolean isUpdateSupport) {
+        this.algorithmTaskService = SpringUtils.getBean(IAlgorithmTaskService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmTaskImportVo algorithmTaskVo, AnalysisContext context) {
+        try {
+
+            AlgorithmTaskBo algorithmTaskBo = BeanUtil.toBean(algorithmTaskVo, AlgorithmTaskBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmTaskVo algorithmTaskVo1 = null;
+
+            //algorithmTaskVo1 = algorithmTaskService.selectBySomefield(algorithmTaskVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmTaskVo1)) {
+                //不存在就新增
+                algorithmTaskBo.setVersion(0);
+                ValidatorUtils.validate(algorithmTaskBo);
+                boolean inserted = algorithmTaskService.insert(algorithmTaskBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法任务 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法任务 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmTaskBo.setId(algorithmTaskVo1.getId());//主键
+                algorithmTaskBo.setVersion(algorithmTaskVo1.getVersion());
+                boolean updated = algorithmTaskService.update(algorithmTaskBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法任务 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法任务 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法任务 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmTaskImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmTaskImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 25 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmBizProcessMapper.java

@@ -0,0 +1,25 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import com.taais.biz.domain.vo.AlgorithmBizProcessVo;
+import org.apache.ibatis.annotations.Mapper;
+import com.taais.biz.domain.AlgorithmBizProcess;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 算法业务处理Mapper接口
+ *
+ * @author 0
+ * 2024-06-14
+ */
+@Mapper
+public interface AlgorithmBizProcessMapper extends BaseMapper<AlgorithmBizProcess> {
+
+    void updateTaskAndSubtask(@Param("bizId") Long bizId, @Param("bizType") String bizType);
+
+    List<AlgorithmBizProcessVo> getStatus0ProcessBySubtaskId(Long subtaskId);
+
+    List<AlgorithmBizProcessVo> getProcessBySubtaskId(Long subtaskId);
+}

+ 19 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmConfigMapper.java

@@ -0,0 +1,19 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.taais.biz.domain.AlgorithmConfig;
+
+import java.util.List;
+
+/**
+ * 算法配置Mapper接口
+ *
+ * @author 0
+ * 2024-05-28
+ */
+@Mapper
+public interface AlgorithmConfigMapper extends BaseMapper<AlgorithmConfig> {
+
+    List getOption();
+}

+ 20 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmDataProcessMapper.java

@@ -0,0 +1,20 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import com.taais.biz.domain.vo.AlgorithmDataProcessVo;
+import org.apache.ibatis.annotations.Mapper;
+import com.taais.biz.domain.AlgorithmDataProcess;
+
+import java.util.List;
+
+/**
+ * 算法数据处理Mapper接口
+ *
+ * @author 0
+ * 2024-06-14
+ */
+@Mapper
+public interface AlgorithmDataProcessMapper extends BaseMapper<AlgorithmDataProcess> {
+
+    List<AlgorithmDataProcessVo> getProcessBySubtaskId(Long subtaskId);
+}

+ 16 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmDataSetMapper.java

@@ -0,0 +1,16 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.taais.biz.domain.AlgorithmDataSet;
+
+/**
+ * 算法数据集合Mapper接口
+ *
+ * @author km
+ * 2024-06-14
+ */
+@Mapper
+public interface AlgorithmDataSetMapper extends BaseMapper<AlgorithmDataSet> {
+
+}

+ 18 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmModelMapper.java

@@ -0,0 +1,18 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.taais.biz.domain.AlgorithmModel;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 算法模型配置Mapper接口
+ *
+ * @author 0
+ * 2024-05-29
+ */
+@Mapper
+public interface AlgorithmModelMapper extends BaseMapper<AlgorithmModel> {
+
+    String getModelNameBySubtaskId(@Param("subtaskId") Long subTaskId, @Param("algorithmId") Long algorithmId);
+}

+ 16 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmSubtaskDetailMapper.java

@@ -0,0 +1,16 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.taais.biz.domain.AlgorithmSubtaskDetail;
+
+/**
+ * 算法子任务详情Mapper接口
+ *
+ * @author 0
+ * 2024-05-29
+ */
+@Mapper
+public interface AlgorithmSubtaskDetailMapper extends BaseMapper<AlgorithmSubtaskDetail> {
+
+}

+ 23 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmSubtaskMapper.java

@@ -0,0 +1,23 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import com.taais.biz.domain.vo.AlgorithmSubtaskVo;
+import org.apache.ibatis.annotations.Mapper;
+import com.taais.biz.domain.AlgorithmSubtask;
+
+import java.util.List;
+
+/**
+ * 算法子任务Mapper接口
+ *
+ * @author Allen
+ * 2024-06-11
+ */
+@Mapper
+public interface AlgorithmSubtaskMapper extends BaseMapper<AlgorithmSubtask> {
+    AlgorithmSubtask getFirstNeedProcessSubtask(Long taskId);
+
+    List<AlgorithmSubtaskVo> getSubtaskByTaskId(Long taskId);
+
+    String getTrainModelPath(Long id);
+}

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.