预约订单校验 修改逻辑

This commit is contained in:
Jack 2025-10-25 14:35:21 +08:00
parent dfab392ed6
commit 9b5c618c40
2 changed files with 25 additions and 18 deletions

View File

@ -2924,7 +2924,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 3. 提取关键参数并校验 - 确保必要参数完整
String logNo = paramsJson.getStr("log_no"); // 合单订单是子单确认收货流水号非合单时是主单确认收货流水号
String separateNo = paramsJson.getStr("separate_no");
String outSeparateNo = paramsJson.getStr("out_separate_no");
String outSeparateNo = paramsJson.getStr("out_separate_no"); // 商城的订单号
String status = paramsJson.getStr("status");
String finalStatus = paramsJson.getStr("final_status");
@ -3758,17 +3758,17 @@ public class LakalaApiServiceImpl implements LakalaApiService {
request.setMerchantNo(mercId);
request.setMerOrderNo(merOrderNo);
request.setPayType(payType);
request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/ewallet/drawNotify");
// 分转元保留两位小数点不要四舍五入
String drawAmtYuan = drawAmtDecimal.divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN).toString();
request.setDrawAmt(drawAmtYuan); // 单位
request.setRemark(remark);
if (StrUtil.isNotBlank(summary)) {
request.setSummary(summary);
}
request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/ewallet/drawNotify");
// 4. 发送请求
String responseStr = LKLSDK.httpPost(request);
if (StrUtil.isBlank(responseStr)) {
@ -3840,16 +3840,19 @@ public class LakalaApiServiceImpl implements LakalaApiService {
*/
@Override
public JSONObject ewalletWithDrawNotify(HttpServletRequest request, String merchantNo, String drawJnl) {
log.debug("[拉卡拉D1提现结果通知] 开始处理拉卡拉提现结果通知");
String signTag = "[拉卡拉提现结果通知]";
log.debug("{} 开始处理", signTag);
try {
JSONObject paramsJSON;
Pair<Boolean, String> signCheckResult = null;
if (request != null) {
// 1. 验签处理 - 验证通知来源的合法性
signCheckResult = LakalaUtil.chkLklApiNotifySign(request, lklNotifyCerPath, false);
if (signCheckResult != null && !signCheckResult.getFirst()) {
log.warn("[拉卡拉D1提现结果通知] 验签失败: {}", signCheckResult.getSecond());
log.warn("{} 验签失败: {}", signTag, signCheckResult.getSecond());
return JSONUtil.createObj()
.set("code", "FAIL")
.set("message", signCheckResult.getSecond());
@ -3859,12 +3862,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
paramsJSON = JSONUtil.parseObj(signCheckResult.getSecond());
} else {
// 补偿机制主动从拉卡拉上获取提现结果
signTag = "[查询拉卡拉提现结果补偿]";
paramsJSON = ewalletWithdrawQuery(merchantNo, drawJnl);
}
if (JSONUtil.isNull(paramsJSON)) {
log.warn("[拉卡拉D1提现结果通知] 回调参数解析失败");
log.warn("{} 回调参数解析失败", signTag);
return JSONUtil.createObj()
.set("code", "FAIL")
.set("message", "回调参数解析失败");
@ -3875,10 +3878,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
String merOrderNo = paramsJSON.getStr("merOrderNo");
String drawJnlRemote = paramsJSON.getStr("drawJnl");
log.info("[拉卡拉D1提现结果通知] 提现通知参数: drawState={}, mercId={}, merOrderNo={},drawJnlRemote={}", drawState, mercId, merOrderNo, drawJnlRemote);
log.info("{} 提现通知参数: drawState={}, mercId={}, merOrderNo={},drawJnlRemote={}", signTag, drawState, mercId, merOrderNo, drawJnlRemote);
if (StrUtil.hasBlank(mercId, merOrderNo, drawJnl, drawState)) {
log.warn("[拉卡拉提现结果通知] 回调参数缺失: drawState={}, mercId={}, merOrderNo={}, drawJnlRemote={}", drawState, mercId, merOrderNo, drawJnlRemote);
log.warn("{} 回调参数缺失: drawState={}, mercId={}, merOrderNo={}, drawJnlRemote={}", signTag, drawState, mercId, merOrderNo, drawJnlRemote);
return JSONUtil.createObj()
.set("code", "FAIL")
.set("message", "回调参数错误");
@ -3886,7 +3889,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
Boolean isCompensate = lklOrderDrawService.isOrderDrawed(mercId, drawJnl);
if (isCompensate) {
log.warn("[拉卡拉D1提现结果通知] 提现结果通知已处理,忽略处理: mercId={}, merOrderNo={}, drawJnl={}", mercId, merOrderNo, drawJnl);
log.warn("{} 提现结果通知已处理,忽略处理: mercId={}, merOrderNo={}, drawJnl={}", signTag, mercId, merOrderNo, drawJnl);
return JSONUtil.createObj()
.set("code", "SUCCESS")
.set("message", "提现结果通知已处理");
@ -3894,7 +3897,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 只处理成功的提现状态
if (!"DRAW.SUCCESS".equals(drawState)) {
log.debug("[拉卡拉D1提现结果通知] 提现状态未成功,忽略处理: drawState={}", drawState);
log.debug("{} 提现状态未成功,忽略处理: drawState={}", signTag, drawState);
return JSONUtil.createObj()
.set("code", "FAIL") // 返回成功避免重复通知
.set("message", "状态未成功,忽略处理");
@ -3903,7 +3906,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 3. 转换参数并更新数据
String snakeCaseJson = StringUtils.convertCamelToSnake(signCheckResult.getSecond());
if (StringUtils.isBlank(snakeCaseJson)) {
log.error("[拉卡拉D1提现结果通知] 回调参数转换失败mercId={} merOrderNo={}", mercId, merOrderNo);
log.error("{} 回调参数转换失败mercId={} merOrderNo={}", signTag, mercId, merOrderNo);
return JSONUtil.createObj()
.set("code", "FAIL")
.set("message", "回调参数转换失败");
@ -3911,21 +3914,22 @@ public class LakalaApiServiceImpl implements LakalaApiService {
LklOrderDraw lklOrderDraw = JSONUtil.toBean(snakeCaseJson, LklOrderDraw.class);
if (lklOrderDraw == null) {
log.error("[拉卡拉D1提现结果通知] 回调参数转换为对象失败mercId={} merOrderNo={}", mercId, merOrderNo);
log.error("{} 回调参数转换为对象失败mercId={} merOrderNo={}", signTag, mercId, merOrderNo);
return JSONUtil.createObj()
.set("code", "FAIL")
.set("message", "回调参数转换失败");
}
lklOrderDraw.setRemark(lklOrderDraw.getRemark() + " " + signTag);
boolean isSuccess = lklOrderDrawService.addOrUpdateByMercIdAndMerOrderNo(lklOrderDraw);
if (!isSuccess) {
log.error("[拉卡拉D1提现结果通知] 数据更新失败mercId={} merOrderNo={}", mercId, merOrderNo);
log.error("{} 数据更新失败mercId={} merOrderNo={}", signTag, mercId, merOrderNo);
return JSONUtil.createObj()
.set("code", "FAIL")
.set("message", "数据更新失败");
}
log.info("[拉卡拉D1提现结果通知] 拉卡拉提现结果通知处理成功mercId={} merOrderNo={}", mercId, merOrderNo);
log.info("{} 拉卡拉提现结果通知处理成功mercId={} merOrderNo={}", signTag, mercId, merOrderNo);
// 4. 返回成功响应
return JSONUtil.createObj()
@ -3933,7 +3937,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
.set("message", "处理成功");
} catch (Exception e) {
log.error("[拉卡拉D1提现结果通知] 处理拉卡拉提现结果通知异常", e);
log.error(signTag + " 处理拉卡拉提现结果通知异常", e);
return JSONUtil.createObj()
.set("code", "FAIL")
.set("message", "系统处理异常");

View File

@ -901,12 +901,15 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
}
if (StrUtil.isBlank(shopStoreInfo.getStore_opening_hours()) || StrUtil.isBlank(shopStoreInfo.getStore_close_hours())) {
return Pair.of(false, "[预约订单校验] 店铺营业时间未设置,请联系商家");
shopStoreInfo.setStore_opening_hours("09:00");
shopStoreInfo.setStore_close_hours("06:00");
logger.warn("[预约订单校验] 店铺营业时间未设置,请联系商家,默认指定 {}-{}", shopStoreInfo.getStore_opening_hours(), shopStoreInfo.getStore_close_hours());
}
// 6. 店铺营业时间检查
if (!DateTimeUtils.isTimeInRange(shopStoreInfo.getStore_opening_hours(), shopStoreInfo.getStore_close_hours(), bookingBeginTime)) {
return Pair.of(false, "[预约订单校验] 请在店铺营业时间内预约下单");
String message = StrUtil.format("[预约订单校验] 请在 {}-{} 店铺营业时间内预约下单", shopStoreInfo.getStore_opening_hours(), shopStoreInfo.getStore_close_hours());
return Pair.of(false, message);
}
// 7. 预约时间范围检查 - 仅能预约50分钟后的订单防止用户在下单页面停留太长45分钟也是可以通过的