package cn.huge.module.cases.service; import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.DateUtils; import cn.huge.base.common.utils.IdUtils; import cn.huge.module.cases.domain.dto.RepeatCaseInfoDTO; import cn.huge.module.cases.domain.po.*; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.cases.dao.mapper.CaseRepeatMapper; import cn.huge.module.cust.dto.CtUserDTO; import cn.huge.module.mediate.constant.CaseBaseConstsEnum; import cn.huge.module.mediate.constant.CaseInfoProcessBaseConstsEnum; import cn.huge.module.mediate.constant.CaseProcessBaseConstsEnum; import cn.huge.module.mediate.constant.CaseStatusBaseConstsEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Maps; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @title: dyh_case_repeat业务逻辑处理 * @Description dyh_case_repeat业务逻辑处理 * @company hugeinfo * @author liyj * @Time 2024-12-26 11:16:47 * @version 1.0.0 */ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class CaseRepeatService extends ServiceImpl{ @Autowired private CaseRepeatMapper mapper; @Autowired private UtilsClientImpl utilsClient; @Autowired private CaseInfoService caseInfoService; @Autowired private CaseInfoUnfoldService caseInfoUnfoldService; @Autowired private CasePersonService casePersonService; @Autowired private CaseAgentService caseAgentService; /** * 更新对象 * @param entity 对象 */ public void updateCaseRepeat(CaseRepeat entity){ try{ mapper.updateCaseRepeat(entity); }catch (Exception e){ log.error("[CaseRepeatService.updateCaseRepeat]调用失败,异常信息:"+e, e); throw new ServiceException("CaseRepeatService.updateCaseRepeat", e); } } /** * 条件更新对象 * @param entity 对象 * @param terms 条件 */ public void updateCaseRepeatTerms(CaseRepeat entity, Map terms){ try{ mapper.updateCaseRepeatTerms(entity, terms); }catch (Exception e){ log.error("[CaseRepeatService.updateCaseRepeatTerms]调用失败,异常信息:"+e, e); throw new ServiceException("CaseRepeatService.updateCaseRepeatTerms", e); } } /** * 根据编号物理删除 * @param id 查询条件集合 */ public void deleteCaseRepeat(String id){ try{ mapper.deleteCaseRepeat(id); }catch (Exception e){ log.error("[CaseRepeatService.deleteCaseRepeat]调用失败,异常信息:"+e, e); throw new ServiceException("CaseRepeatService.deleteCaseRepeat", e); } } /** * 按条件查询 * @param terms 条件 * @return List */ public List listTerms(Map terms){ return mapper.listTerms(terms); } /** * 按条件统计 * @param terms 条件 * @return long */ public long countTerms(Map terms){ return mapper.countTerms(terms); } /** * 按条件分页查询 * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageQuery(PageRequest page, Map terms){ long total = mapper.countTerms(terms); List content = mapper.pageTerms(page, terms); return new PageImpl(content, page, total); } /** * 新增或更新对象 * @param caseRepeat 实体对象 */ public void saveCaseRepeat(CaseRepeat caseRepeat){ try{ Date nowDate = DateUtils.getNowDate(); // 判断是否新增 if (IdUtils.checkNewId(caseRepeat.getId())){ caseRepeat.setId(utilsClient.getNewTimeId()); caseRepeat.setCreateTime(nowDate); } caseRepeat.setUpdateTime(nowDate); this.saveOrUpdate(caseRepeat); }catch (Exception e){ log.error("[CaseRepeatService.saveCaseRepeat]调用失败,异常信息:"+e, e); throw new ServiceException("CaseRepeatService.saveCaseRepeat", e); } } /** * 创建重复记录 * @param newCaseId 新案件编号 * @param repeatCaseIdList 重复案件编号 * @param loginUser 操作人 */ public void createRepeatCase(String newCaseId, List repeatCaseIdList, CtUserDTO loginUser){ try{ // 查询主案件编号 CaseInfo mainCaseInfo = null; if (repeatCaseIdList.size() == 1){ mainCaseInfo = caseInfoService.getById(repeatCaseIdList.get(0)); }else { QueryWrapper caseInfoQueryWrapper = new QueryWrapper<>(); caseInfoQueryWrapper.select("id", "status", "status_name", "process", "process_name", "info_process", "info_process_name") .in("id", repeatCaseIdList).orderByAsc("create_time"); List caseInfoList = caseInfoService.list(caseInfoQueryWrapper); mainCaseInfo = caseInfoList.get(0); } // 创建重复记录 CaseRepeat caseRepeat = new CaseRepeat(); caseRepeat.setId(utilsClient.getNewTimeId()); caseRepeat.setCaseId(newCaseId); caseRepeat.setCaseMainId(mainCaseInfo.getId()); caseRepeat.setOperUserId(loginUser.getId()); caseRepeat.setOperUserName(loginUser.getTrueName()); caseRepeat.setCreateTime(DateUtils.getNowDate()); caseRepeat.setUpdateTime(DateUtils.getNowDate()); this.save(caseRepeat); // 更新新案件状态-与主案件状态一致 // CaseInfo caseInfoPO = new CaseInfo(); // caseInfoPO.setId(newCaseId); // caseInfoPO.setStatus(mainCaseInfo.getStatus()); // caseInfoPO.setStatusName(mainCaseInfo.getStatusName()); // caseInfoPO.setProcess(mainCaseInfo.getProcess()); // caseInfoPO.setProcessName(mainCaseInfo.getProcessName()); // caseInfoPO.setInfoProcess(mainCaseInfo.getInfoProcess()); // caseInfoPO.setInfoProcessName(mainCaseInfo.getInfoProcessName()); // caseInfoService.updateCaseInfo(caseInfoPO); }catch (Exception e){ log.error("[CaseRepeatService.saveCaseRepeat]调用失败,异常信息:"+e, e); throw new ServiceException("CaseRepeatService.saveCaseRepeat", e); } } /** * 查询重复事项 * @param caseId * @return */ public List listRepeatCase(String caseId){ List cseIdList = new ArrayList<>(); QueryWrapper caseRepeatQueryWrapper = new QueryWrapper<>(); caseRepeatQueryWrapper.eq("case_main_id", caseId); List caseRepeatList = mapper.selectList(caseRepeatQueryWrapper); // 判断是否是主案件 if (CollectionUtils.isNotEmpty(caseRepeatList)){ // 是主案件,获取重复案件编号 for (CaseRepeat caseRepeat : caseRepeatList){ cseIdList.add(caseRepeat.getCaseId()); } } // 查询非主案件的重复案件,先查询主案件 caseRepeatQueryWrapper.clear(); caseRepeatQueryWrapper.select("case_main_id").eq("case_id", caseId).groupBy("case_main_id"); List mainCaseRepeatList = mapper.selectList(caseRepeatQueryWrapper); if (CollectionUtils.isNotEmpty(mainCaseRepeatList)) { caseRepeatList = new ArrayList<>(); for (CaseRepeat mainCaseRepeat : mainCaseRepeatList) { // 获取主案件编号 cseIdList.add(mainCaseRepeat.getCaseMainId()); // 查询主案件的重复案件 caseRepeatQueryWrapper.clear(); caseRepeatQueryWrapper.eq("case_main_id", mainCaseRepeat.getCaseMainId()); List caseRepeats = mapper.selectList(caseRepeatQueryWrapper); caseRepeatList.addAll(caseRepeats); } // 过滤自己的重复案件 for (CaseRepeat caseRepeat : caseRepeatList){ // 获取其他重复案件 if (!caseId.equals(caseRepeat.getCaseId())) { cseIdList.add(caseRepeat.getCaseId()); } } } // 封装重复案件信息 List repeatCaseInfoDTOList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(cseIdList)) { QueryWrapper caseInfoQueryWrapper = new QueryWrapper<>(); caseInfoQueryWrapper.in("id", cseIdList); List caseInfoList = caseInfoService.list(caseInfoQueryWrapper); if (CollectionUtils.isNotEmpty(caseInfoList)) { for (CaseInfo caseInfo : caseInfoList) { RepeatCaseInfoDTO repeatCaseInfoDTO = new RepeatCaseInfoDTO(); BeanUtils.copyProperties(caseInfo, repeatCaseInfoDTO); repeatCaseInfoDTO.setDataSource(CaseBaseConstsEnum.getDataSourceByCanal(caseInfo.getCanal()).getIndex()); repeatCaseInfoDTO.setDataSourceName(CaseBaseConstsEnum.getDataSourceByCanal(caseInfo.getCanal()).getDes()); // 查询申请方、被申请方当事人信息 QueryWrapper casePersonQueryWrapper = new QueryWrapper<>(); casePersonQueryWrapper.select("id", "per_type", "true_name", "orga_code", "certi_no").eq("case_id", caseInfo.getId()); List casePersonList = casePersonService.list(casePersonQueryWrapper); List plaintiffs = new ArrayList<>(); List defendants = new ArrayList<>(); for (CasePerson casePerson : casePersonList) { if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())) { plaintiffs.add(casePerson); // 查询代理人信息 QueryWrapper caseAgentQueryWrapper = new QueryWrapper<>(); caseAgentQueryWrapper.select("id", "per_type", "true_name", "certi_no").like("person_id", casePerson.getId()); List caseAgentList = caseAgentService.list(caseAgentQueryWrapper); if (CollectionUtils.isNotEmpty(caseAgentList)) { for (CaseAgent caseAgent : caseAgentList) { plaintiffs.add(caseAgent); } } } else if (CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())) { defendants.add(casePerson); // 查询代理人信息 QueryWrapper caseAgentQueryWrapper = new QueryWrapper<>(); caseAgentQueryWrapper.select("id", "per_type", "true_name", "certi_no").like("person_id", casePerson.getId()); List caseAgentList = caseAgentService.list(caseAgentQueryWrapper); if (CollectionUtils.isNotEmpty(caseAgentList)) { for (CaseAgent caseAgent : caseAgentList) { defendants.add(caseAgent); } } } } repeatCaseInfoDTO.setPlaintiffs(plaintiffs); repeatCaseInfoDTO.setDefendants(defendants); // 查询承办/配合部门、经办人 CaseInfoUnfold caseInfoUnfold = caseInfoUnfoldService.getById(caseInfo.getId()); repeatCaseInfoDTO.setMediator(caseInfoUnfold.getMediator()); repeatCaseInfoDTO.setMediateUnitName(caseInfoUnfold.getMediateUnitName()); repeatCaseInfoDTO.setAssistUnitName(caseInfoUnfold.getAssistUnitName()); repeatCaseInfoDTOList.add(repeatCaseInfoDTO); } } } return repeatCaseInfoDTOList; } /** * 判断是否有重复案件 * @param caseId * @return */ public boolean checkRepeatCase(String caseId){ List cseIdList = new ArrayList<>(); QueryWrapper caseRepeatQueryWrapper = new QueryWrapper<>(); caseRepeatQueryWrapper.eq("case_main_id", caseId).or().eq("case_id", caseId); int repeatCaseCount = mapper.selectCount(caseRepeatQueryWrapper); if (repeatCaseCount > 0){ return true; }else { return false; } } }