GITZYY 9 mēneši atpakaļ
vecāks
revīzija
29eb967873

+ 140 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/PingDingShanCreditService.java

@@ -0,0 +1,140 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.hrsk.cloud.eg.app.constant.ServerCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.LoanDockingApi;
+import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
+import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
+import com.hrsk.cloud.eg.infrastructure.config.client.config.RetryRestTemplate;
+import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
+import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
+import com.hrsk.cloud.eg.infrastructure.utils.Md5Util;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import javax.annotation.Resource;
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.time.Instant;
+import java.util.Base64;
+
+/**
+ * @Author Liu Tao
+ * @Date 2023 12 27 16 28
+ **/
+@Component
+@Slf4j
+public class PingDingShanCreditService implements LoanDockingApi {
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpRestTemplate;
+
+    @Override
+    public ServerCodeEnums getType() {
+        return ServerCodeEnums.PingDingShan;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String partnerName;//合作⽅名称
+        private String channelId;//渠道号
+        private String serialNo;//请求流⽔号
+        private String requestData;//请求数据密⽂
+    }
+
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit PingDingShanCreditService qualityCheck begin...userId:{}",userInfo.getUserId());
+            ProductBusinessApiInfoDo apiInfo = apiInfoService.getById(product.getApiId());
+            String configJson = apiInfo.getThreeSystemConfig();
+            JSONObject config = JSONObject.parseObject(configJson);
+            log.info("平顶山对接参数:{}", JSON.toJSONString(config));
+            CheckInfo checkInfo = new CheckInfo();
+            String phoneMd5 = userInfo.getPhoneMd5() == null ? Md5Util.encoderByMd5(userInfo.getUserMobile()) : userInfo.getPhoneMd5();
+            checkInfo.setPartnerName("惠融易客");
+            checkInfo.setChannelId(config.getString("chanelId"));
+            String millisecondsSinceEpoch = String.valueOf(Instant.now().toEpochMilli());
+            checkInfo.setSerialNo("hryk"+millisecondsSinceEpoch);
+
+            JSONObject jsonObjects = new JSONObject() {{
+                put("anonymizer", "MASKED_MOBILE_2");
+                put("encryptValue", phoneMd5);
+            }};
+            checkInfo.setRequestData(encrypt(String.valueOf(jsonObjects),config.getString("publicKey")));
+            log.info("平顶山手机号{},加密前参数{},加密后参数{}",userInfo.getUserMobile(),jsonObjects,checkInfo);
+            String url = config.getString("checkUrl");
+            MultiValueMap<String, String> params= new LinkedMultiValueMap<String, String>();
+            params.add("partnerName", checkInfo.getPartnerName());
+            params.add("channelId", checkInfo.getChannelId());
+            params.add("serialNo", checkInfo.getSerialNo());
+            params.add("requestData", checkInfo.getRequestData());
+            log.info("credit qualityCheck PingDingShanCreditService request userId:{}, url:{}, checkInfo:{}",userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try{
+                HttpHeaders headers = new HttpHeaders();
+                headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+                HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(params, headers);
+                response = httpRestTemplate.restTemplate().postForEntity(url, requestEntity, String.class).getBody();
+            }catch (Exception e){
+                log.error("平顶山准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck PingDingShanCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(),product.getPlanName());
+            }
+            JSONObject jsonObject=JSONObject.parseObject(response);
+            if (jsonObject.getInteger("code")==1) {
+                    return DataVo.success(0, "平顶山撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(1, "平顶山撞库失败,请联系系统管理员", product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("平顶山撞库失败", e);
+            return DataVo.fail(1, "平顶山撞库失败,请联系系统管理员", product.getPlanId());
+        }
+
+    }
+
+    // 加密
+    public static String encrypt(String sSrc, String sKey) throws Exception {
+        if (sKey == null) {
+            System.out.print("Key为空null");
+            return null;
+        }
+        // 判断Key是否为16位
+        if (sKey.length() != 16) {
+            System.out.print("Key长度不是16位");
+            return null;
+        }
+        byte[] raw = sKey.getBytes("utf-8");
+        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
+        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
+
+        return Base64.getEncoder().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
+    }
+
+    public static String getphonecrypt(String num){
+        char[] phoneArray = num.toCharArray();
+        // 将最后两位字符替换为星号
+        phoneArray[phoneArray.length - 2] = '*';
+        phoneArray[phoneArray.length - 1] = '*';
+        String maskedPhoneNumber = new String(phoneArray);
+       return maskedPhoneNumber;
+    }
+
+
+
+}

+ 161 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/PingXunCreditService.java

@@ -0,0 +1,161 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.hrsk.cloud.eg.app.constant.ServerCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.LoanDockingApi;
+import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
+import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
+import com.hrsk.cloud.eg.infrastructure.config.client.config.RetryRestTemplate;
+import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
+import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
+import com.hrsk.cloud.eg.infrastructure.utils.Md5Util;
+import com.hrsk.cloud.eg.infrastructure.utils.StringDecodeUtils;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+/**
+ * @Descrption
+ * @Author: chend
+ * @Date: 2023/2/7
+ * @Version V1.0
+ **/
+@Slf4j
+@Component
+public class PingXunCreditService implements LoanDockingApi {
+
+
+    private final static String checkPath = "pull/common/warehouse";
+    private final static String applyPath = "pull/common/receive";
+
+    private final static String cityCodePath = "pull/get-code-by-name-status";
+
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpRestTemplate;
+
+
+    @Data
+    private static class ReqData {
+        private String channel;
+        private Long timestamp;
+        private String sign;
+        private String content;
+    }
+
+    @Data
+    private static class Result {
+
+        private Integer code;
+
+        private String msg;
+
+        private Object data;
+    }
+
+
+
+
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit PingXunCreditService qualityCheck begin...userId:{}", userInfo.getUserId());
+//            XdProductJointConfig xdProductJointConfig = xdProductJointConfigMapper.selectById(product.getJointType());
+            ProductBusinessApiInfoDo apiInfo = apiInfoService.getById(product.getApiId());
+            String configJson = apiInfo.getThreeSystemConfig();
+            JSONObject config = JSONObject.parseObject(configJson);
+            log.info("平讯对接参数:{}", JSON.toJSONString(config));
+
+//            LambdaQueryWrapper<XdUserBasicInfo> queryWrapper = new LambdaQueryWrapper<>();
+//            queryWrapper.eq(XdUserBasicInfo::getUserId, userInfo.getUserId());
+//            XdUserBasicInfo xdUserBasicInfo = this.xdUserBasicInfoMapper.selectOne(queryWrapper);
+
+//            String cityPath = config.getString("url") + cityCodePath;
+//            String cityCode = getCityCode(cityPath, xdUserBasicInfo.getCityOfWork());
+//
+//            ApplyInfo applyInfo = bulidInfo(userInfo, xdUserBasicInfo, userInfo.getBorrowMoney(), userInfo.getBorrowPurpose(), userInfo.getBorrowLimit());
+//            applyInfo.setProvince(Integer.parseInt(cityCode));
+//            applyInfo.setPhone(null);
+//            applyInfo.setId_card(null);
+//            applyInfo.setApply_name(null);
+//            log.info("平讯撞库业务数据:{}", JSON.toJSONString(applyInfo));
+
+            ReqData reqData = new ReqData() {{
+                setChannel(config.getString("channel"));
+                setContent(encrypt(userInfo.getPhoneMd5(), config.getString("secret")));
+                Long timestamp = System.currentTimeMillis();
+                setSign(bulidSign(config, timestamp + ""));
+                setTimestamp(timestamp);
+            }};
+
+            String url = config.getString("url") + checkPath;
+            log.info("credit qualityCheck PingXunCreditService request userId:{}, url:{}, reqData:{}", userInfo.getUserId(), url, reqData);
+
+            ResponseEntity<String> response = null;
+            try {
+                HttpHeaders headers = new HttpHeaders();
+                headers.setContentType(MediaType.valueOf("application/json;UTF-8"));
+                HttpEntity<ReqData> entity = new HttpEntity(reqData, headers);
+                response = httpRestTemplate.restTemplate().postForEntity(url, entity, String.class);
+            } catch (Exception e) {
+                log.error("平讯准入异常,异常信息:{}", e.getMessage(), e);
+            }
+
+            log.info("credit qualityCheck PingXunCreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+
+            JSONObject jsonObject = JSONObject.parseObject(StringDecodeUtils.decodeUnicode(response.getBody()));
+            if (200 == jsonObject.getInteger("status") && 1 == jsonObject.getJSONObject("data").getInteger("code")) {
+                return DataVo.success(0, "平讯撞库成功", product.getPlanId());
+            }
+            return DataVo.fail(jsonObject.getString("msg"), product.getPlanId());
+        } catch (Exception e) {
+            log.error("平讯撞库失败", e);
+            return DataVo.fail(1, "平讯撞库失败,请联系系统管理员", product.getPlanId());
+        }
+    }
+
+    @Override
+    public ServerCodeEnums  getType() {
+        return ServerCodeEnums.PingXun;
+    }
+
+    public String bulidSign(JSONObject config, String timestamp) {
+        String channel = config.getString("channel");
+        String secret = config.getString("secret");
+        return Md5Util.encoderByMd5(channel + timestamp + secret);
+    }
+    public static String encrypt(String content, String key) {
+        byte[] originalContent = content.getBytes(StandardCharsets.UTF_8);
+        String keys = key.substring(0, 16);
+        byte[] encryptKey = keys.getBytes();
+        try {
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+            SecretKeySpec skeySpec = new SecretKeySpec(encryptKey,  "AES");
+            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+            byte[] encrypted = cipher.doFinal(originalContent);
+            return Base64.encodeBase64String(encrypted);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+}

+ 83 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/QingDaoAoSengCreditService.java

@@ -0,0 +1,83 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+import com.alibaba.fastjson2.JSONObject;
+import com.hrsk.cloud.eg.app.constant.ServerCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.LoanDockingApi;
+import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
+import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
+import com.hrsk.cloud.eg.infrastructure.config.client.config.RetryRestTemplate;
+import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
+import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
+import com.hrsk.cloud.eg.infrastructure.utils.Md5Util;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.AsyncResult;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author zjc
+ * @Date 2024 07 17 14 53
+ **/
+@Slf4j
+@Service
+public class QingDaoAoSengCreditService implements LoanDockingApi {
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpRestTemplate;
+    @Override
+    public ServerCodeEnums  getType() {
+        return ServerCodeEnums.QingDaoAoSen;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String code;
+    }
+
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+//            log.info("credit YunHaiLianDongCreditService qualityCheck begin...userId:{}", userInfo.getUserId());
+            ProductBusinessApiInfoDo apiInfo = apiInfoService.getById(product.getApiId());
+            String configJson = apiInfo.getThreeSystemConfig();
+            JSONObject config = JSONObject.parseObject(configJson);
+
+            CheckInfo checkInfo = new CheckInfo();
+            checkInfo.setCode((userInfo.getPhoneMd5() == null ? Md5Util.encoderByMd5(userInfo.getUserMobile()) : userInfo.getPhoneMd5()));
+
+            String url = config.getString("checkUrl");
+
+//            log.info("credit qualityCheck YunHaiLianDongCreditService request userId:{}, url:{}, CheckInfo:{}", userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try {
+                response =httpRestTemplate.restTemplate().postForObject(url,checkInfo, String.class);
+            } catch (Exception e) {
+                log.error("青岛奥森准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck QingDaoAoSenCreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            JSONObject jsonObject = JSONObject.parseObject(response);
+//            log.info("credit qualityCheck YunHaiLianDongCreditService response userId:{}, jsonObject:{}", userInfo.getUserId(), jsonObject);
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            if (jsonObject.getInteger("code") == 1) {
+                return DataVo.success(0, "青岛奥森撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(1, "青岛奥森撞库失败,请联系系统管理员", product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("青岛奥森撞库失败", e);
+            return DataVo.fail(1, "青岛奥森撞库失败,请联系系统管理员", product.getPlanId());
+        }
+    }
+
+
+}

+ 81 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/QingDaoAoSengV2CreditService.java

@@ -0,0 +1,81 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.hrsk.cloud.eg.app.constant.ServerCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.LoanDockingApi;
+import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
+import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
+import com.hrsk.cloud.eg.infrastructure.config.client.config.RetryRestTemplate;
+import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
+import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
+import com.hrsk.cloud.eg.infrastructure.utils.Md5Util;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author zjc
+ * @Date 2024 07 17 14 53
+ **/
+@Slf4j
+@Component
+public class QingDaoAoSengV2CreditService implements LoanDockingApi {
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpRestTemplate;
+    @Override
+    public ServerCodeEnums  getType() {
+        return ServerCodeEnums.QingDaoAoSenV2;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String code;
+    }
+
+
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+//            log.info("credit YunHaiLianDongCreditService qualityCheck begin...userId:{}", userInfo.getUserId());
+            ProductBusinessApiInfoDo apiInfo = apiInfoService.getById(product.getApiId());
+            String configJson = apiInfo.getThreeSystemConfig();
+            JSONObject config = JSONObject.parseObject(configJson);
+
+            CheckInfo checkInfo = new CheckInfo();
+            checkInfo.setCode((userInfo.getPhoneMd5() == null ? Md5Util.encoderByMd5(userInfo.getUserMobile()) : userInfo.getPhoneMd5()));
+
+            String url = config.getString("checkUrl");
+//            log.info("credit qualityCheck YunHaiLianDongCreditService request userId:{}, url:{}, CheckInfo:{}", userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try {
+                response =httpRestTemplate.restTemplate().postForObject(url,checkInfo, String.class);
+            } catch (Exception e) {
+                log.error("青岛奥森V2准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck QingDaoAoSenV2CreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            JSONObject jsonObject = JSONObject.parseObject(response);
+//            log.info("credit qualityCheck YunHaiLianDongCreditService response userId:{}, jsonObject:{}", userInfo.getUserId(), jsonObject);
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            if (jsonObject.getInteger("code") == 1) {
+                return DataVo.success(0, "青岛奥森V2撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(1, "青岛奥森V2撞库失败,请联系系统管理员", product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("青岛奥森撞库失败", e);
+            return DataVo.fail(1, "青岛奥森V2撞库失败,请联系系统管理员", product.getPlanId());
+        }
+    }
+}

+ 195 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/QingyuCreditService.java

@@ -0,0 +1,195 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.hrsk.cloud.eg.app.constant.ServerCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.LoanDockingApi;
+import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
+import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
+import com.hrsk.cloud.eg.infrastructure.config.client.config.RetryRestTemplate;
+import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
+import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
+import com.hrsk.cloud.eg.infrastructure.utils.Md5Util;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 庆鱼API接单
+ */
+@Component
+@Slf4j
+public class QingyuCreditService implements LoanDockingApi {
+    private final String qualityCheckPath = "/openapi/interface/query/phones";
+    private final String applyPath = "/openapi/interface/save/customer";
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpRestTemplate;
+
+    public ServerCodeEnums  getType() {
+        return null;
+    }
+
+    private String getSign(String data, String trafficPlatformId, String key) {
+        return Md5Util.encoderByMd5("data=" + data + "&trafficPlatformId=" + trafficPlatformId + key);
+    }
+
+    /**
+     * 撞库 实现单个用户撞库
+     *
+     * @param userInfo
+     * @param product
+     * @return {"url":"http://apitest.shlyxxjs.com","key":"fluxZhudai*_key","tenantId":"1405729496904110081","trafficPlatformId":"13872425018351111"}
+     */
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit QingyuCreditService qualityCheck begin...userId:{},productId={}", userInfo.getUserId(), product.getPlanId());
+            ProductBusinessApiInfoDo apiInfo = apiInfoService.getById(product.getApiId());
+            String configJson = apiInfo.getThreeSystemConfig();
+            if (StringUtils.isBlank(configJson)) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+
+            JSONObject config = JSONObject.parseObject(configJson);
+            log.info("庆鱼对接参数:{}", JSON.toJSONString(config));
+            CheckInfoReq checkInfo = new CheckInfoReq();
+            checkInfo.setData(JSON.toJSONString(new ArrayList<CheckInfoReq.CheckRequest>() {{
+                add(new CheckInfoReq.CheckRequest() {{
+                    setCustomers(new ArrayList<CustomersReq>() {{
+                        add(new CustomersReq(userInfo.getPhoneMd5()));
+                    }});
+                    setTenantId(config.getString("tenantId"));
+                }});
+            }}));
+            checkInfo.setTrafficPlatformId(config.getString("trafficPlatformId"));
+            checkInfo.setSign(getSign(checkInfo.getData(), checkInfo.getTrafficPlatformId(), config.getString("key")));
+            String url = config.getString("url") + qualityCheckPath;
+            log.info("credit qualityCheck QingyuCreditService request userId:{}, url:{}, CheckInfo:{}", userInfo.getUserId(), url, checkInfo);
+            ResultYq response = null;
+            try {
+                response = httpRestTemplate.restTemplate().postForObject(url, checkInfo, ResultYq.class);
+            } catch (Exception e) {
+                log.error("【{}】-庆鱼准入异常,异常信息:{}", product.getPlanName(), e.getMessage(), e);
+            }
+            log.info("credit qualityCheck QingyuCreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            if (response.getCode() == 200 && response.getSuccess() == true && response.getData().get(0).getCustomers().get(0).getStatus() == 0) {
+                return DataVo.success(0, "【" + product.getPlanName() + "】-庆鱼撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(response.getMsg(), product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("【{}】-庆鱼撞库失败", product.getPlanName(), e);
+            return DataVo.fail(1, "庆鱼撞库失败,请联系系统管理员", product.getPlanId());
+        }
+
+    }
+    @Data
+    private static class CheckInfoReq {
+        private String data;
+
+        private String sign;
+
+        private String trafficPlatformId;
+
+        @Data
+        static class CheckRequest {
+            private List<CustomersReq> customers;
+
+            private String tenantId;
+
+            @Data
+            @AllArgsConstructor
+            static class CustomersReq {
+                private String phone;
+            }
+        }
+    }
+
+    @Data
+    private static class ResultYq {
+        private Integer code;
+        private String msg;
+        private Boolean success;
+
+        private List<Result> data;
+
+        @Data
+        static class Result {
+            private List<CustomersRes> customers;
+
+            private String tenantId;
+
+            @Data
+            static class CustomersRes {
+                private String phone;
+                //0.成功 1.失败
+                private Integer status;
+            }
+        }
+    }
+
+    @Data
+    private static class ApplyInfo {
+
+        private String data;
+
+        private String sign;
+
+        private String trafficPlatformId;
+
+        @Data
+        static class ApplyRequest {
+
+            private List<CustomersReq> customers;
+
+            private String tenantId;
+
+            @Data
+            static class CustomersReq {
+
+                private String name;//姓名
+
+                private String phone;//电话
+
+                private String amount;//申请金额
+
+                private String car; //车产(有  无)
+
+                private String house; //房产(有  无)
+
+                private String age; //年龄
+
+                private String purpose;//贷款目的(消费贷款)
+
+                private String deadline;//贷款期限(6~12月)
+
+                private String social;//社保
+
+                private String accumulation;//公积金
+
+                private String insurance;//保险保单
+
+                private String points;//芝麻分
+
+                private String provinceCode;//省代码
+
+                private String cityCode;//市代码
+
+                private String resource;
+            }
+        }
+    }
+}

+ 155 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/QingyuV2CreditService.java

@@ -0,0 +1,155 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.hrsk.cloud.eg.app.constant.ServerCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.LoanDockingApi;
+import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
+import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
+import com.hrsk.cloud.eg.infrastructure.config.client.config.RetryRestTemplate;
+import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
+import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
+import com.hrsk.cloud.eg.infrastructure.utils.Md5Util;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cglib.beans.BeanMap;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+
+/**
+ * @Descrption
+ * @Author: chend
+ * @Date: 2023/5/8
+ * @Version V1.0
+ **/
+@Component
+@Slf4j
+public class QingyuV2CreditService implements LoanDockingApi {
+    private final String qualityCheckPath = "/access/phoneMd5Check";
+    private final String applyPath = "/access/customer";
+
+    private final String prefix = "/openapi";
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpRestTemplate;
+    @Override
+    public ServerCodeEnums  getType() {
+        return ServerCodeEnums.CRM_QY_V2;
+    }
+
+
+
+    /**
+     * 撞库 实现单个用户撞库
+     *
+     * @param userInfo
+     * @param product
+     * @return {"url":"http://apitest.shlyxxjs.com","key":"fluxZhudai*_key","tenantId":"1405729496904110081","trafficPlatformId":"13872425018351111"}
+     */
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit QingyuV2CreditService qualityCheck begin...userId:{},productId={}", userInfo.getUserId(), product.getPlanId());
+            ProductBusinessApiInfoDo apiInfo = apiInfoService.getById(product.getApiId());
+            String configJson = apiInfo.getThreeSystemConfig();
+            JSONObject config = JSONObject.parseObject(configJson);
+            log.info("庆鱼V2.0对接参数:{}", JSON.toJSONString(config));
+            V2Req checkInfo = new V2Req();
+            checkInfo.setAccessKey(config.getString("accessKey"));
+            checkInfo.setRequestId(UUID.randomUUID().toString());
+
+            JSONObject jsonObject = new JSONObject() {{
+                put("phone", userInfo.getPhoneMd5());
+            }};
+            JSONArray dataArray = new JSONArray();
+            dataArray.add(jsonObject);
+            checkInfo.setData(dataArray);
+            String configUrl = config.getString("url");
+            String url;
+            if (configUrl.contains("qingyu3")) {
+                url = config.getString("url") + qualityCheckPath;
+            } else {
+                url = config.getString("url") + prefix + qualityCheckPath;
+            }
+
+            log.info("credit qualityCheck QingyuV2CreditService request userId:{}, url:{}, CheckInfo:{}", userInfo.getUserId(), url, checkInfo);
+            CheckInfoResp response = null;
+            try {
+                response = httpRestTemplate.restTemplate().postForObject(url, checkInfo, CheckInfoResp.class);
+            } catch (Exception e) {
+                log.error("【{}】-庆鱼V2.0准入异常,异常信息:{}", product.getPlanName(), e.getMessage(), e);
+            }
+            log.info("credit qualityCheck QingyuV2CreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            if (response.getCode() == 200 && response.getSuccess() == true && response.getData().size() == 0) {
+                return DataVo.success(0, "【" + product.getPlanName() + "】-庆鱼V2.0撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(response.getMsg(), product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("【{}】-庆鱼V2.0撞库失败", product.getPlanName(), e);
+            return DataVo.fail(1, "庆鱼V2.0撞库失败,请联系系统管理员", product.getPlanId());
+        }
+
+    }
+
+
+    public static <T> Map<String, Object> beanToMap(T bean) {
+        Map<String, Object> map = new HashMap<>();
+        if (bean != null) {
+            BeanMap beanMap = BeanMap.create(bean);
+            for (Object key : beanMap.keySet()) {
+                map.put(key + "", beanMap.get(key));
+            }
+        }
+        return map;
+    }
+
+
+    private String getSign(Map<String, Object> map) {
+        String text = "";
+        Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, Object> entry = iterator.next();
+            String value;
+            if (null == entry.getValue()) {
+                value = "";
+            } else {
+                value = (String) entry.getValue();
+            }
+            text = text + entry.getKey() + value;
+        }
+        return Md5Util.encoderByMd5(text).toUpperCase();
+    }
+
+
+    @Data
+    private static class V2Req {
+        private String requestId;
+
+        private String accessKey;
+
+        private JSONArray data;
+    }
+
+    @Data
+    private static class CheckInfoResp {
+        private Integer code;
+        private String msg;
+        private Boolean success;
+        private List<JSONObject> data;
+    }
+
+
+}

+ 144 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/QingyuV3CreditService.java

@@ -0,0 +1,144 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.hrsk.cloud.eg.app.constant.ServerCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.LoanDockingApi;
+import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
+import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
+import com.hrsk.cloud.eg.infrastructure.config.client.config.RetryRestTemplate;
+import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
+import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
+import com.hrsk.cloud.eg.infrastructure.utils.Md5Util;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cglib.beans.BeanMap;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @Author Liu Tao
+ * @Date 2023 09 06 15 31
+ **/
+@Component
+@Slf4j
+public class QingyuV3CreditService implements LoanDockingApi {
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpRestTemplate;
+    @Override
+    public ServerCodeEnums  getType() {
+        return ServerCodeEnums.CRM_QY_V3;
+    }
+
+    /**
+     * 撞库 实现单个用户撞库
+     *
+     * @param userInfo
+     * @param product
+     * @return {
+     * 	"checkUrl": "http://36.111.70.93:804/qingyu3/access/phoneMd5Check",
+     * 	"applyUrl": "http://36.111.70.93:804/qingyu3/access/customer",
+     * 	"accessKey": "b71df3c8aff86fbd46b732a183e2d34c",
+     * 	"source": "中融闪贷",
+     * 	"publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjlJ/w9nHYEAJKseVHonypwWy1bDb0+8XXfPB9NSsgZxS8aLJVH2RqRNeKQNghDT+yg+YEst16XVlBng+o+4id0XT18vmoXBSfys7lImv7FMJiZx2Kac6lYrmoLmgJT3Dg4MQ10RApkPWKhRowicY9VPdlUSj8G1TEdwuhVe/ljwIDAQAB"
+     * }
+     */
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit QingyuV3CreditService qualityCheck begin...userId:{},productId={}", userInfo.getUserId(), product.getPlanName());
+            ProductBusinessApiInfoDo apiInfo = apiInfoService.getById(product.getApiId());
+            String configJson = apiInfo.getThreeSystemConfig();
+            JSONObject config = JSONObject.parseObject(configJson);
+            log.info("庆鱼V3.0对接参数:{}", JSON.toJSONString(config));
+            V3Req checkInfo = new V3Req();
+            checkInfo.setAccessKey(config.getString("accessKey"));
+            checkInfo.setRequestId(UUID.randomUUID().toString());
+
+            JSONObject jsonObject = new JSONObject() {{
+                put("phone", userInfo.getPhoneMd5());
+            }};
+            JSONArray dataArray = new JSONArray();
+            dataArray.add(jsonObject);
+            checkInfo.setData(dataArray);
+            String checkUrl = config.getString("checkUrl");
+
+            log.info("credit qualityCheck QingyuV3CreditService request userId:{}, url:{}, CheckInfo:{}", userInfo.getUserId(), checkUrl, checkInfo);
+            CheckInfoResp response = null;
+            try {
+                response =httpRestTemplate.restTemplate().postForObject(checkUrl, checkInfo, CheckInfoResp.class);
+            } catch (Exception e) {
+                log.error("【{}】-庆鱼V3.0准入异常,异常信息:{}", product.getPlanName(), e.getMessage(), e);
+            }
+            log.info("credit qualityCheck QingyuV3CreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            if (response.getCode() == 200 && response.getSuccess() == true && response.getData().size()  == 0) {
+                return DataVo.success(0, "【" + product.getPlanName() + "】-庆鱼V3.0撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(response.getMsg(), product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("【{}】-庆鱼V3.0撞库失败", product.getPlanName(), e);
+            return DataVo.fail(1, "庆鱼V3.0撞库失败,请联系系统管理员", product.getPlanName());
+        }
+
+    }
+    public static <T> Map<String, Object> beanToMap(T bean) {
+        Map<String, Object> map = new HashMap<>();
+        if (bean != null) {
+            BeanMap beanMap = BeanMap.create(bean);
+            for (Object key : beanMap.keySet()) {
+                map.put(key + "", beanMap.get(key));
+            }
+        }
+        return map;
+    }
+
+
+    private String getSign(Map<String, Object> map) {
+        String text = "";
+        Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, Object> entry = iterator.next();
+            String value;
+            if (null == entry.getValue()) {
+                value = "";
+            } else {
+                value = (String) entry.getValue();
+            }
+            text = text + entry.getKey() + value;
+        }
+        return Md5Util.encoderByMd5(text).toUpperCase();
+    }
+
+
+    @Data
+    private static class V3Req {
+        private String requestId;
+
+        private String accessKey;
+
+        private JSONArray data;
+    }
+
+    @Data
+    private static class CheckInfoResp {
+        private Integer code;
+        private String msg;
+        private Boolean success;
+        private List<JSONObject> data;
+    }
+
+
+}
+