k94314517
2025-07-04 50fb58286ed3b718c39a97e0987ee7561a295651
server/service/src/main/java/com/doumee/service/business/impl/SettleClaimsServiceImpl.java
@@ -14,6 +14,7 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.*;
import com.doumee.dao.business.join.ApplyDetailJoinMapper;
import com.doumee.dao.business.join.MultifileJoinMapper;
import com.doumee.dao.business.join.SettleClaimsJoinMapper;
import com.doumee.dao.business.join.SettleClaimsLogJoinMapper;
@@ -23,6 +24,7 @@
import com.doumee.dao.business.vo.SettleClaimsMoneyVO;
import com.doumee.dao.business.vo.SettleParentStatusVO;
import com.doumee.dao.business.vo.dataBoard.DataListVO;
import com.doumee.dao.business.vo.dataBoard.InsuranceDataVO;
import com.doumee.dao.business.vo.dataBoard.SettleClaimsDataVO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.SettleClaimsLogService;
@@ -53,6 +55,7 @@
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -100,6 +103,18 @@
    @Autowired
    private ApplyDetailMapper applyDetailMapper;
    @Autowired
    private AreasMapper areasMapper;
    @Autowired
    private WorktypeMapper worktypeMapper;
    @Autowired
    private InsuranceMapper insuranceMapper;
    @Autowired
    private ApplyDetailJoinMapper applyDetailJoinMapper;
    /**
     * 删除附件
     * @return
@@ -391,20 +406,22 @@
        settleClaims.setOrigin(Constants.ONE);
        if(Objects.isNull(settleClaims)
                || Objects.isNull(settleClaims.getExtData())
                || Objects.isNull(settleClaims.getExtData().getBxName())
                || Objects.isNull(settleClaims.getExtData().getMemberName())
                || Objects.isNull(settleClaims.getExtData().getMemberIdcardType())
                || Objects.isNull(settleClaims.getExtData().getMemberIdcard())){
                || Objects.isNull(settleClaims.getExtData().getMemberIdcard())
                || Objects.isNull(settleClaims.getStatus())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(!Constants.equalsObject(settleClaims.getStatus(),Constants.ZERO)
                &&(  Objects.isNull(settleClaims.getExtData().getBxName())
                || Objects.isNull(settleClaims.getExtData().getReportDate())
                || Objects.isNull(settleClaims.getExtData().getBxCode())
                || Objects.isNull(settleClaims.getExtData().getBxEnddate())
                || Objects.isNull(settleClaims.getExtData().getBxOrg())
                || Objects.isNull(settleClaims.getInformantPhone()) )){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
//        if(!Constants.equalsObject(settleClaims.getStatus(),Constants.ZERO)
//                &&( Objects.isNull(settleClaims.getExtData().getReportDate())
//                || Objects.isNull(settleClaims.getExtData().getBxCode())
//                || Objects.isNull(settleClaims.getExtData().getBxEnddate())
//                || Objects.isNull(settleClaims.getExtData().getBxOrg())
//                || Objects.isNull(settleClaims.getInformantPhone()) )){
//            throw new BusinessException(ResponseStatus.BAD_REQUEST);
//        }
        if(!Constants.equalsInteger(loginUserInfo.getType(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非平台管理员无法进行该操作");
        }
@@ -1131,7 +1148,7 @@
    public void saveSettleClaimsLog(SettleClaims settleClaims, Constants.SettleClaimsLogType settleClaimsLogType, String content,Constants.SettleClaimsStatus settleClaimsStatus){
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
        SettleClaimsLog settleClaimsLog = new SettleClaimsLog();
        settleClaimsLog.setCreateDate(new Date());
        settleClaimsLog.setCreateDate(Objects.isNull(settleClaims.getEditDate())?new Date():settleClaims.getEditDate());
        settleClaimsLog.setCreator(loginUserInfo.getId());
        settleClaimsLog.setIsdeleted(Constants.ZERO);
        settleClaimsLog.setSettleClainmsId(settleClaims.getId());
@@ -1296,7 +1313,7 @@
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getInformantName()),SettleClaims::getInformantName, pageWrap.getModel().getInformantName());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getHappenTime()),SettleClaims::getHappenTime, pageWrap.getModel().getHappenTime());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCreateDateStr()),SettleClaims::getCreateDate, pageWrap.getModel().getCreateDateStr());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()),SettleClaimsExt::getMemberName, pageWrap.getModel().getMemberName());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getExtData().getMemberName()),SettleClaimsExt::getMemberName, pageWrap.getModel().getExtData().getMemberName());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getSolutionName()),SettleClaimsExt::getBxName, pageWrap.getModel().getSolutionName());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getApplyCode()),SettleClaimsExt::getBxCode, pageWrap.getModel().getApplyCode());
        queryWrapper.eq(pageWrap.getModel().getInHospital()!=null,SettleClaims::getInHospital, pageWrap.getModel().getInHospital());
@@ -1349,24 +1366,39 @@
                    ||Objects.isNull(settleClaimsDTO.getMedicalInsurance())
                    ||StringUtils.isBlank(settleClaimsDTO.getInformantName())
                    ||StringUtils.isBlank(settleClaimsDTO.getInformantPhone())
                    ||StringUtils.isBlank(settleClaimsDTO.getReceiveUserName())
                    ||StringUtils.isBlank(settleClaimsDTO.getReceiveBank())
                    ||StringUtils.isBlank(settleClaimsDTO.getReceiveAccount())
//                    ||StringUtils.isBlank(settleClaimsDTO.getReceiveUserName())
//                    ||StringUtils.isBlank(settleClaimsDTO.getReceiveBank())
//                    ||StringUtils.isBlank(settleClaimsDTO.getReceiveAccount())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(settleClaimsDTO.getInsuranceApplyId());
        if(Objects.isNull(insuranceApply)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        ApplyDetail applyDetail = applyDetailMapper.selectById(settleClaimsDTO.getApplyDetailId());
        if(Objects.isNull(applyDetail)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        Member member =memberMapper.selectById(settleClaimsDTO.getMemberId());
        if(member == null){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,出险人信息不正确!");
        }
        if(!(Constants.equalsInteger(insuranceApply.getId(),applyDetail.getApplyId())||Constants.equalsInteger(applyDetail.getMemberId(),member.getId()))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"信息匹配错误");
        }
        SettleClaims settleClaims = new SettleClaims();
        BeanUtils.copyProperties(settleClaimsDTO,settleClaims);
        settleClaims.setEditDate(new Date());
        settleClaims.setReportNumStatus(Constants.ZERO);
        settleClaims.setCompanyId(loginUserInfo.getCompanyId());
        settleClaims.setOrigin(Constants.ZERO);
        settleClaims.setMemberName(member.getName());
        settleClaims.setCreateDate(new Date());
        settleClaims.setMemberAge(
                Constants.calculateAge(member.getIdcardNo(),DateUtil.StringToDate(settleClaims.getHappenTime()))
        );
        if(Constants.equalsInteger(settleClaimsDTO.getSaveType(),Constants.ONE)&&StringUtils.isBlank(settleClaims.getCode())){
            Long nextCode = settleClaimsMapper.selectCount(new QueryWrapper<SettleClaims>().lambda().ne(SettleClaims::getStatus,Constants.SettleClaimsStatus.WAIT_ACCEPTANCE.getKey())
                    .eq(SettleClaims::getOrigin,Constants.ZERO) .like(SettleClaims::getCreateDate,DateUtil.getDate(new Date(),"yyyy-MM-dd"))
@@ -1376,11 +1408,21 @@
            );
        }
        if(Objects.nonNull(settleClaims.getId())){
            SettleClaims model = settleClaimsMapper.selectById(settleClaims.getId());
            if(Objects.isNull(model)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            if(!(Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.WAIT_ACCEPTANCE.getKey())
                    ||Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey())
                    ||Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.FINISH_ACCEPTANCE.getKey()))){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据状态已流转,无法进行修改");
            }
            settleClaims.setEditDate(new Date());
            settleClaims.setEditor(loginUserInfo.getId());
            settleClaims.setStatus(Constants.equalsInteger(settleClaimsDTO.getSaveType(),Constants.ONE)?
                    Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey():Constants.SettleClaimsStatus.WAIT_ACCEPTANCE.getKey());
            if(Constants.equalsInteger(settleClaimsDTO.getSaveType(),Constants.ONE)){
            if(Constants.equalsInteger(settleClaimsDTO.getSaveType(),Constants.ONE)&&
                    Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.WAIT_ACCEPTANCE.getKey())){
                //处理风险信息
                this.saveRisk(settleClaims,settleClaimsDTO,systemDictDataService);
            }
@@ -1424,6 +1466,12 @@
    }
    public void saveRisk(SettleClaims settleClaims, SettleClaimsDTO settleClaimsDTO, SystemDictDataServiceImpl systemDictDataService){
        settleClaims.setRiskDelayUnit(Constants.ZERO);
        settleClaims.setRiskUnTakeEffect(Constants.ZERO);
        settleClaims.setRiskNewUser(Constants.ZERO);
        settleClaims.setRiskTimesCx(Constants.ZERO);
        settleClaims.setRiskTimesSp(Constants.ZERO);
        settleClaims.setRiskRepeat(Constants.ZERO);
        //根据保单信息 查询出主方案
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(settleClaims.getInsuranceApplyId());
        if(Objects.isNull(insuranceApply)){
@@ -1450,6 +1498,7 @@
        if(Constants.equalsInteger(solutionsBase.getRiskNewUserStatus(),Constants.ONE)
                && Objects.nonNull(solutionsBase.getRiskNewUserUnit())
                && Objects.nonNull(solutionsBase.getRiskNewUserTime())
                && happenTime.getTime() < applyDetail.getStartTime().getTime()
        ){
            if(happenTime.getTime() > applyDetail.getEndTime().getTime()){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"事故发生时间未在人员保障日期范围内");
@@ -1466,10 +1515,12 @@
                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"事故发生时间未在人员保障日期范围内");
                }
            }
            if(happenTime.getTime() < startDate.getTime() ){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"事故发生时间未在人员保障日期范围内");
            }else{
                map.put("info","事故发生时间早于保单生效时间"+solutionsBase.getRiskNewUserUnit()+(Constants.equalsInteger(solutionsBase.getRiskNewUserUnit(),Constants.ONE)?"小时内":"天内"));
                settleClaims.setRiskUnTakeEffect(Constants.ONE);
                riskList.add(map);
            }
        }else{
@@ -1485,18 +1536,21 @@
            //根据配置 查询 延迟报案提醒时间单位 0分钟 1小时 2天
            if(Constants.equalsInteger(solutionsBase.getRiskDelayUnit(),Constants.ZERO)){
                if(DateUtil.getBetweenMin(happenTime,new Date())>solutionsBase.getRiskDelayTime()){
                    map.put("info","报案时间超过案发时间"+solutionsBase.getRiskDelayUnit()+"分钟");
                    map.put("info","报案时间超过案发时间"+solutionsBase.getRiskDelayTime()+"分钟");
                    settleClaims.setRiskDelayUnit(Constants.ONE);
                    riskList.add(map);
                }
            }else if(Constants.equalsInteger(solutionsBase.getRiskDelayUnit(),Constants.ONE)){
                if(DateUtil.getBetweenHours(happenTime,new Date())>solutionsBase.getRiskDelayTime()){
                    map.put("info","报案时间超过案发时间"+solutionsBase.getRiskDelayUnit()+"小时");
                    map.put("info","报案时间超过案发时间"+solutionsBase.getRiskDelayTime()+"小时");
                    riskList.add(map);
                    settleClaims.setRiskDelayUnit(Constants.ONE);
                }
            }else if(Constants.equalsInteger(solutionsBase.getRiskDelayUnit(),Constants.TWO)){
                if(DateUtil.getBetweenDay(happenTime,new Date())>solutionsBase.getRiskDelayTime()){
                    map.put("info","报案时间超过案发时间"+solutionsBase.getRiskDelayUnit()+"天");
                    map.put("info","报案时间超过案发时间"+solutionsBase.getRiskDelayTime()+"天");
                    riskList.add(map);
                    settleClaims.setRiskDelayUnit(Constants.ONE);
                }
            }
        }
@@ -1511,7 +1565,7 @@
                    .ne(Objects.nonNull(settleClaims.getId()),SettleClaims::getId,settleClaims.getId())
                    .apply(" HAPPEN_TIME > DATE_SUB(now(), INTERVAL 365 DAY)  ")
            );
            if(cxcs>Integer.valueOf(riskConfigVO.getRiskTimesReportTimes())){
            if(cxcs>=Integer.valueOf(riskConfigVO.getRiskTimesReportTimes())){
                Map<String,String> map = new HashMap<>();
                map.put("title","疑似多次出险");
                map.put("info","出险人一年内已出险"+cxcs+"次");
@@ -1527,10 +1581,10 @@
            Long cxcs = settleClaimsMapper.selectCount(new QueryWrapper<SettleClaims>().lambda()
                    .eq(SettleClaims::getMemberId,settleClaimsDTO.getMemberId())
                    .ne(Objects.nonNull(settleClaims.getId()),SettleClaims::getId,settleClaims.getId())
                    .apply(riskConfigVO.getRiskRepeatReportTimeUnit().equals("1")," HAPPEN_TIME > DATE_SUB(now(), INTERVAL "+riskConfigVO.getRiskRepeatReportTime()+" HOUR)  ")
                    .apply(riskConfigVO.getRiskRepeatReportTimeUnit().equals("2")," HAPPEN_TIME > DATE_SUB(now(), INTERVAL "+riskConfigVO.getRiskRepeatReportTime()+" DAY)  ")
                    .apply(riskConfigVO.getRiskRepeatReportTimeUnit().equals("1")," CREATE_DATE > DATE_SUB(now(), INTERVAL "+riskConfigVO.getRiskRepeatReportTime()+" HOUR)  ")
                    .apply(riskConfigVO.getRiskRepeatReportTimeUnit().equals("2")," CREATE_DATE > DATE_SUB(now(), INTERVAL "+riskConfigVO.getRiskRepeatReportTime()+" DAY)  ")
            );
            if(cxcs > Constants.TWO){
            if(cxcs >= Constants.ONE){
                Map<String,String> map = new HashMap<>();
                map.put("title","疑似重复报案");
                map.put("info","该出险人在"+riskConfigVO.getRiskRepeatReportTime()+(riskConfigVO.getRiskRepeatReportTimeUnit().equals("1")?"小时":"天")+"内已报案"+cxcs+"次");
@@ -1546,8 +1600,9 @@
                && StringUtils.isNotBlank(riskConfigVO.getRiskClaimTimes())){
            Long cxcs = settleClaimsMapper.selectCount(new QueryWrapper<SettleClaims>().lambda()
                    .eq(SettleClaims::getInsuranceApplyId,settleClaimsDTO.getInsuranceApplyId())
                            .eq(SettleClaims::getIsdeleted,Constants.ZERO)
                    .ne(Objects.nonNull(settleClaims.getId()),SettleClaims::getId,settleClaims.getId())
                    .apply(" HAPPEN_TIME > DATE_SUB(now(), INTERVAL 365 DAY)  ")
                    .apply(" CREATE_DATE > DATE_SUB(now(), INTERVAL 365 DAY)  ")
            );
            if(cxcs > Integer.valueOf(riskConfigVO.getRiskClaimTimes())){
                Map<String,String> map = new HashMap<>();
@@ -1562,7 +1617,7 @@
        if(StringUtils.isNotBlank(riskConfigVO.getRiskSensitiveWordsOpen())
                && StringUtils.equals(riskConfigVO.getRiskSensitiveWordsOpen(),Constants.ONE+"")
                && StringUtils.isNotBlank(riskConfigVO.getRiskSensitiveWords())){
            String [] words = riskConfigVO.getRiskSensitiveWords().split(",");
            String [] words = riskConfigVO.getRiskSensitiveWords().split(";");
            String sensitiveWord = ""; 
            for (String word:words) {
                if(settleClaims.getContent().indexOf(word)>=Constants.ZERO){
@@ -1813,6 +1868,7 @@
        if(Constants.equalsInteger(settleClaims.getWaitSupplement(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"待企业补充文件,请等待企业补充文件");
        }
        settleClaims.setEditDate(new Date());
        //存储日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.SUPPLEMENT_DESCRIBE,dto.getDescribe(),null);
        settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
@@ -1887,6 +1943,7 @@
                multifileJoinMapper.insert(multifile);
            }
        }
        settleClaims.setEditDate(new Date());
        //存储日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.SUPPLEMENT,null,null);
        //删除企业的代办通知------
@@ -1919,13 +1976,12 @@
        if(!Constants.equalsInteger(settleClaims.getCompanyId(),loginUserInfo.getCompanyId())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非您企业的数据,您无法进行该操作");
        }
//        if(!Constants.equalsInteger(Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey(),settleClaims.getStatus())){
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
//        }
        settleClaims.setEditDate(new Date());
        //存储日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.RETURN_SETTLE,null,Constants.SettleClaimsStatus.RETURN);
        settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,DateUtil.getCurrDateTime()).set(SettleClaims::getStatus,Constants.SettleClaimsStatus.RETURN.getKey()));
                .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,settleClaims.getEditDate())
                .set(SettleClaims::getStatus,Constants.SettleClaimsStatus.RETURN.getKey()));
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给企业发通知,已结案-------------
        sendNoticeBiz(Constants.ZERO,settleClaims ,Constants.NoticeType.FOURTEEN);
@@ -1955,11 +2011,12 @@
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        settleClaims.setEditDate(new Date());
        //存储日志
        this.saveSettleClaimsLog(settleClaims, Constants.SettleClaimsLogType.UPD_CASE_TYPE,Constants.SettleClaimsLogType.UPD_CASE_TYPE.getInfo(),null);
        settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                .eq(SettleClaims::getId,dto.getId())
                .set(SettleClaims::getEditDate,DateUtil.getCurrDateTime())
                .set(SettleClaims::getEditDate,settleClaims.getEditDate())
                .set(SettleClaims::getEditor,loginUserInfo.getId())
                .set(SettleClaims::getCaseType,dto.getCaseType()));
    }
@@ -1991,10 +2048,11 @@
        Constants.SettleClaimsStatus settleClaimsStatus =
                Constants.equalsInteger(dto.getRegisterStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())?Constants.SettleClaimsStatus.CONFIRM_INFORMATION:Constants.SettleClaimsStatus.FINISH_ACCEPTANCE;
        //存储日志
        settleClaims.setEditDate(new Date());
        this.saveSettleClaimsLog(settleClaims, Constants.equalsInteger(dto.getRegisterStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())?Constants.SettleClaimsLogType.PLATFORM_REGISTER:Constants.SettleClaimsLogType.PLATFORM_RETURN,dto.getDescribe(),settleClaimsStatus);
        settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                .eq(SettleClaims::getId,dto.getId())
                .set(SettleClaims::getEditDate, DateUtil.getCurrDateTime())
                .set(SettleClaims::getEditDate, settleClaims.getEditDate())
                .set(SettleClaims::getEditor,loginUserInfo.getId())
                .set(SettleClaims::getStatus,settleClaimsStatus.getKey()));
@@ -2058,12 +2116,14 @@
//        if(Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())&&StringUtils.isNotBlank(model.getReportNum())){
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"已修改报案号,无法再次修改");
//        }
        settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                .eq(SettleClaims::getId,param.getId()).set(SettleClaims::getEditDate,
                        DateUtil.getCurrDateTime()).set(SettleClaims::getReportNum,param.getReportNum()));
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                .eq(SettleClaims::getId,param.getId()).set(SettleClaims::getEditDate,
                        update.getEditDate()).set(SettleClaims::getReportNum,param.getReportNum()));
        update.setEditor(user.getId());
        update.setReportNumStatus(model.getReportNumStatus()+Constants.ONE);
        update.setId(model.getId());
@@ -2077,6 +2137,7 @@
        String info =applyLogType.getInfo();
        info = info.replace("${param}", update.getReportNum());
        SettleClaimsLog log = new SettleClaimsLog(update,applyLogType.getName(), info,update.getId(),applyLogType.getKey(), JSONObject.toJSONString(model), JSONObject.toJSONString(update));
        log.setCreateDate(update.getEditDate());
        settleClaimsLogMapper.insert(log);
        return  1;
@@ -2120,6 +2181,7 @@
        String info =applyLogType.getInfo();
        info = info.replace("${param}", param.getDescribe());
        SettleClaimsLog log = new SettleClaimsLog(update,applyLogType.getName(), info,update.getId(),applyLogType.getKey(), JSONObject.toJSONString(model), JSONObject.toJSONString(update));
        log.setCreateDate(update.getEditDate());
        settleClaimsLogMapper.insert(log);
        return  1;
@@ -2153,19 +2215,21 @@
        if(!Constants.equalsInteger(Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey(),settleClaims.getStatus())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        settleClaims.setEditDate(new Date());
        if(Constants.equalsInteger(dto.getStatus(),Constants.ZERO) || Constants.equalsInteger(dto.getStatus(),Constants.THREE)){
            //受理
            settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                    .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,DateUtil.getCurrDateTime()).set(SettleClaims::getEditor,loginUserInfo.getId())
                    .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,settleClaims.getEditDate()).set(SettleClaims::getEditor,loginUserInfo.getId())
                    .set(SettleClaims::getStatus,Constants.SettleClaimsStatus.ACCEPTANCE.getKey()));
            //存储日志
            this.saveSettleClaimsLog(settleClaims,
                    Constants.equalsInteger(dto.getStatus(),Constants.ZERO)?Constants.SettleClaimsLogType.PLATFORM_ACCEPTANCE:Constants.SettleClaimsLogType.PLATFORM_DISCUSS,
                    dto.getDescribe(),Constants.SettleClaimsStatus.ACCEPTANCE);
                    Constants.equalsInteger(dto.getStatus(),Constants.ZERO)?dto.getDescribe():(dto.getDescribe() + " 问题类型:"+dto.getSyProblemOpts())
                    ,Constants.SettleClaimsStatus.ACCEPTANCE);
        }else if(Constants.equalsInteger(dto.getStatus(),Constants.ONE)){
            //拒绝受理
            settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                    .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,DateUtil.getCurrDateTime()).set(SettleClaims::getEditor,loginUserInfo.getId())
                    .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,settleClaims.getEditDate()).set(SettleClaims::getEditor,loginUserInfo.getId())
                    .set(SettleClaims::getStatus,Constants.SettleClaimsStatus.REJECT_DEAL.getKey()));
            //存储日志
            this.saveSettleClaimsLog(settleClaims,
@@ -2174,12 +2238,12 @@
        }else if(Constants.equalsInteger(dto.getStatus(),Constants.TWO)){
            //受理商议审批
            settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                    .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,DateUtil.getCurrDateTime()).set(SettleClaims::getEditor,loginUserInfo.getId())
                    .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,settleClaims.getEditDate()).set(SettleClaims::getEditor,loginUserInfo.getId())
                    .set(SettleClaims::getStatus,Constants.SettleClaimsStatus.WAIT_DISCUSS_AUDIT.getKey()));
            //存储日志
            this.saveSettleClaimsLog(settleClaims,
                    Constants.SettleClaimsLogType.PLATFORM_WAIT_DISCUSS,
                    dto.getDescribe(),Constants.SettleClaimsStatus.WAIT_DISCUSS_AUDIT);
                    dto.getDescribe() + " 问题类型:"+dto.getSyProblemOpts(),Constants.SettleClaimsStatus.WAIT_DISCUSS_AUDIT);
        }
        deletedNoticeBiz(null,settleClaims);//删除通知
        if(Constants.equalsInteger(dto.getStatus(),Constants.ZERO) || Constants.equalsInteger(dto.getStatus(),Constants.THREE)){
@@ -2286,7 +2350,7 @@
        }
        List<CompensationVO> modelList = JSONArray.parseArray(dto.getCompensationJson(),CompensationVO.class);
        settleClaims.setEditDate(new Date());
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditor(loginUserInfo.getId());
@@ -2343,10 +2407,11 @@
        //存储日志
        Constants.SettleClaimsLogType settleClaimsLogType = Constants.equalsInteger(dto.getStatus(),Constants.ZERO)
                ?Constants.SettleClaimsLogType.PLATFORM_DISCUSS_PASS:Constants.SettleClaimsLogType.PLATFORM_DISCUSS_REFUSE;
        settleClaims.setEditDate(new Date());
        this.saveSettleClaimsLog(settleClaims, settleClaimsLogType
                ,settleClaimsLogType.getInfo().replace("${param}",dto.getDescribe()),settleClaimsStatus);
        settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate, DateUtil.getCurrDateTime())
                .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate, settleClaims.getEditDate())
                        .set(SettleClaims::getEditor,loginUserInfo.getId())
                .set(SettleClaims::getStatus,settleClaimsStatus.getKey()));
        deletedNoticeBiz(null,settleClaims);//删除通知
@@ -2387,9 +2452,9 @@
        List<CompensationVO> modelList = JSONArray.parseArray(dto.getCompensationJson(),CompensationVO.class);
        settleClaims.setEditDate(new Date());
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditDate(settleClaims.getEditDate());
        update.setEditor(loginUserInfo.getId());
        update.setHpAccountContent(dto.getCompensationJson());
        update.setHpAccount(modelList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
@@ -2432,9 +2497,9 @@
        }
        List<CompensationVO> modelList = JSONArray.parseArray(dto.getCompensationJson(),CompensationVO.class);
        settleClaims.setEditDate(new Date());
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditDate(settleClaims.getEditDate());
        update.setEditor(loginUserInfo.getId());
        if(Constants.equalsInteger(Constants.SettleClaimsStatus.CONFIRM_FEE.getKey(),settleClaims.getStatus())){
            update.setFeeUpdate(Constants.ONE);
@@ -2491,8 +2556,9 @@
        if(!Constants.equalsInteger(settleClaims.getCompanyId(),loginUserInfo.getCompanyId())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非您企业的数据,您无法进行该操作");
        }
        settleClaims.setEditDate(new Date());
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditDate(settleClaims.getEditDate());
        update.setEditor(loginUserInfo.getId());
        update.setStatus(Constants.SettleClaimsStatus.CONFIRM_FEE.getKey());
        update.setId(settleClaims.getId());
@@ -2528,8 +2594,9 @@
        if(!Constants.equalsInteger(Constants.SettleClaimsStatus.CONFIRM_FEE.getKey(),settleClaims.getStatus())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        settleClaims.setEditDate(new Date());
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditDate(settleClaims.getEditDate());
        update.setEditor(loginUserInfo.getId());
        update.setStatus(Constants.SettleClaimsStatus.CLOSE_CASE.getKey());
        update.setCheckDate(new Date());
@@ -2750,15 +2817,18 @@
        }
        if(!(Constants.equalsInteger(Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey(),settleClaims.getStatus())
        || Constants.equalsInteger(Constants.SettleClaimsStatus.ACCEPTANCE.getKey(),settleClaims.getStatus())
        //        || Constants.equalsInteger(Constants.SettleClaimsStatus.WAIT_DEAL.getKey(),settleClaims.getStatus())
                || Constants.equalsInteger(Constants.SettleClaimsStatus.CONFIRM_FEE.getKey(),settleClaims.getStatus())
                || Constants.equalsInteger(Constants.SettleClaimsStatus.COMPENSATION.getKey(),settleClaims.getStatus())
                || Constants.equalsInteger(Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION.getKey(),settleClaims.getStatus())
        )){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        if(!Constants.equalsInteger(settleClaims.getHurtType(),Constants.TWO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"已修改过,无法再次修改");
        }
        settleClaims.setEditDate(new Date());
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditDate(settleClaims.getEditDate());
        update.setEditor(loginUserInfo.getId());
        update.setHurtType(dto.getHurtType());
        update.setId(settleClaims.getId());
@@ -2799,9 +2869,9 @@
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        settleClaims.setEditDate(new Date());
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditDate(settleClaims.getEditDate());
        update.setEditor(loginUserInfo.getId());
        update.setReceiveBank(dto.getReceiveBank());
        update.setReceiveAccount(dto.getReceiveAccount());
@@ -2889,7 +2959,7 @@
                settleClaimsTotal.setDataFirst(monthData);
                settleClaimsTotal.setDataSecond(
                        settleClaimsList.stream().filter(j->DateUtil.DateToStr(j.getCreateDate(),"yyyy-MM").equals(monthData)).collect(Collectors.toList()).toString()
                        settleClaimsList.stream().filter(j->DateUtil.DateToStr(j.getCreateDate(),"yyyy-MM").equals(monthData)).collect(Collectors.toList()).size()+""
                );
 
                settleClaimsFee.setDataFirst(monthData);
@@ -2899,9 +2969,14 @@
                averageSettleClaims.setDataFirst(monthData);
                Integer sumHours = closeCaseMonthList.stream().map(j->
                        j.getTotalHours()).reduce(Constants.ZERO,Integer::sum);
                averageSettleClaims.setDataSecond(
                        new BigDecimal(sumHours.toString()).divide(new BigDecimal((closeCaseMonthList.size()*24)+"")).toString()
                );
                if(Objects.isNull(sumHours)||CollectionUtils.isEmpty(closeCaseMonthList)
                || Constants.equalsInteger(sumHours,Constants.ZERO)){
                    averageSettleClaims.setDataSecond("0");
                }else{
                    averageSettleClaims.setDataSecond(
                            new BigDecimal(sumHours.toString()).divide(new BigDecimal((closeCaseMonthList.size()*24)+""),2,BigDecimal.ROUND_HALF_UP).toString());
                }
                ;
 
                settleClaimsTotalList.add(settleClaimsTotal);
                settleClaimsFeeList.add(settleClaimsFee);
@@ -2919,24 +2994,379 @@
            settleClaimsDataVO.setSettleClaimsTotal(settleClaimsList.size());
            
            //平均理赔处理时长天数 总计处理时长(单位小时)除以 记录数  换算到天
            settleClaimsDataVO.setAverageSettleClaimsTime(
                    new BigDecimal(closeCaseList.stream().map(i->i.getTotalHours()).reduce(Constants.ZERO,Integer::sum).toString())
                            .divide(new BigDecimal((closeCaseList.size()*24)+"") ,2,BigDecimal.ROUND_HALF_UP)
            );
            if(CollectionUtils.isNotEmpty(closeCaseList)){
                settleClaimsDataVO.setAverageSettleClaimsTime(
                        new BigDecimal(closeCaseList.stream().map(i->i.getTotalHours()).reduce(Constants.ZERO,Integer::sum).toString())
                                .divide(new BigDecimal((closeCaseList.size()*24)+"") ,2,BigDecimal.ROUND_HALF_UP)
                );
            }
            String monthDate = DateUtil.getFomartDate(new Date(),"yyyy-MM");
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.MONTH, -1);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            String lastMonth = sdf.format(calendar.getTime());
            //风险案件占比数据
            settleClaimsDataVO.setRiskTimesCxTotal(settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(monthDate)
                            &&Constants.equalsInteger(i.getRiskTimesCx(),Constants.ONE))
                    .collect(Collectors.toList()).size());
            Integer lastMonthTotal = settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(lastMonth)
                            &&Constants.equalsInteger(i.getRiskTimesCx(),Constants.ONE))
                    .collect(Collectors.toList()).size();
            settleClaimsDataVO.setRiskTimesCxRata(this.jsRata(settleClaimsDataVO.getRiskTimesCxTotal(),lastMonthTotal));
            settleClaimsDataVO.setRiskRepeatTotal(settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(monthDate)
                            &&Constants.equalsInteger(i.getRiskRepeat(),Constants.ONE))
                    .collect(Collectors.toList()).size());
            lastMonthTotal = settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(lastMonth)
                            &&Constants.equalsInteger(i.getRiskRepeat(),Constants.ONE))
                    .collect(Collectors.toList()).size();
            settleClaimsDataVO.setRiskRepeatRata(this.jsRata(settleClaimsDataVO.getRiskRepeatTotal(),lastMonthTotal));
            settleClaimsDataVO.setRiskTimesSpTotal(settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(monthDate)
                            &&Constants.equalsInteger(i.getRiskTimesSp(),Constants.ONE))
                    .collect(Collectors.toList()).size());
            lastMonthTotal = settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(lastMonth)
                            &&Constants.equalsInteger(i.getRiskTimesSp(),Constants.ONE))
                    .collect(Collectors.toList()).size();
            settleClaimsDataVO.setRiskTimesSpRata(this.jsRata(settleClaimsDataVO.getRiskTimesSpTotal(),lastMonthTotal));
            settleClaimsDataVO.setRiskNewUserTotal(settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(monthDate)
                            &&Constants.equalsInteger(i.getRiskNewUser(),Constants.ONE))
                    .collect(Collectors.toList()).size());
            lastMonthTotal = settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(lastMonth)
                            &&Constants.equalsInteger(i.getRiskNewUser(),Constants.ONE))
                    .collect(Collectors.toList()).size();
            settleClaimsDataVO.setRiskNewUserRata(this.jsRata(settleClaimsDataVO.getRiskNewUserTotal(),lastMonthTotal));
            settleClaimsDataVO.setRiskSensitiveTotal(settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(monthDate)
                            &&StringUtils.isNotBlank(i.getRiskSensitive()))
                    .collect(Collectors.toList()).size());
            lastMonthTotal = settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(lastMonth)
                            &&StringUtils.isNotBlank(i.getRiskSensitive()))
                    .collect(Collectors.toList()).size();
            settleClaimsDataVO.setRiskSensitiveRata(this.jsRata(settleClaimsDataVO.getRiskSensitiveTotal(),lastMonthTotal));
            settleClaimsDataVO.setRiskDelayUnitTotal(settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(monthDate)
                            &&Constants.equalsInteger(i.getRiskDelayUnit(),Constants.ONE))
                    .collect(Collectors.toList()).size());
            lastMonthTotal = settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(lastMonth)
                            &&Constants.equalsInteger(i.getRiskDelayUnit(),Constants.ONE))
                    .collect(Collectors.toList()).size();
            settleClaimsDataVO.setRiskDelayUnitRata(this.jsRata(settleClaimsDataVO.getRiskDelayUnitTotal(),lastMonthTotal));
            settleClaimsDataVO.setRiskUnTakeEffectTotal(settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(monthDate)
                            &&Constants.equalsInteger(i.getRiskUnTakeEffect(),Constants.ONE))
                    .collect(Collectors.toList()).size());
            lastMonthTotal = settleClaimsList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(lastMonth)
                            &&Constants.equalsInteger(i.getRiskUnTakeEffect(),Constants.ONE))
                    .collect(Collectors.toList()).size();
            settleClaimsDataVO.setRiskUnTakeEffectRata(this.jsRata(settleClaimsDataVO.getRiskUnTakeEffectTotal(),lastMonthTotal));
            //风险敏感词报表
            List<String> sensitiveList = settleClaimsList.stream().filter(i->StringUtils.isNotBlank(i.getRiskSensitive())).map(i->i.getRiskSensitive()).collect(Collectors.toList());
            if(CollectionUtils.isNotEmpty(sensitiveList)){
                List<String> allSensitiveStrList = new ArrayList<>();
                for (String string:sensitiveList) {
                    allSensitiveStrList.addAll(Arrays.asList(string.split(",")));
                }
                Set<String> sensitiveSetList = new HashSet<>(allSensitiveStrList);
                List<DataListVO> sensitiveDataList = new ArrayList<>();
                for (String string:sensitiveSetList) {
                    DataListVO dataListVO = new DataListVO();
                    dataListVO.setDataFirst(string);
                    dataListVO.setDataSecond(allSensitiveStrList.stream().filter(i->i.equals(string)).collect(Collectors.toList()).size()+"");
                    sensitiveDataList.add(dataListVO);
                }
                settleClaimsDataVO.setSensitiveDataList(sensitiveDataList);
            }
            //区域案件类型分布
            this.getAreaDistribution(settleClaimsDataVO,
                    settleClaimsList.stream().filter(i->StringUtils.isNotBlank(i.getAreaId())).collect(Collectors.toList()));
            //各类型案件分布
            this.getCaseType(settleClaimsDataVO,
                    settleClaimsList.stream().filter(i->Objects.nonNull(i.getCaseType())).collect(Collectors.toList()));
            //按月统计案件金额
            this.getSettleTotalMoneyData(settleClaimsDataVO,
                    settleClaimsList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.CLOSE_CASE.getKey())).collect(Collectors.toList()));
            //结案率
            this.getCloseRata(settleClaimsDataVO,
                    settleClaimsList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.CLOSE_CASE.getKey())).collect(Collectors.toList()));
            //年龄分布
            this.getMemberAgeDataList(settleClaimsDataVO,
                    settleClaimsList.stream().filter(i->Objects.nonNull(i.getMemberAge())).collect(Collectors.toList()));
            //工种数据分布
            this.getWorkTypeDate(settleClaimsDataVO,
                    settleClaimsList.stream().filter(i->Objects.nonNull(i.getWorktypeId())).collect(Collectors.toList()));
        }
        return settleClaimsDataVO;
    }
    public BigDecimal jsRata(Integer a,Integer b){
        if(Objects.isNull(a)||Objects.isNull(b)||Constants.equalsInteger(a,Constants.ZERO)||Constants.equalsInteger(b,Constants.ZERO)){
            return BigDecimal.ZERO;
        }
        return new BigDecimal(a.toString()).divide(new BigDecimal(b.toString()),2,BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
    }
    public void getAreaDistribution(SettleClaimsDataVO settleClaimsDataVO, List<SettleClaims> settleClaimsList){
        List<Areas> areasList = areasMapper.selectList(new QueryWrapper<Areas>().lambda().isNull(Areas::getParentId).orderByAsc(Areas::getId));
        List<DataListVO> areaDataList = new ArrayList<>();
        for (Areas areas:areasList) {
            DataListVO dataListVO = new DataListVO();
            dataListVO.setDataFirst(areas.getName());
            dataListVO.setDataSecond(
                    settleClaimsList.stream().filter(i->i.getAreaId().indexOf(areas.getCode())>=Constants.ZERO).collect(Collectors.toList()).size()+""
            );
            dataListVO.setDataThird(areas.getCode());
            areaDataList.add(dataListVO);
        }
        settleClaimsDataVO.setAreaDataList(areaDataList);
    }
    public void getCaseType(SettleClaimsDataVO settleClaimsDataVO, List<SettleClaims> settleClaimsList){
        List<DataListVO> caseTypeDataList = new ArrayList<>();
        //1=医疗;2=伤残;3=死亡
        for (int i = 1; i <= 3; i++) {
            int finalI = i;
            DataListVO dataListVO = new DataListVO();
            if(finalI==1){
                dataListVO.setDataFirst("医疗");
            }else{
                dataListVO.setDataFirst(Constants.equalsInteger(finalI,Constants.TWO)?"伤残":"死亡");
            }
            dataListVO.setDataSecond(settleClaimsList.stream()
                    .filter(j->Objects.nonNull(j.getCaseType())&&Constants.equalsInteger(j.getCaseType(), finalI)).collect(Collectors.toList()).size()+"");
            caseTypeDataList.add(dataListVO);
        }
        settleClaimsDataVO.setCaseTypeDataList(caseTypeDataList);
    }
    public void getSettleTotalMoneyData(SettleClaimsDataVO settleClaimsDataVO, List<SettleClaims> settleClaimsList){
        List<DataListVO> monthTotalMoneyDataList = new ArrayList<>();
        for (int i = -11; i <= 0 ; i++) {
            String month = DateUtil.DateToStr(
                    DateUtil.afterDateByType(new Date(),1,i),"yyyy-MM");
            DataListVO dataListVO = new DataListVO();
            dataListVO.setDataFirst(month);
            BigDecimal hpAccount = settleClaimsList.stream().filter(j->DateUtil.DateToStr(j.getCreateDate(),"yyyy-MM").equals(month))
                    .map(j->j.getHpAccount().add(j.getHpOtherAccount())).reduce(BigDecimal.ZERO,BigDecimal::add);
            dataListVO.setDataSecond(hpAccount.compareTo(BigDecimal.ZERO)>Constants.ZERO?
                    hpAccount.divide(new BigDecimal("10000"),2,BigDecimal.ROUND_HALF_UP).toString():"0"
            );
            monthTotalMoneyDataList.add(dataListVO);
        }
        settleClaimsDataVO.setMonthTotalMoneyDataList(monthTotalMoneyDataList);
    }
    public void getCloseRata(SettleClaimsDataVO settleClaimsDataVO, List<SettleClaims> settleClaimsList){
        List<DataListVO> closeRataDataList = new ArrayList<>();
        for (int i = -5; i <= 0 ; i++) {
            String month = DateUtil.DateToStr(
                    DateUtil.afterDateByType(new Date(),1,i),"yyyy-MM");
            DataListVO dataListVO = new DataListVO();
            dataListVO.setDataFirst(month);
            List<SettleClaims> monthList =    settleClaimsList.stream().filter(j->DateUtil.DateToStr(j.getCreateDate(),"yyyy-MM").equals(month)).collect(Collectors.toList());
            if(CollectionUtils.isNotEmpty(monthList)){
                List<SettleClaims> closeCaseList = monthList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.SettleClaimsStatus.CLOSE_CASE.getKey())).collect(Collectors.toList());
                if(CollectionUtils.isEmpty(closeCaseList)){
                    dataListVO.setDataSecond("0");
                }else{
                    dataListVO.setDataSecond(new BigDecimal(closeCaseList.size()+"").divide(new BigDecimal(monthList.size()+""),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"))+"%");
                }
            }else{
                dataListVO.setDataSecond("0");
            }
            closeRataDataList.add(dataListVO);
        }
        settleClaimsDataVO.setCloseRataDataList(closeRataDataList);
    }
    public void getType(SettleClaimsDataVO settleClaimsDataVO, List<SettleClaims> settleClaimsList){
        List<DataListVO> typeDataList = new ArrayList<>();
        //0工作期间受伤 1上下班途中受伤 2非工作时间受伤 3意外受伤
        for (int i = 0; i <= 3; i++) {
            int finalI = i;
            DataListVO dataListVO = new DataListVO();
            if(finalI==0){
                dataListVO.setDataFirst("工作期间受伤");
            }else if(finalI==1){
                dataListVO.setDataFirst("上下班途中受伤");
            }else{
                dataListVO.setDataFirst(Constants.equalsInteger(finalI,Constants.TWO)?"非工作时间受伤":"意外受伤");
            }
            dataListVO.setDataSecond(settleClaimsList.stream()
                    .filter(j->Objects.nonNull(j.getType())&&Constants.equalsInteger(j.getCaseType(), finalI)).collect(Collectors.toList()).size()+"");
            typeDataList.add(dataListVO);
        }
        settleClaimsDataVO.setTypeDataList(typeDataList);
    }
    public void getMemberAgeDataList(SettleClaimsDataVO settleClaimsDataVO, List<SettleClaims> settleClaimsList){
        List<DataListVO> memberAgeDataList = new ArrayList<>();
        DataListVO dataListVOa = new DataListVO();
        dataListVOa.setDataFirst("18-25");
        dataListVOa.setDataSecond(
                settleClaimsList.stream()
                        .filter(j->Objects.nonNull(j.getMemberAge())&&
                                (j.getMemberAge() >= 18 || j.getMemberAge() <= 25))
                        .collect(Collectors.toList()).size()+""
        );
        memberAgeDataList.add(dataListVOa);
        DataListVO dataListVOb = new DataListVO();
        dataListVOb.setDataFirst("26-35");
        dataListVOb.setDataSecond(
                settleClaimsList.stream()
                        .filter(j->Objects.nonNull(j.getMemberAge())&&
                                (j.getMemberAge() >= 26 || j.getMemberAge() <= 35))
                        .collect(Collectors.toList()).size()+""
        );
        memberAgeDataList.add(dataListVOb);
        DataListVO dataListVOc = new DataListVO();
        dataListVOc.setDataFirst("36-45");
        dataListVOc.setDataSecond(
                settleClaimsList.stream()
                        .filter(j->Objects.nonNull(j.getMemberAge())&&
                                (j.getMemberAge() >= 36 || j.getMemberAge() <= 45))
                        .collect(Collectors.toList()).size()+""
        );
        memberAgeDataList.add(dataListVOc);
        DataListVO dataListVOd = new DataListVO();
        dataListVOd.setDataFirst("46-55");
        dataListVOd.setDataSecond(
                settleClaimsList.stream()
                        .filter(j->Objects.nonNull(j.getMemberAge())&&
                                (j.getMemberAge() >= 46 || j.getMemberAge() <= 55))
                        .collect(Collectors.toList()).size()+""
        );
        memberAgeDataList.add(dataListVOd);
        DataListVO dataListVOe = new DataListVO();
        dataListVOe.setDataFirst("56-65");
        dataListVOe.setDataSecond(
                settleClaimsList.stream()
                        .filter(j->Objects.nonNull(j.getMemberAge())&&
                                (j.getMemberAge() >= 56 || j.getMemberAge() <= 65))
                        .collect(Collectors.toList()).size()+""
        );
        memberAgeDataList.add(dataListVOe);
        DataListVO dataListVOf = new DataListVO();
        dataListVOf.setDataFirst("65+");
        dataListVOf.setDataSecond(
                settleClaimsList.stream()
                        .filter(j->Objects.nonNull(j.getMemberAge())&&
                                j.getMemberAge() >= 66 )
                        .collect(Collectors.toList()).size()+""
        );
        memberAgeDataList.add(dataListVOf);
        settleClaimsDataVO.setMemberAgeDataList(memberAgeDataList);
    }
    public void getWorkTypeDate(SettleClaimsDataVO settleClaimsDataVO, List<SettleClaims> settleClaimsList){
        List<DataListVO> workTypeDataList = new ArrayList<>();
        if(CollectionUtils.isEmpty(settleClaimsList)){
            return ;
        }
        List<Integer> workTypeIdList = settleClaimsList.stream().map(i->i.getWorktypeId()).collect(Collectors.toList());
        if(CollectionUtils.isEmpty(workTypeIdList)){
            return ;
        }
        Set<Integer> setWorkType = new HashSet<>(workTypeIdList);
        List<Worktype> workTypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda().eq(Worktype::getIsdeleted,Constants.ZERO).in(Worktype::getId,setWorkType));
        if(CollectionUtils.isEmpty(workTypeList)){
            return ;
        }
        for (Worktype worktype:workTypeList) {
            DataListVO dataListVO = new DataListVO();
            dataListVO.setDataFirst(worktype.getName());
            dataListVO.setDataSecond(
                    settleClaimsList.stream().filter(i->Constants.equalsInteger(i.getWorktypeId(),worktype.getId())).collect(Collectors.toList()).size()+"");
            workTypeDataList.add(dataListVO);
        }
        workTypeDataList = workTypeDataList.stream().sorted(Comparator.comparing(DataListVO::getDataSecond).reversed()).collect(Collectors.toList());
        settleClaimsDataVO.setWorkTypeDataList(workTypeDataList);
    }
    @Override
    public InsuranceDataVO getInsuranceDataVO(){
        InsuranceDataVO insuranceDataVO = new InsuranceDataVO();
        insuranceDataVO.setInsuranceTotal(Constants.ZERO);
        insuranceDataVO.setInsuranceAddTotal(Constants.ZERO);
        insuranceDataVO.setInsuranceApplyTotal(Constants.ZERO);
        insuranceDataVO.setInsuranceApplyAddTotal(Constants.ZERO);
        insuranceDataVO.setInsuranceUserTotal(Constants.ZERO);
        insuranceDataVO.setInsuranceUserAddTotal(Constants.ZERO);
        insuranceDataVO.setTotalAddFee(BigDecimal.ZERO);
        insuranceDataVO.setTotalFee(BigDecimal.ZERO);
        //本月日期
        String monthData = DateUtil.DateToStr(new Date(),"yyyy-MM");
        //保险公司数量
        List<Insurance> insuranceList = insuranceMapper.selectList(new QueryWrapper<Insurance>().lambda().eq(Insurance::getIsdeleted,Constants.ZERO).eq(Insurance::getStatus,Constants.ZERO));
        if(CollectionUtils.isNotEmpty(insuranceList)){
            insuranceDataVO.setInsuranceTotal(insuranceList.size());
            insuranceDataVO.setInsuranceAddTotal(insuranceList.stream().filter(i->Objects.nonNull(i.getCreateDate())&&DateUtil.DateToStr(i.getCreateDate(),"yyyy-MM").equals(monthData)).collect(Collectors.toList()).size());
        }
        //保单数量
        List<InsuranceApply> insuranceApplyList = insuranceApplyMapper.selectList(new QueryWrapper<InsuranceApply>()
                .lambda().eq(InsuranceApply::getIsdeleted,Constants.ZERO).in(InsuranceApply::getStatus,
                        Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())
        );
        if(CollectionUtils.isNotEmpty(insuranceApplyList)){
            insuranceDataVO.setInsuranceApplyTotal(insuranceApplyList.size());
            insuranceDataVO.setInsuranceApplyAddTotal(insuranceApplyList.stream().filter(i->Objects.nonNull(i.getCreateDate())&&DateUtil.DateToStr(i.getCreateDate(),"yyyy-MM").equals(monthData)).collect(Collectors.toList()).size());
        }
        //在保人数
        List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class,new MPJLambdaWrapper<ApplyDetail>().selectAll(ApplyDetail.class)
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                .eq(InsuranceApply::getIsdeleted,Constants.ZERO).in(InsuranceApply::getStatus,
                        Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())
                .eq(ApplyDetail::getIsdeleted,Constants.ZERO)
                .apply(" ( t.START_TIME >= now() and t.END_TIME <= now() ) ")
        );
        if(CollectionUtils.isNotEmpty(applyDetailList)){
            insuranceDataVO.setInsuranceUserTotal(applyDetailList.size());
            insuranceDataVO.setInsuranceUserAddTotal(
                    applyDetailList.stream().filter(i->Objects.nonNull(i.getCreateDate())&&DateUtil.DateToStr(i.getCreateDate(),"yyyy-MM")
                            .equals(monthData)).collect(Collectors.toList()).size());
            insuranceDataVO.setTotalFee(applyDetailList.stream().map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
            insuranceDataVO.setTotalAddFee(applyDetailList.stream()
                    .filter(i->Objects.nonNull(i.getCreateDate())&&DateUtil.DateToStr(i.getCreateDate(),"yyyy-MM")
                            .equals(monthData)).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        }
        return insuranceDataVO;
    }