Эх сурвалжийг харах

Merge branch 'dev-wgk' of www/als into master

OK
www 6 сар өмнө
parent
commit
dbcd9a3159
33 өөрчлөгдсөн 1118 нэмэгдсэн , 626 устгасан
  1. 0 1
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/AirConfigurationController.java
  2. 12 1
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/AlgorithmController.java
  3. 4 2
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/LifePredictionController.java
  4. 0 121
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/LifePredictionResultController.java
  5. 137 0
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/QaHistoryController.java
  6. 12 9
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/LifePrediction.java
  7. 73 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/QaHistory.java
  8. 5 7
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/AlgorithmBo.java
  9. 18 12
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/LifePredictionBo.java
  10. 0 65
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/LifePredictionResultBo.java
  11. 1 1
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/ModelBo.java
  12. 60 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/QaHistoryBo.java
  13. 0 94
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/LifePredictionResultVo.java
  14. 17 16
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/LifePredictionVo.java
  15. 76 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/QaHistoryImportVo.java
  16. 98 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/QaHistoryVo.java
  17. 128 0
      als-modules/agile-assurance/src/main/java/org/eco/als/listener/QaHistoryImportListener.java
  18. 0 16
      als-modules/agile-assurance/src/main/java/org/eco/als/mapper/LifePredictionResultMapper.java
  19. 16 0
      als-modules/agile-assurance/src/main/java/org/eco/als/mapper/QaHistoryMapper.java
  20. 1 0
      als-modules/agile-assurance/src/main/java/org/eco/als/service/IAlgorithmService.java
  21. 0 86
      als-modules/agile-assurance/src/main/java/org/eco/als/service/ILifePredictionResultService.java
  22. 1 1
      als-modules/agile-assurance/src/main/java/org/eco/als/service/ILifePredictionService.java
  23. 7 0
      als-modules/agile-assurance/src/main/java/org/eco/als/service/IModelService.java
  24. 97 0
      als-modules/agile-assurance/src/main/java/org/eco/als/service/IQaHistoryService.java
  25. 93 13
      als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/AlgorithmService.java
  26. 0 173
      als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/LifePredictionResultServiceImpl.java
  27. 8 8
      als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/LifePredictionServiceImpl.java
  28. 5 0
      als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/ModelServiceImpl.java
  29. 194 0
      als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/QaHistoryServiceImpl.java
  30. 7 0
      als-modules/agile-assurance/src/main/resources/mapper/als/QaHistoryMapper.xml
  31. 2 0
      als-start/src/main/resources/application-dev.yml
  32. 9 0
      als-start/src/main/resources/db/dm/V1_0_0_5__als-1212-ddl.sql
  33. 37 0
      als-start/src/main/resources/db/dm/V1_0_0_6__als-1213-ddl.sql

+ 0 - 1
als-modules/agile-assurance/src/main/java/org/eco/als/controller/AirConfigurationController.java

@@ -49,7 +49,6 @@ public class AirConfigurationController extends BaseController {
         return CommonResult.success(list);
     }
 
-    @SaCheckPermission("als:airConfiguration:import")
     @PostMapping("/importTemplate")
     public void importTemplate(HttpServletResponse response) {
         ExcelUtil.exportExcel(new ArrayList<>(), "飞机构型", AirConfigurationImportVo.class, response);

+ 12 - 1
als-modules/agile-assurance/src/main/java/org/eco/als/controller/AlgorithmController.java

@@ -59,13 +59,24 @@ public class AlgorithmController {
      * @param algorithmBo 入参
      * @return org.eco.common.core.core.domain.CommonResult<java.lang.String> 结果
      **/
-    @SaCheckPermission("als:algorithm:execute")
     @PostMapping("/execute/fault")
     public CommonResult<String> executeFault(@Validated @RequestBody AlgorithmBo algorithmBo) {
         String result = algorithmService.executeFault(algorithmBo);
         return StrUtil.isBlank(result) ? CommonResult.fail() : CommonResult.success(result, "");
     }
 
+    /**
+     * 退化评估
+     *
+     * @param algorithmBo 入参
+     * @return org.eco.common.core.core.domain.CommonResult<java.lang.String> 结果
+     **/
+    @PostMapping("/execute/evaluation")
+    public CommonResult<String> executeEvaluation(@Validated @RequestBody AlgorithmBo algorithmBo) {
+        String result = algorithmService.executeEvaluation(algorithmBo);
+        return StrUtil.isBlank(result) ? CommonResult.fail() : CommonResult.success(result, "");
+    }
+
     /**
      * 执行任务管理
      *

+ 4 - 2
als-modules/agile-assurance/src/main/java/org/eco/als/controller/LifePredictionController.java

@@ -2,8 +2,10 @@ package org.eco.als.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
+import org.eco.als.domain.LifePrediction;
 import org.eco.als.domain.bo.LifePredictionBo;
 import org.eco.als.domain.vo.LifePredictionVo;
 import org.eco.als.service.ILifePredictionService;
@@ -83,8 +85,8 @@ public class LifePredictionController extends BaseController {
     @RepeatSubmit()
     @PostMapping
     public CommonResult<Void> add(@Validated @RequestBody LifePredictionBo lifePredictionBo) {
-        boolean inserted = lifePredictionService.insert(lifePredictionBo);
-        if (!inserted) {
+        LifePrediction lifePrediction = lifePredictionService.insert(lifePredictionBo);
+        if (ObjectUtil.isNull(lifePrediction)) {
             return CommonResult.fail("新增寿命预测记录失败!");
         }
         return CommonResult.success();

+ 0 - 121
als-modules/agile-assurance/src/main/java/org/eco/als/controller/LifePredictionResultController.java

@@ -1,121 +0,0 @@
-package org.eco.als.controller;
-
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.hutool.core.collection.CollUtil;
-import jakarta.annotation.Resource;
-import lombok.RequiredArgsConstructor;
-import org.eco.als.domain.bo.LifePredictionResultBo;
-import org.eco.als.domain.vo.LifePredictionResultVo;
-import org.eco.als.service.ILifePredictionResultService;
-import org.eco.common.core.core.domain.CommonResult;
-import org.eco.common.core.core.domain.model.LoginUser;
-import org.eco.common.core.core.page.PageResult;
-import org.eco.common.log.annotation.Log;
-import org.eco.common.log.enums.BusinessType;
-import org.eco.common.security.utils.LoginHelper;
-import org.eco.common.web.annotation.RepeatSubmit;
-import org.eco.common.web.core.BaseController;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * 寿命预测结果Controller
- *
- * @author wgk
- * @date 2024-07-26
- */
-@Validated
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/als/lifePredictionResult")
-public class LifePredictionResultController extends BaseController {
-    @Resource
-    private ILifePredictionResultService lifePredictionResultService;
-
-    /**
-     * 查询寿命预测结果列表
-     */
-    @SaCheckPermission("als:lifePredictionResult:list")
-    @GetMapping("/list")
-    public CommonResult<PageResult<LifePredictionResultVo>> list(LifePredictionResultBo lifePredictionResultBo) {
-        return CommonResult.success(lifePredictionResultService.selectPage(lifePredictionResultBo));
-    }
-
-    /**
-     * 导出寿命预测结果列表
-     */
-    @SaCheckPermission("als:lifePredictionResult:export")
-    @Log(title = "寿命预测结果", businessType = BusinessType.EXPORT)
-    @PostMapping("/export")
-    public CommonResult<Void> export(LifePredictionResultBo lifePredictionResultBo) {
-        LoginUser loginUser = LoginHelper.getLoginUser();
-        List<LifePredictionResultVo> list = lifePredictionResultService.selectList(lifePredictionResultBo);
-        if (CollUtil.isEmpty(list)) {
-            return CommonResult.fail("导出列表为空");
-        }
-        lifePredictionResultService.asyncExport(list, "寿命预测结果", loginUser);
-        return CommonResult.success();
-    }
-
-    /**
-     * 获取寿命预测结果详细信息
-     */
-    @SaCheckPermission("als:lifePredictionResult:query")
-    @GetMapping(value = "/{id}")
-    public CommonResult<LifePredictionResultVo> getInfo(@PathVariable Long id) {
-        return CommonResult.success(lifePredictionResultService.selectById(id));
-    }
-
-    /**
-     * 新增寿命预测结果
-     */
-    @SaCheckPermission("als:lifePredictionResult:add")
-    @Log(title = "寿命预测结果", businessType = BusinessType.INSERT)
-    @RepeatSubmit()
-    @PostMapping
-    public CommonResult<Void> add(@Validated @RequestBody LifePredictionResultBo lifePredictionResultBo) {
-        boolean inserted = lifePredictionResultService.insert(lifePredictionResultBo);
-        if (!inserted) {
-            return CommonResult.fail("新增寿命预测结果记录失败!");
-        }
-        return CommonResult.success();
-    }
-
-    /**
-     * 修改寿命预测结果
-     */
-    @SaCheckPermission("als:lifePredictionResult:edit")
-    @Log(title = "寿命预测结果", businessType = BusinessType.UPDATE)
-    @RepeatSubmit()
-    @PutMapping
-    public CommonResult<Void> edit(@Validated @RequestBody LifePredictionResultBo lifePredictionResultBo) {
-        boolean updated = lifePredictionResultService.update(lifePredictionResultBo);
-        if (!updated) {
-            return CommonResult.fail("修改寿命预测结果记录失败!");
-        }
-        return CommonResult.success();
-    }
-
-    /**
-     * 删除寿命预测结果
-     */
-    @SaCheckPermission("als:lifePredictionResult:remove")
-    @Log(title = "寿命预测结果", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{ids}")
-    public CommonResult<Void> remove(@PathVariable Long[] ids) {
-        boolean deleted = lifePredictionResultService.deleteByIds(ids);
-        if (!deleted) {
-            return CommonResult.fail("删除寿命预测结果记录失败!");
-        }
-        return CommonResult.success();
-    }
-}

+ 137 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/controller/QaHistoryController.java

@@ -0,0 +1,137 @@
+package org.eco.als.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.collection.CollUtil;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.eco.als.domain.bo.QaHistoryBo;
+import org.eco.als.domain.vo.QaHistoryImportVo;
+import org.eco.als.domain.vo.QaHistoryVo;
+import org.eco.als.service.IQaHistoryService;
+import org.eco.common.core.core.domain.CommonResult;
+import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.common.core.core.page.PageResult;
+import org.eco.common.excel.utils.ExcelUtil;
+import org.eco.common.log.annotation.Log;
+import org.eco.common.log.enums.BusinessType;
+import org.eco.common.security.utils.LoginHelper;
+import org.eco.common.web.annotation.RepeatSubmit;
+import org.eco.common.web.core.BaseController;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 问答历史记录Controller
+ *
+ * @author wgk
+ * @date 2024-12-13
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/als/qaHistory")
+public class QaHistoryController extends BaseController {
+    @Resource
+    private IQaHistoryService qaHistoryService;
+
+    /**
+     * 查询问答历史记录列表
+     */
+    @SaCheckPermission("als:qaHistory:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<QaHistoryVo>> list(QaHistoryBo qaHistoryBo) {
+        return CommonResult.success(qaHistoryService.selectPage(qaHistoryBo));
+    }
+
+    /**
+     * 导出问答历史记录列表
+     */
+    @SaCheckPermission("als:qaHistory:export")
+    @Log(title = "问答历史记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public CommonResult<Void> export(QaHistoryBo qaHistoryBo) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        List<QaHistoryVo> list = qaHistoryService.selectList(qaHistoryBo);
+        if (CollUtil.isEmpty(list)) {
+            return CommonResult.fail("导出列表为空");
+        }
+        qaHistoryService.asyncExport(list, "问答历史记录", loginUser);
+        return CommonResult.success();
+    }
+
+    @SaCheckPermission("als:qaHistory:import")
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response) {
+        ExcelUtil.exportExcel(new ArrayList<>(), "问答历史记录", QaHistoryImportVo.class, response);
+    }
+
+    /**
+     * 导入问答历史记录列表
+     */
+    @Log(title = "问答历史记录", businessType = BusinessType.IMPORT)
+    @SaCheckPermission("als:qaHistory:import")
+    @PostMapping("/importData")
+    public CommonResult<Void> importData(MultipartFile file, boolean updateSupport) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        qaHistoryService.asyncImportData(file, updateSupport, loginUser);
+        return CommonResult.success();
+    }
+
+    /**
+     * 获取问答历史记录详细信息
+     */
+    @SaCheckPermission("als:qaHistory:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<QaHistoryVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(qaHistoryService.selectById(id));
+    }
+
+    /**
+     * 新增问答历史记录
+     */
+    @SaCheckPermission("als:qaHistory:add")
+    @Log(title = "问答历史记录", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody QaHistoryBo qaHistoryBo) {
+        boolean inserted = qaHistoryService.insert(qaHistoryBo);
+        if (!inserted) {
+            return CommonResult.fail("新增问答历史记录记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改问答历史记录
+     */
+    @SaCheckPermission("als:qaHistory:edit")
+    @Log(title = "问答历史记录", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody QaHistoryBo qaHistoryBo) {
+        boolean updated = qaHistoryService.update(qaHistoryBo);
+        if (!updated) {
+            return CommonResult.fail("修改问答历史记录记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除问答历史记录
+     */
+    @SaCheckPermission("als:qaHistory:remove")
+    @Log(title = "问答历史记录", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = qaHistoryService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除问答历史记录记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

+ 12 - 9
als-modules/agile-assurance/src/main/java/org/eco/als/domain/LifePrediction.java

@@ -32,6 +32,14 @@ public class LifePrediction extends BaseEntity {
      * 机号
      */
     private String aircraftId;
+    /**
+     * 机型
+     */
+    private String aircraftType;
+    /**
+     * 编号
+     */
+    private String code;
     /**
      * 部件名称
      */
@@ -42,25 +50,20 @@ public class LifePrediction extends BaseEntity {
      */
     private String model;
 
-    /**
-     * 所属系统
-     */
-    private String system;
-
     /**
      * 处理方式
      */
     private String methodType;
 
     /**
-     * 剩余时长(h
+     * 状态(1正常
      */
-    private String remainTiem;
+    private String status;
 
     /**
-     * 状态(1正常)
+     * 结果
      */
-    private String status;
+    private String resultContent;
 
     /**
      * 删除标识(1删除 0未删除)

+ 73 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/domain/QaHistory.java

@@ -0,0 +1,73 @@
+package org.eco.als.domain;
+
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.eco.common.orm.core.domain.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 问答历史记录对象 als_qa_history_t
+ *
+ * @author wgk
+ * @date 2024-12-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "als_qa_history_t")
+public class QaHistory extends BaseEntity {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一ID
+     */
+    @Id
+    private Long id;
+
+    /**
+     * 当前用户
+     */
+    private String userId;
+
+    /**
+     * 问题
+     */
+    private String question;
+
+    /**
+     * 回答
+     */
+    private String answer;
+
+    /**
+     *图谱相关
+     */
+    private String graph;
+
+    /**
+     * 文件ID
+     */
+    private Long ossId;
+
+    /**
+     * 文件名称
+     */
+    private String fileName;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+    /**
+     * 删除标识(1删除 0未删除)
+     */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+
+}

+ 5 - 7
als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/AlgorithmBo.java

@@ -1,7 +1,5 @@
 package org.eco.als.domain.bo;
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.eco.common.orm.core.domain.BaseEntity;
@@ -20,7 +18,6 @@ public class AlgorithmBo extends BaseEntity {
     /**
      * 模型Id
      */
-    @NotNull(message = "模型Id不能为空")
     private Long modelId;
 
     /**
@@ -31,19 +28,16 @@ public class AlgorithmBo extends BaseEntity {
     /**
      * 数据Id
      */
-    @NotNull(message = "数据Id不能为空")
     private Long ossId;
 
     /**
      * 机号Id
      */
-    @NotNull(message = "机号Id不能为空")
     private String aircraftId;
 
     /**
      * 架次号
      */
-    @NotBlank(message = "架次号不能为空")
     private String sortieNo;
 
     /**
@@ -51,10 +45,14 @@ public class AlgorithmBo extends BaseEntity {
      */
     private String param;
 
+    /**
+     * 部件Id
+     */
+    private String partId;
+
     /**
      * 数据列
      */
-    @NotNull(message = "数据列不能为空")
     private String[] columnData;
 
     /**

+ 18 - 12
als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/LifePredictionBo.java

@@ -1,8 +1,7 @@
 package org.eco.als.domain.bo;
 
 import io.github.linpeilie.annotations.AutoMapper;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
+import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.eco.als.domain.LifePrediction;
@@ -14,6 +13,7 @@ import org.eco.common.orm.core.domain.BaseEntity;
  * @author wgk
  * @date 2024-07-26
  */
+@Builder
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = LifePrediction.class, reverseConvertGenerate = false)
@@ -26,35 +26,41 @@ public class LifePredictionBo extends BaseEntity {
     /**
      * 机号Id
      */
-    @NotNull(message = "机号不能为空")
     private String aircraftId;
 
+    /**
+     * 机型
+     */
+    private String aircraftType;
+
+    /**
+     * 编码
+     */
+    private String code;
+
     /**
      * 部件名称
      */
-    @NotBlank(message = "部件名称不能为空")
     private String name;
 
     /**
      * 型号
      */
-    @NotBlank(message = "型号不能为空")
     private String model;
 
-    /**
-     * 所属系统
-     */
-    private String system;
-
     /**
      * 处理方式
      */
     private String methodType;
+    /**
+     * 状态
+     */
+    private String status;
 
     /**
-     * 剩余时长(h)
+     * 结果
      */
-    private String remainTiem;
+    private String resultContent;
 
 
 }

+ 0 - 65
als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/LifePredictionResultBo.java

@@ -1,65 +0,0 @@
-package org.eco.als.domain.bo;
-
-import io.github.linpeilie.annotations.AutoMapper;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.eco.als.domain.LifePredictionResult;
-import org.eco.common.orm.core.domain.BaseEntity;
-
-/**
- * 寿命预测结果业务对象 als_life_prediction_result_t
- *
- * @author wgk
- * @date 2024-07-26
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@AutoMapper(target = LifePredictionResult.class, reverseConvertGenerate = false)
-public class LifePredictionResultBo extends BaseEntity {
-    /**
-     * 编号
-     */
-    private Long id;
-
-    /**
-     * 寿命预测编号
-     */
-    @NotNull(message = "寿命预测编号不能为空")
-    private Long lifeId;
-
-    /**
-     * 机号Id
-     */
-    @NotNull(message = "机号不能为空")
-    private String aircraftId;
-
-    /**
-     * 部件名称
-     */
-    @NotBlank(message = "部件名称不能为空")
-    private String name;
-
-    /**
-     * 型号
-     */
-    private String model;
-
-    /**
-     * 所属系统
-     */
-    private String system;
-
-    /**
-     * 处理方式
-     */
-    private String methodType;
-
-    /**
-     * 剩余时长(h)
-     */
-    private String remainTiem;
-
-
-}

+ 1 - 1
als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/ModelBo.java

@@ -46,7 +46,7 @@ public class ModelBo extends BaseEntity {
     private String param;
 
     /**
-     * 参数
+     * 部件Id
      */
     private String partId;
 

+ 60 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/QaHistoryBo.java

@@ -0,0 +1,60 @@
+package org.eco.als.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.eco.als.domain.QaHistory;
+import org.eco.common.orm.core.domain.BaseEntity;
+
+/**
+ * 问答历史记录业务对象 als_qa_history_t
+ *
+ * @author wgk
+ * @date 2024-12-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = QaHistory.class, reverseConvertGenerate = false)
+public class QaHistoryBo extends BaseEntity {
+    /**
+     * 唯一ID
+     */
+    private Long id;
+
+    /**
+     * 当前用户
+     */
+    private String userId;
+
+    /**
+     * 问题
+     */
+    private String question;
+
+    /**
+     * 回答
+     */
+    private String answer;
+
+    /**
+     *图谱相关
+     */
+    private String graph;
+
+    /**
+     * 文件ID
+     */
+    private Long ossId;
+
+    /**
+     * 文件名称
+     */
+    private String fileName;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+
+}

+ 0 - 94
als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/LifePredictionResultVo.java

@@ -1,94 +0,0 @@
-package org.eco.als.domain.vo;
-
-import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
-import com.alibaba.excel.annotation.ExcelProperty;
-import io.github.linpeilie.annotations.AutoMapper;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.eco.als.domain.LifePredictionResult;
-import org.eco.common.excel.annotation.ExcelDictFormat;
-import org.eco.common.excel.convert.ExcelDictConvert;
-import org.eco.common.orm.core.domain.BaseEntity;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 寿命预测结果视图对象 als_life_prediction_result_t
- *
- * @author wgk
- * @date 2024-07-26
- */
-@Data
-@ExcelIgnoreUnannotated
-@EqualsAndHashCode(callSuper = true)
-@AutoMapper(target = LifePredictionResult.class)
-public class LifePredictionResultVo extends BaseEntity implements Serializable {
-
-    @Serial
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 编号
-     */
-    @ExcelProperty(value = "编号")
-    private Long id;
-
-    /**
-     * 寿命预测编号
-     */
-    @ExcelProperty(value = "寿命预测编号")
-    private Long lifeId;
-
-    /**
-     * 机号Id
-     */
-    private String aircraftId;
-
-
-    /**
-     * 部件名称
-     */
-    @ExcelProperty(value = "部件名称")
-    private String name;
-
-    /**
-     * 型号
-     */
-    @ExcelProperty(value = "型号")
-    private String model;
-
-    /**
-     * 所属系统
-     */
-    @ExcelProperty(value = "所属系统")
-    private String system;
-
-    /**
-     * 处理方式
-     */
-    @ExcelProperty(value = "处理方式", converter = ExcelDictConvert.class)
-    @ExcelDictFormat(dictType = "common_type")
-    private String methodType;
-
-    /**
-     * 剩余时长(h)
-     */
-    @ExcelProperty(value = "剩余时长", converter = ExcelDictConvert.class)
-    @ExcelDictFormat(readConverterExp = "h=")
-    private String remainTiem;
-
-    /**
-     * 状态(1正常)
-     */
-    @ExcelProperty(value = "状态(1正常)")
-    private String status;
-
-    /**
-     * 删除标识(1删除 0未删除)
-     */
-    @ExcelProperty(value = "删除标识(1删除 0未删除)")
-    private Integer delFlag;
-
-
-}

+ 17 - 16
als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/LifePredictionVo.java

@@ -6,8 +6,6 @@ import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.eco.als.domain.LifePrediction;
-import org.eco.common.excel.annotation.ExcelDictFormat;
-import org.eco.common.excel.convert.ExcelDictConvert;
 import org.eco.common.orm.core.domain.BaseEntity;
 
 import java.io.Serial;
@@ -39,6 +37,16 @@ public class LifePredictionVo extends BaseEntity implements Serializable {
      */
     private String aircraftId;
 
+    /**
+     * 机型
+     */
+    private String aircraftType;
+    /**
+     * 编号
+     */
+    @ExcelProperty(value = "部件编号")
+    private String code;
+
 
     /**
      * 部件名称
@@ -52,32 +60,25 @@ public class LifePredictionVo extends BaseEntity implements Serializable {
     @ExcelProperty(value = "型号")
     private String model;
 
-    /**
-     * 所属系统
-     */
-    @ExcelProperty(value = "所属系统")
-    private String system;
 
     /**
      * 处理方式
      */
-    @ExcelProperty(value = "处理方式", converter = ExcelDictConvert.class)
-    @ExcelDictFormat(dictType = "common_type")
+    @ExcelProperty(value = "处理方式")
     private String methodType;
 
-    /**
-     * 剩余时长(h)
-     */
-    @ExcelProperty(value = "剩余时长", converter = ExcelDictConvert.class)
-    @ExcelDictFormat(readConverterExp = "h=")
-    private String remainTiem;
-
     /**
      * 状态(1正常)
      */
     @ExcelProperty(value = "状态(1正常)")
     private String status;
 
+    /**
+     * 结果
+     */
+    @ExcelProperty(value = "结果")
+    private String resultContent;
+
     /**
      * 删除标识(1删除 0未删除)
      */

+ 76 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/QaHistoryImportVo.java

@@ -0,0 +1,76 @@
+package org.eco.als.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 问答历史记录导入视图对象 als_qa_history_t
+ *
+ * @author wgk
+ * @date 2024-12-13
+ */
+
+@Data
+@NoArgsConstructor
+@ExcelIgnoreUnannotated
+public class QaHistoryImportVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 当前用户
+     */
+    @ExcelProperty(value = "当前用户")
+    private String userId;
+
+    /**
+     * 问题
+     */
+    @ExcelProperty(value = "问题")
+    private String question;
+
+    /**
+     * 回答
+     */
+    @ExcelProperty(value = "回答")
+    private String answer;
+
+    /**
+     *图谱相关
+     */
+    @ExcelProperty(value = "图谱相关")
+    private String graph;
+
+    /**
+     * 文件ID
+     */
+    @ExcelProperty(value = "文件ID")
+    private Long ossId;
+
+    /**
+     * 文件名称
+     */
+    @ExcelProperty(value = "文件名称")
+    private String fileName;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /**
+     * 删除标识(1删除 0未删除)
+     */
+    @ExcelProperty(value = "删除标识(1删除 0未删除)")
+    private Integer delFlag;
+
+
+}

+ 98 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/QaHistoryVo.java

@@ -0,0 +1,98 @@
+package org.eco.als.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.eco.common.mapper.annotation.FieldMapper;
+import com.eco.common.mapper.constant.MapperConstant;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.eco.als.domain.QaHistory;
+import org.eco.common.orm.core.domain.BaseEntity;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 问答历史记录视图对象 als_qa_history_t
+ *
+ * @author wgk
+ * @date 2024-12-13
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = QaHistory.class)
+public class QaHistoryVo extends BaseEntity implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一ID
+     */
+    @ExcelProperty(value = "唯一ID")
+    private Long id;
+
+    /**
+     * 当前用户
+     */
+    @ExcelProperty(value = "当前用户")
+    private String userId;
+
+    /**
+     * 问题
+     */
+    @ExcelProperty(value = "问题")
+    private String question;
+
+    /**
+     * 回答
+     */
+    @ExcelProperty(value = "回答")
+    private String answer;
+
+    /**
+     *图谱相关
+     */
+    @ExcelProperty(value = "图谱相关")
+    private String graph;
+
+    /**
+     * 文件ID
+     */
+    @ExcelProperty(value = "文件ID")
+    private Long ossId;
+
+    /**
+     * 文件名称
+     */
+    @ExcelProperty(value = "文件名称")
+    private String fileName;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /**
+     * 删除标识(1删除 0未删除)
+     */
+    @ExcelProperty(value = "删除标识(1删除 0未删除)")
+    private Integer delFlag;
+
+
+    /**
+     * 创建人名称
+     */
+    @FieldMapper(type = MapperConstant.USER_ID_TO_NAME, mapper = "createBy")
+    private String createByName;
+
+    /**
+     * 创建人名称
+     */
+    @FieldMapper(type = MapperConstant.USER_ID_TO_NAME, mapper = "updateBy")
+    private String updateByName;
+
+}

+ 128 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/listener/QaHistoryImportListener.java

@@ -0,0 +1,128 @@
+package org.eco.als.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import lombok.extern.slf4j.Slf4j;
+import org.eco.als.domain.bo.QaHistoryBo;
+import org.eco.als.domain.vo.QaHistoryImportVo;
+import org.eco.als.domain.vo.QaHistoryVo;
+import org.eco.als.service.IQaHistoryService;
+import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.common.core.utils.SpringUtils;
+import org.eco.common.core.utils.ValidatorUtils;
+import org.eco.common.excel.core.ExcelListener;
+import org.eco.common.excel.core.ExcelResult;
+import org.eco.common.excel.entity.ExcelResultRes;
+
+import java.util.List;
+
+/**
+ * 问答历史记录自定义导入
+ *
+ * @author wgk
+ */
+@Slf4j
+public class QaHistoryImportListener extends AnalysisEventListener<QaHistoryImportVo> implements ExcelListener<QaHistoryImportVo> {
+    private final IQaHistoryService qaHistoryService;
+
+    private final Boolean isUpdateSupport;
+    private final LoginUser loginUser;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public QaHistoryImportListener(Boolean isUpdateSupport, LoginUser loginUser) {
+        this.qaHistoryService = SpringUtils.getBean(IQaHistoryService.class);
+        this.isUpdateSupport = isUpdateSupport;
+        this.loginUser = loginUser;
+    }
+
+    @Override
+    public void invoke(QaHistoryImportVo qaHistoryVo, AnalysisContext context) {
+        try {
+
+            QaHistoryBo qaHistoryBo = BeanUtil.toBean(qaHistoryVo, QaHistoryBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            QaHistoryVo qaHistoryVo1 = null;
+
+            //qaHistoryVo1 = qaHistoryService.selectBySomefield(qaHistoryVo.getSomefield());
+            if (ObjectUtil.isNull(qaHistoryVo1)) {
+                //不存在就新增
+                setBo(qaHistoryBo);
+                ValidatorUtils.validate(qaHistoryBo);
+                boolean inserted = qaHistoryService.insert(qaHistoryBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、问答历史记录 记录导入成功");
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、问答历史记录 记录导入失败");
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                qaHistoryBo.setId(qaHistoryVo1.getId());//主键
+                qaHistoryBo.setVersion(qaHistoryVo1.getVersion());
+                boolean updated = qaHistoryService.update(qaHistoryBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、问答历史记录 记录更新成功");
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、问答历史记录 记录更新失败");
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、问答历史记录 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    private void setBo(QaHistoryBo qaHistoryBo) {
+        qaHistoryBo.setVersion(0);
+        qaHistoryBo.setCreateBy(loginUser.getUserId());
+        qaHistoryBo.setUpdateBy(loginUser.getUserId());
+        qaHistoryBo.setTenantId(loginUser.getTenantId());
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        log.info("解析完成");
+    }
+
+    @Override
+    public ExcelResult<QaHistoryImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public ExcelResultRes getAnalysis() {
+                if (failureNum > 0 && successNum == 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    return ExcelResultRes.builder().logInfo(failureMsg.toString()).status("0").build();
+                } else if (failureNum > 0 && successNum > 0) {
+                    failureMsg.insert(0, "很抱歉,部分导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    return ExcelResultRes.builder().logInfo(failureMsg.toString()).status("2").build();
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                    return ExcelResultRes.builder().logInfo(successMsg.toString()).status("1").build();
+                }
+            }
+
+            @Override
+            public List<QaHistoryImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 0 - 16
als-modules/agile-assurance/src/main/java/org/eco/als/mapper/LifePredictionResultMapper.java

@@ -1,16 +0,0 @@
-package org.eco.als.mapper;
-
-import com.mybatisflex.core.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.eco.als.domain.LifePredictionResult;
-
-/**
- * 寿命预测结果Mapper接口
- *
- * @author wgk
- * @date 2024-07-26
- */
-@Mapper
-public interface LifePredictionResultMapper extends BaseMapper<LifePredictionResult> {
-
-}

+ 16 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/mapper/QaHistoryMapper.java

@@ -0,0 +1,16 @@
+package org.eco.als.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.eco.als.domain.QaHistory;
+
+/**
+ * 问答历史记录Mapper接口
+ *
+ * @author wgk
+ * @date 2024-12-13
+ */
+@Mapper
+public interface QaHistoryMapper extends BaseMapper<QaHistory> {
+
+}

+ 1 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/service/IAlgorithmService.java

@@ -17,6 +17,7 @@ public interface IAlgorithmService {
     String executeFalseAlarm(AlgorithmBo algorithmBo);
 
     String executeFault(AlgorithmBo algorithmBo);
+    String executeEvaluation(AlgorithmBo algorithmBo);
 
     String batchExecute(TaskBo taskBo);
 

+ 0 - 86
als-modules/agile-assurance/src/main/java/org/eco/als/service/ILifePredictionResultService.java

@@ -1,86 +0,0 @@
-package org.eco.als.service;
-
-import org.eco.als.domain.LifePredictionResult;
-import org.eco.als.domain.bo.LifePredictionResultBo;
-import org.eco.als.domain.vo.LifePredictionResultVo;
-import org.eco.common.core.core.domain.model.LoginUser;
-import org.eco.common.core.core.page.PageResult;
-import org.eco.common.orm.core.service.IBaseService;
-import org.springframework.scheduling.annotation.Async;
-
-import java.util.List;
-
-/**
- * 寿命预测结果Service接口
- *
- * @author wgk
- * @date 2024-07-26
- */
-public interface ILifePredictionResultService extends IBaseService<LifePredictionResult> {
-    /**
-     * 查询寿命预测结果
-     *
-     * @param id 寿命预测结果主键
-     * @return 寿命预测结果
-     */
-    LifePredictionResultVo selectById(Long id);
-
-    /**
-     * 查询寿命预测结果列表
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 寿命预测结果集合
-     */
-    List<LifePredictionResultVo> selectList(LifePredictionResultBo lifePredictionResultBo);
-
-    /**
-     * 分页查询寿命预测结果列表
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 分页寿命预测结果集合
-     */
-    PageResult<LifePredictionResultVo> selectPage(LifePredictionResultBo lifePredictionResultBo);
-
-    /**
-     * 新增寿命预测结果
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 结果:true 操作成功,false 操作失败
-     */
-    boolean insert(LifePredictionResultBo lifePredictionResultBo);
-
-    /**
-     * 新增寿命预测结果,前台提供主键值,一般用于导入的场合
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 结果:true 操作成功,false 操作失败
-     */
-    boolean insertWithPk(LifePredictionResultBo lifePredictionResultBo);
-
-    /**
-     * 修改寿命预测结果
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 结果:true 更新成功,false 更新失败
-     */
-    boolean update(LifePredictionResultBo lifePredictionResultBo);
-
-    /**
-     * 批量删除寿命预测结果
-     *
-     * @param ids 需要删除的寿命预测结果主键集合
-     * @return 结果:true 删除成功,false 删除失败
-     */
-    boolean deleteByIds(Long[] ids);
-
-    /**
-     * asyncExport 异步导出
-     *
-     * @param listVo    数据列表
-     * @param sheetName 文件名称
-     * @param user      上下文
-     */
-    @Async
-    void asyncExport(List<LifePredictionResultVo> listVo, String sheetName, LoginUser user);
-
-}

+ 1 - 1
als-modules/agile-assurance/src/main/java/org/eco/als/service/ILifePredictionService.java

@@ -47,7 +47,7 @@ public interface ILifePredictionService extends IBaseService<LifePrediction> {
      * @param lifePredictionBo 寿命预测Bo
      * @return 结果:true 操作成功,false 操作失败
      */
-    boolean insert(LifePredictionBo lifePredictionBo);
+    LifePrediction insert(LifePredictionBo lifePredictionBo);
 
     /**
      * 新增寿命预测,前台提供主键值,一般用于导入的场合

+ 7 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/service/IModelService.java

@@ -25,6 +25,13 @@ public interface IModelService extends IBaseService<Model> {
      * @return 模型信息
      */
     ModelVo selectById(Long id);
+    /**
+     * 查询模型信息
+     *
+     * @param partId 部件
+     * @return 模型信息
+     */
+    ModelVo selectByPartId(String partId);
 
     /**
      * 查询模型信息列表

+ 97 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/service/IQaHistoryService.java

@@ -0,0 +1,97 @@
+package org.eco.als.service;
+
+import org.eco.als.domain.QaHistory;
+import org.eco.als.domain.bo.QaHistoryBo;
+import org.eco.als.domain.vo.QaHistoryVo;
+import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.common.core.core.page.PageResult;
+import org.eco.common.orm.core.service.IBaseService;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 问答历史记录Service接口
+ *
+ * @author wgk
+ * @date 2024-12-13
+ */
+public interface IQaHistoryService extends IBaseService<QaHistory> {
+    /**
+     * 查询问答历史记录
+     *
+     * @param id 问答历史记录主键
+     * @return 问答历史记录
+     */
+    QaHistoryVo selectById(Long id);
+
+    /**
+     * 查询问答历史记录列表
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 问答历史记录集合
+     */
+    List<QaHistoryVo> selectList(QaHistoryBo qaHistoryBo);
+
+    /**
+     * 分页查询问答历史记录列表
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 分页问答历史记录集合
+     */
+    PageResult<QaHistoryVo> selectPage(QaHistoryBo qaHistoryBo);
+
+    /**
+     * 新增问答历史记录
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean insert(QaHistoryBo qaHistoryBo);
+
+    /**
+     * 新增问答历史记录,前台提供主键值,一般用于导入的场合
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean insertWithPk(QaHistoryBo qaHistoryBo);
+
+    /**
+     * 修改问答历史记录
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    boolean update(QaHistoryBo qaHistoryBo);
+
+    /**
+     * 批量删除问答历史记录
+     *
+     * @param ids 需要删除的问答历史记录主键集合
+     * @return 结果:true 删除成功,false 删除失败
+     */
+    boolean deleteByIds(Long[] ids);
+
+    /**
+     * 异步导入
+     *
+     * @param file          导入的文件
+     * @param updateSupport 是否覆盖
+     * @param user          用户上下文信息
+     */
+    @Async
+    void asyncImportData(MultipartFile file, boolean updateSupport, LoginUser user);
+
+    /**
+     * asyncExport 异步导出
+     *
+     * @param listVo    数据列表
+     * @param sheetName 文件名称
+     * @param user      上下文
+     */
+    @Async
+    void asyncExport(List<QaHistoryVo> listVo, String sheetName, LoginUser user);
+
+}

+ 93 - 13
als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/AlgorithmService.java

@@ -8,11 +8,10 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
-import org.eco.als.domain.FalseAlarm;
-import org.eco.als.domain.FaultDiagnosis;
-import org.eco.als.domain.PreProcessing;
-import org.eco.als.domain.Warning;
+import org.eco.als.domain.*;
 import org.eco.als.domain.bo.*;
+import org.eco.als.domain.vo.AirConfigurationVo;
+import org.eco.als.domain.vo.DataImportVo;
 import org.eco.als.domain.vo.ModelHttpVo;
 import org.eco.als.domain.vo.ModelVo;
 import org.eco.als.service.*;
@@ -25,14 +24,12 @@ import org.eco.common.core.utils.StringUtils;
 import org.eco.common.core.utils.file.FileUtils;
 import org.eco.system.domain.vo.SysOssVo;
 import org.eco.system.service.ISysOssService;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.File;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @Description: AlgorithmService
@@ -64,9 +61,20 @@ public class AlgorithmService implements IAlgorithmService {
     private IFaultDiagnosisService faultDiagnosisService;
     @Resource
     private IFaultDiagnosisResultService faultDiagnosisResultService;
+    @Resource
+    private IDataImportService dataImportService;
+    @Resource
+    private IAirConfigurationService airConfigurationService;
+    @Resource
+    private ILifePredictionService lifePredictionService;
 
     @Resource
     private ITaskService taskService;
+    @Resource
+    private IQaHistoryService qaHistoryService;
+
+    @Value("${kgqa.ask-url}")
+    private String askUrl;
 
     private static ModelHttpVo sendHttp(ModelVo modelVo, Map<String, Object> map) {
         try {
@@ -202,10 +210,11 @@ public class AlgorithmService implements IAlgorithmService {
     @Transactional
     public String executeFault(AlgorithmBo algorithmBo) {
         // 模型相关信息
-        ModelVo modelVo = modelService.selectById(algorithmBo.getModelId());
+        ModelVo modelVo = modelService.selectByPartId(algorithmBo.getPartId());
         if (ObjectUtil.isNull(modelVo)) {
             throw new BusinessException("模型信息为空,请检查!");
         }
+        algorithmBo.setColumnData(modelVo.getColumnData().split(","));
         SysOssVo sysOssVo = getSysOssVo(algorithmBo);
         if (sysOssVo == null) {
             return null;
@@ -215,7 +224,7 @@ public class AlgorithmService implements IAlgorithmService {
             .aircraftId(algorithmBo.getAircraftId())
             .modelType(modelVo.getType())
             .sortieNo(algorithmBo.getSortieNo())
-            .param(algorithmBo.getParam())
+            .param(algorithmBo.getPartId())
             .status("0")
             .columnData(Arrays.toString(algorithmBo.getColumnData()))
             .build();
@@ -232,6 +241,7 @@ public class AlgorithmService implements IAlgorithmService {
             diagnosisBo.setResultContent(httpVo.getData());
             faultDiagnosisService.update(diagnosisBo);
             FaultDiagnosisResultBo resultBo = FaultDiagnosisResultBo.builder()
+                .diagnosisId(diagnosisBo.getId())
                 .aircraftId(diagnosisBo.getAircraftId())
                 .diagnosisId(diagnosisBo.getId())
                 .resultContent(httpVo.getData())
@@ -242,6 +252,57 @@ public class AlgorithmService implements IAlgorithmService {
         return httpVo != null ? httpVo.getData() : null;
     }
 
+    @Override
+    @Transactional
+    public String executeEvaluation(AlgorithmBo algorithmBo) {
+        AirConfigurationVo airConfigurationVo = airConfigurationService.selectById(Long.valueOf(algorithmBo.getPartId()));
+        DataImportBo dataImportBo = new DataImportBo();
+        dataImportBo.setAircraftId(algorithmBo.getAircraftId());
+        List<DataImportVo> dataImportVos = dataImportService.selectList(dataImportBo);
+        // 模型相关信息
+        ModelVo modelVo = modelService.selectByPartId(algorithmBo.getPartId());
+        if (ObjectUtil.isNull(modelVo)) {
+            throw new BusinessException("模型信息为空,请检查!");
+        }
+        if (StrUtil.isBlank(modelVo.getColumnData())) {
+            throw new BusinessException("参数列不能为空,请检查!");
+        }
+        algorithmBo.setColumnData(modelVo.getColumnData().split(","));
+        List<String> urls = new ArrayList<>();
+        dataImportVos.forEach(el -> {
+            algorithmBo.setOssId(el.getOssId());
+            SysOssVo sysOssVo = getSysOssVo(algorithmBo);
+            if (ObjectUtil.isNotNull(sysOssVo)) {
+                urls.add(sysOssVo.getUrl());
+            }
+        });
+        // 插入退化评估记录
+        LifePredictionBo lifePredictionBo = LifePredictionBo.builder()
+            .name(airConfigurationVo.getName())
+            .model(airConfigurationVo.getSpecsModel())
+            .aircraftId(algorithmBo.getAircraftId())
+            .aircraftType(airConfigurationVo.getAircraftType())
+            .code(airConfigurationVo.getConCode())
+            .status("0")
+            .build();
+        LifePrediction lifePrediction = lifePredictionService.insert(lifePredictionBo);
+
+        // 参数
+        Map<String, Object> map = StrUtil.isBlank(algorithmBo.getParam()) ? new HashMap<>() : new HashMap<>(JSONUtil.parseObj(algorithmBo.getParam()));
+        map.put("url", urls.getFirst());
+        // 请求
+        ModelHttpVo httpVo = sendHttp(modelVo, map);
+        if (httpVo != null && httpVo.getStatus() == 200) {
+            // 更新退化评估状态
+            lifePredictionBo.setId(lifePrediction.getId());
+            lifePredictionBo.setStatus("1");
+            lifePredictionBo.setVersion(lifePrediction.getVersion());
+            lifePredictionBo.setResultContent(httpVo.getData());
+            lifePredictionService.update(lifePredictionBo);
+        }
+        return httpVo != null ? httpVo.getData() : null;
+    }
+
     private SysOssVo getSysOssVo(AlgorithmBo algorithmBo) {
         SysOssVo sysOss = ossService.getById(algorithmBo.getOssId());
         if (ObjectUtil.isNull(sysOss)) {
@@ -301,11 +362,30 @@ public class AlgorithmService implements IAlgorithmService {
 
     @Override
     public String executeQa(QaBo qaBo) {
-        String url = "http://192.168.0.102:8000/ask/";
         Map<String, Object> map = new HashMap<>();
         map.put("user_id", qaBo.getUserId());
         map.put("question", qaBo.getQuestion());
-        String result = HttpUtils.postJson(url, map);
-        return result;
+        String result = HttpUtils.postJson(askUrl, map);
+        JSONObject jsonObject = JSONUtil.parseObj(result);
+        String data = jsonObject.getStr("data");
+        String code = jsonObject.getStr("code");
+        String msg = jsonObject.getStr("msg");
+        if (StrUtil.isBlank(code)) {
+            throw new BusinessException(msg);
+        }
+        JSONObject answerJson = JSONUtil.parseObj(data);
+        String ossId = answerJson.getStr("ossID");
+        String userId = answerJson.getStr("user_id");
+        String fileName = answerJson.getStr("file_name");
+        String graph = answerJson.getStr("graph");
+        String answer = answerJson.getStr("answer");
+        QaHistoryBo qaHistoryBo = new QaHistoryBo();
+        qaHistoryBo.setAnswer(answer);
+        qaHistoryBo.setOssId(Long.valueOf(ossId));
+        qaHistoryBo.setUserId(userId);
+        qaHistoryBo.setFileName(fileName);
+        qaHistoryBo.setGraph(graph);
+        qaHistoryService.insert(qaHistoryBo);
+        return data;
     }
 }

+ 0 - 173
als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/LifePredictionResultServiceImpl.java

@@ -1,173 +0,0 @@
-package org.eco.als.service.impl;
-
-import cn.hutool.core.util.ObjectUtil;
-import com.mybatisflex.core.paginate.Page;
-import com.mybatisflex.core.query.QueryWrapper;
-import jakarta.annotation.Resource;
-import lombok.extern.slf4j.Slf4j;
-import org.eco.als.domain.LifePredictionResult;
-import org.eco.als.domain.bo.LifePredictionResultBo;
-import org.eco.als.domain.vo.LifePredictionResultVo;
-import org.eco.als.mapper.LifePredictionResultMapper;
-import org.eco.als.service.ILifePredictionResultService;
-import org.eco.common.core.core.domain.model.LoginUser;
-import org.eco.common.core.core.page.PageResult;
-import org.eco.common.core.utils.MapstructUtils;
-import org.eco.common.excel.entity.ExcelResultRes;
-import org.eco.common.excel.service.IExcelService;
-import org.eco.common.orm.core.page.PageQuery;
-import org.eco.common.orm.core.service.impl.BaseServiceImpl;
-import org.eco.system.service.IImportExportService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.Arrays;
-import java.util.List;
-
-import static org.eco.als.domain.table.LifePredictionResultTableDef.LIFE_PREDICTION_RESULT;
-
-/**
- * 寿命预测结果Service业务层处理
- *
- * @author wgk
- * @date 2024-07-26
- */
-@Service
-@Slf4j
-public class LifePredictionResultServiceImpl extends BaseServiceImpl<LifePredictionResultMapper, LifePredictionResult> implements ILifePredictionResultService {
-    @Resource
-    private LifePredictionResultMapper lifePredictionResultMapper;
-
-    @Resource
-    private IExcelService excelService;
-
-    @Resource
-    private IImportExportService importExportService;
-
-    @Override
-    public QueryWrapper query() {
-        return super.query().from(LIFE_PREDICTION_RESULT);
-    }
-
-    private QueryWrapper buildQueryWrapper(LifePredictionResultBo lifePredictionResultBo) {
-        QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
-        queryWrapper.and(LIFE_PREDICTION_RESULT.LIFE_ID.eq
-            (lifePredictionResultBo.getLifeId()));
-        queryWrapper.and(LIFE_PREDICTION_RESULT.AIRCRAFT_ID.eq
-            (lifePredictionResultBo.getAircraftId()));
-        queryWrapper.and(LIFE_PREDICTION_RESULT.NAME.like
-            (lifePredictionResultBo.getName()));
-        queryWrapper.and(LIFE_PREDICTION_RESULT.MODEL.eq
-            (lifePredictionResultBo.getModel()));
-        queryWrapper.and(LIFE_PREDICTION_RESULT.SYSTEM.eq
-            (lifePredictionResultBo.getSystem()));
-        queryWrapper.and(LIFE_PREDICTION_RESULT.METHOD_TYPE.eq
-            (lifePredictionResultBo.getMethodType()));
-        queryWrapper.and(LIFE_PREDICTION_RESULT.REMAIN_TIEM.eq
-            (lifePredictionResultBo.getRemainTiem()));
-
-        return queryWrapper;
-    }
-
-    /**
-     * 查询寿命预测结果
-     *
-     * @param id 寿命预测结果主键
-     * @return 寿命预测结果
-     */
-    @Override
-    public LifePredictionResultVo selectById(Long id) {
-        return this.getOneAs(query().where(LIFE_PREDICTION_RESULT.ID.eq(id)), LifePredictionResultVo.class);
-
-    }
-
-
-    /**
-     * 查询寿命预测结果列表
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 寿命预测结果集合
-     */
-    @Override
-    public List<LifePredictionResultVo> selectList(LifePredictionResultBo lifePredictionResultBo) {
-        QueryWrapper queryWrapper = buildQueryWrapper(lifePredictionResultBo);
-        return this.listAs(queryWrapper, LifePredictionResultVo.class);
-    }
-
-    /**
-     * 分页查询寿命预测结果列表
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 分页寿命预测结果集合
-     */
-    @Override
-    public PageResult<LifePredictionResultVo> selectPage(LifePredictionResultBo lifePredictionResultBo) {
-        QueryWrapper queryWrapper = buildQueryWrapper(lifePredictionResultBo);
-        Page<LifePredictionResultVo> page = this.pageAs(PageQuery.build(), queryWrapper, LifePredictionResultVo.class);
-        return PageResult.build(page);
-    }
-
-    /**
-     * 新增寿命预测结果
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 结果:true 操作成功,false 操作失败
-     */
-    @Override
-    public boolean insert(LifePredictionResultBo lifePredictionResultBo) {
-        LifePredictionResult lifePredictionResult = MapstructUtils.convert(lifePredictionResultBo, LifePredictionResult.class);
-
-        return this.save(lifePredictionResult);//使用全局配置的雪花算法主键生成器生成ID值
-    }
-
-    /**
-     * 新增寿命预测结果,前台提供主键值,一般用于导入的场合
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 结果:true 操作成功,false 操作失败
-     */
-    @Override
-    public boolean insertWithPk(LifePredictionResultBo lifePredictionResultBo) {
-        LifePredictionResult lifePredictionResult = MapstructUtils.convert(lifePredictionResultBo, LifePredictionResult.class);
-
-
-        return lifePredictionResultMapper.insertWithPk(lifePredictionResult) > 0;//前台传来主键值
-    }
-
-    /**
-     * 修改寿命预测结果
-     *
-     * @param lifePredictionResultBo 寿命预测结果Bo
-     * @return 结果:true 更新成功,false 更新失败
-     */
-    @Override
-    public boolean update(LifePredictionResultBo lifePredictionResultBo) {
-        LifePredictionResult lifePredictionResult = MapstructUtils.convert(lifePredictionResultBo, LifePredictionResult.class);
-        if (ObjectUtil.isNotNull(lifePredictionResult) && ObjectUtil.isNotNull(lifePredictionResult.getId())) {
-            return this.updateById(lifePredictionResult);
-        }
-        return false;
-    }
-
-    @Override
-    public void asyncExport(List<LifePredictionResultVo> listVo, String sheetName, LoginUser loginUser) {
-        ExcelResultRes result = excelService.exportExcel(listVo, sheetName, LifePredictionResultVo.class);
-        boolean flag = importExportService.saveInfo(result, loginUser, "1");
-        if (flag) {
-            log.info("异步导出日志写入成功");
-        }
-    }
-
-    /**
-     * 批量删除寿命预测结果
-     *
-     * @param ids 需要删除的寿命预测结果主键集合
-     * @return 结果:true 删除成功,false 删除失败
-     */
-    @Transactional
-    @Override
-    public boolean deleteByIds(Long[] ids) {
-        return this.removeByIds(Arrays.asList(ids));
-    }
-
-}

+ 8 - 8
als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/LifePredictionServiceImpl.java

@@ -58,15 +58,15 @@ public class LifePredictionServiceImpl extends BaseServiceImpl<LifePredictionMap
         }
         queryWrapper.and(LIFE_PREDICTION.NAME.like
             (lifePredictionBo.getName()));
+        queryWrapper.and(LIFE_PREDICTION.CODE.eq
+            (lifePredictionBo.getCode()));
+        queryWrapper.and(LIFE_PREDICTION.RESULT_CONTENT.like
+            (lifePredictionBo.getResultContent()));
         queryWrapper.and(LIFE_PREDICTION.MODEL.eq
             (lifePredictionBo.getModel()));
-        queryWrapper.and(LIFE_PREDICTION.SYSTEM.eq
-            (lifePredictionBo.getSystem()));
         queryWrapper.and(LIFE_PREDICTION.METHOD_TYPE.eq
             (lifePredictionBo.getMethodType()));
-        queryWrapper.and(LIFE_PREDICTION.REMAIN_TIEM.eq
-            (lifePredictionBo.getRemainTiem()));
-
+        queryWrapper.orderBy(LIFE_PREDICTION.CREATE_TIME.desc());
         return queryWrapper;
     }
 
@@ -115,10 +115,10 @@ public class LifePredictionServiceImpl extends BaseServiceImpl<LifePredictionMap
      * @return 结果:true 操作成功,false 操作失败
      */
     @Override
-    public boolean insert(LifePredictionBo lifePredictionBo) {
+    public LifePrediction insert(LifePredictionBo lifePredictionBo) {
         LifePrediction lifePrediction = MapstructUtils.convert(lifePredictionBo, LifePrediction.class);
-
-        return this.save(lifePrediction);//使用全局配置的雪花算法主键生成器生成ID值
+        this.save(lifePrediction);
+        return lifePrediction;//使用全局配置的雪花算法主键生成器生成ID值
     }
 
     /**

+ 5 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/ModelServiceImpl.java

@@ -76,6 +76,11 @@ public class ModelServiceImpl extends BaseServiceImpl<ModelMapper, Model> implem
 
     }
 
+    @Override
+    public ModelVo selectByPartId(String partId) {
+        return this.getOneAs(query().where(MODEL.PART_ID.eq(partId)), ModelVo.class);
+    }
+
 
     /**
      * 查询模型信息列表

+ 194 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/QaHistoryServiceImpl.java

@@ -0,0 +1,194 @@
+package org.eco.als.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryWrapper;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.eco.als.domain.QaHistory;
+import org.eco.als.domain.bo.QaHistoryBo;
+import org.eco.als.domain.vo.QaHistoryImportVo;
+import org.eco.als.domain.vo.QaHistoryVo;
+import org.eco.als.listener.QaHistoryImportListener;
+import org.eco.als.mapper.QaHistoryMapper;
+import org.eco.als.service.IQaHistoryService;
+import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.common.core.core.page.PageResult;
+import org.eco.common.core.utils.MapstructUtils;
+import org.eco.common.excel.entity.ExcelResultRes;
+import org.eco.common.excel.service.IExcelService;
+import org.eco.common.orm.core.page.PageQuery;
+import org.eco.common.orm.core.service.impl.BaseServiceImpl;
+import org.eco.system.service.IImportExportService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.eco.als.domain.table.QaHistoryTableDef.QA_HISTORY;
+
+/**
+ * 问答历史记录Service业务层处理
+ *
+ * @author wgk
+ * @date 2024-12-13
+ */
+@Service
+@Slf4j
+public class QaHistoryServiceImpl extends BaseServiceImpl<QaHistoryMapper, QaHistory> implements IQaHistoryService {
+    @Resource
+    private QaHistoryMapper qaHistoryMapper;
+
+    @Resource
+    private IExcelService excelService;
+
+    @Resource
+    private IImportExportService importExportService;
+
+    @Override
+    public QueryWrapper query() {
+        return super.query().from(QA_HISTORY);
+    }
+
+    private QueryWrapper buildQueryWrapper(QaHistoryBo qaHistoryBo) {
+        QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
+        queryWrapper.and(QA_HISTORY.USER_ID.eq
+            (qaHistoryBo.getUserId()));
+        queryWrapper.and(QA_HISTORY.QUESTION.eq
+            (qaHistoryBo.getQuestion()));
+        queryWrapper.and(QA_HISTORY.ANSWER.eq
+            (qaHistoryBo.getAnswer()));
+        queryWrapper.and(QA_HISTORY.GRAPH.eq
+            (qaHistoryBo.getAnswer()));
+        queryWrapper.and(QA_HISTORY.OSS_ID.eq
+            (qaHistoryBo.getOssId()));
+        queryWrapper.and(QA_HISTORY.FILE_NAME.like
+            (qaHistoryBo.getFileName()));
+        queryWrapper.and(QA_HISTORY.REMARKS.eq
+            (qaHistoryBo.getRemarks()));
+        queryWrapper.orderBy(QA_HISTORY.CREATE_TIME.desc());
+
+        return queryWrapper;
+    }
+
+    /**
+     * 查询问答历史记录
+     *
+     * @param id 问答历史记录主键
+     * @return 问答历史记录
+     */
+    @Override
+    public QaHistoryVo selectById(Long id) {
+        return this.getOneAs(query().where(QA_HISTORY.ID.eq(id)), QaHistoryVo.class);
+
+    }
+
+
+    /**
+     * 查询问答历史记录列表
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 问答历史记录集合
+     */
+    @Override
+    public List<QaHistoryVo> selectList(QaHistoryBo qaHistoryBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(qaHistoryBo);
+        return this.listAs(queryWrapper, QaHistoryVo.class);
+    }
+
+    /**
+     * 分页查询问答历史记录列表
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 分页问答历史记录集合
+     */
+    @Override
+    public PageResult<QaHistoryVo> selectPage(QaHistoryBo qaHistoryBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(qaHistoryBo);
+        Page<QaHistoryVo> page = this.pageAs(PageQuery.build(), queryWrapper, QaHistoryVo.class);
+        return PageResult.build(page);
+    }
+
+    /**
+     * 新增问答历史记录
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    @Override
+    public boolean insert(QaHistoryBo qaHistoryBo) {
+        QaHistory qaHistory = MapstructUtils.convert(qaHistoryBo, QaHistory.class);
+
+        return this.save(qaHistory);//使用全局配置的雪花算法主键生成器生成ID值
+    }
+
+    /**
+     * 新增问答历史记录,前台提供主键值,一般用于导入的场合
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    @Override
+    public boolean insertWithPk(QaHistoryBo qaHistoryBo) {
+        QaHistory qaHistory = MapstructUtils.convert(qaHistoryBo, QaHistory.class);
+
+
+        return qaHistoryMapper.insertWithPk(qaHistory) > 0;//前台传来主键值
+    }
+
+    /**
+     * 修改问答历史记录
+     *
+     * @param qaHistoryBo 问答历史记录Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    @Override
+    public boolean update(QaHistoryBo qaHistoryBo) {
+        QaHistory qaHistory = MapstructUtils.convert(qaHistoryBo, QaHistory.class);
+        if (ObjectUtil.isNotNull(qaHistory) && ObjectUtil.isNotNull(qaHistory.getId())) {
+            boolean updated = this.updateById(qaHistory);
+            return updated;
+        }
+        return false;
+    }
+
+    @Override
+    public void asyncImportData(MultipartFile file, boolean updateSupport, LoginUser loginUser) {
+        ExcelResultRes result;
+        try {
+            String name = file.getOriginalFilename();
+            result = excelService.importExcel(file.getInputStream(), name, QaHistoryImportVo.class, new QaHistoryImportListener(updateSupport, loginUser));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        boolean flag = importExportService.saveInfo(result, loginUser, "0");
+        if (flag) {
+            log.info("异步导入日志写入成功");
+        }
+    }
+
+    @Override
+    public void asyncExport(List<QaHistoryVo> listVo, String sheetName, LoginUser loginUser) {
+        ExcelResultRes result = excelService.exportExcel(listVo, sheetName, QaHistoryVo.class);
+        boolean flag = importExportService.saveInfo(result, loginUser, "1");
+        if (flag) {
+            log.info("异步导出日志写入成功");
+        }
+    }
+
+    /**
+     * 批量删除问答历史记录
+     *
+     * @param ids 需要删除的问答历史记录主键集合
+     * @return 结果:true 删除成功,false 删除失败
+     */
+    @Transactional
+    @Override
+    public boolean deleteByIds(Long[] ids) {
+        return this.removeByIds(Arrays.asList(ids));
+    }
+
+}

+ 7 - 0
als-modules/agile-assurance/src/main/resources/mapper/als/QaHistoryMapper.xml

@@ -0,0 +1,7 @@
+<?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="org.eco.als.mapper.QaHistoryMapper">
+
+</mapper>

+ 2 - 0
als-start/src/main/resources/application-dev.yml

@@ -165,3 +165,5 @@ sms:
       template-id: xxxxxxxx
       #您的sdkAppId
       sdk-app-id: 您的sdkAppId
+kgqa:
+  ask-url: http://192.168.0.102:8000/kgqa/ask/

+ 9 - 0
als-start/src/main/resources/db/dm/V1_0_0_5__als-1212-ddl.sql

@@ -0,0 +1,9 @@
+ALTER TABLE "lqbz"."als_life_prediction_t" ADD COLUMN "aircraft_type" VARCHAR2(255);
+ALTER TABLE "lqbz"."als_life_prediction_t" ADD COLUMN "code" VARCHAR2(255);
+ALTER TABLE "lqbz"."als_life_prediction_t" ADD COLUMN "result_content" VARCHAR2(4000);
+ALTER TABLE "lqbz"."als_life_prediction_t" MODIFY "aircraft_id" VARCHAR2(255) NULL;
+ALTER TABLE "lqbz"."als_life_prediction_t" DROP "SYSTEM";
+ALTER TABLE "lqbz"."als_life_prediction_t" DROP "remain_tiem";
+COMMENT ON COLUMN "lqbz"."als_life_prediction_t"."aircraft_type" IS '飞机型号';
+COMMENT ON COLUMN "lqbz"."als_life_prediction_t"."code" IS '编码';
+DROP TABLE "lqbz"."als_life_prediction_result_t";

+ 37 - 0
als-start/src/main/resources/db/dm/V1_0_0_6__als-1213-ddl.sql

@@ -0,0 +1,37 @@
+DROP TABLE IF EXISTS "als"."als_qa_history_t";
+CREATE TABLE "als"."als_qa_history_t"(
+                                         id bigint NOT NULL,
+                                         user_id VARCHAR2(255),
+                                         question VARCHAR2(5000),
+                                         answer TEXT,
+                                         graph TEXT,
+                                         oss_id bigint,
+                                         file_name VARCHAR2(255),
+                                         remarks VARCHAR2(900),
+                                         tenant_id bigint,
+                                         del_flag bit DEFAULT  0,
+                                         version INTEGER,
+                                         create_by bigint,
+                                         create_time TIMESTAMP,
+                                         update_by bigint,
+                                         update_time TIMESTAMP
+);
+
+ALTER TABLE "als"."als_qa_history_t" ADD CONSTRAINT PRIMARY KEY (id);
+
+COMMENT ON TABLE "als"."als_qa_history_t" IS '问答历史记录';
+COMMENT ON COLUMN "als"."als_qa_history_t"."id" IS '唯一ID';
+COMMENT ON COLUMN "als"."als_qa_history_t"."user_id" IS '当前用户';
+COMMENT ON COLUMN "als"."als_qa_history_t"."question" IS '问题';
+COMMENT ON COLUMN "als"."als_qa_history_t"."answer" IS '回答';
+COMMENT ON COLUMN "als"."als_qa_history_t"."graph" IS '图谱相关';
+COMMENT ON COLUMN "als"."als_qa_history_t"."oss_id" IS '文件ID';
+COMMENT ON COLUMN "als"."als_qa_history_t"."file_name" IS '文件名称';
+COMMENT ON COLUMN "als"."als_qa_history_t"."remarks" IS '备注';
+COMMENT ON COLUMN "als"."als_qa_history_t"."tenant_id" IS '租户号';
+COMMENT ON COLUMN "als"."als_qa_history_t"."del_flag" IS '删除标识(1删除 0未删除)';
+COMMENT ON COLUMN "als"."als_qa_history_t"."version" IS '乐观锁';
+COMMENT ON COLUMN "als"."als_qa_history_t"."create_by" IS '创建人';
+COMMENT ON COLUMN "als"."als_qa_history_t"."create_time" IS '创建时间';
+COMMENT ON COLUMN "als"."als_qa_history_t"."update_by" IS '更新人';
+COMMENT ON COLUMN "als"."als_qa_history_t"."update_time" IS '更新时间';