拉卡拉分账异步通知处,增加了提现流程。
This commit is contained in:
parent
8f39816f36
commit
9f62bf8ddd
@ -27,7 +27,7 @@ public class UpdateOrderSeparateJob extends QuartzJobBean {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Integer processedCount = lakalaApiService.fixedUnSuccessSeparateStatusJob();
|
Integer processedCount = lakalaApiService.fixUnSuccessSeparateStatusJob();
|
||||||
|
|
||||||
logger.info("[分账状态修复定时任务] 执行完成,共处理 {} 条记录", processedCount);
|
logger.info("[分账状态修复定时任务] 执行完成,共处理 {} 条记录", processedCount);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@ -49,7 +49,7 @@ public class LakalaAdminController extends BaseControllerImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 执行业务逻辑
|
// 执行业务逻辑
|
||||||
Boolean success = lakalaPayService.ewalletWithDrawD1(paramsJSON.getStr("mercId"), paramsJSON.getStr("merOrderNo"), paramsJSON.getStr("drawAmt"), paramsJSON.getStr("remark"), paramsJSON.getStr("summary"));
|
Boolean success = lakalaPayService.ewalletWithDrawD1(paramsJSON.getStr("mercId"), paramsJSON.getStr("merOrderNo"), paramsJSON.getStr("drawAmt"), paramsJSON.getStr("summary"));
|
||||||
if (success) {
|
if (success) {
|
||||||
return CommonResult.success("账户D1提现提交成功");
|
return CommonResult.success("账户D1提现提交成功");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -299,7 +299,7 @@ public interface LakalaApiService {
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Integer fixedUnSuccessSeparateStatusJob();
|
Integer fixUnSuccessSeparateStatusJob();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检测修复补全商户的商户分账业务信息及分账接收方绑定关系(分账业务申请异步通知的补偿机制)
|
* 检测修复补全商户的商户分账业务信息及分账接收方绑定关系(分账业务申请异步通知的补偿机制)
|
||||||
@ -337,10 +337,9 @@ public interface LakalaApiService {
|
|||||||
* @param mercId 822商户号或receiveNo
|
* @param mercId 822商户号或receiveNo
|
||||||
* @param merOrderNo 商户订单号
|
* @param merOrderNo 商户订单号
|
||||||
* @param drawAmt 提现金额(分)
|
* @param drawAmt 提现金额(分)
|
||||||
* @param remark
|
|
||||||
* @param summary
|
* @param summary
|
||||||
*/
|
*/
|
||||||
Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String remark, String summary);
|
Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String summary);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拉卡拉账户D1提现结果通知
|
* 拉卡拉账户D1提现结果通知
|
||||||
|
|||||||
@ -2693,9 +2693,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
* 参考文档:https://o.lakala.com/#/home/document/detail?id=393
|
* 参考文档:https://o.lakala.com/#/home/document/detail?id=393
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @param request
|
* @param request HTTP请求对象,包含拉卡拉分账结果通知的参数
|
||||||
* @param merchantNoParam 分账方商户号,非空表示是事后补偿
|
* @param merchantNoParam 分账方商户号,非空表示是事后补偿
|
||||||
* @param separateNoParam 分账指令流水号,非空表示是事后补偿
|
* @param separateNoParam 分账指令流水号,非空表示是事后补偿
|
||||||
|
* @return 处理结果JSON对象
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>成功: {"code": "SUCCESS", "message": "操作成功"}</li>
|
* <li>成功: {"code": "SUCCESS", "message": "操作成功"}</li>
|
||||||
* <li>失败: {"code": "FAIL", "message": "错误信息"}</li>
|
* <li>失败: {"code": "FAIL", "message": "错误信息"}</li>
|
||||||
@ -2708,7 +2709,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
JSONObject paramsJson = null;
|
JSONObject paramsJson = null;
|
||||||
if (!StrUtil.hasBlank(merchantNoParam, separateNoParam)) {
|
if (!StrUtil.hasBlank(merchantNoParam, separateNoParam)) {
|
||||||
channel = "(补偿)";
|
channel = "(补偿)";
|
||||||
log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调 merchantNoParam={},separateNoParam={}" + channel, merchantNoParam, separateNoParam);
|
log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调{},merchantNoParam={},separateNoParam={}",
|
||||||
|
channel, merchantNoParam, separateNoParam);
|
||||||
paramsJson = sacsQuery(merchantNoParam, separateNoParam);
|
paramsJson = sacsQuery(merchantNoParam, separateNoParam);
|
||||||
} else {
|
} else {
|
||||||
log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调");
|
log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调");
|
||||||
@ -2742,15 +2744,15 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
String status = paramsJson.getStr("status");
|
String status = paramsJson.getStr("status");
|
||||||
String finalStatus = paramsJson.getStr("final_status");
|
String finalStatus = paramsJson.getStr("final_status");
|
||||||
|
|
||||||
// 必要参数
|
// 必要参数校验
|
||||||
List<String> missingParams = new ArrayList<>();
|
List<String> missingParams = new ArrayList<>();
|
||||||
if (StrUtil.isBlank(outSeparateNo)) missingParams.add("outSeparateNo");
|
if (StrUtil.isBlank(outSeparateNo)) missingParams.add("outSeparateNo");
|
||||||
if (StrUtil.isBlank(separateNo)) missingParams.add("separateNo");
|
if (StrUtil.isBlank(separateNo)) missingParams.add("separateNo");
|
||||||
if (StrUtil.isBlank(status)) missingParams.add("status");
|
if (StrUtil.isBlank(status)) missingParams.add("status");
|
||||||
|
|
||||||
if (!missingParams.isEmpty()) {
|
if (!missingParams.isEmpty()) {
|
||||||
String errorMsg = "分账通知缺少必要参数" + channel + String.join(", ", missingParams);
|
String errorMsg = "分账通知缺少必要参数" + channel + ": " + String.join(", ", missingParams);
|
||||||
log.error("[拉卡拉分账通知] {} {},参数详情: {}", channel, errorMsg, paramsJson);
|
log.error("[拉卡拉分账通知] {},参数详情: {}", errorMsg, paramsJson);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.put("code", "FAIL")
|
.put("code", "FAIL")
|
||||||
.put("message", errorMsg);
|
.put("message", errorMsg);
|
||||||
@ -2761,7 +2763,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
if (lklOrderSeparateExist == null) {
|
if (lklOrderSeparateExist == null) {
|
||||||
String errorMsg = "未找到对应的分账记录" + channel;
|
String errorMsg = "未找到对应的分账记录" + channel;
|
||||||
log.error("[拉卡拉分账通知] {},外部分账单号={},分账单号={},参数详情: {}",
|
log.error("[拉卡拉分账通知] {},外部分账单号={},分账单号={},参数详情: {}",
|
||||||
errorMsg, outSeparateNo, separateNoParam, paramsJson);
|
errorMsg, outSeparateNo, separateNo, paramsJson);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.put("code", "FAIL")
|
.put("code", "FAIL")
|
||||||
.put("message", errorMsg);
|
.put("message", errorMsg);
|
||||||
@ -2779,8 +2781,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 6. 记录关键参数信息,便于问题排查
|
// 6. 记录关键参数信息,便于问题排查
|
||||||
log.info("[拉卡拉分账通知] 接收到分账通知,分账单号={},外部分账单号={},状态={},最终状态={}" + channel,
|
log.info("[拉卡拉分账通知] 接收到分账通知{},分账单号={},外部分账单号={},状态={},最终状态={}",
|
||||||
separateNo, outSeparateNo, status, finalStatus);
|
channel, separateNo, outSeparateNo, status, finalStatus);
|
||||||
|
|
||||||
// 7. 构建分账记录对象 - 准备更新数据库的分账记录
|
// 7. 构建分账记录对象 - 准备更新数据库的分账记录
|
||||||
LklOrderSeparate lklOrderSeparate = new LklOrderSeparate();
|
LklOrderSeparate lklOrderSeparate = new LklOrderSeparate();
|
||||||
@ -2819,14 +2821,25 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
// 更改分账状态:分账成功
|
// 更改分账状态:分账成功
|
||||||
shopOrderLklService.updateSeparateStatusByReceiveLogNo(logNo, CommonConstant.Sta_Separate_Success, "");
|
shopOrderLklService.updateSeparateStatusByReceiveLogNo(logNo, CommonConstant.Sta_Separate_Success, "");
|
||||||
|
|
||||||
|
// RMK 本次分账成功后,给商户和接收方 D1提现到银行卡
|
||||||
|
if (CollUtil.isNotEmpty(detailDatas)) {
|
||||||
|
for (JSONObject detailData : detailDatas.jsonIter()) {
|
||||||
|
String recvNo = detailData.getStr("recv_no"); // 822商户号或接收方号
|
||||||
|
String amt = detailData.getStr("amt"); // 单位(分)
|
||||||
|
if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) {
|
||||||
|
ewalletWithDrawD1(recvNo, outSeparateNo, amt, JSONUtil.toJsonStr(detailDatas));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 9. 记录处理成功日志
|
// 9. 记录处理成功日志
|
||||||
log.info("[拉卡拉分账通知] 分账通知处理成功, separateNo={}, status={}" + channel, separateNo, status);
|
log.info("[拉卡拉分账通知] 分账通知处理成功{},separateNo={},status={}", channel, separateNo, status);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.put("code", "SUCCESS")
|
.put("code", "SUCCESS")
|
||||||
.put("message", "操作成功");
|
.put("message", "操作成功");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 10. 异常处理
|
// 10. 异常处理
|
||||||
String errorMsg = String.format("分账通知数据处理异常: %s" + channel, e.getMessage());
|
String errorMsg = String.format("分账通知数据处理异常: %s%s", e.getMessage(), channel);
|
||||||
log.error("[拉卡拉分账通知] {}", errorMsg, e);
|
log.error("[拉卡拉分账通知] {}", errorMsg, e);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.put("code", "FAIL")
|
.put("code", "FAIL")
|
||||||
@ -2920,15 +2933,15 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
* @return 成功处理的记录数量
|
* @return 成功处理的记录数量
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Integer fixedUnSuccessSeparateStatusJob() {
|
public Integer fixUnSuccessSeparateStatusJob() {
|
||||||
log.info("[分账状态修复任务] 开始执行未成功分账记录的状态修复任务");
|
log.info("[分账状态修复任务] 开始执行未成功分账记录的状态修复任务");
|
||||||
|
|
||||||
// 获取3天前分账状态未成功的记录
|
// 获取2天前分账状态未成功的记录
|
||||||
Date now = new Date();
|
Date now = new Date();
|
||||||
Date threeDaysAgo = DateUtils.addHours(now, -72);
|
Date threeDaysAgo = DateUtils.addHours(now, -48);
|
||||||
|
|
||||||
// 分页参数
|
// 分页参数
|
||||||
int pageSize = 100;
|
int pageSize = 200;
|
||||||
int currentPage = 1;
|
int currentPage = 1;
|
||||||
int totalSuccessCount = 0;
|
int totalSuccessCount = 0;
|
||||||
int totalProcessed = 0;
|
int totalProcessed = 0;
|
||||||
@ -3384,12 +3397,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
* @param mercId 822商户号或receiveNo
|
* @param mercId 822商户号或receiveNo
|
||||||
* @param merOrderNo 商户订单号
|
* @param merOrderNo 商户订单号
|
||||||
* @param drawAmt 提现金额(分)
|
* @param drawAmt 提现金额(分)
|
||||||
* @param remark 备注信息
|
|
||||||
* @param summary 摘要信息
|
* @param summary 摘要信息
|
||||||
* @return 操作结果,成功返回true,失败返回false
|
* @return 操作结果,成功返回true,失败返回false
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String remark, String summary) {
|
public Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String summary) {
|
||||||
// 1. 参数校验
|
// 1. 参数校验
|
||||||
if (StrUtil.hasBlank(mercId, merOrderNo, drawAmt)) {
|
if (StrUtil.hasBlank(mercId, merOrderNo, drawAmt)) {
|
||||||
log.warn("[D1提现申请] D1提现参数校验失败,关键参数为空: mercId={}, merOrderNo={}, drawAmt={}",
|
log.warn("[D1提现申请] D1提现参数校验失败,关键参数为空: mercId={}, merOrderNo={}, drawAmt={}",
|
||||||
@ -3399,8 +3411,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
|
|
||||||
// 账号类型(01:收款账户,04:分账接收方账户)
|
// 账号类型(01:收款账户,04:分账接收方账户)
|
||||||
String payType = "04";
|
String payType = "04";
|
||||||
|
String payTypeStr = "接收方账户04";
|
||||||
if (StrUtil.startWith(mercId, "822")) {
|
if (StrUtil.startWith(mercId, "822")) {
|
||||||
payType = "01";
|
payType = "01";
|
||||||
|
payTypeStr = "收款账户01";
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -3411,10 +3425,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置默认值
|
String remark = String.format("订单:%s %s 分账后立即提现", merOrderNo, payTypeStr);
|
||||||
if (StrUtil.isBlank(remark)) {
|
|
||||||
remark = String.format("商户订单:%s 账号类型:%s 分账后立即提现", merOrderNo, payType);
|
|
||||||
}
|
|
||||||
|
|
||||||
log.info("[D1提现申请] 开始处理D1提现,商户号={},订单号={},提现金额={}分", mercId, merOrderNo, drawAmt);
|
log.info("[D1提现申请] 开始处理D1提现,商户号={},订单号={},提现金额={}分", mercId, merOrderNo, drawAmt);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user