package com.nova.sankuai.infra.utils.eshidai; import cn.hutool.core.map.MapBuilder; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.HexUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.symmetric.AES; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.nova.sankuai.domain.api.esd.EsdResponse; import com.nova.sankuai.domain.entity.*; import com.nova.sankuai.domain.enums.capitalInfo.CapitalInfoTypeCodeEnum; import com.nova.sankuai.domain.vo.capitalresult.LvdiPushResultVo; import com.nova.sankuai.infra.config.CommonException; import com.nova.sankuai.infra.mapper.CustomerCapitalResultMapper; import com.nova.sankuai.infra.mapper.CustomerMapper; import com.nova.sankuai.infra.utils.RbUtil; import com.nova.sankuai.infra.utils.ResultJson; import com.nova.sankuai.infra.utils.UserUtil; import com.nova.sankuai.security.HttpClientUtil; import com.nova.sankuai.security.UserDetail; import com.nova.sankuai.service.IChannelInfoService; import com.nova.sankuai.service.ICustomerScyIncomeService; import com.nova.sankuai.service.ICustomerUserService; import com.nova.sankuai.service.IPlatformCapitalService; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.DigestUtils; import javax.servlet.http.HttpServletRequest; import java.util.Map; import java.util.Objects; import java.util.Random; import java.util.TreeMap; /** * e时贷对接 */ @Component @RequiredArgsConstructor public class EsdUtil { private static final Logger log = LoggerFactory.getLogger("capitalLogger"); // e时贷在capital_info数据库中的ID private static final Long capitalId = 25L; @Value("${eshidai.basicUrl}") private String basicUrl; @Value("${eshidai.clientId30}") private String clientId30; @Value("${eshidai.secretKey30}") private String secretKey30; private final CustomerMapper customerMapper; private final CustomerCapitalResultMapper capitalResultMapper; private final ICustomerUserService customerUserService; private final ICustomerScyIncomeService customerZcyIncomeService; private final IChannelInfoService channelInfoService; public static int checkValue(double value) { if (value < 30000) { return 1; // 3万以下 } else if (value >= 30000 && value < 100000) { return 2; // 3万到10万 } else if (value >= 100000 && value < 200000) { return 3; // 10万到20万 } else { return 4; // 20万以上 } } private JSONObject getParam(Customer customer) { JSONObject param = new JSONObject(); param.put("userName", customer.getName()); String sex = customer.getSex(); param.put("sex", "男".equals(sex) ? 0 : 1); //param.put("city", "临沧市"); // 测试数据 param.put("city", customer.getCityName()); //param.put("city", "临沧市"); // 测试数据 /* age String 是 25 年龄(25-55之间)*/ Integer age = customer.getAge(); //age = 18;// 测试数据 param.put("age", Objects.isNull(age) ? 25 : age); // 业务参数 /** * 逾期 * 1 ⽆逾期 * 2 当前有逾期 * 3 ⼀年以内⽆逾期 */ Random random = new Random(); int[] values = {1, 2, 3}; // 随机选取一个字符 //param.put("overdue", String.valueOf(values[random.nextInt(values.length)])); param.put("overdue", 1); // 获取source_channel Integer sourceChannel = customer.getSourceChannel(); Integer version2Type = 0;//判断是否2.0开关子参数 if (!Objects.isNull(sourceChannel)) { ChannelInfo channelInfo = channelInfoService.getOne(new LambdaQueryWrapper().eq(ChannelInfo::getCode, sourceChannel).last(" limit 1 ")); version2Type = channelInfo.getVersion2Type(); } int soci, realEstateInfo, providentFund, insurancePolicy, creditLimit = 0; if (version2Type == 1) { //线上放款 values = new int[]{2, 3, 4}; /*社保缴纳*/ soci = values[random.nextInt(values.length)]; /*公积金*/ providentFund = values[random.nextInt(values.length)]; /*保险保单*/ insurancePolicy = values[random.nextInt(values.length)]; /*房产情况*/ values = new int[]{2, 3, 4, 5, 6}; // 指定的字符集合 realEstateInfo = values[random.nextInt(values.length)]; /*信用卡额度*/ values = new int[]{1, 2, 3, 4, 5, 6}; // 指定的字符集合 creditLimit = values[random.nextInt(values.length)]; }else{ //银行直贷 /** * 社保缴纳 * 1 ⽆社保 * 2 缴纳6个⽉以下 * 3 缴纳6个⽉以上 * 4 有社保 */ // 随机选取一个字符 Integer socialSecurity = customer.getSocialSecurity(); int soc = Objects.isNull(socialSecurity) ? 0 : socialSecurity.intValue(); if (soc == 1) { soci = 2; }else if (soc == 2) { soci = 3; }else { values = new int[]{2, 3, 4}; // 指定的字符集合 soci = values[random.nextInt(values.length)]; } /** * 房产情况 * 1 ⽆房产 * 2 有房不抵押 * 3 有房可抵押 * 4 有房产 * 5 有按揭房产 * 6 有全款房产 */ Integer house = customer.getHouseStatus(); int hs = Objects.isNull(house) ? 0 : house.intValue(); if (hs == 4) { realEstateInfo = 5; }else if (hs == 5) { realEstateInfo = 6; }else { values = new int[]{2, 3, 4, 5, 6}; // 指定的字符集合 realEstateInfo = values[random.nextInt(values.length)]; } /** * 公积⾦ * 1 ⽆公积⾦ * 2 缴纳6个⽉以下 * 3 缴纳6个⽉以上 * 4 有公积⾦ */ Integer provident = customer.getProvidentFund(); int pf = Objects.isNull(provident) ? 0 : provident.intValue(); if (pf == 1) { providentFund = 2; }else if (pf == 2) { providentFund = 3; }else { values = new int[]{2, 3, 4}; // 指定的字符集合 providentFund = values[random.nextInt(values.length)]; } /** * 信⽤卡额度 * 1 ⽆信⽤卡 * 2 3千以下 * 3 3千-1万 * 4 1-3万 * 5 3万以上 * 6 有信⽤卡 */ Integer creditCard = customer.getCreditCard(); int cc = Objects.isNull(creditCard) ? 0 : creditCard.intValue(); if (cc == 3) { values = new int[]{3, 4, 6}; // 指定的字符集合 creditLimit = values[random.nextInt(values.length)]; } else if (cc == 0) { values = new int[]{2, 3, 4, 5, 6}; // 指定的字符集合 creditLimit = values[random.nextInt(values.length)]; } /** * 保险保单 * 1 ⽆保险保单 * 2 缴纳未满1年 * 3 缴纳1年以上 * 4 有保险保单 */ Integer insurancePolicy1 = customer.getInsurancePolicy(); int ipl = Objects.isNull(insurancePolicy1) ? 0 : insurancePolicy1; if (ipl == 7) { values = new int[]{3, 4}; // 指定的字符集合 // 随机选取一个字符 } else { values = new int[]{2, 3, 4}; // 指定的字符集合 // 随机选取一个字符 } insurancePolicy = values[random.nextInt(values.length)]; } param.put("socialSecurity", soci + ""); param.put("realEstateInfo", realEstateInfo + ""); param.put("providentFund", providentFund + ""); param.put("creditLimit", creditLimit + ""); param.put("insurancePolicy", insurancePolicy + ""); /** * ⻋辆情况 * 1 ⽆⻋产 * 2 有⻋不抵押 * 3 有⻋可抵押 * 4 有⻋产 */ values = new int[]{2, 3, 4}; // 指定的字符集合 int car = values[random.nextInt(values.length)]; // 随机选取一个字符 //car = 4;//测试数据 param.put("carInfo", String.valueOf(car)); /** * 贷款⾦额 * 1 3万以下 * 2 5万-10万 * 3 10万-20万 * 4 20万以上 */ param.put("loanAmount", String.valueOf(checkValue(customer.getLoanAmount()))); /** * 营业执照注册年限 * 1 未注册 * 2 注册1年以下 * 3 注册1~5年 * 4 注册5年以上 */ values = new int[]{1, 2, 3, 4}; // 指定的字符集合 // 随机选取一个字符 param.put("bizLicenseYear", String.valueOf(values[random.nextInt(values.length)])); /** * 蚂蚁花呗可⽤额度 * 1 ⽆额度 * 2 3千以下 * 3 3千-1万 * 4 1-3万 * 5 3万以上 */ values = new int[]{1, 2, 3, 4, 5}; // 指定的字符集合 // 随机选取一个字符 param.put("hbLimit", String.valueOf(values[random.nextInt(values.length)])); /** * 芝⿇分 * 1 600分以下 * 2 600~649分 * 3 650~699分 * 4 700分以 */ int sesameCredit = customer.getSesame(); if (sesameCredit == 1) { sesameCredit = 2; }else if (sesameCredit == 2) { sesameCredit = 3; }else if (sesameCredit == 3) { sesameCredit = 4; }else { sesameCredit = 1; } //sesameCredit = 4;//测试数据 param.put("sesameCredit", String.valueOf(sesameCredit)); /** * 职业 * 1 上班族 * 2 ⾃由职业 * 3 企业主(有营业执照) * 4 公务员或事业单位 */ Integer professionInfo = customer.getProfessionInfo(); int career = Objects.isNull(professionInfo) ? 1 : professionInfo.intValue(); if (career == 1) { //自由职业 career = 2; }else if (career == 2) { // 企业主 career = 3; }else if (career == 3 || career == 4) { //公务员 career = 4; }else if (career == 0) { // 上班族 career = 1; } param.put("career", career); /** * 京东⽩条可⽤额度 * 1 ⽆额度 * 2 3千以下 * 3 3千-1万 * 4 1-3万 * 5 3万以上 */ values = new int[]{1, 2, 3, 4, 5}; // 指定的字符集合 // 随机选取一个字符 param.put("btLimit", String.valueOf(values[random.nextInt(values.length)])); /** * ⽉收⼊ * 1 1000-3000 * 2 3000-8000 * 3 8000~15000 * 4 15000~30000 * 5 30000以上 */ int monthlySalary = customer.getMonthlyIncome(); if (monthlySalary == 3) { values = new int[]{4, 5}; // 指定的字符集合 monthlySalary = values[random.nextInt(values.length)]; }else if (monthlySalary == 4) { monthlySalary = 5; }else { values = new int[]{1, 2}; // 指定的字符集合 monthlySalary = values[random.nextInt(values.length)]; } param.put("monthlySalary", String.valueOf(monthlySalary)); /** * 总经营流⽔ * 1 10~50万元 * 2 50~100万元 * 3 100~500万元 */ values = new int[]{1, 2, 3}; // 指定的字符集合 param.put("bizBankDetails", String.valueOf(values[random.nextInt(values.length)])); /** * ⼯资发放形式 * 1 银⾏代发打卡 * 2 现⾦收⼊ * 3 个⼈转账 */ param.put("salaryPayMethod", String.valueOf(values[random.nextInt(values.length)])); /** * ⼯对公账⼾经营收⼊ * 1 10~50万元 * 2 50~100万元 * 3 100~500万元 */ param.put("bizPubAccBankDetails", String.valueOf(values[random.nextInt(values.length)])); /** * 借款⽤途 * 1 旅游 * 2 教育 * 3 婚庆 * 4 装修 * 5 医疗 * 6 个⼈消费 */ String useOfLoan = customer.getUseOfLoan(); if ("DEC".equals(useOfLoan)) { //装修 useOfLoan = "4"; }else if ("EDU".equals(useOfLoan)) { // 教育 useOfLoan = "2"; }else { values = new int[]{1, 2, 3, 4, 5, 6}; // 指定的字符集合 // 随机选取一个字符 useOfLoan = String.valueOf(values[random.nextInt(values.length)]); } param.put("loanPurpose", useOfLoan); /** * 单位⼯龄 * 1 0-6个⽉ * 2 6-12个⽉ * 3 12个⽉以上 */ values = new int[]{1, 2, 3}; // 指定的字符集合 // 随机选取一个字符 param.put("yearsService", String.valueOf(values[random.nextInt(values.length)])); /** * 学历 * 1 初中及以下 * 2 中专 * 3 ⾼中 * 4 ⼤专 * 5 本科 * 6 研究⽣及以上 */ String eduction = customer.getEducation(); if ("02".equals(eduction)) { eduction = "4"; }else if ("03".equals(eduction)) { eduction = "5"; }else if ("04".equals(eduction)) { eduction = "6"; }else { int num = random.nextInt(3) + 1; eduction = String.valueOf(num); } param.put("educationAttainmen", eduction); return param; } /** * 中诚易数据推送到e时贷操作 */ public boolean zcyPushToEsd(Customer customer, String logNumber) { boolean isSucc = false; log.info("日志编号:" + logNumber + ",手机号:{},中诚易数据推送到【e时贷】流程开始", customer.getPhone()); try { JSONObject param = getParam(customer); isSucc = push(customer, param, logNumber); Integer esd = 0; if (!isSucc) { log.error("日志编号:" + logNumber + ",手机号:{},中诚易数据推送到【e时贷】失败", customer.getPhone()); } else { esd = 1; } saveStatus(customer, esd); } catch (Exception ex) { log.error("日志编号:" + logNumber + ",手机号:{},中诚易数据推送到【e时贷】失败", customer.getPhone()); } return isSucc; } /** * 我来贷数据推送到e时贷操作 */ public boolean wldPushToEsd(Customer customer, String logNumber) { boolean isSucc = false; log.info("日志编号:{},手机号:{},【我来贷】数据推送到【e时贷】流程开始", logNumber, customer.getPhone()); try { JSONObject param = getParam(customer); isSucc = push(customer, param, logNumber); Integer esd = 0; if (!isSucc) { log.error("日志编号:{},手机号:{},【我来贷】数据推送到【e时贷】失败", logNumber, customer.getPhone()); } else { esd = 1; } saveStatus(customer, esd); if (isSucc) { isSucc = wldIncomeToEsd(customer, param, logNumber); } } catch (Exception ex) { log.error("日志编号:{},手机号:{},【我来贷】数据推送到【e时贷】失败: {}", logNumber, customer.getPhone(), ex.getMessage()); isSucc = false; } return isSucc; } /** * 推送操作 */ public LvdiPushResultVo esdPush(CustomerUser customerUser, String channelCode) { String logNumber = IdUtil.randomUUID(); log.info("日志编号:" + logNumber + "【e时贷】channelCode:" + channelCode + " 推送流程开始"); Customer customer = customerMapper.getLatestCustomerRecord(customerUser.getPhone()); CustomerCapitalResult capitalResult = capitalResultMapper.selectOne(new LambdaQueryWrapper() .eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId()) .eq(CustomerCapitalResult::getCustomerRecordId, customer.getId()) .eq(CustomerCapitalResult::getCapitalInfoCode, CapitalInfoTypeCodeEnum.ESD.getCode())); if (capitalResult == null) { log.info("日志编号:" + logNumber + " 手机号:" + customerUser.getPhone() + "【e时贷】数据库结果不存在, customerUser id:" + customerUser.getId() + " customer id:" + customer.getId()); throw new CommonException("资方对接结果不存在"); } JSONObject param = getParam(customer); boolean isSucc = push(customer, param, logNumber); if (!isSucc) { return null; } // 开始进件操作 // 转成 LvdiPushResultVo LvdiPushResultVo result = new LvdiPushResultVo(); result.setCheckResult(true); result.setUrlType("1");// APP下载链接 return result; } private final IPlatformCapitalService platformCapitalService; /** * 中诚易进件数据给e时贷操作 */ public void zcyIncomeToEsd(Customer customer, String logNumber) { log.info("日志编号:" + logNumber + ",手机号:{},中诚易数据进件到【e时贷】流程开始", customer.getPhone()); try { Integer esd = 3; ResultJson rs = getPushResult(logNumber, customer); if (rs == null) { log.error("日志编号:" + logNumber + ",手机号:{},中诚易数据进件到【e时贷】失败", customer.getPhone()); } else { esd = 4; log.info("日志编号:" + logNumber + ",手机号:{},中诚易数据进件到【e时贷】成功", customer.getPhone()); } saveStatus(customer, esd); } catch (Exception ex) { log.error("日志编号:" + logNumber + ",手机号:{},中诚易数据进件到【e时贷】失败", customer.getPhone()); } } /** * 我来贷进件数据给e时贷操作 */ public boolean wldIncomeToEsd(Customer customer, JSONObject param, String logNumber) { boolean isSucc = false; log.info("日志编号:{},手机号:{},【我来贷】数据进件到【e时贷】流程开始", logNumber, customer.getPhone()); try { Integer esd = 3; isSucc = getWldPushResult(logNumber, param, customer); if (!isSucc) { log.error("日志编号:{},手机号:{},【我来贷】数据进件到【e时贷】失败", logNumber, customer.getPhone()); } else { esd = 4; log.info("日志编号:{},手机号:{},【我来贷】数据进件到【e时贷】成功", logNumber, customer.getPhone()); } saveStatus(customer, esd); } catch (Exception ex) { log.error("日志编号:{},手机号:{},【我来贷】数据进件到【e时贷】失败: {}", logNumber, customer.getPhone(), ex.getMessage()); } return isSucc; } private void saveStatus(Customer customer, Integer esd) { // 录入或更新到customer_scy_income表 LambdaQueryWrapper wr = new LambdaQueryWrapper<>(); wr.eq(CustomerScyIncome::getCustomerZcyId, customer.getId()); wr.last(" limit 1 "); CustomerScyIncome csi = customerZcyIncomeService.getOne(wr); if (Objects.isNull(csi)) { csi = new CustomerScyIncome(); } csi.setCustomerZcyId(customer.getId()); csi.setEsd(esd); customerZcyIncomeService.saveOrUpdate(csi); } private boolean push(Customer customer, JSONObject body, String logNumber) { /* 手机号md5(32位小写)*/ body.put("phoneMd5", DigestUtils.md5DigestAsHex(customer.getPhone().getBytes())); String sendData = getDataJson(body); String jsonData = encryptData(secretKey30, sendData); log.info("日志编号:" + logNumber + " 手机号为:{},【e时贷】参数:: {}, data加密 {}", customer.getPhone(), body, jsonData); log.info("日志编号:" + logNumber + " 开始推送手机号:" + customer.getPhone() + "的资料给资方【e时贷】"); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl, jsonData, getHeader(sendData, clientId30, "A0001")); log.info("日志编号:" + logNumber + " 手机号为:" + customer.getPhone() + ",【e时贷】推送原始返回参数:{}", result); } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】推送失败,传参:{} ex:{}", customer.getPhone(), jsonData , ex); } if (StringUtils.isBlank(result)) { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】推送原始返回数据为空,传参:{} ", customer.getPhone(), jsonData); } try { EsdResponse res = JSON.parseObject(result, EsdResponse.class); if (res.getCode().intValue() == 0) { log.info("日志编号:" + logNumber + " 手机号为:" + customer.getPhone() + ",【e时贷】推送成功"); String signsResult = JSON.toJSONString(res.getData()); PlatformCapital platformCapital = JSON.parseObject(signsResult, PlatformCapital.class); // 删除同一资方的同一用户数据 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(PlatformCapital::getCustomerId, customer.getId()); wrapper.eq(PlatformCapital::getCapitalId, capitalId); platformCapitalService.remove(wrapper); // 录入到数据库 platformCapital.setCustomerId(customer.getId()); platformCapital.setCapitalId(capitalId); platformCapital.setLogoUrl(res.getData().getCompanyLogo()); platformCapital.setCompanyName(res.getData().getCompanyName()); platformCapital.setProductName(res.getData().getProductName()); platformCapital.setProtocolList(res.getData().getProtocolList().toString()); platformCapitalService.save(platformCapital); return true; } else { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】推送失败:{},jsonData:{}", customer.getPhone(), res.getMsg(),jsonData); } } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】推送原始返回参数转换失败,jsonData:{} ex:{}", customer.getPhone(), jsonData , ex); } return false; } /** * 进件操作 */ public ResultJson income(HttpServletRequest request) { String logNumber = IdUtil.randomUUID(); log.info("日志编号:" + logNumber + "【e时贷】进件流程开始"); String token = request.getHeader("Authorization"); UserDetail user = UserUtil.getUser(token); if (user == null) { log.info("日志编号:" + logNumber + "【e时贷】进件失败,原因:用户Token无效"); throw new CommonException("用户Token无效"); } Customer customer = customerMapper.getLatestCustomerRecord(user.getPhone()); LambdaQueryWrapper wr = new LambdaQueryWrapper<>(); wr.eq(CustomerUser::getPhone, user.getPhone()); wr.eq(CustomerUser::getDeleteFlag, 0); wr.last(" limit 1 "); CustomerUser customerUser = customerUserService.getOne(wr); if (customerUser == null) { log.info("日志编号:" + logNumber + " 手机号:" + user.getPhone() + "【e时贷】进件失败,原因:用户不存在"); throw new CommonException("用户不存在"); } CustomerCapitalResult capitalResult = capitalResultMapper.selectOne(new LambdaQueryWrapper() .eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId()) .eq(CustomerCapitalResult::getCustomerRecordId, customer.getId()) .eq(CustomerCapitalResult::getCapitalInfoCode, CapitalInfoTypeCodeEnum.ESD.getCode())); if (capitalResult == null) { log.info("日志编号:" + logNumber + " 手机号:" + customerUser.getPhone() + "进件失败,原因:【e时贷】数据库结果不存在, customerUser id:" + customerUser.getId() + " customer id:" + customer.getId()); throw new CommonException("资方对接结果不存在"); } return getPushResult(logNumber, customer); } @Nullable private ResultJson getPushResult(String logNumber, Customer customer) { // 判断是否数据库中是否有数据,有过数据就不推送了 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(PlatformCapital::getCustomerId, customer.getId()); wrapper.eq(PlatformCapital::getCapitalId, capitalId); wrapper.last(" limit 1 "); PlatformCapital platformCapital = platformCapitalService.getOne(wrapper); if (Objects.isNull(platformCapital)) {// 若没有数据 log.info("日志编号:" + logNumber + " 手机号:" + customer.getPhone() + "进件失败,原因:【e时贷】推送结果不存在, customer id:" + customer.getId()); throw new CommonException("资方推送结果不存在"); } if (platformCapital.getIncomeStatus() == 1) {// 已进件成功 log.info("日志编号:" + logNumber + " 手机号:" + customer.getPhone() + "进件失败,原因:【e时贷】已经进件成功过,不再进件, customer id:" + customer.getId()); return null; } JSONObject param = getParam(customer); // 基本参数 param.put("phone", customer.getPhone()); param.put("name", customer.getName()); param.put("ip", customer.getIpAddres()); param.put("bankCard", customer.getCardNo()); param.put("idcard", customer.getIdCard()); String sendData = getDataJson(param); String jsonData = encryptData(secretKey30, sendData); log.info("日志编号:" + logNumber + " 手机号:" + customer.getPhone() + "开始进件给资方【e时贷】,参数:{}, 加密:{}", sendData, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl, jsonData, getHeader(sendData, clientId30, "A0002")); log.info("日志编号:" + logNumber + " 手机号为:" + customer.getPhone() + ",【【e时贷】进件原始返回参数:{}", result); } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】进件失败,传参:{} ex:{}", customer.getPhone(), jsonData , ex.getMessage()); } if (StringUtils.isBlank(result)) { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】进件返回数据为空,传参:{} ", customer.getPhone(), jsonData); } try { EsdResponse res = JSON.parseObject(result, EsdResponse.class); if (res.getCode().intValue() == 0) { log.info("日志编号:" + logNumber + " 手机号为:" + customer.getPhone() + ",【e时贷】进件成功"); // 更新数据库 platformCapital.setIncomeStatus(1); platformCapitalService.updateById(platformCapital); LvdiPushResultVo rs = new LvdiPushResultVo(); rs.setCheckResult(true); rs.setUrlType("1");// APP下载链接 return ResultJson.ok(rs); } else { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】进件失败:{},jsonData:{}", customer.getPhone(), res.getMsg(), jsonData); } } catch (Exception ex) { log.error("日志编号:{} 手机号为:{},【e时贷】进件原始返回参数转换失败,jsonData:{} ex:{}", logNumber, customer.getPhone(), jsonData, ex.getMessage()); } return null; } private boolean getWldPushResult(String logNumber, JSONObject param, Customer customer) { // 判断是否数据库中是否有数据,有过数据就不推送了 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(PlatformCapital::getCustomerId, customer.getId()); wrapper.eq(PlatformCapital::getCapitalId, capitalId); wrapper.last(" limit 1 "); PlatformCapital platformCapital = platformCapitalService.getOne(wrapper); if (Objects.isNull(platformCapital)) {// 若没有数据 log.info("日志编号:" + logNumber + " 手机号:" + customer.getPhone() + "进件失败,原因:【e时贷】推送结果不存在, customer id:" + customer.getId()); return false; } if (platformCapital.getIncomeStatus() == 1) {// 已进件成功 log.info("日志编号:" + logNumber + " 手机号:" + customer.getPhone() + "进件失败,原因:【e时贷】已经进件成功过,不再进件, customer id:" + customer.getId()); return false; } // 基本参数 param.put("phone", customer.getPhone()); param.put("name", customer.getName()); param.put("ip", customer.getIpAddres()); param.put("bankCard", customer.getCardNo()); param.put("idcard", customer.getIdCard()); String sendData = getDataJson(param); String jsonData = encryptData(secretKey30, sendData); log.info("日志编号:" + logNumber + " 手机号:" + customer.getPhone() + "开始进件给资方【e时贷】,参数:{}, 加密:{}", sendData, jsonData); String result = null; try { result = HttpClientUtil.getInstance().postJsonData(basicUrl, jsonData, getHeader(sendData, clientId30, "A0002")); log.info("日志编号:" + logNumber + " 手机号为:" + customer.getPhone() + ",【【e时贷】进件原始返回参数:{}", result); } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】进件失败,传参:{} ex:{}", customer.getPhone(), jsonData , ex.getMessage()); } if (StringUtils.isBlank(result)) { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】进件返回数据为空,传参:{} ", customer.getPhone(), jsonData); } try { EsdResponse res = JSON.parseObject(result, EsdResponse.class); if (res.getCode().intValue() == 0) { log.info("日志编号:" + logNumber + " 手机号为:" + customer.getPhone() + ",【e时贷】进件成功"); // 更新数据库 platformCapital.setIncomeStatus(1); platformCapitalService.updateById(platformCapital); LvdiPushResultVo rs = new LvdiPushResultVo(); rs.setCheckResult(true); rs.setUrlType("1");// APP下载链接 return true; } else { log.error("日志编号:" + logNumber + " 手机号为:{},【e时贷】进件失败:{},jsonData:{}", customer.getPhone(), res.getMsg(), jsonData); } } catch (Exception ex) { log.error("日志编号:{} 手机号为:{},【e时贷】进件原始返回参数转换失败,jsonData:{} ex:{}", logNumber, customer.getPhone(), jsonData, ex.getMessage()); } return false; } /** * 请求体数据进⾏排序 * @param data 对象 */ @SuppressWarnings("unchecked") private static String getDataJson(T data) { // 字段排序 JSONObject jsonObject = (JSONObject)data; TreeMap treeMap = new TreeMap<>(jsonObject); // 业务数据 return JSONObject.toJSONString(treeMap); } /** * 数据加密⽅法 * @param privateKey 客⼾端id * @param dataJson 请求数据 */ private static String encryptData(String privateKey, String dataJson) { Map dataMap = MapUtil.newHashMap(16); AES aes = new AES(HexUtil.decodeHex(privateKey)); // 业务数据 dataMap.put("data", aes.encryptHex(dataJson)); return JSONObject.toJSONString(dataMap); } /** * 交互请求头 * @param body 请求体 * @param clientId 客⼾端id * @param serviceCode 业务编码 * @return */ public static Map getHeader(String body, String clientId, String serviceCode) { String timeStr = Long.toString(System.currentTimeMillis()); return new MapBuilder(MapUtil.newHashMap(16)) .put("client-id", clientId) .put("timestamp", timeStr) .put("sign", MD5.create().digestHex(body + clientId + String.valueOf(timeStr))) .put("service-code", serviceCode) .build(); } }