package com.nova.sankuai.infra.utils.zcy; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.nova.sankuai.domain.api.zcy.ZcyResponse; import com.nova.sankuai.domain.dto.zcy.CustomerZcyDto; import com.nova.sankuai.domain.entity.Customer; import com.nova.sankuai.domain.entity.CustomerZcy; import com.nova.sankuai.infra.utils.eshidai.EsdUtil; import com.nova.sankuai.infra.utils.hht.HhtUtil; import com.nova.sankuai.infra.utils.hjqb.HjqbUtil; import com.nova.sankuai.infra.utils.ryh.RyhUtil; import com.nova.sankuai.infra.utils.syh.SyhUtil; import com.nova.sankuai.infra.utils.zhd.ZhdUtil; import com.nova.sankuai.service.ICustomerZcyService; import lombok.RequiredArgsConstructor; import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @Component @RequiredArgsConstructor public class ZcyUtil { private static final Logger log = LoggerFactory.getLogger("capitalLogger"); private final ICustomerZcyService customerZcyService; private final SyhUtil syhUtil; private final HhtUtil hhtUtil; private final ZhdUtil zhdUtil; private final RyhUtil ryhUtil; private final HjqbUtil hjqbUtil; private final EsdUtil esdUtil; public ZcyResponse callback(CustomerZcyDto body) { String logNumber = IdUtil.randomUUID(); try { if (Objects.isNull(body)) { ZcyResponse resp = getZcyResponse(400, "请求体为空"); log.error("日志编号:{} 中诚易数据入库失败,错误原因:随易花资方回调请求体为空!", logNumber); return resp; } // 获取电话 String phone = body.getPhone(); // 判断数据库是否有数据,有数据,则说明以前有推送过来过 CustomerZcy customer = customerZcyService.getOne(new LambdaQueryWrapper().eq(CustomerZcy::getPhone, phone)); if (!Objects.isNull(customer)) { ZcyResponse resp = getZcyResponse(400, "电话号码为" + phone + " 已推送过数据!"); log.error("日志编号:{} 手机号为:{} 中诚易数据入库失败,传入参数:{} 错误原因:已推送过数据!", logNumber, phone, body); return resp; } // 开始录入数据 CustomerZcy customerZcy = new CustomerZcy(); BeanUtils.copyProperties(body, customerZcy); customerZcyService.save(customerZcy); // 异步进行推送和进件操作 ExecutorService executor = Executors.newFixedThreadPool(1); CompletableFuture.supplyAsync(() -> { Customer cust = new Customer(); BeanUtils.copyProperties(body, cust); // 推送和进件数据到随易花 boolean succ = syhUtil.zcyPushToSyh(cust, logNumber); if (succ) {// 推送成功,开始进件 syhUtil.zcyIncomeToSyh(cust, logNumber); } // 推送和进件数据到好汇推 boolean succHht = hhtUtil.zcyPushToHht(cust, logNumber); if (succHht) { hhtUtil.zcyIncomeToHht(cust, logNumber); } // 推送和进件数据到助贷 boolean succZhd = zhdUtil.zcyPushToZhd(cust, logNumber); if (succZhd) { zhdUtil.zcyIncomeToZhd(cust, logNumber); } // 推送和进件数据到任意花 boolean succRyh = ryhUtil.zcyPushToRyh(cust, logNumber); if (succRyh){ ryhUtil.zcyIncomeToRyh(cust, logNumber); } // 推送和进件数据到慧借钱包 boolean succHjqb = hjqbUtil.zcyPushToHjqb(cust, logNumber); if (succHjqb){ hjqbUtil.zcyIncomeToHjqb(cust, logNumber); } // 推送和进件数据到e时贷 boolean succEsd = esdUtil.zcyPushToEsd(cust, logNumber); if (succEsd){ esdUtil.zcyIncomeToEsd(cust, logNumber); } return true; }, executor); ZcyResponse resp = getZcyResponse(200, "成功!"); log.info("日志编号:{} 手机号为:{} 中诚易数据入库成功", logNumber, phone); return resp; } catch (Exception e) { ZcyResponse resp = getZcyResponse(500, e.getMessage()); log.error("日志编号:{} 中诚易数据入库失败,传入参数:{} 错误原因:{}", logNumber, body, e); return resp; } } @NotNull private ZcyResponse getZcyResponse(Integer code, String msg) { ZcyResponse resp = new ZcyResponse(); resp.setCode(code); resp.setMsg(msg); return resp; } }