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;
@@ -66,6 +69,8 @@
    @Autowired
    private SettleClaimsMapper settleClaimsMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private SettleClaimsExtMapper settleClaimsExtMapper;
@@ -98,6 +103,18 @@
    @Autowired
    private ApplyDetailMapper applyDetailMapper;
    @Autowired
    private AreasMapper areasMapper;
    @Autowired
    private WorktypeMapper worktypeMapper;
    @Autowired
    private InsuranceMapper insuranceMapper;
    @Autowired
    private ApplyDetailJoinMapper applyDetailJoinMapper;
    /**
     * 删除附件
     * @return
@@ -389,19 +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().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(),"非平台管理员无法进行该操作");
        }
@@ -567,6 +587,7 @@
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在提报中的报案数据!");
        }
        settleClaims.setCreateDate(new Date());
        settleClaims.setIsdeleted(Constants.ZERO);
        settleClaims.setCompanyId(loginUserInfo.getCompanyId());
@@ -850,11 +871,35 @@
            settleClaims.setRefuseSettleClaimsLog(settleClaimsLog);
        }
        if((Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.ACCEPTANCE.getKey())
                || Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION.getKey()))
        && Constants.equalsInteger(settleClaims.getWaitSupplement(),Constants.ONE)){
            SettleClaimsLog settleClaimsLog = settleClaimsLogJoinMapper.selectJoinOne(SettleClaimsLog.class,
                    new MPJLambdaWrapper<SettleClaimsLog>()
                            .selectAll(SettleClaimsLog.class)
                            .selectAs(SystemUser::getRealname,SettleClaimsLog::getCreatorName)
                            .selectAs(SystemUser::getType,SettleClaimsLog::getCreatorType)
                            .selectAs(Company::getName,SettleClaimsLog::getCompanyName)
                            .leftJoin(SystemUser.class,SystemUser::getId,SettleClaimsLog::getCreator)
                            .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                            .eq(SettleClaimsLog::getSettleClainmsId,settleClaims.getId())
                            .in(SettleClaimsLog::getObjType,Constants.SettleClaimsLogType.SUPPLEMENT_DESCRIBE.getKey())
                            .orderByDesc(SettleClaimsLog::getCreateDate)
                            .last(" limit 1")
            );
            settleClaims.setSupplementSettleClaimsLog(settleClaimsLog);
        }
        dealNoticeOldDataBiz(settleClaims);//处理待办脏数据
        return settleClaims;
    }
    private void dealNoticeOldDataBiz(SettleClaims settleClaims) {
        if(Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.CLOSE_CASE.getKey())
                ||Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.RETURN.getKey())
                ||Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.WAIT_DISCUSS_REJECT.getKey())
                ||Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.REJECT_DEAL.getKey())){
            deletedNoticeBiz(null,settleClaims);
        }
    }
@@ -1103,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());
@@ -1183,6 +1228,7 @@
                .selectAs(Member::getIdcardNo,SettleClaims::getMemberIdcardNo)
                .selectAs(Worktype::getName,SettleClaims::getWorktypeName)
                .selectAs(InsuranceApply::getStartTime,SettleClaims::getBaoxianStartTime)
                .selectAs(InsuranceApply::getCode,SettleClaims::getApplyCode)
                .selectAs(DispatchUnit::getName,SettleClaims::getDuName)
                .selectAs(InsuranceApply::getStartTime,SettleClaims::getBaoxianStartTime)
                .selectAs(InsuranceApply::getEndTime,SettleClaims::getBaoxianEndTime)
@@ -1201,7 +1247,8 @@
            }else {
                queryWrapper. in(Company::getId, user.getCompanyIdList());
            }
        } else  {
            queryWrapper.ne(SettleClaims::getStatus,Constants.SettleClaimsStatus.WAIT_ACCEPTANCE.getKey());
        }{
            //企业用户只看自己的数据
            pageWrap.getModel().setCompanyId(user.getCompanyId());
        }
@@ -1257,6 +1304,7 @@
                .selectAs(SettleClaimsExt::getBxStartdate,SettleClaims::getBaoxianStartTime)
                .selectAs(SettleClaimsExt::getBxEnddate,SettleClaims::getBaoxianEndTime)
                .selectAs(SettleClaimsExt::getBxCode,SettleClaims::getApplyCode)
                .selectAs(SettleClaimsExt::getReportDate,SettleClaims::getReportDate)
                .innerJoin(SettleClaimsExt.class,SettleClaimsExt::getSettileClaimsId,SettleClaims::getId);
        queryWrapper.eq(SettleClaims::getIsdeleted,Constants.ZERO);
        queryWrapper.eq(SettleClaims::getOrigin,Constants.ONE);
@@ -1265,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());
@@ -1273,7 +1321,9 @@
        queryWrapper.orderByDesc(SettleClaims::getCreateDate);
        PageData<SettleClaims> pageData = PageData.from(settleClaimsJoinMapper.selectJoinPage(page,SettleClaims.class, queryWrapper));
        for (SettleClaims settleClaims:pageData.getRecords()) {
            settleClaims.setStatusName(Constants.SettleClaimsStatus.getName(settleClaims.getStatus()));
            if(Objects.nonNull(settleClaims.getStatus())){
                settleClaims.setStatusName(Constants.SettleClaimsStatus.getName(settleClaims.getStatus()));
            }
            settleClaims.setPcAccount(settleClaims.getHpAccount().add(settleClaims.getHpOtherAccount()));
        }
        return pageData;
@@ -1316,31 +1366,69 @@
                    ||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"))
            )+1;
            settleClaims.setCode("YYBLP-"+DateUtil.getDate(new Date(),"yyyyMMdd")+
                    (StringUtils.leftPad(nextCode.toString(),2,"0"))
            );
        }
        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);
            }
            settleClaimsMapper.updateById(settleClaims);
        }else{
            settleClaims.setCreateDate(new Date());
            settleClaims.setIsdeleted(Constants.ZERO);
            settleClaims.setCompanyId(loginUserInfo.getCompanyId());
            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)){
@@ -1358,10 +1446,32 @@
                this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.PLATFORM_REGISTER,null,Constants.SettleClaimsStatus.CONFIRM_INFORMATION);
            }
        }
        deletedNoticeBiz(null,settleClaims);//删除通知
        if( Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey()) ||
                Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())){
            //-如果是待立案或者已立案待审核,给平台端发待办通知-------------
            sendNoticeBiz(Constants.ZERO,settleClaims,Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey())?Constants.NoticeType.ZERO:Constants.NoticeType.TWO);
        }
        return settleClaims.getId();
    }
    private String getNoticeConttent(SettleClaims settleClaims) {
        if(StringUtils.isBlank(settleClaims.getMemberName()) && settleClaims.getMemberId()!=null){
            Member member = memberMapper.selectById(settleClaims.getMemberId());
            if(member!=null){
                settleClaims.setMemberName(member.getName());
            }
        }
        return  "报案号:"+StringUtils.defaultString(settleClaims.getCode(),"")+"  出险人:"+StringUtils.defaultString(settleClaims.getMemberName(),"");
    }
    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)){
@@ -1369,7 +1479,7 @@
        }
        Date happenTime = DateUtil.StringToDate(settleClaims.getHappenTime());
        if(happenTime.getTime() < insuranceApply.getStartTime().getTime() || happenTime.getTime() > insuranceApply.getEndTime().getTime()){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"事故发生事件未在保单生效范围内");
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"事故发生时间未在保单生效范围内");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
@@ -1388,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(),"事故发生时间未在人员保障日期范围内");
@@ -1404,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{
@@ -1423,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);
                }
            }
        }
@@ -1449,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+"次");
@@ -1465,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+"次");
@@ -1484,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<>();
@@ -1500,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){
@@ -1751,12 +1868,17 @@
        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()
                .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,DateUtil.getCurrDateTime())
                        .set(SettleClaims::getWaitSupplementInfo,dto.getDescribe())
                .set(SettleClaims::getWaitSupplement,Constants.ONE));
        deletedNoticeBiz(null,settleClaims);//删除通知
        //如果发起代办,通知企业
        sendNoticeBiz(Constants.ONE,settleClaims,Constants.NoticeType.THREE);
    }
    @Override
@@ -1821,8 +1943,13 @@
                multifileJoinMapper.insert(multifile);
            }
        }
        settleClaims.setEditDate(new Date());
        //存储日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.SUPPLEMENT,null,null);
        //删除企业的代办通知------
        deletedNoticeBiz(null,settleClaims );
        sendNoticeBiz(Constants.ZERO,settleClaims,Constants.NoticeType.TWO);
    }
@@ -1849,13 +1976,15 @@
        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);
    }
@@ -1882,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()));
    }
@@ -1918,12 +2048,22 @@
        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()));
        deletedNoticeBiz(null,settleClaims);//删除通知
        if( Constants.equalsInteger(settleClaimsStatus.getKey(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey()) ){
            //如果是审核通过已立案待审核,给平台发待受理待办通知-------------
            sendNoticeBiz(Constants.ZERO,settleClaims ,Constants.NoticeType.TWO);
        }else{
            //如果是审核不通过,退回立案 ,给企业发通知-------------
            sendNoticeBiz(Constants.ONE,settleClaims ,Constants.NoticeType.ONE);
        }
    }
@@ -1952,8 +2092,11 @@
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"仅可修改一次报案号");
        }
        if(!(
                (Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.ACCEPTANCE.getKey())&&Constants.equalsInteger(model.getReportNumStatus(),Constants.ONE))
                ||(Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())
                (Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.ACCEPTANCE.getKey())
                        &&Constants.equalsInteger(model.getReportNumStatus(),Constants.ONE))
                ||((Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())
                        || Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.ACCEPTANCE.getKey())
                        || Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.WAIT_DISCUSS_AUDIT.getKey()))
                        &&Constants.equalsInteger(model.getReportNumStatus(),Constants.ZERO))
//                        ||(Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.WAIT_DEAL.getKey())
//                        &&Constants.equalsInteger(model.getReportNumStatus(),Constants.ZERO))
@@ -1973,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());
@@ -1992,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;
@@ -2035,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;
@@ -2068,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,
@@ -2089,15 +2238,55 @@
        }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())
                    .set(SettleClaims::getStatus,Constants.SettleClaimsStatus.REJECT_DEAL.getKey()));
                    .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.REJECT_DEAL);
                    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)){
            //-如果是审批通过,成为已受理,给平台端发代理算待办通知-------------
            sendNoticeBiz(Constants.ZERO,settleClaims , Constants.NoticeType.EIGHT );
            sendNoticeBiz(Constants.ONE,settleClaims,Constants.NoticeType.FIFTEEN);
        }else  if(Constants.equalsInteger(dto.getStatus(),Constants.TWO)){
            //如果发起商议审批,通知平台
            sendNoticeBiz(Constants.ZERO, settleClaims , Constants.NoticeType.FIVE );
            sendNoticeBiz(Constants.ONE,settleClaims,Constants.NoticeType.SIXTEEN);
        }else{
            //如果是受理拒绝,通知企业
            sendNoticeBiz(Constants.ONE,  settleClaims,Constants.NoticeType.SEVEN);
        }
    }
    private void sendNoticeBiz(int plat, SettleClaims settleClaims, Constants.NoticeType noticeType) {
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
        Notices notices = new Notices(noticeObjectType
                ,plat
                ,settleClaims.getId()
                ,getNoticeConttent(settleClaims)
                ,settleClaims.getCompanyId()
                ,noticeType);
        noticesMapper.insert(notices);
    }
    private void deletedNoticeBiz(Integer  plat, SettleClaims settleClaim ) {
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
        noticesMapper.delete(new QueryWrapper<Notices>().lambda()
                .eq(plat!=null,Notices::getPalt,plat)
                .eq(Notices::getObjType,noticeObjectType.getKey())
                .eq(Notices::getObjId,settleClaim.getId())
                .notIn(Notices::getType,Constants.NoticeType.ONE.getStatus(),
                        Constants.NoticeType.FOUR.getStatus(),
                        Constants.NoticeType.SEVEN.getStatus(),
                        Constants.NoticeType.FOURTEEN.getStatus(),
                        Constants.NoticeType.FIFTEEN.getStatus(),
                        Constants.NoticeType.SIXTEEN.getStatus(),
                        Constants.NoticeType.SEVENTEEN.getStatus(),
                        Constants.NoticeType.THIRTEEN.getStatus(),
                        Constants.NoticeType.EIGHTEEN.getStatus()))//1, 3, 4, 7,13, 14, 15, 16, 17, 18
        ;
    }
    @Override
    public List<CompensationVO> getCompensation(CompensationFeeDTO compensationFeeDTO){
@@ -2161,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());
@@ -2175,12 +2364,16 @@
        update.setId(settleClaims.getId());
        update.setStatus(Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION.getKey());
        settleClaimsMapper.updateById(update);
        //存储日志
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_LP_DEAL,
                Constants.SettleClaimsLogType.PLATFORM_LP_DEAL.getInfo(),Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION);
    }
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给平台发待核赔待办通知-------------
        sendNoticeBiz(Constants.ZERO,settleClaims ,Constants.NoticeType.NINE);
        //给企业发通已理算-------------
        sendNoticeBiz(Constants.ONE,settleClaims ,Constants.NoticeType.SEVENTEEN);
}
    /**
@@ -2214,12 +2407,21 @@
        //存储日志
        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);//删除通知
        if( Constants.equalsInteger(settleClaimsStatus.getKey(),Constants.SettleClaimsStatus.ACCEPTANCE.getKey()) ){
            //如果是审核通过已立案待审核,给平台发待受理待办通知-------------
            sendNoticeBiz(Constants.ZERO,settleClaims ,Constants.NoticeType.TWO);
        }else{
            //如果是审核不通过,退回立案 ,给企业发通知-------------
            sendNoticeBiz(Constants.ONE,settleClaims ,Constants.NoticeType.ONE);
        }
    }
@@ -2250,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));
@@ -2265,6 +2467,9 @@
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_HP_DEAL,
                Constants.SettleClaimsLogType.PLATFORM_HP_DEAL.getInfo(),Constants.SettleClaimsStatus.COMPENSATION);
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给企业发通已核赔待确认金额,发代办-------------
        sendNoticeBiz(Constants.ONE,settleClaims ,Constants.NoticeType.TEN);
    }
@@ -2292,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);
@@ -2330,6 +2535,9 @@
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_UPD_FEE,
                dto.getDescribe(),null);
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给企业发通金额变更通知-------------
        sendNoticeBiz(Constants.ONE,settleClaims ,Constants.NoticeType.EIGHTEEN);
    }
@@ -2348,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());
@@ -2359,6 +2568,9 @@
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.CONFIRM_FEE,
                Constants.SettleClaimsLogType.CONFIRM_FEE.getInfo(),Constants.SettleClaimsStatus.CONFIRM_FEE);
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给平台发待办,已确认金额,发待结案代办-------------
        sendNoticeBiz(Constants.ZERO,settleClaims ,Constants.NoticeType.TWELVE);
    }
@@ -2382,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());
@@ -2420,6 +2633,9 @@
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_FINISH,
                dto.getDescribe(),Constants.SettleClaimsStatus.CLOSE_CASE);
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给企业发通知,已结案-------------
        sendNoticeBiz(Constants.ONE,settleClaims ,Constants.NoticeType.THIRTEEN);
    }
@@ -2601,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());
@@ -2650,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());
@@ -2740,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);
@@ -2750,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);
@@ -2770,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;
    }