forked from gzzfw/backEnd/gz-dyh

zhouxiantao
2024-09-24 d71f26473c703c44808cd8f76298bbde608ecc5d
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
@@ -1,39 +1,34 @@
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.CaseInfoDTO;
import cn.huge.base.common.utils.*;
import cn.huge.module.cases.domain.dto.*;
import cn.huge.module.cases.domain.dto.CaseInfoWeChatDTO;
import cn.huge.module.cases.domain.dto.CasePersonWechatDTO;
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.SysClient;
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.cases.domain.po.CaseInfo;
import cn.huge.module.constant.BaseConsts;
import cn.huge.module.cust.dto.PaUserDTO;
import cn.huge.module.mediate.constant.CaseBaseConsts;
import cn.huge.module.mediate.constant.CaseBaseConstsEnum;
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.FileTypeInfoBaseDTO;
import cn.huge.module.sys.dto.QueAddrBaseDTO;
import cn.huge.module.sys.dto.QueAreaDTO;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Maps;
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;
@@ -41,21 +36,25 @@
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
 * @author wangwh
 * @Time 2024-08-27 10:00:57
 * @version 1.0.0
 */
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class CaseInfoService extends ServiceImpl<CaseInfoMapper, CaseInfo>{
public class CaseInfoService extends ServiceImpl<CaseInfoMapper, CaseInfo> {
    @Autowired
    private CaseInfoMapper mapper;
@@ -81,103 +80,146 @@
    @Autowired
    private SysClientImpl sysClient;
    @Autowired
    private CaseTaskService caseTaskService;
    @Autowired
    private CaseEvaluateService caseEvaluateService;
    /**
    * 更新对象
    * @param entity 对象
    */
    public void updateCaseInfo(CaseInfo entity){
        try{
     * 更新对象
     *
     * @param entity 对象
     */
    public void updateCaseInfo(CaseInfo entity) {
        try {
            mapper.updateCaseInfo(entity);
        }catch (Exception e){
            log.error("[CaseInfoService.updateCaseInfo]调用失败,异常信息:"+e, e);
        } 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<String, Object> terms){
        try{
     * 批量更新对象
     *
     * @param entity     对象
     * @param caseIdList
     */
    public void updateCaseInfoList(CaseInfo entity, List<String> 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<String, Object> terms) {
        try {
            mapper.updateCaseInfoTerms(entity, terms);
        }catch (Exception e){
            log.error("[CaseInfoService.updateCaseInfoTerms]调用失败,异常信息:"+e, e);
        } catch (Exception e) {
            log.error("[CaseInfoService.updateCaseInfoTerms]调用失败,异常信息:" + e, e);
            throw new ServiceException("CaseInfoService.updateCaseInfoTerms", e);
        }
    }
    /**
    * 根据编号物理删除
    * @param id 查询条件集合
    */
    public void deleteCaseInfo(String id){
        try{
     * 根据编号物理删除
     *
     * @param id 查询条件集合
     */
    public void deleteCaseInfo(String id) {
        try {
            mapper.deleteCaseInfo(id);
        }catch (Exception e){
            log.error("[CaseInfoService.deleteCaseInfo]调用失败,异常信息:"+e, e);
        } catch (Exception e) {
            log.error("[CaseInfoService.deleteCaseInfo]调用失败,异常信息:" + e, e);
            throw new ServiceException("CaseInfoService.deleteCaseInfo", e);
        }
    }
    /**
    * 按条件查询
    * @param terms 条件
    * @return List
    */
    public List<CaseInfo> listTerms(Map<String, Object> terms){
     * 按条件查询
     *
     * @param terms 条件
     * @return List
     */
    public List<CaseInfo> listTerms(Map<String, Object> terms) {
        return mapper.listTerms(terms);
    }
    /**
    * 按条件统计
    * @param terms 条件
    * @return long
    */
    public long countTerms(Map<String, Object> terms){
     * 按条件统计
     *
     * @param terms 条件
     * @return long
     */
    public long countTerms(Map<String, Object> terms) {
        return mapper.countTerms(terms);
    }
    /**
    * 按条件分页查询
    * @param page 分页对象
    * @param terms 条件
    * @return Page
    */
    public Page<CaseInfo> pageQuery(PageRequest page, Map<String, Object> terms){
     * 按条件分页查询
     *
     * @param page  分页对象
     * @param terms 条件
     * @return Page
     */
    public Page<CaseInfo> pageQuery(PageRequest page, Map<String, Object> terms) {
        long total = mapper.countTerms(terms);
        List<CaseInfo> content = mapper.pageTerms(page, terms);
        return new PageImpl<CaseInfo>(content, page, total);
    }
    /**
    * 新增或更新对象
    * @param caseInfo 实体对象
    */
    public void saveCaseInfo(CaseInfo caseInfo){
        try{
     * 按条件分页查询
     *
     * @param page  分页对象
     * @param terms 条件
     * @return Page
     */
    public Page<CaseRegisterDTO> pageQueryRegister(PageRequest page, Map<String, Object> terms) {
        long total = mapper.countTermsCaseRegister(terms);
        List<CaseRegisterDTO> content = mapper.pageTermsCaseRegister(page, terms);
        return new PageImpl<CaseRegisterDTO>(content, page, total);
    }
    /**
     * 新增或更新对象
     *
     * @param caseInfo 实体对象
     */
    public void saveCaseInfo(CaseInfo caseInfo) {
        try {
            Date nowDate = DateUtils.getNowDate();
            // 判断是否新增
            if (IdUtils.checkNewId(caseInfo.getId())){
            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);
        } catch (Exception e) {
            log.error("[CaseInfoService.saveCaseInfo]调用失败,异常信息:" + e, e);
            throw new ServiceException("CaseInfoService.saveCaseInfo", e);
        }
    }
    /**
     * PC端-纠纷登记-保存纠纷信息-正常案件
     *
     * @param registerSaveDTO 纠纷信息
     * @param userId 用户编号
     * @param userId          用户编号
     * @return String 纠纷编号
     */
    public String caseRegister(RegisterSaveDTO registerSaveDTO, String userId){
    public String caseRegister(RegisterSaveDTO registerSaveDTO, String userId) {
        try {
            // 获取当前登录用户
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
@@ -199,10 +241,10 @@
            caseInfo.setDefendants(defendants.toString());
            caseInfo.setDagents(dagents.toString());
            caseInfo.setCaseRef(utilsClient.createCaseRef());
            caseInfo.setCanal(CaseBaseConstsEnum.CASE_CANAL_1.getIndex());
            caseInfo.setCaseDes(CaseBaseConstsEnum.CASE_CANAL_1.getDes());
            //todo case_title生成、经纬度转换、来访形式
            if(0 == registerSaveDTO.getOperateType()){
            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());
@@ -210,47 +252,54 @@
                caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1);
                caseInfo.setCreateTime(nowDate);
                caseInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0);
                CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold();
                caseInfoUnfold.setId(utilsClient.getNewTimeId());
                caseInfoUnfold.setCaseId(caseInfo.getId());
                caseInfoUnfold.setCreateTime(nowDate);
                caseInfoUnfold.setUpdateTime(nowDate);
                //默认添加省市
                caseInfo.setQueProv("19");
                caseInfo.setQueProvName("广东省");
                caseInfo.setQueCity("1601");
                caseInfo.setQueCityName("广州市");
                // 删除草稿案件
                if(1 == registerSaveDTO.getIsDraft() ){
                if (1 == registerSaveDTO.getIsDraft()) {
                    draftInfoService.removeDraftInfo(registerSaveDTO.getId());
                }
                //判断是否自行受理
                if(1 == registerSaveDTO.getIsSelfAccept()){
                    //todo 流程接口修改status、status_name、process、process_name
                    caseInfoUnfold.setMediateUnitId(loginUser.getUnitId());
                    caseInfoUnfold.setMediateUnitName(loginUser.getUnitName());
                }
                // 新增纠纷信息
                this.save(caseInfo);
                // 新增纠纷信息扩展表
                CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold();
                caseInfoUnfold.setId(caseInfo.getId());
                caseInfoUnfold.setCreateTime(nowDate);
                caseInfoUnfold.setUpdateTime(nowDate);
                caseInfoUnfoldService.save(caseInfoUnfold);
            }else if(1 == registerSaveDTO.getOperateType()){
                // 启动工作流
                // 判断是否自行受理
                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);
        } 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 被申请人代理人
     * @param plaintiffs      申请人
     * @param pagents         申请人代理人
     * @param defendants      被申请人
     * @param dagents         被申请人代理人
     * @return int
     */
    private void saveCasePerson(RegisterSaveDTO registerSaveDTO, StringBuffer plaintiffs, StringBuffer pagents,
                               StringBuffer defendants, StringBuffer dagents){
                                StringBuffer defendants, StringBuffer dagents) {
        Date now = DateUtils.getNowDate();
@@ -265,8 +314,8 @@
        List<String> newPersonIdList = new ArrayList<>();
        List<String> newAgentIdList = new ArrayList<>();
        if(CollectionUtils.isNotEmpty(personList)){
            for(CasePerson casePerson: personList){
        if (CollectionUtils.isNotEmpty(personList)) {
            for (CasePerson casePerson : personList) {
                newPersonIdList.add(casePerson.getId());
                casePerson.setCaseId(registerSaveDTO.getId());
                casePerson.setCustId(registerSaveDTO.getCustId());
@@ -274,13 +323,13 @@
                //绑定当事人小程序
                this.setPartyUserId(casePerson);
                //添加申请方和被申请方人名组合
                if(CaseBaseConstsEnum.PERSON_TYPE_1.equals(casePerson.getPerType())){
                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.equals(casePerson.getPerType())){
                } else if (CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())) {
                    //被申请方
                    if (StringUtils.isNotEmpty(defendants.toString())) {
                        defendants.append(BaseConsts.COMMA);
@@ -289,9 +338,9 @@
                }
                //判断是否为更新(用原有的Id对比性的Id)
                if(oldPersonIds.contains(casePerson.getId())){
                if (oldPersonIds.contains(casePerson.getId())) {
                    personService.updateById(casePerson);
                }else{
                } else {
                    casePerson.setCreateTime(now);
                    personService.save(casePerson);
                }
@@ -299,7 +348,7 @@
            }
        }
        if(CollectionUtils.isNotEmpty(agentList)) {
        if (CollectionUtils.isNotEmpty(agentList)) {
            for (CaseAgent caseAgent : agentList) {
                newAgentIdList.add(caseAgent.getId());
                caseAgent.setCaseId(registerSaveDTO.getId());
@@ -308,12 +357,12 @@
                caseAgent.setUpdateTime(now);
                //绑定当事人小程序
                this.setPartyUserId(caseAgent);
                if(CaseBaseConstsEnum.PERSON_TYPE_3.equals(caseAgent.getPerType())) {
                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.equals(caseAgent.getPerType())) {
                } else if (CaseBaseConstsEnum.PERSON_TYPE_4.getIndex().equals(caseAgent.getPerType())) {
                    if (StringUtils.isNotEmpty(dagents.toString())) {
                        dagents.append(BaseConsts.COMMA);
                    }
@@ -321,9 +370,9 @@
                }
                //判断是否为更新(用原有的Id对比性的Id)
                if(oldAgentIds.contains(caseAgent.getId())){
                if (oldAgentIds.contains(caseAgent.getId())) {
                    agentService.updateById(caseAgent);
                }else{
                } else {
                    caseAgent.setCreateTime(now);
                    agentService.save(caseAgent);
                }
@@ -335,23 +384,23 @@
            for (String oldPersonId : oldPersonIdList) {
                if (!newPersonIdList.contains(oldPersonId)) {
                    personService.removeById(oldPersonId);
                }else{
                } else {
                }
            }
        }else{
        } else {
            QueryWrapper<CasePerson> casePersonQueryWrapper = new QueryWrapper<>();
            casePersonQueryWrapper.eq("case_id", registerSaveDTO.getId());
            personService.remove(casePersonQueryWrapper);
        }
        //删除冗余的代理人
        if(CollectionUtils.isNotEmpty(newAgentIdList)){
            for(String oldAgentId: oldAgentIdList){
                if(!newAgentIdList.contains(oldAgentId)){
        if (CollectionUtils.isNotEmpty(newAgentIdList)) {
            for (String oldAgentId : oldAgentIdList) {
                if (!newAgentIdList.contains(oldAgentId)) {
                    agentService.removeById(oldAgentId);
                }
            }
        }else{
        } else {
            QueryWrapper<CaseAgent> caseAgentQueryWrapper = new QueryWrapper<>();
            caseAgentQueryWrapper.eq("case_id", registerSaveDTO.getId());
            agentService.remove(caseAgentQueryWrapper);
@@ -360,10 +409,11 @@
    /**
     * PC端-查询纠纷信息
     *
     * @param caseId 纠纷编号
     * @return CaseInfo 纠纷信息
     */
    public CaseInfoDTO getCaseInfo(String caseId){
    public CaseInfoDTO getCaseInfo(String caseId) {
        CaseInfo caseInfo = mapper.selectById(caseId);
        CaseInfoDTO caseInfoDTO = new CaseInfoDTO();
        if (ObjectUtils.isNotEmpty(caseInfo)) {
@@ -384,28 +434,28 @@
            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 + "'";
            ids = "'" + ids + "'";
            Map<String, Object> term = new HashMap<>();
            term.put("mainId", caseId);
            term.put("ownerIds", ids);
            //查询所有附件
            List<FileIdTypeInfoBaseDTO> fileInfoList = sysClient.listIdTypeInfoByOwnerIdList(term);
            for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
                if(caseId.equals(fileInfo.getOwnerId())){
            for (FileIdTypeInfoBaseDTO fileInfo : fileInfoList) {
                if (caseId.equals(fileInfo.getOwnerId())) {
                    caseInfoDTO.setFileInfoList(fileInfo.getFileList());
                }
            }
            for(CasePerson casePerson: casePersonList){
            for (CasePerson casePerson : casePersonList) {
                //把附件根据编号放入
                for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
                    if(casePerson.getId().equals(fileInfo.getOwnerId())){
                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())){
            for (CaseAgent caseAgent : caseAgentList) {
                for (FileIdTypeInfoBaseDTO fileInfo : fileInfoList) {
                    if (caseAgent.getId().equals(fileInfo.getOwnerId())) {
                        caseAgent.setFileInfoList(fileInfo.getFileList());
                    }
                }
@@ -418,10 +468,11 @@
    /**
     * PC端-查询纠纷信息
     *
     * @param caseId 纠纷编号
     * @return CaseInfo 纠纷信息
     */
    public CaseInfoDTO getCaseArchivesInfo(String caseId){
    public CaseInfoDTO getCaseArchivesInfo(String caseId) {
        CaseInfo caseInfo = mapper.selectById(caseId);
        CaseInfoDTO caseInfoDTO = new CaseInfoDTO();
        if (ObjectUtils.isNotEmpty(caseInfo)) {
@@ -442,28 +493,28 @@
            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 + "'";
            ids = "'" + ids + "'";
            Map<String, Object> term = new HashMap<>();
            term.put("mainId", caseId);
            term.put("ownerIds", ids);
            //查询所有附件
            List<FileIdTypeInfoBaseDTO> fileInfoList = sysClient.listIdTypeInfoByOwnerIdList(term);
            for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
                if(caseId.equals(fileInfo.getOwnerId())){
            for (FileIdTypeInfoBaseDTO fileInfo : fileInfoList) {
                if (caseId.equals(fileInfo.getOwnerId())) {
                    caseInfoDTO.setFileInfoList(fileInfo.getFileList());
                }
            }
            for(CasePerson casePerson: casePersonList){
            for (CasePerson casePerson : casePersonList) {
                //把附件根据编号放入
                for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
                    if(casePerson.getId().equals(fileInfo.getOwnerId())){
                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())){
            for (CaseAgent caseAgent : caseAgentList) {
                for (FileIdTypeInfoBaseDTO fileInfo : fileInfoList) {
                    if (caseAgent.getId().equals(fileInfo.getOwnerId())) {
                        caseAgent.setFileInfoList(fileInfo.getFileList());
                    }
                }
@@ -476,6 +527,7 @@
    /**
     * 绑定当事人小程序
     *
     * @param casePerson 当事人信息
     */
    public void setPartyUserId(CasePerson casePerson) {
@@ -499,9 +551,10 @@
    /**
     * 绑定当事人小程序
     *
     * @param caseAgent 代理人人信息
     */
    public void setPartyUserId(CaseAgent 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())) {
@@ -518,105 +571,186 @@
    /**
     * PC端-纠纷登记-保存纠纷信息-正常案件
     *
     * @param registerSaveDTO 纠纷信息
     * @param userId 用户编号
     * @param userId          用户编号
     * @return String 纠纷编号
     */
    public String caseRegisterWechat(RegisterSaveDTO registerSaveDTO, String userId){
        try {
            // 获取当前登录用户
            PaUserDTO loginUser = custClient.paclientGetUser(userId);
            if(ObjectUtils.isEmpty(registerSaveDTO.getCustId())){
                registerSaveDTO.setCustId(loginUser.getCustId());
            }
    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);
            StringBuffer plaintiffs = new StringBuffer();
            StringBuffer defendants = new StringBuffer();
            StringBuffer pagents = new StringBuffer();
            StringBuffer dagents = new StringBuffer();
            int peopleNum = 0;
        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 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.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.saveCasePersonWechat(registerSaveDTO, plaintiffs, pagents, defendants, dagents,loginUser);
            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
            this.saveOrUpdate(caseInfo);
            return registerSaveDTO.getId();
        }catch (Exception e){
            log.error("service方法[CaseInfoService.caseRegisterWechat]调用异常:"+e, e);
            throw new ServiceException("CaseInfoService.caseRegisterWechat", e);
        caseInfo.setInputUserId(loginUser.getId());
        caseInfo.setInputUserName(loginUser.getTrueName());
        caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1);
        if(ObjectUtils.isEmpty(registerSaveDTO.getPeopleNum())){
            caseInfo.setPeopleNum(0);
        }
        if(ObjectUtils.isEmpty(registerSaveDTO.getAmount())){
            caseInfo.setAmount(0.0);
        }
        //默认添加省市
        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 被申请人代理人
     * @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){
                                     StringBuffer defendants, StringBuffer dagents, PaUserDTO loginUser) {
        int peopleNum = 0;
        List<String> newPersonIdList = new ArrayList<>();
        List<String> newAgentIdList = new ArrayList<>();
        // 保存申请人
        List<CasePerson> personList = registerSaveDTO.getPersonList();
        if (CollectionUtils.isNotEmpty(personList)) {
            for (CasePerson casePerson : personList) {
                if(ObjectUtils.isEmpty(casePerson.getId())){
                    casePerson.setId(utilsClient.getNewTimeCaseId());
                }
                newPersonIdList.add(casePerson.getId());
                casePerson.setId(utilsClient.getNewTimeCaseId());
                casePerson.setCaseId(registerSaveDTO.getId());
//                casePerson.setPerType(CaseBaseConstsEnum.PERSON_TYPE_1.getIndex());
//                casePerson.setPerTypeName(CaseBaseConstsEnum.PERSON_TYPE_1.getDes());
                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.equals(casePerson.getPerType())){
                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.equals(casePerson.getPerType())){
                } else if (CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())) {
                    //被申请方
                    if (StringUtils.isNotEmpty(defendants.toString())) {
                        defendants.append(BaseConsts.COMMA);
@@ -629,69 +763,43 @@
            //保存代理人
            List<CaseAgent> agentList = registerSaveDTO.getAgentList();
            if (CollectionUtils.isNotEmpty(agentList)) {
                for(CaseAgent caseAgent: agentList){
                    newAgentIdList.add(caseAgent.getId());
                    if(ObjectUtils.isEmpty(caseAgent.getId())){
                        caseAgent.setId(utilsClient.getNewTimeCaseId());
                    }
                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 (StringUtils.isNotEmpty(pagents.toString())) {
                        pagents.append(BaseConsts.COMMA);
                    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());
                    }
                    pagents.append(caseAgent.getTrueName());
                }
                //todo 绑定当事人小程序
            }
        }
        // 删除冗余的申请人
        if (CollectionUtils.isNotEmpty(newPersonIdList)) {
            List<String> oldPersonIdList = personService.listIdByCaseId(registerSaveDTO.getId());
            for (String oldPersonId : oldPersonIdList) {
                if (!newPersonIdList.contains(oldPersonId)) {
                    personService.removeById(oldPersonId);
                }
            }
        }else{
            QueryWrapper<CasePerson> casePersonQueryWrapper = new QueryWrapper<>();
            casePersonQueryWrapper.eq("case_id", registerSaveDTO.getId());
            personService.remove(casePersonQueryWrapper);
        }
        //删除冗余的代理人
        if(CollectionUtils.isNotEmpty(newAgentIdList)){
            List<String> oldAgentIdList = agentService.listIdByCaseId(registerSaveDTO.getId());
            for(String oldAgentId: oldAgentIdList){
                if(!newAgentIdList.contains(oldAgentId)){
                    agentService.removeById(oldAgentId);
                }
            }
        }else{
            QueryWrapper<CaseAgent> caseAgentQueryWrapper = new QueryWrapper<>();
            caseAgentQueryWrapper.eq("case_id", registerSaveDTO.getId());
            agentService.remove(caseAgentQueryWrapper);
        }
        return peopleNum;
    }
    public RegisterSaveDTO getCaseInfoWechat(String id){
    public RegisterSaveDTO getCaseInfoWechat(String id) {
        RegisterSaveDTO registerSaveDTO = new RegisterSaveDTO();
        CaseInfo caseInfo = this.getById(id);
        if(ObjectUtils.isNotEmpty(caseInfo)){
        if (ObjectUtils.isNotEmpty(caseInfo)) {
            BeanUtils.copyProperties(caseInfo, registerSaveDTO);
        }
        QueryWrapper<CasePerson> casePersonQueryWrapper = new QueryWrapper<>();
        casePersonQueryWrapper.eq("case_id", registerSaveDTO.getId());
        List<CasePerson>  personList = personService.list(casePersonQueryWrapper);
        List<CasePerson> personList = personService.list(casePersonQueryWrapper);
        registerSaveDTO.setPersonList(personList);
        QueryWrapper<CaseAgent> caseAgentQueryWrapper = new QueryWrapper<>();
@@ -703,50 +811,56 @@
    }
    /**
     * 按条件分页查询
     * @param page 分页对象
     * 按条件分页查询-小程序查询
     *
     * @param page  分页对象
     * @param terms 条件
     * @return Page
     */
    public Page<CaseInfoWeChatDTO> pageQueryWechat(String userId,PageRequest page, Map<String, Object> terms){
    public Page<CaseInfoWeChatDTO> pageQueryWechat(String userId, PageRequest page, Map<String, Object> terms) {
        PaUserDTO loginUser = custClient.paclientGetUser(userId);
        List<CaseInfoWeChatDTO> list = new ArrayList<>();
        String personType = terms.get("personType")+"";
        if(ObjectUtils.isEmpty(personType)){
        String personType = terms.get("personType") + "";
        if (ObjectUtils.isEmpty(personType)) {
            throw new RuntimeException("请选择人员类型");
        }
        if (ObjectUtils.isEmpty(loginUser.getIdcard())) {
            return new PageImpl<CaseInfoWeChatDTO>(list, page, 0);
        }
        QueryWrapper<CasePerson> personWrapper = new QueryWrapper<>();
        personWrapper.select("case_id");
        personWrapper.eq("party_user_id", userId);
        if("1".equals(personType)){
            personWrapper.eq("per_type",CaseBaseConstsEnum.PERSON_TYPE_1.getIndex());
        }else {
            personWrapper.eq("per_type",CaseBaseConstsEnum.PERSON_TYPE_2.getIndex());
        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<CasePerson> casePersonList = personService.list(personWrapper);
        if(ObjectUtils.isEmpty(casePersonList)){
        if (ObjectUtils.isEmpty(casePersonList)) {
            return new PageImpl<CaseInfoWeChatDTO>(list, page, 0);
        }
        List<String> ids = casePersonList.stream().map(CasePerson::getCaseId).collect(Collectors.toList());
        terms.put("idList",ids);
        terms.put("ids", ids);
        long total = mapper.countTerms(terms);
        List<CaseInfo> content = mapper.pageTerms(page, terms);
        if(ObjectUtils.isNotEmpty(content)){
            for(CaseInfo caseInfo: content){
        if (ObjectUtils.isNotEmpty(content)) {
            for (CaseInfo caseInfo : content) {
                CaseInfoWeChatDTO caseInfoWeChatDTO = new CaseInfoWeChatDTO();
                BeanUtils.copyProperties(caseInfo, caseInfoWeChatDTO);
                if(ObjectUtils.isNotEmpty(caseInfo.getProcess()) && caseInfo.getProcess().equals(1) || caseInfo.getProcess().equals(2)){
                    caseInfoWeChatDTO.setProcessStatus(1);
                    caseInfoWeChatDTO.setProcessStatusName("待受理");
                }else if(ObjectUtils.isNotEmpty(caseInfo.getProcess()) && caseInfo.getProcess().equals(3) || caseInfo.getProcess().equals(4)){
                    caseInfoWeChatDTO.setProcessStatus(2);
                    caseInfoWeChatDTO.setProcessStatusName("办理中");
                }else if(ObjectUtils.isNotEmpty(caseInfo.getProcess()) && caseInfo.getProcess().equals(5) || caseInfo.getProcess().equals(6)){
                    caseInfoWeChatDTO.setProcessStatus(3);
                    caseInfoWeChatDTO.setProcessStatusName("已结案");
                }else{
                    caseInfoWeChatDTO.setProcessStatus(4);
                    caseInfoWeChatDTO.setProcessStatusName("不予受理");
                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<CasePerson> personWrapper1 = new QueryWrapper<>();
                personWrapper1.eq("case_id", caseInfo.getId());
                List<CasePerson> casePersonList1 = personService.list(personWrapper1);
@@ -757,17 +871,282 @@
                for (CasePerson casePerson : casePersonList1) {
                    CasePersonWechatDTO casePersonWechatDTO = new CasePersonWechatDTO();
                    BeanUtils.copyProperties(casePerson, casePersonWechatDTO);
                    if(CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())){
                    if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(casePerson.getPerType())) {
                        plaintiffList.add(casePersonWechatDTO);
                    }else if(CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())){
                    } else if (CaseBaseConstsEnum.PERSON_TYPE_2.getIndex().equals(casePerson.getPerType())) {
                        defendantList.add(casePersonWechatDTO);
                    }
                }
                caseInfoWeChatDTO.setDefendantList(defendantList);
                caseInfoWeChatDTO.setPlaintiffList(plaintiffList);
                //评价信息
                Map<String, Object> 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<CaseInfoWeChatDTO>(list, page, total);
    }
    /**
     * 按条件分页查询-综合查询
     *
     * @param page  分页对象
     * @param terms 条件
     * @return Page
     */
    public Page<CasePageDTO> pageQueryAll(PageRequest page, Map<String, Object> terms) {
        long total = mapper.countTermsAll(terms);
        List<CasePageDTO> content = mapper.pageTermsAll(page, terms);
        if (ObjectUtils.isNotEmpty(content)) {
            for (CasePageDTO casePageDTO : content) {
                if(ObjectUtils.isNotEmpty(casePageDTO.getQueRoadName())){
                    casePageDTO.setAreaName(casePageDTO.getQueRoadName());
                }else if(ObjectUtils.isNotEmpty(casePageDTO.getAreaName())){
                    casePageDTO.setAreaName(casePageDTO.getAreaName());
                }else if(ObjectUtils.isNotEmpty(casePageDTO.getQueCityName())){
                    casePageDTO.setAreaName(casePageDTO.getQueCityName());
                }
                if(ObjectUtils.isNotEmpty(casePageDTO.getCaseLevel())){
                    switch (casePageDTO.getCaseLevel()){
                        case "1":
                            casePageDTO.setCaseLevel("一级");
                            break;
                        case "2":
                            casePageDTO.setCaseLevel("二级");
                            break;
                        case "3":
                            casePageDTO.setCaseLevel("三级");
                            break;
                    }
                }
                QueryWrapper<CasePerson> personWrapper1 = new QueryWrapper<>();
                personWrapper1.eq("case_id", casePageDTO.getId());
                List<CasePerson> casePersonList1 = personService.list(personWrapper1);
                //申请人集合
                List<CasePersonWeDTO> plaintiffList = new ArrayList<>();
                //被申请人集合
                List<CasePersonWeDTO> 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<CasePageDTO>(content, page, total);
    }
    public CaseStatisticsBaseDTO statistics(Map<String, Object> terms) throws IOException {
        Object canal = null;
        if(ObjectUtils.isNotEmpty(terms.get("canal"))){
            canal = terms.get("canal");
        }
        //基础数据统计
        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<CaseStatisticsAreaDTO> caseStatisticsAreaDTOS = mapper.statisticsArea(terms);
        if (ObjectUtils.isEmpty(caseStatisticsAreaDTOS)) {
            caseStatisticsAreaDTOS = new ArrayList<>();
        }
        CaseStatisticsAreaDTO allArea = new CaseStatisticsAreaDTO();
        allArea.setAreaName("本级");
        allArea.setAreaCode("1");
        List<String> 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<QueAreaDTO> queArea = listAreaByType(terms.get("queArea"));
        log.info("listAreaByType {}", JSON.toJSONString(queArea));
        for (QueAreaDTO 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<CaseStatisticsTypeDTO> caseStatisticsTypeDTOS = mapper.statisticsType(terms);
        if (ObjectUtils.isNotEmpty(caseStatisticsTypeDTOS)) {
            sortType(caseStatisticsTypeDTOS);
        }
        Integer typeTotalNum = 0;
        Integer otherCaseNum = 0;
        int i = 1;
        List<CaseStatisticsTypeDTO> 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);
        //案件集合
        if(ObjectUtils.isEmpty(canal)){
            terms.remove("canal");
        }else{
            terms.put("canal", canal);
        }
        Sort sort = Sort.by(Sort.Direction.DESC, "a.create_time");
        PageRequest pageRequest = PageRequest.of(0, 5, sort);
        Page<CasePageDTO> casePageDTOS = pageQueryAll(pageRequest, terms);
        if (ObjectUtils.isNotEmpty(casePageDTOS.getContent())) {
            caseStatisticsBaseDTO.setCaseList(casePageDTOS.getContent());
        } else {
            caseStatisticsBaseDTO.setCaseList(new ArrayList<>());
        }
        return caseStatisticsBaseDTO;
    }
    public List<CaseStatisticsTypeDTO> sortType(List<CaseStatisticsTypeDTO> 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<CaseStatisticsAreaDTO> sortArea(List<CaseStatisticsAreaDTO> caseStatisticsAreaDTOS) {
        Map<String, String> map = new HashMap<>();
        map.put("越秀区","2");
        map.put("海珠区","3");
        map.put("荔湾区","4");
        map.put("天河区","5");
        map.put("白云区","6");
        map.put("黄埔区","7");
        map.put("花都区","8");
        map.put("番禺区","9");
        map.put("南沙区","10");
        map.put("从化区","11");
        map.put("增城区","12");
        for (CaseStatisticsAreaDTO caseStatisticsAreaDTO : caseStatisticsAreaDTOS) {
            if(map.containsKey(caseStatisticsAreaDTO.getAreaName())){
                caseStatisticsAreaDTO.setAreaCode(map.get(caseStatisticsAreaDTO.getAreaName()));
            }
        }
        caseStatisticsAreaDTOS.sort((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;
    }
    /**
     * 根据不同的等级获取不同区域子集合
     */
    public List<QueAreaDTO> listAreaByType(Object areaCode) {
        log.info("listAreaByType {},{}", areaCode);
        String parentId = "1601";
        if (ObjectUtils.isNotEmpty(areaCode)) {
            parentId = String.valueOf(areaCode);
        }
        List<QueAreaDTO> queAreaDTOS = sysClient.listByParentId(parentId);
        return queAreaDTOS;
    }
}