预约订单校验 修改逻辑
This commit is contained in:
parent
dfab392ed6
commit
9b5c618c40
@ -2924,7 +2924,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
// 3. 提取关键参数并校验 - 确保必要参数完整
|
// 3. 提取关键参数并校验 - 确保必要参数完整
|
||||||
String logNo = paramsJson.getStr("log_no"); // 合单订单是子单(确认收货)流水号,非合单时是主单(确认收货)流水号
|
String logNo = paramsJson.getStr("log_no"); // 合单订单是子单(确认收货)流水号,非合单时是主单(确认收货)流水号
|
||||||
String separateNo = paramsJson.getStr("separate_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 status = paramsJson.getStr("status");
|
||||||
String finalStatus = paramsJson.getStr("final_status");
|
String finalStatus = paramsJson.getStr("final_status");
|
||||||
|
|
||||||
@ -3758,17 +3758,17 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
request.setMerchantNo(mercId);
|
request.setMerchantNo(mercId);
|
||||||
request.setMerOrderNo(merOrderNo);
|
request.setMerOrderNo(merOrderNo);
|
||||||
request.setPayType(payType);
|
request.setPayType(payType);
|
||||||
|
request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/ewallet/drawNotify");
|
||||||
|
|
||||||
// 分转元,保留两位小数点,不要四舍五入
|
// 分转元,保留两位小数点,不要四舍五入
|
||||||
String drawAmtYuan = drawAmtDecimal.divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN).toString();
|
String drawAmtYuan = drawAmtDecimal.divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN).toString();
|
||||||
request.setDrawAmt(drawAmtYuan); // 单位:元
|
request.setDrawAmt(drawAmtYuan); // 单位:元
|
||||||
request.setRemark(remark);
|
request.setRemark(remark);
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(summary)) {
|
if (StrUtil.isNotBlank(summary)) {
|
||||||
request.setSummary(summary);
|
request.setSummary(summary);
|
||||||
}
|
}
|
||||||
|
|
||||||
request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/ewallet/drawNotify");
|
|
||||||
|
|
||||||
// 4. 发送请求
|
// 4. 发送请求
|
||||||
String responseStr = LKLSDK.httpPost(request);
|
String responseStr = LKLSDK.httpPost(request);
|
||||||
if (StrUtil.isBlank(responseStr)) {
|
if (StrUtil.isBlank(responseStr)) {
|
||||||
@ -3840,16 +3840,19 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public JSONObject ewalletWithDrawNotify(HttpServletRequest request, String merchantNo, String drawJnl) {
|
public JSONObject ewalletWithDrawNotify(HttpServletRequest request, String merchantNo, String drawJnl) {
|
||||||
log.debug("[拉卡拉D1提现结果通知] 开始处理拉卡拉提现结果通知");
|
String signTag = "[拉卡拉提现结果通知]";
|
||||||
|
|
||||||
|
log.debug("{} 开始处理", signTag);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
JSONObject paramsJSON;
|
JSONObject paramsJSON;
|
||||||
|
|
||||||
Pair<Boolean, String> signCheckResult = null;
|
Pair<Boolean, String> signCheckResult = null;
|
||||||
if (request != null) {
|
if (request != null) {
|
||||||
// 1. 验签处理 - 验证通知来源的合法性
|
// 1. 验签处理 - 验证通知来源的合法性
|
||||||
signCheckResult = LakalaUtil.chkLklApiNotifySign(request, lklNotifyCerPath, false);
|
signCheckResult = LakalaUtil.chkLklApiNotifySign(request, lklNotifyCerPath, false);
|
||||||
if (signCheckResult != null && !signCheckResult.getFirst()) {
|
if (signCheckResult != null && !signCheckResult.getFirst()) {
|
||||||
log.warn("[拉卡拉D1提现结果通知] 验签失败: {}", signCheckResult.getSecond());
|
log.warn("{} 验签失败: {}", signTag, signCheckResult.getSecond());
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.set("code", "FAIL")
|
.set("code", "FAIL")
|
||||||
.set("message", signCheckResult.getSecond());
|
.set("message", signCheckResult.getSecond());
|
||||||
@ -3859,12 +3862,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
paramsJSON = JSONUtil.parseObj(signCheckResult.getSecond());
|
paramsJSON = JSONUtil.parseObj(signCheckResult.getSecond());
|
||||||
} else {
|
} else {
|
||||||
// 补偿机制。主动从拉卡拉上获取提现结果
|
// 补偿机制。主动从拉卡拉上获取提现结果
|
||||||
|
signTag = "[查询拉卡拉提现结果补偿]";
|
||||||
paramsJSON = ewalletWithdrawQuery(merchantNo, drawJnl);
|
paramsJSON = ewalletWithdrawQuery(merchantNo, drawJnl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (JSONUtil.isNull(paramsJSON)) {
|
if (JSONUtil.isNull(paramsJSON)) {
|
||||||
log.warn("[拉卡拉D1提现结果通知] 回调参数解析失败");
|
log.warn("{} 回调参数解析失败", signTag);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.set("code", "FAIL")
|
.set("code", "FAIL")
|
||||||
.set("message", "回调参数解析失败");
|
.set("message", "回调参数解析失败");
|
||||||
@ -3875,10 +3878,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
String merOrderNo = paramsJSON.getStr("merOrderNo");
|
String merOrderNo = paramsJSON.getStr("merOrderNo");
|
||||||
String drawJnlRemote = paramsJSON.getStr("drawJnl");
|
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)) {
|
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()
|
return JSONUtil.createObj()
|
||||||
.set("code", "FAIL")
|
.set("code", "FAIL")
|
||||||
.set("message", "回调参数错误");
|
.set("message", "回调参数错误");
|
||||||
@ -3886,7 +3889,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
|
|
||||||
Boolean isCompensate = lklOrderDrawService.isOrderDrawed(mercId, drawJnl);
|
Boolean isCompensate = lklOrderDrawService.isOrderDrawed(mercId, drawJnl);
|
||||||
if (isCompensate) {
|
if (isCompensate) {
|
||||||
log.warn("[拉卡拉D1提现结果通知] 提现结果通知已处理,忽略处理: mercId={}, merOrderNo={}, drawJnl={}", mercId, merOrderNo, drawJnl);
|
log.warn("{} 提现结果通知已处理,忽略处理: mercId={}, merOrderNo={}, drawJnl={}", signTag, mercId, merOrderNo, drawJnl);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.set("code", "SUCCESS")
|
.set("code", "SUCCESS")
|
||||||
.set("message", "提现结果通知已处理");
|
.set("message", "提现结果通知已处理");
|
||||||
@ -3894,7 +3897,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
|
|
||||||
// 只处理成功的提现状态
|
// 只处理成功的提现状态
|
||||||
if (!"DRAW.SUCCESS".equals(drawState)) {
|
if (!"DRAW.SUCCESS".equals(drawState)) {
|
||||||
log.debug("[拉卡拉D1提现结果通知] 提现状态未成功,忽略处理: drawState={}", drawState);
|
log.debug("{} 提现状态未成功,忽略处理: drawState={}", signTag, drawState);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.set("code", "FAIL") // 返回成功,避免重复通知
|
.set("code", "FAIL") // 返回成功,避免重复通知
|
||||||
.set("message", "状态未成功,忽略处理");
|
.set("message", "状态未成功,忽略处理");
|
||||||
@ -3903,7 +3906,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
// 3. 转换参数并更新数据
|
// 3. 转换参数并更新数据
|
||||||
String snakeCaseJson = StringUtils.convertCamelToSnake(signCheckResult.getSecond());
|
String snakeCaseJson = StringUtils.convertCamelToSnake(signCheckResult.getSecond());
|
||||||
if (StringUtils.isBlank(snakeCaseJson)) {
|
if (StringUtils.isBlank(snakeCaseJson)) {
|
||||||
log.error("[拉卡拉D1提现结果通知] 回调参数转换失败,mercId={} merOrderNo={}", mercId, merOrderNo);
|
log.error("{} 回调参数转换失败,mercId={} merOrderNo={}", signTag, mercId, merOrderNo);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.set("code", "FAIL")
|
.set("code", "FAIL")
|
||||||
.set("message", "回调参数转换失败");
|
.set("message", "回调参数转换失败");
|
||||||
@ -3911,21 +3914,22 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
|
|
||||||
LklOrderDraw lklOrderDraw = JSONUtil.toBean(snakeCaseJson, LklOrderDraw.class);
|
LklOrderDraw lklOrderDraw = JSONUtil.toBean(snakeCaseJson, LklOrderDraw.class);
|
||||||
if (lklOrderDraw == null) {
|
if (lklOrderDraw == null) {
|
||||||
log.error("[拉卡拉D1提现结果通知] 回调参数转换为对象失败,mercId={} merOrderNo={}", mercId, merOrderNo);
|
log.error("{} 回调参数转换为对象失败,mercId={} merOrderNo={}", signTag, mercId, merOrderNo);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.set("code", "FAIL")
|
.set("code", "FAIL")
|
||||||
.set("message", "回调参数转换失败");
|
.set("message", "回调参数转换失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lklOrderDraw.setRemark(lklOrderDraw.getRemark() + " " + signTag);
|
||||||
boolean isSuccess = lklOrderDrawService.addOrUpdateByMercIdAndMerOrderNo(lklOrderDraw);
|
boolean isSuccess = lklOrderDrawService.addOrUpdateByMercIdAndMerOrderNo(lklOrderDraw);
|
||||||
if (!isSuccess) {
|
if (!isSuccess) {
|
||||||
log.error("[拉卡拉D1提现结果通知] 数据更新失败,mercId={} merOrderNo={}", mercId, merOrderNo);
|
log.error("{} 数据更新失败,mercId={} merOrderNo={}", signTag, mercId, merOrderNo);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.set("code", "FAIL")
|
.set("code", "FAIL")
|
||||||
.set("message", "数据更新失败");
|
.set("message", "数据更新失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("[拉卡拉D1提现结果通知] 拉卡拉提现结果通知处理成功,mercId={} merOrderNo={}", mercId, merOrderNo);
|
log.info("{} 拉卡拉提现结果通知处理成功,mercId={} merOrderNo={}", signTag, mercId, merOrderNo);
|
||||||
|
|
||||||
// 4. 返回成功响应
|
// 4. 返回成功响应
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
@ -3933,7 +3937,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
.set("message", "处理成功");
|
.set("message", "处理成功");
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("[拉卡拉D1提现结果通知] 处理拉卡拉提现结果通知异常", e);
|
log.error(signTag + " 处理拉卡拉提现结果通知异常", e);
|
||||||
return JSONUtil.createObj()
|
return JSONUtil.createObj()
|
||||||
.set("code", "FAIL")
|
.set("code", "FAIL")
|
||||||
.set("message", "系统处理异常");
|
.set("message", "系统处理异常");
|
||||||
|
|||||||
@ -901,12 +901,15 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl<ShopOrderInfoMappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (StrUtil.isBlank(shopStoreInfo.getStore_opening_hours()) || StrUtil.isBlank(shopStoreInfo.getStore_close_hours())) {
|
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. 店铺营业时间检查
|
// 6. 店铺营业时间检查
|
||||||
if (!DateTimeUtils.isTimeInRange(shopStoreInfo.getStore_opening_hours(), shopStoreInfo.getStore_close_hours(), bookingBeginTime)) {
|
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分钟也是可以通过的)
|
// 7. 预约时间范围检查 - 仅能预约50分钟后的订单(防止用户在下单页面停留太长,45分钟也是可以通过的)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user