jiangping
2025-05-27 3d6a8e384d31432a23f5a8c1a3135a58cbe617b5
server/service/src/main/java/com/doumee/service/business/impl/SettleClaimsServiceImpl.java
@@ -22,6 +22,8 @@
import com.doumee.dao.business.vo.RiskConfigVO;
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.SettleClaimsDataVO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.SettleClaimsLogService;
import com.doumee.service.business.SettleClaimsService;
@@ -593,9 +595,7 @@
            }
        }
        //记录日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.UPLOAD,null);
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.UPLOAD,null,null);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SETTLE_CLAIMS;
        //删除其他待办
@@ -737,6 +737,7 @@
            settleClaims.setDzbdFileList(multifileList.stream().filter(m->m.getObjType().equals(Constants.MultiFile.LP_DZBD_FILE.getKey())).collect(Collectors.toList()));
            settleClaims.setSupplementFileList(multifileList.stream().filter(m->m.getObjType().equals(Constants.MultiFile.LP_SUPPLEMENT_FILE.getKey())).collect(Collectors.toList()));
        }
        //查询操作记录
@@ -779,6 +780,80 @@
        }else if(!Objects.isNull(lastConfirm)&&Objects.isNull(multifile)){
            settleClaims.setFinishDate(lastConfirm.getCreateDate());
        }
        List<SettleParentStatusVO> parentStatusVOList = this.getParentStatus(settleClaims);
        settleClaims.setParentStatusVOList(parentStatusVOList);
        settleClaims.setStatusName(Constants.SettleClaimsStatus.getName(settleClaims.getStatus()));
        if(Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.REJECT_DEAL.getKey())
            || Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.WAIT_DISCUSS_REJECT.getKey())){
            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.PLATFORM_DISCUSS_REFUSE.getKey(),
                            Constants.SettleClaimsLogType.PLATFORM_REFUSE_ACCEPTANCE.getKey())
                    .orderByDesc(SettleClaimsLog::getCreateDate)
                    .last(" limit 1")
            );
            settleClaims.setRefuseSettleClaimsLog(settleClaimsLog);
        }else if(Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.FINISH_ACCEPTANCE.getKey())){
            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.PLATFORM_RETURN.getKey())
                            .orderByDesc(SettleClaimsLog::getCreateDate)
                            .last(" limit 1")
            );
            settleClaims.setRefuseSettleClaimsLog(settleClaimsLog);
        }else if(Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.ACCEPTANCE.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.setRefuseSettleClaimsLog(settleClaimsLog);
        }else if(Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.CLOSE_CASE.getKey())){
            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.PLATFORM_FINISH.getKey())
                            .orderByDesc(SettleClaimsLog::getCreateDate)
                            .last(" limit 1")
            );
            settleClaims.setRefuseSettleClaimsLog(settleClaimsLog);
        }
        return settleClaims;
    }
@@ -899,6 +974,7 @@
                    .last("limit 1")));
        }
        settleClaims.setExtData(settleClaimsExtMapper.selectOne(new QueryWrapper<SettleClaimsExt>().lambda().eq(SettleClaimsExt::getSettileClaimsId,id).last("limit 1")));
        settleClaims.setStatusName(Constants.SettleClaimsStatus.getName(settleClaims.getStatus()));
        return settleClaims;
    }
@@ -951,7 +1027,7 @@
        settleClaimsMapper.updateById(oldSettleClaims);
        //记录日志
        Constants.SettleClaimsLogType settleClaimsLogType =  Constants.SettleClaimsLogType.UPDATE_DATA;
        this.saveSettleClaimsLog(settleClaims,settleClaimsLogType,null);
        this.saveSettleClaimsLog(settleClaims,settleClaimsLogType,null,null);
        return oldSettleClaims.getId();
    }
@@ -983,7 +1059,7 @@
        Constants.SettleClaimsLogType settleClaimsLogType =  Constants.SettleClaimsLogType.SUPPLEMENT;
        String content = settleClaimsLogType.getInfo().replace("${param}", scSupplementDTO.getSupplement());
        this.saveSettleClaimsLog(settleClaims,settleClaimsLogType,content);
        this.saveSettleClaimsLog(settleClaims,settleClaimsLogType,content,null);
    }
@@ -1024,7 +1100,7 @@
    public void saveSettleClaimsLog(SettleClaims settleClaims, Constants.SettleClaimsLogType settleClaimsLogType, String content){
    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());
@@ -1035,6 +1111,10 @@
        settleClaimsLog.setContent(content);
        settleClaimsLog.setObjType(settleClaimsLogType.getKey());
        settleClaimsLog.setObjId(settleClaims.getId());
        if(Objects.nonNull(settleClaimsStatus)){
            settleClaimsLog.setParentStatus(settleClaimsStatus.getParentKey());
            settleClaimsLog.setStatus(settleClaimsStatus.getKey());
        }
        settleClaimsLogMapper.insert(settleClaimsLog);
    }
@@ -1156,7 +1236,8 @@
        PageData<SettleClaims> pageData = PageData.from(settleClaimsJoinMapper.selectJoinPage(page,SettleClaims.class, queryWrapper));
        for (SettleClaims settleClaims:pageData.getRecords()) {
            settleClaims.setStatusName(Constants.SettleClaimsStatus.getName(settleClaims.getStatus()));
            settleClaims.setPcAccount(settleClaims.getHpAccount().add(settleClaims.getHpOtherAccount()));
            settleClaims.setPcAccount(Constants.getBigDecimalNoNull(settleClaims.getHpAccount()).add(Constants.getBigDecimalNoNull(settleClaims.getHpOtherAccount())));
        }
        return pageData;
    }
@@ -1209,7 +1290,7 @@
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void saveSettleClaims(SettleClaimsDTO settleClaimsDTO,SystemDictDataServiceImpl systemDictDataService){
    public Integer saveSettleClaims(SettleClaimsDTO settleClaimsDTO,SystemDictDataServiceImpl systemDictDataService){
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!loginUserInfo.getType().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非企业员工无法进行该操作");
@@ -1217,8 +1298,9 @@
        if(Objects.isNull(settleClaimsDTO)
            || Objects.isNull(settleClaimsDTO.getSaveType())
            || Objects.isNull(settleClaimsDTO.getMemberId())
            ||StringUtils.isBlank(settleClaimsDTO.getIdcardNo())
            || StringUtils.isBlank(settleClaimsDTO.getIdcardNo())
            || Objects.isNull(settleClaimsDTO.getInsuranceApplyId())
            || Objects.isNull(settleClaimsDTO.getApplyDetailId())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -1270,9 +1352,13 @@
            settleClaimsMapper.insert(settleClaims);
        }
        this.saveFile(settleClaims,settleClaimsDTO,loginUserInfo);
        //记录日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.UPLOAD,null);
        if(Constants.equalsInteger(settleClaimsDTO.getSaveType(),Constants.ONE)){
            this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.UPLOAD,null,Constants.SettleClaimsStatus.RETURN_ACCEPTANCE);
            if(Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())){
                this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.PLATFORM_REGISTER,null,Constants.SettleClaimsStatus.CONFIRM_INFORMATION);
            }
        }
        return settleClaims.getId();
    }
    public void saveRisk(SettleClaims settleClaims, SettleClaimsDTO settleClaimsDTO, SystemDictDataServiceImpl systemDictDataService){
@@ -1295,7 +1381,9 @@
        }
        List<Map<String,String>> riskList = new ArrayList<>();
        //查询保单明细数据
        ApplyDetail applyDetail = applyDetailMapper.selectOne(new QueryWrapper<ApplyDetail>().lambda().eq(ApplyDetail::getApplyId,settleClaims.getInsuranceApplyId()).eq(ApplyDetail::getId,settleClaimsDTO.getApplyDetailId()).last("limit 1 "));
        ApplyDetail applyDetail = applyDetailMapper.selectOne(new QueryWrapper<ApplyDetail>().lambda()
                .eq(ApplyDetail::getApplyId,settleClaims.getInsuranceApplyId())
                .eq(ApplyDetail::getId,settleClaimsDTO.getApplyDetailId()).last("limit 1 "));
        //是否开启 新员工报案 0不允许 1允许
        if(Constants.equalsInteger(solutionsBase.getRiskNewUserStatus(),Constants.ONE)
                && Objects.nonNull(solutionsBase.getRiskNewUserUnit())
@@ -1485,6 +1573,7 @@
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件内容异常");
                }
                multifile.setId(null);
                multifile.setCreator(loginUserInfo.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
@@ -1497,14 +1586,15 @@
        List<Multifile> relationFileList = settleClaimsDTO.getRelationFileList();
        if(CollectionUtils.isNotEmpty(relationFileList)){
            for (int i = 0; i < reportVideo.size(); i++) {
                Multifile multifile = reportVideo.get(i);
            for (int i = 0; i < relationFileList.size(); i++) {
                Multifile multifile = relationFileList.get(i);
                if(Objects.isNull(multifile.getFileurl())
                        || Objects.isNull(multifile.getType())
                        || StringUtils.isBlank(multifile.getName())
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件内容异常");
                }
                multifile.setId(null);
                multifile.setCreator(loginUserInfo.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
@@ -1517,14 +1607,15 @@
        List<Multifile> outpatientFileList = settleClaimsDTO.getOutpatientFileList();
        if(CollectionUtils.isNotEmpty(outpatientFileList)){
            for (int i = 0; i < reportVideo.size(); i++) {
                Multifile multifile = reportVideo.get(i);
            for (int i = 0; i < outpatientFileList.size(); i++) {
                Multifile multifile = outpatientFileList.get(i);
                if(Objects.isNull(multifile.getFileurl())
                        || Objects.isNull(multifile.getType())
                        || StringUtils.isBlank(multifile.getName())
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件内容异常");
                }
                multifile.setId(null);
                multifile.setCreator(loginUserInfo.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
@@ -1537,14 +1628,15 @@
        List<Multifile> hospitalFileList = settleClaimsDTO.getHospitalFileList();
        if(CollectionUtils.isNotEmpty(hospitalFileList)){
            for (int i = 0; i < reportVideo.size(); i++) {
                Multifile multifile = reportVideo.get(i);
            for (int i = 0; i < hospitalFileList.size(); i++) {
                Multifile multifile = hospitalFileList.get(i);
                if(Objects.isNull(multifile.getFileurl())
                        || Objects.isNull(multifile.getType())
                        || StringUtils.isBlank(multifile.getName())
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件内容异常");
                }
                multifile.setId(null);
                multifile.setCreator(loginUserInfo.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
@@ -1557,14 +1649,15 @@
        List<Multifile> disabilityFileList = settleClaimsDTO.getDisabilityFileList();
        if(CollectionUtils.isNotEmpty(disabilityFileList)){
            for (int i = 0; i < reportVideo.size(); i++) {
                Multifile multifile = reportVideo.get(i);
            for (int i = 0; i < disabilityFileList.size(); i++) {
                Multifile multifile = disabilityFileList.get(i);
                if(Objects.isNull(multifile.getFileurl())
                        || Objects.isNull(multifile.getType())
                        || StringUtils.isBlank(multifile.getName())
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件内容异常");
                }
                multifile.setId(null);
                multifile.setCreator(loginUserInfo.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
@@ -1577,14 +1670,15 @@
        List<Multifile> otherFileList = settleClaimsDTO.getOtherFileList();
        if(CollectionUtils.isNotEmpty(otherFileList)){
            for (int i = 0; i < reportVideo.size(); i++) {
                Multifile multifile = reportVideo.get(i);
            for (int i = 0; i < otherFileList.size(); i++) {
                Multifile multifile = otherFileList.get(i);
                if(Objects.isNull(multifile.getFileurl())
                        || Objects.isNull(multifile.getType())
                        || StringUtils.isBlank(multifile.getName())
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件内容异常");
                }
                multifile.setId(null);
                multifile.setCreator(loginUserInfo.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
@@ -1593,7 +1687,27 @@
                multifile.setSortnum(i+1);
                multifileJoinMapper.insert(multifile);
            }
        }
        }
        List<Multifile> supplementFileList = settleClaimsDTO.getSupplementFileList();
        if(CollectionUtils.isNotEmpty(supplementFileList)){
            for (int i = 0; i < supplementFileList.size(); i++) {
                Multifile multifile = supplementFileList.get(i);
                if(Objects.isNull(multifile.getFileurl())
                        || Objects.isNull(multifile.getType())
                        || StringUtils.isBlank(multifile.getName())
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件内容异常");
                }
                multifile.setId(null);
                multifile.setCreator(loginUserInfo.getId());
                multifile.setCreateDate(new Date());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setObjId(settleClaims.getId());
                multifile.setObjType(Constants.MultiFile.LP_SUPPLEMENT_FILE.getKey());
                multifile.setSortnum(i+1);
                multifileJoinMapper.insert(multifile);
            }
        }
    }
//    public void getRiskSettleDetail(Integer id){
@@ -1638,9 +1752,11 @@
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"待企业补充文件,请等待企业补充文件");
        }
        //存储日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.SUPPLEMENT_DESCRIBE,dto.getDescribe());
        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::getWaitSupplement,Constants.ONE));
                .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,DateUtil.getCurrDateTime())
                        .set(SettleClaims::getWaitSupplementInfo,dto.getDescribe())
                .set(SettleClaims::getWaitSupplement,Constants.ONE));
    }
    @Override
@@ -1681,6 +1797,7 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
            }
            settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                            .set(SettleClaims::getWaitSupplement,Constants.ZERO)
                    .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate,DateUtil.getCurrDateTime()).set(SettleClaims::getWaitSupplement,Constants.ZERO));
        }
        multifileJoinMapper.delete(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,dto.getId()).eq(Multifile::getObjType,Constants.MultiFile.LP_OTHER_FILE.getKey()));
@@ -1699,13 +1816,13 @@
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setObjId(settleClaims.getId());
                //添加材料放入 其他材料业务内
                multifile.setObjType(Constants.MultiFile.LP_OTHER_FILE.getKey());
                multifile.setObjType(Constants.MultiFile.LP_SUPPLEMENT_FILE.getKey());
                multifile.setSortnum(i+1);
                multifileJoinMapper.insert(multifile);
            }
        }
        //存储日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.SUPPLEMENT,null);
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.SUPPLEMENT,null,null);
    }
@@ -1732,11 +1849,11 @@
        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(),"对不起,业务状态已流转~");
        }
//        if(!Constants.equalsInteger(Constants.SettleClaimsStatus.RETURN_ACCEPTANCE.getKey(),settleClaims.getStatus())){
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
//        }
        //存储日志
        this.saveSettleClaimsLog(settleClaims,Constants.SettleClaimsLogType.RETURN_SETTLE,null);
        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()));
    }
@@ -1760,13 +1877,16 @@
        if(Objects.isNull(settleClaims)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!Constants.equalsInteger(Constants.SettleClaimsStatus.ACCEPTANCE.getKey(),settleClaims.getStatus())){
        if(!(Constants.equalsInteger(Constants.SettleClaimsStatus.ACCEPTANCE.getKey(),settleClaims.getStatus())
        || Constants.equalsInteger(Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION.getKey(),settleClaims.getStatus()))
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        //存储日志
        this.saveSettleClaimsLog(settleClaims, Constants.SettleClaimsLogType.UPD_CASE_TYPE,Constants.SettleClaimsLogType.UPD_CASE_TYPE.getInfo());
        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())
                .eq(SettleClaims::getId,dto.getId())
                .set(SettleClaims::getEditDate,DateUtil.getCurrDateTime())
                .set(SettleClaims::getEditor,loginUserInfo.getId())
                .set(SettleClaims::getCaseType,dto.getCaseType()));
    }
@@ -1798,10 +1918,12 @@
        Constants.SettleClaimsStatus settleClaimsStatus =
                Constants.equalsInteger(dto.getRegisterStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())?Constants.SettleClaimsStatus.CONFIRM_INFORMATION:Constants.SettleClaimsStatus.FINISH_ACCEPTANCE;
        //存储日志
        this.saveSettleClaimsLog(settleClaims, Constants.equalsInteger(dto.getRegisterStatus(),Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey())?Constants.SettleClaimsLogType.PLATFORM_REGISTER:Constants.SettleClaimsLogType.PLATFORM_RETURN,dto.getDescribe());
        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::getStatus,settleClaimsStatus.getKey()));
                .eq(SettleClaims::getId,dto.getId())
                .set(SettleClaims::getEditDate, DateUtil.getCurrDateTime())
                .set(SettleClaims::getEditor,loginUserInfo.getId())
                .set(SettleClaims::getStatus,settleClaimsStatus.getKey()));
    }
@@ -1829,8 +1951,14 @@
        if(Constants.equalsInteger(model.getReportNumStatus(),Constants.TWO)){
            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.WAIT_DEAL.getKey())&&Constants.equalsInteger(model.getReportNumStatus(),Constants.ZERO)))){
        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.getReportNumStatus(),Constants.ZERO))
//                        ||(Constants.equalsInteger(model.getStatus(),Constants.SettleClaimsStatus.WAIT_DEAL.getKey())
//                        &&Constants.equalsInteger(model.getReportNumStatus(),Constants.ZERO))
        )
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"仅可修改一次报案号");
        }
@@ -1937,7 +2065,7 @@
        if(Objects.isNull(settleClaims)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!Constants.equalsInteger(Constants.SettleClaimsStatus.WAIT_DEAL.getKey(),settleClaims.getStatus())){
        if(!Constants.equalsInteger(Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey(),settleClaims.getStatus())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        if(Constants.equalsInteger(dto.getStatus(),Constants.ZERO) || Constants.equalsInteger(dto.getStatus(),Constants.THREE)){
@@ -1948,7 +2076,7 @@
            //存储日志
            this.saveSettleClaimsLog(settleClaims,
                    Constants.equalsInteger(dto.getStatus(),Constants.ZERO)?Constants.SettleClaimsLogType.PLATFORM_ACCEPTANCE:Constants.SettleClaimsLogType.PLATFORM_DISCUSS,
                    dto.getDescribe());
                    dto.getDescribe(),Constants.SettleClaimsStatus.ACCEPTANCE);
        }else if(Constants.equalsInteger(dto.getStatus(),Constants.ONE)){
            //拒绝受理
            settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
@@ -1957,7 +2085,7 @@
            //存储日志
            this.saveSettleClaimsLog(settleClaims,
                    Constants.SettleClaimsLogType.PLATFORM_REFUSE_ACCEPTANCE,
                    Constants.SettleClaimsLogType.PLATFORM_REFUSE_ACCEPTANCE.getInfo().replace("{param}",dto.getDescribe()));
                    Constants.SettleClaimsLogType.PLATFORM_REFUSE_ACCEPTANCE.getInfo().replace("{param}",dto.getDescribe()),Constants.SettleClaimsStatus.REJECT_DEAL);
        }else if(Constants.equalsInteger(dto.getStatus(),Constants.TWO)){
            //受理商议审批
            settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
@@ -1966,7 +2094,7 @@
            //存储日志
            this.saveSettleClaimsLog(settleClaims,
                    Constants.SettleClaimsLogType.PLATFORM_WAIT_DISCUSS,
                    dto.getDescribe());
                    dto.getDescribe(),Constants.SettleClaimsStatus.REJECT_DEAL);
        }
    }
@@ -1984,9 +2112,9 @@
        }
        List<CompensationVO> modelList = new ArrayList<>();
        if (Objects.nonNull(settleClaims)) {
            if(Constants.equalsInteger(compensationFeeDTO.getType(),Constants.ZERO)&&StringUtils.isNotBlank(settleClaims.getAccountContent())){
            if(Constants.equalsInteger(compensationFeeDTO.getType(),Constants.ONE)&&StringUtils.isNotBlank(settleClaims.getAccountContent())){
                modelList = JSONArray.parseArray(settleClaims.getAccountContent(),CompensationVO.class);
            }else if(Constants.equalsInteger(compensationFeeDTO.getType(),Constants.ONE)&&StringUtils.isNotBlank(settleClaims.getHpAccountContent())){
            }else if(Constants.equalsInteger(compensationFeeDTO.getType(),Constants.TWO)&&StringUtils.isNotBlank(settleClaims.getHpAccountContent())){
                modelList = JSONArray.parseArray(settleClaims.getHpAccountContent(),CompensationVO.class);
            }
        }
@@ -2027,7 +2155,8 @@
        if(Objects.isNull(settleClaims)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!(Constants.equalsInteger(Constants.SettleClaimsStatus.ACCEPTANCE.getKey(),settleClaims.getStatus()))||Constants.equalsInteger(Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION.getKey(),settleClaims.getStatus())){
        if(!(Constants.equalsInteger(Constants.SettleClaimsStatus.ACCEPTANCE.getKey(),settleClaims.getStatus())
                ||Constants.equalsInteger(Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION.getKey(),settleClaims.getStatus()))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
@@ -2050,7 +2179,7 @@
        //存储日志
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_LP_DEAL,
                Constants.SettleClaimsLogType.PLATFORM_LP_DEAL.getInfo());
                Constants.SettleClaimsLogType.PLATFORM_LP_DEAL.getInfo(),Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION);
    }
@@ -2086,7 +2215,7 @@
        Constants.SettleClaimsLogType settleClaimsLogType = Constants.equalsInteger(dto.getStatus(),Constants.ZERO)
                ?Constants.SettleClaimsLogType.PLATFORM_DISCUSS_PASS:Constants.SettleClaimsLogType.PLATFORM_DISCUSS_REFUSE;
        this.saveSettleClaimsLog(settleClaims, settleClaimsLogType
                ,settleClaimsLogType.getInfo().replace("${param}",dto.getDescribe()));
                ,settleClaimsLogType.getInfo().replace("${param}",dto.getDescribe()),settleClaimsStatus);
        settleClaimsMapper.update(null,new UpdateWrapper<SettleClaims>().lambda()
                .eq(SettleClaims::getId,dto.getId()).set(SettleClaims::getEditDate, DateUtil.getCurrDateTime())
                        .set(SettleClaims::getEditor,loginUserInfo.getId())
@@ -2128,8 +2257,6 @@
        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));
        update.setHpOtherAccount(modelList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        update.setId(settleClaims.getId());
        update.setStatus(Constants.SettleClaimsStatus.COMPENSATION.getKey());
        settleClaimsMapper.updateById(update);
@@ -2137,7 +2264,7 @@
        //存储日志
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_HP_DEAL,
                Constants.SettleClaimsLogType.PLATFORM_HP_DEAL.getInfo());
                Constants.SettleClaimsLogType.PLATFORM_HP_DEAL.getInfo(),Constants.SettleClaimsStatus.COMPENSATION);
    }
@@ -2176,30 +2303,33 @@
        update.setWgClaimAccount(modelList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)&&i.getName().equals(Constants.compensation.WG_COMPENSATION.getName())).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        update.setScClaimAccount(modelList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)&&i.getName().equals(Constants.compensation.SC_COMPENSATION.getName())).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        update.setSwClaimAccount(modelList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)&&i.getName().equals(Constants.compensation.SW_COMPENSATION.getName())).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        update.setClaimAccount(modelList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        //处理历史数据
        List<CompensationVO> oldList =  JSONArray.parseArray(settleClaims.getHpAccountContent(),CompensationVO.class);
        for (CompensationVO compensationVO:oldList) {
            if(compensationVO.getName().equals(Constants.compensation.YL_COMPENSATION.getName())){
                compensationVO.setFee(update.getYlClaimAccount());
            }else if(compensationVO.getName().equals(Constants.compensation.WG_COMPENSATION.getName())){
                compensationVO.setFee(update.getWgClaimAccount());
            }else if(compensationVO.getName().equals(Constants.compensation.SC_COMPENSATION.getName())){
                compensationVO.setFee(update.getScClaimAccount());
            }else if(compensationVO.getName().equals(Constants.compensation.SW_COMPENSATION.getName())){
                compensationVO.setFee(update.getSwClaimAccount());
            }else{
              continue;
            }
        }
        update.setAccountContent(JSONArray.toJSONString(oldList));
        update.setId(settleClaims.getId());
//        update.setClaimAccount(modelList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
//        //处理历史数据
//        List<CompensationVO> oldList =  JSONArray.parseArray(settleClaims.getHpAccountContent(),CompensationVO.class);
//        for (CompensationVO compensationVO:oldList) {
//            if(compensationVO.getName().equals(Constants.compensation.YL_COMPENSATION.getName())){
//                compensationVO.setFee(update.getYlClaimAccount());
//            }else if(compensationVO.getName().equals(Constants.compensation.WG_COMPENSATION.getName())){
//                compensationVO.setFee(update.getWgClaimAccount());
//            }else if(compensationVO.getName().equals(Constants.compensation.SC_COMPENSATION.getName())){
//                compensationVO.setFee(update.getScClaimAccount());
//            }else if(compensationVO.getName().equals(Constants.compensation.SW_COMPENSATION.getName())){
//                compensationVO.setFee(update.getSwClaimAccount());
//            }else{
//              continue;
//            }
//        }
        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));
        update.setHpOtherAccount(modelList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).map(i->i.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add));
        update.setId(settleClaims.getId());
        update.setFeeUpdate(Constants.ONE);
        settleClaimsMapper.updateById(update);
        //存储日志
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_UPD_FEE,
                Constants.SettleClaimsLogType.PLATFORM_UPD_FEE.getInfo());
                dto.getDescribe(),null);
    }
@@ -2207,27 +2337,28 @@
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void confirmFee(Integer id){
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!loginUserInfo.getType().equals(Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非管理员无法进行该操作");
        if(!loginUserInfo.getType().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非企业人员无法进行该操作");
        }
        SettleClaims settleClaims  = settleClaimsJoinMapper.selectById(id);
        if(Objects.isNull(settleClaims)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!Constants.equalsInteger(Constants.SettleClaimsStatus.COMPENSATION.getKey(),settleClaims.getStatus())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        //如果是企业 查询是否是自己企业的数据
        if(!Constants.equalsInteger(settleClaims.getCompanyId(),loginUserInfo.getCompanyId())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非您企业的数据,您无法进行该操作");
        }
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditor(loginUserInfo.getId());
        update.setStatus(Constants.SettleClaimsStatus.WAIT_DEAL.getKey());
        update.setStatus(Constants.SettleClaimsStatus.CONFIRM_FEE.getKey());
        update.setId(settleClaims.getId());
        settleClaimsMapper.updateById(update);
        //存储日志
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.CONFIRM_FEE,
                Constants.SettleClaimsLogType.CONFIRM_FEE.getInfo());
                Constants.SettleClaimsLogType.CONFIRM_FEE.getInfo(),Constants.SettleClaimsStatus.CONFIRM_FEE);
    }
@@ -2255,6 +2386,9 @@
        update.setEditDate(new Date());
        update.setEditor(loginUserInfo.getId());
        update.setStatus(Constants.SettleClaimsStatus.CLOSE_CASE.getKey());
        update.setCheckDate(new Date());
        update.setCheckUserId(loginUserInfo.getId());
        update.setCheckInfo(Constants.SettleClaimsStatus.CLOSE_CASE.name());
        update.setId(settleClaims.getId());
        settleClaimsMapper.updateById(update);
@@ -2285,7 +2419,7 @@
        //存储日志
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.PLATFORM_FINISH,
                dto.getDescribe());
                dto.getDescribe(),Constants.SettleClaimsStatus.CLOSE_CASE);
    }
@@ -2293,7 +2427,9 @@
    public List<SettleParentStatusVO> getParentStatus(SettleClaims settleClaims){
        List<SettleParentStatusVO> settleParentStatusVOList = new ArrayList<>();
        List<SettleClaimsLog> settleClaimsLogList = settleClaimsLogMapper
                .selectList(new QueryWrapper<SettleClaimsLog>().lambda().eq(SettleClaimsLog::getObjId,settleClaims.getId()).orderByDesc(SettleClaimsLog::getCreateDate));
                .selectList(new QueryWrapper<SettleClaimsLog>().lambda().eq(SettleClaimsLog::getObjId,settleClaims.getId())
                        .isNotNull(SettleClaimsLog::getParentStatus)
                        .orderByDesc(SettleClaimsLog::getId));
        //立案退回状态数据
        if(Constants.equalsInteger(settleClaims.getStatus(),Constants.SettleClaimsStatus.FINISH_ACCEPTANCE.getKey())){
            SettleParentStatusVO settleParentStatusVO = new SettleParentStatusVO();
@@ -2357,21 +2493,22 @@
            //获取当前日志最大的父状态
            Optional<Integer> optionalInteger = settleClaimsLogs.stream().map(i->i.getParentStatus()).max(Comparator.comparingInt(o -> o));
            if(optionalInteger.isPresent()){
                for (int i = 1; i <= 5; i++) {
                for (int i = 1; i <= (optionalInteger.get()<5?optionalInteger.get():5); i++) {
                    SettleParentStatusVO s = new SettleParentStatusVO();
                    Constants.SettleClaimsLogParentStatus  parentStatus = Constants.SettleClaimsLogParentStatus.getAll(i);
                    s.setParentTitle(parentStatus.getName());
                    s.setChildTitle(parentStatus.getInfo());
                    s.setStatus(Constants.ZERO);
                    //如果是等于父状态 则去查询实际的业务状态
                    if(Constants.equalsInteger(i,optionalInteger.get())){
                        Optional<SettleClaimsLog> settleClaimsLogOptional = settleClaimsLogList.stream()
                                .filter(j->Constants.equalsInteger(j.getParentStatus(),optionalInteger.get())).findFirst();
                        if(settleClaimsLogOptional.isPresent()){
                            s.setChildTitle(Constants.SettleClaimsLogType.getName(settleClaimsLogOptional.get().getObjType()));
                        }
                    Optional<SettleClaimsLog> settleClaimsLogOptional = settleClaimsLogList.stream()
                            .filter(j->Constants.equalsInteger(j.getParentStatus(),optionalInteger.get())).findFirst();
                    if(settleClaimsLogOptional.isPresent()){
                        s.setChildTitle(Constants.SettleClaimsLogType.getName(settleClaimsLogOptional.get().getObjType()));
                        s.setOptDate(settleClaimsLogOptional.get().getCreateDate());
                    }
                    settleParentStatusVOList.add(s);
                }
            }
            //添加撤案数据
@@ -2380,7 +2517,7 @@
            settleParentStatusCHVO.setChildTitle("企业主动撤案");
            settleParentStatusCHVO.setStatus(Constants.THREE);
            Optional<SettleClaimsLog> optionalSettleClaimsSLLog = settleClaimsLogList.stream()
                    .filter(i->Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsLogType.RETURN_SETTLE.getKey())).findFirst();
                    .filter(i->Constants.equalsInteger(i.getObjType(),Constants.SettleClaimsLogType.RETURN_SETTLE.getKey())).findFirst();
            if(optionalSettleClaimsSLLog.isPresent()){
                settleParentStatusCHVO.setOptDate(optionalSettleClaimsSLLog.get().getCreateDate());
            }
@@ -2401,9 +2538,28 @@
                    //如果最大的父业务状态 大于 默认的6类数据 则直接显示默认配置
                    s.setChildTitle(parentStatus.getInfo());
                    s.setStatus(Constants.ZERO);
                    int finalI = i;
                    Optional<SettleClaimsLog> optionalSettleClaimsLog = settleClaimsLogList.stream()
                            .filter(j->Constants.equalsInteger(j.getParentStatus(), finalI)).findFirst();
                    if(optionalSettleClaimsLog.isPresent()){
                        s.setOptDate(optionalSettleClaimsLog.get().getCreateDate());
                    }
                }else if(optionalInteger.get()<i){
                    //如果最大的父业务状态 小于 默认的6类数据 则直接显示默认未处理配置
                    s.setChildTitle(parentStatus.getWaitInfo());
                    if(Constants.equalsInteger(i,Constants.SettleClaimsLogParentStatus.LS.getKey())){
//                        //报案审批通过后要显示
                        Optional<SettleClaimsLog> settleClaimsLogOptional = settleClaimsLogList.stream()
                                .filter(j->
                                        Constants.equalsInteger(j.getObjType(),Constants.SettleClaimsLogType.PLATFORM_ACCEPTANCE.getKey())
                                        || Constants.equalsInteger(j.getObjType(),Constants.SettleClaimsLogType.PLATFORM_DISCUSS_PASS.getKey())
                                ).findFirst();
                        if(settleClaimsLogOptional.isPresent()){
                            s.setStatus(Constants.ONE);
                            settleParentStatusVOList.add(s);
                            continue;
                        }
                    }
                    s.setStatus(Constants.TWO);
                }else{
                    //如果是等于父状态 则去查询实际的业务状态
@@ -2412,6 +2568,7 @@
                                .filter(j->Constants.equalsInteger(j.getParentStatus(),optionalInteger.get())).findFirst();
                        if(settleClaimsLogOptional.isPresent()){
                            s.setChildTitle(Constants.SettleClaimsLogType.getName(settleClaimsLogOptional.get().getObjType()));
                            s.setOptDate(settleClaimsLogOptional.get().getCreateDate());
                        }
                    }
                    s.setStatus(Constants.ONE);
@@ -2420,10 +2577,219 @@
            }
        }
        return settleParentStatusVOList;
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void updHurtType(UpdHurtTypeDTO dto){
        if(Objects.isNull(dto)
                || Objects.isNull(dto.getId())
                || Objects.isNull(dto.getHurtType())
                || !(Constants.equalsInteger(dto.getHurtType(),Constants.ZERO) || Constants.equalsInteger(dto.getHurtType(),Constants.ONE))
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!loginUserInfo.getType().equals(Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非管理员无法进行该操作");
        }
        SettleClaims settleClaims  = settleClaimsJoinMapper.selectById(dto.getId());
        if(Objects.isNull(settleClaims)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        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())
        )){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        if(!Constants.equalsInteger(settleClaims.getHurtType(),Constants.TWO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"已修改过,无法再次修改");
        }
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditor(loginUserInfo.getId());
        update.setHurtType(dto.getHurtType());
        update.setId(settleClaims.getId());
        settleClaimsMapper.updateById(update);
        //存储日志
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.UPD_HURT_TYPE,
                Constants.SettleClaimsLogType.UPD_HURT_TYPE.getInfo(),null);
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void updReceiveInfo(UpdReceiveInfoDTO dto){
        if(Objects.isNull(dto)
                || Objects.isNull(dto.getId())
                || StringUtils.isBlank(dto.getReceiveBank())
                || StringUtils.isBlank(dto.getReceiveAccount())
                || StringUtils.isBlank(dto.getReceiveUserName())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!loginUserInfo.getType().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非企业人员无法进行该操作");
        }
        SettleClaims settleClaims  = settleClaimsJoinMapper.selectById(dto.getId());
        if(Objects.isNull(settleClaims)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        //如果是企业 查询是否是自己企业的数据
        if(!Constants.equalsInteger(settleClaims.getCompanyId(),loginUserInfo.getCompanyId())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非您企业的数据,您无法进行该操作");
        }
        if(!(Constants.equalsInteger(Constants.SettleClaimsStatus.COMPENSATION.getKey(),settleClaims.getStatus()) || Constants.equalsInteger(Constants.SettleClaimsStatus.CONFIRM_FEE.getKey(),settleClaims.getStatus()) )
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,业务状态已流转~");
        }
        SettleClaims update = new SettleClaims();
        update.setEditDate(new Date());
        update.setEditor(loginUserInfo.getId());
        update.setReceiveBank(dto.getReceiveBank());
        update.setReceiveAccount(dto.getReceiveAccount());
        update.setReceiveUserName(dto.getReceiveUserName());
        update.setId(settleClaims.getId());
        settleClaimsMapper.updateById(update);
        //存储日志
        this.saveSettleClaimsLog(settleClaims,
                Constants.SettleClaimsLogType.UPD_RECEIVE_INFO,
                Constants.SettleClaimsLogType.UPD_RECEIVE_INFO.getInfo(),null);
    }
    @Override
    public List<String> getDiscussProblemType(){
       String types = systemDictDataBiz.queryByCode(Constants.PROTOCOL,Constants.DISCUSS_PROBLEM_TYPE).getCode();
       if(StringUtils.isNotBlank(types)){
           return Arrays.asList(types.split(","));
       }
       return null;
    }
    @Override
    public SettleClaimsDataVO getSettleClaimsDataVO(){
        SettleClaimsDataVO settleClaimsDataVO = new SettleClaimsDataVO();
        settleClaimsDataVO.setSettleClaimsTotal(Constants.ZERO);
        settleClaimsDataVO.setAverageSettleClaimsTime(BigDecimal.ZERO);
        settleClaimsDataVO.setSettleClaimsTotalFee(BigDecimal.ZERO);
        settleClaimsDataVO.setRefuseRata(BigDecimal.ZERO);
        settleClaimsDataVO.setAcceptanceRata(BigDecimal.ZERO);
        settleClaimsDataVO.setCloseCaseRata(BigDecimal.ZERO);
        List<SettleClaims> settleClaimsList = settleClaimsMapper.selectList(new QueryWrapper<SettleClaims>().lambda().eq(SettleClaims::getIsdeleted,Constants.ZERO));
        if(CollectionUtils.isNotEmpty(settleClaimsList)){
            Integer totalSettleClaimsNum = settleClaimsList.size();
            List<SettleClaims> closeCaseList = settleClaimsList.stream().filter(i->Objects.nonNull(i.getStatus())
                    &&Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.CLOSE_CASE.getKey())).collect(Collectors.toList());
            for (SettleClaims settleClaims:closeCaseList) {
                if(Objects.nonNull(settleClaims.getCheckDate())&&Objects.nonNull(settleClaims.getCreateDate())){
                    settleClaims.setTotalHours(
                            (int)DateUtil.getBetweenHours(settleClaims.getCreateDate(),settleClaims.getCheckDate())
                    );
                }else{
                    settleClaims.setTotalHours(Constants.ZERO);
                }
            }
            Integer closeCaseNum = closeCaseList.size();
            //未包含 立案退回 立案退回可以再次提交的
            Integer refuseNum = settleClaimsList.stream().filter(i->Objects.nonNull(i.getStatus())&&
                    (Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.REJECT_DEAL.getKey())
                            ||Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.WAIT_DISCUSS_REJECT.getKey()))
                    ).collect(Collectors.toList()).size();
            Integer acceptanceNum = settleClaimsList.stream().filter(i->Objects.nonNull(i.getStatus())&&
                    (Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.ACCEPTANCE.getKey())
                            ||Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.WAIT_AUDIT_COMPENSATION.getKey())
                            ||Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.COMPENSATION.getKey())
                            ||Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.CONFIRM_FEE.getKey())
                            ||Constants.equalsInteger(i.getStatus(),Constants.SettleClaimsStatus.CLOSE_CASE.getKey())
                    )
            ).collect(Collectors.toList()).size();
            if(Objects.nonNull(closeCaseNum)&&!Constants.equalsInteger(closeCaseNum,Constants.ZERO)){
                settleClaimsDataVO.setCloseCaseRata(new BigDecimal(closeCaseNum.toString()).divide(new BigDecimal(totalSettleClaimsNum.toString()),4,BigDecimal.ROUND_HALF_UP));
            }
            if(Objects.nonNull(refuseNum)&&!Constants.equalsInteger(refuseNum,Constants.ZERO)){
                settleClaimsDataVO.setRefuseRata(new BigDecimal(refuseNum.toString()).divide(new BigDecimal(totalSettleClaimsNum.toString()),4,BigDecimal.ROUND_HALF_UP));
            }
            if(Objects.nonNull(acceptanceNum)&&!Constants.equalsInteger(acceptanceNum,Constants.ZERO)){
                settleClaimsDataVO.setAcceptanceRata(new BigDecimal(acceptanceNum.toString()).divide(new BigDecimal(totalSettleClaimsNum.toString()),4,BigDecimal.ROUND_HALF_UP));
            }
            List<DataListVO> settleClaimsTotalList = new ArrayList<>();
            List<DataListVO> settleClaimsFeeList = new ArrayList<>();
            List<DataListVO> averageSettleClaimsList = new ArrayList<>();
            for (int i = 5; i >=0 ; i--) {
                //每个月的数据
                String monthData = DateUtil.DateToStr(DateUtil.afterDateByType(new Date(),1,i*-1),"yyyy-MM");
                DataListVO settleClaimsTotal = new DataListVO();
                DataListVO settleClaimsFee = new DataListVO();
                DataListVO averageSettleClaims = new DataListVO();
                settleClaimsTotal.setDataFirst(monthData);
                settleClaimsTotal.setDataSecond(
                        settleClaimsList.stream().filter(j->DateUtil.DateToStr(j.getCreateDate(),"yyyy-MM").equals(monthData)).collect(Collectors.toList()).toString()
                );
                settleClaimsFee.setDataFirst(monthData);
                List<SettleClaims> closeCaseMonthList = closeCaseList.stream().filter(j->Objects.nonNull(j.getCheckDate())&&DateUtil.DateToStr(j.getCheckDate(),"yyyy-MM").equals(monthData)).collect(Collectors.toList());
                settleClaimsFee.setDataSecond(closeCaseMonthList.stream().map(j->j.getHpAccount().add(j.getHpOtherAccount())).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
                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()
                );
                settleClaimsTotalList.add(settleClaimsTotal);
                settleClaimsFeeList.add(settleClaimsFee);
                averageSettleClaimsList.add(averageSettleClaims);
            }
            settleClaimsDataVO.setSettleClaimsFeeList(settleClaimsFeeList);
            settleClaimsDataVO.setAverageSettleClaimsList(averageSettleClaimsList);
            settleClaimsDataVO.setSettleClaimsTotalList(settleClaimsTotalList);
            //总理赔金额
            settleClaimsDataVO.setSettleClaimsTotalFee(closeCaseList.stream().map(i->i.getHpAccount().add(i.getHpOtherAccount())).reduce(BigDecimal.ZERO,BigDecimal::add));
            //总理赔案件数
            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)
            );
        }
        return settleClaimsDataVO;
    }
}