k94314517
2025-05-29 e1c072109e62f4adcb53af0d2c69b896b9159059
server/service/src/main/java/com/doumee/service/business/impl/SettleClaimsServiceImpl.java
@@ -872,10 +872,17 @@
            );
            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);
        }
    }
@@ -1349,9 +1356,20 @@
                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);
@@ -1369,11 +1387,19 @@
            );
        }
        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()))){
                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);
            }
@@ -1397,20 +1423,22 @@
                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())){
            //-如果是待立案或者已立案待审核,发待办通知-------------
            Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,settleClaims.getId()));
            Notices notices = new Notices(noticeObjectType,Constants.ZERO,settleClaims.getId(),getNoticeConttent(settleClaims),
                    settleClaims.getCompanyId(),
                    Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey())?Constants.NoticeType.ZERO:Constants.NoticeType.TWO);
            noticesMapper.insert(notices);
            //-如果是待立案或者已立案待审核,给平台端发待办通知-------------
            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(),"");
    }
@@ -1441,6 +1469,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(),"事故发生时间未在人员保障日期范围内");
@@ -1457,6 +1486,7 @@
                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"事故发生时间未在人员保障日期范围内");
                }
            }
            if(happenTime.getTime() < startDate.getTime() ){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"事故发生时间未在人员保障日期范围内");
            }else{
@@ -1476,17 +1506,17 @@
            //根据配置 查询 延迟报案提醒时间单位 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()+"分钟");
                    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);
                }
            }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);
                }
            }
@@ -1521,7 +1551,7 @@
                    .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)  ")
            );
            if(cxcs > Constants.TWO){
            if(cxcs >= Constants.TWO){
                Map<String,String> map = new HashMap<>();
                map.put("title","疑似重复报案");
                map.put("info","该出险人在"+riskConfigVO.getRiskRepeatReportTime()+(riskConfigVO.getRiskRepeatReportTimeUnit().equals("1")?"小时":"天")+"内已报案"+cxcs+"次");
@@ -1537,8 +1567,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<>();
@@ -1553,7 +1584,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){
@@ -1810,6 +1841,10 @@
                .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
@@ -1876,6 +1911,10 @@
        }
        //存储日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.SUPPLEMENT,null,null);
        //删除企业的代办通知------
        deletedNoticeBiz(null,settleClaims );
        sendNoticeBiz(Constants.ZERO,settleClaims,Constants.NoticeType.TWO);
    }
@@ -1909,6 +1948,9 @@
        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()));
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给企业发通知,已结案-------------
        sendNoticeBiz(Constants.ZERO,settleClaims ,Constants.NoticeType.FOURTEEN);
    }
@@ -1977,6 +2019,15 @@
                .set(SettleClaims::getEditDate, DateUtil.getCurrDateTime())
                .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);
        }
    }
@@ -2132,7 +2183,8 @@
            //存储日志
            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()
@@ -2150,21 +2202,50 @@
            //存储日志
            this.saveSettleClaimsLog(settleClaims,
                    Constants.SettleClaimsLogType.PLATFORM_WAIT_DISCUSS,
                    dto.getDescribe(),Constants.SettleClaimsStatus.WAIT_DISCUSS_AUDIT);
                    dto.getDescribe() + " 问题类型:"+dto.getSyProblemOpts(),Constants.SettleClaimsStatus.WAIT_DISCUSS_AUDIT);
        }
        if( Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.ACCEPTANCE.getKey()) ||
                Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.WAIT_DISCUSS_AUDIT.getKey())){
            //-如果是待立案或者已立案待审核,发待办通知-------------
            Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,settleClaims.getId()));
            Notices notices = new Notices(noticeObjectType,Constants.ZERO,settleClaims.getId(),getNoticeConttent(settleClaims),
                    settleClaims.getCompanyId(),
                    Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey())?Constants.NoticeType.ZERO:Constants.NoticeType.TWO);
            noticesMapper.insert(notices);
        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){
@@ -2242,12 +2323,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);
}
    /**
@@ -2287,6 +2372,14 @@
                .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate, DateUtil.getCurrDateTime())
                        .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);
        }
    }
@@ -2332,6 +2425,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);
    }
@@ -2397,6 +2493,9 @@
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_UPD_FEE,
                dto.getDescribe(),null);
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给企业发通金额变更通知-------------
        sendNoticeBiz(Constants.ONE,settleClaims ,Constants.NoticeType.EIGHTEEN);
    }
@@ -2426,6 +2525,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);
    }
@@ -2487,6 +2589,9 @@
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_FINISH,
                dto.getDescribe(),Constants.SettleClaimsStatus.CLOSE_CASE);
        deletedNoticeBiz(null,settleClaims);//删除通知
        //给企业发通知,已结案-------------
        sendNoticeBiz(Constants.ONE,settleClaims ,Constants.NoticeType.THIRTEEN);
    }