k94314517
2025-06-10 fca3a3f8358872215cf98986e8c8b72cf2dbfe02
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -4,8 +4,10 @@
import cn.hutool.core.util.IdcardUtil;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.business.dto.ApplyPowerDTO;
import com.doumee.dao.business.dto.CountCyclePriceDTO;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.ApplyPowerVO;
import com.doumee.dao.business.vo.ChangeDealTypeVO;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import io.swagger.models.auth.In;
@@ -21,7 +23,10 @@
import java.math.RoundingMode;
import java.net.URL;
import java.net.URLDecoder;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.Date;
@@ -99,6 +104,7 @@
    public static final String COMPANY_USER_APPLY ="COMPANY_USER_APPLY" ;
    public static final String INSURANCE ="INSURANCE" ;
    public static final String CONTRACT ="CONTRACT" ;
    public static final String DISCUSS_PROBLEM_TYPE ="DISCUSS_PROBLEM_TYPE" ;
    public static final String SETTLE_FILE ="SETTLE_FILE" ;
    public static final String DU_FILE ="DU_FILE" ;
@@ -194,6 +200,13 @@
                return  Constants.equalsInteger(model.getStatus(), UnionApplyStatus.FINISH.getKey())?"保险生效止期":"预计生效止期";
        }
    }
    public static BigDecimal getBigDecimalNoNull(BigDecimal bigDecimal){
        if(Objects.isNull(bigDecimal)){
            return  BigDecimal.ZERO;
        }
        return bigDecimal;
    }
    /**
@@ -308,6 +321,38 @@
        }
        return Constants.countPriceVO(countCyclePriceDTO.getStartDate(),countCyclePriceDTO.getSolutions());
    }
    public static int calculateAge(String idCard,Date dateDate) {
        try{
            Integer happenYear = Integer.valueOf(DateUtil.dateToString(dateDate,"yyyy"));
            Integer birthYear = Integer.valueOf(idCard.substring(6,10));
            return happenYear - birthYear;
        }catch (Exception e){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"年龄信息错误");
        }
//        if (idCard == null || idCard.length() != 18) {
//            throw new IllegalArgumentException("身份证号码必须是18位");
//        }
//
//        // 提取出生日期
//        String birthDateStr = idCard.substring(6, 14); // 例如:19900101
//        LocalDate birthDate = LocalDate.parse(birthDateStr);
//        Instant instant = dateDate.toInstant();
//        // 获取当前日期
//        LocalDate currentDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); // 转换为 LocalDate
//
//        // 计算年龄
//        Period period = Period.between(birthDate, currentDate);
//        int age = period.getYears(); // 直接获取年份差即为年龄
//        return age;
    }
    public static CountCyclePriceVO countPriceVO(Date startDate, Solutions solutions){
        CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO();
@@ -767,6 +812,10 @@
        LP_STAMP_FILE(31, "保险公司理赔盖章文件", "保险公司理赔盖章文件"),
        LP_FILE(32, "保险公司上传理赔材料一览表", "保险公司上传理赔材料一览表"),
        LP_OTHER_FILE(33, "理赔其他材料", "理赔其他材料"),
        LP_PAY_FILE(34, "打款凭证", "打款凭证"),
        LP_DZBD_FILE(35, "电子保单", "电子保单"),
        LP_SUPPLEMENT_FILE(36, "补充材料", "补充材料"),
        ;
        // 成员变量
@@ -1620,10 +1669,11 @@
        CHANGE_FACTORY(2, "员工换厂申请","保险方案"),
        DISPATCH_UNIT(3, "派遣单位申请","派遣单位"),
        TAXES(4, "开票申请","开票金额"),
        SETTLE_CLAIMS(5, "报案理赔","报案人"),
        SETTLE_CLAIMS(5, "理赔提醒","报案信息"),
        CONTRACT(6, "合同签署","合同签署"),
        SOLUTIONS(7, "方案签署","方案签署"),
        COMPANY_USER_APPLY(8, "集团申请","集团申请"),
        SETTLE_CLAIMS_APPLY_ADMIN(9, "报案理赔","待立案"),
        ;
        // 成员变量
        private int key;
@@ -1678,19 +1728,36 @@
    public  enum NoticeType {
        ZERO(0, "待审核","","","待审核","待处理","处理中","待签署","待签署"),
        ONE(1, "企业待签署","","","工种待审核","","已结案","",""),
        TWO(2, "待出单","待审核","待审核","","","","",""),
        THREE(3, "申请退回","申请退回","申请退回","","","","",""),
        FOUR(4, "已退回","已退回","已退回","","","已撤销","",""),
        FIVE(5, "申请驳回","申请驳回","申请驳回","","","","",""),
        ZERO(0, "待审核","","","待审核","待处理","风险案件待审核","待签署","待签署"),
        //理赔通知企业(非待办)
        ONE(1, "企业待签署","","","工种待审核","","风险案件立案退回","",""),
        TWO(2, "待出单","待审核","待审核","","","已立案待受理","",""),
        THREE(3, "申请退回","申请退回","申请退回","","","已受理,需要补充材料","",""),
        //理赔通知企业(非待办)
        FOUR(4, "已退回","已退回","已退回","","","已拒绝受理","",""),
        FIVE(5, "申请驳回","申请驳回","申请驳回","","","商议待领导审批","",""),
        //续保通知
        SIX(6, "","","","","","","",""),
        //商户端 委托保 - 投保待审核 加减保 换厂 待审核
        SEVEN(7, "待审核","待审核","待审核","","","","",""),
        SIX(6, "","","","","","商议审批拒绝","",""),
        //商户端 委托保 - 投保待审核 加减保 换厂 待审核, 理赔通知企业(非待办)
        SEVEN(7, "待审核","待审核","待审核","","","商议审批拒绝通知","",""),
        //待复审
        EIGHT(8, "待审核","","","","","","",""),
        NINE(9, "","","","","","","",""),
        EIGHT(8, "待审核","","","","","待理算","",""),
        NINE(9, "","","","","","待核赔","",""),
        TEN(10, "","","","","","待核赔确认","",""),
        ELEVEN(11, "","","","","","赔付金额已变更","",""),
        TWELVE(12, "","","","","","待结案","",""),
        //理赔通知平台(非代办)
        THIRTEEN(13, "","","","","","已结案,赔付款项将在1-3个工作日内到账","",""),
        //理赔通知平台(非代办)
        FOURTEEN(14, "","","","","","已撤案","",""),
        //理赔通知企业(非待办)
        FIFTEEN(15, "","","","","","已受理待理算","",""),
        //理赔通知企业(非待办)
        SIXTEEN(16, "","","","","","受理审批中","",""),
        //理赔通知企业(非待办)
        SEVENTEEN(17, "","","","","","已理算待核赔","",""),
        //理赔通知企业(非待办)
        EIGHTEEN(18, "","","","","","待结案,赔付金额已变更","",""),
        ;
        // 成员变量
@@ -1932,20 +1999,34 @@
    public  enum SettleClaimsStatus {
        WAIT_ACCEPTANCE(0, "待受理"),
        RETURN_ACCEPTANCE(1, "退回受理"),
        DEAL_ING(2, "受理中"),
        CONFIRM_INFORMATION(3, "确认资料"),
        FINISH_ACCEPTANCE(4, "完成受理"),
        //状态 0暂存中 1已报案 2待立案 3已立案 4立案退回 5待受理 6拒绝受理 7商议待审批
        // 8商议审批拒绝 9已受理 10待核赔  11已核赔 12已确认金额 13已结案 14已撤案
        WAIT_ACCEPTANCE(0, "暂存中",0),
        RETURN_ACCEPTANCE(1, "已报案",1),
        DEAL_ING(2, "待立案",0),//弃用
        CONFIRM_INFORMATION(3, "已立案",2),
        FINISH_ACCEPTANCE(4, "立案退回",2),
        WAIT_DEAL(5, "待受理",3),//弃用
        REJECT_DEAL(6, "拒绝受理",3),
        WAIT_DISCUSS_AUDIT(7, "待商议审批",3),
        WAIT_DISCUSS_REJECT(8, "商议审批拒绝",3),
        ACCEPTANCE(9, "已受理",3),//待理算
        WAIT_AUDIT_COMPENSATION(10, "待核赔",4),
        COMPENSATION(11, "已核赔",5),
        CONFIRM_FEE(12, "待结案",5),
        CLOSE_CASE(13, "已结案",6),
        RETURN(14, "已撤案",7),
        ;
        // 成员变量
        private String name;
        private int key;
        private String name;//业务描述
        private int key;//业务状态
        private int parentKey;//主流程  1=报案 2=立案 3=受理 4=理算 5=核赔 6=结案/已撤案
        // 构造方法
        SettleClaimsStatus(int key, String name) {
        SettleClaimsStatus(int key, String name,int parentKey) {
            this.name = name;
            this.key = key;
            this.parentKey = parentKey;
        }
        // 普通方法
        public static String getName(int index) {
@@ -1972,23 +2053,44 @@
        public void setKey(int key) {
            this.key = key;
        }
        public int getParentKey() {
            return parentKey;
        }
        public void setParentKey(int parentKey) {
            this.parentKey = parentKey;
        }
    }
    public  enum SettleClaimsLogType {
        UPLOAD(0, "提交报案","提交意见:${param}"),
        PLATFORM_RETURN(1, "平台退回","提交意见:${param}"),
        PLATFORM_CONFIRM_INFORMATION(2, "平台确认资料",""),
        PLATFORM_FINISH(3, "结案提交","提交意见:${param}"),
        PLATFORM_FINISH(3, "已结案","提交意见:${param}"),
        UPDATE_DATA(4, "修改信息","提交意见:${param}"),
        SUPPLEMENT(5, "补充说明","提交意见:${param}"),
        PLATFORM_LP_DEAL(6, "平台理赔处理","提交意见:${param}"),
        PLATFORM_REMARK(7, "平台备注标签","${param}"),
        PLATFORM_ADDCODE(8, "平台添加报案号","备案号:${param}"),
        PLATFORM_LP_DEAL(6, "平台理赔处理","已在平台完成理赔"),
        PLATFORM_REMARK(7, "备注标签","${param}"),
        PLATFORM_ADDCODE(8, "平台修改报案号","备案号:${param}"),
        PLATFORM_UN_AGREE_BACK(9, "企业下载资料",""),
        PLATFORM_DOWNLOAD(10, "平台下载资料",""),
        PLATFORM_CHECK_PASS(11, "平台上传资料",""),
        SUPPLEMENT_DESCRIBE(12, "平台填写需补充内容",""),
        RETURN_SETTLE(13, "撤销报案",""),
        PLATFORM_REGISTER(14, "平台立案",""),
        PLATFORM_ACCEPTANCE(15, "受理-已受理",""),
        PLATFORM_REFUSE_ACCEPTANCE(16, "受理-拒绝受理","拒绝原因:${param}"),
        PLATFORM_DISCUSS(17, "受理-商议",""),
        PLATFORM_DISCUSS_PASS(18, "受理-商议通过",""),
        PLATFORM_DISCUSS_REFUSE(19, "受理-商议拒绝","拒绝原因:${param}"),
        PLATFORM_WAIT_DISCUSS(20, "受理-商议待审批",""),
        PLATFORM_HP_DEAL(21, "核赔-提交核赔金额","已提交赔付金额,待用户确认"),
        PLATFORM_UPD_FEE(22, "核赔-修改金额",""),
        CONFIRM_FEE(22, "核赔-客户确认金额","已确认金额"),
        UPD_CASE_TYPE(23, "受理-确认案件类型","已确认案件类型"),
        UPD_HURT_TYPE(24, "修改伤残类型信息","是否伤残修改为“{param}”"),
        UPD_RECEIVE_INFO(25, "收款信息变更","修改收款信息"),
        ;
        // 成员变量
        private String name;
@@ -2004,7 +2106,7 @@
        // 普通方法
        public static String getName(int index) {
            for (ApplyLogType c : ApplyLogType.values()) {
            for (SettleClaimsLogType c : SettleClaimsLogType.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
@@ -2012,7 +2114,7 @@
            return null;
        }
        public static String getInfo(int index) {
            for (ApplyLogType c : ApplyLogType.values()) {
            for (SettleClaimsLogType c : SettleClaimsLogType.values()) {
                if (c.getKey() == index) {
                    return c.info;
                }
@@ -2044,6 +2146,94 @@
        public void setInfo(String info) {
            this.info = info;
        }
    }
    public  enum SettleClaimsLogParentStatus {
        BA(1, "报案","已报案","已报案"),
        LA(2, "立案","已立案","待立案"),
        SL(3, "受理","已受理","待受理"),
        LS(4, "理算","已理算","待理算"),
        HP(5, "核赔","已核赔","待核赔"),
        JA(6, "结案","已结案","待结案"),
        ;
        // 成员变量
        private String name;
        private String info;
        private String waitInfo;
        private int key;
        // 构造方法
        SettleClaimsLogParentStatus(int key, String name,String info,String waitInfo) {
            this.name = name;
            this.info = info;
            this.key = key;
            this.waitInfo = waitInfo;
        }
        // 普通方法
        public static String getName(int index) {
            for (SettleClaimsLogParentStatus c : SettleClaimsLogParentStatus.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        // 普通方法
        public static SettleClaimsLogParentStatus getAll(int index) {
            for (SettleClaimsLogParentStatus c : SettleClaimsLogParentStatus.values()) {
                if (c.getKey() == index) {
                    return c;
                }
            }
            return null;
        }
        public static String getInfo(int index) {
            for (SettleClaimsLogParentStatus c : SettleClaimsLogParentStatus.values()) {
                if (c.getKey() == index) {
                    return c.info;
                }
            }
            return null;
        }
        // get set 方法
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public String getInfo() {
            return info;
        }
        public void setInfo(String info) {
            this.info = info;
        }
        public String getWaitInfo() {
            return waitInfo;
        }
        public void setWaitInfo(String waitInfo) {
            this.waitInfo = waitInfo;
        }
    }
@@ -2608,5 +2798,161 @@
    }
    /**
     * 赔付项
     */
    public  enum compensation{
        YL_COMPENSATION(0, "医疗理赔",0),
        WG_COMPENSATION(1, "误工理赔",0),
        SC_COMPENSATION(2, "伤残理赔",0),
        SW_COMPENSATION(3, "死亡理赔",0),
        HSF_FEE(4, "伙食费",1),
        XY_FEE(5, "续医费",1),
        YY_FEE(6, "营养费",1),
        HL_FEE(7, "护理费",1),
        ZDJB_FEE(8, "重大疾病赔偿金",1),
        TB_FEE(9, "特别费用",1),
        ZS_FEE(10, "住宿费",1),
        JT_FEE(11, "津贴",1),
        CJ_FEE(12, "残疾赔偿金",1),
        BFYR_FEE(13, "被抚养人生活费",1),
        SCF_FEE(14, "丧葬费",1),
        JSFXJ_FEE(15, "精神抚恤金",1),
        JD_FEE(16, "鉴定费",1),
        SS_FEE(17, "诉讼费",1),
        LS_FEE(18, "律师费",1),
        TRAFFIC_FEE(19, "交通费",1),
        CJQJ_FEE(20, "残疾器具费",1),
        QT_FEE(21, "其他费用",1),
        ZFPJEYPF_FEE(22, "总发票金额药品费",2),
        ZL_FEE(23, "诊疗费",2),
        CL_FEE(24, "材料费",2),
        ZKJJE_FEE(25, "总扣减金额",2),
        BFZF_FEE(26, "部分自费",2),
        QZF_FEE(27, "全自费金额",2),
        BHL_FEE(28, "不合理费用",2),
        DSFGF_FEE(29, "第三方给付费用",2),
        ;
        // 成员变量
        private String name;
        private int key;
        private int type;
        // 构造方法
        compensation(int key, String name, int type) {
            this.name = name;
            this.key = key;
            this.type = type;
        }
        // get set 方法
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public int getType() {
            return type;
        }
        public void setType(int type) {
            this.type = type;
        }
    }
    public static void  initApplyStatus(InsuranceApply apply){
        apply.setStatusCollect(Constants.InsuranceApplyStatus.getCollectStatus(apply.getStatus()));
        if(Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                || Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())){
            //如果已完成
            if(apply.getEndTime()==null || System.currentTimeMillis()>apply.getEndTime().getTime()){
                apply.setStatusCollect(Constants.THREE);//已过期
            }
        }
        Constants.setServiceDays(apply);
        apply.setStatusInfo(Constants.ApplyCollectStatus.getName(apply.getStatusCollect()));
        if(Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                || Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.WTB_DONE.getKey()) ){
            if(apply.getStartTime().getTime()>System.currentTimeMillis()){
                apply.setStatusInfo("待生效");
            }else if(apply.getEndTime().getTime()<System.currentTimeMillis()){
                apply.setStatusInfo("已过期");
            }else{
                apply.setStatusInfo("保障中");
            }
        }
    }
    public static void setServiceDays(InsuranceApply insuranceApply) {
        //设置在保时长(天数)
        insuranceApply.setServiceDays(Constants.ZERO);
        if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                || insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.WTB_DONE.getKey())){
            //如果当前时间大于结束日期 则使用结束日期对比开始日期
            if(DateUtil.compareDate(new Date(),insuranceApply.getEndTime())>=Constants.ZERO){
                insuranceApply.setServiceDays(
                        DateUtil.daysBetweenDates(insuranceApply.getEndTime(),insuranceApply.getStartTime())+1
                );
            }else if(DateUtil.compareDate(insuranceApply.getStartTime(),new Date())>=Constants.ZERO){
                //未开始
                insuranceApply.setServiceDays(Constants.ZERO);
            }else{
                insuranceApply.setServiceDays(DateUtil.daysBetweenDates(new Date(),insuranceApply.getStartTime())+1);
            }
        }
    }
    public static ApplyPowerVO getApplyPowerStatic(ApplyPowerDTO applyPowerDTO, InsuranceApply insuranceApply, Solutions solutions){
        if(Objects.isNull(applyPowerDTO)
                || Objects.isNull(applyPowerDTO.getApplyId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"参数错误");
        }
        if(Objects.isNull(applyPowerDTO.getBeginDate())){
            applyPowerDTO.setBeginDate(new Date());
        }
        ApplyPowerVO applyPowerVO = new ApplyPowerVO();
        //获取方案 结束时间
        Date endTime = insuranceApply.getEndTime();
        //查询当前去加保的开始日期  yyyy-MM-dd HH:mm:ss 2024-10-29 00:00:00
        Date addStartDate = DateUtil.getMontageDate(
                DateUtil.afterDateByType(applyPowerDTO.getBeginDate(),Constants.ZERO,solutions.getAddValidDays()),
                1
        );
        applyPowerVO.setAddStartDate(addStartDate);
        //加保生效日期大于 保单结束日期 则不可以进行加保
        if(addStartDate.getTime()>=endTime.getTime()){
            applyPowerVO.setAddTrue(Constants.ONE);
        }else{
            applyPowerVO.setAddTrue(Constants.ZERO);
        }
        //查询当前去减保的开始日期  yyyy-MM-dd HH:mm:ss 2024-10-29 00:00:00
        Date delStartDate = DateUtil.getMontageDate(
                DateUtil.afterDateByType(applyPowerDTO.getBeginDate(),Constants.ZERO,solutions.getAddValidDays()),
                1
        );
        applyPowerVO.setDelStartDate(delStartDate);
        //加保生效日期大于 保单结束日期 则不可以进行减保
        if(delStartDate.getTime()>=endTime.getTime()){
            applyPowerVO.setDelTrue(Constants.ONE);
        }else{
            applyPowerVO.setDelTrue(Constants.ZERO);
        }
        return applyPowerVO;
    }
}