allen 1 mês atrás
pai
commit
eb2bdb98f7
48 arquivos alterados com 5748 adições e 0 exclusões
  1. 104 0
      ips-admin/src/main/java/com/ips/system/controller/AlgorithmConfigController.java
  2. 104 0
      ips-admin/src/main/java/com/ips/system/controller/BizTrainingController.java
  3. 104 0
      ips-admin/src/main/java/com/ips/system/controller/ClassifyTestController.java
  4. 104 0
      ips-admin/src/main/java/com/ips/system/controller/DistillationController.java
  5. 104 0
      ips-admin/src/main/java/com/ips/system/controller/ExtractedFeaturesController.java
  6. 104 0
      ips-admin/src/main/java/com/ips/system/controller/PreprocessedController.java
  7. 83 0
      ips-admin/src/main/java/com/ips/system/domain/AlgorithmConfig.java
  8. 155 0
      ips-admin/src/main/java/com/ips/system/domain/BizTraining.java
  9. 155 0
      ips-admin/src/main/java/com/ips/system/domain/ClassifyTest.java
  10. 155 0
      ips-admin/src/main/java/com/ips/system/domain/Distillation.java
  11. 155 0
      ips-admin/src/main/java/com/ips/system/domain/ExtractedFeatures.java
  12. 155 0
      ips-admin/src/main/java/com/ips/system/domain/Preprocessed.java
  13. 61 0
      ips-admin/src/main/java/com/ips/system/mapper/AlgorithmConfigMapper.java
  14. 61 0
      ips-admin/src/main/java/com/ips/system/mapper/BizTrainingMapper.java
  15. 61 0
      ips-admin/src/main/java/com/ips/system/mapper/ClassifyTestMapper.java
  16. 61 0
      ips-admin/src/main/java/com/ips/system/mapper/DistillationMapper.java
  17. 61 0
      ips-admin/src/main/java/com/ips/system/mapper/ExtractedFeaturesMapper.java
  18. 61 0
      ips-admin/src/main/java/com/ips/system/mapper/PreprocessedMapper.java
  19. 61 0
      ips-admin/src/main/java/com/ips/system/service/IAlgorithmConfigService.java
  20. 61 0
      ips-admin/src/main/java/com/ips/system/service/IBizTrainingService.java
  21. 61 0
      ips-admin/src/main/java/com/ips/system/service/IClassifyTestService.java
  22. 61 0
      ips-admin/src/main/java/com/ips/system/service/IDistillationService.java
  23. 61 0
      ips-admin/src/main/java/com/ips/system/service/IExtractedFeaturesService.java
  24. 61 0
      ips-admin/src/main/java/com/ips/system/service/IPreprocessedService.java
  25. 96 0
      ips-admin/src/main/java/com/ips/system/service/impl/AlgorithmConfigServiceImpl.java
  26. 96 0
      ips-admin/src/main/java/com/ips/system/service/impl/BizTrainingServiceImpl.java
  27. 96 0
      ips-admin/src/main/java/com/ips/system/service/impl/ClassifyTestServiceImpl.java
  28. 96 0
      ips-admin/src/main/java/com/ips/system/service/impl/DistillationServiceImpl.java
  29. 96 0
      ips-admin/src/main/java/com/ips/system/service/impl/ExtractedFeaturesServiceImpl.java
  30. 96 0
      ips-admin/src/main/java/com/ips/system/service/impl/PreprocessedServiceImpl.java
  31. 85 0
      ips-admin/src/main/resources/mapper/biz/AlgorithmConfigMapper.xml
  32. 109 0
      ips-admin/src/main/resources/mapper/biz/BizTrainingMapper.xml
  33. 109 0
      ips-admin/src/main/resources/mapper/biz/ClassifyTestMapper.xml
  34. 109 0
      ips-admin/src/main/resources/mapper/biz/DistillationMapper.xml
  35. 109 0
      ips-admin/src/main/resources/mapper/biz/ExtractedFeaturesMapper.xml
  36. 109 0
      ips-admin/src/main/resources/mapper/biz/PreprocessedMapper.xml
  37. 44 0
      ips-ui/src/api/biz/config.js
  38. 44 0
      ips-ui/src/api/biz/distillation.js
  39. 44 0
      ips-ui/src/api/biz/features.js
  40. 44 0
      ips-ui/src/api/biz/preprocessed.js
  41. 44 0
      ips-ui/src/api/biz/test.js
  42. 44 0
      ips-ui/src/api/biz/training.js
  43. 286 0
      ips-ui/src/views/biz/config/index.vue
  44. 354 0
      ips-ui/src/views/biz/distillation/index.vue
  45. 362 0
      ips-ui/src/views/biz/features/index.vue
  46. 354 0
      ips-ui/src/views/biz/preprocessed/index.vue
  47. 354 0
      ips-ui/src/views/biz/test/index.vue
  48. 354 0
      ips-ui/src/views/biz/training/index.vue

+ 104 - 0
ips-admin/src/main/java/com/ips/system/controller/AlgorithmConfigController.java

@@ -0,0 +1,104 @@
+package com.ips.system.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ips.common.annotation.Log;
+import com.ips.common.core.controller.BaseController;
+import com.ips.common.core.domain.AjaxResult;
+import com.ips.common.enums.BusinessType;
+import com.ips.system.domain.AlgorithmConfig;
+import com.ips.system.service.IAlgorithmConfigService;
+import com.ips.common.utils.poi.ExcelUtil;
+import com.ips.common.core.page.TableDataInfo;
+
+/**
+ * 算法配置Controller
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/biz/config")
+public class AlgorithmConfigController extends BaseController
+{
+    @Autowired
+    private IAlgorithmConfigService algorithmConfigService;
+
+    /**
+     * 查询算法配置列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:config:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(AlgorithmConfig algorithmConfig)
+    {
+        startPage();
+        List<AlgorithmConfig> list = algorithmConfigService.selectAlgorithmConfigList(algorithmConfig);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出算法配置列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:config:export')")
+    @Log(title = "算法配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmConfig algorithmConfig)
+    {
+        List<AlgorithmConfig> list = algorithmConfigService.selectAlgorithmConfigList(algorithmConfig);
+        ExcelUtil<AlgorithmConfig> util = new ExcelUtil<AlgorithmConfig>(AlgorithmConfig.class);
+        util.exportExcel(response, list, "算法配置数据");
+    }
+
+    /**
+     * 获取算法配置详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:config:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(algorithmConfigService.selectAlgorithmConfigById(id));
+    }
+
+    /**
+     * 新增算法配置
+     */
+    @PreAuthorize("@ss.hasPermi('biz:config:add')")
+    @Log(title = "算法配置", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody AlgorithmConfig algorithmConfig)
+    {
+        return toAjax(algorithmConfigService.insertAlgorithmConfig(algorithmConfig));
+    }
+
+    /**
+     * 修改算法配置
+     */
+    @PreAuthorize("@ss.hasPermi('biz:config:edit')")
+    @Log(title = "算法配置", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody AlgorithmConfig algorithmConfig)
+    {
+        return toAjax(algorithmConfigService.updateAlgorithmConfig(algorithmConfig));
+    }
+
+    /**
+     * 删除算法配置
+     */
+    @PreAuthorize("@ss.hasPermi('biz:config:remove')")
+    @Log(title = "算法配置", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(algorithmConfigService.deleteAlgorithmConfigByIds(ids));
+    }
+}

+ 104 - 0
ips-admin/src/main/java/com/ips/system/controller/BizTrainingController.java

@@ -0,0 +1,104 @@
+package com.ips.system.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ips.common.annotation.Log;
+import com.ips.common.core.controller.BaseController;
+import com.ips.common.core.domain.AjaxResult;
+import com.ips.common.enums.BusinessType;
+import com.ips.system.domain.BizTraining;
+import com.ips.system.service.IBizTrainingService;
+import com.ips.common.utils.poi.ExcelUtil;
+import com.ips.common.core.page.TableDataInfo;
+
+/**
+ * 模型训练Controller
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/biz/training")
+public class BizTrainingController extends BaseController
+{
+    @Autowired
+    private IBizTrainingService bizTrainingService;
+
+    /**
+     * 查询模型训练列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:training:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BizTraining bizTraining)
+    {
+        startPage();
+        List<BizTraining> list = bizTrainingService.selectBizTrainingList(bizTraining);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出模型训练列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:training:export')")
+    @Log(title = "模型训练", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizTraining bizTraining)
+    {
+        List<BizTraining> list = bizTrainingService.selectBizTrainingList(bizTraining);
+        ExcelUtil<BizTraining> util = new ExcelUtil<BizTraining>(BizTraining.class);
+        util.exportExcel(response, list, "模型训练数据");
+    }
+
+    /**
+     * 获取模型训练详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:training:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(bizTrainingService.selectBizTrainingById(id));
+    }
+
+    /**
+     * 新增模型训练
+     */
+    @PreAuthorize("@ss.hasPermi('biz:training:add')")
+    @Log(title = "模型训练", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizTraining bizTraining)
+    {
+        return toAjax(bizTrainingService.insertBizTraining(bizTraining));
+    }
+
+    /**
+     * 修改模型训练
+     */
+    @PreAuthorize("@ss.hasPermi('biz:training:edit')")
+    @Log(title = "模型训练", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizTraining bizTraining)
+    {
+        return toAjax(bizTrainingService.updateBizTraining(bizTraining));
+    }
+
+    /**
+     * 删除模型训练
+     */
+    @PreAuthorize("@ss.hasPermi('biz:training:remove')")
+    @Log(title = "模型训练", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(bizTrainingService.deleteBizTrainingByIds(ids));
+    }
+}

+ 104 - 0
ips-admin/src/main/java/com/ips/system/controller/ClassifyTestController.java

@@ -0,0 +1,104 @@
+package com.ips.system.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ips.common.annotation.Log;
+import com.ips.common.core.controller.BaseController;
+import com.ips.common.core.domain.AjaxResult;
+import com.ips.common.enums.BusinessType;
+import com.ips.system.domain.ClassifyTest;
+import com.ips.system.service.IClassifyTestService;
+import com.ips.common.utils.poi.ExcelUtil;
+import com.ips.common.core.page.TableDataInfo;
+
+/**
+ * 分类测试Controller
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/biz/test")
+public class ClassifyTestController extends BaseController
+{
+    @Autowired
+    private IClassifyTestService classifyTestService;
+
+    /**
+     * 查询分类测试列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:test:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ClassifyTest classifyTest)
+    {
+        startPage();
+        List<ClassifyTest> list = classifyTestService.selectClassifyTestList(classifyTest);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出分类测试列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:test:export')")
+    @Log(title = "分类测试", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ClassifyTest classifyTest)
+    {
+        List<ClassifyTest> list = classifyTestService.selectClassifyTestList(classifyTest);
+        ExcelUtil<ClassifyTest> util = new ExcelUtil<ClassifyTest>(ClassifyTest.class);
+        util.exportExcel(response, list, "分类测试数据");
+    }
+
+    /**
+     * 获取分类测试详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:test:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(classifyTestService.selectClassifyTestById(id));
+    }
+
+    /**
+     * 新增分类测试
+     */
+    @PreAuthorize("@ss.hasPermi('biz:test:add')")
+    @Log(title = "分类测试", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ClassifyTest classifyTest)
+    {
+        return toAjax(classifyTestService.insertClassifyTest(classifyTest));
+    }
+
+    /**
+     * 修改分类测试
+     */
+    @PreAuthorize("@ss.hasPermi('biz:test:edit')")
+    @Log(title = "分类测试", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ClassifyTest classifyTest)
+    {
+        return toAjax(classifyTestService.updateClassifyTest(classifyTest));
+    }
+
+    /**
+     * 删除分类测试
+     */
+    @PreAuthorize("@ss.hasPermi('biz:test:remove')")
+    @Log(title = "分类测试", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(classifyTestService.deleteClassifyTestByIds(ids));
+    }
+}

+ 104 - 0
ips-admin/src/main/java/com/ips/system/controller/DistillationController.java

@@ -0,0 +1,104 @@
+package com.ips.system.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ips.common.annotation.Log;
+import com.ips.common.core.controller.BaseController;
+import com.ips.common.core.domain.AjaxResult;
+import com.ips.common.enums.BusinessType;
+import com.ips.system.domain.Distillation;
+import com.ips.system.service.IDistillationService;
+import com.ips.common.utils.poi.ExcelUtil;
+import com.ips.common.core.page.TableDataInfo;
+
+/**
+ * 知识蒸馏Controller
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/biz/distillation")
+public class DistillationController extends BaseController
+{
+    @Autowired
+    private IDistillationService distillationService;
+
+    /**
+     * 查询知识蒸馏列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:distillation:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(Distillation distillation)
+    {
+        startPage();
+        List<Distillation> list = distillationService.selectDistillationList(distillation);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出知识蒸馏列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:distillation:export')")
+    @Log(title = "知识蒸馏", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, Distillation distillation)
+    {
+        List<Distillation> list = distillationService.selectDistillationList(distillation);
+        ExcelUtil<Distillation> util = new ExcelUtil<Distillation>(Distillation.class);
+        util.exportExcel(response, list, "知识蒸馏数据");
+    }
+
+    /**
+     * 获取知识蒸馏详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:distillation:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(distillationService.selectDistillationById(id));
+    }
+
+    /**
+     * 新增知识蒸馏
+     */
+    @PreAuthorize("@ss.hasPermi('biz:distillation:add')")
+    @Log(title = "知识蒸馏", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody Distillation distillation)
+    {
+        return toAjax(distillationService.insertDistillation(distillation));
+    }
+
+    /**
+     * 修改知识蒸馏
+     */
+    @PreAuthorize("@ss.hasPermi('biz:distillation:edit')")
+    @Log(title = "知识蒸馏", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody Distillation distillation)
+    {
+        return toAjax(distillationService.updateDistillation(distillation));
+    }
+
+    /**
+     * 删除知识蒸馏
+     */
+    @PreAuthorize("@ss.hasPermi('biz:distillation:remove')")
+    @Log(title = "知识蒸馏", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(distillationService.deleteDistillationByIds(ids));
+    }
+}

+ 104 - 0
ips-admin/src/main/java/com/ips/system/controller/ExtractedFeaturesController.java

@@ -0,0 +1,104 @@
+package com.ips.system.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ips.common.annotation.Log;
+import com.ips.common.core.controller.BaseController;
+import com.ips.common.core.domain.AjaxResult;
+import com.ips.common.enums.BusinessType;
+import com.ips.system.domain.ExtractedFeatures;
+import com.ips.system.service.IExtractedFeaturesService;
+import com.ips.common.utils.poi.ExcelUtil;
+import com.ips.common.core.page.TableDataInfo;
+
+/**
+ * 特征提取Controller
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/biz/features")
+public class ExtractedFeaturesController extends BaseController
+{
+    @Autowired
+    private IExtractedFeaturesService extractedFeaturesService;
+
+    /**
+     * 查询特征提取列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:features:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ExtractedFeatures extractedFeatures)
+    {
+        startPage();
+        List<ExtractedFeatures> list = extractedFeaturesService.selectExtractedFeaturesList(extractedFeatures);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出特征提取列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:features:export')")
+    @Log(title = "特征提取", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ExtractedFeatures extractedFeatures)
+    {
+        List<ExtractedFeatures> list = extractedFeaturesService.selectExtractedFeaturesList(extractedFeatures);
+        ExcelUtil<ExtractedFeatures> util = new ExcelUtil<ExtractedFeatures>(ExtractedFeatures.class);
+        util.exportExcel(response, list, "特征提取数据");
+    }
+
+    /**
+     * 获取特征提取详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:features:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(extractedFeaturesService.selectExtractedFeaturesById(id));
+    }
+
+    /**
+     * 新增特征提取
+     */
+    @PreAuthorize("@ss.hasPermi('biz:features:add')")
+    @Log(title = "特征提取", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ExtractedFeatures extractedFeatures)
+    {
+        return toAjax(extractedFeaturesService.insertExtractedFeatures(extractedFeatures));
+    }
+
+    /**
+     * 修改特征提取
+     */
+    @PreAuthorize("@ss.hasPermi('biz:features:edit')")
+    @Log(title = "特征提取", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ExtractedFeatures extractedFeatures)
+    {
+        return toAjax(extractedFeaturesService.updateExtractedFeatures(extractedFeatures));
+    }
+
+    /**
+     * 删除特征提取
+     */
+    @PreAuthorize("@ss.hasPermi('biz:features:remove')")
+    @Log(title = "特征提取", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(extractedFeaturesService.deleteExtractedFeaturesByIds(ids));
+    }
+}

+ 104 - 0
ips-admin/src/main/java/com/ips/system/controller/PreprocessedController.java

@@ -0,0 +1,104 @@
+package com.ips.system.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ips.common.annotation.Log;
+import com.ips.common.core.controller.BaseController;
+import com.ips.common.core.domain.AjaxResult;
+import com.ips.common.enums.BusinessType;
+import com.ips.system.domain.Preprocessed;
+import com.ips.system.service.IPreprocessedService;
+import com.ips.common.utils.poi.ExcelUtil;
+import com.ips.common.core.page.TableDataInfo;
+
+/**
+ * 数据预处理Controller
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/biz/preprocessed")
+public class PreprocessedController extends BaseController
+{
+    @Autowired
+    private IPreprocessedService preprocessedService;
+
+    /**
+     * 查询数据预处理列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessed:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(Preprocessed preprocessed)
+    {
+        startPage();
+        List<Preprocessed> list = preprocessedService.selectPreprocessedList(preprocessed);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出数据预处理列表
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessed:export')")
+    @Log(title = "数据预处理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, Preprocessed preprocessed)
+    {
+        List<Preprocessed> list = preprocessedService.selectPreprocessedList(preprocessed);
+        ExcelUtil<Preprocessed> util = new ExcelUtil<Preprocessed>(Preprocessed.class);
+        util.exportExcel(response, list, "数据预处理数据");
+    }
+
+    /**
+     * 获取数据预处理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessed:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(preprocessedService.selectPreprocessedById(id));
+    }
+
+    /**
+     * 新增数据预处理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessed:add')")
+    @Log(title = "数据预处理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody Preprocessed preprocessed)
+    {
+        return toAjax(preprocessedService.insertPreprocessed(preprocessed));
+    }
+
+    /**
+     * 修改数据预处理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessed:edit')")
+    @Log(title = "数据预处理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody Preprocessed preprocessed)
+    {
+        return toAjax(preprocessedService.updatePreprocessed(preprocessed));
+    }
+
+    /**
+     * 删除数据预处理
+     */
+    @PreAuthorize("@ss.hasPermi('biz:preprocessed:remove')")
+    @Log(title = "数据预处理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(preprocessedService.deletePreprocessedByIds(ids));
+    }
+}

+ 83 - 0
ips-admin/src/main/java/com/ips/system/domain/AlgorithmConfig.java

@@ -0,0 +1,83 @@
+package com.ips.system.domain;
+
+import com.ips.common.annotation.Excel;
+import com.ips.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 算法配置对象 biz_algorithm_config
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public class AlgorithmConfig extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 算法名称 */
+    @Excel(name = "算法名称")
+    private Long algorithmName;
+
+    /** 算法类型 */
+    @Excel(name = "算法类型")
+    private String algorithmType;
+
+    /** 算法参数 */
+    private String algorithmParams;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setAlgorithmName(Long algorithmName) 
+    {
+        this.algorithmName = algorithmName;
+    }
+
+    public Long getAlgorithmName() 
+    {
+        return algorithmName;
+    }
+    public void setAlgorithmType(String algorithmType) 
+    {
+        this.algorithmType = algorithmType;
+    }
+
+    public String getAlgorithmType() 
+    {
+        return algorithmType;
+    }
+    public void setAlgorithmParams(String algorithmParams) 
+    {
+        this.algorithmParams = algorithmParams;
+    }
+
+    public String getAlgorithmParams() 
+    {
+        return algorithmParams;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("algorithmName", getAlgorithmName())
+            .append("algorithmType", getAlgorithmType())
+            .append("algorithmParams", getAlgorithmParams())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 155 - 0
ips-admin/src/main/java/com/ips/system/domain/BizTraining.java

@@ -0,0 +1,155 @@
+package com.ips.system.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ips.common.annotation.Excel;
+import com.ips.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 模型训练对象 biz_training
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public class BizTraining extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 算法名称 */
+    @Excel(name = "算法名称")
+    private String taskName;
+
+    /** 算法 */
+    @Excel(name = "算法")
+    private Long algorithmId;
+
+    /** 输入路径 */
+    private String inputPath;
+
+    /** 输出路径 */
+    private String outputPath;
+
+    /** 算法参数 */
+    private String algorithmParams;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String status;
+
+    /** 开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+    /** 结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskName(String taskName) 
+    {
+        this.taskName = taskName;
+    }
+
+    public String getTaskName() 
+    {
+        return taskName;
+    }
+    public void setAlgorithmId(Long algorithmId) 
+    {
+        this.algorithmId = algorithmId;
+    }
+
+    public Long getAlgorithmId() 
+    {
+        return algorithmId;
+    }
+    public void setInputPath(String inputPath) 
+    {
+        this.inputPath = inputPath;
+    }
+
+    public String getInputPath() 
+    {
+        return inputPath;
+    }
+    public void setOutputPath(String outputPath) 
+    {
+        this.outputPath = outputPath;
+    }
+
+    public String getOutputPath() 
+    {
+        return outputPath;
+    }
+    public void setAlgorithmParams(String algorithmParams) 
+    {
+        this.algorithmParams = algorithmParams;
+    }
+
+    public String getAlgorithmParams() 
+    {
+        return algorithmParams;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setStartTime(Date startTime) 
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime() 
+    {
+        return startTime;
+    }
+    public void setEndTime(Date endTime) 
+    {
+        this.endTime = endTime;
+    }
+
+    public Date getEndTime() 
+    {
+        return endTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskName", getTaskName())
+            .append("algorithmId", getAlgorithmId())
+            .append("inputPath", getInputPath())
+            .append("outputPath", getOutputPath())
+            .append("algorithmParams", getAlgorithmParams())
+            .append("status", getStatus())
+            .append("startTime", getStartTime())
+            .append("endTime", getEndTime())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 155 - 0
ips-admin/src/main/java/com/ips/system/domain/ClassifyTest.java

@@ -0,0 +1,155 @@
+package com.ips.system.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ips.common.annotation.Excel;
+import com.ips.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 分类测试对象 biz_classify_test
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public class ClassifyTest extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 算法名称 */
+    @Excel(name = "算法名称")
+    private String taskName;
+
+    /** 算法 */
+    @Excel(name = "算法")
+    private Long algorithmId;
+
+    /** 输入路径 */
+    private String inputPath;
+
+    /** 输出路径 */
+    private String outputPath;
+
+    /** 算法参数 */
+    private String algorithmParams;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String status;
+
+    /** 开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+    /** 结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskName(String taskName) 
+    {
+        this.taskName = taskName;
+    }
+
+    public String getTaskName() 
+    {
+        return taskName;
+    }
+    public void setAlgorithmId(Long algorithmId) 
+    {
+        this.algorithmId = algorithmId;
+    }
+
+    public Long getAlgorithmId() 
+    {
+        return algorithmId;
+    }
+    public void setInputPath(String inputPath) 
+    {
+        this.inputPath = inputPath;
+    }
+
+    public String getInputPath() 
+    {
+        return inputPath;
+    }
+    public void setOutputPath(String outputPath) 
+    {
+        this.outputPath = outputPath;
+    }
+
+    public String getOutputPath() 
+    {
+        return outputPath;
+    }
+    public void setAlgorithmParams(String algorithmParams) 
+    {
+        this.algorithmParams = algorithmParams;
+    }
+
+    public String getAlgorithmParams() 
+    {
+        return algorithmParams;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setStartTime(Date startTime) 
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime() 
+    {
+        return startTime;
+    }
+    public void setEndTime(Date endTime) 
+    {
+        this.endTime = endTime;
+    }
+
+    public Date getEndTime() 
+    {
+        return endTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskName", getTaskName())
+            .append("algorithmId", getAlgorithmId())
+            .append("inputPath", getInputPath())
+            .append("outputPath", getOutputPath())
+            .append("algorithmParams", getAlgorithmParams())
+            .append("status", getStatus())
+            .append("startTime", getStartTime())
+            .append("endTime", getEndTime())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 155 - 0
ips-admin/src/main/java/com/ips/system/domain/Distillation.java

@@ -0,0 +1,155 @@
+package com.ips.system.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ips.common.annotation.Excel;
+import com.ips.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 知识蒸馏对象 biz_distillation
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public class Distillation extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 算法名称 */
+    @Excel(name = "算法名称")
+    private String taskName;
+
+    /** 算法 */
+    @Excel(name = "算法")
+    private Long algorithmId;
+
+    /** 输入路径 */
+    private String inputPath;
+
+    /** 输出路径 */
+    private String outputPath;
+
+    /** 算法参数 */
+    private String algorithmParams;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String status;
+
+    /** 开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+    /** 结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskName(String taskName) 
+    {
+        this.taskName = taskName;
+    }
+
+    public String getTaskName() 
+    {
+        return taskName;
+    }
+    public void setAlgorithmId(Long algorithmId) 
+    {
+        this.algorithmId = algorithmId;
+    }
+
+    public Long getAlgorithmId() 
+    {
+        return algorithmId;
+    }
+    public void setInputPath(String inputPath) 
+    {
+        this.inputPath = inputPath;
+    }
+
+    public String getInputPath() 
+    {
+        return inputPath;
+    }
+    public void setOutputPath(String outputPath) 
+    {
+        this.outputPath = outputPath;
+    }
+
+    public String getOutputPath() 
+    {
+        return outputPath;
+    }
+    public void setAlgorithmParams(String algorithmParams) 
+    {
+        this.algorithmParams = algorithmParams;
+    }
+
+    public String getAlgorithmParams() 
+    {
+        return algorithmParams;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setStartTime(Date startTime) 
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime() 
+    {
+        return startTime;
+    }
+    public void setEndTime(Date endTime) 
+    {
+        this.endTime = endTime;
+    }
+
+    public Date getEndTime() 
+    {
+        return endTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskName", getTaskName())
+            .append("algorithmId", getAlgorithmId())
+            .append("inputPath", getInputPath())
+            .append("outputPath", getOutputPath())
+            .append("algorithmParams", getAlgorithmParams())
+            .append("status", getStatus())
+            .append("startTime", getStartTime())
+            .append("endTime", getEndTime())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 155 - 0
ips-admin/src/main/java/com/ips/system/domain/ExtractedFeatures.java

@@ -0,0 +1,155 @@
+package com.ips.system.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ips.common.annotation.Excel;
+import com.ips.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 特征提取对象 biz_extracted_features
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public class ExtractedFeatures extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 算法名称 */
+    @Excel(name = "算法名称")
+    private String taskName;
+
+    /** 算法 */
+    @Excel(name = "算法")
+    private Long algorithmId;
+
+    /** 输入路径 */
+    private String inputPath;
+
+    /** 输入路径 */
+    private String outputPath;
+
+    /** 算法参数 */
+    private String algorithmParams;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String status;
+
+    /** 开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+    /** 结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskName(String taskName) 
+    {
+        this.taskName = taskName;
+    }
+
+    public String getTaskName() 
+    {
+        return taskName;
+    }
+    public void setAlgorithmId(Long algorithmId) 
+    {
+        this.algorithmId = algorithmId;
+    }
+
+    public Long getAlgorithmId() 
+    {
+        return algorithmId;
+    }
+    public void setInputPath(String inputPath) 
+    {
+        this.inputPath = inputPath;
+    }
+
+    public String getInputPath() 
+    {
+        return inputPath;
+    }
+    public void setOutputPath(String outputPath) 
+    {
+        this.outputPath = outputPath;
+    }
+
+    public String getOutputPath() 
+    {
+        return outputPath;
+    }
+    public void setAlgorithmParams(String algorithmParams) 
+    {
+        this.algorithmParams = algorithmParams;
+    }
+
+    public String getAlgorithmParams() 
+    {
+        return algorithmParams;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setStartTime(Date startTime) 
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime() 
+    {
+        return startTime;
+    }
+    public void setEndTime(Date endTime) 
+    {
+        this.endTime = endTime;
+    }
+
+    public Date getEndTime() 
+    {
+        return endTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskName", getTaskName())
+            .append("algorithmId", getAlgorithmId())
+            .append("inputPath", getInputPath())
+            .append("outputPath", getOutputPath())
+            .append("algorithmParams", getAlgorithmParams())
+            .append("status", getStatus())
+            .append("startTime", getStartTime())
+            .append("endTime", getEndTime())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 155 - 0
ips-admin/src/main/java/com/ips/system/domain/Preprocessed.java

@@ -0,0 +1,155 @@
+package com.ips.system.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ips.common.annotation.Excel;
+import com.ips.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 数据预处理对象 biz_preprocessed
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public class Preprocessed extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 编号 */
+    private Long id;
+
+    /** 算法名称 */
+    @Excel(name = "算法名称")
+    private String taskName;
+
+    /** 算法 */
+    @Excel(name = "算法")
+    private Long algorithmId;
+
+    /** 输入路径 */
+    private String inputPath;
+
+    /** 输出路径 */
+    private String outputPath;
+
+    /** 算法参数 */
+    private String algorithmParams;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String status;
+
+    /** 开始时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date startTime;
+
+    /** 结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date endTime;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskName(String taskName) 
+    {
+        this.taskName = taskName;
+    }
+
+    public String getTaskName() 
+    {
+        return taskName;
+    }
+    public void setAlgorithmId(Long algorithmId) 
+    {
+        this.algorithmId = algorithmId;
+    }
+
+    public Long getAlgorithmId() 
+    {
+        return algorithmId;
+    }
+    public void setInputPath(String inputPath) 
+    {
+        this.inputPath = inputPath;
+    }
+
+    public String getInputPath() 
+    {
+        return inputPath;
+    }
+    public void setOutputPath(String outputPath) 
+    {
+        this.outputPath = outputPath;
+    }
+
+    public String getOutputPath() 
+    {
+        return outputPath;
+    }
+    public void setAlgorithmParams(String algorithmParams) 
+    {
+        this.algorithmParams = algorithmParams;
+    }
+
+    public String getAlgorithmParams() 
+    {
+        return algorithmParams;
+    }
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+    public void setStartTime(Date startTime) 
+    {
+        this.startTime = startTime;
+    }
+
+    public Date getStartTime() 
+    {
+        return startTime;
+    }
+    public void setEndTime(Date endTime) 
+    {
+        this.endTime = endTime;
+    }
+
+    public Date getEndTime() 
+    {
+        return endTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskName", getTaskName())
+            .append("algorithmId", getAlgorithmId())
+            .append("inputPath", getInputPath())
+            .append("outputPath", getOutputPath())
+            .append("algorithmParams", getAlgorithmParams())
+            .append("status", getStatus())
+            .append("startTime", getStartTime())
+            .append("endTime", getEndTime())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/mapper/AlgorithmConfigMapper.java

@@ -0,0 +1,61 @@
+package com.ips.system.mapper;
+
+import java.util.List;
+import com.ips.system.domain.AlgorithmConfig;
+
+/**
+ * 算法配置Mapper接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface AlgorithmConfigMapper 
+{
+    /**
+     * 查询算法配置
+     * 
+     * @param id 算法配置主键
+     * @return 算法配置
+     */
+    public AlgorithmConfig selectAlgorithmConfigById(Long id);
+
+    /**
+     * 查询算法配置列表
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 算法配置集合
+     */
+    public List<AlgorithmConfig> selectAlgorithmConfigList(AlgorithmConfig algorithmConfig);
+
+    /**
+     * 新增算法配置
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 结果
+     */
+    public int insertAlgorithmConfig(AlgorithmConfig algorithmConfig);
+
+    /**
+     * 修改算法配置
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 结果
+     */
+    public int updateAlgorithmConfig(AlgorithmConfig algorithmConfig);
+
+    /**
+     * 删除算法配置
+     * 
+     * @param id 算法配置主键
+     * @return 结果
+     */
+    public int deleteAlgorithmConfigById(Long id);
+
+    /**
+     * 批量删除算法配置
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteAlgorithmConfigByIds(Long[] ids);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/mapper/BizTrainingMapper.java

@@ -0,0 +1,61 @@
+package com.ips.system.mapper;
+
+import java.util.List;
+import com.ips.system.domain.BizTraining;
+
+/**
+ * 模型训练Mapper接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface BizTrainingMapper 
+{
+    /**
+     * 查询模型训练
+     * 
+     * @param id 模型训练主键
+     * @return 模型训练
+     */
+    public BizTraining selectBizTrainingById(Long id);
+
+    /**
+     * 查询模型训练列表
+     * 
+     * @param bizTraining 模型训练
+     * @return 模型训练集合
+     */
+    public List<BizTraining> selectBizTrainingList(BizTraining bizTraining);
+
+    /**
+     * 新增模型训练
+     * 
+     * @param bizTraining 模型训练
+     * @return 结果
+     */
+    public int insertBizTraining(BizTraining bizTraining);
+
+    /**
+     * 修改模型训练
+     * 
+     * @param bizTraining 模型训练
+     * @return 结果
+     */
+    public int updateBizTraining(BizTraining bizTraining);
+
+    /**
+     * 删除模型训练
+     * 
+     * @param id 模型训练主键
+     * @return 结果
+     */
+    public int deleteBizTrainingById(Long id);
+
+    /**
+     * 批量删除模型训练
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBizTrainingByIds(Long[] ids);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/mapper/ClassifyTestMapper.java

@@ -0,0 +1,61 @@
+package com.ips.system.mapper;
+
+import java.util.List;
+import com.ips.system.domain.ClassifyTest;
+
+/**
+ * 分类测试Mapper接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface ClassifyTestMapper 
+{
+    /**
+     * 查询分类测试
+     * 
+     * @param id 分类测试主键
+     * @return 分类测试
+     */
+    public ClassifyTest selectClassifyTestById(Long id);
+
+    /**
+     * 查询分类测试列表
+     * 
+     * @param classifyTest 分类测试
+     * @return 分类测试集合
+     */
+    public List<ClassifyTest> selectClassifyTestList(ClassifyTest classifyTest);
+
+    /**
+     * 新增分类测试
+     * 
+     * @param classifyTest 分类测试
+     * @return 结果
+     */
+    public int insertClassifyTest(ClassifyTest classifyTest);
+
+    /**
+     * 修改分类测试
+     * 
+     * @param classifyTest 分类测试
+     * @return 结果
+     */
+    public int updateClassifyTest(ClassifyTest classifyTest);
+
+    /**
+     * 删除分类测试
+     * 
+     * @param id 分类测试主键
+     * @return 结果
+     */
+    public int deleteClassifyTestById(Long id);
+
+    /**
+     * 批量删除分类测试
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteClassifyTestByIds(Long[] ids);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/mapper/DistillationMapper.java

@@ -0,0 +1,61 @@
+package com.ips.system.mapper;
+
+import java.util.List;
+import com.ips.system.domain.Distillation;
+
+/**
+ * 知识蒸馏Mapper接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface DistillationMapper 
+{
+    /**
+     * 查询知识蒸馏
+     * 
+     * @param id 知识蒸馏主键
+     * @return 知识蒸馏
+     */
+    public Distillation selectDistillationById(Long id);
+
+    /**
+     * 查询知识蒸馏列表
+     * 
+     * @param distillation 知识蒸馏
+     * @return 知识蒸馏集合
+     */
+    public List<Distillation> selectDistillationList(Distillation distillation);
+
+    /**
+     * 新增知识蒸馏
+     * 
+     * @param distillation 知识蒸馏
+     * @return 结果
+     */
+    public int insertDistillation(Distillation distillation);
+
+    /**
+     * 修改知识蒸馏
+     * 
+     * @param distillation 知识蒸馏
+     * @return 结果
+     */
+    public int updateDistillation(Distillation distillation);
+
+    /**
+     * 删除知识蒸馏
+     * 
+     * @param id 知识蒸馏主键
+     * @return 结果
+     */
+    public int deleteDistillationById(Long id);
+
+    /**
+     * 批量删除知识蒸馏
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteDistillationByIds(Long[] ids);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/mapper/ExtractedFeaturesMapper.java

@@ -0,0 +1,61 @@
+package com.ips.system.mapper;
+
+import java.util.List;
+import com.ips.system.domain.ExtractedFeatures;
+
+/**
+ * 特征提取Mapper接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface ExtractedFeaturesMapper 
+{
+    /**
+     * 查询特征提取
+     * 
+     * @param id 特征提取主键
+     * @return 特征提取
+     */
+    public ExtractedFeatures selectExtractedFeaturesById(Long id);
+
+    /**
+     * 查询特征提取列表
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 特征提取集合
+     */
+    public List<ExtractedFeatures> selectExtractedFeaturesList(ExtractedFeatures extractedFeatures);
+
+    /**
+     * 新增特征提取
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 结果
+     */
+    public int insertExtractedFeatures(ExtractedFeatures extractedFeatures);
+
+    /**
+     * 修改特征提取
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 结果
+     */
+    public int updateExtractedFeatures(ExtractedFeatures extractedFeatures);
+
+    /**
+     * 删除特征提取
+     * 
+     * @param id 特征提取主键
+     * @return 结果
+     */
+    public int deleteExtractedFeaturesById(Long id);
+
+    /**
+     * 批量删除特征提取
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteExtractedFeaturesByIds(Long[] ids);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/mapper/PreprocessedMapper.java

@@ -0,0 +1,61 @@
+package com.ips.system.mapper;
+
+import java.util.List;
+import com.ips.system.domain.Preprocessed;
+
+/**
+ * 数据预处理Mapper接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface PreprocessedMapper 
+{
+    /**
+     * 查询数据预处理
+     * 
+     * @param id 数据预处理主键
+     * @return 数据预处理
+     */
+    public Preprocessed selectPreprocessedById(Long id);
+
+    /**
+     * 查询数据预处理列表
+     * 
+     * @param preprocessed 数据预处理
+     * @return 数据预处理集合
+     */
+    public List<Preprocessed> selectPreprocessedList(Preprocessed preprocessed);
+
+    /**
+     * 新增数据预处理
+     * 
+     * @param preprocessed 数据预处理
+     * @return 结果
+     */
+    public int insertPreprocessed(Preprocessed preprocessed);
+
+    /**
+     * 修改数据预处理
+     * 
+     * @param preprocessed 数据预处理
+     * @return 结果
+     */
+    public int updatePreprocessed(Preprocessed preprocessed);
+
+    /**
+     * 删除数据预处理
+     * 
+     * @param id 数据预处理主键
+     * @return 结果
+     */
+    public int deletePreprocessedById(Long id);
+
+    /**
+     * 批量删除数据预处理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deletePreprocessedByIds(Long[] ids);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/service/IAlgorithmConfigService.java

@@ -0,0 +1,61 @@
+package com.ips.system.service;
+
+import java.util.List;
+import com.ips.system.domain.AlgorithmConfig;
+
+/**
+ * 算法配置Service接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface IAlgorithmConfigService 
+{
+    /**
+     * 查询算法配置
+     * 
+     * @param id 算法配置主键
+     * @return 算法配置
+     */
+    public AlgorithmConfig selectAlgorithmConfigById(Long id);
+
+    /**
+     * 查询算法配置列表
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 算法配置集合
+     */
+    public List<AlgorithmConfig> selectAlgorithmConfigList(AlgorithmConfig algorithmConfig);
+
+    /**
+     * 新增算法配置
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 结果
+     */
+    public int insertAlgorithmConfig(AlgorithmConfig algorithmConfig);
+
+    /**
+     * 修改算法配置
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 结果
+     */
+    public int updateAlgorithmConfig(AlgorithmConfig algorithmConfig);
+
+    /**
+     * 批量删除算法配置
+     * 
+     * @param ids 需要删除的算法配置主键集合
+     * @return 结果
+     */
+    public int deleteAlgorithmConfigByIds(Long[] ids);
+
+    /**
+     * 删除算法配置信息
+     * 
+     * @param id 算法配置主键
+     * @return 结果
+     */
+    public int deleteAlgorithmConfigById(Long id);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/service/IBizTrainingService.java

@@ -0,0 +1,61 @@
+package com.ips.system.service;
+
+import java.util.List;
+import com.ips.system.domain.BizTraining;
+
+/**
+ * 模型训练Service接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface IBizTrainingService 
+{
+    /**
+     * 查询模型训练
+     * 
+     * @param id 模型训练主键
+     * @return 模型训练
+     */
+    public BizTraining selectBizTrainingById(Long id);
+
+    /**
+     * 查询模型训练列表
+     * 
+     * @param bizTraining 模型训练
+     * @return 模型训练集合
+     */
+    public List<BizTraining> selectBizTrainingList(BizTraining bizTraining);
+
+    /**
+     * 新增模型训练
+     * 
+     * @param bizTraining 模型训练
+     * @return 结果
+     */
+    public int insertBizTraining(BizTraining bizTraining);
+
+    /**
+     * 修改模型训练
+     * 
+     * @param bizTraining 模型训练
+     * @return 结果
+     */
+    public int updateBizTraining(BizTraining bizTraining);
+
+    /**
+     * 批量删除模型训练
+     * 
+     * @param ids 需要删除的模型训练主键集合
+     * @return 结果
+     */
+    public int deleteBizTrainingByIds(Long[] ids);
+
+    /**
+     * 删除模型训练信息
+     * 
+     * @param id 模型训练主键
+     * @return 结果
+     */
+    public int deleteBizTrainingById(Long id);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/service/IClassifyTestService.java

@@ -0,0 +1,61 @@
+package com.ips.system.service;
+
+import java.util.List;
+import com.ips.system.domain.ClassifyTest;
+
+/**
+ * 分类测试Service接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface IClassifyTestService 
+{
+    /**
+     * 查询分类测试
+     * 
+     * @param id 分类测试主键
+     * @return 分类测试
+     */
+    public ClassifyTest selectClassifyTestById(Long id);
+
+    /**
+     * 查询分类测试列表
+     * 
+     * @param classifyTest 分类测试
+     * @return 分类测试集合
+     */
+    public List<ClassifyTest> selectClassifyTestList(ClassifyTest classifyTest);
+
+    /**
+     * 新增分类测试
+     * 
+     * @param classifyTest 分类测试
+     * @return 结果
+     */
+    public int insertClassifyTest(ClassifyTest classifyTest);
+
+    /**
+     * 修改分类测试
+     * 
+     * @param classifyTest 分类测试
+     * @return 结果
+     */
+    public int updateClassifyTest(ClassifyTest classifyTest);
+
+    /**
+     * 批量删除分类测试
+     * 
+     * @param ids 需要删除的分类测试主键集合
+     * @return 结果
+     */
+    public int deleteClassifyTestByIds(Long[] ids);
+
+    /**
+     * 删除分类测试信息
+     * 
+     * @param id 分类测试主键
+     * @return 结果
+     */
+    public int deleteClassifyTestById(Long id);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/service/IDistillationService.java

@@ -0,0 +1,61 @@
+package com.ips.system.service;
+
+import java.util.List;
+import com.ips.system.domain.Distillation;
+
+/**
+ * 知识蒸馏Service接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface IDistillationService 
+{
+    /**
+     * 查询知识蒸馏
+     * 
+     * @param id 知识蒸馏主键
+     * @return 知识蒸馏
+     */
+    public Distillation selectDistillationById(Long id);
+
+    /**
+     * 查询知识蒸馏列表
+     * 
+     * @param distillation 知识蒸馏
+     * @return 知识蒸馏集合
+     */
+    public List<Distillation> selectDistillationList(Distillation distillation);
+
+    /**
+     * 新增知识蒸馏
+     * 
+     * @param distillation 知识蒸馏
+     * @return 结果
+     */
+    public int insertDistillation(Distillation distillation);
+
+    /**
+     * 修改知识蒸馏
+     * 
+     * @param distillation 知识蒸馏
+     * @return 结果
+     */
+    public int updateDistillation(Distillation distillation);
+
+    /**
+     * 批量删除知识蒸馏
+     * 
+     * @param ids 需要删除的知识蒸馏主键集合
+     * @return 结果
+     */
+    public int deleteDistillationByIds(Long[] ids);
+
+    /**
+     * 删除知识蒸馏信息
+     * 
+     * @param id 知识蒸馏主键
+     * @return 结果
+     */
+    public int deleteDistillationById(Long id);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/service/IExtractedFeaturesService.java

@@ -0,0 +1,61 @@
+package com.ips.system.service;
+
+import java.util.List;
+import com.ips.system.domain.ExtractedFeatures;
+
+/**
+ * 特征提取Service接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface IExtractedFeaturesService 
+{
+    /**
+     * 查询特征提取
+     * 
+     * @param id 特征提取主键
+     * @return 特征提取
+     */
+    public ExtractedFeatures selectExtractedFeaturesById(Long id);
+
+    /**
+     * 查询特征提取列表
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 特征提取集合
+     */
+    public List<ExtractedFeatures> selectExtractedFeaturesList(ExtractedFeatures extractedFeatures);
+
+    /**
+     * 新增特征提取
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 结果
+     */
+    public int insertExtractedFeatures(ExtractedFeatures extractedFeatures);
+
+    /**
+     * 修改特征提取
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 结果
+     */
+    public int updateExtractedFeatures(ExtractedFeatures extractedFeatures);
+
+    /**
+     * 批量删除特征提取
+     * 
+     * @param ids 需要删除的特征提取主键集合
+     * @return 结果
+     */
+    public int deleteExtractedFeaturesByIds(Long[] ids);
+
+    /**
+     * 删除特征提取信息
+     * 
+     * @param id 特征提取主键
+     * @return 结果
+     */
+    public int deleteExtractedFeaturesById(Long id);
+}

+ 61 - 0
ips-admin/src/main/java/com/ips/system/service/IPreprocessedService.java

@@ -0,0 +1,61 @@
+package com.ips.system.service;
+
+import java.util.List;
+import com.ips.system.domain.Preprocessed;
+
+/**
+ * 数据预处理Service接口
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+public interface IPreprocessedService 
+{
+    /**
+     * 查询数据预处理
+     * 
+     * @param id 数据预处理主键
+     * @return 数据预处理
+     */
+    public Preprocessed selectPreprocessedById(Long id);
+
+    /**
+     * 查询数据预处理列表
+     * 
+     * @param preprocessed 数据预处理
+     * @return 数据预处理集合
+     */
+    public List<Preprocessed> selectPreprocessedList(Preprocessed preprocessed);
+
+    /**
+     * 新增数据预处理
+     * 
+     * @param preprocessed 数据预处理
+     * @return 结果
+     */
+    public int insertPreprocessed(Preprocessed preprocessed);
+
+    /**
+     * 修改数据预处理
+     * 
+     * @param preprocessed 数据预处理
+     * @return 结果
+     */
+    public int updatePreprocessed(Preprocessed preprocessed);
+
+    /**
+     * 批量删除数据预处理
+     * 
+     * @param ids 需要删除的数据预处理主键集合
+     * @return 结果
+     */
+    public int deletePreprocessedByIds(Long[] ids);
+
+    /**
+     * 删除数据预处理信息
+     * 
+     * @param id 数据预处理主键
+     * @return 结果
+     */
+    public int deletePreprocessedById(Long id);
+}

+ 96 - 0
ips-admin/src/main/java/com/ips/system/service/impl/AlgorithmConfigServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ips.system.service.impl;
+
+import java.util.List;
+import com.ips.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ips.system.mapper.AlgorithmConfigMapper;
+import com.ips.system.domain.AlgorithmConfig;
+import com.ips.system.service.IAlgorithmConfigService;
+
+/**
+ * 算法配置Service业务层处理
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@Service
+public class AlgorithmConfigServiceImpl implements IAlgorithmConfigService 
+{
+    @Autowired
+    private AlgorithmConfigMapper algorithmConfigMapper;
+
+    /**
+     * 查询算法配置
+     * 
+     * @param id 算法配置主键
+     * @return 算法配置
+     */
+    @Override
+    public AlgorithmConfig selectAlgorithmConfigById(Long id)
+    {
+        return algorithmConfigMapper.selectAlgorithmConfigById(id);
+    }
+
+    /**
+     * 查询算法配置列表
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 算法配置
+     */
+    @Override
+    public List<AlgorithmConfig> selectAlgorithmConfigList(AlgorithmConfig algorithmConfig)
+    {
+        return algorithmConfigMapper.selectAlgorithmConfigList(algorithmConfig);
+    }
+
+    /**
+     * 新增算法配置
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 结果
+     */
+    @Override
+    public int insertAlgorithmConfig(AlgorithmConfig algorithmConfig)
+    {
+        algorithmConfig.setCreateTime(DateUtils.getNowDate());
+        return algorithmConfigMapper.insertAlgorithmConfig(algorithmConfig);
+    }
+
+    /**
+     * 修改算法配置
+     * 
+     * @param algorithmConfig 算法配置
+     * @return 结果
+     */
+    @Override
+    public int updateAlgorithmConfig(AlgorithmConfig algorithmConfig)
+    {
+        algorithmConfig.setUpdateTime(DateUtils.getNowDate());
+        return algorithmConfigMapper.updateAlgorithmConfig(algorithmConfig);
+    }
+
+    /**
+     * 批量删除算法配置
+     * 
+     * @param ids 需要删除的算法配置主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAlgorithmConfigByIds(Long[] ids)
+    {
+        return algorithmConfigMapper.deleteAlgorithmConfigByIds(ids);
+    }
+
+    /**
+     * 删除算法配置信息
+     * 
+     * @param id 算法配置主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAlgorithmConfigById(Long id)
+    {
+        return algorithmConfigMapper.deleteAlgorithmConfigById(id);
+    }
+}

+ 96 - 0
ips-admin/src/main/java/com/ips/system/service/impl/BizTrainingServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ips.system.service.impl;
+
+import java.util.List;
+import com.ips.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ips.system.mapper.BizTrainingMapper;
+import com.ips.system.domain.BizTraining;
+import com.ips.system.service.IBizTrainingService;
+
+/**
+ * 模型训练Service业务层处理
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@Service
+public class BizTrainingServiceImpl implements IBizTrainingService 
+{
+    @Autowired
+    private BizTrainingMapper bizTrainingMapper;
+
+    /**
+     * 查询模型训练
+     * 
+     * @param id 模型训练主键
+     * @return 模型训练
+     */
+    @Override
+    public BizTraining selectBizTrainingById(Long id)
+    {
+        return bizTrainingMapper.selectBizTrainingById(id);
+    }
+
+    /**
+     * 查询模型训练列表
+     * 
+     * @param bizTraining 模型训练
+     * @return 模型训练
+     */
+    @Override
+    public List<BizTraining> selectBizTrainingList(BizTraining bizTraining)
+    {
+        return bizTrainingMapper.selectBizTrainingList(bizTraining);
+    }
+
+    /**
+     * 新增模型训练
+     * 
+     * @param bizTraining 模型训练
+     * @return 结果
+     */
+    @Override
+    public int insertBizTraining(BizTraining bizTraining)
+    {
+        bizTraining.setCreateTime(DateUtils.getNowDate());
+        return bizTrainingMapper.insertBizTraining(bizTraining);
+    }
+
+    /**
+     * 修改模型训练
+     * 
+     * @param bizTraining 模型训练
+     * @return 结果
+     */
+    @Override
+    public int updateBizTraining(BizTraining bizTraining)
+    {
+        bizTraining.setUpdateTime(DateUtils.getNowDate());
+        return bizTrainingMapper.updateBizTraining(bizTraining);
+    }
+
+    /**
+     * 批量删除模型训练
+     * 
+     * @param ids 需要删除的模型训练主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizTrainingByIds(Long[] ids)
+    {
+        return bizTrainingMapper.deleteBizTrainingByIds(ids);
+    }
+
+    /**
+     * 删除模型训练信息
+     * 
+     * @param id 模型训练主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizTrainingById(Long id)
+    {
+        return bizTrainingMapper.deleteBizTrainingById(id);
+    }
+}

+ 96 - 0
ips-admin/src/main/java/com/ips/system/service/impl/ClassifyTestServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ips.system.service.impl;
+
+import java.util.List;
+import com.ips.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ips.system.mapper.ClassifyTestMapper;
+import com.ips.system.domain.ClassifyTest;
+import com.ips.system.service.IClassifyTestService;
+
+/**
+ * 分类测试Service业务层处理
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@Service
+public class ClassifyTestServiceImpl implements IClassifyTestService 
+{
+    @Autowired
+    private ClassifyTestMapper classifyTestMapper;
+
+    /**
+     * 查询分类测试
+     * 
+     * @param id 分类测试主键
+     * @return 分类测试
+     */
+    @Override
+    public ClassifyTest selectClassifyTestById(Long id)
+    {
+        return classifyTestMapper.selectClassifyTestById(id);
+    }
+
+    /**
+     * 查询分类测试列表
+     * 
+     * @param classifyTest 分类测试
+     * @return 分类测试
+     */
+    @Override
+    public List<ClassifyTest> selectClassifyTestList(ClassifyTest classifyTest)
+    {
+        return classifyTestMapper.selectClassifyTestList(classifyTest);
+    }
+
+    /**
+     * 新增分类测试
+     * 
+     * @param classifyTest 分类测试
+     * @return 结果
+     */
+    @Override
+    public int insertClassifyTest(ClassifyTest classifyTest)
+    {
+        classifyTest.setCreateTime(DateUtils.getNowDate());
+        return classifyTestMapper.insertClassifyTest(classifyTest);
+    }
+
+    /**
+     * 修改分类测试
+     * 
+     * @param classifyTest 分类测试
+     * @return 结果
+     */
+    @Override
+    public int updateClassifyTest(ClassifyTest classifyTest)
+    {
+        classifyTest.setUpdateTime(DateUtils.getNowDate());
+        return classifyTestMapper.updateClassifyTest(classifyTest);
+    }
+
+    /**
+     * 批量删除分类测试
+     * 
+     * @param ids 需要删除的分类测试主键
+     * @return 结果
+     */
+    @Override
+    public int deleteClassifyTestByIds(Long[] ids)
+    {
+        return classifyTestMapper.deleteClassifyTestByIds(ids);
+    }
+
+    /**
+     * 删除分类测试信息
+     * 
+     * @param id 分类测试主键
+     * @return 结果
+     */
+    @Override
+    public int deleteClassifyTestById(Long id)
+    {
+        return classifyTestMapper.deleteClassifyTestById(id);
+    }
+}

+ 96 - 0
ips-admin/src/main/java/com/ips/system/service/impl/DistillationServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ips.system.service.impl;
+
+import java.util.List;
+import com.ips.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ips.system.mapper.DistillationMapper;
+import com.ips.system.domain.Distillation;
+import com.ips.system.service.IDistillationService;
+
+/**
+ * 知识蒸馏Service业务层处理
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@Service
+public class DistillationServiceImpl implements IDistillationService 
+{
+    @Autowired
+    private DistillationMapper distillationMapper;
+
+    /**
+     * 查询知识蒸馏
+     * 
+     * @param id 知识蒸馏主键
+     * @return 知识蒸馏
+     */
+    @Override
+    public Distillation selectDistillationById(Long id)
+    {
+        return distillationMapper.selectDistillationById(id);
+    }
+
+    /**
+     * 查询知识蒸馏列表
+     * 
+     * @param distillation 知识蒸馏
+     * @return 知识蒸馏
+     */
+    @Override
+    public List<Distillation> selectDistillationList(Distillation distillation)
+    {
+        return distillationMapper.selectDistillationList(distillation);
+    }
+
+    /**
+     * 新增知识蒸馏
+     * 
+     * @param distillation 知识蒸馏
+     * @return 结果
+     */
+    @Override
+    public int insertDistillation(Distillation distillation)
+    {
+        distillation.setCreateTime(DateUtils.getNowDate());
+        return distillationMapper.insertDistillation(distillation);
+    }
+
+    /**
+     * 修改知识蒸馏
+     * 
+     * @param distillation 知识蒸馏
+     * @return 结果
+     */
+    @Override
+    public int updateDistillation(Distillation distillation)
+    {
+        distillation.setUpdateTime(DateUtils.getNowDate());
+        return distillationMapper.updateDistillation(distillation);
+    }
+
+    /**
+     * 批量删除知识蒸馏
+     * 
+     * @param ids 需要删除的知识蒸馏主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDistillationByIds(Long[] ids)
+    {
+        return distillationMapper.deleteDistillationByIds(ids);
+    }
+
+    /**
+     * 删除知识蒸馏信息
+     * 
+     * @param id 知识蒸馏主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDistillationById(Long id)
+    {
+        return distillationMapper.deleteDistillationById(id);
+    }
+}

+ 96 - 0
ips-admin/src/main/java/com/ips/system/service/impl/ExtractedFeaturesServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ips.system.service.impl;
+
+import java.util.List;
+import com.ips.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ips.system.mapper.ExtractedFeaturesMapper;
+import com.ips.system.domain.ExtractedFeatures;
+import com.ips.system.service.IExtractedFeaturesService;
+
+/**
+ * 特征提取Service业务层处理
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@Service
+public class ExtractedFeaturesServiceImpl implements IExtractedFeaturesService 
+{
+    @Autowired
+    private ExtractedFeaturesMapper extractedFeaturesMapper;
+
+    /**
+     * 查询特征提取
+     * 
+     * @param id 特征提取主键
+     * @return 特征提取
+     */
+    @Override
+    public ExtractedFeatures selectExtractedFeaturesById(Long id)
+    {
+        return extractedFeaturesMapper.selectExtractedFeaturesById(id);
+    }
+
+    /**
+     * 查询特征提取列表
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 特征提取
+     */
+    @Override
+    public List<ExtractedFeatures> selectExtractedFeaturesList(ExtractedFeatures extractedFeatures)
+    {
+        return extractedFeaturesMapper.selectExtractedFeaturesList(extractedFeatures);
+    }
+
+    /**
+     * 新增特征提取
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 结果
+     */
+    @Override
+    public int insertExtractedFeatures(ExtractedFeatures extractedFeatures)
+    {
+        extractedFeatures.setCreateTime(DateUtils.getNowDate());
+        return extractedFeaturesMapper.insertExtractedFeatures(extractedFeatures);
+    }
+
+    /**
+     * 修改特征提取
+     * 
+     * @param extractedFeatures 特征提取
+     * @return 结果
+     */
+    @Override
+    public int updateExtractedFeatures(ExtractedFeatures extractedFeatures)
+    {
+        extractedFeatures.setUpdateTime(DateUtils.getNowDate());
+        return extractedFeaturesMapper.updateExtractedFeatures(extractedFeatures);
+    }
+
+    /**
+     * 批量删除特征提取
+     * 
+     * @param ids 需要删除的特征提取主键
+     * @return 结果
+     */
+    @Override
+    public int deleteExtractedFeaturesByIds(Long[] ids)
+    {
+        return extractedFeaturesMapper.deleteExtractedFeaturesByIds(ids);
+    }
+
+    /**
+     * 删除特征提取信息
+     * 
+     * @param id 特征提取主键
+     * @return 结果
+     */
+    @Override
+    public int deleteExtractedFeaturesById(Long id)
+    {
+        return extractedFeaturesMapper.deleteExtractedFeaturesById(id);
+    }
+}

+ 96 - 0
ips-admin/src/main/java/com/ips/system/service/impl/PreprocessedServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ips.system.service.impl;
+
+import java.util.List;
+import com.ips.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ips.system.mapper.PreprocessedMapper;
+import com.ips.system.domain.Preprocessed;
+import com.ips.system.service.IPreprocessedService;
+
+/**
+ * 数据预处理Service业务层处理
+ * 
+ * @author Allen
+ * @date 2025-05-21
+ */
+@Service
+public class PreprocessedServiceImpl implements IPreprocessedService 
+{
+    @Autowired
+    private PreprocessedMapper preprocessedMapper;
+
+    /**
+     * 查询数据预处理
+     * 
+     * @param id 数据预处理主键
+     * @return 数据预处理
+     */
+    @Override
+    public Preprocessed selectPreprocessedById(Long id)
+    {
+        return preprocessedMapper.selectPreprocessedById(id);
+    }
+
+    /**
+     * 查询数据预处理列表
+     * 
+     * @param preprocessed 数据预处理
+     * @return 数据预处理
+     */
+    @Override
+    public List<Preprocessed> selectPreprocessedList(Preprocessed preprocessed)
+    {
+        return preprocessedMapper.selectPreprocessedList(preprocessed);
+    }
+
+    /**
+     * 新增数据预处理
+     * 
+     * @param preprocessed 数据预处理
+     * @return 结果
+     */
+    @Override
+    public int insertPreprocessed(Preprocessed preprocessed)
+    {
+        preprocessed.setCreateTime(DateUtils.getNowDate());
+        return preprocessedMapper.insertPreprocessed(preprocessed);
+    }
+
+    /**
+     * 修改数据预处理
+     * 
+     * @param preprocessed 数据预处理
+     * @return 结果
+     */
+    @Override
+    public int updatePreprocessed(Preprocessed preprocessed)
+    {
+        preprocessed.setUpdateTime(DateUtils.getNowDate());
+        return preprocessedMapper.updatePreprocessed(preprocessed);
+    }
+
+    /**
+     * 批量删除数据预处理
+     * 
+     * @param ids 需要删除的数据预处理主键
+     * @return 结果
+     */
+    @Override
+    public int deletePreprocessedByIds(Long[] ids)
+    {
+        return preprocessedMapper.deletePreprocessedByIds(ids);
+    }
+
+    /**
+     * 删除数据预处理信息
+     * 
+     * @param id 数据预处理主键
+     * @return 结果
+     */
+    @Override
+    public int deletePreprocessedById(Long id)
+    {
+        return preprocessedMapper.deletePreprocessedById(id);
+    }
+}

+ 85 - 0
ips-admin/src/main/resources/mapper/biz/AlgorithmConfigMapper.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ips.system.mapper.AlgorithmConfigMapper">
+    
+    <resultMap type="AlgorithmConfig" id="AlgorithmConfigResult">
+        <result property="id"    column="id"    />
+        <result property="algorithmName"    column="algorithm_name"    />
+        <result property="algorithmType"    column="algorithm_type"    />
+        <result property="algorithmParams"    column="algorithm_params"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectAlgorithmConfigVo">
+        select id, algorithm_name, algorithm_type, algorithm_params, remark, create_by, create_time, update_by, update_time from biz_algorithm_config
+    </sql>
+
+    <select id="selectAlgorithmConfigList" parameterType="AlgorithmConfig" resultMap="AlgorithmConfigResult">
+        <include refid="selectAlgorithmConfigVo"/>
+        <where>  
+            <if test="algorithmName != null "> and algorithm_name like concat('%', #{algorithmName}, '%')</if>
+            <if test="algorithmType != null  and algorithmType != ''"> and algorithm_type = #{algorithmType}</if>
+        </where>
+    </select>
+    
+    <select id="selectAlgorithmConfigById" parameterType="Long" resultMap="AlgorithmConfigResult">
+        <include refid="selectAlgorithmConfigVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertAlgorithmConfig" parameterType="AlgorithmConfig" useGeneratedKeys="true" keyProperty="id">
+        insert into biz_algorithm_config
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="algorithmName != null">algorithm_name,</if>
+            <if test="algorithmType != null">algorithm_type,</if>
+            <if test="algorithmParams != null">algorithm_params,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="algorithmName != null">#{algorithmName},</if>
+            <if test="algorithmType != null">#{algorithmType},</if>
+            <if test="algorithmParams != null">#{algorithmParams},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateAlgorithmConfig" parameterType="AlgorithmConfig">
+        update biz_algorithm_config
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="algorithmName != null">algorithm_name = #{algorithmName},</if>
+            <if test="algorithmType != null">algorithm_type = #{algorithmType},</if>
+            <if test="algorithmParams != null">algorithm_params = #{algorithmParams},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteAlgorithmConfigById" parameterType="Long">
+        delete from biz_algorithm_config where id = #{id}
+    </delete>
+
+    <delete id="deleteAlgorithmConfigByIds" parameterType="String">
+        delete from biz_algorithm_config where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 109 - 0
ips-admin/src/main/resources/mapper/biz/BizTrainingMapper.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ips.system.mapper.BizTrainingMapper">
+    
+    <resultMap type="BizTraining" id="BizTrainingResult">
+        <result property="id"    column="id"    />
+        <result property="taskName"    column="task_name"    />
+        <result property="algorithmId"    column="algorithm_id"    />
+        <result property="inputPath"    column="input_path"    />
+        <result property="outputPath"    column="output_path"    />
+        <result property="algorithmParams"    column="algorithm_params"    />
+        <result property="status"    column="status"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="endTime"    column="end_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectBizTrainingVo">
+        select id, task_name, algorithm_id, input_path, output_path, algorithm_params, status, start_time, end_time, remark, create_by, create_time, update_by, update_time from biz_training
+    </sql>
+
+    <select id="selectBizTrainingList" parameterType="BizTraining" resultMap="BizTrainingResult">
+        <include refid="selectBizTrainingVo"/>
+        <where>  
+            <if test="taskName != null  and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
+            <if test="algorithmId != null "> and algorithm_id = #{algorithmId}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="remark != null  and remark != ''"> and remark = #{remark}</if>
+        </where>
+    </select>
+    
+    <select id="selectBizTrainingById" parameterType="Long" resultMap="BizTrainingResult">
+        <include refid="selectBizTrainingVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertBizTraining" parameterType="BizTraining" useGeneratedKeys="true" keyProperty="id">
+        insert into biz_training
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">task_name,</if>
+            <if test="algorithmId != null">algorithm_id,</if>
+            <if test="inputPath != null">input_path,</if>
+            <if test="outputPath != null">output_path,</if>
+            <if test="algorithmParams != null">algorithm_params,</if>
+            <if test="status != null">status,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="endTime != null">end_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">#{taskName},</if>
+            <if test="algorithmId != null">#{algorithmId},</if>
+            <if test="inputPath != null">#{inputPath},</if>
+            <if test="outputPath != null">#{outputPath},</if>
+            <if test="algorithmParams != null">#{algorithmParams},</if>
+            <if test="status != null">#{status},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="endTime != null">#{endTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBizTraining" parameterType="BizTraining">
+        update biz_training
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskName != null">task_name = #{taskName},</if>
+            <if test="algorithmId != null">algorithm_id = #{algorithmId},</if>
+            <if test="inputPath != null">input_path = #{inputPath},</if>
+            <if test="outputPath != null">output_path = #{outputPath},</if>
+            <if test="algorithmParams != null">algorithm_params = #{algorithmParams},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBizTrainingById" parameterType="Long">
+        delete from biz_training where id = #{id}
+    </delete>
+
+    <delete id="deleteBizTrainingByIds" parameterType="String">
+        delete from biz_training where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 109 - 0
ips-admin/src/main/resources/mapper/biz/ClassifyTestMapper.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ips.system.mapper.ClassifyTestMapper">
+    
+    <resultMap type="ClassifyTest" id="ClassifyTestResult">
+        <result property="id"    column="id"    />
+        <result property="taskName"    column="task_name"    />
+        <result property="algorithmId"    column="algorithm_id"    />
+        <result property="inputPath"    column="input_path"    />
+        <result property="outputPath"    column="output_path"    />
+        <result property="algorithmParams"    column="algorithm_params"    />
+        <result property="status"    column="status"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="endTime"    column="end_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectClassifyTestVo">
+        select id, task_name, algorithm_id, input_path, output_path, algorithm_params, status, start_time, end_time, remark, create_by, create_time, update_by, update_time from biz_classify_test
+    </sql>
+
+    <select id="selectClassifyTestList" parameterType="ClassifyTest" resultMap="ClassifyTestResult">
+        <include refid="selectClassifyTestVo"/>
+        <where>  
+            <if test="taskName != null  and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
+            <if test="algorithmId != null "> and algorithm_id = #{algorithmId}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="remark != null  and remark != ''"> and remark = #{remark}</if>
+        </where>
+    </select>
+    
+    <select id="selectClassifyTestById" parameterType="Long" resultMap="ClassifyTestResult">
+        <include refid="selectClassifyTestVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertClassifyTest" parameterType="ClassifyTest" useGeneratedKeys="true" keyProperty="id">
+        insert into biz_classify_test
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">task_name,</if>
+            <if test="algorithmId != null">algorithm_id,</if>
+            <if test="inputPath != null">input_path,</if>
+            <if test="outputPath != null">output_path,</if>
+            <if test="algorithmParams != null">algorithm_params,</if>
+            <if test="status != null">status,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="endTime != null">end_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">#{taskName},</if>
+            <if test="algorithmId != null">#{algorithmId},</if>
+            <if test="inputPath != null">#{inputPath},</if>
+            <if test="outputPath != null">#{outputPath},</if>
+            <if test="algorithmParams != null">#{algorithmParams},</if>
+            <if test="status != null">#{status},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="endTime != null">#{endTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateClassifyTest" parameterType="ClassifyTest">
+        update biz_classify_test
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskName != null">task_name = #{taskName},</if>
+            <if test="algorithmId != null">algorithm_id = #{algorithmId},</if>
+            <if test="inputPath != null">input_path = #{inputPath},</if>
+            <if test="outputPath != null">output_path = #{outputPath},</if>
+            <if test="algorithmParams != null">algorithm_params = #{algorithmParams},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteClassifyTestById" parameterType="Long">
+        delete from biz_classify_test where id = #{id}
+    </delete>
+
+    <delete id="deleteClassifyTestByIds" parameterType="String">
+        delete from biz_classify_test where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 109 - 0
ips-admin/src/main/resources/mapper/biz/DistillationMapper.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ips.system.mapper.DistillationMapper">
+    
+    <resultMap type="Distillation" id="DistillationResult">
+        <result property="id"    column="id"    />
+        <result property="taskName"    column="task_name"    />
+        <result property="algorithmId"    column="algorithm_id"    />
+        <result property="inputPath"    column="input_path"    />
+        <result property="outputPath"    column="output_path"    />
+        <result property="algorithmParams"    column="algorithm_params"    />
+        <result property="status"    column="status"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="endTime"    column="end_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectDistillationVo">
+        select id, task_name, algorithm_id, input_path, output_path, algorithm_params, status, start_time, end_time, remark, create_by, create_time, update_by, update_time from biz_distillation
+    </sql>
+
+    <select id="selectDistillationList" parameterType="Distillation" resultMap="DistillationResult">
+        <include refid="selectDistillationVo"/>
+        <where>  
+            <if test="taskName != null  and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
+            <if test="algorithmId != null "> and algorithm_id = #{algorithmId}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="remark != null  and remark != ''"> and remark like concat('%', #{remark}, '%')</if>
+        </where>
+    </select>
+    
+    <select id="selectDistillationById" parameterType="Long" resultMap="DistillationResult">
+        <include refid="selectDistillationVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertDistillation" parameterType="Distillation" useGeneratedKeys="true" keyProperty="id">
+        insert into biz_distillation
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">task_name,</if>
+            <if test="algorithmId != null">algorithm_id,</if>
+            <if test="inputPath != null">input_path,</if>
+            <if test="outputPath != null">output_path,</if>
+            <if test="algorithmParams != null">algorithm_params,</if>
+            <if test="status != null">status,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="endTime != null">end_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">#{taskName},</if>
+            <if test="algorithmId != null">#{algorithmId},</if>
+            <if test="inputPath != null">#{inputPath},</if>
+            <if test="outputPath != null">#{outputPath},</if>
+            <if test="algorithmParams != null">#{algorithmParams},</if>
+            <if test="status != null">#{status},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="endTime != null">#{endTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateDistillation" parameterType="Distillation">
+        update biz_distillation
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskName != null">task_name = #{taskName},</if>
+            <if test="algorithmId != null">algorithm_id = #{algorithmId},</if>
+            <if test="inputPath != null">input_path = #{inputPath},</if>
+            <if test="outputPath != null">output_path = #{outputPath},</if>
+            <if test="algorithmParams != null">algorithm_params = #{algorithmParams},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteDistillationById" parameterType="Long">
+        delete from biz_distillation where id = #{id}
+    </delete>
+
+    <delete id="deleteDistillationByIds" parameterType="String">
+        delete from biz_distillation where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 109 - 0
ips-admin/src/main/resources/mapper/biz/ExtractedFeaturesMapper.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ips.system.mapper.ExtractedFeaturesMapper">
+    
+    <resultMap type="ExtractedFeatures" id="ExtractedFeaturesResult">
+        <result property="id"    column="id"    />
+        <result property="taskName"    column="task_name"    />
+        <result property="algorithmId"    column="algorithm_id"    />
+        <result property="inputPath"    column="input_path"    />
+        <result property="outputPath"    column="output_path"    />
+        <result property="algorithmParams"    column="algorithm_params"    />
+        <result property="status"    column="status"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="endTime"    column="end_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectExtractedFeaturesVo">
+        select id, task_name, algorithm_id, input_path, output_path, algorithm_params, status, start_time, end_time, remark, create_by, create_time, update_by, update_time from biz_extracted_features
+    </sql>
+
+    <select id="selectExtractedFeaturesList" parameterType="ExtractedFeatures" resultMap="ExtractedFeaturesResult">
+        <include refid="selectExtractedFeaturesVo"/>
+        <where>  
+            <if test="taskName != null  and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
+            <if test="algorithmId != null "> and algorithm_id = #{algorithmId}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="remark != null  and remark != ''"> and remark = #{remark}</if>
+        </where>
+    </select>
+    
+    <select id="selectExtractedFeaturesById" parameterType="Long" resultMap="ExtractedFeaturesResult">
+        <include refid="selectExtractedFeaturesVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertExtractedFeatures" parameterType="ExtractedFeatures" useGeneratedKeys="true" keyProperty="id">
+        insert into biz_extracted_features
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">task_name,</if>
+            <if test="algorithmId != null">algorithm_id,</if>
+            <if test="inputPath != null">input_path,</if>
+            <if test="outputPath != null">output_path,</if>
+            <if test="algorithmParams != null">algorithm_params,</if>
+            <if test="status != null">status,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="endTime != null">end_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">#{taskName},</if>
+            <if test="algorithmId != null">#{algorithmId},</if>
+            <if test="inputPath != null">#{inputPath},</if>
+            <if test="outputPath != null">#{outputPath},</if>
+            <if test="algorithmParams != null">#{algorithmParams},</if>
+            <if test="status != null">#{status},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="endTime != null">#{endTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateExtractedFeatures" parameterType="ExtractedFeatures">
+        update biz_extracted_features
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskName != null">task_name = #{taskName},</if>
+            <if test="algorithmId != null">algorithm_id = #{algorithmId},</if>
+            <if test="inputPath != null">input_path = #{inputPath},</if>
+            <if test="outputPath != null">output_path = #{outputPath},</if>
+            <if test="algorithmParams != null">algorithm_params = #{algorithmParams},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteExtractedFeaturesById" parameterType="Long">
+        delete from biz_extracted_features where id = #{id}
+    </delete>
+
+    <delete id="deleteExtractedFeaturesByIds" parameterType="String">
+        delete from biz_extracted_features where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 109 - 0
ips-admin/src/main/resources/mapper/biz/PreprocessedMapper.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ips.system.mapper.PreprocessedMapper">
+    
+    <resultMap type="Preprocessed" id="PreprocessedResult">
+        <result property="id"    column="id"    />
+        <result property="taskName"    column="task_name"    />
+        <result property="algorithmId"    column="algorithm_id"    />
+        <result property="inputPath"    column="input_path"    />
+        <result property="outputPath"    column="output_path"    />
+        <result property="algorithmParams"    column="algorithm_params"    />
+        <result property="status"    column="status"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="endTime"    column="end_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectPreprocessedVo">
+        select id, task_name, algorithm_id, input_path, output_path, algorithm_params, status, start_time, end_time, remark, create_by, create_time, update_by, update_time from biz_preprocessed
+    </sql>
+
+    <select id="selectPreprocessedList" parameterType="Preprocessed" resultMap="PreprocessedResult">
+        <include refid="selectPreprocessedVo"/>
+        <where>  
+            <if test="taskName != null  and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
+            <if test="algorithmId != null "> and algorithm_id = #{algorithmId}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="endTime != null "> and end_time = #{endTime}</if>
+            <if test="remark != null  and remark != ''"> and remark = #{remark}</if>
+        </where>
+    </select>
+    
+    <select id="selectPreprocessedById" parameterType="Long" resultMap="PreprocessedResult">
+        <include refid="selectPreprocessedVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertPreprocessed" parameterType="Preprocessed" useGeneratedKeys="true" keyProperty="id">
+        insert into biz_preprocessed
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">task_name,</if>
+            <if test="algorithmId != null">algorithm_id,</if>
+            <if test="inputPath != null">input_path,</if>
+            <if test="outputPath != null">output_path,</if>
+            <if test="algorithmParams != null">algorithm_params,</if>
+            <if test="status != null">status,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="endTime != null">end_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskName != null">#{taskName},</if>
+            <if test="algorithmId != null">#{algorithmId},</if>
+            <if test="inputPath != null">#{inputPath},</if>
+            <if test="outputPath != null">#{outputPath},</if>
+            <if test="algorithmParams != null">#{algorithmParams},</if>
+            <if test="status != null">#{status},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="endTime != null">#{endTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updatePreprocessed" parameterType="Preprocessed">
+        update biz_preprocessed
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskName != null">task_name = #{taskName},</if>
+            <if test="algorithmId != null">algorithm_id = #{algorithmId},</if>
+            <if test="inputPath != null">input_path = #{inputPath},</if>
+            <if test="outputPath != null">output_path = #{outputPath},</if>
+            <if test="algorithmParams != null">algorithm_params = #{algorithmParams},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deletePreprocessedById" parameterType="Long">
+        delete from biz_preprocessed where id = #{id}
+    </delete>
+
+    <delete id="deletePreprocessedByIds" parameterType="String">
+        delete from biz_preprocessed where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 44 - 0
ips-ui/src/api/biz/config.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询算法配置列表
+export function listConfig(query) {
+  return request({
+    url: '/biz/config/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询算法配置详细
+export function getConfig(id) {
+  return request({
+    url: '/biz/config/' + id,
+    method: 'get'
+  })
+}
+
+// 新增算法配置
+export function addConfig(data) {
+  return request({
+    url: '/biz/config',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改算法配置
+export function updateConfig(data) {
+  return request({
+    url: '/biz/config',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除算法配置
+export function delConfig(id) {
+  return request({
+    url: '/biz/config/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ips-ui/src/api/biz/distillation.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询知识蒸馏列表
+export function listDistillation(query) {
+  return request({
+    url: '/biz/distillation/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询知识蒸馏详细
+export function getDistillation(id) {
+  return request({
+    url: '/biz/distillation/' + id,
+    method: 'get'
+  })
+}
+
+// 新增知识蒸馏
+export function addDistillation(data) {
+  return request({
+    url: '/biz/distillation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改知识蒸馏
+export function updateDistillation(data) {
+  return request({
+    url: '/biz/distillation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除知识蒸馏
+export function delDistillation(id) {
+  return request({
+    url: '/biz/distillation/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ips-ui/src/api/biz/features.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询特征提取列表
+export function listFeatures(query) {
+  return request({
+    url: '/biz/features/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询特征提取详细
+export function getFeatures(id) {
+  return request({
+    url: '/biz/features/' + id,
+    method: 'get'
+  })
+}
+
+// 新增特征提取
+export function addFeatures(data) {
+  return request({
+    url: '/biz/features',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改特征提取
+export function updateFeatures(data) {
+  return request({
+    url: '/biz/features',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除特征提取
+export function delFeatures(id) {
+  return request({
+    url: '/biz/features/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ips-ui/src/api/biz/preprocessed.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询数据预处理列表
+export function listPreprocessed(query) {
+  return request({
+    url: '/biz/preprocessed/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询数据预处理详细
+export function getPreprocessed(id) {
+  return request({
+    url: '/biz/preprocessed/' + id,
+    method: 'get'
+  })
+}
+
+// 新增数据预处理
+export function addPreprocessed(data) {
+  return request({
+    url: '/biz/preprocessed',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改数据预处理
+export function updatePreprocessed(data) {
+  return request({
+    url: '/biz/preprocessed',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除数据预处理
+export function delPreprocessed(id) {
+  return request({
+    url: '/biz/preprocessed/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ips-ui/src/api/biz/test.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询分类测试列表
+export function listTest(query) {
+  return request({
+    url: '/biz/test/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询分类测试详细
+export function getTest(id) {
+  return request({
+    url: '/biz/test/' + id,
+    method: 'get'
+  })
+}
+
+// 新增分类测试
+export function addTest(data) {
+  return request({
+    url: '/biz/test',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改分类测试
+export function updateTest(data) {
+  return request({
+    url: '/biz/test',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除分类测试
+export function delTest(id) {
+  return request({
+    url: '/biz/test/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
ips-ui/src/api/biz/training.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询模型训练列表
+export function listTraining(query) {
+  return request({
+    url: '/biz/training/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询模型训练详细
+export function getTraining(id) {
+  return request({
+    url: '/biz/training/' + id,
+    method: 'get'
+  })
+}
+
+// 新增模型训练
+export function addTraining(data) {
+  return request({
+    url: '/biz/training',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改模型训练
+export function updateTraining(data) {
+  return request({
+    url: '/biz/training',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除模型训练
+export function delTraining(id) {
+  return request({
+    url: '/biz/training/' + id,
+    method: 'delete'
+  })
+}

+ 286 - 0
ips-ui/src/views/biz/config/index.vue

@@ -0,0 +1,286 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="算法名称" prop="algorithmName">
+        <el-input
+          v-model="queryParams.algorithmName"
+          placeholder="请输入算法名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="算法类型" prop="algorithmType">
+        <el-select v-model="queryParams.algorithmType" placeholder="请选择算法类型" clearable>
+          <el-option
+            v-for="dict in dict.type.sys_job_status"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:config:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:config:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:config:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:config:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="算法名称" align="center" prop="algorithmName" />
+      <el-table-column label="算法类型" align="center" prop="algorithmType">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_job_status" :value="scope.row.algorithmType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:config:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:config:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改算法配置对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="算法名称" prop="algorithmName">
+          <el-input v-model="form.algorithmName" placeholder="请输入算法名称" />
+        </el-form-item>
+        <el-form-item label="算法类型" prop="algorithmType">
+          <el-select v-model="form.algorithmType" placeholder="请选择算法类型">
+            <el-option
+              v-for="dict in dict.type.sys_job_status"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="算法参数" prop="algorithmParams">
+          <el-input v-model="form.algorithmParams" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listConfig, getConfig, delConfig, addConfig, updateConfig } from "@/api/biz/config";
+
+export default {
+  name: "Config",
+  dicts: ['sys_job_status'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 算法配置表格数据
+      configList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        algorithmName: null,
+        algorithmType: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询算法配置列表 */
+    getList() {
+      this.loading = true;
+      listConfig(this.queryParams).then(response => {
+        this.configList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        algorithmName: null,
+        algorithmType: null,
+        algorithmParams: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加算法配置";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getConfig(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改算法配置";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateConfig(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addConfig(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除算法配置编号为"' + ids + '"的数据项?').then(function() {
+        return delConfig(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/config/export', {
+        ...this.queryParams
+      }, `config_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 354 - 0
ips-ui/src/views/biz/distillation/index.vue

@@ -0,0 +1,354 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="算法名称" prop="taskName">
+        <el-input
+          v-model="queryParams.taskName"
+          placeholder="请输入算法名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="算法" prop="algorithmId">
+        <el-input
+          v-model="queryParams.algorithmId"
+          placeholder="请输入算法"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
+          <el-option
+            v-for="dict in dict.type.sys_show_hide"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="开始时间" prop="startTime">
+        <el-date-picker clearable
+          v-model="queryParams.startTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="结束时间" prop="endTime">
+        <el-date-picker clearable
+          v-model="queryParams.endTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:distillation:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:distillation:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:distillation:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:distillation:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="distillationList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="算法名称" align="center" prop="taskName" />
+      <el-table-column label="算法" align="center" prop="algorithmId" />
+      <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_show_hide" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="开始时间" align="center" prop="startTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结束时间" align="center" prop="endTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:distillation:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:distillation:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改知识蒸馏对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="算法名称" prop="taskName">
+          <el-input v-model="form.taskName" placeholder="请输入算法名称" />
+        </el-form-item>
+        <el-form-item label="算法" prop="algorithmId">
+          <el-input v-model="form.algorithmId" placeholder="请输入算法" />
+        </el-form-item>
+        <el-form-item label="输入路径" prop="inputPath">
+          <el-input v-model="form.inputPath" placeholder="请输入输入路径" />
+        </el-form-item>
+        <el-form-item label="输出路径" prop="outputPath">
+          <el-input v-model="form.outputPath" placeholder="请输入输出路径" />
+        </el-form-item>
+        <el-form-item label="算法参数" prop="algorithmParams">
+          <el-input v-model="form.algorithmParams" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in dict.type.sys_show_hide"
+              :key="dict.value"
+              :label="dict.value"
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="开始时间" prop="startTime">
+          <el-date-picker clearable
+            v-model="form.startTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择开始时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="结束时间" prop="endTime">
+          <el-date-picker clearable
+            v-model="form.endTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择结束时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listDistillation, getDistillation, delDistillation, addDistillation, updateDistillation } from "@/api/biz/distillation";
+
+export default {
+  name: "Distillation",
+  dicts: ['sys_show_hide'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 知识蒸馏表格数据
+      distillationList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        taskName: null,
+        algorithmId: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询知识蒸馏列表 */
+    getList() {
+      this.loading = true;
+      listDistillation(this.queryParams).then(response => {
+        this.distillationList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskName: null,
+        algorithmId: null,
+        inputPath: null,
+        outputPath: null,
+        algorithmParams: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加知识蒸馏";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getDistillation(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改知识蒸馏";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateDistillation(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addDistillation(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除知识蒸馏编号为"' + ids + '"的数据项?').then(function() {
+        return delDistillation(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/distillation/export', {
+        ...this.queryParams
+      }, `distillation_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 362 - 0
ips-ui/src/views/biz/features/index.vue

@@ -0,0 +1,362 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="算法名称" prop="taskName">
+        <el-input
+          v-model="queryParams.taskName"
+          placeholder="请输入算法名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="算法" prop="algorithmId">
+        <el-input
+          v-model="queryParams.algorithmId"
+          placeholder="请输入算法"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
+          <el-option
+            v-for="dict in dict.type.sys_show_hide"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="开始时间" prop="startTime">
+        <el-date-picker clearable
+          v-model="queryParams.startTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="结束时间" prop="endTime">
+        <el-date-picker clearable
+          v-model="queryParams.endTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="备注" prop="remark">
+        <el-input
+          v-model="queryParams.remark"
+          placeholder="请输入备注"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:features:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:features:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:features:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:features:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="featuresList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="算法名称" align="center" prop="taskName" />
+      <el-table-column label="算法" align="center" prop="algorithmId" />
+      <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_show_hide" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="开始时间" align="center" prop="startTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结束时间" align="center" prop="endTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:features:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:features:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改特征提取对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="算法名称" prop="taskName">
+          <el-input v-model="form.taskName" placeholder="请输入算法名称" />
+        </el-form-item>
+        <el-form-item label="算法" prop="algorithmId">
+          <el-input v-model="form.algorithmId" placeholder="请输入算法" />
+        </el-form-item>
+        <el-form-item label="输入路径" prop="inputPath">
+          <el-input v-model="form.inputPath" placeholder="请输入输入路径" />
+        </el-form-item>
+        <el-form-item label="输出路径" prop="outputPath">
+          <el-input v-model="form.outputPath" placeholder="请输入输出路径" />
+        </el-form-item>
+        <el-form-item label="算法参数" prop="algorithmParams">
+          <el-input v-model="form.algorithmParams" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in dict.type.sys_show_hide"
+              :key="dict.value"
+              :label="dict.value"
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="开始时间" prop="startTime">
+          <el-date-picker clearable
+            v-model="form.startTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择开始时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="结束时间" prop="endTime">
+          <el-date-picker clearable
+            v-model="form.endTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择结束时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listFeatures, getFeatures, delFeatures, addFeatures, updateFeatures } from "@/api/biz/features";
+
+export default {
+  name: "Features",
+  dicts: ['sys_show_hide'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 特征提取表格数据
+      featuresList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        taskName: null,
+        algorithmId: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询特征提取列表 */
+    getList() {
+      this.loading = true;
+      listFeatures(this.queryParams).then(response => {
+        this.featuresList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskName: null,
+        algorithmId: null,
+        inputPath: null,
+        outputPath: null,
+        algorithmParams: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加特征提取";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getFeatures(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改特征提取";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateFeatures(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addFeatures(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除特征提取编号为"' + ids + '"的数据项?').then(function() {
+        return delFeatures(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/features/export', {
+        ...this.queryParams
+      }, `features_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 354 - 0
ips-ui/src/views/biz/preprocessed/index.vue

@@ -0,0 +1,354 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="算法名称" prop="taskName">
+        <el-input
+          v-model="queryParams.taskName"
+          placeholder="请输入算法名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="算法" prop="algorithmId">
+        <el-input
+          v-model="queryParams.algorithmId"
+          placeholder="请输入算法"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
+          <el-option
+            v-for="dict in dict.type.sys_show_hide"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="开始时间" prop="startTime">
+        <el-date-picker clearable
+          v-model="queryParams.startTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="结束时间" prop="endTime">
+        <el-date-picker clearable
+          v-model="queryParams.endTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:preprocessed:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:preprocessed:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:preprocessed:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:preprocessed:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="preprocessedList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="算法名称" align="center" prop="taskName" />
+      <el-table-column label="算法" align="center" prop="algorithmId" />
+      <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_show_hide" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="开始时间" align="center" prop="startTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结束时间" align="center" prop="endTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:preprocessed:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:preprocessed:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改数据预处理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="算法名称" prop="taskName">
+          <el-input v-model="form.taskName" placeholder="请输入算法名称" />
+        </el-form-item>
+        <el-form-item label="算法" prop="algorithmId">
+          <el-input v-model="form.algorithmId" placeholder="请输入算法" />
+        </el-form-item>
+        <el-form-item label="输入路径" prop="inputPath">
+          <el-input v-model="form.inputPath" placeholder="请输入输入路径" />
+        </el-form-item>
+        <el-form-item label="输出路径" prop="outputPath">
+          <el-input v-model="form.outputPath" placeholder="请输入输出路径" />
+        </el-form-item>
+        <el-form-item label="算法参数" prop="algorithmParams">
+          <el-input v-model="form.algorithmParams" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in dict.type.sys_show_hide"
+              :key="dict.value"
+              :label="dict.value"
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="开始时间" prop="startTime">
+          <el-date-picker clearable
+            v-model="form.startTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择开始时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="结束时间" prop="endTime">
+          <el-date-picker clearable
+            v-model="form.endTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择结束时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listPreprocessed, getPreprocessed, delPreprocessed, addPreprocessed, updatePreprocessed } from "@/api/biz/preprocessed";
+
+export default {
+  name: "Preprocessed",
+  dicts: ['sys_show_hide'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 数据预处理表格数据
+      preprocessedList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        taskName: null,
+        algorithmId: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询数据预处理列表 */
+    getList() {
+      this.loading = true;
+      listPreprocessed(this.queryParams).then(response => {
+        this.preprocessedList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskName: null,
+        algorithmId: null,
+        inputPath: null,
+        outputPath: null,
+        algorithmParams: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加数据预处理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getPreprocessed(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改数据预处理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updatePreprocessed(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addPreprocessed(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除数据预处理编号为"' + ids + '"的数据项?').then(function() {
+        return delPreprocessed(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/preprocessed/export', {
+        ...this.queryParams
+      }, `preprocessed_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 354 - 0
ips-ui/src/views/biz/test/index.vue

@@ -0,0 +1,354 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="算法名称" prop="taskName">
+        <el-input
+          v-model="queryParams.taskName"
+          placeholder="请输入算法名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="算法" prop="algorithmId">
+        <el-input
+          v-model="queryParams.algorithmId"
+          placeholder="请输入算法"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
+          <el-option
+            v-for="dict in dict.type.sys_show_hide"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="开始时间" prop="startTime">
+        <el-date-picker clearable
+          v-model="queryParams.startTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="结束时间" prop="endTime">
+        <el-date-picker clearable
+          v-model="queryParams.endTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:test:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:test:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:test:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:test:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="testList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="算法名称" align="center" prop="taskName" />
+      <el-table-column label="算法" align="center" prop="algorithmId" />
+      <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_show_hide" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="开始时间" align="center" prop="startTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结束时间" align="center" prop="endTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:test:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:test:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改分类测试对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="算法名称" prop="taskName">
+          <el-input v-model="form.taskName" placeholder="请输入算法名称" />
+        </el-form-item>
+        <el-form-item label="算法" prop="algorithmId">
+          <el-input v-model="form.algorithmId" placeholder="请输入算法" />
+        </el-form-item>
+        <el-form-item label="输入路径" prop="inputPath">
+          <el-input v-model="form.inputPath" placeholder="请输入输入路径" />
+        </el-form-item>
+        <el-form-item label="输出路径" prop="outputPath">
+          <el-input v-model="form.outputPath" placeholder="请输入输出路径" />
+        </el-form-item>
+        <el-form-item label="算法参数" prop="algorithmParams">
+          <el-input v-model="form.algorithmParams" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in dict.type.sys_show_hide"
+              :key="dict.value"
+              :label="dict.value"
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="开始时间" prop="startTime">
+          <el-date-picker clearable
+            v-model="form.startTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择开始时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="结束时间" prop="endTime">
+          <el-date-picker clearable
+            v-model="form.endTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择结束时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listTest, getTest, delTest, addTest, updateTest } from "@/api/biz/test";
+
+export default {
+  name: "Test",
+  dicts: ['sys_show_hide'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 分类测试表格数据
+      testList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        taskName: null,
+        algorithmId: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询分类测试列表 */
+    getList() {
+      this.loading = true;
+      listTest(this.queryParams).then(response => {
+        this.testList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskName: null,
+        algorithmId: null,
+        inputPath: null,
+        outputPath: null,
+        algorithmParams: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加分类测试";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getTest(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改分类测试";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTest(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addTest(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除分类测试编号为"' + ids + '"的数据项?').then(function() {
+        return delTest(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/test/export', {
+        ...this.queryParams
+      }, `test_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 354 - 0
ips-ui/src/views/biz/training/index.vue

@@ -0,0 +1,354 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="算法名称" prop="taskName">
+        <el-input
+          v-model="queryParams.taskName"
+          placeholder="请输入算法名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="算法" prop="algorithmId">
+        <el-input
+          v-model="queryParams.algorithmId"
+          placeholder="请输入算法"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
+          <el-option
+            v-for="dict in dict.type.sys_show_hide"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="开始时间" prop="startTime">
+        <el-date-picker clearable
+          v-model="queryParams.startTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="结束时间" prop="endTime">
+        <el-date-picker clearable
+          v-model="queryParams.endTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['biz:training:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['biz:training:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['biz:training:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['biz:training:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="trainingList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编号" align="center" prop="id" />
+      <el-table-column label="算法名称" align="center" prop="taskName" />
+      <el-table-column label="算法" align="center" prop="algorithmId" />
+      <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.sys_show_hide" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="开始时间" align="center" prop="startTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结束时间" align="center" prop="endTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['biz:training:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['biz:training:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改模型训练对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="算法名称" prop="taskName">
+          <el-input v-model="form.taskName" placeholder="请输入算法名称" />
+        </el-form-item>
+        <el-form-item label="算法" prop="algorithmId">
+          <el-input v-model="form.algorithmId" placeholder="请输入算法" />
+        </el-form-item>
+        <el-form-item label="输入路径" prop="inputPath">
+          <el-input v-model="form.inputPath" placeholder="请输入输入路径" />
+        </el-form-item>
+        <el-form-item label="输出路径" prop="outputPath">
+          <el-input v-model="form.outputPath" placeholder="请输入输出路径" />
+        </el-form-item>
+        <el-form-item label="算法参数" prop="algorithmParams">
+          <el-input v-model="form.algorithmParams" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in dict.type.sys_show_hide"
+              :key="dict.value"
+              :label="dict.value"
+            >{{dict.label}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="开始时间" prop="startTime">
+          <el-date-picker clearable
+            v-model="form.startTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择开始时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="结束时间" prop="endTime">
+          <el-date-picker clearable
+            v-model="form.endTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择结束时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listTraining, getTraining, delTraining, addTraining, updateTraining } from "@/api/biz/training";
+
+export default {
+  name: "Training",
+  dicts: ['sys_show_hide'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 模型训练表格数据
+      trainingList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        taskName: null,
+        algorithmId: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询模型训练列表 */
+    getList() {
+      this.loading = true;
+      listTraining(this.queryParams).then(response => {
+        this.trainingList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskName: null,
+        algorithmId: null,
+        inputPath: null,
+        outputPath: null,
+        algorithmParams: null,
+        status: null,
+        startTime: null,
+        endTime: null,
+        remark: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加模型训练";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getTraining(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改模型训练";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateTraining(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addTraining(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除模型训练编号为"' + ids + '"的数据项?').then(function() {
+        return delTraining(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('biz/training/export', {
+        ...this.queryParams
+      }, `training_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>