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<DispRule> 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<DispNormCause> 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<String, Object> terms = Maps.newHashMap();
|
terms.put("unitGrade",highTargetLevel);
|
// 镇街综治中心
|
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);
|
}
|
}
|
|
|
}
|