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.base.common.utils.ObjectUtils; import cn.huge.module.cases.domain.dto.RegisterSaveDTO; import cn.huge.module.cases.domain.po.CaseAgent; import cn.huge.module.cases.domain.po.CaseInfoUnfold; import cn.huge.module.cases.domain.po.CasePerson; import cn.huge.module.client.api.impl.CustClientImpl; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.cases.dao.mapper.CaseInfoMapper; import cn.huge.module.cases.domain.po.CaseInfo; import cn.huge.module.constant.BaseConsts; import cn.huge.module.constant.CaseBaseConsts; import cn.huge.module.constant.CaseBaseConstsEnum; import cn.huge.module.cust.dto.CtUserDTO; 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.draft.service.CasedraftInfoService; 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.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: 纠纷信息主表业务逻辑处理 * @Description 纠纷信息主表业务逻辑处理 * @company hugeinfo * @author wangwh * @Time 2024-08-27 10:00:57 * @version 1.0.0 */ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class CaseInfoService extends ServiceImpl{ @Autowired private CaseInfoMapper mapper; @Autowired private UtilsClientImpl utilsClient; @Autowired private CasedraftInfoService draftInfoService; @Autowired private CasePersonService personService; @Autowired private CaseAgentService agentService; @Autowired private CustClientImpl custClient; /** * 更新对象 * @param entity 对象 */ public void updateCaseInfo(CaseInfo entity){ try{ mapper.updateCaseInfo(entity); }catch (Exception e){ log.error("[CaseInfoService.updateCaseInfo]调用失败,异常信息:"+e, e); throw new ServiceException("CaseInfoService.updateCaseInfo", e); } } /** * 条件更新对象 * @param entity 对象 * @param terms 条件 */ public void updateCaseInfoTerms(CaseInfo entity, Map terms){ try{ mapper.updateCaseInfoTerms(entity, terms); }catch (Exception e){ log.error("[CaseInfoService.updateCaseInfoTerms]调用失败,异常信息:"+e, e); throw new ServiceException("CaseInfoService.updateCaseInfoTerms", e); } } /** * 根据编号物理删除 * @param id 查询条件集合 */ public void deleteCaseInfo(String id){ try{ mapper.deleteCaseInfo(id); }catch (Exception e){ log.error("[CaseInfoService.deleteCaseInfo]调用失败,异常信息:"+e, e); throw new ServiceException("CaseInfoService.deleteCaseInfo", 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 caseInfo 实体对象 */ public void saveCaseInfo(CaseInfo caseInfo){ try{ Date nowDate = DateUtils.getNowDate(); // 判断是否新增 if (IdUtils.checkNewId(caseInfo.getId())){ caseInfo.setId(utilsClient.getNewTimeId()); caseInfo.setCreateTime(nowDate); } caseInfo.setUpdateTime(nowDate); this.saveOrUpdate(caseInfo); }catch (Exception e){ log.error("[CaseInfoService.saveCaseInfo]调用失败,异常信息:"+e, e); throw new ServiceException("CaseInfoService.saveCaseInfo", e); } } /** * PC端-纠纷登记-保存纠纷信息-正常案件 * @param registerSaveDTO 纠纷信息 * @param userId 用户编号 * @return String 纠纷编号 */ public String caseRegister(RegisterSaveDTO registerSaveDTO, 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(); int peopleNum = 0; CaseInfo caseInfo = new CaseInfo(); CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold(); BeanUtils.copyProperties(registerSaveDTO, caseInfo); caseInfo.setId(utilsClient.getNewTimeId()); caseInfo.setInputUnitId(loginUser.getUnitId()); caseInfo.setInputUnitName(loginUser.getUnitName()); caseInfo.setInputUserId(loginUser.getId()); caseInfo.setInputUserName(loginUser.getTrueName()); caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1); caseInfo.setCreateTime(nowDate); caseInfo.setUpdateTime(nowDate); caseInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0); //todo case_ref生成、case_title生成 caseInfoUnfold.setId(utilsClient.getNewTimeId()); caseInfoUnfold.setCaseId(caseInfo.getId()); caseInfoUnfold.setCreateTime(nowDate); caseInfoUnfold.setUpdateTime(nowDate); // 常规登记-保存当事人 peopleNum += this.saveCasePerson(registerSaveDTO, plaintiffs, pagents, defendants, dagents); caseInfo.setPeopleNum(peopleNum); caseInfo.setPlaintiffs(plaintiffs.toString()); caseInfo.setPagents(pagents.toString()); caseInfo.setDefendants(defendants.toString()); caseInfo.setDagents(dagents.toString()); //todo 流程接口修改status、status_name、process、process_name //todo 自行受理 if(1 == registerSaveDTO.getIsSelfAccept()){ caseInfoUnfold.setMediateUnitId(loginUser.getUnitId()); caseInfoUnfold.setMediateUnitName(loginUser.getUnitName()); } this.saveOrUpdate(caseInfo); // 删除草稿案件 if(1 == registerSaveDTO.getIsDraft() ){ draftInfoService.removeDraftInfo(registerSaveDTO.getId()); } return registerSaveDTO.getId(); }catch (Exception e){ log.error("service方法[CaseInfoService.caseRegister]调用异常:"+e, e); throw new ServiceException("CaseInfoService.caseRegister", e); } } /** * pc端-常规登记-保存正式案件-保存人员信息 * @param registerSaveDTO 纠纷信息 * @param plaintiffs 申请人 * @param pagents 申请人代理人 * @param defendants 被申请人 * @param dagents 被申请人代理人 * @return int */ private int saveCasePerson(RegisterSaveDTO registerSaveDTO, StringBuffer plaintiffs, StringBuffer pagents, StringBuffer defendants, StringBuffer dagents){ int peopleNum = 0; List newPersonIdList = new ArrayList<>(); List newAgentIdList = new ArrayList<>(); // 保存申请人 List plaintPersonList = registerSaveDTO.getPlaintiffList(); if (CollectionUtils.isNotEmpty(plaintPersonList)) { for (CasePerson casePerson : plaintPersonList) { newPersonIdList.add(casePerson.getId()); casePerson.setCaseId(registerSaveDTO.getId()); casePerson.setPerType(CaseBaseConstsEnum.PERSON_TYPE_1.getIndex()); casePerson.setPerTypeName(CaseBaseConstsEnum.PERSON_TYPE_1.getDes()); casePerson.setCustId(registerSaveDTO.getCustId()); casePerson.setCreateTime(registerSaveDTO.getUpdateTime()); casePerson.setUpdateTime(registerSaveDTO.getUpdateTime()); //todo 绑定当事人小程序 personService.saveOrUpdate(casePerson); if (StringUtils.isNotEmpty(plaintiffs.toString())) { plaintiffs.append(BaseConsts.COMMA); } plaintiffs.append(casePerson.getTrueName()); peopleNum++; } //保存代理人 List pagentList = registerSaveDTO.getPagentList(); if (CollectionUtils.isNotEmpty(pagentList)) { for(CaseAgent caseAgent: pagentList){ newAgentIdList.add(caseAgent.getId()); caseAgent.setId(utilsClient.getNewTimeId()); caseAgent.setCaseId(registerSaveDTO.getId()); caseAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(caseAgent.getAgentType())); caseAgent.setCustId(registerSaveDTO.getCustId()); caseAgent.setCreateTime(registerSaveDTO.getUpdateTime()); caseAgent.setUpdateTime(registerSaveDTO.getUpdateTime()); agentService.saveOrUpdate(caseAgent); if (StringUtils.isNotEmpty(pagents.toString())) { pagents.append(BaseConsts.COMMA); } pagents.append(caseAgent.getTrueName()); } //todo 绑定当事人小程序 } } // 保存被申请人 List defendPersonList = registerSaveDTO.getDefendantList(); if(CollectionUtils.isNotEmpty(defendPersonList)){ for (CasePerson casePerson : defendPersonList) { newPersonIdList.add(casePerson.getId()); casePerson.setCaseId(registerSaveDTO.getId()); casePerson.setPerType(CaseBaseConstsEnum.PERSON_TYPE_2.getIndex()); casePerson.setPerTypeName(CaseBaseConstsEnum.PERSON_TYPE_2.getDes()); casePerson.setCustId(registerSaveDTO.getCustId()); casePerson.setCreateTime(registerSaveDTO.getUpdateTime()); casePerson.setUpdateTime(registerSaveDTO.getUpdateTime()); //todo 绑定当事人小程序 personService.saveOrUpdate(casePerson); if (StringUtils.isNotEmpty(defendants.toString())) { defendants.append(BaseConsts.COMMA); } defendants.append(casePerson.getTrueName()); peopleNum++; } //保存代理人 List pagentList = registerSaveDTO.getPagentList(); if (CollectionUtils.isNotEmpty(pagentList)) { for(CaseAgent caseAgent: pagentList){ newAgentIdList.add(caseAgent.getId()); caseAgent.setId(utilsClient.getNewTimeId()); caseAgent.setCaseId(registerSaveDTO.getId()); caseAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(caseAgent.getAgentType())); caseAgent.setCustId(registerSaveDTO.getCustId()); caseAgent.setCreateTime(registerSaveDTO.getUpdateTime()); caseAgent.setUpdateTime(registerSaveDTO.getUpdateTime()); agentService.saveOrUpdate(caseAgent); if (StringUtils.isNotEmpty(dagents.toString())) { dagents.append(BaseConsts.COMMA); } dagents.append(caseAgent.getTrueName()); //todo 绑定当事人小程序 } } } // 删除冗余的申请人 if (CollectionUtils.isNotEmpty(newPersonIdList)) { List oldPersonIdList = personService.listIdByCaseId(registerSaveDTO.getId()); for (String oldPersonId : oldPersonIdList) { if (!newPersonIdList.contains(oldPersonId)) { personService.removeById(oldPersonId); } } }else{ QueryWrapper casePersonQueryWrapper = new QueryWrapper<>(); casePersonQueryWrapper.eq("case_id", registerSaveDTO.getId()); personService.remove(casePersonQueryWrapper); } //删除冗余的代理人 if(CollectionUtils.isNotEmpty(newAgentIdList)){ List oldAgentIdList = agentService.listIdByCaseId(registerSaveDTO.getId()); for(String oldAgentId: oldAgentIdList){ if(!newAgentIdList.contains(oldAgentId)){ agentService.removeById(oldAgentId); } } }else{ QueryWrapper caseAgentQueryWrapper = new QueryWrapper<>(); caseAgentQueryWrapper.eq("case_id", registerSaveDTO.getId()); agentService.remove(caseAgentQueryWrapper); } return peopleNum; } }