From 57527ccc31b1ba518036abfaa5e9a55ad3f97e12 Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: Tue, 02 Dec 2025 15:58:09 +0800
Subject: [PATCH] 修改内审

---
 multi-system/src/main/java/com/gkhy/exam/system/domain/SysClauseManagement.java                 |    3 
 multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCarryDept.java              |    3 
 multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheck.java                  |   15 +
 multi-system/src/main/resources/mapper/system/InternalAuditCheckMapper.xml                      |   11 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/InternalAuditCheckMapper.java            |    1 
 multi-system/src/main/java/com/gkhy/exam/system/service/InternalAuditCheckService.java          |    7 
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCarryServiceImpl.java |  332 +++++++++++++++++++++++++++++++++++++++++
 multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheckCatalogue.java         |   14 +
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCheckServiceImpl.java |   36 ++++
 multi-system/src/main/resources/mapper/system/InternalAuditCheckCatalogueMapper.xml             |   10 
 10 files changed, 417 insertions(+), 15 deletions(-)

diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCarryDept.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCarryDept.java
index f2b664a..2f95e5d 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCarryDept.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCarryDept.java
@@ -33,6 +33,9 @@
     private Integer deptId;
 
     @TableField(exist = false)
+    private String deptNumber;
+
+    @TableField(exist = false)
     private String deptName;
 
     @ApiModelProperty(value = "日期")
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheck.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheck.java
index 3dda9ca..e11ec92 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheck.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheck.java
@@ -37,6 +37,9 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
+    @TableField("year")
+    private String year;
+
     @ApiModelProperty("企业id")
     @TableField("company_id")
     private Integer companyId;
@@ -57,8 +60,18 @@
 
     @ApiModelProperty("审核时间")
     @TableField("check_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate checkTime;
+
+    @ApiModelProperty(value = "开始时间")
+    @TableField("start_time")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime checkTime;
+    private LocalDateTime startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    @TableField("end_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
 
     @TableField("del_flag")
     private Integer delFlag;
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheckCatalogue.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheckCatalogue.java
index 17b0eca..cffe4d1 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheckCatalogue.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/InternalAuditCheckCatalogue.java
@@ -11,6 +11,7 @@
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.Objects;
 
 @Getter
 @Setter
@@ -41,6 +42,19 @@
     private Integer delFlag;
 
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        InternalAuditCheckCatalogue that = (InternalAuditCheckCatalogue) o;
+        return Objects.equals(catalogueId, that.catalogueId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(catalogueId);
+    }
+
     @TableField(exist = false)
     private List<InternalAuditCheckContent> checkContents;
 
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/SysClauseManagement.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/SysClauseManagement.java
index d96eddf..f8b02eb 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/domain/SysClauseManagement.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/SysClauseManagement.java
@@ -24,6 +24,9 @@
     @NotBlank(message = "条款编码不能为空")
     private String clauseNum;
 
+    @ApiModelProperty("审核要点")
+    private String points;
+
     /** 删除标志(0代表存在 2代表删除) */
     private String delFlag;
 
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/InternalAuditCheckMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/InternalAuditCheckMapper.java
index 5a79bab..2e086d9 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/mapper/InternalAuditCheckMapper.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/InternalAuditCheckMapper.java
@@ -23,4 +23,5 @@
     int getStatisticData(@Param("companyId") Integer companyId, @Param("startTime") String startTime, @Param("endTime") String endTime);
 
 
+    Integer updateByYearAndDeptId(InternalAuditCheck internalAuditCheck);
 }
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/InternalAuditCheckService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/InternalAuditCheckService.java
index bb77139..386aa48 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/InternalAuditCheckService.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/InternalAuditCheckService.java
@@ -7,6 +7,9 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gkhy.exam.system.domain.vo.InternalAuditCheckVo;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 内审检查 服务类
@@ -24,5 +27,9 @@
 
     CommonResult deletedInternalAuditCheck(Integer id);
 
+    CommonResult updateByYearAndDeptId(InternalAuditCheck internalAuditCheck);
+
+    List<InternalAuditCheck> selectByMap(Map<String, Object> stringObjectHashMap);
+
 //    CommonResult internalAuditCheckInfo(Integer id);
 }
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCarryServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCarryServiceImpl.java
index 8521dca..75a943e 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCarryServiceImpl.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCarryServiceImpl.java
@@ -7,16 +7,26 @@
 import com.gkhy.exam.common.exception.ApiException;
 import com.gkhy.exam.common.utils.PageUtils;
 import com.gkhy.exam.common.utils.SecurityUtils;
-import com.gkhy.exam.system.domain.InternalAuditCarry;
-import com.gkhy.exam.system.domain.InternalAuditCarryDept;
+import com.gkhy.exam.system.domain.*;
+import com.gkhy.exam.system.domain.vo.DeptDetialVo;
 import com.gkhy.exam.system.mapper.InternalAuditCarryMapper;
+import com.gkhy.exam.system.mapper.InternalAuditCheckCatalogueMapper;
+import com.gkhy.exam.system.mapper.InternalAuditCheckContentMapper;
+import com.gkhy.exam.system.mapper.SysClauseManagementMapper;
 import com.gkhy.exam.system.service.InternalAuditCarryService;
+import com.gkhy.exam.system.service.InternalAuditCheckService;
 import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.List;
+import java.time.LocalTime;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Service
 public class InternalAuditCarryServiceImpl extends ServiceImpl<InternalAuditCarryMapper, InternalAuditCarry> implements InternalAuditCarryService {
@@ -24,6 +34,21 @@
 
     @Autowired
     private InternalAuditCarryMapper carryMapper;
+
+    @Autowired
+    private InternalAuditCheckService internalAuditCheckService;
+
+    @Autowired
+    private SysClauseManagementMapper sysClauseManagementMapper;
+
+    @Autowired
+    private InternalAuditCheckCatalogueMapper checkCatalogueMapper;
+
+    @Autowired
+    private InternalAuditCheckContentMapper checkContentMapper;
+
+    @Autowired
+    private SysDeptServiceImpl sysDeptService;
 
     @Override
     public CommonPage selectCarryList(InternalAuditCarry carry) {
@@ -59,6 +84,98 @@
             internalAuditCarryDept.setCarryId(carry.getId());
         }
         carryMapper.insertCarryDept(deptList);
+
+        saveInternalAuditCheck(carry);
+
+        return CommonResult.success();
+    }
+
+    private CommonResult saveInternalAuditCheck(InternalAuditCarry carry) {
+        // 2. 空指针防护:避免deptList为null导致循环NPE
+        List<InternalAuditCarryDept> deptList = carry.getDeptList();
+        if (CollectionUtils.isEmpty(deptList)) {
+            return CommonResult.success();
+        }
+
+        for (InternalAuditCarryDept internalAuditCarryDept : deptList) {
+            // 3. 跳过空的部门项,避免后续NPE
+            if (internalAuditCarryDept == null) {
+                continue;
+            }
+
+            InternalAuditCheck internalAuditCheck = new InternalAuditCheck();
+            // 基础字段赋值(保留原逻辑,无改动)
+            internalAuditCheck.setCompanyId(carry.getCompanyId());
+            internalAuditCheck.setYear(carry.getYear());
+            internalAuditCheck.setDeptId(internalAuditCarryDept.getDeptId());
+            internalAuditCheck.setPersonId(internalAuditCarryDept.getCheckId());
+            internalAuditCheck.setCheckTime(internalAuditCarryDept.getDate());
+
+            // 4. 时间字段安全赋值:避免date/startTime/endTime为null导致atTime()报错
+            LocalDate checkDate = internalAuditCarryDept.getDate();
+            LocalTime startTime = internalAuditCarryDept.getStartTime();
+            LocalTime endTime = internalAuditCarryDept.getEndTime();
+            if (checkDate != null && startTime != null) {
+                internalAuditCheck.setStartTime(checkDate.atTime(startTime));
+            }
+            if (checkDate != null && endTime != null) {
+                internalAuditCheck.setEndTime(checkDate.atTime(endTime));
+            }
+
+            // 5. 部门ID转换安全处理:避免非数字字符串导致NumberFormatException
+            Integer deptId1 = internalAuditCarryDept.getDeptId();
+            Long deptId;
+            try {
+                deptId = Long.valueOf(deptId1);
+            } catch (NumberFormatException e) {
+                continue;
+            }
+
+            // 6. 查询结果空防护:避免deptDetialVo为null导致后续getSysDeptResponsibilitys()报错
+            DeptDetialVo deptDetialVo = sysDeptService.selectDeptById(deptId);
+            if (deptDetialVo == null) {
+                continue;
+            }
+
+            List<SysDeptResponsibility> sysDeptResponsibilitys = deptDetialVo.getSysDeptResponsibilitys();
+            List<InternalAuditCheckCatalogue> internalAuditCheckCatalogues = new ArrayList<>();
+            // 7. 责任项列表空防护:避免循环null集合
+            if (!CollectionUtils.isEmpty(sysDeptResponsibilitys)) {
+                for (SysDeptResponsibility sysDeptResponsibility : sysDeptResponsibilitys) {
+                    if (sysDeptResponsibility == null) {
+                        continue;
+                    }
+
+                    InternalAuditCheckCatalogue internalAuditCheckCatalogue = new InternalAuditCheckCatalogue();
+                    // 8. clauseId安全转换:避免null导致Math.toIntExact()报错
+                    Long clauseId = sysDeptResponsibility.getClauseId();
+                    if (clauseId != null) {
+                        internalAuditCheckCatalogue.setCatalogueId(Math.toIntExact(clauseId));
+                    } else {
+                        continue;
+                    }
+
+                    // 9. 条款查询结果空防护:避免sysClauseManagement为null导致getPoints()报错
+                    SysClauseManagement sysClauseManagement = sysClauseManagementMapper.selectById(clauseId);
+                    if (sysClauseManagement == null) {
+                        continue;
+                    }
+
+                    // 简化集合创建(原逻辑不变,仅优化初始化)
+                    List<InternalAuditCheckContent> internalAuditCheckContents = new ArrayList<>();
+                    InternalAuditCheckContent internalAuditCheckContent = new InternalAuditCheckContent();
+                    internalAuditCheckContent.setPointKey(sysClauseManagement.getPoints());
+                    internalAuditCheckContents.add(internalAuditCheckContent);
+
+                    internalAuditCheckCatalogue.setCheckContents(internalAuditCheckContents);
+                    internalAuditCheckCatalogues.add(internalAuditCheckCatalogue);
+                }
+            }
+
+            internalAuditCheck.setCheckCatalogues(internalAuditCheckCatalogues);
+
+            internalAuditCheckService.insertInternalAuditCheck(internalAuditCheck);
+        }
         return CommonResult.success();
     }
 
@@ -73,9 +190,218 @@
         }
         Integer i = carryMapper.deletedCarryDeptByCarryId(carry.getId());
         carryMapper.insertCarryDept(deptList);
+
+        updateInternalAuditCheck(carry);
         return CommonResult.success();
     }
 
+    private CommonResult updateInternalAuditCheck(InternalAuditCarry carry) {
+        // 2. 空指针防护:避免deptList为null导致循环NPE
+        List<InternalAuditCarryDept> deptList = carry.getDeptList();
+        if (CollectionUtils.isEmpty(deptList)) {
+            log.warn("保存/更新内部审计检查:部门列表为空,companyId={}, year={}");
+            return CommonResult.success();
+        }
+
+        for (InternalAuditCarryDept internalAuditCarryDept : deptList) {
+            // 3. 跳过空的部门项,避免后续NPE
+            if (internalAuditCarryDept == null) {
+                log.warn("保存/更新内部审计检查:部门项为null,跳过");
+                continue;
+            }
+
+            InternalAuditCheck internalAuditCheck = new InternalAuditCheck();
+            // 基础字段赋值(保留原逻辑不变)
+            internalAuditCheck.setCompanyId(carry.getCompanyId());
+            internalAuditCheck.setYear(carry.getYear());
+            internalAuditCheck.setDeptId(internalAuditCarryDept.getDeptId());
+            internalAuditCheck.setPersonId(internalAuditCarryDept.getCheckId());
+            internalAuditCheck.setCheckTime(internalAuditCarryDept.getDate());
+
+            // 4. 时间字段安全赋值:避免date/startTime/endTime为null导致atTime()报错
+            LocalDate checkDate = internalAuditCarryDept.getDate();
+            LocalTime startTime = internalAuditCarryDept.getStartTime();
+            LocalTime endTime = internalAuditCarryDept.getEndTime();
+            if (checkDate != null && startTime != null) {
+                internalAuditCheck.setStartTime(checkDate.atTime(startTime));
+            } else {
+                log.warn("保存/更新内部审计检查:开始时间构造失败(日期/时段为空),deptId={}");
+            }
+            if (checkDate != null && endTime != null) {
+                internalAuditCheck.setEndTime(checkDate.atTime(endTime));
+            } else {
+                log.warn("保存/更新内部审计检查:结束时间构造失败(日期/时段为空),deptId={}");
+            }
+
+            // 5. 部门ID转换安全处理:避免非数字字符串导致NumberFormatException
+            Integer deptIdStr = internalAuditCarryDept.getDeptId();
+
+            Long deptId;
+            try {
+                deptId = Long.valueOf(deptIdStr);
+            } catch (NumberFormatException e) {
+                continue;
+            }
+
+            // 6. 查询部门详情空防护:避免deptDetialVo为null导致后续NPE
+            DeptDetialVo deptDetialVo = sysDeptService.selectDeptById(deptId);
+            if (deptDetialVo == null) {
+                log.warn("保存/更新内部审计检查:未查询到部门详情,deptId={}");
+                continue;
+            }
+            List<SysDeptResponsibility> sysDeptResponsibilitys = deptDetialVo.getSysDeptResponsibilitys();
+
+            List<InternalAuditCheckCatalogue> internalAuditCheckCatalogues = new ArrayList<>();
+
+            // 7. 构建查询条件(保留原逻辑,仅优化日志)
+            Map<String, Object> queryMap = new HashMap<>();
+            queryMap.put("dept_id", internalAuditCheck.getDeptId());
+            queryMap.put("year", internalAuditCheck.getYear());
+            queryMap.put("company_id", internalAuditCheck.getCompanyId());
+            queryMap.put("del_flag", 0);
+            List<InternalAuditCheck> internalAuditChecks = internalAuditCheckService.selectByMap(queryMap);
+            log.debug("保存/更新内部审计检查:查询已有记录,条件={},查询结果数={}");
+
+
+
+            // 9. 循环构建新检查项(增加多层空防护)
+            if (!CollectionUtils.isEmpty(sysDeptResponsibilitys)) {
+                for (SysDeptResponsibility sysDeptResponsibility : sysDeptResponsibilitys) {
+                    if (sysDeptResponsibility == null) {
+                        log.warn("保存/更新内部审计检查:部门责任项为null,跳过");
+                        continue;
+                    }
+
+                    // 防护:clauseId为空跳过,避免Math.toIntExact()报错
+                    Long clauseId = sysDeptResponsibility.getClauseId();
+                    if (clauseId == null) {
+                        log.warn("保存/更新内部审计检查:条款ID为空,跳过该责任项");
+                        continue;
+                    }
+
+                    InternalAuditCheckCatalogue catalogue = new InternalAuditCheckCatalogue();
+                    catalogue.setCatalogueId(Math.toIntExact(clauseId));
+
+                    // 防护:条款查询为空跳过,避免getPoints()报错
+                    SysClauseManagement clauseManagement = sysClauseManagementMapper.selectById(clauseId);
+                    if (clauseManagement == null) {
+                        continue;
+                    }
+
+                    // 构建检查内容(保留原逻辑)
+                    List<InternalAuditCheckContent> checkContents = new ArrayList<>();
+                    InternalAuditCheckContent content = new InternalAuditCheckContent();
+                    content.setPointKey(clauseManagement.getPoints());
+                    checkContents.add(content);
+                    catalogue.setCheckContents(checkContents);
+
+                    internalAuditCheckCatalogues.add(catalogue);
+                }
+            } else {
+                log.debug("保存/更新内部审计检查:部门无责任项,deptId={}");
+            }
+
+            // 8. 批量加载详情 + 合并已有检查项(关键防护:避免internalAuditChecks为空导致get(0)索引越界)
+            if (!CollectionUtils.isEmpty(internalAuditChecks)) {
+                batchLoadCheckDetails(internalAuditChecks);
+                InternalAuditCheck firstCheck = internalAuditChecks.get(0);
+                List<InternalAuditCheckCatalogue> existingCatalogues = firstCheck.getCheckCatalogues();
+
+                // 仅当旧数据非空、且新数据已存在时,才筛选合并旧数据
+                if (!CollectionUtils.isEmpty(existingCatalogues) && !internalAuditCheckCatalogues.isEmpty()) {
+                    // 提取新数据的所有catalogue_id(用Set实现O(1)快速匹配)
+                    Set<Integer> newCatalogueIds = internalAuditCheckCatalogues.stream()
+                            .map(InternalAuditCheckCatalogue::getCatalogueId)
+                            .collect(Collectors.toSet());
+
+                    // 筛选旧数据:仅保留与新数据catalogue_id匹配的记录(避免无用旧数据)
+                    List<InternalAuditCheckCatalogue> matchedOldCatalogues = existingCatalogues.stream()
+                            .filter(oldCata -> newCatalogueIds.contains(oldCata.getCatalogueId()))
+                            .collect(Collectors.toList());
+
+                    // 合并筛选后的旧数据(新数据已在列表中,旧数据仅加匹配项)
+                    internalAuditCheckCatalogues.addAll(matchedOldCatalogues);
+                } else if (CollectionUtils.isEmpty(internalAuditCheckCatalogues)) {
+                    log.warn("保存/更新内部审计检查:无新构建的检查项,不合并旧数据,deptId={}, year={}");
+                } else {
+                    log.warn("保存/更新内部审计检查:已有记录无检查项,deptId={}, year={}");
+                }
+            }
+
+// 去重优化:按catalogue_id可靠去重(核心修改:替代distinct(),避免依赖equals/hashCode)
+            List<InternalAuditCheckCatalogue> uniqueCatalogues = internalAuditCheckCatalogues.stream()
+                    .collect(Collectors.toMap(
+                            InternalAuditCheckCatalogue::getCatalogueId, // 唯一键:catalogue_id(确保去重逻辑)
+                            Function.identity(), // 值:检查项对象
+                            (oldVal, newVal) -> newVal // 冲突策略:保留新数据(如需保留旧数据,改为oldVal)
+                    ))
+                    .values()
+                    .stream()
+                    .collect(Collectors.toList());
+
+// 最终设置(新数据全部保留,旧数据仅保留匹配项)
+            internalAuditCheck.setCheckCatalogues(uniqueCatalogues);
+            internalAuditCheck.setCheckCatalogues(uniqueCatalogues);
+
+            // 新增/更新判断(保留原逻辑,增加日志)
+            if (CollectionUtils.isEmpty(internalAuditChecks)) {
+
+                internalAuditCheckService.insertInternalAuditCheck(internalAuditCheck);
+            } else {
+                InternalAuditCheck existingCheck = internalAuditChecks.get(0);
+                internalAuditCheck.setId(existingCheck.getId());
+                internalAuditCheckService.updateByYearAndDeptId(internalAuditCheck);
+            }
+        }
+
+        return CommonResult.success();
+    }
+
+
+
+    private void batchLoadCheckDetails(List<InternalAuditCheck> checks) {
+        //收集所有检查ID
+        List<Integer> checkIds = checks.stream()
+                .map(InternalAuditCheck::getId)
+                .collect(Collectors.toList());
+
+        //批量查询所有目录
+        List<InternalAuditCheckCatalogue> allCatalogues = checkCatalogueMapper.selectByCheckIds(checkIds);
+
+        if (CollectionUtils.isEmpty(allCatalogues)) {
+            return;
+        }
+
+        //收集所有目录ID
+        List<Integer> catalogueIds = allCatalogues.stream()
+                .map(InternalAuditCheckCatalogue::getId)
+                .collect(Collectors.toList());
+
+        //批量查询所有内容
+        List<InternalAuditCheckContent> allContents = checkContentMapper.selectByCatalogueIds(catalogueIds);
+
+        //按目录ID分组内容
+        Map<Integer, List<InternalAuditCheckContent>> contentMap = allContents.stream()
+                .collect(Collectors.groupingBy(InternalAuditCheckContent::getCheckCatalogueId));
+
+        //按检查ID分组目录
+        Map<Integer, List<InternalAuditCheckCatalogue>> catalogueMap = allCatalogues.stream()
+                .collect(Collectors.groupingBy(InternalAuditCheckCatalogue::getCheckId));
+
+        //组装数据
+        for (InternalAuditCheck check : checks) {
+            List<InternalAuditCheckCatalogue> catalogues = catalogueMap.get(check.getId());
+            if (!CollectionUtils.isEmpty(catalogues)) {
+                for (InternalAuditCheckCatalogue catalogue : catalogues) {
+                    List<InternalAuditCheckContent> contents = contentMap.get(catalogue.getId());
+                    catalogue.setCheckContents(contents != null ? contents : new ArrayList<>());
+                }
+                check.setCheckCatalogues(catalogues);
+            }
+        }
+    }
+
+
     @Override
     public CommonResult deletedCarry(Integer carryId) {
         InternalAuditCarry internalAuditCarry = new InternalAuditCarry();
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCheckServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCheckServiceImpl.java
index ffffc8d..82fbd3a 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCheckServiceImpl.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/InternalAuditCheckServiceImpl.java
@@ -24,10 +24,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -109,6 +106,18 @@
     @Override
     @Transactional
     public CommonResult insertInternalAuditCheck(InternalAuditCheck internalAuditCheck) {
+
+        Map<String, Object> stringObjectHashMap = new HashMap<>();
+        stringObjectHashMap.put("dept_id",internalAuditCheck.getDeptId());
+        stringObjectHashMap.put("year",internalAuditCheck.getYear());
+        stringObjectHashMap.put("company_id",internalAuditCheck.getCompanyId());
+        stringObjectHashMap.put("del_flag",0);
+        List<InternalAuditCheck> internalAuditChecks = internalAuditCheckMapper.selectByMap(stringObjectHashMap);
+        if (!CollectionUtils.isEmpty(internalAuditChecks)){
+            return CommonResult.failed("当前部门存在,请勿重复添加");
+        }
+
+
         internalAuditCheck.setCreateBy(SecurityUtils.getUsername());
         internalAuditCheck.setCreateTime(LocalDateTime.now());
         int insert = internalAuditCheckMapper.insert(internalAuditCheck);
@@ -192,6 +201,25 @@
         return CommonResult.success();
     }
 
+    @Override
+    public CommonResult updateByYearAndDeptId(InternalAuditCheck internalAuditCheck) {
+
+        internalAuditCheck.setUpdateBy(SecurityUtils.getUsername());
+        internalAuditCheck.setUpdateTime(LocalDateTime.now());
+        Integer update = internalAuditCheckMapper.updateByYearAndDeptId(internalAuditCheck);
+        if (update>0){
+            checkCatalogueMapper.updatebyCheckId(internalAuditCheck.getId());
+            List<InternalAuditCheckCatalogue> checkCatalogues = internalAuditCheck.getCheckCatalogues();
+            batchInsertCataloguesAndContents(internalAuditCheck.getId(), checkCatalogues);
+        }
+        return CommonResult.success();
+    }
+
+    @Override
+    public List<InternalAuditCheck> selectByMap(Map<String, Object> stringObjectHashMap) {
+        return internalAuditCheckMapper.selectByMap(stringObjectHashMap);
+    }
+
 //    @Override
 //    public CommonResult internalAuditCheckInfo(Integer id) {
 //        InternalAuditCheck internalAuditCheck = internalAuditCheckMapper.selectById(id);
diff --git a/multi-system/src/main/resources/mapper/system/InternalAuditCheckCatalogueMapper.xml b/multi-system/src/main/resources/mapper/system/InternalAuditCheckCatalogueMapper.xml
index f1bfa59..114eec0 100644
--- a/multi-system/src/main/resources/mapper/system/InternalAuditCheckCatalogueMapper.xml
+++ b/multi-system/src/main/resources/mapper/system/InternalAuditCheckCatalogueMapper.xml
@@ -23,16 +23,20 @@
             iacc.`id`,
             iacc.`check_id`,
             iacc.`catalogue_id`,
-            c.number,
-            c.mess,
+            c.`clause_num` as number,
+            c.`name` as mess,
             iacc.`del_flag`
         FROM
             `internal_audit_check_catalogue` iacc
-            LEFT JOIN catalogue c ON iacc.catalogue_id = c.id
+            LEFT JOIN sys_clause_management c ON iacc.catalogue_id = c.id
         WHERE iacc.check_id IN
             <foreach collection="checkIds" item="id" open="(" separator="," close=")">
                 #{id}
             </foreach>
         AND iacc.del_flag = 0
+        ORDER BY
+        CAST( SUBSTRING_INDEX( number, '.', 1 ) AS UNSIGNED ) ASC,
+        CAST( IFNULL( SUBSTRING_INDEX( SUBSTRING_INDEX( number, '.', 2 ), '.', - 1 ), 0 ) AS UNSIGNED ) ASC,
+        CAST( IFNULL( SUBSTRING_INDEX( SUBSTRING_INDEX( number, '.', 3 ), '.', - 1 ), 0 ) AS UNSIGNED ) ASC;
     </select>
 </mapper>
diff --git a/multi-system/src/main/resources/mapper/system/InternalAuditCheckMapper.xml b/multi-system/src/main/resources/mapper/system/InternalAuditCheckMapper.xml
index 04aa843..4856e2f 100644
--- a/multi-system/src/main/resources/mapper/system/InternalAuditCheckMapper.xml
+++ b/multi-system/src/main/resources/mapper/system/InternalAuditCheckMapper.xml
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.gkhy.exam.system.mapper.InternalAuditCheckMapper">
+    <update id="updateByYearAndDeptId">
+        update internal_audit_check set person_id = #{personId} ,start_time = #{startTime},end_time = #{endTime} where year = #{year} and dept_id = #{deptId} and company_id = #{companyId}
+    </update>
 
 
     <select id="selectInternalAuditCheckList" resultType="com.gkhy.exam.system.domain.InternalAuditCheck">
@@ -12,6 +15,9 @@
             iac.`person_id`,
             es.`name` as person_name,
             iac.`check_time`,
+            iac.`start_time`,
+            iac.`end_time`,
+            iac.`year`,
             iac.`del_flag`,
             iac.`create_by`,
             iac.`create_time`,
@@ -20,7 +26,7 @@
         FROM
             `internal_audit_check` iac
                 LEFT JOIN sys_dept sd ON iac.dept_id = sd.dept_id
-                LEFT JOIN ex_student es on iac.person_id = es.id
+                LEFT JOIN sys_user es on iac.person_id = es.id
         WHERE
             iac.del_flag = 0
         <if test="companyId!=null">
@@ -29,10 +35,7 @@
         ORDER BY
             iac.create_time DESC
     </select>
-    <select id="selectAuditCheckCatalogue"
-            resultType="com.gkhy.exam.system.domain.InternalAuditCheckCatalogue">
 
-    </select>
 
 
     <select id ="getStatisticData" resultType="int">

--
Gitblit v1.9.2