package com.gkhy.exam.system.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.gkhy.exam.common.api.CommonPage; import com.gkhy.exam.common.api.CommonResult; import com.gkhy.exam.common.domain.entity.SysDept; 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.InternalAuditCheck; import com.gkhy.exam.system.domain.InternalAuditCheckCatalogue; import com.gkhy.exam.system.domain.InternalAuditCheckContent; import com.gkhy.exam.system.domain.InternalAuditCheckPerson; import com.gkhy.exam.system.domain.vo.InternalAuditCheckVo; import com.gkhy.exam.system.mapper.*; import com.gkhy.exam.system.service.InternalAuditCheckService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** *

* 内审检查 服务实现类 *

* * @author hh * @since 2025-07-10 15:11:50 */ @Service public class InternalAuditCheckServiceImpl extends ServiceImpl implements InternalAuditCheckService { @Autowired private InternalAuditCheckMapper internalAuditCheckMapper; @Autowired private InternalAuditCheckCatalogueMapper checkCatalogueMapper; @Autowired private InternalAuditCheckContentMapper checkContentMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private SysDeptMapper sysDeptMapper; @Override public CommonPage selectInternalAuditCheckList(Integer companyId) { PageUtils.startPage(); List internalAuditChecks = internalAuditCheckMapper.selectInternalAuditCheckList(companyId); if (!CollectionUtils.isEmpty(internalAuditChecks)) { batchLoadCheckDetails(internalAuditChecks); } return CommonPage.restPage(internalAuditChecks); } private void batchLoadCheckDetails(List checks) { //收集所有检查ID List checkIds = checks.stream() .map(InternalAuditCheck::getId) .collect(Collectors.toList()); //批量查询所有目录 List allCatalogues = checkCatalogueMapper.selectByCheckIds(checkIds); if (CollectionUtils.isEmpty(allCatalogues)) { return; } //收集所有目录ID List catalogueIds = allCatalogues.stream() .map(InternalAuditCheckCatalogue::getId) .collect(Collectors.toList()); //批量查询所有内容 List allContents = checkContentMapper.selectByCatalogueIds(catalogueIds); //按目录ID分组内容 Map> contentMap = allContents.stream() .collect(Collectors.groupingBy(InternalAuditCheckContent::getCheckCatalogueId)); //按检查ID分组目录 Map> catalogueMap = allCatalogues.stream() .collect(Collectors.groupingBy(InternalAuditCheckCatalogue::getCheckId)); //组装数据 for (InternalAuditCheck check : checks) { List catalogues = catalogueMap.get(check.getId()); if (!CollectionUtils.isEmpty(catalogues)) { for (InternalAuditCheckCatalogue catalogue : catalogues) { List contents = contentMap.get(catalogue.getId()); catalogue.setCheckContents(contents != null ? contents : new ArrayList<>()); } check.setCheckCatalogues(catalogues); } } } @Override @Transactional public CommonResult insertInternalAuditCheck(InternalAuditCheck internalAuditCheck) { Map 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 internalAuditChecks = internalAuditCheckMapper.selectByMap(stringObjectHashMap); if (!CollectionUtils.isEmpty(internalAuditChecks)){ return CommonResult.failed("当前部门存在,请勿重复添加"); } internalAuditCheck.setCreateBy(SecurityUtils.getUsername()); internalAuditCheck.setCreateTime(LocalDateTime.now()); int insert = internalAuditCheckMapper.insert(internalAuditCheck); if (insert <= 0) { return CommonResult.failed("新增内审检查失败"); } //处理目录和内容的插入 List checkCatalogues = internalAuditCheck.getCheckCatalogues(); if (CollectionUtils.isEmpty(checkCatalogues)) { return CommonResult.success(); } //批量处理目录和内容 batchInsertCataloguesAndContents(internalAuditCheck.getId(), checkCatalogues); return CommonResult.success(); } private void batchInsertCataloguesAndContents(Integer checkId, List catalogues) { // 1. 设置目录的检查ID并批量插入 for (InternalAuditCheckCatalogue catalogue : catalogues) { catalogue.setCheckId(checkId); } // 批量插入目录 int catalogueInsertCount = checkCatalogueMapper.insertBatch(catalogues); if (catalogueInsertCount != catalogues.size()) { throw new RuntimeException("插入目录记录数量不匹配"); } // 2. 收集所有内容并设置目录ID List allContents = new ArrayList<>(); for (int i = 0; i < catalogues.size(); i++) { InternalAuditCheckCatalogue catalogue = catalogues.get(i); List contents = catalogue.getCheckContents(); if (!CollectionUtils.isEmpty(contents)) { for (InternalAuditCheckContent content : contents) { content.setCheckCatalogueId(catalogue.getId()); } allContents.addAll(contents); } } // 3. 批量插入内容 if (!CollectionUtils.isEmpty(allContents)) { int contentInsertCount = checkContentMapper.insertBatchs(allContents); if (contentInsertCount != allContents.size()) { throw new RuntimeException("插入内容记录数量不匹配"); } } } @Override public CommonResult updateInternalAuditCheck(InternalAuditCheck internalAuditCheck) { internalAuditCheck.setUpdateBy(SecurityUtils.getUsername()); internalAuditCheck.setUpdateTime(LocalDateTime.now()); int update = internalAuditCheckMapper.updateById(internalAuditCheck); if (update>0){ checkCatalogueMapper.updatebyCheckId(internalAuditCheck.getId()); List checkCatalogues = internalAuditCheck.getCheckCatalogues(); if (CollectionUtils.isEmpty(checkCatalogues)) { return CommonResult.success(); } batchInsertCataloguesAndContents(internalAuditCheck.getId(), checkCatalogues); return CommonResult.success(); } return CommonResult.failed(); } @Override @Transactional public CommonResult deletedInternalAuditCheck(Integer id) { InternalAuditCheck internalAuditCheck = new InternalAuditCheck(); internalAuditCheck.setId(id); internalAuditCheck.setUpdateBy(SecurityUtils.getUsername()); internalAuditCheck.setUpdateTime(LocalDateTime.now()); internalAuditCheck.setDelFlag(2); int update = internalAuditCheckMapper.updateById(internalAuditCheck); 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 checkCatalogues = internalAuditCheck.getCheckCatalogues(); batchInsertCataloguesAndContents(internalAuditCheck.getId(), checkCatalogues); } return CommonResult.success(); } @Override public List selectByMap(Map stringObjectHashMap) { return internalAuditCheckMapper.selectByMap(stringObjectHashMap); } // @Override // public CommonResult internalAuditCheckInfo(Integer id) { // InternalAuditCheck internalAuditCheck = internalAuditCheckMapper.selectById(id); // // InternalAuditCheckVo internalAuditCheckVo = new InternalAuditCheckVo(); // BeanUtils.copyProperties(internalAuditCheck,internalAuditCheckVo); // internalAuditCheckVo.setDeptName(sysDeptMapper.selectDeptById(internalAuditCheck.getDeptId()).getDeptName()); // internalAuditCheckVo.setAuditName(sysUserMapper.selectById(internalAuditCheck.getAuditId()).getName()); // LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); // queryWrapper.eq(InternalAuditCheckPerson::getAuditId, id); // queryWrapper.eq(InternalAuditCheckPerson::getDelFlag, 0); // List internalAuditCheckPeople = internalAuditCheckPersonMapper.selectList(queryWrapper); // internalAuditCheckVo.setInternalAuditCheckPeople(internalAuditCheckPeople); // // return CommonResult.success(internalAuditCheckVo); // } }