| | |
| | | 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 { |
| | |
| | | |
| | | @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) { |
| | |
| | | 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)); |
| | | } |
| | | |
| | | // 查询结果空防护:避免deptDetialVo为null导致后续getSysDeptResponsibilitys()报错 |
| | | DeptDetialVo deptDetialVo = sysDeptService.selectDeptById(Long.valueOf(internalAuditCarryDept.getDeptId())); |
| | | 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(); |
| | | |
| | | // 9. 条款查询结果空防护:避免sysClauseManagement为null导致getPoints()报错 |
| | | SysClauseManagement sysClauseManagement = sysClauseManagementMapper.selectById(clauseId); |
| | | if (sysClauseManagement == null) { |
| | | continue; |
| | | } |
| | | internalAuditCheckCatalogue.setCatalogueId(Math.toIntExact(clauseId)); |
| | | internalAuditCheckCatalogue.setPointKey(sysClauseManagement.getPoints()); |
| | | internalAuditCheckCatalogues.add(internalAuditCheckCatalogue); |
| | | } |
| | | } |
| | | |
| | | internalAuditCheck.setCheckCatalogues(internalAuditCheckCatalogues); |
| | | |
| | | internalAuditCheckService.insertInternalAuditCheck(internalAuditCheck); |
| | | } |
| | | return CommonResult.success(); |
| | | } |
| | | |
| | |
| | | } |
| | | Integer i = carryMapper.deletedCarryDeptByCarryId(carry.getId()); |
| | | carryMapper.insertCarryDept(deptList); |
| | | |
| | | updateInternalAuditCheck(carry); |
| | | return CommonResult.success(); |
| | | } |
| | | |
| | | private CommonResult updateInternalAuditCheck(InternalAuditCarry carry) { |
| | | List<InternalAuditCarryDept> deptList = carry.getDeptList(); |
| | | if (CollectionUtils.isEmpty(deptList)) { |
| | | return CommonResult.success(); |
| | | } |
| | | for (InternalAuditCarryDept internalAuditCarryDept : deptList) { |
| | | 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()); |
| | | 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)); |
| | | } |
| | | // 6. 查询部门详情空防护:避免deptDetialVo为null导致后续NPE |
| | | DeptDetialVo deptDetialVo = sysDeptService.selectDeptById(Long.valueOf(internalAuditCarryDept.getDeptId())); |
| | | if (deptDetialVo == null) { |
| | | 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); |
| | | List<InternalAuditCheckCatalogue> checkCatalogues = new ArrayList<>(); |
| | | if (!CollectionUtils.isEmpty(internalAuditChecks)){ |
| | | batchLoadCheckDetails(internalAuditChecks); |
| | | checkCatalogues = internalAuditChecks.get(0).getCheckCatalogues(); |
| | | } |
| | | // 循环构建新检查项 |
| | | if (!CollectionUtils.isEmpty(sysDeptResponsibilitys)) { |
| | | for (SysDeptResponsibility sysDeptResponsibility : sysDeptResponsibilitys) { |
| | | if (sysDeptResponsibility == null) { |
| | | continue; |
| | | } |
| | | InternalAuditCheckCatalogue catalogue = new InternalAuditCheckCatalogue(); |
| | | catalogue.setCatalogueId(Math.toIntExact(sysDeptResponsibility.getClauseId())); |
| | | SysClauseManagement clauseManagement = sysClauseManagementMapper.selectById(sysDeptResponsibility.getClauseId()); |
| | | if (clauseManagement == null) { |
| | | continue; |
| | | } |
| | | catalogue.setPointKey(clauseManagement.getPoints()); |
| | | if (!CollectionUtils.isEmpty(checkCatalogues)){ |
| | | for (InternalAuditCheckCatalogue checkCatalogue : checkCatalogues) { |
| | | if (checkCatalogue.getCatalogueId().equals(catalogue.getCatalogueId())){ |
| | | catalogue.setFind(checkCatalogue.getFind()); |
| | | // catalogue.setPointKey(checkCatalogue.getPointKey()); |
| | | catalogue.setResult(checkCatalogue.getResult()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | internalAuditCheckCatalogues.add(catalogue); |
| | | } |
| | | } |
| | | internalAuditCheck.setCheckCatalogues(internalAuditCheckCatalogues); |
| | | // 新增/更新判断(保留原逻辑,增加日志) |
| | | 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()); |
| | | |
| | | if (CollectionUtils.isEmpty(checkIds)){ |
| | | return; |
| | | } |
| | | //批量查询所有目录 |
| | | List<InternalAuditCheckCatalogue> allCatalogues = checkCatalogueMapper.selectByCheckIds(checkIds); |
| | | if (CollectionUtils.isEmpty(allCatalogues)) { |
| | | return; |
| | | } |
| | | //按检查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)) { |
| | | check.setCheckCatalogues(catalogues); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public CommonResult deletedCarry(Integer carryId) { |
| | | InternalAuditCarry internalAuditCarry = new InternalAuditCarry(); |