k94314517
2025-06-19 aaf48b095f3f5bf379adce3644dfd96f8d8a49d8
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -2,12 +2,21 @@
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdcardUtil;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.service.cloudauth20190307.AsyncClient;
import com.aliyun.sdk.service.cloudauth20190307.models.Id2MetaVerifyRequest;
import com.aliyun.sdk.service.cloudauth20190307.models.Id2MetaVerifyResponse;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.business.dto.ApplyPowerDTO;
import com.doumee.dao.business.dto.CountCyclePriceDTO;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.ApplyPowerVO;
import com.doumee.dao.business.vo.ChangeDealTypeVO;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.google.gson.Gson;
import darabonba.core.client.ClientOverrideConfiguration;
import io.swagger.models.auth.In;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.archivers.zip.Zip64Mode;
@@ -21,12 +30,38 @@
import java.math.RoundingMode;
import java.net.URL;
import java.net.URLDecoder;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.Date;
import java.util.concurrent.CompletableFuture;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.cloudauth20190307.models.*;
import com.aliyun.sdk.service.cloudauth20190307.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;
//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.io.*;
public class Constants {
@@ -316,6 +351,38 @@
        }
        return Constants.countPriceVO(countCyclePriceDTO.getStartDate(),countCyclePriceDTO.getSolutions());
    }
    public static int calculateAge(String idCard,Date dateDate) {
        try{
            Integer happenYear = Integer.valueOf(DateUtil.dateToString(dateDate,"yyyy"));
            Integer birthYear = Integer.valueOf(idCard.substring(6,10));
            return happenYear - birthYear;
        }catch (Exception e){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"年龄信息错误");
        }
//        if (idCard == null || idCard.length() != 18) {
//            throw new IllegalArgumentException("身份证号码必须是18位");
//        }
//
//        // 提取出生日期
//        String birthDateStr = idCard.substring(6, 14); // 例如:19900101
//        LocalDate birthDate = LocalDate.parse(birthDateStr);
//        Instant instant = dateDate.toInstant();
//        // 获取当前日期
//        LocalDate currentDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); // 转换为 LocalDate
//
//        // 计算年龄
//        Period period = Period.between(birthDate, currentDate);
//        int age = period.getYears(); // 直接获取年份差即为年龄
//        return age;
    }
    public static CountCyclePriceVO countPriceVO(Date startDate, Solutions solutions){
        CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO();
@@ -895,14 +962,7 @@
    }
    public static void main(String[] args) {
         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"));
//        System.out.println("{\"companyName\":\"应宝科技\",\"endtime\":\"2024-03-01 17:19:00\",\"erpId\":\"4D40185D5BC74A13821BE46EAF8B4179\",\"erpWithVisitDTOList\":[],\"faceImg\":\"20240304/1709518170325_742.jpg\",\"idcardNo\":\"342501199609300535\",\"idcardType\":0,\"name\":\"黄晋\",\"phone\":\"17756328697\",\"reason\":\"探险\",\"receptMemberId\":\"E7E514BD7DE3F27CE0530B630A0AEAE0\",\"starttime\":\"2024-03-01 13:18:00\"}");
    }
    /**
     * 用户类型 0系统用户 1企业用户 2服务机构管理员 3服务机构子账号 4综合服务单位管理员 5综合服务单位子账号 6专家 7县区用户 8市局用户
     */
@@ -1691,15 +1751,17 @@
    public  enum NoticeType {
        ZERO(0, "待审核","","","待审核","待处理","待审核","待签署","待签署"),
        ONE(1, "企业待签署","","","工种待审核","","已退回","",""),
        TWO(2, "待出单","待审核","待审核","","","待受理","",""),
        ZERO(0, "待审核","","","待审核","待处理","风险案件待审核","待签署","待签署"),
        //理赔通知企业(非待办)
        ONE(1, "企业待签署","","","工种待审核","","风险案件立案退回","",""),
        TWO(2, "待出单","待审核","待审核","","","已立案待受理","",""),
        THREE(3, "申请退回","申请退回","申请退回","","","已受理,需要补充材料","",""),
        FOUR(4, "已退回","已退回","已退回","","","已拒绝","",""),
        //理赔通知企业(非待办)
        FOUR(4, "已退回","已退回","已退回","","","已拒绝受理","",""),
        FIVE(5, "申请驳回","申请驳回","申请驳回","","","商议待领导审批","",""),
        //续保通知
        SIX(6, "","","","","","商议审批拒绝","",""),
        //商户端 委托保 - 投保待审核 加减保 换厂 待审核
        //商户端 委托保 - 投保待审核 加减保 换厂 待审核, 理赔通知企业(非待办)
        SEVEN(7, "待审核","待审核","待审核","","","商议审批拒绝通知","",""),
        //待复审
        EIGHT(8, "待审核","","","","","待理算","",""),
@@ -1707,8 +1769,18 @@
        TEN(10, "","","","","","待核赔确认","",""),
        ELEVEN(11, "","","","","","赔付金额已变更","",""),
        TWELVE(12, "","","","","","待结案","",""),
        THIRTEEN(13, "","","","","","已结案","",""),
        //理赔通知平台(非代办)
        THIRTEEN(13, "","","","","","已结案,赔付款项将在1-3个工作日内到账","",""),
        //理赔通知平台(非代办)
        FOURTEEN(14, "","","","","","已撤案","",""),
        //理赔通知企业(非待办)
        FIFTEEN(15, "","","","","","已受理待理算","",""),
        //理赔通知企业(非待办)
        SIXTEEN(16, "","","","","","受理审批中","",""),
        //理赔通知企业(非待办)
        SEVENTEEN(17, "","","","","","已理算待核赔","",""),
        //理赔通知企业(非待办)
        EIGHTEEN(18, "","","","","","待结案,赔付金额已变更","",""),
        ;
        // 成员变量
@@ -1964,7 +2036,7 @@
        ACCEPTANCE(9, "已受理",3),//待理算
        WAIT_AUDIT_COMPENSATION(10, "待核赔",4),
        COMPENSATION(11, "已核赔",5),
        CONFIRM_FEE(12, "已确认金额",5),
        CONFIRM_FEE(12, "待结案",5),
        CLOSE_CASE(13, "已结案",6),
        RETURN(14, "已撤案",7),
        ;
@@ -2023,7 +2095,7 @@
        SUPPLEMENT(5, "补充说明","提交意见:${param}"),
        PLATFORM_LP_DEAL(6, "平台理赔处理","已在平台完成理赔"),
        PLATFORM_REMARK(7, "备注标签","${param}"),
        PLATFORM_ADDCODE(8, "平台添加报案号","备案号:${param}"),
        PLATFORM_ADDCODE(8, "平台修改报案号","备案号:${param}"),
        PLATFORM_UN_AGREE_BACK(9, "企业下载资料",""),
        PLATFORM_DOWNLOAD(10, "平台下载资料",""),
        PLATFORM_CHECK_PASS(11, "平台上传资料",""),
@@ -2131,7 +2203,6 @@
            }
            return null;
        }
        // 普通方法
        public static SettleClaimsLogParentStatus getAll(int index) {
@@ -2826,5 +2897,217 @@
    }
    public static void  initApplyStatus(InsuranceApply apply){
        apply.setStatusCollect(Constants.InsuranceApplyStatus.getCollectStatus(apply.getStatus()));
        if(Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                || Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())){
            //如果已完成
            if(apply.getEndTime()==null || System.currentTimeMillis()>apply.getEndTime().getTime()){
                apply.setStatusCollect(Constants.THREE);//已过期
            }
        }
        Constants.setServiceDays(apply);
        apply.setStatusInfo(Constants.ApplyCollectStatus.getName(apply.getStatusCollect()));
        if(Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                || Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.WTB_DONE.getKey()) ){
            if(apply.getStartTime().getTime()>System.currentTimeMillis()){
                apply.setStatusInfo("待生效");
            }else if(apply.getEndTime().getTime()<System.currentTimeMillis()){
                apply.setStatusInfo("已过期");
            }else{
                apply.setStatusInfo("保障中");
            }
        }
    }
    public static void setServiceDays(InsuranceApply insuranceApply) {
        //设置在保时长(天数)
        insuranceApply.setServiceDays(Constants.ZERO);
        if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                || insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.WTB_DONE.getKey())){
            //如果当前时间大于结束日期 则使用结束日期对比开始日期
            if(DateUtil.compareDate(new Date(),insuranceApply.getEndTime())>=Constants.ZERO){
                insuranceApply.setServiceDays(
                        DateUtil.daysBetweenDates(insuranceApply.getEndTime(),insuranceApply.getStartTime())+1
                );
            }else if(DateUtil.compareDate(insuranceApply.getStartTime(),new Date())>=Constants.ZERO){
                //未开始
                insuranceApply.setServiceDays(Constants.ZERO);
            }else{
                insuranceApply.setServiceDays(DateUtil.daysBetweenDates(new Date(),insuranceApply.getStartTime())+1);
            }
        }
    }
    public static ApplyPowerVO getApplyPowerStatic(ApplyPowerDTO applyPowerDTO, InsuranceApply insuranceApply, Solutions solutions){
        if(Objects.isNull(applyPowerDTO)
                || Objects.isNull(applyPowerDTO.getApplyId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"参数错误");
        }
        if(Objects.isNull(applyPowerDTO.getBeginDate())){
            applyPowerDTO.setBeginDate(new Date());
        }
        ApplyPowerVO applyPowerVO = new ApplyPowerVO();
        //获取方案 结束时间
        Date endTime = insuranceApply.getEndTime();
        //查询当前去加保的开始日期  yyyy-MM-dd HH:mm:ss 2024-10-29 00:00:00
        Date addStartDate = DateUtil.getMontageDate(
                DateUtil.afterDateByType(applyPowerDTO.getBeginDate(),Constants.ZERO,solutions.getAddValidDays()),
                1
        );
        applyPowerVO.setAddStartDate(addStartDate);
        //加保生效日期大于 保单结束日期 则不可以进行加保
        if(addStartDate.getTime()>=endTime.getTime()){
            applyPowerVO.setAddTrue(Constants.ONE);
        }else{
            applyPowerVO.setAddTrue(Constants.ZERO);
        }
        //查询当前去减保的开始日期  yyyy-MM-dd HH:mm:ss 2024-10-29 00:00:00
        Date delStartDate = DateUtil.getMontageDate(
                DateUtil.afterDateByType(applyPowerDTO.getBeginDate(),Constants.ZERO,solutions.getAddValidDays()),
                1
        );
        applyPowerVO.setDelStartDate(delStartDate);
        //加保生效日期大于 保单结束日期 则不可以进行减保
        if(delStartDate.getTime()>=endTime.getTime()){
            applyPowerVO.setDelTrue(Constants.ONE);
        }else{
            applyPowerVO.setDelTrue(Constants.ZERO);
        }
        return applyPowerVO;
    }
    public static void main(String[] args) throws Exception {
//        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"));
//        System.out.println("{\"companyName\":\"应宝科技\",\"endtime\":\"2024-03-01 17:19:00\",\"erpId\":\"4D40185D5BC74A13821BE46EAF8B4179\",\"erpWithVisitDTOList\":[],\"faceImg\":\"20240304/1709518170325_742.jpg\",\"idcardNo\":\"342501199609300535\",\"idcardType\":0,\"name\":\"黄晋\",\"phone\":\"17756328697\",\"reason\":\"探险\",\"receptMemberId\":\"E7E514BD7DE3F27CE0530B630A0AEAE0\",\"starttime\":\"2024-03-01 13:18:00\"}");
//        Constants constants = new Constants();
//        constants.test("LTAI5tRBTeQKoeUs41yVdW4F","rYHEOw2l7AooAOz88JSZ2aSQxfQQTS","340621199310134818","任康");
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId("LTAI5tKzCBb4CU1bwUfSoakP")
                .accessKeySecret("7HNswKVfXJkSmiQDTT5wL3KjH1oS16")
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());
        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-hangzhou") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                // Endpoint 请参考 https://api.aliyun.com/product/Cloudauth
                                .setEndpointOverride("cloudauth.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();
        // Parameter settings for API request
        Id2MetaVerifyRequest id2MetaVerifyRequest = Id2MetaVerifyRequest.builder()
                .identifyNum("340621199310134818")
                .userName("任康")
                .paramType("normal")
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();
        // Asynchronously get the return value of the API request
        CompletableFuture<Id2MetaVerifyResponse> response = client.id2MetaVerify(id2MetaVerifyRequest);
        // Synchronously get the return value of the API request
        Id2MetaVerifyResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/
        // Finally, close the client
        client.close();
    }
    public void test(String accessKeyId,String accessKeySecret,String identifyNum,String name) throws  Exception{
// HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/
        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv(accessKeyId))
                .accessKeySecret(System.getenv(accessKeySecret))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());
        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-hangzhou") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                // Endpoint 请参考 https://api.aliyun.com/product/Cloudauth
                                .setEndpointOverride("cloudauth.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();
        // Parameter settings for API request
        Id2MetaVerifyRequest id2MetaVerifyRequest = Id2MetaVerifyRequest.builder()
                .identifyNum(identifyNum)
                .userName(name)
                .paramType("normal")
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();
        // Asynchronously get the return value of the API request
        CompletableFuture<Id2MetaVerifyResponse> response = client.id2MetaVerify(id2MetaVerifyRequest);
        // Synchronously get the return value of the API request
        Id2MetaVerifyResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/
        // Finally, close the client
        client.close();
    }
}