Commit e37caaf5 authored by 黎博's avatar 黎博

优化vcc相关接口

parent b3454443
package cn.qg.qaplatform.controller.zdata.vcc;
import cn.qg.qaplatform.config.SwitchDataSource;
import cn.qg.qaplatform.entity.vcc.Account;
import cn.qg.qaplatform.entity.vcc.AcsPayOrder;
import cn.qg.qaplatform.entity.vcc.RiskRecord;
import cn.qg.qaplatform.entity.vcc.UserQuotaRecord;
import cn.qg.qaplatform.entity.xyqbuser.User;
import cn.qg.qaplatform.entity.zdata.VccOpenResultVo;
import cn.qg.qaplatform.entity.zdata.VccUserEntity;
import cn.qg.qaplatform.process.Vcc;
import cn.qg.qaplatform.service.vcc.AccountService;
import cn.qg.qaplatform.service.vcc.AcsPayOrderService;
import cn.qg.qaplatform.service.vcc.RiskRecordService;
import cn.qg.qaplatform.service.vcc.UserQuotaRecordService;
import cn.qg.qaplatform.service.xyqbUser.UserService;
import cn.qg.qaplatform.service.zdata.vcc.VccDataService;
import cn.qg.qaplatform.utils.HttpClientUtils;
import cn.qg.qaplatform.utils.JsonResult;
import cn.qg.qaplatform.utils.Result;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* vcc 相关接口
* @author libo
*/
@Slf4j
@CrossOrigin
@RestController
@RequestMapping("/vcc")
public class VccController {
@Autowired
UserService userService;
@Autowired
AccountService accountService;
@Autowired
UserQuotaRecordService userQuotaRecordService;
@Autowired
RiskRecordService riskRecordService;
@Autowired
AcsPayOrderService acsPayOrderService;
@Autowired
VccDataService vccDataService;
/**
* vcc造数据
* @param namespace 环境
* @param phoneNo 手机号
* @param channel 渠道号
* @param status 状态
* @return
* @throws Exception
*/
@PostMapping("/gen")
public JsonResult genVccUser(@RequestParam(value = "namespace") String namespace,
@RequestParam(value = "phoneNo") String phoneNo,
@RequestParam(value = "channel") String channel,
@RequestParam(value = "status") Integer status) throws Exception {
if (status !=1 && status !=2 && status !=3 && status !=4) {
return JsonResult.clientFailed("状态值必须是1、2、3、4中的一个!");
}
VccOpenResultVo result = vccDataService.makeVccUser(namespace, phoneNo, channel, status);
if (result == null) {
return JsonResult.serverFailed();
}
return JsonResult.success(result);
}
/**
* vcc捞数据
* @param namespace 环境
* @param status 状态
* @param pageNum 第几页
* @param pageSize 每页展示多少个
* @return
*/
@GetMapping("/getData")
public Result getVccData(@RequestParam(value = "namespace") String namespace,
@RequestParam(value = "status") Integer status,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
// 数据源切换到vcc_talos
SwitchDataSource.dataSourceSwitch(namespace, "vcc_talos");
IPage<Account> accountIPage = new Page<>(pageNum, pageSize);
QueryWrapper<Account> accountQueryWrapper = new QueryWrapper<>();
accountQueryWrapper.eq("status", status);
IPage<Account> accountIPageResult = accountService.page(accountIPage, accountQueryWrapper);
List<VccUserEntity> vccUserEntityList = new ArrayList<>();
QueryWrapper<UserQuotaRecord> userQuotaRecordQueryWrapper = new QueryWrapper<>();
// 数据源切换到vcc_quota
SwitchDataSource.dataSourceSwitch(namespace, "vcc_quota");
for (Account account: accountIPageResult.getRecords()) {
VccUserEntity vccUserEntity = new VccUserEntity();
vccUserEntity.setUserId(String.valueOf(account.getUserId()));
vccUserEntity.setUuid(account.getUuid());
vccUserEntity.setPhoneNo(account.getPhoneNo());
vccUserEntity.setRegisteredFrom(account.getRegisteredFrom());
vccUserEntity.setNextApplyTime(account.getNextApplyTime());
vccUserEntity.setStatus(account.getStatus());
vccUserEntity.setType(account.getType());
vccUserEntity.setCreatedAt(account.getCreatedAt());
userQuotaRecordQueryWrapper
.eq("uuid", account.getUuid())
.orderByDesc("id");
List<UserQuotaRecord> userQuotaRecordList = userQuotaRecordService.list(userQuotaRecordQueryWrapper);
if (userQuotaRecordList.size() > 0) {
vccUserEntity.setRiskAmount(userQuotaRecordList.get(0).getRiskAmount());
vccUserEntity.setEnableAmount(userQuotaRecordList.get(0).getEnableAmount());
}
vccUserEntityList.add(vccUserEntity);
userQuotaRecordQueryWrapper.clear();
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("total", accountIPageResult.getTotal());
resultMap.put("list", vccUserEntityList);
return Result.buildSuccessResult(resultMap);
}
/**
* vcc查数据
* @param namespace 环境
* @param phoneNo 手机号
* @return
*/
@GetMapping("/checkData")
public Result checkUserData(String namespace, String phoneNo) {
SwitchDataSource.dataSourceSwitch(namespace, "vcc_talos");
QueryWrapper<Account> accountQueryWrapper = new QueryWrapper<>();
accountQueryWrapper.eq("phone_no", phoneNo);
Account account = accountService.getOne(accountQueryWrapper);
if (account == null) {
return Result.buildErrorStateResult("该用户不是VCC用户", false);
}
return Result.buildSuccessResult(account);
}
/**
* VCC风控授信回调
* @param namespace 环境
* @param phoneNo 手机号
* @param result 回调结果,true-授信成功,false-授信失败
* @param amount
* @return
*/
@GetMapping("/risk")
public Result vccRiskControl(String namespace, String phoneNo, Boolean result, Integer amount) {
if (amount == null) {
amount = 10000;
}
SwitchDataSource.dataSourceSwitch(namespace, "xyqb_user");
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("phone_no", phoneNo);
User user = userService.getOne(userQueryWrapper);
if (user == null) {
return Result.buildErrorStateResult("用户不存在", false);
}
String uuid = user.getUuid();
SwitchDataSource.dataSourceSwitch(namespace, "vcc_talos");
QueryWrapper<RiskRecord> riskRecordQueryWrapper = new QueryWrapper<>();
riskRecordQueryWrapper.eq("uuid", uuid).orderByDesc("id");
List<RiskRecord> riskRecordList = riskRecordService.list(riskRecordQueryWrapper);
if (riskRecordList.size() == 0) {
return Result.buildErrorStateResult("risk_record未找到授信提交记录", false);
}
if (riskRecordList.get(0).getApplyStatus() == 1) {
return Result.buildErrorStateResult("用户已风控授信拒绝,无法重新授信回调!", false);
}
if (riskRecordList.get(0).getApplyStatus() == 2) {
return Result.buildErrorStateResult("用户已完成授信,无法重新授信回调!", false);
}
String riskNo = riskRecordList.get(0).getRiskNo();
JSONObject creditResult = Vcc.vccWindControlCreditCallback(namespace, uuid, riskNo, result, amount);
if (creditResult.get("content").toString().equals("success")) {
return Result.buildSuccessResult("授信回调成功!");
} else {
return Result.buildErrorStateResult("授信回调失败,请依次检查vcc_talos、acs_service、vcc_quota是否有报错", false);
}
}
/**
* vcc还款回调
* @param namespace 环境
* @param phoneNo 手机号
* @param result 回调结果
* @return
*/
@GetMapping("/repay/callback")
public Result vccRepayCallback(String namespace, String phoneNo, Integer result) {
String url = "https://acs-" + namespace + ".liangkebang.net/ex/paycenter/repay_notify";
SwitchDataSource.dataSourceSwitch(namespace, "xyqb_user");
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("phone_no", phoneNo);
User user = userService.getOne(userQueryWrapper);
if (user == null) {
return Result.buildErrorStateResult("该用户不存在!", false);
}
SwitchDataSource.dataSourceSwitch(namespace, "acsdb");
QueryWrapper<AcsPayOrder> acsPayOrderQueryWrapper = new QueryWrapper<>();
acsPayOrderQueryWrapper.eq("user_id", user.getId()).orderByDesc("id");
List<AcsPayOrder> acsPayOrderList = acsPayOrderService.list(acsPayOrderQueryWrapper);
if (acsPayOrderList.size() == 0) {
return Result.buildErrorStateResult("acs_pay_order未查到用户有还款记录", false);
}
Integer orderNo = acsPayOrderList.get(0).getId();
Map<String, Object> formData = new HashMap<>();
formData.put("orderNo", orderNo);
if (result.equals(1)) {
formData.put("remark", "还款成功");
}
if (result.equals(2)) {
formData.put("remark", "还款失败");
}
formData.put("payStatus", result);
formData.put("orderData", "{\"payApproachDesc\":\"易宝-广达小贷-VCC专用\",\"orderId\":\"79884519018498\",\"payApproach\":\"65\",\"payApproachName\":\"YEE_PAY_GDXD_VCC\",\"payGateway\":\"0\",\"cardNo\":\"6217000025253636858\",\"payGatewayName\":\"YEE_PAY\"}");
JSONObject response = HttpClientUtils.doPost(url, formData);
log.info("{}环境,用户{},VCC还款回调结果:{}", namespace, phoneNo, response);
try {
if (response.get("content").equals("SUCCESS")) {
return Result.buildSuccessResult("还款回调成功!");
}
} catch (Exception e) {
e.printStackTrace();
return Result.buildErrorStateResult(JSON.toJSONString(response), false);
}
return Result.buildSuccessResult("还款回调成功!");
}
}
package cn.qg.qaplatform.controller.zdata.vcc;
import cn.qg.qaplatform.utils.JsonResult;
import cn.qg.qaplatform.entity.zdata.VccOpenResultVo;
import cn.qg.qaplatform.service.zdata.vcc.VccDataService;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@CrossOrigin
@RestController
@RequestMapping("vcc")
@Api(tags = "vcc造数据")
public class VccGenController {
@Autowired
VccDataService vccDataService;
@PostMapping("/gen")
@ApiOperation(value = "vcc造数据")
public JsonResult genVccUser(@RequestParam(value = "namespace") String namespace,
@RequestParam(value = "phoneNo") String phoneNo,
@RequestParam(value = "channel") String channel,
@RequestParam(value = "status") Integer status) throws Exception {
if (status !=1 && status !=2 && status !=3 && status !=4) {
return JsonResult.clientFailed("状态值必须是1、2、3、4中的一个!");
}
VccOpenResultVo result = vccDataService.makeVccUser(namespace, phoneNo, channel, status);
if (result == null) {
return JsonResult.serverFailed();
}
return JsonResult.success(result);
}
/**
* vcc授信回调简单版本
* @param namespace 环境
* @param phoneNo 手机号
* @param result 结果
* @param amount 金额
* @return
*/
@GetMapping("/risk")
public JsonResult vccRiskControl(String namespace, String phoneNo, Boolean result, Integer amount) {
if (amount == null) {
amount = 10000;
}
return JsonResult.success(vccDataService.vccManualRiskControl(namespace, phoneNo, result, amount));
}
@GetMapping("/repay/callback")
public JsonResult vccRepayCallback(String namespace, String phoneNo, Integer result) {
JSONObject response = vccDataService.vccRepayCallback(namespace, phoneNo, result);
return JsonResult.success(response);
}
}
package cn.qg.qaplatform.controller.zdata.vcc;
import cn.qg.qaplatform.utils.JsonResult;
import cn.qg.qaplatform.enums.VccStatusEnum;
import cn.qg.qaplatform.entity.zdata.VccUserEntity;
import cn.qg.qaplatform.service.zdata.vcc.VccDataService;
import cn.qg.qaplatform.utils.page.PageResult;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@CrossOrigin
@Api(tags = "vcc查询")
@RestController
@RequestMapping("/vcc")
public class VccQueryController {
@Autowired
VccDataService vccDataService;
@GetMapping("/getData")
public JsonResult getVccData(@RequestParam(value = "namespace") String namespace,
@RequestParam(value = "status") Integer status,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
PageResult vccData = vccDataService.getVccData(namespace, status, pageNum, pageSize);
return JsonResult.success(vccData);
}
@GetMapping("/getStatus")
public JsonResult getUserStatus(String namespace, String phoneNo) {
VccUserEntity vccUserEntity = vccDataService.queryUserVccStatus(namespace, phoneNo);
if (vccUserEntity == null) {
return JsonResult.serverFailed("该用户不存在!");
}
return JsonResult.success(vccUserEntity);
}
@GetMapping("/checkData")
public JsonResult checkUserData(String namespace, String phoneNo) {
VccUserEntity vccUserEntity = vccDataService.queryUserVccStatus(namespace, phoneNo);
if (vccUserEntity == null) {
return JsonResult.serverFailed("该用户不存在!");
}
Map<String, Object> map = new HashMap<>();
map.put("phoneNo", vccUserEntity.getPhoneNo());
map.put("userId", vccUserEntity.getUserId());
map.put("uuid", vccUserEntity.getUuid());
map.put("registeredFrom", vccUserEntity.getRegisteredFrom());
map.put("nextApplyTime", vccUserEntity.getNextApplyTime());
map.put("createdAt", vccUserEntity.getCreatedAt());
map.put("status", VccStatusEnum.getDescByCode(vccUserEntity.getStatus()));
return JsonResult.success(map);
}
}
package cn.qg.qaplatform.entity.vcc;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* vcc_talos.account
*/
@Data
@TableName("account")
public class Account {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* user.id
*/
private Long userId;
/**
* user.uuid
*/
private String uuid;
/**
* user.registered_from
*/
private Long registeredFrom;
/**
* 支付密码
*/
private String payPwd;
/**
* 支付密码salt
*/
private String payPwdSalt;
/**
* 账户状态:0-初始状态,1-激活成功,2-激活失败,3-禁用,4-审核中
*/
private Integer status;
/**
* 进度:0-用户未完成OCR、10-用户活体未完成、20-运营商授权未完成、30-用户相关联系人未完成、36-用户未确认激活、40-激活必要的用户授权信息完成、50-审核中、51-审核拒绝、60-未设置交易密码、70-绑卡未完成、80-绑卡完成
*/
private Integer progress;
/**
* 是否提额完成
*/
private Integer quotaUpFinished;
/**
* 账单日,-1: 月末
*/
private Integer billDay;
/**
* 还款日
*/
private Integer repayDay;
/**
* 风控通知时间
*/
private Date riskNotifyTime;
/**
* 下次可申请激活时间
*/
private Date nextApplyTime;
/**
* 创建时间
*/
private Date createdAt;
/**
* 更新时间
*/
private Date updatedAt;
/**
* 电话号
*/
private String phoneNo;
/**
* VCC用户注册渠道.ps:registered_from是用户中心的注册渠道
*/
private Long registeredChannel;
/**
* VCC用户注册子渠道
*/
private Long sonRegisteredChannel;
private String phoneHash;
/**
* 完成授信时的渠道
*/
private Long endChannel;
/**
* 是否存在XYQB现金额度
*/
private Integer cashQuotaStatus;
/**
* 账号类别:vcc(C端虚拟信用卡)/scacard(企业信用卡)
*/
private String type;
/**
* 0 - 正常导流,1 - 全额导流
*/
private Integer guideType;
/**
* 如果为1 则不受交易金额及商户白名单限制
*/
private Integer free;
}
package cn.qg.qaplatform.entity.vcc;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* acsdb.acs_pay_order
*/
@Data
@TableName(value = "acs_pay_order")
public class AcsPayOrder {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 用户id
*/
private Integer userId;
/**
* 账户id
*/
private Integer accountId;
/**
* 交易id
*/
private Integer transId;
/**
* 还款类型 Repay-主动还款 Deduct-自动还款/批量扣款
*/
private String orderType;
/**
* Processing - 还款处理中 Complete - 还款成功 Failed - 还款失败 New - 待处理
*/
private String orderStatus;
/**
* 金额
*/
private BigDecimal amount;
/**
* 还款类型
*/
private String repayType;
/**
* 支付商务流水号(易宝返回)
*/
private String orderNo;
/**
* 废弃字段
*/
private String repayOrderNo;
/**
* ip
*/
private String ip;
/**
* 废弃字段
*/
private String channel;
/**
* 废弃字段
*/
private String sessionId;
/**
* 还款描述
*/
private String repaymentDescription;
/**
* 废弃字段
*/
private String divideParam;
/**
* 还款时间戳(毫秒)
*/
private String repaidAt;
/**
* 流水号(内部生成)
*/
private String businessFlowNo;
/**
* 电话号
*/
private String phone;
/**
* 身份证号
*/
private String idCard;
/**
* 姓名
*/
private String name;
/**
* 银行名称
*/
private String bankName;
/**
* 银行卡号(后4位)
*/
private String bankCardNo;
/**
* 支付中心绑卡编号
*/
private Integer payCenterCardId;
/**
* 废弃字段
*/
private String chargeType;
/**
* 扩展字段
*/
private String extData;
/**
* 响应码(支付中心)
*/
private String respCode;
/**
* 响应信息(支付中心)
*/
private String respMsg;
/**
* 待还账单编号(acs_bill主键id)
*/
private Integer repayBillId;
/**
* 还款类型 C 全额还款 P 部分还款 O 逾期还款 F 提前还款
*/
private String commandFlag;
/**
* 对账状态 Has(已对账)/null(未对账)
*/
private String accountingStatus;
/**
* 版本
*/
private Integer version;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 账单no
*/
private String repayBillNo;
}
package cn.qg.qaplatform.entity.vcc;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* vcc_talos.risk_record
*/
@Data
@TableName(value = "risk_record")
public class RiskRecord {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户ID
*/
private Long userId;
private String uuid;
/**
* 申请来源渠道
*/
private Long applyFrom;
/**
* 申请来源子渠道
*/
private Long sonApplyFrom;
/**
* 申请状态 0-发起申请风控审核中 1-风控审核拒绝 2-风控审核通过
*/
private Integer applyStatus;
/**
* 风控申请ID
*/
private String riskNo;
/**
* 备注
*/
private String remark;
/**
* 授信申请时间
*/
private Date applyTime;
/**
* 风控回调通知时间
*/
private Date riskNotifyTime;
/**
* 是否可用
*/
private Integer isAvailable;
private Date createdAt;
private Date updatedAt;
}
package cn.qg.qaplatform.entity.vcc;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* vcc_quota.user_quota_record
*/
@Data
@TableName("user_quota_record")
public class UserQuotaRecord {
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* uuid用户唯一编号
*/
private String uuid;
/**
* userId用户ID
*/
private Long userId;
/**
* 额度产品id
*/
private Long productId;
/**
* 额度产品编码
*/
private String productCode;
/**
* 渠道编号
*/
private String channel;
/**
* 产品标记,A默认,B对照
*/
private String mark;
/**
* 用户额度状态,1正常,2冻结,4永久冻结
*/
private Integer status;
/**
* 授信额度,-9999不设置
*/
private BigDecimal riskAmount;
/**
* 授信截止时间
*/
private Date riskDeadline;
/**
* 激活额度,-9999不设置
*/
private BigDecimal activatedAmount;
/**
* 待激活额度,-9999不设置
*/
private BigDecimal unactivatedAmount;
/**
* 可用额度,-9999不设置
*/
private BigDecimal enableAmount;
/**
* 已用额度
*/
private BigDecimal usedAmount;
/**
* 预占用额度
*/
private BigDecimal reserveAmount;
/**
* 冻结额度
*/
private BigDecimal freezeAmount;
/**
* 可取现额度
*/
private BigDecimal pocketAmount;
/**
* 已取现额度
*/
private BigDecimal usedPocketAmount;
/**
* 金额验签
*/
private String amountSign;
/**
* 版本号
*/
private Long version;
/**
* 创建时间
*/
private Date createdAt;
/**
* 更新时间
*/
private Date updatedAt;
}
package cn.qg.qaplatform.entity.xyqbuser;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* xyqb_user.user
*/
@Data
@TableName(value = "user")
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 手机号
*/
private String phoneNo;
/**
* 密码
*/
private String password;
/**
* channel.id
*/
private Long registeredFrom;
/**
* uuid
*/
private String uuid;
/**
* 是否可用
*/
private Boolean enable;
/**
* 创建时间
*/
private Date createdAt;
/**
* 更新时间
*/
private Date updatedAt;
}
...@@ -2,6 +2,7 @@ package cn.qg.qaplatform.entity.zdata; ...@@ -2,6 +2,7 @@ package cn.qg.qaplatform.entity.zdata;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
/** /**
...@@ -46,4 +47,14 @@ public class VccUserEntity { ...@@ -46,4 +47,14 @@ public class VccUserEntity {
* 账号类别:vcc/scacard/xyqb_mall' * 账号类别:vcc/scacard/xyqb_mall'
*/ */
private String type; private String type;
/**
* 授信总额度
*/
private BigDecimal riskAmount;
/**
* 剩余可用额度
*/
private BigDecimal enableAmount;
} }
package cn.qg.qaplatform.mapper.vcc;
import cn.qg.qaplatform.entity.vcc.Account;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface AccountMapper extends BaseMapper<Account> {
}
package cn.qg.qaplatform.mapper.vcc;
import cn.qg.qaplatform.entity.vcc.AcsPayOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface AcsPayOrderMapper extends BaseMapper<AcsPayOrder> {
}
package cn.qg.qaplatform.mapper.vcc;
import cn.qg.qaplatform.entity.vcc.RiskRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface RiskRecordMapper extends BaseMapper<RiskRecord> {
}
package cn.qg.qaplatform.mapper.vcc;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import cn.qg.qaplatform.entity.vcc.UserQuotaRecord;
public interface UserQuotaRecordMapper extends BaseMapper<UserQuotaRecord> {
}
package cn.qg.qaplatform.mapper.xyqbUser;
import cn.qg.qaplatform.entity.xyqbuser.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
package cn.qg.qaplatform.mapper.zdata;
import java.util.Map;
public interface VccAccountMapper {
Integer getNewestRepayOrderNo(String userId);
Map<String, Object> getNewestRepayResult(String userId);
}
package cn.qg.qaplatform.service.vcc;
import cn.qg.qaplatform.entity.vcc.Account;
import com.baomidou.mybatisplus.extension.service.IService;
public interface AccountService extends IService<Account> {
}
package cn.qg.qaplatform.service.vcc;
import cn.qg.qaplatform.entity.vcc.AcsPayOrder;
import com.baomidou.mybatisplus.extension.service.IService;
public interface AcsPayOrderService extends IService<AcsPayOrder> {
}
package cn.qg.qaplatform.service.vcc;
import cn.qg.qaplatform.entity.vcc.RiskRecord;
import com.baomidou.mybatisplus.extension.service.IService;
public interface RiskRecordService extends IService<RiskRecord> {
}
package cn.qg.qaplatform.service.vcc;
import cn.qg.qaplatform.entity.vcc.UserQuotaRecord;
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserQuotaRecordService extends IService<UserQuotaRecord> {
}
package cn.qg.qaplatform.service.vcc.impl;
import cn.qg.qaplatform.entity.vcc.Account;
import cn.qg.qaplatform.mapper.vcc.AccountMapper;
import cn.qg.qaplatform.service.vcc.AccountService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements AccountService {
}
package cn.qg.qaplatform.service.vcc.impl;
import cn.qg.qaplatform.entity.vcc.AcsPayOrder;
import cn.qg.qaplatform.mapper.vcc.AcsPayOrderMapper;
import cn.qg.qaplatform.service.vcc.AcsPayOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class AcsPayOrderServiceImpl extends ServiceImpl<AcsPayOrderMapper, AcsPayOrder> implements AcsPayOrderService {
}
package cn.qg.qaplatform.service.vcc.impl;
import cn.qg.qaplatform.entity.vcc.RiskRecord;
import cn.qg.qaplatform.mapper.vcc.RiskRecordMapper;
import cn.qg.qaplatform.service.vcc.RiskRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class RiskRecordServiceImpl extends ServiceImpl<RiskRecordMapper, RiskRecord> implements RiskRecordService {
}
package cn.qg.qaplatform.service.vcc.impl;
import cn.qg.qaplatform.entity.vcc.UserQuotaRecord;
import cn.qg.qaplatform.mapper.vcc.UserQuotaRecordMapper;
import cn.qg.qaplatform.service.vcc.UserQuotaRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class UserQuotaRecordServiceImpl extends ServiceImpl<UserQuotaRecordMapper, UserQuotaRecord> implements UserQuotaRecordService {
}
package cn.qg.qaplatform.service.xyqbUser;
import cn.qg.qaplatform.entity.xyqbuser.User;
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
}
package cn.qg.qaplatform.service.xyqbUser.impl;
import cn.qg.qaplatform.entity.xyqbuser.User;
import cn.qg.qaplatform.mapper.xyqbUser.UserMapper;
import cn.qg.qaplatform.service.xyqbUser.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
...@@ -16,18 +16,9 @@ public interface VccDataService { ...@@ -16,18 +16,9 @@ public interface VccDataService {
*/ */
VccOpenResultVo makeVccUser(String namespace, String phoneNo, String openedChannel, Integer status) throws Exception; VccOpenResultVo makeVccUser(String namespace, String phoneNo, String openedChannel, Integer status) throws Exception;
/**
* 根据状态批量获取vcc数据
*/
PageResult getVccData(String namespace, Integer status, Integer pageNum, Integer pageSize);
/** /**
* 根据手机号获取用户vcc状态 * 根据手机号获取用户vcc状态
*/ */
VccUserEntity queryUserVccStatus(String namespace, String phoneNo); VccUserEntity queryUserVccStatus(String namespace, String phoneNo);
Boolean vccManualRiskControl(String namespace, String phoneNo, Boolean result, Integer amount);
JSONObject vccRepayCallback(String namespace, String phoneNo, Integer result);
} }
package cn.qg.qaplatform.service.zdata.vcc.impl; package cn.qg.qaplatform.service.zdata.vcc.impl;
import cn.qg.qaplatform.config.SwitchDataSource; import cn.qg.qaplatform.config.SwitchDataSource;
import cn.qg.qaplatform.entity.zdata.XjfqGenProcessVo;
import cn.qg.qaplatform.enums.VccStatusEnum; import cn.qg.qaplatform.enums.VccStatusEnum;
import cn.qg.qaplatform.mapper.zdata.VccAccountMapper;
import cn.qg.qaplatform.mapper.zdata.VccDataMapper; import cn.qg.qaplatform.mapper.zdata.VccDataMapper;
import cn.qg.qaplatform.entity.zdata.VccOpenResultVo; import cn.qg.qaplatform.entity.zdata.VccOpenResultVo;
import cn.qg.qaplatform.entity.zdata.VccUserEntity; import cn.qg.qaplatform.entity.zdata.VccUserEntity;
...@@ -11,19 +9,12 @@ import cn.qg.qaplatform.mapper.zdata.XyqbLoanDataMapper; ...@@ -11,19 +9,12 @@ import cn.qg.qaplatform.mapper.zdata.XyqbLoanDataMapper;
import cn.qg.qaplatform.process.Vcc; import cn.qg.qaplatform.process.Vcc;
import cn.qg.qaplatform.service.zdata.risk.RuleEngineService; import cn.qg.qaplatform.service.zdata.risk.RuleEngineService;
import cn.qg.qaplatform.service.zdata.vcc.VccDataService; import cn.qg.qaplatform.service.zdata.vcc.VccDataService;
import cn.qg.qaplatform.utils.HttpClientUtils;
import cn.qg.qaplatform.utils.page.PageResult;
import cn.qg.qaplatform.utils.page.PageUtil;
import cn.qg.qaplatform.service.zdata.xyqb.XyqbBasicQueryService; import cn.qg.qaplatform.service.zdata.xyqb.XyqbBasicQueryService;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -34,9 +25,6 @@ public class VccDataServiceImpl implements VccDataService { ...@@ -34,9 +25,6 @@ public class VccDataServiceImpl implements VccDataService {
@Autowired @Autowired
VccDataMapper vccDataMapper; VccDataMapper vccDataMapper;
@Autowired
VccAccountMapper vccAccountMapper;
@Autowired @Autowired
RuleEngineService ruleEngineService; RuleEngineService ruleEngineService;
...@@ -160,22 +148,6 @@ public class VccDataServiceImpl implements VccDataService { ...@@ -160,22 +148,6 @@ public class VccDataServiceImpl implements VccDataService {
return vccOpenResultVo; return vccOpenResultVo;
} }
/**
* vcc捞数据
* @param namespace 环境
* @param status 状态
* @return
*/
@Override
public PageResult getVccData(String namespace, Integer status, Integer pageNum, Integer pageSize) {
SwitchDataSource.dataSourceSwitch(namespace, "vcc_talos");
PageHelper.startPage(pageNum, pageSize);
List<VccUserEntity> result = vccDataMapper.queryVccDataByStatus(status);
PageInfo<VccUserEntity> pageList = new PageInfo<>(result);
PageResult pageResult = PageUtil.getPageResult(pageList, pageNum, pageSize);
return pageResult;
}
/** /**
* 根据手机号获取用户vcc状态 * 根据手机号获取用户vcc状态
* @param namespace 环境 * @param namespace 环境
...@@ -187,60 +159,4 @@ public class VccDataServiceImpl implements VccDataService { ...@@ -187,60 +159,4 @@ public class VccDataServiceImpl implements VccDataService {
SwitchDataSource.dataSourceSwitch(namespace, "vcc_talos"); SwitchDataSource.dataSourceSwitch(namespace, "vcc_talos");
return vccDataMapper.queryUserVccStatus(phoneNo); return vccDataMapper.queryUserVccStatus(phoneNo);
} }
/**
* vcc手动风控回调
* @param namespace 环境
* @param phoneNo 手机号
* @param result 结果,true/false
* @param amount 授信金额
* @return
*/
@Override
public Boolean vccManualRiskControl(String namespace, String phoneNo, Boolean result, Integer amount) {
SwitchDataSource.dataSourceSwitch(namespace, "xyqb_user");
XjfqGenProcessVo xjfqGenProcessVo = xyqbLoanDataMapper.getUserInfoByPhoneNo(phoneNo);
if (xjfqGenProcessVo == null) {
return false;
}
String uuid = xjfqGenProcessVo.getUuid();
SwitchDataSource.dataSourceSwitch(namespace, "vcc_talos");
Map<String, Object> riskRecord = vccDataMapper.getVccRiskRecord(uuid);
if (riskRecord == null) {
return false;
}
String riskNo = riskRecord.get("risk_no").toString();
JSONObject creditResult = Vcc.vccWindControlCreditCallback(namespace, uuid, riskNo, result, amount);
return creditResult.get("content").toString().equals("success");
}
/**
* vcc还款回调
* @param namespace 环境
* @param phoneNo 手机号
* @param result 回调结果,true/false
* @return
*/
@Override
public JSONObject vccRepayCallback(String namespace, String phoneNo, Integer result) {
String url = "https://acs-" + namespace + ".liangkebang.net/ex/paycenter/repay_notify";
SwitchDataSource.dataSourceSwitch(namespace, "xyqb_user");
XjfqGenProcessVo xjfqGenProcessVo = xyqbLoanDataMapper.getUserInfoByPhoneNo(phoneNo);
SwitchDataSource.dataSourceSwitch(namespace, "acsdb");
Integer orderNo = vccAccountMapper.getNewestRepayOrderNo(xjfqGenProcessVo.getUserId());
Map<String, Object> formData = new HashMap<>();
formData.put("orderNo", orderNo);
if (result.equals(1)) {
formData.put("remark", "还款成功");
}
if (result.equals(2)) {
formData.put("remark", "还款失败");
}
formData.put("payStatus", result);
formData.put("orderData", "{\"payApproachDesc\":\"易宝-广达小贷-VCC专用\",\"orderId\":\"79884519018498\",\"payApproach\":\"65\",\"payApproachName\":\"YEE_PAY_GDXD_VCC\",\"payGateway\":\"0\",\"cardNo\":\"6217000025253636858\",\"payGatewayName\":\"YEE_PAY\"}");
JSONObject response = HttpClientUtils.doPost(url, formData);
log.info("vcc还款回调结果:{}", response);
return response;
}
} }
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.qg.qaplatform.mapper.zdata.VccAccountMapper">
<select id="getNewestRepayOrderNo" resultType="java.lang.Integer">
select `id` from `acs_pay_order` where `user_id` = #{userId} order by `id` desc limit 1
</select>
<select id="getNewestRepayResult" resultType="java.util.Map">
select * from `acs_pay_order` where `user_id` = #{userId} order by `id` desc limit 1
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment