From f7dd6c04223ea30a535e7f340d620435102aad8b Mon Sep 17 00:00:00 2001
From: zhouxiantao <1026371446@qq.com>
Date: Thu, 19 Sep 2024 17:32:43 +0800
Subject: [PATCH] 纠纷态势分析

---
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java |  437 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 358 insertions(+), 79 deletions(-)

diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
index 4bbb026..e26abb9 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
@@ -1,9 +1,7 @@
 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.base.common.utils.*;
 import cn.huge.module.cases.domain.dto.*;
 
 import cn.huge.module.cases.domain.po.CaseAgent;
@@ -16,18 +14,21 @@
 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.QueAddrBaseDTO;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.domain.Page;
@@ -75,6 +76,13 @@
     @Autowired
     private SysClientImpl sysClient;
 
+    @Autowired
+    private CaseTaskService caseTaskService;
+
+    @Autowired
+    private CaseEvaluateService caseEvaluateService;
+
+
     /**
     * 更新对象
     * @param entity 对象
@@ -85,6 +93,20 @@
         }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<String> caseIdList){
+        try{
+            mapper.updateCaseInfoList(entity, caseIdList);
+        }catch (Exception e){
+            log.error("[CaseInfoService.updateCaseInfoList]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseInfoService.updateCaseInfoList", e);
         }
     }
 
@@ -194,8 +216,10 @@
             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生成、经纬度转换、来访形式
+            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());
@@ -204,25 +228,32 @@
                 caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1);
                 caseInfo.setCreateTime(nowDate);
                 caseInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0);
-
-                CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold();
-                caseInfoUnfold.setId(caseInfo.getId());
-                caseInfoUnfold.setCreateTime(nowDate);
-                caseInfoUnfold.setUpdateTime(nowDate);
-
+                //默认添加省市
+                caseInfo.setQueProv("19");
+                caseInfo.setQueProvName("广东省");
+                caseInfo.setQueCity("1601");
+                caseInfo.setQueCityName("广州市");
                 // 删除草稿案件
                 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);
+                // 启动工作流
+                // 判断是否自行受理
+                if(1 == registerSaveDTO.getIsSelfAccept()){
+                    // 自行受理流程
+                     return caseTaskService.webStartFlowZXSL(caseInfo, loginUser);
+                }else {
+                    // 自动调度流程
+                    caseTaskService.webStartFlowLFDJ(caseInfo);
+                }
             }else if(1 == registerSaveDTO.getOperateType()){
                 this.updateById(caseInfo);
             }
@@ -267,13 +298,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);
@@ -301,12 +332,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);
                     }
@@ -516,59 +547,138 @@
      * @return String 纠纷编号
      */
     public String caseRegisterWechat(RegisterSaveDTO registerSaveDTO, String userId){
-        try {
-            // 获取当前登录用户
-            PaUserDTO loginUser = custClient.paclientGetUser(userId);
-            if(ObjectUtils.isEmpty(registerSaveDTO.getCustId())){
-                registerSaveDTO.setCustId(loginUser.getCustId());
-            }
+        // 获取当前登录用户
+        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.setVisitTime(nowDate);
-            caseInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0);
-            caseInfo.setProcess(1);
-            caseInfo.setProcessName("来访登记");
-            //todo case_ref生成、case_title生成
+        caseInfo.setInputUserId(loginUser.getId());
+        caseInfo.setInputUserName(loginUser.getTrueName());
+        caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1);
+        //默认添加省市
+        caseInfo.setQueProv("19");
+        caseInfo.setQueProvName("广东省");
+        caseInfo.setQueCity("1601");
+        caseInfo.setQueCityName("广州市");
 
-            caseInfoUnfold.setId(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.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());
+
+        // 为了演示先兼容小程序没属地问题,写死属地
+        if (ObjectUtils.isEmpty(caseInfo.getQueProv())) {
+//                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());
+            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());
+        }
+        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();
     }
 
     /**
@@ -597,13 +707,13 @@
                 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);
@@ -625,16 +735,22 @@
                     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 绑定当事人小程序
             }
         }
-
         return peopleNum;
     }
 
@@ -664,14 +780,18 @@
      * @return Page
      */
     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)){
             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);
+        personWrapper.eq("certi_no", loginUser.getIdcard());
         if("1".equals(personType)){
             personWrapper.eq("per_type",CaseBaseConstsEnum.PERSON_TYPE_1.getIndex());
         }else {
@@ -691,6 +811,18 @@
                 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<CasePerson> personWrapper1 = new QueryWrapper<>();
                 personWrapper1.eq("case_id", caseInfo.getId());
                 List<CasePerson> casePersonList1 = personService.list(personWrapper1);
@@ -709,6 +841,18 @@
                 }
                 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);
             }
         }
@@ -748,4 +892,139 @@
         }
         return new PageImpl<CasePageDTO>(content, page, total);
     }
+
+    public CaseStatisticsBaseDTO statistics(Map<String, Object> terms){
+        //基础数据统计
+        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");
+        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()));
+        }
+        caseStatisticsAreaDTOS.add(allArea);
+        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);
+        oneSource.setCanalName(CaseBaseConstsEnum.CASE_CANAL_1.getDes());
+        terms.put("canal",CaseBaseConstsEnum.CASE_CANAL_2.getIndex());
+        CaseStatisticsSourceDTO twoSource = mapper.statisticsSource(terms);
+        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<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){
+        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;
+    }
 }

--
Gitblit v1.8.0