package cn.huge.module.cases.service; import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.*; import cn.huge.module.cases.domain.dto.*; import cn.huge.module.cases.domain.dto.CaseAreaDTO; import cn.huge.module.cases.domain.po.*; 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.cases.dao.mapper.CaseInfoMapper; import cn.huge.module.constant.BaseConsts; import cn.huge.module.cust.dto.PaUserDTO; import cn.huge.module.mediate.constant.*; import cn.huge.module.cust.dto.CtUserDTO; import cn.huge.module.draft.service.CasedraftInfoService; import cn.huge.module.mediate.constant.CaseProcessBaseConstsEnum; import cn.huge.module.mediate.dto.WechatBindCaseDTO; import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO; import cn.huge.module.sys.dto.QueAddrBaseDTO; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fasterxml.jackson.databind.ObjectMapper; 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.data.domain.Sort; 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.File; import java.io.IOException; import java.net.URL; import java.nio.file.Files; import java.util.*; import java.util.stream.Collectors; /** * @author wangwh * @version 1.0.0 * @title: 纠纷信息主表业务逻辑处理 * @Description 纠纷信息主表业务逻辑处理 * @company hugeinfo * @Time 2024-08-27 10:00:57 */ @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; @Autowired private CaseInfoUnfoldService caseInfoUnfoldService; @Autowired private SysClientImpl sysClient; @Autowired private CaseTaskService caseTaskService; @Autowired private CaseEvaluateService caseEvaluateService; @Autowired private CaseAreaService caseAreaService; /** * 更新对象 * * @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 caseIdList */ public void updateCaseInfoList(CaseInfo entity, List caseIdList) { try { mapper.updateCaseInfoList(entity, caseIdList); } catch (Exception e) { log.error("[CaseInfoService.updateCaseInfoList]调用失败,异常信息:" + e, e); throw new ServiceException("CaseInfoService.updateCaseInfoList", 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 page 分页对象 * @param terms 条件 * @return Page */ public Page pageQueryRegister(PageRequest page, Map terms) { long total = mapper.countTermsCaseRegister(terms); List content = mapper.pageTermsCaseRegister(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(); //复制填装案件表 CaseInfo caseInfo = new CaseInfo(); BeanUtils.copyProperties(registerSaveDTO, caseInfo); caseInfo.setUpdateTime(nowDate); // 常规登记-保存当事人 this.saveCasePerson(registerSaveDTO, plaintiffs, pagents, defendants, dagents); caseInfo.setPlaintiffs(plaintiffs.toString()); caseInfo.setPagents(pagents.toString()); caseInfo.setDefendants(defendants.toString()); caseInfo.setDagents(dagents.toString()); caseInfo.setCaseRef(utilsClient.createCaseRef()); caseInfo.setCanal(CaseBaseConstsEnum.CASE_CANAL_1.getIndex()); caseInfo.setCanalName(CaseBaseConstsEnum.CASE_CANAL_1.getDes()); caseInfo.setVisitWay(CaseBaseConstsEnum.VISIT_WAY_1.getIndex()); caseInfo.setVisitWayName(CaseBaseConstsEnum.VISIT_WAY_1.getDes()); //todo case_title生成、经纬度转换 if (0 == registerSaveDTO.getOperateType()) { 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.setDeleteStatus(BaseConsts.DELETE_STATUS_0); //默认添加省市 caseInfo.setQueProv("19"); caseInfo.setQueProvName("广东省"); caseInfo.setQueCity("1601"); caseInfo.setQueCityName("广州市"); // 删除草稿案件 if (1 == registerSaveDTO.getIsDraft()) { draftInfoService.removeDraftInfo(registerSaveDTO.getId()); } // 新增纠纷信息 this.save(caseInfo); // 新增纠纷信息扩展表 CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold(); caseInfoUnfold.setId(caseInfo.getId()); caseInfoUnfold.setCreateTime(nowDate); caseInfoUnfold.setUpdateTime(nowDate); caseInfoUnfoldService.save(caseInfoUnfold); // 启动工作流 // 判断是否自行受理 if (1 == registerSaveDTO.getIsSelfAccept()) { // 自行受理流程 return caseTaskService.webStartFlowZXSL(caseInfo, loginUser); } else { // 自动调度流程 caseTaskService.webStartFlowLFDJ(caseInfo); } } else if (1 == registerSaveDTO.getOperateType()) { this.updateById(caseInfo); } 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 void saveCasePerson(RegisterSaveDTO registerSaveDTO, StringBuffer plaintiffs, StringBuffer pagents, StringBuffer defendants, StringBuffer dagents) { Date now = DateUtils.getNowDate(); List personList = registerSaveDTO.getPersonList(); List agentList = registerSaveDTO.getAgentList(); //查出已存在的当事人和代理人编号 List oldPersonIdList = personService.listIdByCaseId(registerSaveDTO.getId()); List oldAgentIdList = agentService.listIdByCaseId(registerSaveDTO.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(personList)) { for (CasePerson casePerson : personList) { newPersonIdList.add(casePerson.getId()); casePerson.setCaseId(registerSaveDTO.getId()); casePerson.setCustId(registerSaveDTO.getCustId()); casePerson.setUpdateTime(now); //绑定当事人小程序 this.setPartyUserId(casePerson); //添加申请方和被申请方人名组合 if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())) { //申请方 if (StringUtils.isNotEmpty(plaintiffs.toString())) { plaintiffs.append(BaseConsts.COMMA); } plaintiffs.append(casePerson.getTrueName()); } else if (CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())) { //被申请方 if (StringUtils.isNotEmpty(defendants.toString())) { defendants.append(BaseConsts.COMMA); } defendants.append(casePerson.getTrueName()); } //判断是否为更新(用原有的Id对比性的Id) if (oldPersonIds.contains(casePerson.getId())) { personService.updateById(casePerson); } else { casePerson.setCreateTime(now); personService.save(casePerson); } } } if (CollectionUtils.isNotEmpty(agentList)) { for (CaseAgent caseAgent : agentList) { newAgentIdList.add(caseAgent.getId()); caseAgent.setCaseId(registerSaveDTO.getId()); caseAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(caseAgent.getAgentType())); caseAgent.setCustId(registerSaveDTO.getCustId()); caseAgent.setUpdateTime(now); //绑定当事人小程序 this.setPartyUserId(caseAgent); if (CaseBaseConstsEnum.PERSON_TYPE_3.getIndex().equals(caseAgent.getPerType())) { if (StringUtils.isNotEmpty(pagents.toString())) { pagents.append(BaseConsts.COMMA); } pagents.append(caseAgent.getTrueName()); } else if (CaseBaseConstsEnum.PERSON_TYPE_4.getIndex().equals(caseAgent.getPerType())) { if (StringUtils.isNotEmpty(dagents.toString())) { dagents.append(BaseConsts.COMMA); } dagents.append(caseAgent.getTrueName()); } //判断是否为更新(用原有的Id对比性的Id) if (oldAgentIds.contains(caseAgent.getId())) { agentService.updateById(caseAgent); } else { caseAgent.setCreateTime(now); agentService.save(caseAgent); } } } // 删除冗余的申请人(用新的Id对比旧的Id) if (CollectionUtils.isNotEmpty(newPersonIdList)) { for (String oldPersonId : oldPersonIdList) { if (!newPersonIdList.contains(oldPersonId)) { personService.removeById(oldPersonId); } else { } } } else { QueryWrapper casePersonQueryWrapper = new QueryWrapper<>(); casePersonQueryWrapper.eq("case_id", registerSaveDTO.getId()); personService.remove(casePersonQueryWrapper); } //删除冗余的代理人 if (CollectionUtils.isNotEmpty(newAgentIdList)) { 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); } } /** * PC端-查询纠纷信息 * * @param caseId 纠纷编号 * @return CaseInfo 纠纷信息 */ public CaseInfoDTO getCaseInfo(String caseId) { CaseInfo caseInfo = mapper.selectById(caseId); CaseInfoDTO caseInfoDTO = new CaseInfoDTO(); if (ObjectUtils.isNotEmpty(caseInfo)) { BeanUtils.copyProperties(caseInfo, caseInfoDTO); //查询所有当事人 QueryWrapper personQueryWrapper = new QueryWrapper<>(); personQueryWrapper.eq("case_id", caseId); List casePersonList = personService.list(personQueryWrapper); //查询所有代理人 QueryWrapper caseAgentQueryWrapper = new QueryWrapper<>(); caseAgentQueryWrapper.eq("case_id", caseId); List caseAgentList = agentService.list(caseAgentQueryWrapper); List idList = new ArrayList<>(); idList.add(caseId); idList.addAll(casePersonList.stream().map(CasePerson::getId).collect(Collectors.toList())); idList.addAll(caseAgentList.stream().map(CaseAgent::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 (CasePerson casePerson : casePersonList) { //把附件根据编号放入 for (FileIdTypeInfoBaseDTO fileInfo : fileInfoList) { if (casePerson.getId().equals(fileInfo.getOwnerId())) { casePerson.setFileInfoList(fileInfo.getFileList()); } } } for (CaseAgent caseAgent : caseAgentList) { for (FileIdTypeInfoBaseDTO fileInfo : fileInfoList) { if (caseAgent.getId().equals(fileInfo.getOwnerId())) { caseAgent.setFileInfoList(fileInfo.getFileList()); } } } caseInfoDTO.setPersonList(casePersonList); caseInfoDTO.setAgentList(caseAgentList); } return caseInfoDTO; } /** * PC端-查询纠纷信息 * * @param caseId 纠纷编号 * @return CaseInfo 纠纷信息 */ public CaseInfoDTO getCaseArchivesInfo(String caseId) { CaseInfo caseInfo = mapper.selectById(caseId); CaseInfoDTO caseInfoDTO = new CaseInfoDTO(); if (ObjectUtils.isNotEmpty(caseInfo)) { BeanUtils.copyProperties(caseInfo, caseInfoDTO); //查询所有当事人 QueryWrapper personQueryWrapper = new QueryWrapper<>(); personQueryWrapper.eq("case_id", caseId); List casePersonList = personService.list(personQueryWrapper); //查询所有代理人 QueryWrapper caseAgentQueryWrapper = new QueryWrapper<>(); caseAgentQueryWrapper.eq("case_id", caseId); List caseAgentList = agentService.list(caseAgentQueryWrapper); List idList = new ArrayList<>(); idList.add(caseId); idList.addAll(casePersonList.stream().map(CasePerson::getId).collect(Collectors.toList())); idList.addAll(caseAgentList.stream().map(CaseAgent::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 (CasePerson casePerson : casePersonList) { //把附件根据编号放入 for (FileIdTypeInfoBaseDTO fileInfo : fileInfoList) { if (casePerson.getId().equals(fileInfo.getOwnerId())) { casePerson.setFileInfoList(fileInfo.getFileList()); } } } for (CaseAgent caseAgent : caseAgentList) { for (FileIdTypeInfoBaseDTO fileInfo : fileInfoList) { if (caseAgent.getId().equals(fileInfo.getOwnerId())) { caseAgent.setFileInfoList(fileInfo.getFileList()); } } } caseInfoDTO.setPersonList(casePersonList); caseInfoDTO.setAgentList(caseAgentList); } return caseInfoDTO; } /** * 绑定当事人小程序 * * @param casePerson 当事人信息 */ public void setPartyUserId(CasePerson casePerson) { if (StringUtils.isEmpty(casePerson.getPartyUserId())) { if (CaseBaseConstsEnum.CARD_TYPE_1.getIndex().equals(casePerson.getCertiType())) { if (StringUtils.isNotEmpty(casePerson.getCertiNo())) { WechatBindCaseDTO wechatBindCaseDTO = new WechatBindCaseDTO(); if (CaseBaseConstsEnum.PERSON_CLASS_1.getIndex().equals(casePerson.getPerClass())) { wechatBindCaseDTO.setTrueName(casePerson.getTrueName()); } else { wechatBindCaseDTO.setTrueName(casePerson.getDeputy()); } wechatBindCaseDTO.setIdcard(casePerson.getCertiNo()); wechatBindCaseDTO.setCustId(casePerson.getCustId()); String partyUserId = custClient.bindGetUserId(wechatBindCaseDTO); casePerson.setPartyUserId(partyUserId); } } } } /** * 绑定当事人小程序 * * @param caseAgent 代理人人信息 */ public void setPartyUserId(CaseAgent caseAgent) { if (StringUtils.isEmpty(caseAgent.getPartyUserId())) { if (CaseBaseConstsEnum.CARD_TYPE_1.getIndex().equals(caseAgent.getCertiType())) { if (StringUtils.isNotEmpty(caseAgent.getCertiNo())) { WechatBindCaseDTO wechatBindCaseDTO = new WechatBindCaseDTO(); wechatBindCaseDTO.setTrueName(caseAgent.getTrueName()); wechatBindCaseDTO.setIdcard(caseAgent.getCertiNo()); wechatBindCaseDTO.setCustId(caseAgent.getCustId()); String partyUserId = custClient.bindGetUserId(wechatBindCaseDTO); caseAgent.setPartyUserId(partyUserId); } } } } /** * PC端-纠纷登记-保存纠纷信息-正常案件 * * @param registerSaveDTO 纠纷信息 * @param userId 用户编号 * @return String 纠纷编号 */ public String caseRegisterWechat(RegisterSaveDTO registerSaveDTO, String userId) { // 获取当前登录用户 PaUserDTO loginUser = custClient.paclientGetUser(userId); if (ObjectUtils.isEmpty(registerSaveDTO.getCustId())) { registerSaveDTO.setCustId(loginUser.getCustId()); } Date nowDate = DateUtils.getNowDate(); registerSaveDTO.setUpdateTime(nowDate); CaseInfo caseInfo = new CaseInfo(); CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold(); BeanUtils.copyProperties(registerSaveDTO, caseInfo); if (ObjectUtils.isEmpty(caseInfo.getId())) { caseInfo.setId(utilsClient.getNewTimeCaseId()); } // caseInfo.setInputUnitId(loginUser.getUnitId()); // caseInfo.setInputUnitName(loginUser.getUnitName()); caseInfo.setInputUserId(loginUser.getId()); caseInfo.setInputUserName(loginUser.getTrueName()); caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1); //默认添加省市 caseInfo.setQueProv("19"); caseInfo.setQueProvName("广东省"); caseInfo.setQueCity("1601"); caseInfo.setQueCityName("广州市"); caseInfo.setCreateTime(nowDate); caseInfo.setUpdateTime(nowDate); caseInfo.setVisitTime(nowDate); caseInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0); //坐标转换 if (ObjectUtils.isNotEmpty(caseInfo.getLat()) && ObjectUtils.isNotEmpty(caseInfo.getLng())) { PointXY pointXY = MapUtils.gcj02tobd09(Double.valueOf(caseInfo.getLng()), Double.valueOf(caseInfo.getLat())); caseInfo.setLat(pointXY.getLat() + ""); caseInfo.setLng(pointXY.getLon() + ""); } //todo case_title生成 caseInfo.setCaseRef(utilsClient.createCaseRef()); // 为了演示先兼容小程序没属地问题,写死属地 // caseInfo.setQueProv("19"); // caseInfo.setQueProvName("广东"); // caseInfo.setQueCity("1601"); // caseInfo.setQueCityName("广州市"); // caseInfo.setQueArea("50258"); // caseInfo.setQueAreaName("白云区"); // caseInfo.setQueRoad("62857"); // caseInfo.setQueRoadName("新市街道"); // 根据经纬度查询问题属地 QueAddrBaseDTO queAddrBaseDTO = sysClient.getQueAddrByBaiduiLngLat(caseInfo.getLng(), caseInfo.getLat()); log.info("xsdqueAddrBaseDTO:{}", queAddrBaseDTO); caseInfo.setQueProv(queAddrBaseDTO.getQueProv()); caseInfo.setQueProvName(queAddrBaseDTO.getQueProvName()); caseInfo.setQueCity(queAddrBaseDTO.getQueCity()); caseInfo.setQueCityName(queAddrBaseDTO.getQueCityName()); caseInfo.setQueArea(queAddrBaseDTO.getQueArea()); caseInfo.setQueAreaName(queAddrBaseDTO.getQueAreaName()); caseInfo.setQueRoad(queAddrBaseDTO.getQueRoad()); caseInfo.setQueRoadName(queAddrBaseDTO.getQueRoadName()); log.info("xsdcaseInfo:{}", caseInfo); caseInfoUnfold.setId(caseInfo.getId()); caseInfoUnfold.setCreateTime(nowDate); caseInfoUnfold.setUpdateTime(nowDate); StringBuffer plaintiffs = new StringBuffer(); StringBuffer defendants = new StringBuffer(); StringBuffer pagents = new StringBuffer(); StringBuffer dagents = new StringBuffer(); // 常规登记-保存当事人 int peopleNum = this.saveCasePersonWechat(registerSaveDTO, plaintiffs, pagents, defendants, dagents, loginUser); caseInfo.setVisitPeopleNum(peopleNum); caseInfo.setPlaintiffs(plaintiffs.toString()); caseInfo.setPagents(pagents.toString()); caseInfo.setDefendants(defendants.toString()); caseInfo.setDagents(dagents.toString()); //todo case_title生成 // caseInfo.setCaseTitle(this.createCaseTitle(plaintiffs.toString(), defendants.toString(), caseInfo.getCaseTypeName())); caseInfo.setInfoProcess(CaseInfoProcessBaseConstsEnum.CASE_INFO_PROCESS_1.getIndex()); caseInfo.setInfoProcessName(CaseInfoProcessBaseConstsEnum.CASE_INFO_PROCESS_1.getDes()); caseInfo.setProcess(CaseProcessBaseConstsEnum.CASE_PROCESS_1.getIndex()); caseInfo.setProcessName(CaseProcessBaseConstsEnum.CASE_PROCESS_1.getDes()); caseInfo.setStatus(CaseStatusBaseConstsEnum.CASE_STATUS_1.getIndex()); caseInfo.setStatusName(CaseStatusBaseConstsEnum.CASE_STATUS_1.getDes()); caseInfo.setCaseLevel(3); caseInfo.setCanal(CaseBaseConstsEnum.CASE_CANAL_2.getIndex()); caseInfo.setCanalName(CaseBaseConstsEnum.CASE_CANAL_2.getDes()); caseInfo.setCaseRef(utilsClient.createCaseRef()); caseInfo.setVisitWay(CaseBaseConstsEnum.VISIT_WAY_2.getIndex()); caseInfo.setVisitWayName(CaseBaseConstsEnum.VISIT_WAY_2.getDes()); // 临时加上一级纠纷类型 caseInfo.setCaseTypeFirst("24_01-2"); caseInfo.setCaseTypeFirstName("劳动社保"); this.saveOrUpdate(caseInfo); caseInfoUnfoldService.saveOrUpdate(caseInfoUnfold); // 启动工作流-自动调度流程 caseTaskService.webStartFlowLFDJ(caseInfo); return registerSaveDTO.getId(); } /** * 生成调解案件标题 * * @param plaintiffs 申请人 * @param defendants 被申请人 * @param caseTypeName 纠纷类型 * @return String */ public String createCaseTitle(String plaintiffs, String defendants, String caseTypeName) { StringBuffer caseTitle = new StringBuffer(); if (plaintiffs.indexOf(BaseConsts.COMMA) != -1) { caseTitle.append(plaintiffs.split(BaseConsts.COMMA)[0]).append("等"); } else { caseTitle.append(plaintiffs.split(BaseConsts.COMMA)[0]); } if (StringUtils.isNotEmpty(defendants)) { caseTitle.append("和"); if (defendants.indexOf(BaseConsts.COMMA) != -1) { caseTitle.append(defendants.split(BaseConsts.COMMA)[0]).append("等"); } else { caseTitle.append(defendants.split(BaseConsts.COMMA)[0]); } } caseTitle.append("的"); if (StringUtils.isNotEmpty(caseTypeName)) { caseTitle.append(caseTypeName); } caseTitle.append("案件"); return caseTitle.toString(); } /** * pc端-常规登记-保存正式案件-保存人员信息 * * @param registerSaveDTO 纠纷信息 * @param plaintiffs 申请人 * @param pagents 申请人代理人 * @param defendants 被申请人 * @param dagents 被申请人代理人 * @return int */ private int saveCasePersonWechat(RegisterSaveDTO registerSaveDTO, StringBuffer plaintiffs, StringBuffer pagents, StringBuffer defendants, StringBuffer dagents, PaUserDTO loginUser) { int peopleNum = 0; // 保存申请人 List personList = registerSaveDTO.getPersonList(); if (CollectionUtils.isNotEmpty(personList)) { for (CasePerson casePerson : personList) { casePerson.setId(utilsClient.getNewTimeCaseId()); casePerson.setCaseId(registerSaveDTO.getId()); casePerson.setPartyUserId(loginUser.getId()); casePerson.setCustId(registerSaveDTO.getCustId()); casePerson.setCreateTime(registerSaveDTO.getUpdateTime()); casePerson.setUpdateTime(registerSaveDTO.getUpdateTime()); //todo 绑定当事人小程序 personService.saveOrUpdate(casePerson); //添加申请方和被申请方人名组合 if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())) { //申请方 if (StringUtils.isNotEmpty(plaintiffs.toString())) { plaintiffs.append(BaseConsts.COMMA); } plaintiffs.append(casePerson.getTrueName()); } else if (CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())) { //被申请方 if (StringUtils.isNotEmpty(defendants.toString())) { defendants.append(BaseConsts.COMMA); } defendants.append(casePerson.getTrueName()); } peopleNum++; } //保存代理人 List agentList = registerSaveDTO.getAgentList(); if (CollectionUtils.isNotEmpty(agentList)) { for (CaseAgent caseAgent : agentList) { caseAgent.setId(utilsClient.getNewTimeCaseId()); caseAgent.setPartyUserId(loginUser.getId()); 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 (CaseBaseConstsEnum.PERSON_TYPE_3.getIndex().equals(caseAgent.getPerType())) { if (StringUtils.isNotEmpty(pagents.toString())) { pagents.append(BaseConsts.COMMA); } pagents.append(caseAgent.getTrueName()); } else if (CaseBaseConstsEnum.PERSON_TYPE_4.getIndex().equals(caseAgent.getPerType())) { if (StringUtils.isNotEmpty(dagents.toString())) { dagents.append(BaseConsts.COMMA); } dagents.append(caseAgent.getTrueName()); } } //todo 绑定当事人小程序 } } return peopleNum; } public RegisterSaveDTO getCaseInfoWechat(String id) { RegisterSaveDTO registerSaveDTO = new RegisterSaveDTO(); CaseInfo caseInfo = this.getById(id); if (ObjectUtils.isNotEmpty(caseInfo)) { BeanUtils.copyProperties(caseInfo, registerSaveDTO); } QueryWrapper casePersonQueryWrapper = new QueryWrapper<>(); casePersonQueryWrapper.eq("case_id", registerSaveDTO.getId()); List personList = personService.list(casePersonQueryWrapper); registerSaveDTO.setPersonList(personList); QueryWrapper caseAgentQueryWrapper = new QueryWrapper<>(); caseAgentQueryWrapper.eq("case_id", registerSaveDTO.getId()); List agentList = agentService.list(caseAgentQueryWrapper); registerSaveDTO.setAgentList(agentList); return registerSaveDTO; } /** * 按条件分页查询-小程序查询 * * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageQueryWechat(String userId, PageRequest page, Map terms) { PaUserDTO loginUser = custClient.paclientGetUser(userId); List list = new ArrayList<>(); String personType = terms.get("personType") + ""; if (ObjectUtils.isEmpty(personType)) { throw new RuntimeException("请选择人员类型"); } if (ObjectUtils.isEmpty(loginUser.getIdcard())) { return new PageImpl(list, page, 0); } QueryWrapper personWrapper = new QueryWrapper<>(); personWrapper.select("case_id"); personWrapper.eq("certi_no", loginUser.getIdcard()); if ("1".equals(personType)) { personWrapper.eq("per_type", CaseBaseConstsEnum.PERSON_TYPE_1.getIndex()); } else { personWrapper.eq("per_type", CaseBaseConstsEnum.PERSON_TYPE_2.getIndex()); } List casePersonList = personService.list(personWrapper); if (ObjectUtils.isEmpty(casePersonList)) { return new PageImpl(list, page, 0); } List ids = casePersonList.stream().map(CasePerson::getCaseId).collect(Collectors.toList()); terms.put("ids", ids); long total = mapper.countTerms(terms); List content = mapper.pageTerms(page, terms); if (ObjectUtils.isNotEmpty(content)) { for (CaseInfo caseInfo : content) { CaseInfoWeChatDTO caseInfoWeChatDTO = new CaseInfoWeChatDTO(); BeanUtils.copyProperties(caseInfo, caseInfoWeChatDTO); caseInfoWeChatDTO.setProcessStatus(caseInfo.getInfoProcess()); caseInfoWeChatDTO.setProcessStatusName(caseInfo.getInfoProcessName()); //扩展信息 CaseInfoUnfold caseInfoUnfold = caseInfoUnfoldService.getById(caseInfo.getId()); if (ObjectUtils.isNotEmpty(caseInfoUnfold)) { caseInfoWeChatDTO.setMediResult(caseInfoUnfold.getMediResult()); caseInfoWeChatDTO.setMediResultName(caseInfoUnfold.getMediResultName()); caseInfoWeChatDTO.setMediateDeptId(caseInfoUnfold.getMediateUnitId()); caseInfoWeChatDTO.setMediateDeptName(caseInfoUnfold.getMediateUnitName()); caseInfoWeChatDTO.setAgreeType(caseInfoUnfold.getAgreeType()); caseInfoWeChatDTO.setAgreeTypeName(caseInfoUnfold.getAgreeTypeName()); caseInfoWeChatDTO.setAgreeContent(caseInfoUnfold.getAgreeContent()); } QueryWrapper personWrapper1 = new QueryWrapper<>(); personWrapper1.eq("case_id", caseInfo.getId()); List casePersonList1 = personService.list(personWrapper1); //申请人集合 List plaintiffList = new ArrayList<>(); //被申请人集合 List defendantList = new ArrayList<>(); for (CasePerson casePerson : casePersonList1) { CasePersonWechatDTO casePersonWechatDTO = new CasePersonWechatDTO(); BeanUtils.copyProperties(casePerson, casePersonWechatDTO); if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())) { plaintiffList.add(casePersonWechatDTO); } else if (CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())) { defendantList.add(casePersonWechatDTO); } } caseInfoWeChatDTO.setDefendantList(defendantList); caseInfoWeChatDTO.setPlaintiffList(plaintiffList); //评价信息 Map evaluateTerms = new HashMap<>(); evaluateTerms.put("caseId", caseInfo.getId()); evaluateTerms.put("deleteStatus", BaseConsts.DELETE_STATUS_0); evaluateTerms.put("evaluateUserId", loginUser.getId()); long evaluateCount = caseEvaluateService.countTerms(evaluateTerms); if (evaluateCount > 0) { caseInfoWeChatDTO.setIsEvaluate("1"); } else { caseInfoWeChatDTO.setIsEvaluate("0"); } list.add(caseInfoWeChatDTO); } } return new PageImpl(list, page, total); } /** * 按条件分页查询-综合查询 * * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageQueryAll(PageRequest page, Map terms) { long total = mapper.countTermsAll(terms); List content = mapper.pageTermsAll(page, terms); if (ObjectUtils.isNotEmpty(content)) { for (CasePageDTO casePageDTO : content) { QueryWrapper personWrapper1 = new QueryWrapper<>(); personWrapper1.eq("case_id", casePageDTO.getId()); List casePersonList1 = personService.list(personWrapper1); //申请人集合 List plaintiffList = new ArrayList<>(); //被申请人集合 List defendantList = new ArrayList<>(); for (CasePerson casePerson : casePersonList1) { CasePersonWeDTO casePersonWechatDTO = new CasePersonWeDTO(); BeanUtils.copyProperties(casePerson, casePersonWechatDTO); if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())) { plaintiffList.add(casePersonWechatDTO); } else if (CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())) { defendantList.add(casePersonWechatDTO); } } casePageDTO.setDefendantList(defendantList); casePageDTO.setPlaintiffList(plaintiffList); } } return new PageImpl(content, page, total); } public CaseStatisticsBaseDTO statistics(Map terms) throws IOException { //基础数据统计 CaseStatisticsBaseDTO caseStatisticsBaseDTO = mapper.statisticsBase(terms); Integer baseTotalNum = dellNull(caseStatisticsBaseDTO.getResolveNum()) + dellNull(caseStatisticsBaseDTO.getUnResolveNum()) + dellNull(caseStatisticsBaseDTO.getResolveingNum()); caseStatisticsBaseDTO.setResolveRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getResolveNum() * 100, baseTotalNum, 1)); caseStatisticsBaseDTO.setUnResolveRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getUnResolveNum() * 100, baseTotalNum, 1)); caseStatisticsBaseDTO.setResolveingRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getResolveingNum() * 100, baseTotalNum, 1)); Integer levelTotalNum = caseStatisticsBaseDTO.getOneLevelNum() + caseStatisticsBaseDTO.getTwoLevelNum() + caseStatisticsBaseDTO.getThreeLevelNum(); caseStatisticsBaseDTO.setOneLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getOneLevelNum() * 100, levelTotalNum, 1)); caseStatisticsBaseDTO.setTwoLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getTwoLevelNum() * 100, levelTotalNum, 1)); caseStatisticsBaseDTO.setThreeLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getThreeLevelNum() * 100, levelTotalNum, 1)); //区域数据统计 terms.put("isArea", "1"); List caseStatisticsAreaDTOS = mapper.statisticsArea(terms); if (ObjectUtils.isEmpty(caseStatisticsAreaDTOS)) { caseStatisticsAreaDTOS = new ArrayList<>(); } CaseStatisticsAreaDTO allArea = new CaseStatisticsAreaDTO(); allArea.setAreaName("本级"); allArea.setAreaCode("1"); List areaCodeList = new ArrayList<>(); for (CaseStatisticsAreaDTO caseStatisticsAreaDTO : caseStatisticsAreaDTOS) { allArea.setCaseNum(dellNull(caseStatisticsAreaDTO.getCaseNum()) + dellNull(allArea.getCaseNum())); allArea.setResolveNum(dellNull(caseStatisticsAreaDTO.getResolveNum()) + dellNull(allArea.getResolveNum())); allArea.setUnResolveNum(dellNull(caseStatisticsAreaDTO.getUnResolveNum()) + dellNull(allArea.getUnResolveNum())); allArea.setResolveingNum(dellNull(caseStatisticsAreaDTO.getResolveingNum()) + dellNull(allArea.getResolveingNum())); areaCodeList.add(caseStatisticsAreaDTO.getAreaCode()); } caseStatisticsAreaDTOS.add(allArea); List queArea = listAreaByType(terms.get("areaType"), terms.get("queArea")); log.info("listAreaByType {}", JSON.toJSONString(queArea)); for (CaseArea caseAreaDTO : queArea) { if (!areaCodeList.contains(caseAreaDTO.getAreaCode())) { CaseStatisticsAreaDTO areaChild = new CaseStatisticsAreaDTO(); areaChild.setAreaCode(caseAreaDTO.getAreaCode()); areaChild.setAreaName(caseAreaDTO.getAreaName()); areaChild.setCaseNum(0); areaChild.setResolveNum(0); areaChild.setUnResolveNum(0); areaChild.setResolveingNum(0); caseStatisticsAreaDTOS.add(areaChild); } } if (ObjectUtils.isNotEmpty(caseStatisticsAreaDTOS)) { sortArea(caseStatisticsAreaDTOS); } caseStatisticsBaseDTO.setAreaList(caseStatisticsAreaDTOS); terms.remove("isArea"); //纠纷类型统计 List caseStatisticsTypeDTOS = mapper.statisticsType(terms); if (ObjectUtils.isNotEmpty(caseStatisticsTypeDTOS)) { sortType(caseStatisticsTypeDTOS); } Integer typeTotalNum = 0; Integer otherCaseNum = 0; int i = 1; List typeList = new ArrayList<>(); for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : caseStatisticsTypeDTOS) { typeTotalNum = typeTotalNum + dellNull(caseStatisticsTypeDTO.getCaseNum()); if (i > 5) { otherCaseNum = otherCaseNum + dellNull(caseStatisticsTypeDTO.getCaseNum()); } else { typeList.add(caseStatisticsTypeDTO); } i++; } for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : typeList) { caseStatisticsTypeDTO.setCaseRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsTypeDTO.getCaseNum() * 100, typeTotalNum, 1)); } CaseStatisticsTypeDTO caseStatisticsTypeDTO = new CaseStatisticsTypeDTO(); caseStatisticsTypeDTO.setCaseTypeName("其他"); caseStatisticsTypeDTO.setCaseNum(otherCaseNum); caseStatisticsTypeDTO.setCaseRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsTypeDTO.getCaseNum() * 100, typeTotalNum, 1)); typeList.add(caseStatisticsTypeDTO); caseStatisticsBaseDTO.setTypeList(typeList); //事项来源 terms.put("canal", CaseBaseConstsEnum.CASE_CANAL_1.getIndex()); CaseStatisticsSourceDTO oneSource = mapper.statisticsSource(terms); if(ObjectUtils.isEmpty(oneSource)){ oneSource = new CaseStatisticsSourceDTO(); } oneSource.setCanalName(CaseBaseConstsEnum.CASE_CANAL_1.getDes()); terms.put("canal", CaseBaseConstsEnum.CASE_CANAL_2.getIndex()); CaseStatisticsSourceDTO twoSource = mapper.statisticsSource(terms); if(ObjectUtils.isEmpty(twoSource)){ twoSource = new CaseStatisticsSourceDTO(); } twoSource.setCanalName(CaseBaseConstsEnum.CASE_CANAL_2.getDes()); Integer sourceTotalNum = dellNull(oneSource.getCaseNum()) + dellNull(oneSource.getCaseNum()); oneSource.setCaseRate(BigDecimalUtil.integerDivideDelZero(oneSource.getCaseNum() * 100, sourceTotalNum, 1)); oneSource.setResolveRate(BigDecimalUtil.integerDivideDelZero(oneSource.getResolveNum() * 100, oneSource.getCaseNum(), 1)); twoSource.setCaseRate(BigDecimalUtil.integerDivideDelZero(twoSource.getCaseNum() * 100, sourceTotalNum, 1)); twoSource.setResolveRate(BigDecimalUtil.integerDivideDelZero(twoSource.getResolveNum() * 100, twoSource.getCaseNum(), 1)); CaseStatisticsSourceDTO threeSource = new CaseStatisticsSourceDTO(); threeSource.setCanalName("自行排查"); threeSource.setResolveRate("0"); threeSource.setCaseRate("0"); CaseStatisticsSourceDTO fourSource = new CaseStatisticsSourceDTO(); fourSource.setCanalName("协同推送"); fourSource.setResolveRate("0"); fourSource.setCaseRate("0"); caseStatisticsBaseDTO.setOneSource(oneSource); caseStatisticsBaseDTO.setTwoSource(twoSource); caseStatisticsBaseDTO.setThreeSource(threeSource); caseStatisticsBaseDTO.setFourSource(fourSource); //案件集合 Sort sort = Sort.by(Sort.Direction.DESC, "a.create_time"); PageRequest pageRequest = PageRequest.of(0, 5, sort); Page casePageDTOS = pageQueryAll(pageRequest, terms); if (ObjectUtils.isNotEmpty(casePageDTOS.getContent())) { caseStatisticsBaseDTO.setCaseList(casePageDTOS.getContent()); } else { caseStatisticsBaseDTO.setCaseList(new ArrayList<>()); } return caseStatisticsBaseDTO; } public List sortType(List caseStatisticsTypeDTOS) { caseStatisticsTypeDTOS.sort((o1, o2) -> { Integer totalScore1 = o1.getCaseNum(); Integer totalScore2 = o2.getCaseNum(); if (totalScore1 < totalScore2) { return 1; } else if (totalScore1.equals(totalScore2)) { return 0; } else { return -1; } }); return caseStatisticsTypeDTOS; } public List sortArea(List caseStatisticsAreaDTOS) { caseStatisticsAreaDTOS.sort((o1, o2) -> { log.info("xsd:{},{}",o1,o2); Integer totalScore1 = Integer.valueOf(o1.getAreaCode()); Integer totalScore2 = Integer.valueOf(o2.getAreaCode()); if (totalScore1 > totalScore2) { return 1; } else if (totalScore1.equals(totalScore2)) { return 0; } else { return -1; } }); return caseStatisticsAreaDTOS; } public Integer dellNull(Integer number) { if (ObjectUtils.isEmpty(number)) { return 0; } return number; } /** * 根据不同的等级获取不同区域子集合 * * @param areaType 1-市级 2-区 */ public List listAreaByType(Object areaType, Object areaCode) throws IOException { log.info("listAreaByType {},{}", areaType, areaCode); if (ObjectUtils.isEmpty(areaType) || areaType.equals("") || areaType.equals("1")) { QueryWrapper caseAreaWrapper = new QueryWrapper<>(); caseAreaWrapper.eq("parent_code","1601"); List list = caseAreaService.list(caseAreaWrapper); return list; } if (areaType.equals("2")) { QueryWrapper caseAreaWrapper = new QueryWrapper<>(); caseAreaWrapper.eq("parent_code",areaCode); List list = caseAreaService.list(caseAreaWrapper); return list; } return new ArrayList<>(); } }