From 9f62bf8ddd5d67785fd42ba4247b2929b81d5623 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Sat, 27 Sep 2025 12:16:46 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8B=89=E5=8D=A1=E6=8B=89=E5=88=86=E8=B4=A6?=
=?UTF-8?q?=E5=BC=82=E6=AD=A5=E9=80=9A=E7=9F=A5=E5=A4=84=EF=BC=8C=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E4=BA=86=E6=8F=90=E7=8E=B0=E6=B5=81=E7=A8=8B=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../quartz/job/UpdateOrderSeparateJob.java | 2 +-
.../admin/LakalaAdminController.java | 2 +-
.../shop/lakala/service/LakalaApiService.java | 5 +-
.../service/impl/LakalaApiServiceImpl.java | 59 +++++++++++--------
4 files changed, 39 insertions(+), 29 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/UpdateOrderSeparateJob.java b/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/UpdateOrderSeparateJob.java
index ccaf0825..8fea6e7c 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/UpdateOrderSeparateJob.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/UpdateOrderSeparateJob.java
@@ -27,7 +27,7 @@ public class UpdateOrderSeparateJob extends QuartzJobBean {
return;
}
- Integer processedCount = lakalaApiService.fixedUnSuccessSeparateStatusJob();
+ Integer processedCount = lakalaApiService.fixUnSuccessSeparateStatusJob();
logger.info("[分账状态修复定时任务] 执行完成,共处理 {} 条记录", processedCount);
} catch (Exception e) {
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java
index 1eb0afe7..f1da4113 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java
@@ -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) {
return CommonResult.success("账户D1提现提交成功");
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
index 49366084..6f12006b 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
@@ -299,7 +299,7 @@ public interface LakalaApiService {
*
* @return
*/
- Integer fixedUnSuccessSeparateStatusJob();
+ Integer fixUnSuccessSeparateStatusJob();
/**
* 检测修复补全商户的商户分账业务信息及分账接收方绑定关系(分账业务申请异步通知的补偿机制)
@@ -337,10 +337,9 @@ public interface LakalaApiService {
* @param mercId 822商户号或receiveNo
* @param merOrderNo 商户订单号
* @param drawAmt 提现金额(分)
- * @param remark
* @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提现结果通知
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
index 70dea245..ab640bfc 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
@@ -2693,13 +2693,14 @@ public class LakalaApiServiceImpl implements LakalaApiService {
* 参考文档:https://o.lakala.com/#/home/document/detail?id=393
*
*
- * @param request
+ * @param request HTTP请求对象,包含拉卡拉分账结果通知的参数
* @param merchantNoParam 分账方商户号,非空表示是事后补偿
* @param separateNoParam 分账指令流水号,非空表示是事后补偿
- *
- * - 成功: {"code": "SUCCESS", "message": "操作成功"}
- * - 失败: {"code": "FAIL", "message": "错误信息"}
- *
+ * @return 处理结果JSON对象
+ *
+ * - 成功: {"code": "SUCCESS", "message": "操作成功"}
+ * - 失败: {"code": "FAIL", "message": "错误信息"}
+ *
*/
@Override
public JSONObject sacsSeparateNotify(HttpServletRequest request, String merchantNoParam, String separateNoParam) {
@@ -2708,7 +2709,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
JSONObject paramsJson = null;
if (!StrUtil.hasBlank(merchantNoParam, separateNoParam)) {
channel = "(补偿)";
- log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调 merchantNoParam={},separateNoParam={}" + channel, merchantNoParam, separateNoParam);
+ log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调{},merchantNoParam={},separateNoParam={}",
+ channel, merchantNoParam, separateNoParam);
paramsJson = sacsQuery(merchantNoParam, separateNoParam);
} else {
log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调");
@@ -2742,15 +2744,15 @@ public class LakalaApiServiceImpl implements LakalaApiService {
String status = paramsJson.getStr("status");
String finalStatus = paramsJson.getStr("final_status");
- // 必要参数
+ // 必要参数校验
List missingParams = new ArrayList<>();
if (StrUtil.isBlank(outSeparateNo)) missingParams.add("outSeparateNo");
if (StrUtil.isBlank(separateNo)) missingParams.add("separateNo");
if (StrUtil.isBlank(status)) missingParams.add("status");
if (!missingParams.isEmpty()) {
- String errorMsg = "分账通知缺少必要参数" + channel + String.join(", ", missingParams);
- log.error("[拉卡拉分账通知] {} {},参数详情: {}", channel, errorMsg, paramsJson);
+ String errorMsg = "分账通知缺少必要参数" + channel + ": " + String.join(", ", missingParams);
+ log.error("[拉卡拉分账通知] {},参数详情: {}", errorMsg, paramsJson);
return JSONUtil.createObj()
.put("code", "FAIL")
.put("message", errorMsg);
@@ -2761,7 +2763,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (lklOrderSeparateExist == null) {
String errorMsg = "未找到对应的分账记录" + channel;
log.error("[拉卡拉分账通知] {},外部分账单号={},分账单号={},参数详情: {}",
- errorMsg, outSeparateNo, separateNoParam, paramsJson);
+ errorMsg, outSeparateNo, separateNo, paramsJson);
return JSONUtil.createObj()
.put("code", "FAIL")
.put("message", errorMsg);
@@ -2779,8 +2781,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
}
// 6. 记录关键参数信息,便于问题排查
- log.info("[拉卡拉分账通知] 接收到分账通知,分账单号={},外部分账单号={},状态={},最终状态={}" + channel,
- separateNo, outSeparateNo, status, finalStatus);
+ log.info("[拉卡拉分账通知] 接收到分账通知{},分账单号={},外部分账单号={},状态={},最终状态={}",
+ channel, separateNo, outSeparateNo, status, finalStatus);
// 7. 构建分账记录对象 - 准备更新数据库的分账记录
LklOrderSeparate lklOrderSeparate = new LklOrderSeparate();
@@ -2819,14 +2821,25 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 更改分账状态:分账成功
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. 记录处理成功日志
- log.info("[拉卡拉分账通知] 分账通知处理成功, separateNo={}, status={}" + channel, separateNo, status);
+ log.info("[拉卡拉分账通知] 分账通知处理成功{},separateNo={},status={}", channel, separateNo, status);
return JSONUtil.createObj()
.put("code", "SUCCESS")
.put("message", "操作成功");
} catch (Exception e) {
// 10. 异常处理
- String errorMsg = String.format("分账通知数据处理异常: %s" + channel, e.getMessage());
+ String errorMsg = String.format("分账通知数据处理异常: %s%s", e.getMessage(), channel);
log.error("[拉卡拉分账通知] {}", errorMsg, e);
return JSONUtil.createObj()
.put("code", "FAIL")
@@ -2920,15 +2933,15 @@ public class LakalaApiServiceImpl implements LakalaApiService {
* @return 成功处理的记录数量
*/
@Override
- public Integer fixedUnSuccessSeparateStatusJob() {
+ public Integer fixUnSuccessSeparateStatusJob() {
log.info("[分账状态修复任务] 开始执行未成功分账记录的状态修复任务");
- // 获取3天前分账状态未成功的记录
+ // 获取2天前分账状态未成功的记录
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 totalSuccessCount = 0;
int totalProcessed = 0;
@@ -3384,12 +3397,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
* @param mercId 822商户号或receiveNo
* @param merOrderNo 商户订单号
* @param drawAmt 提现金额(分)
- * @param remark 备注信息
* @param summary 摘要信息
* @return 操作结果,成功返回true,失败返回false
*/
@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. 参数校验
if (StrUtil.hasBlank(mercId, merOrderNo, drawAmt)) {
log.warn("[D1提现申请] D1提现参数校验失败,关键参数为空: mercId={}, merOrderNo={}, drawAmt={}",
@@ -3399,8 +3411,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 账号类型(01:收款账户,04:分账接收方账户)
String payType = "04";
+ String payTypeStr = "接收方账户04";
if (StrUtil.startWith(mercId, "822")) {
payType = "01";
+ payTypeStr = "收款账户01";
}
try {
@@ -3411,10 +3425,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
return false;
}
- // 设置默认值
- if (StrUtil.isBlank(remark)) {
- remark = String.format("商户订单:%s 账号类型:%s 分账后立即提现", merOrderNo, payType);
- }
+ String remark = String.format("订单:%s %s 分账后立即提现", merOrderNo, payTypeStr);
log.info("[D1提现申请] 开始处理D1提现,商户号={},订单号={},提现金额={}分", mercId, merOrderNo, drawAmt);