package cn.huge.module.draft.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.base.common.utils.ObjectUtils; import cn.huge.module.cases.domain.dto.CaseInfoDTO; import cn.huge.module.cases.domain.dto.RegisterSaveDTO; import cn.huge.module.cases.domain.po.CaseAgent; import cn.huge.module.cases.domain.po.CaseInfo; import cn.huge.module.cases.domain.po.CaseInfoUnfold; import cn.huge.module.client.api.impl.CustClientImpl; import cn.huge.module.client.api.impl.SysClientImpl; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.constant.BaseConsts; import cn.huge.module.mediate.constant.CaseBaseConsts; import cn.huge.module.mediate.constant.CaseBaseConstsEnum; import cn.huge.module.cust.dto.CtUserDTO; import cn.huge.module.draft.dao.mapper.CasedraftInfoMapper; import cn.huge.module.draft.domain.dto.CasedraftInfoDTO; import cn.huge.module.draft.domain.dto.DraftRegisterSaveDTO; import cn.huge.module.draft.domain.po.CasedraftAgent; import cn.huge.module.draft.domain.po.CasedraftInfo; import cn.huge.module.draft.domain.po.CasedraftPerson; import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO; import cn.huge.module.sys.dto.FileTypeTermsDTO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; 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.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; /** * @title: 纠纷信息草稿表业务逻辑处理 * @Description 纠纷信息草稿表业务逻辑处理 * @company hugeinfo * @author wangwh * @Time 2024-08-27 10:48:18 * @version 1.0.0 */ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class CasedraftInfoService extends ServiceImpl{ @Autowired private CasedraftInfoMapper mapper; @Autowired private UtilsClientImpl utilsClient; @Autowired private CasedraftPersonService draftPersonService; @Autowired private CasedraftAgentService draftAgentService; @Autowired private CustClientImpl custClient; @Autowired private SysClientImpl sysClient; /** * 更新对象 * @param entity 对象 */ public void updateCasedraftInfo(CasedraftInfo entity){ try{ mapper.updateCasedraftInfo(entity); }catch (Exception e){ log.error("[CasedraftInfoService.updateCasedraftInfo]调用失败,异常信息:"+e, e); throw new ServiceException("CasedraftInfoService.updateCasedraftInfo", e); } } /** * 条件更新对象 * @param entity 对象 * @param terms 条件 */ public void updateCasedraftInfoTerms(CasedraftInfo entity, Map terms){ try{ mapper.updateCasedraftInfoTerms(entity, terms); }catch (Exception e){ log.error("[CasedraftInfoService.updateCasedraftInfoTerms]调用失败,异常信息:"+e, e); throw new ServiceException("CasedraftInfoService.updateCasedraftInfoTerms", e); } } /** * 根据编号物理删除 * @param id 查询条件集合 */ public void deleteCasedraftInfo(String id){ try{ mapper.deleteCasedraftInfo(id); }catch (Exception e){ log.error("[CasedraftInfoService.deleteCasedraftInfo]调用失败,异常信息:"+e, e); throw new ServiceException("CasedraftInfoService.deleteCasedraftInfo", 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,String userId){ CtUserDTO loginUser = custClient.clientGetUserAll(userId); terms.put("inputUnitId", loginUser.getUnitId()); long total = mapper.countTerms(terms); List content = mapper.pageTerms(page, terms); return new PageImpl(content, page, total); } /** * 新增或更新对象 * @param casedraftInfo 实体对象 */ public void saveCasedraftInfo(CasedraftInfo casedraftInfo){ try{ Date nowDate = DateUtils.getNowDate(); // 判断是否新增 if (IdUtils.checkNewId(casedraftInfo.getId())){ casedraftInfo.setId(utilsClient.getNewTimeId()); casedraftInfo.setCreateTime(nowDate); } casedraftInfo.setUpdateTime(nowDate); this.saveOrUpdate(casedraftInfo); }catch (Exception e){ log.error("[CasedraftInfoService.saveCasedraftInfo]调用失败,异常信息:"+e, e); throw new ServiceException("CasedraftInfoService.saveCasedraftInfo", e); } } /** * PC端-纠纷登记-保存纠纷草稿信息 * @param draftRegisterSaveDTO 纠纷草稿信息 * @param userId 操作人 * @return String 纠纷编号 */ public String caseDraftRegister(DraftRegisterSaveDTO draftRegisterSaveDTO, String userId){ try { // 获取当前登录用户 CtUserDTO loginUser = custClient.clientGetUserAll(userId); Date nowDate = DateUtils.getNowDate(); StringBuffer plaintiffs = new StringBuffer(); StringBuffer defendants = new StringBuffer(); StringBuffer pagents = new StringBuffer(); StringBuffer dagents = new StringBuffer(); CasedraftInfo casedraftInfo = new CasedraftInfo(); BeanUtils.copyProperties(draftRegisterSaveDTO, casedraftInfo); casedraftInfo.setInputUnitId(loginUser.getUnitId()); casedraftInfo.setInputUnitName(loginUser.getUnitName()); casedraftInfo.setInputUserId(loginUser.getId()); casedraftInfo.setInputUserName(loginUser.getTrueName()); //默认添加省市 casedraftInfo.setQueProv("19"); casedraftInfo.setQueProvName("广东省"); casedraftInfo.setQueCity("1601"); casedraftInfo.setQueCityName("广州市"); casedraftInfo.setCustId(loginUser.getCustId()); casedraftInfo.setUpdateTime(nowDate); // 常规登记-保存当事人 this.saveCaseDraftPerson(draftRegisterSaveDTO, plaintiffs, pagents, defendants, dagents); casedraftInfo.setPlaintiffs(plaintiffs.toString()); casedraftInfo.setPagents(pagents.toString()); casedraftInfo.setDefendants(defendants.toString()); casedraftInfo.setDagents(dagents.toString()); this.saveOrUpdate(casedraftInfo); return draftRegisterSaveDTO.getId(); }catch (Exception e){ log.error("service方法[CaseInfoService.caseDraftRegister]调用异常:"+e, e); throw new ServiceException("CaseInfoService.caseDraftRegister", e); } } /** * pc端-常规登记-保存草稿案件-保存人员信息 * @param draftRegisterSaveDTO 纠纷信息 * @param plaintiffs 申请人 * @param pagents 申请人代理人 * @param defendants 被申请人 * @param dagents 被申请人代理人 * @return int */ private void saveCaseDraftPerson(DraftRegisterSaveDTO draftRegisterSaveDTO, StringBuffer plaintiffs, StringBuffer pagents, StringBuffer defendants, StringBuffer dagents){ Date now = DateUtils.getNowDate(); List casedraftPersonList = draftRegisterSaveDTO.getPersonList(); List casedraftAgentList = draftRegisterSaveDTO.getAgentList(); //查出已存在的当事人和代理人编号 List oldPersonIdList = draftPersonService.listIdByCaseId(draftRegisterSaveDTO.getId()); List oldAgentIdList = draftAgentService.listIdByCaseId(draftRegisterSaveDTO.getId()); String oldPersonIds = oldPersonIdList.stream().map(String::valueOf).collect(Collectors.joining(",")); String oldAgentIds = oldAgentIdList.stream().map(String::valueOf).collect(Collectors.joining(",")); List newPersonIdList = new ArrayList<>(); List newAgentIdList = new ArrayList<>(); if(CollectionUtils.isNotEmpty(casedraftPersonList)){ for(CasedraftPerson casedraftPerson: casedraftPersonList){ newPersonIdList.add(casedraftPerson.getId()); casedraftPerson.setCaseId(draftRegisterSaveDTO.getId()); casedraftPerson.setCustId(draftRegisterSaveDTO.getCustId()); casedraftPerson.setUpdateTime(now); //添加申请方和被申请方人名组合 if(CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casedraftPerson.getPerType())){ //申请方 if (StringUtils.isNotEmpty(plaintiffs.toString())) { plaintiffs.append(BaseConsts.COMMA); } plaintiffs.append(casedraftPerson.getTrueName()); }else if(CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casedraftPerson.getPerType())){ //被申请方 if (StringUtils.isNotEmpty(defendants.toString())) { defendants.append(BaseConsts.COMMA); } defendants.append(casedraftPerson.getTrueName()); } //判断是否为更新(用原有的Id对比性的Id) if(oldPersonIds.contains(casedraftPerson.getId())){ draftPersonService.updateById(casedraftPerson); }else{ casedraftPerson.setCreateTime(now); draftPersonService.save(casedraftPerson); } } } if(CollectionUtils.isNotEmpty(casedraftAgentList)) { for (CasedraftAgent casedraftAgent : casedraftAgentList) { newAgentIdList.add(casedraftAgent.getId()); casedraftAgent.setCaseId(draftRegisterSaveDTO.getId()); casedraftAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(casedraftAgent.getAgentType())); casedraftAgent.setCustId(draftRegisterSaveDTO.getCustId()); casedraftAgent.setUpdateTime(now); if(CaseBaseConstsEnum.PERSON_TYPE_3.getIndex().equals(casedraftAgent.getPerType())) { if (StringUtils.isNotEmpty(pagents.toString())) { pagents.append(BaseConsts.COMMA); } pagents.append(casedraftAgent.getTrueName()); }else if(CaseBaseConstsEnum.PERSON_TYPE_4.getIndex().equals(casedraftAgent.getPerType())) { if (StringUtils.isNotEmpty(dagents.toString())) { dagents.append(BaseConsts.COMMA); } dagents.append(casedraftAgent.getTrueName()); } //判断是否为更新(用原有的Id对比性的Id) if(oldAgentIds.contains(casedraftAgent.getId())){ draftAgentService.updateById(casedraftAgent); }else{ casedraftAgent.setCreateTime(now); draftAgentService.save(casedraftAgent); } } } // 删除冗余的申请人(用新的Id对比旧的Id) if (CollectionUtils.isNotEmpty(newPersonIdList)) { for (String oldPersonId : oldPersonIdList) { if (!newPersonIdList.contains(oldPersonId)) { draftPersonService.removeById(oldPersonId); } } }else{ QueryWrapper casePersonQueryWrapper = new QueryWrapper<>(); casePersonQueryWrapper.eq("case_id", draftRegisterSaveDTO.getId()); draftPersonService.remove(casePersonQueryWrapper); } //删除冗余的代理人 if(CollectionUtils.isNotEmpty(newAgentIdList)){ for(String oldAgentId: oldAgentIdList){ if(!newAgentIdList.contains(oldAgentId)){ draftAgentService.removeById(oldAgentId); } } }else{ QueryWrapper caseAgentQueryWrapper = new QueryWrapper<>(); caseAgentQueryWrapper.eq("case_id", draftRegisterSaveDTO.getId()); draftAgentService.remove(caseAgentQueryWrapper); } } /** * PC端-纠纷登记-草稿箱-删除纠纷草稿案件 * @param caseId 纠纷/系列案编号 * @return CaseInfo 纠纷信息 */ public void removeDraftInfo(String caseId){ try{ // 删除纠纷草稿信息 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", caseId); List draftInfoList = mapper.selectList(queryWrapper); List ownerIdList = new ArrayList<>(); for (CasedraftInfo casedraftInfo : draftInfoList) { ownerIdList.add(casedraftInfo.getId()); mapper.deleteById(casedraftInfo.getId()); // 删除当事人信息 QueryWrapper casedraftPersonQueryWrapper = new QueryWrapper<>(); casedraftPersonQueryWrapper.eq("case_id", casedraftInfo.getId()); draftPersonService.remove(casedraftPersonQueryWrapper); // 删除代理人信息 QueryWrapper casedraftAgentQueryWrapper = new QueryWrapper<>(); casedraftAgentQueryWrapper.eq("case_id", casedraftInfo.getId()); //todo 删除附件关系 FileTypeTermsDTO fileTypeTermsDTO = new FileTypeTermsDTO(); fileTypeTermsDTO.setOwnerIdList(ownerIdList); sysClient.removeFileRelate(fileTypeTermsDTO); } }catch (Exception e){ log.error("service方法[CasedraftInfoService.removeDraftInfo]调用异常:"+e, e); throw new ServiceException("CasedraftInfoService.removeDraftInfo", e); } } /** * PC端-查询纠纷信息 * @param caseId 纠纷编号 * @return CaseInfo 纠纷信息 */ public CasedraftInfoDTO getCasedraftInfo(String caseId){ CasedraftInfo casedraftInfo = mapper.selectById(caseId); CasedraftInfoDTO caseInfoDTO = new CasedraftInfoDTO(); if (ObjectUtils.isNotEmpty(casedraftInfo)) { BeanUtils.copyProperties(casedraftInfo, caseInfoDTO); //查询所有当事人 QueryWrapper draftPersonQueryWrapper = new QueryWrapper<>(); draftPersonQueryWrapper.eq("case_id", caseId); List casePersonList = draftPersonService.list(draftPersonQueryWrapper); //查询所有代理人 QueryWrapper casedraftAgentQueryWrapper = new QueryWrapper<>(); casedraftAgentQueryWrapper.eq("case_id", caseId); List caseAgentList = draftAgentService.list(casedraftAgentQueryWrapper); List idList = new ArrayList<>(); idList.add(caseId); idList.addAll(casePersonList.stream().map(CasedraftPerson::getId).collect(Collectors.toList())); idList.addAll(caseAgentList.stream().map(CasedraftAgent::getId).collect(Collectors.toList())); String ids = idList.stream().map(String::valueOf).collect(Collectors.joining("','")); ids = "'"+ ids + "'"; Map term = new HashMap<>(); term.put("mainId", caseId); term.put("ownerIds", ids); //查询所有附件 List fileInfoList = sysClient.listIdTypeInfoByOwnerIdList(term); //把附件根据编号放入 for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){ if(caseId.equals(fileInfo.getOwnerId())){ caseInfoDTO.setFileInfoList(fileInfo.getFileList()); } } for(CasedraftPerson casePerson: casePersonList){ for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){ if(casePerson.getId().equals(fileInfo.getOwnerId())){ casePerson.setFileInfoList(fileInfo.getFileList()); } } } for(CasedraftAgent caseAgent: caseAgentList){ for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){ if(caseAgent.getId().equals(fileInfo.getOwnerId())){ caseAgent.setFileInfoList(fileInfo.getFileList()); } } } caseInfoDTO.setPersonList(casePersonList); caseInfoDTO.setAgentList(caseAgentList); } return caseInfoDTO; } public void deleteCaseDraft(Serializable id){ CasedraftInfo casedraftInfo = mapper.selectById(id); if(ObjectUtils.isNotEmpty(casedraftInfo)){ List oldPersonIdList = draftPersonService.listIdByCaseId(casedraftInfo.getId()); List oldAgentIdList = draftAgentService.listIdByCaseId(casedraftInfo.getId()); if(ObjectUtils.isNotEmpty(oldPersonIdList)){ draftPersonService.removeByIds(oldPersonIdList); } if(ObjectUtils.isNotEmpty(oldAgentIdList)){ draftAgentService.removeByIds(oldAgentIdList); } mapper.deleteById(id); } } }