|  |  | 
 |  |  |     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"; | 
 |  |  | 
 |  |  |     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";//本地文件访问地址配置 | 
 |  |  | 
 |  |  |     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 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; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |         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, "企业申请集团用户附件", "企业申请集团用户附件"), | 
 |  |  |         ; | 
 |  |  |         // 成员变量 | 
 |  |  |         private String name; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     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")); | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |     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), | 
 |  |  | 
 |  |  |         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), | 
 |  |  | 
 |  |  |         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), | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |         UPLOAD_INSURANCE_POLICY(2, "待出单","",0), | 
 |  |  |         FINISH(3, "保障中","",0), | 
 |  |  |         CLOSE(4, "已退回","",0), | 
 |  |  |         RETRIAL(5, "待审核","",0), | 
 |  |  |         ; | 
 |  |  |         // 成员变量 | 
 |  |  |         private String name; | 
 |  |  | 
 |  |  |         CLOSE(9, "订单关闭","",6), | 
 |  |  |         PLATFORM_CHECK_PASS(10,"平台投保审核通过","提交意见:${param}",0), | 
 |  |  |         COMPANY_BACK_APPLY_PASS(11, "企业申请退回(平台投保审核通过)","提交意见:${param}",5), | 
 |  |  |  | 
 |  |  |         REEXAMINE(12, "商户或平台复审","复审意见:${param}",0), | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         WTB_UPLOAD(20, "提交投保","",28), | 
 |  |  | 
 |  |  |         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), | 
 |  |  |  | 
 |  |  |         ; | 
 |  |  | 
 |  |  |         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; | 
 |  |  | 
 |  |  |  | 
 |  |  |     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, "","","","","","","",""), | 
 |  |  |         ; | 
 |  |  |  | 
 |  |  |         // 成员变量 | 
 |  |  | 
 |  |  |         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; | 
 |  |  | 
 |  |  |             this.dispatchUnitDetail = dispatchUnitDetail; | 
 |  |  |             this.taxesDetail = taxesDetail; | 
 |  |  |             this.settleClaimsDetail = settleClaimsDetail; | 
 |  |  |             this.contract = contract; | 
 |  |  |             this.solutions = solutions; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 普通方法 | 
 |  |  | 
 |  |  |                         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(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |             this.settleClaimsDetail = settleClaimsDetail; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public String getContract() { | 
 |  |  |             return contract; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void setContract(String info) { | 
 |  |  |             this.contract = contract; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     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 { | 
 |  |  | 
 |  |  |         }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())) { | 
 |  |  |                 //季度为批改单位 | 
 |  |  | 
 |  |  |                 //转换为 总季度 | 
 |  |  |                 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())) { | 
 |  |  |                 //半年为批改单位 | 
 |  |  |                 //查询产生费用总月份 | 
 |  |  | 
 |  |  |                 //转换为 半年 | 
 |  |  |                 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(),"方案配置错误"); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         }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())) { | 
 |  |  |                 //季度为批改单位 | 
 |  |  | 
 |  |  |                 //转换为 总季度 | 
 |  |  |                 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())) { | 
 |  |  |                 //半年为批改单位 | 
 |  |  |                 //查询产生费用总月份 | 
 |  |  | 
 |  |  |                 //转换为 半年 | 
 |  |  |                 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(),"方案配置错误"); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         }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())) { | 
 |  |  |                 //季度为批改单位 | 
 |  |  | 
 |  |  |                 //转换为 总季度 | 
 |  |  |                 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())) { | 
 |  |  |                 //半年为批改单位 | 
 |  |  |                 //查询产生费用总月份 | 
 |  |  | 
 |  |  |                 //转换为 半年 | 
 |  |  |                 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(),"方案配置错误"); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         }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); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } |