k94314517
2025-05-20 e567a81f9dd15c15981c25576cc83df6331ea2b5
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -35,6 +35,8 @@
    public static final int TWO = 2 ;
    public static final int
            THREE = 3 ;
    public static final int FIVE = 5 ;
    public static final int SIX = 6 ;
    public static final int SEVEN = 7 ;
    public static final String ACCESS_ID="ACCESS_ID";
    public static final String BUCKETNAME = "BUCKETNAME";
@@ -54,15 +56,16 @@
    public static final String WX_MIN_APPID = "WX_MIN_APPID";
    public static final String WX_MIN_SECRET = "WX_MIN_SECRET";
    public static final String PLAT_COMPANY_NAME ="PLAT_COMPANY_NAME";
    public static final String PLAT_CREDIT_CODE ="PLAT_CREDIT_CODE";
    public static final String PLAT_EMAIL ="PLAT_EMAIL";
    public static final String SYSTEM ="SYSTEM";
    public static final String PROTOCOL ="PROTOCOL";
    public static final String PRIVACY ="PRIVACY";
    public static final String USE ="USE";
    public static final String GOODS_IMG_DIR ="GOODS_IMG_DIR";
    public static final String CREDIT_CODE_REGEX = "[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}";
    public static final String  ROOT_PATH="ROOT_PATH";//本地文件上传地址配置
    public static final String  FILE_DIR="FILE_DIR";//本地文件访问地址配置
@@ -93,11 +96,47 @@
    public static final String SMS_COMNAME = "SMS_COMNAME";
    public static final String TAXES_FILE = "TAXES_FILE";
    public static final String APPLY_FILE ="APPLY_FILE" ;
    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 SETTLE_FILE ="SETTLE_FILE" ;
    public static final String DU_FILE ="DU_FILE" ;
    public static final String SIGN_DONE_NOTIFY_URL = "SIGN_DONE_NOTIFY_URL";
    public static final int FOUR = 4;
    public static final String COMPANY_PHONE_AUTH ="COMPANY_PHONE_AUTH" ;
    /*RISK_TIMES_OPEN   风险提醒设置-多次出现提醒是否开启:0=否;1=是;
    RISK_TIMES_REPORT_TIMES   风险提醒设置-多次出现报案次数提醒
    RISK_REPEAT_REPORT_OPEN   风险提醒设置-重复报案是否开启:0=否;1=是;
    RISK_REPEAT_REPORT_TIME_UNIT   风险提醒设置-重复报案时间单位:0分钟 1小时 2天
    RISK_REPEAT_REPORT_TIME   风险提醒设置-重复报案时间
    RISK_CLAIM_TIMES_OPEN   风险提醒设置-索赔次数过多是否开启:0=否;1=是;
    RISK_CLAIM_TIMES   风险提醒设置-索赔次数
    RISK_NEW_MEMBER_OPEN   风险提醒设置-新员工出险提醒是否开启:0=否;1=是;
    RISK_NEW_MEMBER_TIME_UNIT   风险提醒设置-新员工出险提醒时间单位:0分钟 1小时 2天
    RISK_NEW_MEMBER_TIME   风险提醒设置-新员工出险提醒时间
    RISK_SENSITIVE_WORDS_OPEN   风险提醒设置-敏感词提醒是否开启:0=否;1=是;
    RISK_SENSITIVE_WORDS   风险提醒设置-多次出现报案次数提醒*/
    public static final String RISK_TIMES_OPEN ="RISK_TIMES_OPEN" ;
    public static final String RISK_TIMES_REPORT_TIMES ="RISK_TIMES_REPORT_TIMES" ;
    public static final String RISK_REPEAT_REPORT_OPEN ="RISK_REPEAT_REPORT_OPEN" ;
    public static final String RISK_REPEAT_REPORT_TIME_UNIT ="RISK_REPEAT_REPORT_TIME_UNIT" ;
    public static final String RISK_REPEAT_REPORT_TIME ="RISK_REPEAT_REPORT_TIME" ;
    public static final String RISK_CLAIM_TIMES_OPEN ="RISK_CLAIM_TIMES_OPEN" ;
    public static final String RISK_CLAIM_TIMES ="RISK_CLAIM_TIMES" ;
    public static final String RISK_NEW_MEMBER_OPEN ="RISK_NEW_MEMBER_OPEN" ;
    public static final String RISK_NEW_MEMBER_TIME_UNIT ="RISK_NEW_MEMBER_TIME_UNIT" ;
    public static final String RISK_NEW_MEMBER_TIME ="RISK_NEW_MEMBER_TIME" ;
    public static final String RISK_SENSITIVE_WORDS_OPEN ="RISK_SENSITIVE_WORDS_OPEN" ;
    public static final String RISK_SENSITIVE_WORDS ="RISK_SENSITIVE_WORDS" ;
    /**
@@ -121,6 +160,14 @@
            }
        }
    }
    public interface DATAPERMISSION_TYPE{
        public static final  int all = 0;
        public static final  int departAndChild = 1;
        public static final  int departAndLeaf = 2;
        public static final  int depart = 3;
        public static final  int custom = 4;
        public static final  int self = -1;
    }
    /**
@@ -711,6 +758,18 @@
        WTB_CA_DONE_PDF(23, "委托加减保/换厂业务 - 合并单最终保单", "委托加减保/换厂业务 - 合并单最终保单"),
        WTB_CONFIRMATION_LATTER(24, "委托保 - 投保方案确认书", "委托保 - 投保方案确认书"),
        WTB_CA_TBD_PDF(25, "委托加减保/换厂业务 -申请单(商户签署后PDF)", "委托加减保/换厂业务 -申请单(商户签署后PDF)"),
        CONTRACT_PDF(26, "合同附件", "合同附件"),
        CONTRACT_FIRST_PDF(27, "合同签署附件", "合同签署附件"),
        CONTRACT_DONE_PDF(28, "合同签署附件", "合同签署附件"),
        COMPANY_SOLUTION_SIGN_PDF(29, "企业签署后方案确认书", "企业签署后方案确认书"),
        COMPANY_USER_APPLY(30, "企业申请集团用户附件", "企业申请集团用户附件"),
        LP_STAMP_FILE(31, "保险公司理赔盖章文件", "保险公司理赔盖章文件"),
        LP_FILE(32, "保险公司上传理赔材料一览表", "保险公司上传理赔材料一览表"),
        LP_OTHER_FILE(33, "理赔其他材料", "理赔其他材料"),
        LP_PAY_FILE(34, "打款凭证", "打款凭证"),
        ;
        // 成员变量
        private String name;
@@ -726,7 +785,7 @@
        // 普通方法
        public static String getName(int index) {
            for (ProjectRecord c : ProjectRecord.values()) {
            for (MultiFile c : MultiFile.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
@@ -736,7 +795,7 @@
        // 普通方法
        public static String getInfo(int index) {
            for (ProjectRecord c : ProjectRecord.values()) {
            for (MultiFile c : MultiFile.values()) {
                if (c.getKey() == index) {
                    return c.noteinfo;
                }
@@ -827,10 +886,8 @@
    }
    public static void main(String[] args) {
        System.out.println(IdcardUtil.isValidCard("342623199201150101"));
        System.out.println(IdcardUtil.isValidCard("342623199201150102"));
        System.out.println(IdcardUtil.isValidCard("342623199201150103"));
        System.out.println(IdcardUtil.isValidCard("342623199201150104"));
         System.out.println(BigDecimal.valueOf(3.45678).setScale(2,BigDecimal.ROUND_HALF_UP));
        System.out.println(BigDecimal.valueOf(3.45678).setScale(2,BigDecimal.ROUND_DOWN));
//        System.out.println(IdcardUtil.isValidCard("340621199310134818"));
//        System.out.println(IdcardUtil.isValidCard("341621199310134818"));
@@ -1027,7 +1084,7 @@
    public  enum ApplyLogType {
        UPLOAD(0, "提交投保","提交意见:${param}",0),
        PLATFORM_RETURN(1, "退回投保","提交意见:${param}",0),
        PLATFORM_RETURN(1, "退回申请","提交意见:${param}",0),
        WAIT_SIGNATURE(2, "上传投保单","提交意见:${param}",0),
        SIGNATURE(3, "企业签章","",0),
        FAIL_RETURN(4, "保单出具失败退回","提交意见:${param}",0),
@@ -1039,14 +1096,14 @@
        COMPANY_EDIT(10, "保单修改","提交意见:${param1}\n${param2}",0),
        PLATFORM_CHECK_PASS(11, "投保审核通过","提交意见:${param}",0),
        CA_PLATFORM_CHECK_PASS_NO(12, "退回投保","提交意见:${param}",1),
        CA_PLATFORM_CHECK_PASS_NO(12, "退回申请","提交意见:${param}",1),
        CA_PLATFORM_AGREE_BACK_APPLY(13, "同意退回申请","提交意见:${param}",1),
        CA_PLATFORM_APPROVE(14, "批单完成","保险生效起期:${param1}变更为${param2}",1),
        CA_PLATFORM_CHECK_SIGNATURE(15, "企业签章","",1),
        CA_COMPANY_EDIT(16, "批单修改","提交意见:${param1}\n${param2}",1),
        CA_COMPANY_COMMIT(17, "提交投保","",1),
        CA_COMPANY_BACK_APPLY(18, "申请退回","提交意见:${param}",1),
        CA_COMPANY_CLOSE(19, "关闭订单","",1),
        CA_COMPANY_CLOSE(19, "关闭申请","",1),
        CA_PALTFORM_REFUSE_APPLY(20, "驳回退回申请","",1),
        CA_PALTFORM_EDIT_PIDAN(21, "修改批单","修改原因:${param}",1),
        CA_JIAJIAN_APPLY_SIGN(23, "加减保申请企业签章","",1),
@@ -1071,6 +1128,7 @@
        IA_HBD_UPLOAD_INSURANCE(35, "投保完成","保险生效起期:${param1}变更为${param2}",3),
        IA_HBD_CLOSE(36, "退回申请","原因:${param}",3),
        IA_HBD_UPLOAD_BXD(41, "上传保险单","",3),
        IA_HBD_REEXAMINE_PASS(42, "复审通过","",3),
@@ -1170,6 +1228,7 @@
        UPLOAD_INSURANCE_POLICY(2, "待出单","",0),
        FINISH(3, "保障中","",0),
        CLOSE(4, "已退回","",0),
        RETRIAL(5, "待审核","",0),
        ;
        // 成员变量
        private String name;
@@ -1457,7 +1516,7 @@
        CLOSE(9, "订单关闭","",6),
        PLATFORM_CHECK_PASS(10,"平台投保审核通过","提交意见:${param}",0),
        COMPANY_BACK_APPLY_PASS(11, "企业申请退回(平台投保审核通过)","提交意见:${param}",5),
        REEXAMINE(12, "商户或平台复审","复审意见:${param}",0),
        WTB_UPLOAD(20, "提交投保","",28),
@@ -1466,7 +1525,7 @@
        WTB_BUSINESS_CHECK_PASS(23,"商户投保审核通过","提交意见:${param}",23),
        WTB_RETURN(24, "已退回","提交意见:${param}",24),
        WTB_CLOSED(25, "已关闭","提交意见:${param}",25),
        WTB_TOUBAOING(26, "投保中","提交意见:${param}",26),
        WTB_TOUBAOING(26, "待出单","提交意见:${param}",26),
        WTB_DONE(27, "保障中","提交意见:${param}",27),
        ;
@@ -1563,7 +1622,10 @@
        CHANGE_FACTORY(2, "员工换厂申请","保险方案"),
        DISPATCH_UNIT(3, "派遣单位申请","派遣单位"),
        TAXES(4, "开票申请","开票金额"),
        SETTLE_CLAIMS(5, "报案理赔","报案人")
        SETTLE_CLAIMS(5, "报案理赔","报案人"),
        CONTRACT(6, "合同签署","合同签署"),
        SOLUTIONS(7, "方案签署","方案签署"),
        COMPANY_USER_APPLY(8, "集团申请","集团申请"),
        ;
        // 成员变量
        private int key;
@@ -1618,18 +1680,19 @@
    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, "","","","","",""),
        SIX(6, "","","","","","","",""),
        //商户端 委托保 - 投保待审核 加减保 换厂 待审核
        SEVEN(7, "待审核","待审核","待审核","","",""),
        EIGHT(8, "","","","","",""),
        NINE(9, "","","","","",""),
        SEVEN(7, "待审核","待审核","待审核","","","","",""),
        //待复审
        EIGHT(8, "待审核","","","","","","",""),
        NINE(9, "","","","","","","",""),
        ;
        // 成员变量
@@ -1640,11 +1703,13 @@
        private String dispatchUnitDetail;
        private String taxesDetail;
        private String settleClaimsDetail;
        private String contract;
        private String solutions;
        // 构造方法
        NoticeType(int status, String insuranceApplyDetail,String applyChangeDetail
                , String changeFactoryDetail,String dispatchUnitDetail
                , String taxesDetail,String settleClaimsDetail) {
                , String taxesDetail,String settleClaimsDetail,String contract,String solutions) {
            this.status = status;
            this.insuranceApplyDetail = insuranceApplyDetail;
            this.applyChangeDetail = applyChangeDetail;
@@ -1652,6 +1717,8 @@
            this.dispatchUnitDetail = dispatchUnitDetail;
            this.taxesDetail = taxesDetail;
            this.settleClaimsDetail = settleClaimsDetail;
            this.contract = contract;
            this.solutions = solutions;
        }
        // 普通方法
@@ -1670,6 +1737,10 @@
                        return c.getTaxesDetail();
                    }else if(type == NoticeObjectType.SETTLE_CLAIMS.getKey()){
                        return c.getSettleClaimsDetail();
                    }else if(type == NoticeObjectType.CONTRACT.getKey()){
                        return c.getContract();
                    }else if(type == NoticeObjectType.SOLUTIONS.getKey()){
                        return c.getContract();
                    }
                }
            }
@@ -1733,6 +1804,13 @@
            this.settleClaimsDetail = settleClaimsDetail;
        }
        public String getContract() {
            return contract;
        }
        public void setContract(String info) {
            this.contract = contract;
        }
    }
@@ -1807,18 +1885,78 @@
    }
    public  enum SettleClaimsStatus {
        WAIT_ACCEPTANCE(0, "待受理"),
        RETURN_ACCEPTANCE(1, "退回受理"),
        DEAL_ING(2, "受理中"),
        CONFIRM_INFORMATION(3, "确认资料"),
        FINISH_ACCEPTANCE(4, "完成受理"),
    public enum CONTRACT_STATUS{
        WAIT(0, "待签署"),
        OUT_SIGN(1, "我方已签署"),
        COMPANY_SIGN(2, "企业/商户已签署"),
        FINISH(3, "已完成"),
        CANCEL(4, "已取消"),
        CLOSE(5, "已关闭"),
        ;
        // 成员变量
        private String name;
        private int key;
        // 构造方法
        CONTRACT_STATUS(int key, String name) {
            this.name = name;
            this.key = key;
        }
        // 普通方法
        public static String getName(int index) {
            for (CONTRACT_STATUS c : CONTRACT_STATUS.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            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  enum SettleClaimsStatus {
        //状态 0暂存中 1已报案 2待立案 3已立案 4立案退回 5待受理 6拒绝受理 7商议待审批
        // 8商议审批拒绝 9已受理 10待核赔  11已核赔 12已确认金额 13已结案 14已撤案
        WAIT_ACCEPTANCE(0, "暂存中"),
        RETURN_ACCEPTANCE(1, "已报案"),
        DEAL_ING(2, "待立案 (弃用)"),
        CONFIRM_INFORMATION(3, "已立案"),
        FINISH_ACCEPTANCE(4, "立案退回"),
        WAIT_DEAL(5, "待受理"),
        REJECT_DEAL(6, "拒绝受理"),
        WAIT_DISCUSS_AUDIT(7, "待商议审批"),
        WAIT_DISCUSS_REJECT(8, "商议审批拒绝"),
        ACCEPTANCE(9, "已受理"),//待理算
        WAIT_AUDIT_COMPENSATION(10, "待核赔"),
        COMPENSATION(11, "已核赔"),
        CONFIRM_FEE(12, "已确认金额"),
        CLOSE_CASE(13, "已结案"),
        RETURN(14, "已撤案"),
        ;
        // 成员变量
        private String name;//业务描述
        private int key;//业务状态
        private int companyParentKey;//企业主流程
        private int platformParentKey;//平台主流程
        // 构造方法
        SettleClaimsStatus(int key, String name) {
@@ -1858,15 +1996,28 @@
        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_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, "受理-确认案件类型","已确认案件类型"),
        ;
        // 成员变量
        private String name;
@@ -2300,18 +2451,18 @@
        }else{
            if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){
                //天为批改单位
                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP);
                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) {
                //半月为批改单位
                BigDecimal cycle = new BigDecimal(days).divide(insureCycleUnit.getDays(),0,RoundingMode.CEILING);
                //根据投保周期 定义的 每个周期 = X个 半月周期 进行计算
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数
                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) {
                //月份为批改单位
                BigDecimal cycle = new BigDecimal(DateUtil.getDifferenceMonths(reduceEndTime,reduceStartTime));
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 2
                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) {
                //季度为批改单位
@@ -2320,7 +2471,7 @@
                //转换为 总季度
                cycle = cycle.divide(new BigDecimal(3),0,RoundingMode.CEILING);
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 6
                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) {
                //半年为批改单位
                //查询产生费用总月份
@@ -2328,7 +2479,7 @@
                //转换为 半年
                cycle = cycle.divide(new BigDecimal(6),0,RoundingMode.CEILING);
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 6
                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"方案配置错误");
            }
@@ -2353,18 +2504,18 @@
        }else{
            if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){
                //天为批改单位
                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP);
                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) {
                //半月为批改单位
                BigDecimal cycle = new BigDecimal(days).divide(insureCycleUnit.getDays(),0,RoundingMode.CEILING);
                //根据投保周期 定义的 每个周期 = X个 半月周期 进行计算
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数
                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) {
                //月份为批改单位
                BigDecimal cycle = new BigDecimal(DateUtil.getDifferenceMonths(newEndTime,newStartTime));
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 2
                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) {
                //季度为批改单位
@@ -2373,7 +2524,7 @@
                //转换为 总季度
                cycle = cycle.divide(new BigDecimal(3),0,RoundingMode.CEILING);
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 6
                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) {
                //半年为批改单位
                //查询产生费用总月份
@@ -2381,7 +2532,7 @@
                //转换为 半年
                cycle = cycle.divide(new BigDecimal(6),0,RoundingMode.CEILING);
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 6
                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"方案配置错误");
            }
@@ -2409,18 +2560,18 @@
        }else{
            if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){
                //天为批改单位
                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP);
                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) {
                //半月为批改单位
                BigDecimal cycle = new BigDecimal(days).divide(insureCycleUnit.getDays(),0,RoundingMode.CEILING);
                //根据投保周期 定义的 每个周期 = X个 半月周期 进行计算
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数
                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) {
                //月份为批改单位
                BigDecimal cycle = new BigDecimal(DateUtil.getDifferenceMonths(new Date(),startTime));
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 2
                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) {
                //季度为批改单位
@@ -2429,7 +2580,7 @@
                //转换为 总季度
                cycle = cycle.divide(new BigDecimal(3),0,RoundingMode.CEILING);
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 6
                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) {
                //半年为批改单位
                //查询产生费用总月份
@@ -2437,7 +2588,7 @@
                //转换为 半年
                cycle = cycle.divide(new BigDecimal(6),0,RoundingMode.CEILING);
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 6
                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"方案配置错误");
            }
@@ -2453,27 +2604,106 @@
        }else{
            if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){
                //天为批改单位
                return fee.divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP);
                return fee.divide(new BigDecimal(countDays),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) {
                //根据投保周期 定义的 每个周期 = X个 半月周期 进行计算
                // 总金额 / 投保周期定义的 半月周期数
                return fee.divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) {
                // 总金额 / 投保周期定义的 半月周期数 * 2
                return fee.multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) {
                //季度为批改单位
                // 总金额  / 投保周期定义的 半月周期数 * 6
                return fee.multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) {
                //半年为批改单位
                // 总金额 * 产生费用的周期 / 投保周期定义的 半月周期数 * 6
                return fee.multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
                return fee.multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
            }else {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"方案配置错误");
            }
        }
    }
    public static BigDecimal getTwoPoint(BigDecimal bigDecimal){
        if(Objects.isNull(bigDecimal)){
            return BigDecimal.ZERO;
        }
        if(BigDecimal.ZERO.compareTo(bigDecimal) == 0){
            return BigDecimal.ZERO;
        }
        return bigDecimal.setScale(2,BigDecimal.ROUND_DOWN);
    }
    /**
     * 赔付项
     */
    public  enum compensation{
        YL_COMPENSATION(0, "医疗理赔",1),
        WG_COMPENSATION(1, "误工理赔",1),
        SC_COMPENSATION(2, "伤残理赔",1),
        SW_COMPENSATION(3, "死亡理赔",1),
        HSF_FEE(4, "伙食费",2),
        XY_FEE(5, "续医费",2),
        YY_FEE(6, "营养费",2),
        HL_FEE(7, "护理费",2),
        ZDJB_FEE(8, "重大疾病赔偿金",2),
        TB_FEE(9, "特别费用",2),
        ZS_FEE(10, "住宿费",2),
        JT_FEE(11, "津贴",2),
        CJ_FEE(12, "残疾赔偿金",2),
        BFYR_FEE(13, "被抚养人生活费",2),
        SCF_FEE(14, "丧葬费",2),
        JSFXJ_FEE(15, "精神抚恤金",2),
        JD_FEE(16, "鉴定费",2),
        SS_FEE(17, "诉讼费",2),
        LS_FEE(18, "律师费",2),
        TRAFFIC_FEE(19, "交通费",2),
        CJQJ_FEE(20, "残疾器具费",2),
        QT_FEE(21, "其他费用",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;
        }
    }
}