111
k94314517
2024-02-23 274d9de5e50cc2d23b25ba271a8e66021b448916
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -1,12 +1,24 @@
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 com.doumee.dao.business.vo.CountCyclePriceVO;
import io.swagger.models.auth.In;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import javax.servlet.ServletOutputStream;
import java.io.*;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLDecoder;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -63,6 +75,13 @@
    public static final String SIGN_URL = "SIGN_URL";
    public static final String SIGN_APPKEY = "SIGN_APPKEY";
    public static final String SIGN_APPSECRET = "SIGN_APPSECRET";
    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" ;
    public static final String DU_FILE ="DU_FILE" ;
    public static final String SIGN_DONE_NOTIFY_URL = "SIGN_DONE_NOTIFY_URL";
    /**
     * 企业数据来源 0平台注册 1后台导入
@@ -71,7 +90,17 @@
        public static final  int platformRegister  = 0;
        public static final  int backstageImport  = 1;
    }
    public static String getRandom6Num( ) {
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            int digit = random.nextInt(10);
            sb.append(digit);
        }
        return sb.toString();
    }
    public static BigDecimal formatBigdecimal(BigDecimal d) {
        if (d == null) {
            d = new BigDecimal(0.0);
@@ -80,6 +109,15 @@
//        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);
@@ -112,6 +150,61 @@
        }
        return d.intValue();
    }
    public static long getAgeByIdCard(String idCard){
        int birthYear = Integer.parseInt(idCard.substring(6, 10));
        int birthMonth = Integer.parseInt(idCard.substring(10, 12));
        int birthDay = Integer.parseInt(idCard.substring(12, 14));
        LocalDate birthDate = LocalDate.of(birthYear, birthMonth, birthDay);
        LocalDate currentDate = LocalDate.now();
        long age = ChronoUnit.YEARS.between(birthDate, currentDate);
        return age;
    }
    public static CountCyclePriceVO countPriceVO(Date startDate, Solutions solutions){
        CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO();
        if(solutions.getInsureCycleUnit().equals(Constants.ZERO)){
            countCyclePriceVO.setEndDate(
                    DateUtil.getMontageDate(
                        DateUtil.afterDateByType(startDate,0,solutions.getInsureCycle()-1)
                    ,2)
            );
        }else if(solutions.getInsureCycleUnit().equals(Constants.TWO)){
            //获取当月天数
            Integer monthDays = DateUtil.monthDays(startDate);
            //获取天数后的日期
            Date afterDate = DateUtil.afterDateByType(startDate,0,monthDays);
            //赋值 每日结束时分秒
            countCyclePriceVO.setEndDate(DateUtil.getMontageDate(afterDate,3));
        }else if(solutions.getInsureCycleUnit().equals(Constants.THREE)){
            //获取X年后日期 多了一天
            Date afterDate = DateUtil.afterDateByType(startDate,2,solutions.getInsureCycle());
            //赋值 每日结束时分秒 然后减少一天
            countCyclePriceVO.setEndDate(DateUtil.getMontageDate(afterDate,3));
        }
        countCyclePriceVO.setCyclePrice(Constants.countDetailFee(solutions,countCyclePriceVO.getEndDate(),startDate));
        return countCyclePriceVO;
    }
    public static Integer getSexByIdCard(String idCard){
        Pattern pattern = Pattern.compile("\\d{17}[\\d|x]"); // 定义身份证号码格式的正则表达式
        Matcher matcher = pattern.matcher(idCard);
        Integer sex = 0;
        if (matcher.matches()) {
            int genderCode = Integer.parseInt(idCard.substring(16, 17)); // 从第17位开始提取性别编码(奇数为男性,偶数为女性)
            if ((genderCode % 2 == 1) ) {
                sex = 0;
            } else {
                sex = 1;
            }
        } else {
           sex = -1;
        }
        return sex;
    }
    /**
     * 状态 0已保存、1待审核、2审核通过、3退回修改、4审核驳回、5待服务机构确认、6服务机构拒绝、7已分配服务机构、8诊断中
     * (成功上传第一份服务资料)、9服务完成、10已分配评分专家、11已完成(专家上传评分) 12退回修改中 13 已完成退回修改
@@ -324,27 +417,25 @@
         int basedata = 2;
    }
    /**
     * 关联对象类型 0企业营业执照 1工商变更登记  2项目申报企业资料 3企业评分表 4诊断报告 5诊断服务资料 6专家评分报告 7服务机构上传服务资料 8企业资质 9企业中标通知书 10项目图片
     * 关联对象类型
     关联对象类型 0企业营业执照 1理赔报案事故视频或图片 2理赔员工关系证明材料 3理赔门诊资料 4理赔住院资料 5理赔伤残资料 6理赔赔付结案材料 7企业身份证号 8保单申请表PDF 9签署后保单申请表PDF 10企业签章 11最终报单
     */
    public  enum MultiFile{
        BUSINESS_LICENSE(0, "企业营业执照", "企业营业执照"),
        BUSINESS_CHANGE(1, "工商变更登记", "工商变更登记"),
        BUSINESS_DECLARE(2, "项目申报企业资料", "项目申报企业资料"),
        BUSINESS_SCORE(3, "企业评分表", "企业评分表"),
        BUSINESS_DIAGNOSIS(4, "诊断报告", "诊断报告"),
        BUSINESS_DIA_SERVICE(5, "诊断服务资料", "诊断服务资料"),
        BUSINESS_EXPERT(6, "专家评分报告", "专家评分报告"),
        BUSINESS_UP_SERVICE(7, "服务机构上传服务资料", "服务机构上传服务资料"),
        BUSINESS_ZZ(8, "企业资质", "企业资质"),
        BUSINESS_NOTICE(9, "企业中标通知书", "企业中标通知书"),
        BUSINESS_PROURL(10, "项目图片", "项目图片"),
        COMPANY_CHANGE_LICENSE(11,"变更企业营业执照","变更企业营业执照"),
        COMPANY_CHANGE_CHANGE(12,"变更工商变更登记","变更工商变更登记"),
        BUSINESS_HC(13, "综合服务单位核查资料", "综合服务单位核查资料"),
        BUSINESS_UP_EXTRA(14, "服务机构上传服务补充资料", "服务机构上传服务补充资料"),
        COM_BUSINESS_LICENSE(0, "企业营业执照", "企业营业执照"),
        LP_SGXC_FILE(1, "理赔报案事故视频或图片", "理赔报案事故视频或图片"),
        LP_YGGX_FILE(2, "理赔员工关系证明材料 ", "理赔员工关系证明材料 "),
        LP_MZCL_FILE(3, "理赔门诊资料 ", "理赔门诊资料"),
        LP_ZYCL_FILE(4, "理赔住院资料", "理赔住院资料"),
        LP_SCZL_FILE(5, "理赔伤残资料", "理赔伤残资料"),
        LP_JACL_FILE(6, "理赔赔付结案材料", "理赔赔付结案材料"),
        COM_IDCARD_IMG(7, "企业身份证号", "企业身份证号"),
        BD_APPLY_PDF(8, "保单申请表PDF ", "保单申请表PDF "),
        BD_SIGNED_PDF(9, "签署后保单申请表PDF", "签署后保单申请表PDF"),
        COM_SING_IMG(10, "企业印章", "企业印章"),
        BD_DONE_PDF(11, "最终报单", "最终报单"),
        CA_PD_PDF(12, "最终报单", "最终报单"),
        CA_APPLY_JIAJIAN_SIGN(13, "加减保申请签章文件", "加减保申请签章文件"),
        CA_APPLY_CHANGEUNIT_SIGN(14, "换厂申请签章文件", "换厂申请签章文件"),
        ;
@@ -546,6 +637,743 @@
    }
    public  enum DispatchUnitLogType {
        UPLOAD(0, "提交申请"),
        AUDIT_PASS(1, "派遣单位通过"),
        AUDIT_UN_PASS(2, "派遣单位不通过"),
        EDIT_UNIT(3, "修改派遣单位信息"),
        ADD_WORK_TYPE(4, "提交添加工种"),
        WORK_TYPE_AUDIT_PASS(5, "添加工种审批通过"),
        WORK_TYPE_AUDIT_UN_PASS(6, "添加工种审批不通过"),
        ;
        // 成员变量
        private String name;
        private int key;
        // 构造方法
        DispatchUnitLogType(int key, String name) {
            this.name = name;
            this.key = key;
        }
        // 普通方法
        public static String getName(int index) {
            for (DispatchUnitLogType c : DispatchUnitLogType.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 ApplyCollectStatus {
        DSP(0, "待审批"),
        DCD(1, "待出单"),
        BZZ(2, "保障中"),
        YGQ(3, "已过期"),
        YTH(4, "已退回"),
        THSQZ(5, "申请退回"),
        YGB(6, "已关闭"),
        DQYQZ(7, "待签署"),
        ;
        // 成员变量
        private String name;
        private int key;
        // 构造方法
        ApplyCollectStatus(int key, String name) {
            this.name = name;
            this.key = key;
        }
        // 普通方法
        public static String getName(int index) {
            for (ApplyCollectStatus c : ApplyCollectStatus.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 ApplyLogType {
        UPLOAD(0, "提交投保","提交意见:${param}",0),
        PLATFORM_RETURN(1, "退回投保","提交意见:${param}",0),
        WAIT_SIGNATURE(2, "上传投保单","提交意见:${param}",0),
        SIGNATURE(3, "企业签章","",0),
        FAIL_RETURN(4, "保单出具失败退回","提交意见:${param}",0),
        UPLOAD_INSURANCE(5, "保单完成","保险生效起期:${param1}变更为${param2}",0),
        COMPANY_APPLY_RETURN(6, "申请退回","提交意见:${param}",0),
        COMPANY_APPLY_CLOSE(7, "关闭申请","",0),
        PLATFORM_AGREE_BACK(8, "同意退回申请","",0),
        PLATFORM_UN_AGREE_BACK(9, "驳回退回申请","提交意见:${param}",0),
        COMPANY_EDIT(10, "保单修改","提交意见:${param1}\n${param2}",0),
        PLATFORM_CHECK_PASS(11, "投保审核通过","",0),
        UPLOAD_AGAIN(26, "再次投保","",0),
        PALTFORM_EDIT_BD(22, "修改保单","修改原因:${param}",0),
        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, "提交投保","提交意见:${param}",1),
        CA_COMPANY_BACK_APPLY(18, "申请退回","提交意见:${param}",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),
        CA_CHANGUNIT_APPLY_SIGN(24, "换厂申请企业签章","",1),
        CA_UPLOAD_AGAIN(25, "再次投保","",1),
        ;
        // 成员变量
        private String name;
        private String info;
        private int key;
        private int type;
        // 构造方法
        ApplyLogType(int key, String name,String info,int type) {
            this.name = name;
            this.info = info;
            this.key = key;
            this.type = type;
        }
        // 普通方法
        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;
        }
        public static List<Integer> getTypeList(int type) {
            List<Integer> list = new ArrayList<>();
            for (ApplyLogType c : ApplyLogType.values()) {
                if (c.getType() == type) {
                    list.add(c.getKey());
                }
            }
            return list;
        }
        // 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 int getType() {
            return type;
        }
        public void setType(int type) {
            this.type = type;
        }
    }
    public  enum InsuranceApplyStatus {
        UPLOAD(0, "提交投保","",0),
        PLATFORM_RETURN(1, "审核不通过","提交意见:${param}",4),
        WAIT_SIGNATURE(2, "已上传代签申请表待企业签章","",7),
        SIGNATURE(3, "已签章待上传保险单","",1),
        FAIL_RETURN(4, "保单出具失败退回","",4),
        UPLOAD_INSURANCE(5, "保单完成","保险生效起期:${param}变更为${param1}",2),
        COMPANY_BACK_APPLY_UPLOAD(6, "企业申请退回(提交投保)","提交意见:${param}",5),
        COMPANY_BACK_APPLY_WAIT_SIGNATURE(7, "企业申请退回(待签章)","提交意见:${param}",5),
        COMPANY_BACK_APPLY_SIGNATURE(8, "企业申请退回(已签章)","提交意见:${param}",5),
        CLOSE(9, "订单关闭","",6),
        PLATFORM_CHECK_PASS(10,"平台投保审核通过","提交意见:${param}",0),
        ;
        // 成员变量
        private String name;
        private String info;
        private int key;
        private int collectStatus;
        // 构造方法
        InsuranceApplyStatus(int key, String name,String info,int collectStatus) {
            this.name = name;
            this.key = key;
            this.info = info;
            this.collectStatus = collectStatus;
        }
        // 普通方法
        public static String getName(int index) {
            for (InsuranceApplyStatus c : InsuranceApplyStatus.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        public static List<Integer> getKesByStatus(Integer collectStatus) {
            List<Integer>  list = new ArrayList<>();
            if(collectStatus!=null){
                for (InsuranceApplyStatus c : InsuranceApplyStatus.values()) {
                    if (Constants.equalsInteger(c.getCollectStatus() ,collectStatus)) {
                        list.add(c.getKey());
                    }
                }
            }
            return list;
        }
        public static Integer getCollectStatus(Integer index) {
            for (InsuranceApplyStatus c : InsuranceApplyStatus.values()) {
                if (Constants.equalsInteger(c.getKey() , index)) {
                    return c.collectStatus;
                }
            }
            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 int getCollectStatus() {
            return collectStatus;
        }
        public void setCollectStatus(int collectStatus) {
            this.collectStatus = collectStatus;
        }
    }
    public  enum NoticeObjectType {
        INSURANCE_APPLY(0, "投保申请","保险方案"),
        APPLY_CHANGE(1, "加减保申请","保险方案"),
        CHANGE_FACTORY(2, "员工换厂申请","保险方案"),
        DISPATCH_UNIT(3, "派遣单位申请","派遣单位"),
        TAXES(4, "开票申请","开票金额"),
        SETTLE_CLAIMS(5, "报案理赔","报案人")
        ;
        // 成员变量
        private int key;
        private String name;
        private String info;
        // 构造方法
        NoticeObjectType(int key, String name,String info) {
            this.name = name;
            this.key = key;
            this.info = info;
        }
        // 普通方法
        public static String getName(int index) {
            for (NoticeObjectType c : NoticeObjectType.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 String getInfo() {
            return info;
        }
        public void setInfo(String info) {
            this.info = info;
        }
    }
    public  enum NoticeType {
        ZERO(0, "待审批","","","待审核","已申请","待受理"),
        ONE(1, "企业待签署","","","工种待审核","","完成受理"),
        TWO(2, "待出单","待审批","待审批","","",""),
        THREE(3, "申请退回","申请退回","申请退回","","",""),
        FOUR(4, "已退回","已退回","已退回","","",""),
        FIVE(5, "申请驳回","申请驳回","申请驳回","","",""),
        SIX(6, "","","","","","")
        ;
        // 成员变量
        private int status;
        private String insuranceApplyDetail;
        private String applyChangeDetail;
        private String changeFactoryDetail;
        private String dispatchUnitDetail;
        private String taxesDetail;
        private String settleClaimsDetail;
        // 构造方法
        NoticeType(int status, String insuranceApplyDetail,String applyChangeDetail
                , String changeFactoryDetail,String dispatchUnitDetail
                , String taxesDetail,String settleClaimsDetail) {
            this.status = status;
            this.insuranceApplyDetail = insuranceApplyDetail;
            this.applyChangeDetail = applyChangeDetail;
            this.changeFactoryDetail = changeFactoryDetail;
            this.dispatchUnitDetail = dispatchUnitDetail;
            this.taxesDetail = taxesDetail;
            this.settleClaimsDetail = settleClaimsDetail;
        }
        // 普通方法
        public static String getDetail(int status,int type) {
            for (NoticeType c : NoticeType.values()) {
                if (c.getStatus() == status) {
                    if(type==NoticeObjectType.INSURANCE_APPLY.getKey() ){
                        return c.getInsuranceApplyDetail();
                    }else if(type == NoticeObjectType.APPLY_CHANGE.getKey()){
                        return c.getApplyChangeDetail();
                    }else if(type == NoticeObjectType.CHANGE_FACTORY.getKey()){
                        return c.getChangeFactoryDetail();
                    }else if(type == NoticeObjectType.DISPATCH_UNIT.getKey()){
                        return c.getDispatchUnitDetail();
                    }else if(type == NoticeObjectType.TAXES.getKey()){
                        return c.getTaxesDetail();
                    }else if(type == NoticeObjectType.SETTLE_CLAIMS.getKey()){
                        return c.getSettleClaimsDetail();
                    }
                }
            }
            return null;
        }
        // get set 方法
        public int getStatus() {
            return status;
        }
        public void setStatus(int status) {
            this.status = status;
        }
        public String getInsuranceApplyDetail() {
            return insuranceApplyDetail;
        }
        public void setInsuranceApplyDetail(String name) {
            this.insuranceApplyDetail = insuranceApplyDetail;
        }
        public String getApplyChangeDetail() {
            return applyChangeDetail;
        }
        public void setApplyChangeDetail(String info) {
            this.applyChangeDetail = applyChangeDetail;
        }
        public String getChangeFactoryDetail() {
            return changeFactoryDetail;
        }
        public void setChangeFactoryDetail(String info) {
            this.changeFactoryDetail = changeFactoryDetail;
        }
        public String getDispatchUnitDetail() {
            return dispatchUnitDetail;
        }
        public void setDispatchUnitDetail(String info) {
            this.dispatchUnitDetail = dispatchUnitDetail;
        }
        public String getTaxesDetail() {
            return taxesDetail;
        }
        public void setTaxesDetail(String info) {
            this.taxesDetail = taxesDetail;
        }
        public String getSettleClaimsDetail() {
            return settleClaimsDetail;
        }
        public void setSettleClaimsDetail(String info) {
            this.settleClaimsDetail = settleClaimsDetail;
        }
    }
    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;
                }
            }
            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 {
        WAIT_ACCEPTANCE(0, "待受理"),
        RETURN_ACCEPTANCE(1, "退回受理"),
        DEAL_ING(2, "受理中"),
        CONFIRM_INFORMATION(3, "确认资料"),
        FINISH_ACCEPTANCE(4, "完成受理"),
        ;
        // 成员变量
        private String name;
        private int key;
        // 构造方法
        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, "平台备注标签","${param}"),
        PLATFORM_ADDCODE(8, "平台添加报案号","备案号:${param}"),
        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, "发起退回申请","提交意见:${param}"),
        PLATFORM_AGREE(4, "平台审核通过" ,"提交意见:${param}"),
        PLATFORM_UN_AGREE(0, "审核驳回","提交意见:${param}"),
        CLOSE(5, "关闭",""),
        ;
        // 成员变量
        private String name;
        private String info;
        private int key;
        // 构造方法
        ApplyChangeLogStatus(int key, String name,String info) {
            this.name = name;
            this.info = info;
            this.key = key;
        }
        // 普通方法
        public static String getName(int index) {
            for (ApplyChangeLogStatus c : ApplyChangeLogStatus.values()) {
                if (c.getKey() == index) {
                    return c.name;
                }
            }
            return null;
        }
        public static String getInfo(int index) {
            for (ApplyChangeLogStatus c : ApplyChangeLogStatus.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 ProjectRecord {
        COM_EDITING(0, "企业保存数据", "由 ${param2} ${param3}保存成功,当前进度为 【${param4}】"),
@@ -748,4 +1576,61 @@
            this.des = des;
        }
    }
    public static File getFileByNetFile(String url,String fileName)   {
        //对本地文件命名
        File file = null;
        try {
            URL urlfile;
            InputStream inStream = null;
            OutputStream os = null;
            try {
                String tempDir = System.getProperty("java.io.tmpdir")+fileName;
                file = new File(tempDir);
                //下载
                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;
    }
    public static void packFilesToZip(List<File> files,    ServletOutputStream os) throws IOException {
        try (ZipArchiveOutputStream zipOutputStream = new ZipArchiveOutputStream(os)) {
            for (File file : files) {
                ZipArchiveEntry entry = new ZipArchiveEntry(file.getName());
                zipOutputStream.putArchiveEntry(entry);
                try (FileInputStream fileInputStream = new FileInputStream(file)) {
                    byte[] buffer = new byte[1024];
                    int length;
                    while ((length = fileInputStream.read(buffer)) > 0) {
                        zipOutputStream.write(buffer, 0, length);
                    }
                }
                zipOutputStream.closeArchiveEntry();
                file.delete();
            }
        }
    }
}