Quellcode durchsuchen

通讯录, 同步导入导出

Gaokun Wang vor 8 Monaten
Ursprung
Commit
8734f4baa9
22 geänderte Dateien mit 1080 neuen und 84 gelöschten Zeilen
  1. 30 32
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/AirConfigurationController.java
  2. 13 0
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/AirInstallController.java
  3. 0 1
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/AlgorithmController.java
  4. 137 0
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/ContactsController.java
  5. 22 20
      als-modules/agile-assurance/src/main/java/org/eco/als/controller/ModelController.java
  6. 63 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/Contacts.java
  7. 66 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/ModelExportVo.java
  8. 50 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/bo/ContactsBo.java
  9. 88 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/AirConfigurationExportVo.java
  10. 2 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/AirConfigurationImportVo.java
  11. 64 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/ContactsImportVo.java
  12. 86 0
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/ContactsVo.java
  13. 0 16
      als-modules/agile-assurance/src/main/java/org/eco/als/domain/vo/ModelImportVo.java
  14. 15 10
      als-modules/agile-assurance/src/main/java/org/eco/als/listener/AirConfigurationImportListener.java
  15. 128 0
      als-modules/agile-assurance/src/main/java/org/eco/als/listener/ContactsImportListener.java
  16. 16 0
      als-modules/agile-assurance/src/main/java/org/eco/als/mapper/ContactsMapper.java
  17. 2 0
      als-modules/agile-assurance/src/main/java/org/eco/als/service/IAlgorithmService.java
  18. 97 0
      als-modules/agile-assurance/src/main/java/org/eco/als/service/IContactsService.java
  19. 2 2
      als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/AirInstallServiceImpl.java
  20. 189 0
      als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/ContactsServiceImpl.java
  21. 3 3
      als-modules/agile-assurance/src/main/java/org/eco/als/utils/CsvUtils.java
  22. 7 0
      als-modules/agile-assurance/src/main/resources/mapper/als/ContactsMapper.xml

+ 30 - 32
als-modules/agile-assurance/src/main/java/org/eco/als/controller/AirConfigurationController.java

@@ -1,28 +1,32 @@
 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 cn.hutool.core.collection.CollUtil;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.eco.als.domain.bo.AirConfigurationBo;
+import org.eco.als.domain.vo.AirConfigurationExportVo;
+import org.eco.als.domain.vo.AirConfigurationImportVo;
+import org.eco.als.domain.vo.AirConfigurationVo;
+import org.eco.als.listener.AirConfigurationImportListener;
+import org.eco.als.service.IAirConfigurationService;
 import org.eco.common.core.core.domain.CommonResult;
+import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.common.core.utils.MapstructUtils;
+import org.eco.common.excel.core.ExcelResult;
+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.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.AirConfigurationImportVo;
-import org.eco.als.domain.vo.AirConfigurationVo;
-import org.eco.als.domain.bo.AirConfigurationBo;
-import org.eco.als.service.IAirConfigurationService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.List;
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 飞机构型Controller
@@ -48,38 +52,32 @@ 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);
+    }
+
     /**
-     * 导出飞机构型列表
+     * 导出
      */
-    @SaCheckPermission("als:airConfiguration:export")
     @Log(title = "飞机构型", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public CommonResult<Void> export(AirConfigurationBo airConfigurationBo) {
-        LoginUser loginUser = LoginHelper.getLoginUser();
+    public void export(HttpServletResponse response, AirConfigurationBo airConfigurationBo) {
         List<AirConfigurationVo> list = airConfigurationService.selectList(airConfigurationBo);
-        if (CollUtil.isEmpty(list)) {
-            return CommonResult.fail("导出列表为空");
-        }
-        airConfigurationService.asyncExport(list, "飞机构型", loginUser);
-        return CommonResult.success();
-    }
-
-    @SaCheckPermission("als:airConfiguration:import")
-    @PostMapping("/importTemplate")
-    public void importTemplate(HttpServletResponse response) {
-        ExcelUtil.exportExcel(new ArrayList<>(), "飞机构型", AirConfigurationImportVo.class, response);
+        List<AirConfigurationExportVo> listVo = MapstructUtils.convert(list, AirConfigurationExportVo.class);
+        ExcelUtil.exportExcel(listVo, "飞机构型", AirConfigurationExportVo.class, response);
     }
 
     /**
      * 导入飞机构型列表
      */
     @Log(title = "飞机构型", businessType = BusinessType.IMPORT)
-    @SaCheckPermission("als:airConfiguration:import")
     @PostMapping("/importData")
-    public CommonResult<Void> importData(MultipartFile file, boolean updateSupport) {
+    public CommonResult<Void> syncImportData(MultipartFile file, boolean updateSupport) throws Exception {
         LoginUser loginUser = LoginHelper.getLoginUser();
-        airConfigurationService.asyncImportData(file, updateSupport, loginUser);
-        return CommonResult.success();
+        ExcelResult<AirConfigurationImportVo> result = ExcelUtil.importExcel(file.getInputStream(), AirConfigurationImportVo.class, new AirConfigurationImportListener(updateSupport, loginUser));
+        return CommonResult.success(result.getAnalysis().getLogInfo());
     }
 
     /**

+ 13 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/controller/AirInstallController.java

@@ -8,10 +8,12 @@ import lombok.RequiredArgsConstructor;
 import org.eco.als.domain.bo.AirInstallBo;
 import org.eco.als.domain.vo.AirInstallImportVo;
 import org.eco.als.domain.vo.AirInstallVo;
+import org.eco.als.listener.AirInstallImportListener;
 import org.eco.als.service.IAirInstallService;
 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.core.ExcelResult;
 import org.eco.common.excel.utils.ExcelUtil;
 import org.eco.common.log.annotation.Log;
 import org.eco.common.log.enums.BusinessType;
@@ -47,6 +49,7 @@ public class AirInstallController extends BaseController {
     public CommonResult<PageResult<AirInstallVo>> list(AirInstallBo airInstallBo) {
         return CommonResult.success(airInstallService.selectPage(airInstallBo));
     }
+
     /**
      * 查询装机信息列表All
      */
@@ -90,6 +93,16 @@ public class AirInstallController extends BaseController {
         return CommonResult.success();
     }
 
+    /**
+     * 导入
+     */
+    @PostMapping("/syncImportData")
+    public CommonResult<Void> syncImportData(MultipartFile file, boolean updateSupport) throws Exception {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        ExcelResult<AirInstallImportVo> result = ExcelUtil.importExcel(file.getInputStream(), AirInstallImportVo.class, new AirInstallImportListener(updateSupport, loginUser));
+        return CommonResult.success(result.getAnalysis().getLogInfo());
+    }
+
     /**
      * 获取装机信息详细信息
      */

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

@@ -47,7 +47,6 @@ public class AlgorithmController {
      * @param algorithmBo 入参
      * @return org.eco.common.core.core.domain.CommonResult<java.lang.String> 结果
      **/
-    @SaCheckPermission("als:algorithm:execute")
     @PostMapping("/execute/falseAlarm")
     public CommonResult<String> executeFalseAlarm(@Validated @RequestBody AlgorithmBo algorithmBo) {
         String result = algorithmService.executeFalseAlarm(algorithmBo);

+ 137 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/controller/ContactsController.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.ContactsBo;
+import org.eco.als.domain.vo.ContactsImportVo;
+import org.eco.als.domain.vo.ContactsVo;
+import org.eco.als.service.IContactsService;
+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-11-25
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/als/contacts")
+public class ContactsController extends BaseController {
+    @Resource
+    private IContactsService contactsService;
+
+    /**
+     * 查询通讯录列表
+     */
+    @SaCheckPermission("als:contacts:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<ContactsVo>> list(ContactsBo contactsBo) {
+        return CommonResult.success(contactsService.selectPage(contactsBo));
+    }
+
+    /**
+     * 导出通讯录列表
+     */
+    @SaCheckPermission("als:contacts:export")
+    @Log(title = "通讯录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public CommonResult<Void> export(ContactsBo contactsBo) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        List<ContactsVo> list = contactsService.selectList(contactsBo);
+        if (CollUtil.isEmpty(list)) {
+            return CommonResult.fail("导出列表为空");
+        }
+        contactsService.asyncExport(list, "通讯录", loginUser);
+        return CommonResult.success();
+    }
+
+    @SaCheckPermission("als:contacts:import")
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response) {
+        ExcelUtil.exportExcel(new ArrayList<>(), "通讯录", ContactsImportVo.class, response);
+    }
+
+    /**
+     * 导入通讯录列表
+     */
+    @Log(title = "通讯录", businessType = BusinessType.IMPORT)
+    @SaCheckPermission("als:contacts:import")
+    @PostMapping("/importData")
+    public CommonResult<Void> importData(MultipartFile file, boolean updateSupport) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        contactsService.asyncImportData(file, updateSupport, loginUser);
+        return CommonResult.success();
+    }
+
+    /**
+     * 获取通讯录详细信息
+     */
+    @SaCheckPermission("als:contacts:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<ContactsVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(contactsService.selectById(id));
+    }
+
+    /**
+     * 新增通讯录
+     */
+    @SaCheckPermission("als:contacts:add")
+    @Log(title = "通讯录", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody ContactsBo contactsBo) {
+        boolean inserted = contactsService.insert(contactsBo);
+        if (!inserted) {
+            return CommonResult.fail("新增通讯录记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改通讯录
+     */
+    @SaCheckPermission("als:contacts:edit")
+    @Log(title = "通讯录", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody ContactsBo contactsBo) {
+        boolean updated = contactsService.update(contactsBo);
+        if (!updated) {
+            return CommonResult.fail("修改通讯录记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除通讯录
+     */
+    @SaCheckPermission("als:contacts:remove")
+    @Log(title = "通讯录", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = contactsService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除通讯录记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

+ 22 - 20
als-modules/agile-assurance/src/main/java/org/eco/als/controller/ModelController.java

@@ -4,13 +4,18 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
+import org.eco.als.domain.ModelExportVo;
+import org.eco.als.domain.bo.AirConfigurationBo;
 import org.eco.als.domain.bo.ModelBo;
-import org.eco.als.domain.vo.ModelImportVo;
-import org.eco.als.domain.vo.ModelVo;
+import org.eco.als.domain.vo.*;
+import org.eco.als.listener.AirConfigurationImportListener;
+import org.eco.als.listener.ModelImportListener;
 import org.eco.als.service.IModelService;
 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.core.utils.MapstructUtils;
+import org.eco.common.excel.core.ExcelResult;
 import org.eco.common.excel.utils.ExcelUtil;
 import org.eco.common.log.annotation.Log;
 import org.eco.common.log.enums.BusinessType;
@@ -54,35 +59,32 @@ public class ModelController extends BaseController {
         return CommonResult.success(modelService.selectPage(modelBo));
     }
 
+    @SaCheckPermission("als:model:import")
+    @PostMapping("/importTemplate")
+    public void importTemplate(HttpServletResponse response) {
+        ExcelUtil.exportExcel(new ArrayList<>(), "模型信息", ModelImportVo.class, response);
+    }
+
     /**
-     * 导出模型信息列表
+     * 导出
      */
-    @SaCheckPermission("als:model:export")
     @Log(title = "模型信息", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public CommonResult<Void> export(HttpServletResponse response, ModelBo modelBo) {
-        LoginUser loginUser = LoginHelper.getLoginUser();
+    public void export(HttpServletResponse response, ModelBo modelBo) {
         List<ModelVo> list = modelService.selectList(modelBo);
-        modelService.asyncExport(list, "模型信息", loginUser);
-        return CommonResult.success();
-    }
-
-    @SaCheckPermission("als:model:import")
-    @PostMapping("/importTemplate")
-    public void importTemplate(HttpServletResponse response) {
-        ExcelUtil.exportExcel(new ArrayList<>(), "模型信息", ModelImportVo.class, response);
+        List<ModelExportVo> listVo = MapstructUtils.convert(list, ModelExportVo.class);
+        ExcelUtil.exportExcel(listVo, "模型信息", ModelExportVo.class, response);
     }
 
     /**
-     * 导入模型信息列表
+     * 导入飞机构型列表
      */
-    @Log(title = "模型信息", businessType = BusinessType.IMPORT)
-    @SaCheckPermission("als:model:import")
+    @Log(title = "飞机构型", businessType = BusinessType.IMPORT)
     @PostMapping("/importData")
-    public CommonResult<Void> importData(MultipartFile file, boolean updateSupport) {
+    public CommonResult<Void> syncImportData(MultipartFile file, boolean updateSupport) throws Exception {
         LoginUser loginUser = LoginHelper.getLoginUser();
-        modelService.asyncImportData(file, updateSupport, loginUser);
-        return CommonResult.success();
+        ExcelResult<ModelImportVo> result = ExcelUtil.importExcel(file.getInputStream(), ModelImportVo.class, new ModelImportListener(updateSupport, loginUser));
+        return CommonResult.success(result.getAnalysis().getLogInfo());
     }
 
     /**

+ 63 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/domain/Contacts.java

@@ -0,0 +1,63 @@
+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_contacts_t
+ *
+ * @author wgk
+ * @date 2024-11-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "als_contacts_t")
+public class Contacts extends BaseEntity {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一ID
+     */
+    @Id
+    private Long id;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 地址/链接
+     */
+    private String url;
+
+    /**
+     * 接口
+     */
+    private String port;
+
+    /**
+     * 接口参数
+     */
+    private String parameter;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+    /**
+     * 删除标识(1删除 0未删除)
+     */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+
+}

+ 66 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/domain/ModelExportVo.java

@@ -0,0 +1,66 @@
+package org.eco.als.domain;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.eco.als.domain.vo.AirConfigurationVo;
+import org.eco.als.domain.vo.ModelVo;
+import org.eco.common.excel.convert.ExcelDictConvert;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 模型信息导入视图对象 als_model_t
+ *
+ * @author wgk
+ * @date 2024-07-22
+ */
+
+@Data
+@NoArgsConstructor
+@ExcelIgnoreUnannotated
+@AutoMapper(target = ModelVo.class, convertGenerate = false)
+public class ModelExportVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 模型名称
+     */
+    @ExcelProperty(value = "模型名称")
+    private String name;
+
+    /**
+     * 模型类型
+     */
+    @ExcelProperty(value = "模型类型")
+    private String type;
+
+    /**
+     * 模型链接
+     */
+    @ExcelProperty(value = "模型链接")
+    private String url;
+
+    /**
+     * 参数
+     */
+    @ExcelProperty(value = "参数")
+    private String param;
+
+    /**
+     * 数据列
+     */
+    @ExcelProperty(value = "数据列")
+    private String columnData;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+}

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

@@ -0,0 +1,50 @@
+package org.eco.als.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.eco.als.domain.Contacts;
+import org.eco.common.orm.core.domain.BaseEntity;
+
+/**
+ * 通讯录业务对象 als_contacts_t
+ *
+ * @author wgk
+ * @date 2024-11-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = Contacts.class, reverseConvertGenerate = false)
+public class ContactsBo extends BaseEntity {
+    /**
+     * 唯一ID
+     */
+    private Long id;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 地址/链接
+     */
+    private String url;
+
+    /**
+     * 接口
+     */
+    private String port;
+
+    /**
+     * 接口参数
+     */
+    private String parameter;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+
+}

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

@@ -0,0 +1,88 @@
+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.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 飞机构型导入视图对象 als_air_configuration_t
+ *
+ * @author wgk
+ * @date 2024-11-13
+ */
+
+@Data
+@NoArgsConstructor
+@ExcelIgnoreUnannotated
+@AutoMapper(target = AirConfigurationVo.class, convertGenerate = false)
+public class AirConfigurationExportVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 父Id
+     */
+    @ExcelProperty(value = "父Id")
+    private Long parentId;
+
+    /**
+     * 机型
+     */
+    @ExcelProperty(value = "机型")
+    private String aircraftType;
+
+    /**
+     * 构型编码
+     */
+    @ExcelProperty(value = "构型编码")
+    private String conCode;
+
+    /**
+     * 产品名称
+     */
+    @ExcelProperty(value = "产品名称")
+    private String name;
+
+    /**
+     * 规格型号
+     */
+    @ExcelProperty(value = "规格型号")
+    private String specsModel;
+
+    /**
+     * 图号
+     */
+    @ExcelProperty(value = "图号")
+    private String drawingNumber;
+
+    /**
+     * 供应商
+     */
+    @ExcelProperty(value = "供应商")
+    private String supplier;
+
+    /**
+     * 描述
+     */
+    @ExcelProperty(value = "描述")
+    private String remarks;
+
+    /**
+     * 删除标识(1删除 0未删除)
+     */
+    @ExcelProperty(value = "删除标识(1删除 0未删除)")
+    private Integer delFlag;
+
+
+    /**
+     * 显示顺序
+     */
+    @ExcelProperty(value = "显示顺序")
+    private Integer orderNum;
+}

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

@@ -2,6 +2,7 @@ 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 org.eco.common.excel.annotation.ExcelDictFormat;
 import org.eco.common.excel.convert.ExcelDictConvert;
 import lombok.Data;
@@ -21,6 +22,7 @@ import lombok.NoArgsConstructor;
 @Data
 @NoArgsConstructor
 @ExcelIgnoreUnannotated
+@AutoMapper(target = AirConfigurationVo.class, convertGenerate = false)
 public class AirConfigurationImportVo implements Serializable {
 
     @Serial

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

@@ -0,0 +1,64 @@
+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_contacts_t
+ *
+ * @author wgk
+ * @date 2024-11-25
+ */
+
+@Data
+@NoArgsConstructor
+@ExcelIgnoreUnannotated
+public class ContactsImportVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 名称
+     */
+    @ExcelProperty(value = "名称")
+    private String name;
+
+    /**
+     * 地址/链接
+     */
+    @ExcelProperty(value = "地址/链接")
+    private String url;
+
+    /**
+     * 接口
+     */
+    @ExcelProperty(value = "接口")
+    private String port;
+
+    /**
+     * 接口参数
+     */
+    @ExcelProperty(value = "接口参数")
+    private String parameter;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    /**
+     * 删除标识(1删除 0未删除)
+     */
+    @ExcelProperty(value = "删除标识(1删除 0未删除)")
+    private Integer delFlag;
+
+
+}

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

@@ -0,0 +1,86 @@
+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.Contacts;
+import org.eco.common.orm.core.domain.BaseEntity;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 通讯录视图对象 als_contacts_t
+ *
+ * @author wgk
+ * @date 2024-11-25
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = Contacts.class)
+public class ContactsVo extends BaseEntity implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一ID
+     */
+    @ExcelProperty(value = "唯一ID")
+    private Long id;
+
+    /**
+     * 名称
+     */
+    @ExcelProperty(value = "名称")
+    private String name;
+
+    /**
+     * 地址/链接
+     */
+    @ExcelProperty(value = "地址/链接")
+    private String url;
+
+    /**
+     * 接口
+     */
+    @ExcelProperty(value = "接口")
+    private String port;
+
+    /**
+     * 接口参数
+     */
+    @ExcelProperty(value = "接口参数")
+    private String parameter;
+
+    /**
+     * 备注
+     */
+    @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;
+
+}

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

@@ -36,7 +36,6 @@ public class ModelImportVo implements Serializable {
      * 模型类型
      */
     @ExcelProperty(value = "模型类型", converter = ExcelDictConvert.class)
-    @ExcelDictFormat(dictType = "sys_app_type")
     private String type;
 
     /**
@@ -57,24 +56,9 @@ public class ModelImportVo implements Serializable {
     @ExcelProperty(value = "数据列")
     private String columnData;
 
-    /**
-     * 状态
-     */
-    @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
-    @ExcelDictFormat(dictType = "sys_common_status")
-    private String status;
-
     /**
      * 备注
      */
     @ExcelProperty(value = "备注")
     private String remark;
-
-    /**
-     * 删除标识(1删除 0未删除)
-     */
-    @ExcelProperty(value = "删除标识(1删除 0未删除)")
-    private Integer delFlag;
-
-
 }

+ 15 - 10
als-modules/agile-assurance/src/main/java/org/eco/als/listener/AirConfigurationImportListener.java

@@ -4,18 +4,17 @@ 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 lombok.extern.slf4j.Slf4j;
+import org.eco.als.domain.bo.AirConfigurationBo;
+import org.eco.als.domain.vo.AirConfigurationImportVo;
+import org.eco.als.domain.vo.AirConfigurationVo;
+import org.eco.als.service.IAirConfigurationService;
+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 org.eco.common.core.core.domain.model.LoginUser;
-import org.eco.als.domain.bo.AirConfigurationBo;
-import org.eco.als.domain.vo.AirConfigurationImportVo;
-import org.eco.als.domain.vo.AirConfigurationVo;
-import org.eco.als.service.IAirConfigurationService;
-import lombok.extern.slf4j.Slf4j;
 
 import java.util.List;
 
@@ -87,9 +86,15 @@ public class AirConfigurationImportListener extends AnalysisEventListener<AirCon
 
     private void setBo(AirConfigurationBo airConfigurationBo) {
         airConfigurationBo.setVersion(0);
-        airConfigurationBo.setCreateBy(loginUser.getUserId());
-        airConfigurationBo.setUpdateBy(loginUser.getUserId());
-        airConfigurationBo.setTenantId(loginUser.getTenantId());
+        if (ObjectUtil.isNull(loginUser)) {
+            airConfigurationBo.setCreateBy(1L);
+            airConfigurationBo.setUpdateBy(1L);
+            airConfigurationBo.setTenantId(0L);
+        } else {
+            airConfigurationBo.setUpdateBy(loginUser.getUserId());
+            airConfigurationBo.setCreateBy(loginUser.getUserId());
+            airConfigurationBo.setTenantId(loginUser.getTenantId());
+        }
     }
 
     @Override

+ 128 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/listener/ContactsImportListener.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.ContactsBo;
+import org.eco.als.domain.vo.ContactsImportVo;
+import org.eco.als.domain.vo.ContactsVo;
+import org.eco.als.service.IContactsService;
+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 ContactsImportListener extends AnalysisEventListener<ContactsImportVo> implements ExcelListener<ContactsImportVo> {
+    private final IContactsService contactsService;
+
+    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 ContactsImportListener(Boolean isUpdateSupport, LoginUser loginUser) {
+        this.contactsService = SpringUtils.getBean(IContactsService.class);
+        this.isUpdateSupport = isUpdateSupport;
+        this.loginUser = loginUser;
+    }
+
+    @Override
+    public void invoke(ContactsImportVo contactsVo, AnalysisContext context) {
+        try {
+
+            ContactsBo contactsBo = BeanUtil.toBean(contactsVo, ContactsBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            ContactsVo contactsVo1 = null;
+
+            //contactsVo1 = contactsService.selectBySomefield(contactsVo.getSomefield());
+            if (ObjectUtil.isNull(contactsVo1)) {
+                //不存在就新增
+                setBo(contactsBo);
+                ValidatorUtils.validate(contactsBo);
+                boolean inserted = contactsService.insert(contactsBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、通讯录 记录导入成功");
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、通讯录 记录导入失败");
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                contactsBo.setId(contactsVo1.getId());//主键
+                contactsBo.setVersion(contactsVo1.getVersion());
+                boolean updated = contactsService.update(contactsBo);
+                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(ContactsBo contactsBo) {
+        contactsBo.setVersion(0);
+        contactsBo.setCreateBy(loginUser.getUserId());
+        contactsBo.setUpdateBy(loginUser.getUserId());
+        contactsBo.setTenantId(loginUser.getTenantId());
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        log.info("解析完成");
+    }
+
+    @Override
+    public ExcelResult<ContactsImportVo> 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<ContactsImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 16 - 0
als-modules/agile-assurance/src/main/java/org/eco/als/mapper/ContactsMapper.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.Contacts;
+
+/**
+ * 通讯录Mapper接口
+ *
+ * @author wgk
+ * @date 2024-11-25
+ */
+@Mapper
+public interface ContactsMapper extends BaseMapper<Contacts> {
+
+}

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

@@ -21,6 +21,8 @@ public interface IAlgorithmService {
     String batchExecute(TaskBo taskBo);
 
     List<String> getDataHeader(Long ossId);
+
     String getDataByOssId(Long ossId);
+
     String executeQa(QaBo qaBo);
 }

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

@@ -0,0 +1,97 @@
+package org.eco.als.service;
+
+import org.eco.als.domain.Contacts;
+import org.eco.als.domain.bo.ContactsBo;
+import org.eco.als.domain.vo.ContactsVo;
+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-11-25
+ */
+public interface IContactsService extends IBaseService<Contacts> {
+    /**
+     * 查询通讯录
+     *
+     * @param id 通讯录主键
+     * @return 通讯录
+     */
+    ContactsVo selectById(Long id);
+
+    /**
+     * 查询通讯录列表
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 通讯录集合
+     */
+    List<ContactsVo> selectList(ContactsBo contactsBo);
+
+    /**
+     * 分页查询通讯录列表
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 分页通讯录集合
+     */
+    PageResult<ContactsVo> selectPage(ContactsBo contactsBo);
+
+    /**
+     * 新增通讯录
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean insert(ContactsBo contactsBo);
+
+    /**
+     * 新增通讯录,前台提供主键值,一般用于导入的场合
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean insertWithPk(ContactsBo contactsBo);
+
+    /**
+     * 修改通讯录
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    boolean update(ContactsBo contactsBo);
+
+    /**
+     * 批量删除通讯录
+     *
+     * @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<ContactsVo> listVo, String sheetName, LoginUser user);
+
+}

+ 2 - 2
als-modules/agile-assurance/src/main/java/org/eco/als/service/impl/AirInstallServiceImpl.java

@@ -56,10 +56,10 @@ public class AirInstallServiceImpl extends BaseServiceImpl<AirInstallMapper, Air
 
     private QueryWrapper buildQueryWrapper(AirInstallBo airInstallBo) {
         QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
-        if(CollUtil.isNotEmpty(airInstallBo.getAirIds())) {
+        if (CollUtil.isNotEmpty(airInstallBo.getAirIds())) {
             queryWrapper.and(AIR_INSTALL.AIR_ID.in(airInstallBo.getAirIds()));
         }
-        if(CollUtil.isNotEmpty(airInstallBo.getAirModelIds())) {
+        if (CollUtil.isNotEmpty(airInstallBo.getAirModelIds())) {
             queryWrapper.and(AIR_INSTALL.AIR_MODEL_ID.in(airInstallBo.getAirModelIds()));
         }
         queryWrapper.and(AIR_INSTALL.AIR_ID.eq(airInstallBo.getAirId()));

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

@@ -0,0 +1,189 @@
+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.Contacts;
+import org.eco.als.domain.bo.ContactsBo;
+import org.eco.als.domain.vo.ContactsImportVo;
+import org.eco.als.domain.vo.ContactsVo;
+import org.eco.als.listener.ContactsImportListener;
+import org.eco.als.mapper.ContactsMapper;
+import org.eco.als.service.IContactsService;
+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.ContactsTableDef.CONTACTS;
+
+/**
+ * 通讯录Service业务层处理
+ *
+ * @author wgk
+ * @date 2024-11-25
+ */
+@Service
+@Slf4j
+public class ContactsServiceImpl extends BaseServiceImpl<ContactsMapper, Contacts> implements IContactsService {
+    @Resource
+    private ContactsMapper contactsMapper;
+
+    @Resource
+    private IExcelService excelService;
+
+    @Resource
+    private IImportExportService importExportService;
+
+    @Override
+    public QueryWrapper query() {
+        return super.query().from(CONTACTS);
+    }
+
+    private QueryWrapper buildQueryWrapper(ContactsBo contactsBo) {
+        QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
+        queryWrapper.and(CONTACTS.NAME.like
+            (contactsBo.getName()));
+        queryWrapper.and(CONTACTS.URL.eq
+            (contactsBo.getUrl()));
+        queryWrapper.and(CONTACTS.PORT.eq
+            (contactsBo.getPort()));
+        queryWrapper.and(CONTACTS.PARAMETER.eq
+            (contactsBo.getParameter()));
+        queryWrapper.and(CONTACTS.REMARKS.eq
+            (contactsBo.getRemarks()));
+
+        return queryWrapper;
+    }
+
+    /**
+     * 查询通讯录
+     *
+     * @param id 通讯录主键
+     * @return 通讯录
+     */
+    @Override
+    public ContactsVo selectById(Long id) {
+        return this.getOneAs(query().where(CONTACTS.ID.eq(id)), ContactsVo.class);
+
+    }
+
+
+    /**
+     * 查询通讯录列表
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 通讯录集合
+     */
+    @Override
+    public List<ContactsVo> selectList(ContactsBo contactsBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(contactsBo);
+        return this.listAs(queryWrapper, ContactsVo.class);
+    }
+
+    /**
+     * 分页查询通讯录列表
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 分页通讯录集合
+     */
+    @Override
+    public PageResult<ContactsVo> selectPage(ContactsBo contactsBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(contactsBo);
+        Page<ContactsVo> page = this.pageAs(PageQuery.build(), queryWrapper, ContactsVo.class);
+        return PageResult.build(page);
+    }
+
+    /**
+     * 新增通讯录
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    @Override
+    public boolean insert(ContactsBo contactsBo) {
+        Contacts contacts = MapstructUtils.convert(contactsBo, Contacts.class);
+
+        return this.save(contacts);//使用全局配置的雪花算法主键生成器生成ID值
+    }
+
+    /**
+     * 新增通讯录,前台提供主键值,一般用于导入的场合
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    @Override
+    public boolean insertWithPk(ContactsBo contactsBo) {
+        Contacts contacts = MapstructUtils.convert(contactsBo, Contacts.class);
+
+
+        return contactsMapper.insertWithPk(contacts) > 0;//前台传来主键值
+    }
+
+    /**
+     * 修改通讯录
+     *
+     * @param contactsBo 通讯录Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    @Override
+    public boolean update(ContactsBo contactsBo) {
+        Contacts contacts = MapstructUtils.convert(contactsBo, Contacts.class);
+        if (ObjectUtil.isNotNull(contacts) && ObjectUtil.isNotNull(contacts.getId())) {
+            boolean updated = this.updateById(contacts);
+            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, ContactsImportVo.class, new ContactsImportListener(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<ContactsVo> listVo, String sheetName, LoginUser loginUser) {
+        ExcelResultRes result = excelService.exportExcel(listVo, sheetName, ContactsVo.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));
+    }
+
+}

+ 3 - 3
als-modules/agile-assurance/src/main/java/org/eco/als/utils/CsvUtils.java

@@ -40,11 +40,11 @@ public class CsvUtils {
      * 编码文件名
      */
     public static final String extractFilename(String fileName) {
-        return StringUtils.format("{}_{}.{}", fileName, Seq.getId(Seq.uploadSeqType),
-            CSV_TYPE);
+        return StringUtils.format("{}_{}.{}", fileName, Seq.getId(Seq.uploadSeqType), CSV_TYPE);
     }
+
     public static final String getName(String fileName) {
-        return StringUtils.format("{}.{}", fileName,CSV_TYPE);
+        return StringUtils.format("{}.{}", fileName, CSV_TYPE);
     }
 
     public static final String getFilename(String fileName) {

+ 7 - 0
als-modules/agile-assurance/src/main/resources/mapper/als/ContactsMapper.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.ContactsMapper">
+
+</mapper>