浏览代码

故障案例

Gaokun Wang 7 月之前
父节点
当前提交
2790b3cbaa

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

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

+ 34 - 34
als-modules/agile-assurance/src/main/java/org/eco/als/domain/FaultCase.java

@@ -7,71 +7,71 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
-
 import org.eco.common.orm.core.domain.BaseEntity;
 
 /**
  * 故障案例对象 als_fault_case_t
  *
  * @author wgk
- * @date 2024-10-25
+ * @date 2024-11-14
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
 @Table(value = "als_fault_case_t")
 public class FaultCase extends BaseEntity {
-    @Serial
-    private static final long serialVersionUID = 1L;
+@Serial
+private static final long serialVersionUID = 1L;
 
-    /**
-     * 编号
-     */
+    /** 编号 */
     @Id
     private Long id;
 
-    /**
-     * 机型
-     */
+    /** 飞机编号 */
+    private String aircraftCode;
+
+    /** 机型 */
     private String aircraftType;
 
-    /**
-     * 故障代码
-     */
+    /** 故障代码 */
     private String faultCode;
 
-    /**
-     * 故障名称
-     */
+    /** 故障名称 */
     private String faultName;
 
-    /**
-     * 故障位置
-     */
+    /** 故障文件 */
+    private String ossId;
+
+    /** 日期 */
+    private String faultDate;
+
+    /** 所属系统 */
+    private String systemItem;
+
+    /** 专业 */
+    private String specialty;
+
+    /** 故障部位 */
     private String location;
 
-    /**
-     * 故障等级
-     */
+    /** 故障性质 */
     private String level;
 
-    /**
-     * 故障现象
-     */
+    /** 故障现象 */
     private String symptoms;
 
-    /**
-     * 故障原因
-     */
+    /** 排除方法 */
+    private String methodRectification;
+
+    /** 故障原因分类 */
+    private String faultCauseType;
+
+    /** 故障原因 */
     private String faultCause;
 
-    /**
-     * 备注
-     */
+    /** 备注 */
     private String remarks;
 
-    /**
-     * 删除标识(1删除 0未删除)
-     */
+    /** 删除标识(1删除 0未删除) */
     @Column(isLogicDelete = true)
     private Integer delFlag;
 

+ 39 - 4
als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/FaultCaseBo.java

@@ -11,17 +11,22 @@ import org.eco.common.orm.core.domain.BaseEntity;
  * 故障案例业务对象 als_fault_case_t
  *
  * @author wgk
- * @date 2024-10-25
+ * @date 2024-11-14
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = FaultCase.class, reverseConvertGenerate = false)
-public class FaultCaseBo extends BaseEntity {
+public class FaultCaseBo extends BaseEntity{
     /**
      * 编号
      */
     private Long id;
 
+    /**
+     * 飞机编号
+     */
+    private String aircraftCode;
+
     /**
      * 机型
      */
@@ -38,12 +43,32 @@ public class FaultCaseBo extends BaseEntity {
     private String faultName;
 
     /**
-     * 故障位置
+     * 故障文件
+     */
+    private String ossId;
+
+    /**
+     * 日期
+     */
+    private String faultDate;
+
+    /**
+     * 所属系统
+     */
+    private String systemItem;
+
+    /**
+     * 专业
+     */
+    private String specialty;
+
+    /**
+     * 故障部位
      */
     private String location;
 
     /**
-     * 故障等级
+     * 故障性质
      */
     private String level;
 
@@ -52,6 +77,16 @@ public class FaultCaseBo extends BaseEntity {
      */
     private String symptoms;
 
+    /**
+     * 排除方法
+     */
+    private String methodRectification;
+
+    /**
+     * 故障原因分类
+     */
+    private String faultCauseType;
+
     /**
      * 故障原因
      */

+ 64 - 56
als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/FaultCaseImportVo.java

@@ -5,17 +5,15 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import org.eco.common.excel.annotation.ExcelDictFormat;
 import org.eco.common.excel.convert.ExcelDictConvert;
 import lombok.Data;
-
 import java.io.Serial;
 import java.io.Serializable;
-
 import lombok.NoArgsConstructor;
 
 /**
  * 故障案例导入视图对象 als_fault_case_t
  *
  * @author wgk
- * @date 2024-10-25
+ * @date 2024-11-14
  */
 
 @Data
@@ -27,59 +25,69 @@ public class FaultCaseImportVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
 
-    /**
-     * 机型
-     */
-    @ExcelProperty(value = "机型")
-    private String aircraftType;
-
-    /**
-     * 故障代码
-     */
-    @ExcelProperty(value = "故障代码")
-    private String faultCode;
-
-    /**
-     * 故障名称
-     */
-    @ExcelProperty(value = "故障名称")
-    private String faultName;
-
-    /**
-     * 故障位置
-     */
-    @ExcelProperty(value = "故障位置")
-    private String location;
-
-    /**
-     * 故障等级
-     */
-    @ExcelProperty(value = "故障等级")
-    private String level;
-
-    /**
-     * 故障现象
-     */
-    @ExcelProperty(value = "故障现象")
-    private String symptoms;
-
-    /**
-     * 故障原因
-     */
-    @ExcelProperty(value = "故障原因")
-    private String faultCause;
-
-    /**
-     * 备注
-     */
-    @ExcelProperty(value = "备注")
-    private String remarks;
-
-    /**
-     * 删除标识(1删除 0未删除)
-     */
-    @ExcelProperty(value = "删除标识(1删除 0未删除)")
-    private Integer delFlag;
+                /** 飞机编号 */
+                    @ExcelProperty(value = "飞机编号")
+                private String aircraftCode;
+
+                /** 机型 */
+                    @ExcelProperty(value = "机型")
+                private String aircraftType;
+
+                /** 故障代码 */
+                    @ExcelProperty(value = "故障代码")
+                private String faultCode;
+
+                /** 故障名称 */
+                    @ExcelProperty(value = "故障名称")
+                private String faultName;
+
+                /** 故障文件 */
+                    @ExcelProperty(value = "故障文件")
+                private String ossId;
+
+                /** 日期 */
+                    @ExcelProperty(value = "日期")
+                private String faultDate;
+
+                /** 所属系统 */
+                    @ExcelProperty(value = "所属系统")
+                private String systemItem;
+
+                /** 专业 */
+                    @ExcelProperty(value = "专业")
+                private String specialty;
+
+                /** 故障部位 */
+                    @ExcelProperty(value = "故障部位")
+                private String location;
+
+                /** 故障性质 */
+                    @ExcelProperty(value = "故障性质")
+                private String level;
+
+                /** 故障现象 */
+                    @ExcelProperty(value = "故障现象")
+                private String symptoms;
+
+                /** 排除方法 */
+                    @ExcelProperty(value = "排除方法")
+                private String methodRectification;
+
+                /** 故障原因分类 */
+                    @ExcelProperty(value = "故障原因分类")
+                private String faultCauseType;
+
+                /** 故障原因 */
+                    @ExcelProperty(value = "故障原因")
+                private String faultCause;
+
+                /** 备注 */
+                    @ExcelProperty(value = "备注")
+                private String remarks;
+
+                /** 删除标识(1删除 0未删除) */
+                    @ExcelProperty(value = "删除标识(1删除 0未删除)")
+                    private Integer delFlag;
 
 
 }

+ 43 - 37
als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/FaultCaseVo.java

@@ -10,17 +10,15 @@ import com.eco.common.mapper.annotation.FieldMapper;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-
 import java.io.Serial;
 import java.io.Serializable;
-
 import org.eco.common.orm.core.domain.BaseEntity;
 
 /**
  * 故障案例视图对象 als_fault_case_t
  *
  * @author wgk
- * @date 2024-10-25
+ * @date 2024-11-14
  */
 @Data
 @ExcelIgnoreUnannotated
@@ -28,66 +26,74 @@ import org.eco.common.orm.core.domain.BaseEntity;
 @AutoMapper(target = FaultCase.class)
 public class FaultCaseVo extends BaseEntity implements Serializable {
 
-    @Serial
-    private static final long serialVersionUID = 1L;
+@Serial
+private static final long serialVersionUID = 1L;
 
-    /**
-     * 编号
-     */
+    /** 编号 */
     @ExcelProperty(value = "编号")
     private Long id;
 
-    /**
-     * 机型
-     */
+    /** 飞机编号 */
+    @ExcelProperty(value = "飞机编号")
+    private String aircraftCode;
+
+    /** 机型 */
     @ExcelProperty(value = "机型")
     private String aircraftType;
 
-    /**
-     * 故障代码
-     */
+    /** 故障代码 */
     @ExcelProperty(value = "故障代码")
     private String faultCode;
 
-    /**
-     * 故障名称
-     */
+    /** 故障名称 */
     @ExcelProperty(value = "故障名称")
     private String faultName;
 
-    /**
-     * 故障位置
-     */
-    @ExcelProperty(value = "故障位置")
+    /** 故障文件 */
+    @ExcelProperty(value = "故障文件")
+    private String ossId;
+
+    /** 日期 */
+    @ExcelProperty(value = "日期")
+    private String faultDate;
+
+    /** 所属系统 */
+    @ExcelProperty(value = "所属系统")
+    private String systemItem;
+
+    /** 专业 */
+    @ExcelProperty(value = "专业")
+    private String specialty;
+
+    /** 故障部位 */
+    @ExcelProperty(value = "故障部位")
     private String location;
 
-    /**
-     * 故障等级
-     */
-    @ExcelProperty(value = "故障等级")
+    /** 故障性质 */
+    @ExcelProperty(value = "故障性质")
     private String level;
 
-    /**
-     * 故障现象
-     */
+    /** 故障现象 */
     @ExcelProperty(value = "故障现象")
     private String symptoms;
 
-    /**
-     * 故障原因
-     */
+    /** 排除方法 */
+    @ExcelProperty(value = "排除方法")
+    private String methodRectification;
+
+    /** 故障原因分类 */
+    @ExcelProperty(value = "故障原因分类")
+    private String faultCauseType;
+
+    /** 故障原因 */
     @ExcelProperty(value = "故障原因")
     private String faultCause;
 
-    /**
-     * 备注
-     */
+    /** 备注 */
     @ExcelProperty(value = "备注")
     private String remarks;
 
-    /**
-     * 删除标识(1删除 0未删除)
-     */
+    /** 删除标识(1删除 0未删除) */
     @ExcelProperty(value = "删除标识(1删除 0未删除)")
     private Integer delFlag;
 

+ 128 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/listener/FaultCaseImportListener.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 org.eco.common.core.exception.BusinessException;
+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 org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.als.domain.bo.FaultCaseBo;
+import org.eco.als.domain.vo.FaultCaseImportVo;
+import org.eco.als.domain.vo.FaultCaseVo;
+import org.eco.als.service.IFaultCaseService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 故障案例自定义导入
+ *
+ * @author wgk
+ */
+@Slf4j
+public class FaultCaseImportListener extends AnalysisEventListener<FaultCaseImportVo> implements ExcelListener<FaultCaseImportVo> {
+    private final IFaultCaseService faultCaseService;
+
+    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 FaultCaseImportListener(Boolean isUpdateSupport, LoginUser loginUser) {
+        this.faultCaseService = SpringUtils.getBean(IFaultCaseService.class);
+        this.isUpdateSupport = isUpdateSupport;
+        this.loginUser = loginUser;
+    }
+
+    @Override
+    public void invoke(FaultCaseImportVo faultCaseVo, AnalysisContext context) {
+        try {
+
+            FaultCaseBo faultCaseBo = BeanUtil.toBean(faultCaseVo, FaultCaseBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            FaultCaseVo faultCaseVo1 = null;
+
+            //faultCaseVo1 = faultCaseService.selectBySomefield(faultCaseVo.getSomefield());
+            if (ObjectUtil.isNull(faultCaseVo1)) {
+                //不存在就新增
+                setBo(faultCaseBo);
+                ValidatorUtils.validate(faultCaseBo);
+                boolean inserted = faultCaseService.insert(faultCaseBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、故障案例 记录导入成功");
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、故障案例 记录导入失败");
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                faultCaseBo.setId(faultCaseVo1.getId());//主键
+                faultCaseBo.setVersion(faultCaseVo1.getVersion());
+                boolean updated = faultCaseService.update(faultCaseBo);
+                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(FaultCaseBo faultCaseBo) {
+        faultCaseBo.setVersion(0);
+        faultCaseBo.setCreateBy(loginUser.getUserId());
+        faultCaseBo.setUpdateBy(loginUser.getUserId());
+        faultCaseBo.setTenantId(loginUser.getTenantId());
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        log.info("解析完成");
+    }
+
+    @Override
+    public ExcelResult<FaultCaseImportVo> 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<FaultCaseImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 16 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/mapper/FaultCaseMapper.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.FaultCase;
+
+/**
+ * 故障案例Mapper接口
+ *
+ * @author wgk
+ * @date 2024-11-14
+ */
+@Mapper
+public interface FaultCaseMapper extends BaseMapper<FaultCase> {
+
+}

+ 95 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/service/IFaultCaseService.java

@@ -0,0 +1,95 @@
+package org.eco.als.service;
+
+import java.util.List;
+import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.als.domain.FaultCase;
+import org.eco.als.domain.vo.FaultCaseVo;
+import org.eco.als.domain.bo.FaultCaseBo;
+import org.eco.common.orm.core.service.IBaseService;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.web.multipart.MultipartFile;
+import org.eco.common.core.core.page.PageResult;
+
+/**
+ * 故障案例Service接口
+ *
+ * @author wgk
+ * @date 2024-11-14
+ */
+public interface IFaultCaseService extends IBaseService<FaultCase> {
+    /**
+     * 查询故障案例
+     *
+     * @param id 故障案例主键
+     * @return 故障案例
+     */
+        FaultCaseVo selectById(Long id);
+    /**
+     * 查询故障案例列表
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 故障案例集合
+     */
+    List<FaultCaseVo> selectList(FaultCaseBo faultCaseBo);
+
+    /**
+     * 分页查询故障案例列表
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 分页故障案例集合
+     */
+    PageResult<FaultCaseVo> selectPage(FaultCaseBo faultCaseBo);
+
+    /**
+     * 新增故障案例
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean insert(FaultCaseBo faultCaseBo);
+
+    /**
+     * 新增故障案例,前台提供主键值,一般用于导入的场合
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean insertWithPk(FaultCaseBo faultCaseBo);
+
+    /**
+     * 修改故障案例
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    boolean update(FaultCaseBo faultCaseBo);
+
+    /**
+     * 批量删除故障案例
+     *
+     * @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<FaultCaseVo> listVo, String sheetName, LoginUser user);
+
+}

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

@@ -0,0 +1,212 @@
+package org.eco.als.service.impl;
+
+import java.util.Arrays;
+import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.common.excel.entity.ExcelResultRes;
+import org.eco.common.excel.service.IExcelService;
+import org.eco.common.core.utils.bean.BeanUtils;
+import org.eco.common.core.utils.MapstructUtils;
+import org.eco.system.service.IImportExportService;
+import org.eco.common.core.utils.StringUtils;
+import org.eco.system.domain.bo.ImportExportBo;
+import org.eco.common.orm.core.page.PageQuery;
+import org.eco.common.core.core.page.PageResult;
+import org.eco.common.orm.core.service.impl.BaseServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
+import org.eco.als.mapper.FaultCaseMapper;
+import org.eco.als.domain.FaultCase;
+import org.eco.als.domain.bo.FaultCaseBo;
+import org.eco.als.domain.vo.FaultCaseVo;
+import org.eco.als.domain.vo.FaultCaseImportVo;
+import org.eco.als.listener.FaultCaseImportListener;
+import org.eco.als.service.IFaultCaseService;
+import static org.eco.als.domain.table.FaultCaseTableDef.FAULT_CASE;
+
+/**
+ * 故障案例Service业务层处理
+ *
+ * @author wgk
+ * @date 2024-11-14
+ */
+@Service
+@Slf4j
+public class FaultCaseServiceImpl extends BaseServiceImpl<FaultCaseMapper, FaultCase> implements IFaultCaseService {
+    @Resource
+    private FaultCaseMapper faultCaseMapper;
+
+    @Resource
+    private IExcelService excelService;
+
+    @Resource
+    private IImportExportService importExportService;
+
+    @Override
+    public QueryWrapper query() {
+        return super.query().from(FAULT_CASE);
+    }
+
+    private QueryWrapper buildQueryWrapper(FaultCaseBo faultCaseBo) {
+        QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
+        queryWrapper.and(FAULT_CASE.AIRCRAFT_CODE.eq
+        (faultCaseBo.getAircraftCode()));
+        queryWrapper.and(FAULT_CASE.AIRCRAFT_TYPE.eq
+        (faultCaseBo.getAircraftType()));
+        queryWrapper.and(FAULT_CASE.FAULT_CODE.eq
+        (faultCaseBo.getFaultCode()));
+        queryWrapper.and(FAULT_CASE.FAULT_NAME.like
+        (faultCaseBo.getFaultName()));
+        queryWrapper.and(FAULT_CASE.OSS_ID.eq
+        (faultCaseBo.getOssId()));
+        queryWrapper.and(FAULT_CASE.FAULT_DATE.eq
+        (faultCaseBo.getFaultDate()));
+        queryWrapper.and(FAULT_CASE.SYSTEM_ITEM.eq
+        (faultCaseBo.getSystemItem()));
+        queryWrapper.and(FAULT_CASE.SPECIALTY.eq
+        (faultCaseBo.getSpecialty()));
+        queryWrapper.and(FAULT_CASE.LOCATION.eq
+        (faultCaseBo.getLocation()));
+        queryWrapper.and(FAULT_CASE.LEVEL.eq
+        (faultCaseBo.getLevel()));
+        queryWrapper.and(FAULT_CASE.SYMPTOMS.eq
+        (faultCaseBo.getSymptoms()));
+        queryWrapper.and(FAULT_CASE.METHOD_RECTIFICATION.eq
+        (faultCaseBo.getMethodRectification()));
+        queryWrapper.and(FAULT_CASE.FAULT_CAUSE_TYPE.eq
+        (faultCaseBo.getFaultCauseType()));
+        queryWrapper.and(FAULT_CASE.FAULT_CAUSE.eq
+        (faultCaseBo.getFaultCause()));
+        queryWrapper.and(FAULT_CASE.REMARKS.eq
+        (faultCaseBo.getRemarks()));
+
+        return queryWrapper;
+    }
+
+    /**
+     * 查询故障案例
+     *
+     * @param id 故障案例主键
+     * @return 故障案例
+     */
+    @Override
+    public FaultCaseVo selectById(Long id) {
+            return this.getOneAs(query().where(FAULT_CASE.ID.eq(id)), FaultCaseVo.class);
+
+    }
+
+
+    /**
+     * 查询故障案例列表
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 故障案例集合
+     */
+    @Override
+    public List<FaultCaseVo> selectList(FaultCaseBo faultCaseBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(faultCaseBo);
+            return this.listAs(queryWrapper, FaultCaseVo.class);
+    }
+
+    /**
+     * 分页查询故障案例列表
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 分页故障案例集合
+     */
+    @Override
+    public PageResult<FaultCaseVo> selectPage(FaultCaseBo faultCaseBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(faultCaseBo);
+            Page<FaultCaseVo> page = this.pageAs(PageQuery.build(), queryWrapper, FaultCaseVo.class);
+        return PageResult.build(page);
+    }
+
+    /**
+     * 新增故障案例
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    @Override
+    public boolean insert(FaultCaseBo faultCaseBo) {
+    FaultCase faultCase =MapstructUtils.convert(faultCaseBo, FaultCase. class);
+
+        return this.save(faultCase);//使用全局配置的雪花算法主键生成器生成ID值
+    }
+
+    /**
+     * 新增故障案例,前台提供主键值,一般用于导入的场合
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    @Override
+    public boolean insertWithPk(FaultCaseBo faultCaseBo)
+    {
+        FaultCase faultCase = MapstructUtils.convert(faultCaseBo, FaultCase.class);
+
+
+            return faultCaseMapper.insertWithPk(faultCase) > 0;//前台传来主键值
+    }
+
+    /**
+     * 修改故障案例
+     *
+     * @param faultCaseBo 故障案例Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    @Override
+    public boolean update(FaultCaseBo faultCaseBo) {
+        FaultCase faultCase =MapstructUtils.convert(faultCaseBo, FaultCase. class);
+        if (ObjectUtil.isNotNull(faultCase) && ObjectUtil.isNotNull(faultCase.getId())){
+            boolean updated = this.updateById(faultCase);
+                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, FaultCaseImportVo.class, new FaultCaseImportListener(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<FaultCaseVo> listVo, String sheetName, LoginUser loginUser) {
+        ExcelResultRes result = excelService.exportExcel(listVo, sheetName, FaultCaseVo.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/FaultCaseMapper.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.FaultCaseMapper">
+
+</mapper>