Jelajahi Sumber

add 迁移api

GITZYY 7 bulan lalu
induk
melakukan
d7b39de681
35 mengubah file dengan 2409 tambahan dan 46 penghapusan
  1. 1 1
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/business/GenerateCheckIntoHttpApiConfigService.java
  2. 1 1
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/business/GenerateCheckIntoHttpApiConfigV2Service.java
  3. 2 2
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/cache/TestCacheService.java
  4. 40 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/constant/JoinMethodEnums.java
  5. 178 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/constant/ServCodeEnums.java
  6. 35 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/DockingApi.java
  7. 159 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/AnHuiHengDaoCreditService.java
  8. 171 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/BaiXinShunTaiCreditService.java
  9. 151 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/BaiYiJinFuCreditService.java
  10. 260 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/BeiJingChongHeCreditService.java
  11. 110 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/CangZhouSuYiRonogCreditService.java
  12. 178 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/CheYouRongCreditService.java
  13. 137 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/ChengDuYiHeShengCreditService.java
  14. 136 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/ChengHongHuiCreditService.java
  15. 151 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/ChongQinDongRunCreditService.java
  16. 147 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/ChongQingRuiShangXinCreditService.java
  17. 119 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/ChongQingYiYueCreditService.java
  18. 106 0
      egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/impl/ChuanjinCreditService.java
  19. 63 2
      egress-gateway-service-client/src/main/java/com/hrsk/cloud/eg/vo/response/DataVo.java
  20. 0 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/payload/ApiJsonPayloadResolver.java
  21. 0 1
      egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/result/ApiJsonResultResolver.java
  22. 0 11
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/apiGateWayImpl/ApiDisPlayGatewayImpl.java
  23. 1 3
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/apiGateWayImpl/ApiGatewayImpl.java
  24. 0 13
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/checkIntoApi/CheckIntoDisplayApi.java
  25. 1 3
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/config/MyMetaObjectHandler.java
  26. 1 1
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/request/HttpRequestCheckIntoService.java
  27. 1 1
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/BeanCopyUtils.java
  28. 196 0
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/DateUtil.java
  29. 1 1
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/GsonUtils.java
  30. 44 0
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/Md5Util.java
  31. 1 1
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/PrivacyAesUtil.java
  32. 14 0
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/RedisUtil.java
  33. 1 1
      egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/SnowflakeIdWorker.java
  34. 2 2
      start/src/test/java/GenerateConfigTest.java
  35. 1 1
      start/src/test/java/StartApiTest.java

+ 1 - 1
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/business/GenerateCheckIntoHttpApiConfigService.java → egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/business/GenerateCheckIntoHttpApiConfigService.java

@@ -1,4 +1,4 @@
-package com.hrsk.cloud.eg.infrastructure.business;
+package com.hrsk.cloud.eg.app.business;
 
 
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;

+ 1 - 1
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/business/GenerateCheckIntoHttpApiConfigV2Service.java → egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/business/GenerateCheckIntoHttpApiConfigV2Service.java

@@ -1,4 +1,4 @@
-package com.hrsk.cloud.eg.infrastructure.business;
+package com.hrsk.cloud.eg.app.business;
 
 
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;

+ 2 - 2
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/cache/TestCacheService.java → egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/cache/TestCacheService.java

@@ -1,4 +1,4 @@
-package com.hrsk.cloud.eg.infrastructure.cache;
+package com.hrsk.cloud.eg.app.cache;
 
 
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -6,7 +6,7 @@ import org.springframework.stereotype.Service;
 /**
 /**
  * @author zhangyy
  * @author zhangyy
  * @version 1.0
  * @version 1.0
- * @description: TestCacheService
+ * @description: cache service 操作缓存和 对应业务的代码
  * @date 2024/8/28 16:53
  * @date 2024/8/28 16:53
  */
  */
 @Service
 @Service

+ 40 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/constant/JoinMethodEnums.java

@@ -0,0 +1,40 @@
+package com.hrsk.cloud.eg.app.constant;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum JoinMethodEnums {
+
+    OPEN_API("1", "我方通用API"),
+    BUSI_API("2", "合作方CRM"),
+    CRM_EC("3", "三方CRM(ec)"),
+    CRM_QY("4", "三方CRM(庆鱼)"),
+    CRM_JD("5", "三方CRM(锦蝶)"),
+    CRM_RXK("6", "三方CRM(融享客)"),
+    CRM_XL("7", "三方CRM(鑫鹿)"),
+    CRM_QY_V2("8", "三方CRM(庆鱼2.0)"),
+    CRM_XKD("10", "三方CRM(享客达)"),
+    HUIRONG_CRM("9", "惠融易客CRM"),
+    CRM_QY_V3("11", "三方CRM(庆鱼3.0)"),
+    CRM_JDV3("12", "三方CRM(锦蝶V3)"),
+    OPEN_API_AES("13", "我方通用AES模式");
+
+    private String code;
+    private String msg;
+
+    JoinMethodEnums(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+    static Map<String, JoinMethodEnums> map = new HashMap();
+
+    static {
+        for (JoinMethodEnums value : JoinMethodEnums.values()) {
+            map.put(value.code, value);
+        }
+    }
+
+    public static JoinMethodEnums getByCode(String code) {
+        return map.get(code);
+    }
+}

+ 178 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/constant/ServCodeEnums.java

@@ -0,0 +1,178 @@
+package com.hrsk.cloud.eg.app.constant;
+
+import java.util.HashMap;
+import java.util.Map;
+/**
+ * @description:  对接平台枚举
+ * @param:
+ * @return:
+ * @author zhangyy
+ * @date: 2024/9/10 14:58
+ */
+public enum ServCodeEnums {
+        Default("dc", "对接我方贷超"),
+        DefaultOne("dc_one", "对接我方贷超(只提供了1.3接口)"),
+        Djd("djd", "大金贷"),
+        Xdw("xdw", "寻单王"),
+        DianTuDai("dianTuDai", "电兔贷"),
+        Sj("sj", "商机"),
+        TgXinDai("tgXinDai", "甜瓜信贷app"),
+        DaLiQiangDan("daLiQiangDan", "大粒抢单"),
+        KuanJie("kuanjie", "款姐"),
+        NoApi("noApi", "无api对接产品"),
+        Ruifeng("ruifeng", "瑞丰"),
+        Huizhong("Huizhong", "惠众"),
+        YinHua("YinHua", "银华咨询"),
+        Huixin("Huixin", "汇鑫"),
+        DongFangRZ("DongFangRZ", "东方融资网"),
+        TuoBaoRong("TuoBaoRong", "拓宝荣"),
+        Huizhong01("Huizhong01", "惠众助贷"),
+        HengAi("HengAi", "恒爱致远"),
+        YuKuaiHua("YuKuaiHua", "愉快花"),
+        Rongxizi("Rongxizi", "荣西子"),
+        RongSheng("RongSheng", "荣晟"),
+        ChuanJin("ChuanJin", "川金"),
+        YiJie("YiJie", "易借"),
+        PingXun("PingXun", "平讯"),
+        Qingyu("Qingyu", "庆鱼"),
+        Jindie("Jindie", "锦蝶"),
+        Rongkedai("Rongkedai", "融客贷"),
+        Jiecheng("Jiecheng", "捷诚"),
+        Xinkedai("Xinkedai", "欣客贷"),
+        Yourong("Yourong", "有融"),
+        HouCheng("HouCheng", "厚诚"),
+        Hamigua("Hamigua", "哈密瓜"),
+
+        Haohanwuyin("Haohanwuyin", "灏瀚无崟"),
+        Gexinjinfu("Gexinjinfu", "格鑫金服"),
+        Xuzhoufuli("Xuzhoufuli", "徐州富丽"),
+        Kuaiyidai("Kuaiyidai", "快易贷"),
+        KuaiyidaiNight("KuaiyidaiNight", "快易贷夜间"),
+        KuaiyidaiFourToOne("KuaiyidaiFourToOne", "快易贷四选一"),
+        KuaiyidaiV2("KuaiyidaiV2", "快易贷尾量"),
+        Xinyidai("Xinyidai", "信易贷"),
+        Fangxinwang("Fangxinwang", "放心网"),
+        YiRong("YiRong", "壹融网"),
+
+        XiangRong("XiangRong", "宁波享融网"),
+        YiQiHua("YiQiHua", "一起花"),
+        DaXiangHuaBei("DaXiangHuaBei", "大象花呗"),
+
+        XveYiRong("XveYiRong","雪易融"),
+        SiChuangRui("SiChuangRui","思创瑞"),
+        //KuaiYiRong("KuaiYiRong","快易溶")
+        JiNingHR("JiNingHR","济宁惠融"),
+        HeZeRongXin("HeZeRongXin","菏泽融信"),
+        WFangYy("WFangYy","潍坊优易"),
+        ShanDongBangBangDai("ShanDongBangBangDai","山东帮帮代"),
+        GuangDongHaoEn("GuangDongHaoEn","广东昊恩"),
+        XiaMenYiJieZhuDai("XiaMenYiJieZhuDai","厦门易捷助代"),
+        DeZhouXinYiRong("DeZhouXinYiRong","德州鑫易融"),
+        ShenYangXinYiRong("ShenYangXinYiRong","沈阳信易融"),
+        RunMei("RunMei","润美"),
+        DeZhouXinYiRongV2("DeZhouXinYiRongV2","德州鑫易融V2"),
+        KunMingXiaoSongShu("KunMingXiaoSongShu","昆明小松鼠"),
+        NingBoTianCheng("NingBoTianCheng", "宁波天澄"),
+        XuzhoufuliV2("XuzhoufuliV2", "徐州富丽V2"),
+        ChongQingRuiShuangXin("ChongQingRuiShuangXin","重庆睿双鑫"),
+        AnHuiHengDao("AnHuiHengDao","安徽恒道"),
+        Suzhouchangshuo("Suzhouchangshuo", "苏州昌硕"),
+        ShanXiHengSheng("ShanXiHengSheng","山西恒昇"),
+        FuZhouBeiYinJinRong("FuZhouBeiYingJinRong","福州北银金融"),
+        RongXiangDaChangSha("RongXiangDaChangSha","融享达长沙"),
+        TianJingJiaYi("TianJingJiaYi","天津佳亿"),
+        WuHanDongYuan("WuHanDongYuan","武汉东远"),
+        KuaiYiRong("KuaiYiRong","快易融"),
+        YuRongFu("YuRongFu","宇融服"),
+        ZhongXinQiFu("ZhongXinQiFu","众鑫企服"),
+        BeiJingChongHe("BeiJingChongHe","北京重和"),
+        YangZhouWanKe("YangZhouWanKe","扬州万客"),
+        XiaoMeiYiRong("XiaoMeiYiRong","小美易融"),
+        HuNanDiShuiYan("HuNanDiShuiYan","湖南滴水岩"),
+        HeFeiShenDai("HeFeiShenDai","合肥盛代"),
+        YiRongWang("YiRongWang","忆融网"),
+        WenZhouYueShangXiang("WenZhouYueShangXiang","温州悦尚祥"),
+        TianShuiShuYiRong("TianShuiShuYiRong","天水速易融"),
+        ZhaoZhuangXinYiRong("ZhaoZhuangXinYiRong","枣庄信易融"),
+        GuanZhouPuHui("GuanZhouPuHui","广州普惠"),
+        WenZhouGaoShen("WenZhouGaoShen","温州高升"),
+        PingDingShan("PingDingShan","平顶山"),
+        ChengHongHui("ChengHongHui","晨宏汇"),
+        ShiYue("ShiYue","司跃"),
+        YunHaiLianDong("YunHaiLianDong","云海联动"),
+        YiLianRong("YiLianRong","易联融"),
+        RongXiangKeV2("RongXiangKeV2","融享客V2"),
+        SouYuJinFu("SouYuJinFu","授渔金服"),
+        YiZhanShiShuZhiPingTai("YiZhanShiShuZhiPingTai","一站式数字平台"),
+        MoGuTou("MoGuTou","蘑菇投"),
+        ShangHaiJuHuiRongCreditService("ShangHaiJuHuiRongCreditService","上海聚汇融"),
+        NanTongXingChengCreditService("NanTongXingChengCreditService","南通星辰"),
+        XinJiangWanHeCreditService("XinJiangWanHeCreditService","新疆万合"),
+        QingDaoBaiXinSHunTaiCreditService("QingDaoBaiXinSHunTaiCreditService","青岛佰信顺泰"),
+        FuCheng("FuCheng","福程"),
+        XingChi("XingChi","星驰"),
+        ShenYangHengXin("ShenYangHengXin","沈阳恒信"),
+        WuHanJingCheng("WuHanJingCheng","武汉锦城"),
+        ChongQinDongRunCreditService("ChongQinDongRunCreditService","重庆东润"),
+        JinDieV4CreditService("JinDieV4CreditService","锦蝶v4"),
+        JianZhan100("JianZhan100","建站100"),
+        ShangHaiHanGe("ShangHaiHanGe","上海晗各"),
+        ShuRong("ShuRong","速融"),
+        NiYouKe("NiYouKe","尼优客"),
+        JinZhuLiCreditService("JinZhuLiCreditService","金助理"),
+        YiBangDaiCreditService("YiBangDaiCreditService","壹帮贷"),
+        DeLuoXuan("DeLuoXuan","德诺轩"),
+        RongYiDa("RongYiDa","融易达"),
+        LianKeYunKong("LianKeYunKong","链客云控"),
+        DeLuoXuanAES("DeLuoXuanAES","德诺轩AES"),
+        RongChuangJinFu("RongChuangJinFu","融创金服"),
+        FuZhouBeiJiu("FuZhouBeiJiu","福州北久"),
+        BaiYiJinFu("BaiYiJinFu","佰亿金服"),
+        JiuXinKe("JiuXinKe","玖欣客"),
+        RongXiangKeBuShu("RongXiangKeBuShu","融享客部署模式"),
+        WeiFangHuaShenCreditService("WeiFangHuaShenCreditService","潍坊华盛"),
+        HongXinPuHui("HongXinPuHui","弘鑫普惠"),
+        ChengDuYiHeSheng("ChengDuYiHeSheng","成都亿禾生"),
+        CangZhouSuYiRong("CangZhouSuYiRong","沧州速易融"),
+        XinChuangYinHui("XinChuangYinHui","信创银辉"),
+        SuZhouJianYiRong("SuZhouJianYiRong","苏州简易融"),
+        QingDaoAoSen("QingDaoAoSen","青岛奥森"),
+        ShenLuoJinFu("ShenLuoJinFu","盛略金服"),
+        LeXiangRong("LeXiangRong","乐享融"),
+        ThangSanRongYang("ThangSanRongYang","唐山融扬"),
+        GuangZhouHuaXin("GuangZhouHuaXin","广州华鑫"),
+        ShanXiMingDePuHui("ShanXiMingDePuHui","陕西明德普惠"),
+        ChongQingYiYue("ChongQingYiYue","重庆易悦"),
+        QingDaoAoSenV2("QingDaoAoSenV2","青岛奥森V2"),
+        GuangDongHongZhan("GuangDongHongZhan","广东鸿展"),
+        FeiLongKe("FeiLongKe","飞隆客"),
+        HengYangJiuZhen("HengYangJiuZhen","衡阳玖臻"),
+        XingZheChangZhi("XingZheChangZhi","行者常至"),
+        HongShengJinFu("HongShengJinFu","弘盛金服"),
+        JiangXiCheYouRong("JiangXiCheYouRong","江西车优融");
+
+        public String code;
+        public String msg;
+
+        ServCodeEnums(String code, String msg) {
+            this.code = code;
+            this.msg = msg;
+        }
+
+        public String getCode() {
+            return code;
+        }
+
+        public String getMsg() {
+            return msg;
+        }
+
+
+        public static Map<String, ServCodeEnums> map = new HashMap<>();
+
+        static {
+            for (ServCodeEnums e : ServCodeEnums.values()) {
+                map.put(e.code, e);
+            }
+        }
+    }

+ 35 - 0
egress-gateway-service-app/src/main/java/com/hrsk/cloud/eg/app/threedocking/DockingApi.java

@@ -0,0 +1,35 @@
+package com.hrsk.cloud.eg.app.threedocking;
+
+import com.hrsk.cloud.eg.app.constant.ServCodeEnums;
+import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
+import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+
+/**
+ * @author zhangyy
+ * @version 1.0
+ * @description: dockingApi 三方对接
+ * @date 2024/9/10 14:31
+ */
+public interface DockingApi {
+
+    /**
+     * @description:  撞库接口
+     * @param:
+     * @return:
+     * @author zhangyy
+     * @date: 2024/9/10 14:33
+     */
+    DataVo qualityCheck(UserInBaseInfoDto user, PlanDto planDto);
+
+
+    /**
+     * @description: 对接类型
+     * @param:
+     * @return:
+     * @author zhangyy
+     * @date: 2024/9/10 14:33
+     */
+    ServCodeEnums getType();
+
+}

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

@@ -0,0 +1,159 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.Service;
+import javax.annotation.Resource;
+import java.time.Instant;
+import java.util.*;
+
+/**
+ * @Author Liu Tao
+ * @Date 2023 11 09 09 49
+ **/
+@Service
+@Slf4j
+public class AnHuiHengDaoCreditService implements DockingApi {
+
+    @Resource
+     private RetryRestTemplate httpTemPlateClient;
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Override
+    public ServCodeEnums getType() {
+        return ServCodeEnums.AnHuiHengDao;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String timeStamp;//时间戳:1627538679006
+        private String orderNo;//订单号(不可重复,一般是标识加上时间戳)
+        private String sign;//签名(MD5(data&orderNo&timeStamp&token))
+        private String data;//手机号码MD5值(32位小写)
+    }
+
+    @Data
+    public static class CheckData{
+        private String clientname;
+        private String phone;
+        private String remarks;
+        private String channelId;
+    }
+    @Data
+    public static class ApplyInfoData{
+        private String loanLimit;//贷款期限
+        private String car;
+        private String house;
+        private String socialSecurity;
+        private String reservedFunds;
+        private String insurance;
+        private String creditCard;//
+        private String zhima;//
+    }
+    @Data
+    private static class ApplyInfo {
+        private String timeStamp; //时间戳:1627538679006
+        private String orderNo; //订单号(不可重复,一般是标识加上时间戳)
+        private String sign; //签名(MD5(data&orderNo&timeStamp&token))
+        private String data; //数据信息(json类型的字符串,该字段需要aes加密,{"clientname":"客户名称", "phone":"电话 必填", "remarks":"备注 客户详细信息", "channelId":1 // 来源必填,需要申请})
+    }
+
+    /**
+     * 撞库 实现单个用户撞库
+     *
+     * @param userInfo
+     * @param product
+     * @return
+     */
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit AnHuiHengDaoCreditService 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.setData(phoneMd5);
+            String millisecondsSinceEpoch = String.valueOf(Instant.now().toEpochMilli());
+            checkInfo.setTimeStamp(millisecondsSinceEpoch);//当前时间搓
+            checkInfo.setOrderNo(config.getString("channel")+millisecondsSinceEpoch);//订单号
+                //实体类转为JSONObject
+            JSONObject jsons = JSONObject.parseObject(JSON.toJSONString(checkInfo));
+            jsons.remove("sign");
+            String sign = getSign(jsons,config.getString("key"));
+            checkInfo.setSign(Md5Util.encoderByMd5(sign));
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck AnHuiHengDaoCreditService request userId:{}, url:{}, checkInfo:{}",userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try{
+                response =httpTemPlateClient.restTemplate().postForObject(url,checkInfo, String.class);
+            }catch (Exception e){
+                log.error("安徽恒道准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck AnHuiHengDaoCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanName());
+            }
+            JSONObject jsonObject=JSONObject.parseObject(response);
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanName());
+            }
+            if (jsonObject.getString("code").equals("000")) {
+                return DataVo.success(0, product.getPlanId()+"安徽恒道撞库成功");
+            } else {
+                return DataVo.fail("安徽恒道撞库失败");
+            }
+        } catch (Exception e) {
+            log.error("安徽恒道撞库失败", e);
+            return DataVo.fail("安徽恒道撞库失败");
+        }
+
+    }
+
+    private String getSign(JSONObject params, String key) {
+            String sortStr = getFormatParams(params);
+            System.out.println("sortStr = " + sortStr);
+            //第二步:将tradeKey拼接在1中排序后的字符串后面得到待签名字符串。
+            sortStr += "&"+ key;
+            System.out.println("sortStr = " + sortStr);
+            //sortStr += "key=BF1BDE5A649724056F904A9335B1C1C9";
+            //第三步:使用md5算法加密待加密字符串并转为大写即为sign
+//        String sign = DigestUtils.md5DigestAsHex(sortStr.getBytes()).toUpperCase();
+//        System.out.println("sign = " + sign);
+            return sortStr;
+        }
+    /**
+     * 字典排序
+     * 获得参数格式化字符串
+     * 参数名按字典排序,小写在后面
+     */
+    private static String getFormatParams(Map<String, Object> params) {
+        List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(params.entrySet());
+        Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
+            public int compare(Map.Entry<String, Object> arg0, Map.Entry<String, Object> arg1) {
+                return (arg0.getKey()).compareTo(arg1.getKey());
+            }
+        });
+        String ret = "";
+        for (Map.Entry<String, Object> entry : infoIds) {
+            ret += entry.getValue();
+            ret += "&";
+        }
+        ret = ret.substring(0, ret.length() - 1);
+        return ret;
+    }
+
+}

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

@@ -0,0 +1,171 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.DateUtil;
+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.apache.commons.codec.binary.Base64;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Date;
+
+/**
+ * @Author zjc
+ * @Date 2024 04 17 16 08
+ **/
+@Slf4j
+@Service
+public class BaiXinShunTaiCreditService implements DockingApi {
+    public static String code = "UTF-8";
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    //撞库
+    @Data
+    private static class CheckInfo {
+        private String phoneNo;//md5 的手机号
+
+    }
+
+    @Data
+    private static class RquestParam {
+        private String data;
+        private String merchantNo;
+        private String timestamp;
+        private String reqId;
+
+    }
+
+    //进件
+    @Data
+    private static class ApplyInfo {
+        private String custName;//客户姓名
+        private String city; //城市
+        private String cityCode;//城市行政区划代码
+        private String phoneNo; //手机号
+        private Integer sex; //性别 0:男:1女
+        private String age; //年龄
+        private String loanAmount;//客户借款额度 0-3万:1 ,3-5万:2 ,5-10万:3 ,10-20万:4 ,20万以上:5
+        private String profession;//职业身份
+        private String salaryType;//工资情况
+        private String socialSecurity; //社保0无 6个月以下1 6个月以上2
+        private String providentFund; //公积金 0无 6个月以下1 6个月以上2
+        private String car; //车产 0没有 1有按揭车 2有全款车
+        private String estate; //房产    无房	0 有按揭商品房	1 有全款商品房	2
+        private String creditCardLimit; //信用卡 0没有 1.3000元以下 2.3000-5000元 3.5000-10000元 4.10000元以上
+        private String zhiMaScore;//芝麻分
+        private String lifeInsurance; //保单0无1有
+        private String monthIncome; //月收入
+        private String degree; //学历 1 高中及以下	2 大专	3 本科及以上
+        private String loanTerm;//借款周期 01:一年以内 02:1-3年 03:3年上
+        private Integer company_id;//公司编码
+        private String promotion_prefix;//渠道名
+
+    }
+
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit QingDaoBaiXinShunTaiCreditService 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));
+            String phoneMd5 = userInfo.getPhoneMd5() == null ? Md5Util.encoderByMd5(userInfo.getUserMobile()) : userInfo.getPhoneMd5();
+            CheckInfo checkInfo = new CheckInfo();
+            checkInfo.setPhoneNo(phoneMd5);
+            RquestParam requestParam=new RquestParam();
+            requestParam.setTimestamp(DateUtil.getFormatDate(new Date(), "yyyy-MM-dd HH:mm:ss"));
+            requestParam.setData(encryptAes(JSON.toJSONString(checkInfo), config.getString("key")));
+            requestParam.setReqId(config.getString("reqId"));
+            requestParam.setMerchantNo(config.getString("merchantNo"));
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck QingDaoBaiXinShunTaiCreditService request userId:{}, url:{}, CheckInfo:{}", userInfo.getUserId(), url, phoneMd5);
+            String response = null;
+            try {
+                response = httpTemPlateClient.restTemplate().postForObject(url, requestParam, String.class);
+            } catch (Exception e) {
+                log.error("青岛佰信顺泰准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck QingDaoBaiXinShunTaiCreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanName());
+            }
+            JSONObject jsonObject = JSONObject.parseObject(response);
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanName());
+            }
+            if (jsonObject.getString("dealStatus").equals("0000")) {
+                return  DataVo.success(0,product.getPlanId()+"青岛佰信顺泰撞库成功");
+            } else {
+                return DataVo.fail("青岛佰信顺泰撞库失败,请联系系统管理员");
+            }
+        } catch (Exception e) {
+            log.error("青岛佰信顺泰撞库失败", e);
+            return DataVo.fail("青岛佰信顺泰撞库失败,请联系系统管理员");
+        }
+    }
+
+    @Override
+    public ServCodeEnums getType() {
+        return ServCodeEnums.QingDaoBaiXinSHunTaiCreditService;
+    }
+
+
+    public static String encryptAes(String data, String secretKey) {
+        try {
+            byte[] encrpyted = tripleAes(Cipher.ENCRYPT_MODE, data.getBytes(code), secretKey.getBytes());
+            byte[] encoded = Base64.encodeBase64(encrpyted); // Base64 编码
+            return new String(encoded);
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static byte[] cipherAes(String algorithm, String transformation, int opmode, byte[] data, byte[] iv, byte[] secretKey) {
+        try {
+            Cipher cipher = Cipher.getInstance(transformation);
+            SecretKeySpec keyspec = new SecretKeySpec(secretKey, algorithm);
+            IvParameterSpec ivspec = new IvParameterSpec(iv);  // CBC模式,需要一个向量iv,可增加加密算法的强度
+
+            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
+            byte[] encrypted = cipher.doFinal(data);
+            return encrypted;
+        } catch (InvalidKeyException | NoSuchAlgorithmException
+                 | NoSuchPaddingException
+                 | IllegalBlockSizeException | BadPaddingException |
+                 InvalidAlgorithmParameterException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static byte[] tripleAes(int opmode, byte[] data, byte[] secretKey) {
+        return cipherAes("AES", "AES/CBC/PKCS5Padding", opmode, data, "dxjf18129979469s".getBytes(), secretKey);
+    }
+}
+
+
+
+

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

@@ -0,0 +1,151 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.RedisUtil;
+import com.hrsk.cloud.eg.vo.response.DataVo;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.util.EntityUtils;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Author Liu Tao
+ * @Date 2024 06 25 17 42
+ **/
+@Slf4j
+@Service
+public class BaiYiJinFuCreditService implements DockingApi {
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+
+    @Data
+    private static class CheckInfo {
+        private String mobile;// 手机号码(MD5加密)
+    }
+
+    @Data
+    private static class UserTokenInfo {
+        private String username;// 	用户名
+        private String password;// 	密码
+    }
+
+    @Data
+    private static class ApplyInfo {
+        private String customerName;//客户名称
+        private String mobilePhone; //手机号码
+        private Double loanamount; //贷款金额
+        private String thirdCode; //第三方唯一码,唯一码不能重复,代表客户唯一标志
+        private String thirdSource;//第三方来源,固定值、需要联系平台管理员获取
+        private String channel;//渠道来源
+        private String source;//客户所在城市
+        private String houseflag;//房产:1:无、2:有
+        private String carflag;//车产:1:无、2:有
+        private String insuranceflag;//保险:N:否、Y:是
+        private String socialflag;//社保:1:无、4:缴纳未满6个月、 5:缴纳6个月以上、2:有
+        private String accumulationfundflag;//公积金:1:无、4:缴纳未满6个月、 5:缴纳6个月以上、2:有
+        private String overdueflag;//有无逾期:1:无、2:有
+        private String starlevel;//星级:0:0星、1:1星、 2:2星、3:3星、4:4星、5:长期跟进、6:重要、7:重点关注、8:五客管理、9:养客户、10:意向客户、11:债务优化、12:成交客户
+        private String sex;//	性别:0:男、1:女、2:未知
+        private String licensenoflag;//营业执照:1:无、2:有
+        private String status;//状态:0:未受理、1:待开发、 2:邀约中、3:待维护、4:待上门、5:进件中、6:已上门、7:已签约、8:已回款、9:外地申请、10:废弃
+        private String education;//学历:1:无、2:大专、3:本科、4:硕士
+        private String remark;//客户备注
+        private String age;//年龄
+        private String profession;//职业,如:上班族 ,传具体的职业描述
+        private String incomeType; //打卡方式, 1:银行代发、2:现金发放
+        private int monthlyIncome; //月收入,工资
+    }
+
+    @Resource
+    private RedisUtil redisUtil;
+    /**
+     * 助贷对接 特殊处理,在调用撞库之前
+     * @param userInfo
+     * @param product
+     * @return
+     */
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit BaiYiJinFuCreditService 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));
+            String phoneMd5 = userInfo.getPhoneMd5() == null ? Md5Util.encoderByMd5(userInfo.getUserMobile()) : userInfo.getPhoneMd5();
+            CheckInfo checkInfo = new CheckInfo();
+            checkInfo.setMobile(phoneMd5);
+            String s = JSONObject.toJSONString(checkInfo);
+            String token = String.valueOf(redisUtil.get(String.format("zudai:token:%s:%s", "baiyi", "baiyitoken")));
+            if (StringUtils.isBlank(token)){
+                String responseUrl=null;
+                String tokenUrl=config.getString("tokenUrl");
+                UserTokenInfo userInfo1=new UserTokenInfo();
+                userInfo1.setUsername(config.getString("Username"));
+                userInfo1.setPassword(config.getString("Password"));
+                try{
+                    responseUrl =httpTemPlateClient.restTemplate().postForObject(tokenUrl,userInfo1, String.class);
+                }catch (Exception e){
+                    log.error("佰亿金服准入异常,异常信息:{}", e.getMessage(), e);
+                }
+                JSONObject jsonObject=JSONObject.parseObject(responseUrl);
+                if (jsonObject.getInteger("code")==200&&jsonObject.getString("token")!=null){
+                    token=jsonObject.getString("token");
+                    redisUtil.set(String.format("zudai:token:%s:%s", "baiyi", "baiyitoken"), jsonObject.getString("token"),3, TimeUnit.HOURS);
+                }else {
+                    return DataVo.fail("佰亿金服撞库失败,请联系系统管理员"+product.getPlanId());
+                }
+            }
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck BaiYiJinFuCreditService request userId:{}, url:{}, CheckInfo:{}",userInfo.getUserId(), url, s);
+            JSONObject response = null;
+            try{
+                Map<String, String> head = new HashMap<>();
+                head.put("Content-Type", "application/json");
+                head.put("Authorization", "Bearer "+token);
+                log.info("token{},值:{}",token,"Bearer "+token);
+                HttpResponse httpResponse = httpTemPlateClient.restTemplate().postForObject(url, null, null, head, null, s);
+                String responseStr = EntityUtils.toString(httpResponse.getEntity());
+                response = JSONObject.parseObject(responseStr);
+            }catch (Exception e){
+                log.error("佰亿金服准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck BaiYiJinFuCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.fail(product.getPlanId()+product.getPlanName());
+            }
+            if (response.getInteger("code")==200) {
+                return DataVo.success("佰亿金服撞库成功",product.getPlanId());
+            } else {
+                return DataVo.fail("佰亿金服撞库成功",product.getPlanId());
+            }
+        } catch (Exception e) {
+            return DataVo.fail("佰亿金服撞库失败,请联系系统管理员",product.getPlanId());
+        }
+    }
+
+    @Override
+    public ServCodeEnums getType() {
+        return ServCodeEnums.BaiYiJinFu;
+    }
+
+}

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

@@ -0,0 +1,260 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.hrsk.cloud.eg.app.constant.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.apache.commons.codec.binary.Base64;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+
+/**
+ * @Author Liu Tao
+ * @Date 2023 11 29 15 59
+ **/
+@Slf4j
+@Service
+public class BeiJingChongHeCreditService implements DockingApi {
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+
+    @Override
+    public ServCodeEnums  getType() {
+        return ServCodeEnums.BeiJingChongHe;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private Integer channel_code;//渠道编码
+        private String channel_secret_key;//渠道密钥
+        private String md5_phone;//md5加密后的手机号,32位小写
+    }
+
+
+    @Data
+    private static class ApplyInfo{
+        private Integer channel_code;
+
+        private String phone;
+
+        private String name;
+
+        private Integer sex;
+
+        private Integer age;
+
+        private Integer quota;
+
+        private Integer house;
+
+        private Integer car;
+
+        private Integer social_security;
+
+        private Integer pay_taxes;
+
+        private Integer credit_card;
+
+        private Integer business_license;
+
+        private Integer micro_loan;
+
+        private Integer accumulation_fund;
+
+        private Integer insurance_policy;
+
+        private Integer marriage;
+
+        private String accumulation_fund_area;
+
+        private Integer accumulation_fund_term;
+
+        private Integer accumulation_fund_count_quota;
+
+        private Integer accumulation_fund_month_quota;
+
+        private String work_unit;
+
+        private Integer purchase_method;
+
+        private Integer car_full_payment_quota;
+
+        private Integer car_present_price;
+
+        private Integer car_service_life;
+
+        private String vehicle_license_plate;
+
+        private String car_remark_info;
+
+        private String hava_issued;
+
+        private Integer issued_type;
+
+        private String issued_info;
+
+        private Integer house_situation;
+
+        private Integer total_price;
+
+        private String house_region;
+
+        private Integer house_area;
+
+        private Integer month_repayment;
+
+        private Integer house_present_price;
+
+        private String insurance_company;
+
+        private String insurance_type;
+
+        private Integer insurance_quota;
+
+        private Integer insurance_years;
+
+        private String insurance_remark;
+
+        private Integer credit_card_count;
+
+        private Integer credit_card_count_quota;
+
+        private Integer credit_card_used_quota;
+
+        private String credit_card_remark;
+
+        private Integer hava_credit_loan;
+
+        private Integer credit_loan_count_quota;
+
+        private Integer credit_loan_balance;
+
+        private Integer credit_loan_month_repayment;
+
+        private String credit_loan_remark;
+
+        private Integer housing_loan_quota;
+
+        private String id_card;
+
+        private Integer annual_income;
+
+        private Integer professional_identity;
+
+    }
+
+    /**
+     * 撞库 实现单个用户撞库
+     *
+     * @param userInfo
+     * @param product
+     * @return
+     *  {"channel_code":"34","checkUrl":"http://120.46.41.14:8888/api/customer/collisionLibrary","channel_secret_key":"HrYk20230829KYR6"}
+     */
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit BeiJingChongHeCreditService qualityCheck begin...userId:{}",userInfo.getUserId());
+            ProductBusinessApiInfoDo apiInfo = apiInfoService.getById(product.getApiId());
+            String configJson = apiInfo.getThreeSystemConfig();
+            JSONObject config = JSONObject.parseObject(configJson);
+            log.info("北京重和对接参数:{}", JSONObject.toJSONString(config));
+            CheckInfo checkInfo = new CheckInfo();
+            checkInfo.setMd5_phone((userInfo.getPhoneMd5() == null ? Md5Util.encoderByMd5(userInfo.getUserMobile()) : userInfo.getPhoneMd5()));
+            checkInfo.setChannel_code(Integer.valueOf(config.getString("channel_code")));
+            checkInfo.setChannel_secret_key(config.getString("channel_secret_key"));
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck BeiJingChongHeCreditService request userId:{}, url:{}, CheckInfo:{}",userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try{
+                response =httpTemPlateClient.restTemplate().postForObject(url,checkInfo, String.class);
+            }catch (Exception e){
+                log.error("北京重和准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck BeiJingChongHeCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(),product.getPlanName());
+            }
+            JSONObject jsonObject=JSONObject.parseObject(response);
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanId(),product.getPlanName());
+            }
+            if (jsonObject.getInteger("code") == 0) {
+                return DataVo.success("北京重和撞库成功",product.getPlanId());
+            } else {
+                return DataVo.fail("北京重和撞库成功",product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("北京重和撞库失败", e);
+            return DataVo.fail("北京重和撞库成功",product.getPlanId());
+        }
+
+    }
+
+
+    private static class ApiAesUtil {
+        public static String Encrypt(String sSrc, String sKey) throws Exception {
+            if (sKey == null) {
+                System.out.print("Key为空null");
+                return null;
+            }
+            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.encodeBase64String(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
+        }
+
+        public static String Decrypt(String sSrc, String sKey) throws Exception {
+            try {
+                if (sKey == null) {
+                    System.out.print("Key为空null");
+                    return null;
+                }
+                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.DECRYPT_MODE, skeySpec);
+                byte[] encrypted1 = Base64.decodeBase64(sSrc);//先用base64解密
+                try {
+                    byte[] original = cipher.doFinal(encrypted1);
+                    String originalString = new String(original,"utf-8");
+                    return originalString;
+                } catch (Exception e) {
+                    System.out.println(e.toString());
+                    return null;
+                }
+            } catch (Exception ex) {
+                System.out.println(ex.toString());
+                return null;
+            }
+        }
+
+    }
+
+}

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

@@ -0,0 +1,110 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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 09 16 36
+ **/
+@Slf4j
+@Component
+public class CangZhouSuYiRonogCreditService implements DockingApi {
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+
+    @Override
+    public ServCodeEnums  getType() {
+        return ServCodeEnums.CangZhouSuYiRong;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String mobile;//md5加密后的手机号,32位小写
+    }
+
+
+    @Data
+    private static class ApplyInfo {
+        private String promotion;//订单id
+        private String name;//姓名
+        private String mobile;//手机号码
+        private Integer age;//年龄
+        private Integer sex;//性别 (1男 2女)
+        private String city;//城市
+        private Integer is_house;//是否有房
+        private Integer is_car;//是否有车
+        private Integer is_company;//是否有车
+        private Integer is_credit;//是否信用卡
+        private Integer is_insurance;//是否有商业保险
+        private Integer is_social;//是否有社保
+        private Integer is_fund;//是否有公积金
+        private Integer is_work;//是打卡工资
+        private Integer is_tax;//是否有营业税
+        private Integer webank;//是否有微粒贷
+        private String money_demand;//贷款金额 万
+        private String content;
+
+    }
+
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit CangZhouSuYiRongCreditService 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.setMobile(phoneMd5);
+
+            JSONObject json=new JSONObject();
+            json.put("mobile",checkInfo.getMobile());
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck CangZhouSuYiRongCreditService request userId:{}, url:{}, CheckInfo:{}",userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try{
+                response =httpTemPlateClient.restTemplate().postForObject(url,json, String.class);
+            }catch (Exception e){
+                log.error("沧州速易融准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck CangZhouSuYiRongCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(),product.getPlanName());
+            }
+            JSONObject jsonObject=JSONObject.parseObject(response);
+
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanId(),product.getPlanName());
+            }
+            if (jsonObject.getInteger("code") ==0 ) {
+
+                return DataVo.success(0, "沧州速易融撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(1, "沧州速易融撞库失败,请联系系统管理员", product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("沧州速易融撞库失败", e);
+            return  DataVo.fail( "沧州速易融撞库失败,请联系系统管理员", product.getPlanId());
+        }
+
+    }
+
+}

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

@@ -0,0 +1,178 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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;
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+
+/**
+ * @Author zjc
+ * @Date 2024 07 09 16 36
+ **/
+@Slf4j
+@Component
+public class CheYouRongCreditService implements DockingApi {
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+
+
+    @Override
+    public ServCodeEnums getType() {
+        return ServCodeEnums.JiangXiCheYouRong;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String phoneMD5 ;//md5加密后的手机号,32位小写
+    }
+
+
+    @Data
+    private static class ApplyInfo {
+        private String amount;//金额
+        private String cityName;//城市
+        private String cusName  ;//姓名
+        private String phone;//手机号码
+        private String carStatus;//车
+        private String carModel;//车辆品牌
+        private String carAge;//车龄
+        private String dc;
+        private String remark;//备注
+
+
+    }
+    @Data
+    private static class RquestParam {
+        private String source;//渠道来源
+        private String file_id;//
+        private String data;//	AES加密 (AES/ECB/PKCS5Padding)
+        private String sign;
+        private String timestamp;
+
+
+    }
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit JiangXiCheYouRongCreditService 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.setPhoneMD5(phoneMd5);
+
+
+            String url = config.getString("checkUrl");
+
+            log.info("credit qualityCheck JiangXiCheYouRongCreditService request userId:{}, url:{}, checkInfo:{}",userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try{
+                response =httpTemPlateClient.restTemplate().postForObject(url,checkInfo, String.class);
+            }catch (Exception e){
+                log.error("江西车优融准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck JiangXiCheYouRongCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(),product.getPlanName());
+            }
+            JSONObject jsonObject=JSONObject.parseObject(response);
+
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            if (jsonObject.getBoolean("data")) {
+                return DataVo.success(0, "江西车优融撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(1, "江西车优融撞库失败,请联系系统管理员", product.getPlanName());
+            }
+        } catch (Exception e) {
+            log.error("江西车优融撞库失败", e);
+            return DataVo.fail(1, "江西车优融撞库失败,请联系系统管理员", product.getPlanId());
+        }
+
+    }
+
+
+    /**
+     * 加密
+     * @param sSrc 需要加密的字符串
+     * @param sKey 此处使用AES-128-ECB加密模式,key需要为16位。s
+     * @return
+     * @throws Exception
+     */
+    public static String encrypt(String sSrc, String sKey) throws Exception {
+
+        // 判断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 new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
+        return  new org.apache.commons.codec.binary.Base64().encodeToString(encrypted);
+    }
+
+    /**
+     * 解密
+     * @param sSrc 需要解密的字符串
+     * @param sKey 此处使用AES-128-ECB加密模式,key需要为16位。
+     * @return
+     * @throws Exception
+     */
+    public static String decrypt(String sSrc, String sKey) throws Exception {
+        try {
+            // 判断Key是否正确
+            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.DECRYPT_MODE, skeySpec);
+            byte[] encrypted1 = new org.apache.commons.codec.binary.Base64().decode(sSrc);//先用base64解密
+            try {
+                byte[] original = cipher.doFinal(encrypted1);
+                String originalString = new String(original,"utf-8");
+                return originalString;
+            } catch (Exception e) {
+                System.out.println(e.toString());
+                return null;
+            }
+        } catch (Exception ex) {
+            System.out.println(ex.toString());
+            return null;
+        }
+    }
+
+
+}

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

@@ -0,0 +1,137 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.apache.commons.codec.binary.Base64;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+
+/**
+ * @Author Liu Tao
+ * @Date 2024 07 05 16 36
+ **/
+@Slf4j
+@Component
+public class ChengDuYiHeShengCreditService implements DockingApi {
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+    @Override
+    public ServCodeEnums getType() {
+        return ServCodeEnums.ChengDuYiHeSheng;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String md5;//md5加密后的手机号,32位小写
+    }
+
+
+    @Data
+    private static class ApplyInfo {
+        private String order_id;//订单id
+        private String name;//姓名
+        private Integer age;//年龄
+        private String telephone;//手机号
+        private String gender;//性别 (1男 2女)
+        private String province;//省份
+        private String city;//城市
+        private String loan_time;//贷款时间//月
+        private Integer loan_amount;//贷款金额 万
+        private String sec_code;//安全码
+        private Integer has_job;//是否有工作 1有,2没有
+        private Integer has_income;//是否有收入 1有2没有
+        private Integer has_house;//是否有房
+        private Integer has_car;//是否有车
+        private Integer has_socins;//是否有社保
+        private Integer has_fund;//是否有公积金
+        private Integer has_ins;//是否有商业保险
+        private Integer has_cc;//是否有信用卡,1有,2没有
+        private Integer has_ovd;//是否有逾期,1有,2没有
+        private Integer has_ent;//是否有企业,1有,2没有
+        private Integer has_ali_score;//是否有芝麻分,0,0-599,1.600-649,2.650-699,3.700+
+    }
+
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit ChengDuYiHeShengCreditService 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.setMd5(phoneMd5);
+
+            JSONObject json=new JSONObject();
+            json.put("appid", String.valueOf(config.getString("appid")));
+            json.put("data", encrypt(JSON.toJSONString(checkInfo), config.getString("key")));
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck ChengDuYiHeShengCreditService request userId:{}, url:{}, CheckInfo:{}",userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try{
+                response =httpTemPlateClient.restTemplate().postForObject(url,json, String.class);
+            }catch (Exception e){
+                log.error("成都亿禾生准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck ChengDuYiHeShengCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(),product.getPlanName());
+            }
+            JSONObject jsonObject=JSONObject.parseObject(response);
+
+            if (jsonObject == null) {
+                return DataVo.timeout( product.getPlanId(),product.getPlanName());
+            }
+            if (jsonObject.getInteger("code") ==200 ) {
+                return DataVo.success(0, "成都亿禾生撞库成功", product.getPlanId());
+            } else {
+                return DataVo.success(1, "成都亿禾生撞库失败,请联系系统管理员", product.getPlanId());
+            }
+        } catch (Exception e) {
+            log.error("成都亿禾生撞库失败", e);
+            return DataVo.success(1, "成都亿禾生撞库失败,请联系系统管理员", product.getPlanId());
+        }
+
+    }
+    public static String encrypt(String sSrc, String sKey) {
+        try {
+            if (sKey == null) {
+                System.out.print("Key为空null");
+                return null;
+            }
+            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.encodeBase64String(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
+        } catch (Exception e) {
+             return null;
+        }
+
+    }
+
+
+}

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

@@ -0,0 +1,136 @@
+package com.hrsk.cloud.eg.app.threedocking.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.hrsk.cloud.eg.app.constant.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.Component;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+
+
+/**
+ * @Author Liu Tao
+ * @Date 2024 01 02 14 09
+ **/
+@Service
+@Slf4j
+public class ChengHongHuiCreditService implements DockingApi {
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+
+    @Override
+    public ServCodeEnums  getType() {
+        return ServCodeEnums.ChengHongHui;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String tel;//手机号码md5(32位,字母小写)
+    }
+
+
+    @Data
+    private static class ApplyInfo{
+        private Integer source_id;//渠道号(我方分配)
+        private String source_name;//渠道名称(中文)
+        private String name;//客户姓名
+        private String mobile;//手机号
+        private String city;//城市(不包含市,比如“杭州市”应该是“杭州”)
+        private String zhimafen;//芝麻分
+        private String wld;//微粒贷
+        private String baitiao_amount;//白条额度
+        private String huabei_amount;//花呗额度
+        private String car;//车
+        private Integer age;//年龄(如:39)
+        private String job;//工作
+        private Integer job_type;//职业 1:自由职业 2:上班族 3:个体户 4:企业主 5:无固定职业
+        private Integer monthly_income;//月收入(单位:元)
+        private String house;//房
+        private String baodan_is;//保单
+        private String sex;//性别(“男”或“女”)
+        private Integer money;//贷款额度(如:20,即单位为万)
+        private String shebao;//社保
+        private String gongjijin;//公积金
+        private String isbankpay;//银行代发
+        private String ip;//客户实际申请IP
+        private String credit_card;//信用卡
+        private Integer time;//该条数据实际申请时间(10位数字,如:1467100609)
+        private Integer education;//学历 1:高中及以下 2:专科 3:本科 4:硕士 5:博士及以上
+        private String use_remark;//贷款用途
+    }
+
+    @Override
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+//            log.info("credit ChengHongHuiCreditService 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();
+            checkInfo.setTel((userInfo.getPhoneMd5() == null ? Md5Util.encoderByMd5(userInfo.getUserMobile()) : userInfo.getPhoneMd5()));
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck ChengHongHuiCreditService request userId:{}, url:{}, CheckInfo:{}", userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try {
+                response =httpTemPlateClient.restTemplate().postForObject(url,checkInfo, String.class);
+            } catch (Exception e) {
+                log.error("晨宏汇准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck ChengHongHuiCreditService 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 ChengHongHuiCreditService response userId:{}, jsonObject:{}", userInfo.getUserId(), jsonObject);
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            if (jsonObject.getString("resStatus").equals("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 plainText, String key, String iv) throws Exception {
+        // 将 key 转换为 SecretKey 对象
+        SecretKey secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
+        // 将 IV 字符串转换为字节数组
+        byte[] ivBytes = iv.getBytes(StandardCharsets.UTF_8);
+        // 生成 IV
+        // 创建 Cipher 对象
+        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+        cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(ivBytes));
+        // 加密明文
+        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
+        // 将加密后的字节转换为 Base64 编码
+        return Base64.getEncoder().encodeToString(encryptedBytes);
+    }
+
+}

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

@@ -0,0 +1,151 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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;
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+
+/**
+ * @Author Liu Tao
+ * @Date 2024 05 07 10 38
+ **/
+@Slf4j
+@Component
+public class ChongQinDongRunCreditService implements DockingApi {
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+
+
+
+    @Override
+    public ServCodeEnums getType() {
+        return ServCodeEnums.ChongQinDongRunCreditService;
+    }
+
+    @Data
+    private static class CheckInfo {
+        private String sourceCode;// 渠道标识
+        private String accessKey;// 渠道访问密钥
+        private String phoneMd5;// 手机号MD5
+    }
+
+    @Data
+    private static class ApplyInfo {
+        private String realName;//姓名
+        private Integer age; //年龄
+        private String phone; //手机号
+        private String sex; //性别
+        private String city;//城市
+        private Integer profession;//职业
+        private Integer payoffType;//工资发放形式
+        private String idcard;//身份证号码
+        private Integer sesameScore;//芝麻分
+        private Integer loanMoney;//借款金额(单位:万元)
+        private Integer loanExpiresMonth;//借款期限
+        private Integer loanUse; //借款用途
+        private Integer gjjScop; //公积金
+        private Integer sbScop; //社保
+        private String incomeMonth;//月收入
+        private Integer house;//名下房产
+        private Integer car;//车产情况
+        private Integer baodanScop;//保单范围
+        private Integer credit;//信用情况
+        private Integer isLoans;//微粒贷
+        private Integer manageYears;//经营年限
+        private Integer turnover;//总经营流水
+        private Integer turnoverPublic;//对公账户经营收入
+        private Integer workingYears;//当前单位工龄 int workingYears
+        private Integer registAddress;//经营注册地
+        private Integer hasBusinessLicense;//是否办理过营业执照
+        private Integer education;//学历
+        private Integer creditCard;//信用卡
+        private Integer remarks;//备注
+
+    }
+
+    @Data
+    private static class RequestData{
+        private String sourceCode;// 渠道标识
+        private String accessKey;// 渠道访问密钥
+        private String dataStr;// 加密后参数
+    }
+
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit ChongQinDongRunCreditService 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));
+            String phoneMd5 = userInfo.getPhoneMd5() == null ? Md5Util.encoderByMd5(userInfo.getUserMobile()) : userInfo.getPhoneMd5();
+            CheckInfo checkInfo = new CheckInfo();
+            checkInfo.setAccessKey(config.getString("AccessKey"));
+            checkInfo.setSourceCode(config.getString("SourceCode"));
+            checkInfo.setPhoneMd5(phoneMd5);
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck ChongQinDongRunCreditService request userId:{}, url:{}, CheckInfo:{}", userInfo.getUserId(), url, phoneMd5);
+            String response = null;
+            try {
+                response = httpTemPlateClient.restTemplate().postForObject(url, checkInfo, String.class);
+            } catch (Exception e) {
+                log.error("重庆东润准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck ChongQinDongRunCreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            JSONObject jsonObject = JSONObject.parseObject(response);
+            JSONObject data =JSONObject.parseObject(jsonObject.getString("data"));
+            if (jsonObject.getString("code").equals("1")&&data.getBoolean("phoneMd5Exist")!=null&&!data.getBoolean("phoneMd5Exist")) {
+                return DataVo.success (0, "重庆东润撞库成功", product.getPlanId());
+            } else {
+                return DataVo.fail(1, "重庆东润撞库失败,请联系系统管理员", product.getPlanId());
+            }
+        } catch (Exception e) {
+            return DataVo.fail(1, "重庆东润撞库失败,请联系系统管理员", product.getPlanId());
+        }
+    }
+
+    public static String encrypt(String plainText, String key, String iv)  {
+        try {
+            // 将 key 转换为 SecretKey 对象
+            SecretKey secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
+            // 将 IV 字符串转换为字节数组
+            byte[] ivBytes = iv.getBytes(StandardCharsets.UTF_8);
+            // 生成 IV
+            // 创建 Cipher 对象
+            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+            cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(ivBytes));
+            // 加密明文
+            byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
+            // 将加密后的字节转换为 Base64 编码
+            return Base64.getEncoder().encodeToString(encryptedBytes);
+        } catch (Exception e) {
+            return "";
+        }
+
+    }
+
+
+}

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

@@ -0,0 +1,147 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.apache.commons.codec.binary.Base64;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import javax.crypto.Cipher;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESedeKeySpec;
+import javax.crypto.spec.IvParameterSpec;
+import java.nio.charset.StandardCharsets;
+import java.security.Key;
+
+/**
+ * @Author Liu Tao
+ * @Date 2023 11 08 10 29
+ **/
+@Slf4j
+@Service
+public class ChongQingRuiShangXinCreditService implements DockingApi {
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+
+    @Override
+    public ServCodeEnums  getType() {
+        return ServCodeEnums.ChongQingRuiShuangXin;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String mobileEncrypt;//手机号MD5加密32位小写字符串
+        private String appid;//数据标识,接收方提供
+    }
+    @Data
+    private static class ApplyInfo{
+        private String appid; //数据标识,接收方提供
+        private String name; //姓名
+        private String mobile; //手机号
+        private String cardNo; //身份证
+        private Integer gender; //性别; 0-女 1-男
+        private String city; //城市(格式:xx市)
+        private Integer amount; //申请金额(万)
+        private String period; //申请期限(月)
+        private Integer monthlyIncome; //月收入(元)
+        private Integer age; //年龄(18-99)
+        private Integer houseType; //房产; 0-无 1-有
+        private Integer carType; //车产; 0-无 1-有
+        private Integer socialInsurance; //社保; 0-无 1-有
+        private Integer commercialInsurance; //	商业保险; 0-无 1-有
+        private Integer accumulationFund; //公积金; 0-无 1-有
+        private Integer entrepreneur; //是否企业主; 0-否 1-是
+        private String credit; //信用情况
+        private String zhima; //芝麻分
+        private String additional; //其他信息
+    }
+
+
+    /**
+     * 撞库 实现单个用户撞库
+     *
+     * @param userInfo
+     * @param product
+     * @return
+    {
+    "checkUrl": "https://rsx.icl-network.com/api/data/common/check",
+    "applyUrl": "https://rsx.icl-network.com/api/data/common/encrypt_push",
+    "appid": "SQVEySSsMKOTialcatYIDtWmvFzwkcJM",
+    "key": "xj9pgn0n972cd2wy0u5s88gz",
+    "iv": "18521959"
+    }
+     */
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit ChongQingRuiShangXinCreditService 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.setMobileEncrypt(phoneMd5);
+            checkInfo.setAppid(config.getString("appid"));
+            String url = config.getString("checkUrl");
+            log.info("credit qualityCheck ChongQingRuiShangXinCreditService request userId:{}, url:{}, CheckInfo:{}",userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try{
+                response =httpTemPlateClient.restTemplate().postForObject(url,checkInfo, String.class);
+            }catch (Exception e){
+                log.error("重庆睿双鑫准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck ChongQingRuiShangXinCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getApiId(),product.getPlanName());
+            }
+            JSONObject jsonObject=JSONObject.parseObject(response);
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getApiId(),product.getPlanName());
+            }
+            if (jsonObject.getString("code").equals("200")) {
+                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());
+        }
+
+    }
+
+
+//3DES算法key,iv
+    public static String encrypt(String data,String key,String iv) throws Exception {
+        byte[] encrpyted = tripleDES(Cipher.ENCRYPT_MODE,data.getBytes(StandardCharsets.UTF_8), key.getBytes(),iv.getBytes());
+        return new String(Base64.encodeBase64(encrpyted));
+    }
+
+    private static byte[] tripleDES(int opmode, byte[] data, byte[] secretKey,byte[] iv) throws
+            Exception {
+        return cipher("DESede", "DESede/CBC/PKCS5Padding", opmode, data, iv, secretKey);
+    }
+
+    private static byte[] cipher(String algorithm, String transformation, int opmode, byte[] data, byte[] iv, byte[] secretKey) throws Exception {
+        Key key = SecretKeyFactory.getInstance(algorithm).generateSecret(new
+                DESedeKeySpec(secretKey));
+        IvParameterSpec spec = new IvParameterSpec(iv);
+        Cipher cipher = Cipher.getInstance(transformation);
+        cipher.init(opmode, key, spec);
+        return cipher.doFinal(data);
+    }
+}

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

@@ -0,0 +1,119 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author zjc
+ * @Date 2024 07 09 16 36
+ **/
+@Slf4j
+@Service
+public class ChongQingYiYueCreditService implements DockingApi {
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+    @Override
+    public ServCodeEnums getType() {
+        return ServCodeEnums.ChongQingYiYue;
+    }
+
+    @Data
+    private static class CheckInfo{
+        private String mobile;//md5加密后的手机号,32位小写
+    }
+
+
+    @Data
+    private static class ApplyInfo {
+        private Integer file_id;//渠道id
+        private String mobile;//手机号码
+        private String name;//姓名
+        private Integer age;//年龄
+        private Integer sex;//性别 (1男 2女)
+        private String city;//城市
+        private Integer money_demand;//贷款金额 元
+        private Integer is_house;//是否有房
+        private Integer is_car;//是否有车
+        private Integer is_company;//是否有公司营业执照 1:是,2:否
+        private Integer is_credit;//是否信用卡
+        private Integer is_insurance;//是否有商业保险
+        private Integer is_social;//是否有社保
+        private Integer is_fund;//是否有公积金
+        private Integer is_work;//是打卡工资
+        private Integer is_tax;//是否有营业税
+        private Integer webank;//微粒贷额度(单位:元)
+        private String remarks;//备注
+
+
+    }
+    @Data
+    private static class RquestParam {
+        private String source;//渠道来源
+        private String file_id;//
+        private String data;//	AES加密 (AES/ECB/PKCS5Padding)
+        private String sign;
+        private String timestamp;
+
+    }
+
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit ChongQingYiYueCreditService 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.setMobile(phoneMd5);
+
+
+            String url = config.getString("checkUrl");
+
+            log.info("credit qualityCheck ChongQingYiYueCreditService request userId:{}, url:{}, checkInfo:{}",userInfo.getUserId(), url, checkInfo);
+            String response = null;
+            try{
+                response =httpTemPlateClient.restTemplate().postForObject(url,checkInfo, String.class);
+            }catch (Exception e){
+                log.error("重庆易悦准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck ChongQingYiYueCreditService response userId:{}, result:{}",userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(),product.getPlanName());
+            }
+            JSONObject jsonObject=JSONObject.parseObject(response);
+
+            if (jsonObject == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            if (jsonObject.getInteger("code") ==0 ) {
+                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());
+        }
+
+    }
+
+
+}

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

@@ -0,0 +1,106 @@
+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.ServCodeEnums;
+import com.hrsk.cloud.eg.app.threedocking.DockingApi;
+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.vo.response.DataVo;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Objects;
+
+/**
+ * @Descrption
+ * @Author: chend
+ * @Date: 2023/2/6
+ * @Version V1.0
+ **/
+@Service
+@Slf4j
+public class ChuanjinCreditService implements DockingApi {
+
+    private final static String qualityCheckPath = "customers/check/MD5Encrypt";
+    private final static String applyPath = "customers";
+
+    @Resource
+    private ProductBusinessApiInfoService apiInfoService;
+
+    @Resource
+    private RetryRestTemplate httpTemPlateClient;
+    @Override
+    public ServCodeEnums getType() {
+        return ServCodeEnums.ChuanJin;
+    }
+    @Data
+    private static class CheckInfo {
+        private String phone_encrypt;
+
+        private String company_id;
+    }
+
+    @Data
+    private static class ResResult {
+        private Integer data;
+
+        private Integer code;
+
+        private String msg;
+    }
+
+    @Data
+    private static class ApplyInfo {
+        private String name;
+        private String phone;
+        private String gender;
+        private Integer age;
+        private Integer limit;
+        //        private String income_year;
+        private String provider_code;
+        private String education;
+        private String career;
+        private String company_id;
+    }
+
+
+    public DataVo qualityCheck(UserInBaseInfoDto userInfo, PlanDto product) {
+        try {
+            log.info("credit ChuanjinCreditService 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));
+            String url = config.getString("url") + qualityCheckPath;
+            ResResult response = null;
+            try {
+
+                url = url + "?phone_encrypt=" + userInfo.getPhoneMd5() + "&company_id=" + config.getString("channelSource");
+                log.info("credit qualityCheck ChuanjinCreditService request userId:{}, url:{}", userInfo.getUserId(), url);
+                response = httpTemPlateClient.restTemplate().postForObject(url, null, ResResult.class);
+            } catch (Exception e) {
+                log.error("川金准入异常,异常信息:{}", e.getMessage(), e);
+            }
+            log.info("credit qualityCheck ChuanjinCreditService response userId:{}, result:{}", userInfo.getUserId(), response);
+            if (response == null) {
+                return DataVo.timeout(product.getPlanId(), product.getPlanName());
+            }
+            return Objects.equals(0, response.getData()) ? DataVo.success(0, "川金撞库成功", product.getPlanId())
+                    : DataVo.fail(1, response.getMsg(), product.getPlanId());
+
+        } catch (Exception e) {
+            log.error("川金撞库失败", e);
+            return DataVo.fail(1, "川金撞库失败,请联系系统管理员", product.getPlanId());
+        }
+    }
+
+}

+ 63 - 2
egress-gateway-service-client/src/main/java/com/hrsk/cloud/eg/vo/response/DataVo.java

@@ -3,6 +3,7 @@ package com.hrsk.cloud.eg.vo.response;
 import com.hrsk.cloud.eg.constant.ResultCodeEnum;
 import com.hrsk.cloud.eg.constant.ResultCodeEnum;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.util.Objects;
 
 
 /**
 /**
  * @author zhangyy
  * @author zhangyy
@@ -10,15 +11,17 @@ import java.io.Serializable;
  * @description: DataVo  DefaultResponseVo#data 中返回的信息多用与撞库接口返回
  * @description: DataVo  DefaultResponseVo#data 中返回的信息多用与撞库接口返回
  * @date 2024/8/28 11:49
  * @date 2024/8/28 11:49
  */
  */
-public class DataVo implements Serializable {
+public class  DataVo<T> implements Serializable {
 
 
     /**
     /**
-     * 状态 0 成功 1 失败 参考true 和false
+     * 状态 0 成功 1 失败 2 超时
      * */
      * */
     private Integer status;
     private Integer status;
 
 
     private String msg;
     private String msg;
 
 
+    private T data;
+
 
 
     public DataVo(Integer status, String msg) {
     public DataVo(Integer status, String msg) {
         this.status = status;
         this.status = status;
@@ -28,10 +31,60 @@ public class DataVo implements Serializable {
 
 
     }
     }
 
 
+    public DataVo(Integer status, String msg, T data) {
+        this.status = status;
+        this.msg = msg;
+        this.data = data;
+    }
+
+    public static<T>   DataVo <T>   dataVo(Integer status,String msg,T data){
+        return createDefaulDataVo(status,msg,data);
+    }
+    public static<T>   DataVo <T>   success(String msg,T data){
+        return createDefaulDataVo(0,msg,data);
+    }
+    public static<T>   DataVo <T>   success(Integer status,String msg,T data){
+        return createDefaulDataVo(status,msg,data);
+    }
+
+    public static<T>   DataVo <T>   fail(String msg,T data){
+        return createDefaulDataVo(1,msg,data);
+    }
+    public static<T>   DataVo <T>   fail(Integer status,String msg,T data){
+        return createDefaulDataVo(status,msg,data);
+    }
+
+    public static <T> DataVo<T> createDefaulDataVo(Integer code, String message, T data){
+        DataVo<T> responseVo = new DataVo<T>();
+        if(code!=null)
+            responseVo.setStatus(code);
+        if(!Objects.isNull(message))
+            responseVo.setMsg(message);
+        if(data!=null)
+          responseVo.setData(data);
+        return responseVo;
+    }
+
+    public static DataVo timeout(String msg){
+        return new DataVo(2,msg);
+    }
+
+
+    public static <T> DataVo <T> timeout(T data,String msg){
+        return new DataVo(2,msg,data);
+    }
+
     public static DataVo success(){
     public static DataVo success(){
         return new DataVo(0,"撞库成功");
         return new DataVo(0,"撞库成功");
     }
     }
 
 
+    public static DataVo success(String msg ){
+        return new DataVo(0,msg);
+    }
+
+    public static DataVo success(Integer status, String msg){
+        return new DataVo(status,msg);
+    }
 
 
     public static DataVo success(Integer status){
     public static DataVo success(Integer status){
         return new DataVo(status,"成功");
         return new DataVo(status,"成功");
@@ -60,4 +113,12 @@ public class DataVo implements Serializable {
     public void setMsg(String msg) {
     public void setMsg(String msg) {
         this.msg = msg;
         this.msg = msg;
     }
     }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
 }
 }

+ 0 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/payload/ApiJsonPayloadResolver.java

@@ -3,7 +3,6 @@ package com.hrsk.cloud.eg.domain.api.resolver.payload;
 import com.alibaba.cola.exception.BizException;
 import com.alibaba.cola.exception.BizException;
 import com.google.gson.*;
 import com.google.gson.*;
 import com.hrsk.cloud.eg.domain.api.ApiContext;
 import com.hrsk.cloud.eg.domain.api.ApiContext;
-import com.hrsk.cloud.eg.domain.api.ApiResult;
 import com.hrsk.cloud.eg.domain.api.ValueObject;
 import com.hrsk.cloud.eg.domain.api.ValueObject;
 import com.hrsk.cloud.eg.domain.common.utils.GsonUtils;
 import com.hrsk.cloud.eg.domain.common.utils.GsonUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;

+ 0 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/api/resolver/result/ApiJsonResultResolver.java

@@ -3,7 +3,6 @@ package com.hrsk.cloud.eg.domain.api.resolver.result;
 import com.alibaba.cola.exception.BizException;
 import com.alibaba.cola.exception.BizException;
 import com.google.gson.*;
 import com.google.gson.*;
 import com.hrsk.cloud.eg.domain.api.ApiContext;
 import com.hrsk.cloud.eg.domain.api.ApiContext;
-import com.hrsk.cloud.eg.domain.api.ApiResult;
 import com.hrsk.cloud.eg.domain.api.ValueObject;
 import com.hrsk.cloud.eg.domain.api.ValueObject;
 import com.hrsk.cloud.eg.domain.common.utils.GsonUtils;
 import com.hrsk.cloud.eg.domain.common.utils.GsonUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;

+ 0 - 11
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/apiGateWayImpl/ApiDisPlayGatewayImpl.java

@@ -1,11 +0,0 @@
-package com.hrsk.cloud.eg.infrastructure.apiGateWayImpl;
-
-/**
- * @author zhangyy
- * @version 1.0
- * @description: ApiDisPlayGatewayImpl
- * @date 2024/9/10 10:22
- */
-public class ApiDisPlayGatewayImpl extends ApiGatewayImpl {
-
-}

+ 1 - 3
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/apiGateWayImpl/ApiGatewayImpl.java

@@ -1,14 +1,12 @@
 package com.hrsk.cloud.eg.infrastructure.apiGateWayImpl;
 package com.hrsk.cloud.eg.infrastructure.apiGateWayImpl;
 
 
-import com.alibaba.fastjson2.JSONObject;
 import com.hrsk.cloud.eg.domain.api.ApiGateway;
 import com.hrsk.cloud.eg.domain.api.ApiGateway;
 import com.hrsk.cloud.eg.dto.data.CheckIntoParamDto;
 import com.hrsk.cloud.eg.dto.data.CheckIntoParamDto;
-import com.hrsk.cloud.eg.infrastructure.business.HttpRequestCheckIntoService;
+import com.hrsk.cloud.eg.infrastructure.request.HttpRequestCheckIntoService;
 import com.hrsk.cloud.eg.vo.response.DataVo;
 import com.hrsk.cloud.eg.vo.response.DataVo;
 import com.hrsk.cloud.eg.vo.response.DefaultResponseVo;
 import com.hrsk.cloud.eg.vo.response.DefaultResponseVo;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
-
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 
 
 /**
 /**

+ 0 - 13
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/checkIntoApi/CheckIntoDisplayApi.java

@@ -1,13 +0,0 @@
-package com.hrsk.cloud.eg.infrastructure.checkIntoApi;
-
-
-/**
- * @author zhangyy
- * @version 1.0
- * @description: CheckIntoDisplayApi 直接对接api 的方法
- * @date 2024/9/10 10:21
- */
-public interface CheckIntoDisplayApi  {
-
-
-}

+ 1 - 3
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/config/MyMetaObjectHandler.java

@@ -2,11 +2,9 @@ package com.hrsk.cloud.eg.infrastructure.config;
 
 
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.hrsk.cloud.eg.constant.GlobalDataStatusEnum;
 import com.hrsk.cloud.eg.constant.GlobalDataStatusEnum;
-import com.hrsk.cloud.eg.domain.common.utils.SnowflakeIdWorker;
+import com.hrsk.cloud.eg.infrastructure.utils.SnowflakeIdWorker;
 import com.hrsk.cloud.eg.infrastructure.repository.database.entity.BaseDo;
 import com.hrsk.cloud.eg.infrastructure.repository.database.entity.BaseDo;
 import org.apache.ibatis.reflection.MetaObject;
 import org.apache.ibatis.reflection.MetaObject;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.util.Date;
 import java.util.Date;

+ 1 - 1
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/business/HttpRequestCheckIntoService.java → egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/request/HttpRequestCheckIntoService.java

@@ -1,4 +1,4 @@
-package com.hrsk.cloud.eg.infrastructure.business;
+package com.hrsk.cloud.eg.infrastructure.request;
 
 
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
 import com.hrsk.cloud.eg.domain.api.Api;
 import com.hrsk.cloud.eg.domain.api.Api;

+ 1 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/common/utils/BeanCopyUtils.java → egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/BeanCopyUtils.java

@@ -1,4 +1,4 @@
-package com.hrsk.cloud.eg.domain.common.utils;
+package com.hrsk.cloud.eg.infrastructure.utils;
 
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanWrapper;
 import org.springframework.beans.BeanWrapper;

+ 196 - 0
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/DateUtil.java

@@ -0,0 +1,196 @@
+package com.hrsk.cloud.eg.infrastructure.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * @author zhangyy
+ * @version 1.0
+ * @description: Dateutil
+ * @date 2024/9/10 15:29
+ */
+public class DateUtil {
+
+    /**
+     * Get time string.
+     *
+     * @return the string
+     */
+    public static String getTime() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = new Date();
+        return sdf.format(date);
+    }
+
+    public static String getTime(Date date) {
+        if (null == date) {
+            return null;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(date);
+    }
+
+    public static String getDate() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        return sdf.format(date);
+    }
+
+    public static String getYesterday() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        return sdf.format(dayAddNum(date, -1));
+    }
+
+    public static String getTomorrow() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        return sdf.format(dayAddNum(date, 1));
+    }
+
+    public static String getDateTwo() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        return sdf.format(date);
+    }
+
+    public static Date convertString2Date(String date1, String format) {
+        SimpleDateFormat sdf1 = new SimpleDateFormat(format);
+        Date parse = null;
+        try {
+            parse = sdf1.parse(date1);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return parse;
+    }
+
+    public static Date getTimeDate(String format) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.parse(format);
+    }
+
+    public static Date getTimeDateWithDay(String format) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.parse(format);
+    }
+
+    public static String getDayStr(){
+        Date date = new Date();
+        SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd");
+        return sdf.format(date);
+    }
+
+    public static String getFormatDate(Date... dates) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        Date date = new Date();
+        if (dates.length > 0) {
+            date = dates[0];
+        }
+        return sdf.format(date);
+    }
+
+    public static String getFormatDate(Date date, String format) {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+
+        return sdf.format(date);
+    }
+
+    public static String getFormatDate10(Date date) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(date);
+    }
+
+    public static String getFormatDate11(Date date) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
+        return sdf.format(date);
+    }
+
+
+    public static String getFormatDate5(Date date) {
+        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
+        return sdf.format(date);
+    }
+
+    public static boolean compare(String time1, String time2) throws ParseException {
+        //如果想比较日期则写成"yyyy-MM-dd"就可以了
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+        //将字符串形式的时间转化为Date类型的时间
+        Date a = sdf.parse(time1);
+        Date b = sdf.parse(time2);
+        //Date类的一个方法,如果a早于b返回true,否则返回false
+        if (a.before(b))
+            return true;
+        else
+            return false;
+		/*
+		 * 如果你不喜欢用上面这个太流氓的方法,也可以根据将Date转换成毫秒
+		if(a.getTime()-b.getTime()<0)
+			return true;
+		else
+			return false;
+		*/
+    }
+
+    public static boolean compare(String time1, Date b) throws ParseException {
+        //如果想比较日期则写成"yyyy-MM-dd"就可以了
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+        //将字符串形式的时间转化为Date类型的时间
+        Date a = sdf.parse(time1);
+
+        //Date类的一个方法,如果a早于b返回true,否则返回false
+        if (a.before(b))
+            return true;
+        else
+            return false;
+    }
+
+    /**
+     * @param time 时间
+     * @param num  加的数,-num就是减去
+     * @return 减去相应的数量的天的日期
+     * @throws ParseException Date
+     */
+    public static Date dayAddNum(Date time, Integer num) {
+        //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        //Date date = format.parse(time);
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(time);
+        calendar.add(Calendar.DAY_OF_MONTH, num);
+        Date newTime = calendar.getTime();
+        return newTime;
+    }
+
+    /**
+     * @param time 时间
+     * @param num  加的数,-num就是减去
+     * @return 减去相应的数量的天的日期
+     * @throws ParseException Date
+     */
+    public static Date yearAddNum(Date time, Integer num) {
+        //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        //Date date = format.parse(time);
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(time);
+        calendar.add(Calendar.DAY_OF_YEAR, num);
+        Date newTime = calendar.getTime();
+        return newTime;
+    }
+
+    public static Date monthAddNum(Date time, Integer num) {
+        //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        //Date date = format.parse(time);
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(time);
+        calendar.add(Calendar.MONTH, num);
+        Date newTime = calendar.getTime();
+        return newTime;
+    }
+
+
+}

+ 1 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/common/utils/GsonUtils.java → egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/GsonUtils.java

@@ -1,4 +1,4 @@
-package com.hrsk.cloud.eg.domain.common.utils;
+package com.hrsk.cloud.eg.infrastructure.utils;
 
 
 import com.google.gson.Gson;
 import com.google.gson.Gson;
 
 

+ 44 - 0
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/Md5Util.java

@@ -0,0 +1,44 @@
+package com.hrsk.cloud.eg.infrastructure.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import java.security.MessageDigest;
+
+
+/**
+ * @author zhangyy
+ * @version 1.0
+ * @description: Md5Util
+ * @date 2024/9/10 15:13
+ */
+@Slf4j
+public class Md5Util {
+
+    /**
+     * 直接计算MD5
+     * @param buf
+     * @return
+     */
+    public static String encoderByMd5(String buf) {
+        try {
+            MessageDigest digist = MessageDigest.getInstance("MD5");
+            byte[] rs = digist.digest(buf.getBytes("utf-8"));
+            StringBuffer digestHexStr = new StringBuffer();
+            for (int i = 0; i < 16; i++) {
+                digestHexStr.append(byteHEX(rs[i]));
+            }
+            return digestHexStr.toString();
+        } catch (Exception e) {
+            log.error("encoderByMd5", e);
+        }
+        return null;
+    }
+
+    private static String byteHEX(byte ib) {
+        char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f'};
+        char[] ob = new char[2];
+        ob[0] = Digit[(ib >>> 4) & 0X0F];
+        ob[1] = Digit[ib & 0X0F];
+        String s = new String(ob);
+        return s;
+    }
+}

+ 1 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/common/utils/PrivacyAesUtil.java → egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/PrivacyAesUtil.java

@@ -1,4 +1,4 @@
-package com.hrsk.cloud.eg.domain.common.utils;
+package com.hrsk.cloud.eg.infrastructure.utils;
 
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;

+ 14 - 0
egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/RedisUtil.java

@@ -259,4 +259,18 @@ public class RedisUtil {
     }
     }
 
 
 
 
+    /**
+     * @description: set数据携带了单位
+     * @param:
+     * @return:
+     * @author zhangyy
+     * @date: 2024/9/10 15:41
+     */
+    public void set(String key, String value, int time, TimeUnit timeUnit) {
+        try {
+            redisTemplate.opsForValue().set(key, value, time, timeUnit);
+        }catch (Exception e){
+            log.error("redis set errr",e);
+        }
+    }
 }
 }

+ 1 - 1
egress-gateway-service-domain/src/main/java/com/hrsk/cloud/eg/domain/common/utils/SnowflakeIdWorker.java → egress-gateway-service-infrastructure/src/main/java/com/hrsk/cloud/eg/infrastructure/utils/SnowflakeIdWorker.java

@@ -1,4 +1,4 @@
-package com.hrsk.cloud.eg.domain.common.utils;
+package com.hrsk.cloud.eg.infrastructure.utils;
 
 
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 

+ 2 - 2
start/src/test/java/GenerateConfigTest.java

@@ -1,7 +1,7 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
 import com.hrsk.cloud.eg.Application;
 import com.hrsk.cloud.eg.Application;
-import com.hrsk.cloud.eg.infrastructure.business.GenerateCheckIntoHttpApiConfigService;
-import com.hrsk.cloud.eg.infrastructure.business.GenerateCheckIntoHttpApiConfigV2Service;
+import com.hrsk.cloud.eg.app.business.GenerateCheckIntoHttpApiConfigService;
+import com.hrsk.cloud.eg.app.business.GenerateCheckIntoHttpApiConfigV2Service;
 import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
 import com.hrsk.cloud.eg.infrastructure.repository.database.entity.ProductBusinessApiInfoDo;
 import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
 import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
 import org.junit.Test;
 import org.junit.Test;

+ 1 - 1
start/src/test/java/StartApiTest.java

@@ -3,7 +3,7 @@ import com.hrsk.cloud.eg.domain.api.ApiGateway;
 import com.hrsk.cloud.eg.dto.data.CheckIntoParamDto;
 import com.hrsk.cloud.eg.dto.data.CheckIntoParamDto;
 import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
 import com.hrsk.cloud.eg.dto.data.egPlan.PlanDto;
 import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
 import com.hrsk.cloud.eg.dto.data.user.UserInBaseInfoDto;
-import com.hrsk.cloud.eg.infrastructure.business.GenerateCheckIntoHttpApiConfigService;
+import com.hrsk.cloud.eg.app.business.GenerateCheckIntoHttpApiConfigService;
 import com.hrsk.cloud.eg.infrastructure.service.EgApiEndpointService;
 import com.hrsk.cloud.eg.infrastructure.service.EgApiEndpointService;
 import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
 import com.hrsk.cloud.eg.infrastructure.service.ProductBusinessApiInfoService;
 import org.junit.Test;
 import org.junit.Test;