package cn.huge.module.casedisp.service; import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.DateUtils; import cn.huge.module.casedisp.constant.DispRuleConstsEnum; import cn.huge.module.casedisp.domain.dto.ZzzxUnitDTO; import cn.huge.module.casedisp.domain.po.CaseDisp; import cn.huge.module.casedisp.domain.po.DispNormCause; import cn.huge.module.casedisp.domain.po.DispRule; import cn.huge.module.client.api.impl.CustClientImpl; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.constant.BaseConsts; import cn.huge.module.cust.constant.UserBaseConsts; import cn.huge.module.cust.dto.CtUnitDTO; import cn.huge.module.disp.constant.DispBaseConsts; import cn.huge.module.disp.constant.DispBaseConstsEnum; import cn.huge.module.disp.dto.CaseDispBaseDTO; import cn.huge.module.disp.dto.DispCaseBaseDTO; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; 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 org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * @author liyj * @version 1.0.0 * @title: 系统逻辑处理 * @Description 系统逻辑处理 * @company hugeinfo * @Time 2022-11-20 15:32:09 */ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class SysDispService { @Autowired private CaseDispService caseDispService; @Autowired private DispRuleService dispRuleService; @Autowired private DispNormCauseService dispNormCauseService; @Autowired private UtilsClientImpl utilsClient; @Autowired private CustClientImpl custClient; /** * 系统自动调度 * * @param dispCaseBaseDTO */ public CaseDispBaseDTO sysDisp(DispCaseBaseDTO dispCaseBaseDTO) { try { CaseDisp caseDisp = null; if (StringUtils.isNotEmpty(dispCaseBaseDTO.getWantUnitId()) || StringUtils.isNotEmpty(dispCaseBaseDTO.getWantUserId())) { caseDisp = this.sysWantDisp(dispCaseBaseDTO); } else { caseDisp = this.sysRuleDisp(dispCaseBaseDTO); } CaseDispBaseDTO caseDispBaseDTO = new CaseDispBaseDTO(); BeanUtils.copyProperties(caseDisp, caseDispBaseDTO); return caseDispBaseDTO; } catch (Exception e) { log.error("service方法[SysDispService.sysDisp]调用失败,异常信息:" + e, e); throw new ServiceException("SysDispService.sysDisp", e); } } /** * 系统自动调度-意向调解调度 * * @param dispCaseBaseDTO * @return CaseSignBaseDTO */ public CaseDisp sysWantDisp(DispCaseBaseDTO dispCaseBaseDTO) { try { Date nowDate = DateUtils.getNowDate(); //封装初始化对象 CaseDisp caseDisp = new CaseDisp(); caseDisp.setId(utilsClient.getNewTimeId()); caseDisp.setCaseId(dispCaseBaseDTO.getCaseId()); caseDisp.setDispWay(DispBaseConsts.DISP_WAY_1); caseDisp.setDispType(DispBaseConstsEnum.DISP_TYPE_1.getIndex()); caseDisp.setDispTypeName(DispBaseConstsEnum.DISP_TYPE_1.getDes()); caseDisp.setDispContent("系统自动流转"); caseDisp.setHandleUserName("系统派单"); caseDisp.setDispTime(nowDate); caseDisp.setDispStatus(DispBaseConsts.DISP_STATUS_1); caseDisp.setCustId(dispCaseBaseDTO.getCustId()); caseDisp.setDeleteStatus(BaseConsts.DELETE_STATUS_0); caseDisp.setCreateTime(nowDate); caseDisp.setUpdateTime(nowDate); // 调度给意向调解员 if (StringUtils.isNotEmpty(dispCaseBaseDTO.getWantUserId())) { caseDisp.setTargetType(DispBaseConstsEnum.TARGET_TYPE_2.getIndex()); caseDisp.setTargetTypeName(DispBaseConstsEnum.TARGET_TYPE_2.getDes()); caseDisp.setTargetId(dispCaseBaseDTO.getWantUserId()); caseDisp.setTargetName(dispCaseBaseDTO.getWantUserName()); } else { caseDisp.setTargetType(DispBaseConstsEnum.TARGET_TYPE_1.getIndex()); caseDisp.setTargetTypeName(DispBaseConstsEnum.TARGET_TYPE_1.getDes()); caseDisp.setTargetId(dispCaseBaseDTO.getWantUnitId()); caseDisp.setTargetName(dispCaseBaseDTO.getWantUnitName()); CtUnitDTO ctUnitDTO = custClient.getUnitById(dispCaseBaseDTO.getWantUnitId()); caseDisp.setTargetUnitGrade(ctUnitDTO.getUnitGrade()); caseDisp.setTargetUnitType(ctUnitDTO.getUnitType()); } caseDispService.save(caseDisp); return caseDisp; } catch (Exception e) { log.error("service方法[SysDispService.wantDisp]调用失败,异常信息:" + e, e); throw new ServiceException("SysDispService.wantDisp", e); } } /** * 系统自动调度-自定义调度规则调度 * * @param dispCaseBaseDTO */ public CaseDisp sysRuleDisp(DispCaseBaseDTO dispCaseBaseDTO) { try { String targetUnitId = null; String targetUnitName = null; // 默认是调度到最高级是镇街级 int highTargetLevel = UserBaseConsts.UNIT_GRADE_2; if (StringUtils.isNotEmpty(dispCaseBaseDTO.getQueRoad())) { highTargetLevel = UserBaseConsts.UNIT_GRADE_3; } if (dispCaseBaseDTO.getIsQu() == 1) { highTargetLevel = UserBaseConsts.UNIT_GRADE_2; } List dispRuleList = dispRuleService.listEffectiveRuleAsc(); if (CollectionUtils.isNotEmpty(dispRuleList)) { for (DispRule dispRule : dispRuleList) { // 第一步,问题属地调度 // if (DispRuleConstsEnum.DISP_NORM_TYPE_1.getIndex().equals(dispRule.getNormType())){ // highTargetLevel = dispRule.getHighTargetLevel(); // } // 第二步,纠纷类型调度 if (DispRuleConstsEnum.DISP_NORM_TYPE_2.getIndex().equals(dispRule.getNormType())) { List dispNormCauseList = dispNormCauseService.listByCaseTypeGeLevel(dispCaseBaseDTO.getCaseType(), highTargetLevel); if (CollectionUtils.isNotEmpty(dispNormCauseList)) { targetUnitId = dispNormCauseList.get(0).getTargetUnitId(); targetUnitName = dispNormCauseList.get(0).getTargetUnitName(); } } } } // 保存调度结果 Date nowDate = DateUtils.getNowDate(); CaseDisp caseDisp = new CaseDisp(); caseDisp.setId(utilsClient.getNewTimeId()); caseDisp.setCaseId(dispCaseBaseDTO.getCaseId()); caseDisp.setDispWay(DispBaseConsts.DISP_WAY_1); caseDisp.setDispType(DispBaseConstsEnum.DISP_TYPE_1.getIndex()); caseDisp.setDispTypeName(DispBaseConstsEnum.DISP_TYPE_1.getDes()); caseDisp.setDispTime(nowDate); caseDisp.setCustId(dispCaseBaseDTO.getCustId()); caseDisp.setDeleteStatus(BaseConsts.DELETE_STATUS_0); caseDisp.setCreateTime(nowDate); caseDisp.setUpdateTime(nowDate); // 系统调度成功 if (StringUtils.isNotEmpty(targetUnitId)) { caseDisp.setDispContent("系统自动流转,派单至" + targetUnitName + "。"); caseDisp.setHandleUserName("系统派单"); caseDisp.setDispStatus(DispBaseConsts.DISP_STATUS_1); // 调度给调解组织 caseDisp.setTargetType(DispBaseConstsEnum.TARGET_TYPE_1.getIndex()); caseDisp.setTargetTypeName(DispBaseConstsEnum.TARGET_TYPE_1.getDes()); caseDisp.setTargetId(targetUnitId); caseDisp.setTargetName(targetUnitName); } else { // 调度失败 caseDisp.setDispContent("系统自动流转失败,派单至综治中心进行人工交办。"); caseDisp.setHandleUserName("系统派单"); caseDisp.setDispStatus(DispBaseConsts.DISP_STATUS_2); // 默认流转到对应综治中心处理 Map terms = Maps.newHashMap(); // 镇街综治中心 if (UserBaseConsts.UNIT_GRADE_3 == highTargetLevel) { terms.put("road", dispCaseBaseDTO.getQueRoad()); } // 区综治中心 if (UserBaseConsts.UNIT_GRADE_2 == highTargetLevel) { terms.put("area", dispCaseBaseDTO.getQueArea()); } // 市综治中心 if (UserBaseConsts.UNIT_GRADE_1 == highTargetLevel) { terms.put("city", dispCaseBaseDTO.getQueCity()); } ZzzxUnitDTO zzzxUnitDTO = dispNormCauseService.getZzzxUnitByTerms(terms); caseDisp.setTargetType(DispBaseConstsEnum.TARGET_TYPE_1.getIndex()); caseDisp.setTargetTypeName(DispBaseConstsEnum.TARGET_TYPE_1.getDes()); caseDisp.setTargetId(zzzxUnitDTO.getUnitId()); caseDisp.setTargetName(zzzxUnitDTO.getUnitName()); caseDisp.setTargetUnitGrade(zzzxUnitDTO.getUnitGrade()); caseDisp.setTargetUnitType(zzzxUnitDTO.getUnitType()); } caseDispService.save(caseDisp); return caseDisp; } catch (Exception e) { log.error("service方法[SysDispService.sysRuleDisp]调用失败,异常信息:" + e, e); throw new ServiceException("SysDispService.sysRuleDisp", e); } } }