|  |  | 
 |  |  | package com.doumee.core.utils; | 
 |  |  |  | 
 |  |  | import com.doumee.core.constants.ResponseStatus; | 
 |  |  | import com.doumee.core.exception.BusinessException; | 
 |  |  | import com.doumee.dao.business.model.Solutions; | 
 |  |  | import org.apache.commons.collections4.CollectionUtils; | 
 |  |  | import org.apache.commons.lang3.StringUtils; | 
 |  |  |  | 
 |  |  | import java.io.File; | 
 |  |  | import java.io.FileOutputStream; | 
 |  |  | import java.io.InputStream; | 
 |  |  | import java.io.OutputStream; | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.net.URL; | 
 |  |  | import java.net.URLDecoder; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.regex.Matcher; | 
 |  |  | import java.util.regex.Pattern; | 
 |  |  |  | 
 |  |  | 
 |  |  |     public static final String COMPANY_FILE ="COMPANY_FILE" ; | 
 |  |  |     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 SETTLE_FILE ="SETTLE_FILE" ; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 企业数据来源 0平台注册 1后台导入 | 
 |  |  | 
 |  |  | //        d = d.setScale(2, BigDecimal.ROUND_HALF_UP); | 
 |  |  |         return  d; | 
 |  |  |     } | 
 |  |  |     public static BigDecimal formatBigdecimal2Float(BigDecimal d) { | 
 |  |  |         if (d == null) { | 
 |  |  |             d = new BigDecimal(0.0); | 
 |  |  |         } | 
 |  |  |         //保留两位小数且四舍五入 | 
 |  |  |         d = d.setScale(2, BigDecimal.ROUND_HALF_UP); | 
 |  |  |         return  d; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static BigDecimal formatBigdecimal4Float(BigDecimal d) { | 
 |  |  |         if (d == null) { | 
 |  |  |             d = new BigDecimal(0.0); | 
 |  |  | 
 |  |  |         BD_APPLY_PDF(8, "保单申请表PDF ", "保单申请表PDF "), | 
 |  |  |         BD_SIGNED_PDF(9, "签署后保单申请表PDF", "签署后保单申请表PDF"), | 
 |  |  |         COM_SING_IMG(10, "企业印章", "企业印章"), | 
 |  |  |         BD_DONE_PDF(10, "最终报单", "最终报单"), | 
 |  |  |         BD_DONE_PDF(11, "最终报单", "最终报单"), | 
 |  |  |  | 
 |  |  |         CA_PD_PDF(12, "最终报单", "最终报单"), | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         ; | 
 |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public  enum ApplyLogType { | 
 |  |  |         UPLOAD(0, "提交投保申请"), | 
 |  |  |         PLATFORM_RETURN(1, "平台退回保单"), | 
 |  |  |         WAIT_SIGNATURE(2, "已上传代签申请表待企业签章"), | 
 |  |  |         SIGNATURE(3, "已签章待上传保险单"), | 
 |  |  |         FAIL_RETURN(4, "保单出具失败退回"), | 
 |  |  |         UPLOAD_INSURANCE(5, "已上传保单"), | 
 |  |  |         COMPANY_APPLY_RETURN(6, "企业申请退回"), | 
 |  |  |         COMPANY_APPLY_CLOSE(7, "企业关闭申请"), | 
 |  |  |         PLATFORM_AGREE(8, "平台同意企业退回申请"), | 
 |  |  |         PLATFORM_UN_AGREE(9, "平台拒绝企业退回申请"), | 
 |  |  |         UPLOAD(0, "提交投保","提交意见:${param}"), | 
 |  |  |         PLATFORM_RETURN(1, "退回投保","提交意见:${param}"), | 
 |  |  |         WAIT_SIGNATURE(2, "上传投保单","提交意见:${param}"), | 
 |  |  |         SIGNATURE(3, "企业签章",""), | 
 |  |  |         FAIL_RETURN(4, "保单出具失败退回","提交意见:${param}"), | 
 |  |  |         UPLOAD_INSURANCE(5, "保单完成","保险生效起期:${param1}变更为${param2}"), | 
 |  |  |         COMPANY_APPLY_RETURN(6, "申请退回","提交意见:${param}"), | 
 |  |  |         COMPANY_APPLY_CLOSE(7, "关闭申请",""), | 
 |  |  |         PLATFORM_AGREE_BACK(8, "同意退回申请",""), | 
 |  |  |         PLATFORM_UN_AGREE_BACK(9, "驳回退回申请","提交意见:${param}"), | 
 |  |  |         COMPANY_EDIT(10, "保单修改","提交意见:${param1}\n${param2}"), | 
 |  |  |         PLATFORM_CHECK_PASS(11, "投保审核通过",""), | 
 |  |  |         CA_PLATFORM_CHECK_PASS_NO(12, "退回投保","提交意见:${param}"), | 
 |  |  |         CA_PLATFORM_AGREE_BACK_APPLY(13, "同意退回申请","提交意见:${param}"), | 
 |  |  |         CA_PLATFORM_APPROVE(14, "批单完成","保险生效起期:${param1}变更为${param2}"), | 
 |  |  |         CA_PLATFORM_CHECK_SIGNATURE(15, "企业签章",""), | 
 |  |  |         CA_COMPANY_EDIT(16, "批单修改","提交意见:${param1}\n${param2}"), | 
 |  |  |         CA_COMPANY_COMMIT(17, "提交投保","提交意见:${param}"), | 
 |  |  |         CA_COMPANY_BACK_APPLY(18, "申请退回","提交意见:${param}"), | 
 |  |  |         CA_COMPANY_CLOSE(19, "关闭订单",""), | 
 |  |  |         CA_PALTFORM_REFUSE_APPLY(20, "驳回退回申请",""), | 
 |  |  |         CA_PALTFORM_EDIT_PIDAN(21, "修改批单","修改原因:${param}"), | 
 |  |  |         PALTFORM_EDIT_BD(22, "修改保单","修改原因:${param}"), | 
 |  |  |         ; | 
 |  |  |         // 成员变量 | 
 |  |  |         private String name; | 
 |  |  |         private String info; | 
 |  |  |         private int key; | 
 |  |  |  | 
 |  |  |         // 构造方法 | 
 |  |  |         ApplyLogType(int key, String name) { | 
 |  |  |         ApplyLogType(int key, String name,String info) { | 
 |  |  |             this.name = name; | 
 |  |  |             this.info = info; | 
 |  |  |             this.key = key; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 普通方法 | 
 |  |  |         public static String getName(int index) { | 
 |  |  |             for (ApplyLogType c : ApplyLogType.values()) { | 
 |  |  |                 if (c.getKey() == index) { | 
 |  |  |                     return c.name; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |         public static String getInfo(int index) { | 
 |  |  |             for (ApplyLogType c : ApplyLogType.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  enum InsuranceApplyStatus { | 
 |  |  |         UPLOAD(0, "提交投保",""), | 
 |  |  |         PLATFORM_RETURN(1, "审核不通过","提交意见:${param}"), | 
 |  |  |         WAIT_SIGNATURE(2, "已上传代签申请表待企业签章",""), | 
 |  |  |         SIGNATURE(3, "已签章待上传保险单",""), | 
 |  |  |         FAIL_RETURN(4, "保单出具失败退回",""), | 
 |  |  |         UPLOAD_INSURANCE(5, "保单完成","保险生效起期:${param}变更为${param1}"), | 
 |  |  |         COMPANY_BACK_APPLY_UPLOAD(6, "企业申请退回(提交投保)","提交意见:${param}"), | 
 |  |  |         COMPANY_BACK_APPLY_WAIT_SIGNATURE(7, "企业申请退回(待签章)","提交意见:${param}"), | 
 |  |  |         COMPANY_BACK_APPLY_SIGNATURE(8, "企业申请退回(已签章)","提交意见:${param}"), | 
 |  |  |         CLOSE(9, "订单关闭",""), | 
 |  |  |         PLATFORM_CHECK_PASS(10,"平台投保审核通过",""), | 
 |  |  |         ; | 
 |  |  |         // 成员变量 | 
 |  |  |         private String name; | 
 |  |  |         private String info; | 
 |  |  |         private int key; | 
 |  |  |  | 
 |  |  |         // 构造方法 | 
 |  |  |         InsuranceApplyStatus(int key, String name,String info) { | 
 |  |  |             this.name = name; | 
 |  |  |             this.key = key; | 
 |  |  |             this.info = info; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 普通方法 | 
 |  |  |         public static String getName(int index) { | 
 |  |  |             for (InsuranceApplyStatus c : InsuranceApplyStatus.values()) { | 
 |  |  |                 if (c.getKey() == index) { | 
 |  |  |                     return c.name; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |         public static String getInfo(int index) { | 
 |  |  |             for (InsuranceApplyStatus c : InsuranceApplyStatus.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 static BigDecimal countDetailFee(Solutions solutions,Date startDate, Date endDate){ | 
 |  |  |         //查询保险实际周期 | 
 |  |  |         Integer cycle = DateUtil.calculateBetween(endDate,startDate,solutions.getTimeUnit()); | 
 |  |  |         if(cycle==-1){ | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"日期信息错误!"); | 
 |  |  |         } | 
 |  |  |         return solutions.getPrice().multiply(new BigDecimal(cycle)); | 
 |  |  |     } | 
 |  |  |     public static BigDecimal countDetailFee(int timeUnit ,BigDecimal price,Date startDate, Date endDate){ | 
 |  |  |         //查询保险实际周期 | 
 |  |  |         Integer cycle = DateUtil.calculateBetween(endDate,startDate,timeUnit); | 
 |  |  |         if(cycle==-1){ | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"日期信息错误!"); | 
 |  |  |         } | 
 |  |  |         return Constants.formatBigdecimal(price).multiply(new BigDecimal(cycle)); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public  enum ApplyChangeStatus { | 
 |  |  |         UPLOAD(0, "提交加减保/换厂申请"), | 
 |  |  |         SIGNATURE(1, "已签章"), | 
 |  |  |         APPROVE(2, "已上传审批"), | 
 |  |  |         RETURN_APPLY_UPLOAD(3, "发起退回申请(待审核)"), | 
 |  |  |         RETURN_APPLY_SIGNATURE(4, "发起退回申请(已签章)"), | 
 |  |  |         PLATFORM_AGREE(5, "平台同意(已退回)"), | 
 |  |  |         CLOSE(6, "已关闭"), | 
 |  |  |         PALTFORM_CHECK_PASS(7, "审核通过"), | 
 |  |  |         PALTFORM_CHECK_PASS_NO(8, "审核不通过"), | 
 |  |  |         ; | 
 |  |  |         // 成员变量 | 
 |  |  |         private String name; | 
 |  |  |         private int key; | 
 |  |  |  | 
 |  |  |         // 构造方法 | 
 |  |  |         ApplyChangeStatus(int key, String name) { | 
 |  |  |             this.name = name; | 
 |  |  |             this.key = key; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 普通方法 | 
 |  |  |         public static String getName(int index) { | 
 |  |  |             for (InsuranceApplyStatus c : InsuranceApplyStatus.values()) { | 
 |  |  |                 if (c.getKey() == index) { | 
 |  |  |                     return c.name; | 
 |  |  |                 } | 
 |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public  enum InsuranceApplyStatus { | 
 |  |  |         UPLOAD(0, "提交投保申请"), | 
 |  |  |         PLATFORM_RETURN(1, "平台退回保单"), | 
 |  |  |         WAIT_SIGNATURE(2, "已上传代签申请表待企业签章"), | 
 |  |  |         SIGNATURE(3, "已签章待上传保险单"), | 
 |  |  |         FAIL_RETURN(4, "保单出具失败退回"), | 
 |  |  |         UPLOAD_INSURANCE(5, "已上传保单"), | 
 |  |  |         COMPANY_APPLY_RETURN(6, "企业申请退回"), | 
 |  |  |         PLATFORM_AGREE(7, "平台同意退回"), | 
 |  |  |         CLOSE(8, "订单关闭"), | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public  enum SettleClaimsStatus { | 
 |  |  |         WAIT_ACCEPTANCE(0, "待受理"), | 
 |  |  |         RETURN_ACCEPTANCE(1, "退回受理"), | 
 |  |  |         DEAL_ING(2, "受理中"), | 
 |  |  |         CONFIRM_INFORMATION(3, "确认资料"), | 
 |  |  |         FINISH_ACCEPTANCE(4, "完成受理"), | 
 |  |  |         ; | 
 |  |  |         // 成员变量 | 
 |  |  |         private String name; | 
 |  |  |         private int key; | 
 |  |  |  | 
 |  |  |         // 构造方法 | 
 |  |  |         InsuranceApplyStatus(int key, String name) { | 
 |  |  |         SettleClaimsStatus(int key, String name) { | 
 |  |  |             this.name = name; | 
 |  |  |             this.key = key; | 
 |  |  |         } | 
 |  |  |         // 普通方法 | 
 |  |  |         public static String getName(int index) { | 
 |  |  |             for (SettleClaimsStatus c : SettleClaimsStatus.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 SettleClaimsLogType { | 
 |  |  |         UPLOAD(0, "提交报案","提交意见:${param}"), | 
 |  |  |         PLATFORM_RETURN(1, "平台退回","提交意见:${param}"), | 
 |  |  |         PLATFORM_CONFIRM_INFORMATION(2, "平台确认资料",""), | 
 |  |  |         PLATFORM_FINISH(3, "平台完成受理","提交意见:${param}"), | 
 |  |  |         UPDATE_DATA(4, "修改信息","提交意见:${param}"), | 
 |  |  |         SUPPLEMENT(5, "补充说明","提交意见:${param}"), | 
 |  |  |         PLATFORM_LP_DEAL(6, "平台理赔处理","提交意见:${param}"), | 
 |  |  |         PLATFORM_REMARK(7, "平台备注标签",""), | 
 |  |  |         PLATFORM_ADDCODE(8, "平台添加报案号",""), | 
 |  |  |         PLATFORM_UN_AGREE_BACK(9, "企业下载资料",""), | 
 |  |  |         PLATFORM_DOWNLOAD(10, "平台下载资料",""), | 
 |  |  |         PLATFORM_CHECK_PASS(11, "平台上传资料",""), | 
 |  |  |         ; | 
 |  |  |         // 成员变量 | 
 |  |  |         private String name; | 
 |  |  |         private String info; | 
 |  |  |         private int key; | 
 |  |  |  | 
 |  |  |         // 构造方法 | 
 |  |  |         SettleClaimsLogType(int key, String name,String info) { | 
 |  |  |             this.name = name; | 
 |  |  |             this.info = info; | 
 |  |  |             this.key = key; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 普通方法 | 
 |  |  |         public static String getName(int index) { | 
 |  |  |             for (ApplyLogType c : ApplyLogType.values()) { | 
 |  |  |                 if (c.getKey() == index) { | 
 |  |  |                     return c.name; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |         public static String getInfo(int index) { | 
 |  |  |             for (ApplyLogType c : ApplyLogType.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  enum ApplyChangeLogStatus { | 
 |  |  |         UPLOAD(0, "发起申请"), | 
 |  |  |         RETURN_APPLY(3, "发起退回申请"), | 
 |  |  |         PLATFORM_AGREE(4, "平台审批通过"), | 
 |  |  |         PLATFORM_UN_AGREE(0, "审批驳回"), | 
 |  |  |         CLOSE(5, "关闭"), | 
 |  |  |         ; | 
 |  |  |         // 成员变量 | 
 |  |  |         private String name; | 
 |  |  |         private int key; | 
 |  |  |  | 
 |  |  |         // 构造方法 | 
 |  |  |         ApplyChangeLogStatus(int key, String name) { | 
 |  |  |             this.name = name; | 
 |  |  |             this.key = key; | 
 |  |  |         } | 
 |  |  | 
 |  |  |             this.des = des; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static File getFileByNetFile(String url,String fileName)   { | 
 |  |  |         //对本地文件命名 | 
 |  |  |         File file = null; | 
 |  |  |         try { | 
 |  |  |             URL urlfile; | 
 |  |  |             InputStream inStream = null; | 
 |  |  |             OutputStream os = null; | 
 |  |  |             try { | 
 |  |  |                 file = File.createTempFile("", fileName); | 
 |  |  |                 //下载 | 
 |  |  |                 urlfile = new URL(url); | 
 |  |  |                 inStream = urlfile.openStream(); | 
 |  |  |                 os = new FileOutputStream(file); | 
 |  |  |                 int bytesRead = 0; | 
 |  |  |                 byte[] buffer = new byte[8192]; | 
 |  |  |                 while ((bytesRead = inStream.read(buffer, 0, 8192)) != -1) { | 
 |  |  |                     os.write(buffer, 0, bytesRead); | 
 |  |  |                 } | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 e.printStackTrace(); | 
 |  |  |             } finally { | 
 |  |  |                 try { | 
 |  |  |                     if (null != os) { | 
 |  |  |                         os.close(); | 
 |  |  |                     } | 
 |  |  |                     if (null != inStream) { | 
 |  |  |                         inStream.close(); | 
 |  |  |                     } | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return file; | 
 |  |  |     } | 
 |  |  | } |