From ab9c68fb8f029acafc7ac4808ed0cb5eb280a422 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Mon, 8 Sep 2025 21:12:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=91=BD=E5=90=8D-=E6=94=B9?= =?UTF-8?q?=E6=88=90=5F=E4=B8=8B=E5=88=92=E7=BA=BF=EF=BC=8C=E6=8B=89?= =?UTF-8?q?=E5=8D=A1=E6=8B=89=E8=A6=81=E6=B1=82=E7=9A=84=E8=A7=84=E5=88=99?= =?UTF-8?q?=EF=BC=8C=E5=90=A6=E5=88=99=E6=97=A0=E6=B3=95=E5=88=86=E8=B4=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mall/common/constant/CommonConstant.java | 2 +- .../mall/common/constant/RedisConstant.java | 2 + .../service/impl/LakalaPayServiceImpl.java | 327 ------------------ .../service/impl/LakalaApiServiceImpl.java | 3 +- .../service/impl/PushMessageServiceImpl.java | 4 +- .../order/listener/OrderPayedListener.java | 4 + .../listener/RedisKeyExpiredListener.java | 55 ++- .../impl/ShopOrderBaseServiceImpl.java | 32 -- 8 files changed, 52 insertions(+), 377 deletions(-) diff --git a/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java b/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java index 7a614b58..ebd13572 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java +++ b/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java @@ -88,7 +88,7 @@ public class CommonConstant { public static final String PUSH_MSG_CATE_MCH_ORDER_DETAIL = "mchOrderDetail"; public static final String PUSH_MSG_CATE_MCH_ONLINE_ORDER_LIST = "mchOnLineOrderList"; public static final String PUSH_MSG_CATE_MCH_ABNORMAL_ORDER_LIST = "mchAbnormalOrderList"; - public static final String PUSH_MSG_CATE_MCH_RETURN_ORDER_LIST = "mchRetrunOrderList"; + public static final String PUSH_MSG_CATE_MCH_RETURN_ORDER_LIST = "mchReturnOrderList"; public static final String CONF_KEY_SAME_CITY_ORDER_EXPIRE_SECONDS = "sameCityOrderExpireSeconds"; diff --git a/mall-common/src/main/java/com/suisung/mall/common/constant/RedisConstant.java b/mall-common/src/main/java/com/suisung/mall/common/constant/RedisConstant.java index c3f0336c..80d9d0f7 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/constant/RedisConstant.java +++ b/mall-common/src/main/java/com/suisung/mall/common/constant/RedisConstant.java @@ -34,5 +34,7 @@ public class RedisConstant { public static final String SF_Order_Proc_Expire_Key = ConstantRedis.Cache_NameSpace + "sf_order_proc_expire_key__"; + public static final String SF_Order_Proc_WillExpire_Key = ConstantRedis.Cache_NameSpace + "sf_order_proc_will_expire_key__"; + public static final String Order_Pay_Retry_Count_Key = ConstantRedis.Cache_NameSpace + "order_pay_retry_count:"; } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java index 21b43dbc..5d472c81 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java @@ -471,331 +471,4 @@ public class LakalaPayServiceImpl implements LakalaPayService { throw new ApiException(I18nUtil._("文件上传失败!"), e); } } - -// @Override -// public CommonResult applyLedgerMer(JSONObject paramsJSON) { -// // 1. 配置初始化 -// initLKLSDK(); -// -// //2. 装配数据 -// V2MmsOpenApiLedgerApplyLedgerMerRequest req = new V2MmsOpenApiLedgerApplyLedgerMerRequest(); -// req.setVersion("2.0"); -// String orderNo = StringUtils.genLklOrderNo(8); // 8位随机数 -// req.setOrderNo(orderNo); -// req.setOrgCode(orgCode); -// req.setMerInnerNo(paramsJSON.getStr("merInnerNo")); -// req.setMerCupNo(paramsJSON.getStr("merCupNo")); -// req.setContactMobile(paramsJSON.getStr("contactMobile")); -// req.setSplitLowestRatio(new BigDecimal(paramsJSON.getStr("splitLowestRatio"))); -// String fileName = paramsJSON.getStr("splitEntrustFileName"); -// req.setSplitEntrustFileName(fileName); -// -// // 分账结算委托书文件上传到拉卡拉服务器 -// JSONObject fileUploadResp = uploadFile(orderNo, "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), paramsJSON.getStr("splitEntrustFile")); -// if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { -// throw new ApiException(I18nUtil._("分账结算委托书上传失败!")); -// } -// -// String splitEntrustFilePath = fileUploadResp.getStr("attFileId"); -// req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf; -// -// if (isProdProject()) { -// projectDomain = projectDomain + "/api"; -// } -// // 给拉卡拉通知的回调地址 -// String retUrl = projectDomain + "/mobile/pay/lakala/ledger/applyLedgerMerNotify"; -// req.setRetUrl(retUrl); -// -// paramsJSON.set("orderNo", orderNo); -// paramsJSON.set("version", "2.0"); -// paramsJSON.set("ret_url", retUrl); -// paramsJSON.set("org_code", orgCode); -// paramsJSON.set("split_entrust_file_path", splitEntrustFilePath); -// -// try { -// //3. 发送请求 -// String responseStr = LKLSDK.httpPost(req); -// -// // {'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}} -// JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); -// if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) { -// throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); -// } -// -// paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId")); -// paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg")); -// paramsJSON.set("audit_status_text", paramsJSON.get("remark")); -// -// // 新增数据 -// // 将 JSON 对象的键名转换为下划线命名 -// LklLedgerMember lklLedgerMember = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class); -// lklLedgerMemberService.saveOrUpdateByMerCupNo(lklLedgerMember); -// -// return CommonResult.success(null, "提交成功,待审核中!"); -// } catch (SDKException e) { -// log.error("分账申请失败:", e); -// throw new ApiException(I18nUtil._("分账申请失败!"), e); -// } -// } -// -// /** -// * 商户分账业务开通申请回调 -// * 参考:https://o.lakala.com/#/home/document/detail?id=379 -// * -// * @param request -// * @return -// */ -// @Override -// public JSONObject applyLedgerMerNotify(HttpServletRequest request) { -// // 验签 -// String authorization = request.getHeader("Authorization"); -// String requestBody = LakalaUtil.getBody(request); -// -// boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath); -// if (!checkSuccess) { -// return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!"); -// } -// -// JSONObject paramsJSON = JSONUtil.parseObj(requestBody); -// -// JSONObject respData = new JSONObject(); -// respData.put("retCode", "OP90003"); -// respData.put("retMsg", "响应处理失败!"); -// -// if (paramsJSON != null && paramsJSON.get("respData") != null) { -// JSONObject reqData = (JSONObject) paramsJSON.get("respData"); -// -// Boolean success = lklLedgerMemberService.updateAuditResult(reqData.getStr("applyId"), -// reqData.getStr("merInnerNo"), -// reqData.getStr("merCupNo"), -// reqData.getStr("entrustFileName"), -// reqData.getStr("entrustFilePath"), -// reqData.getStr("auditStatus"), -// reqData.getStr("auditStatusText"), -// reqData.getStr("remark")); -// -// if (success) { -// respData.put("retCode", "000000"); -// respData.put("retMsg", "操作成功!"); -// } -// } -// -// return respData; -// } -// -// /** -// * 分账接收方创建申请 -// * 参考:https://o.lakala.com/#/home/document/detail?id=380 -// * -// * @param paramsJSON -// * @return -// */ -// @Override -// public CommonResult applyLedgerReceiver(JSONObject paramsJSON) { -// // 1. 配置初始化 -// initLKLSDK(); -// -// //2. 装配数据 -// V2MmsOpenApiLedgerApplyLedgerReceiverRequest req = new V2MmsOpenApiLedgerApplyLedgerReceiverRequest(); -// -// String orderNo = StringUtils.genLklOrderNo(8); // 8位随机数 -// req.setOrderNo(orderNo); -// req.setOrgCode(orgCode); -// req.setVersion("2.0"); -// -// req.setReceiverName(paramsJSON.getStr("receiverName")); -// req.setContactMobile(paramsJSON.getStr("contactMobile")); -// -// req.setLicenseNo(paramsJSON.getStr("licenseNo")); -// req.setLicenseName(paramsJSON.getStr("licenseName")); -// req.setLegalPersonName(paramsJSON.getStr("legalPersonName")); -// req.setLegalPersonCertificateType(paramsJSON.getStr("legalPersonCertificateType")); -// req.setLegalPersonCertificateNo(paramsJSON.getStr("legalPersonCertificateNo")); -// -// req.setAcctNo(paramsJSON.getStr("acctNo")); -// req.setAcctName(paramsJSON.getStr("acctName")); -// req.setAcctTypeCode(paramsJSON.getStr("acctTypeCode")); -// req.setAcctCertificateType(paramsJSON.getStr("acctCertificateType")); -// -// req.setAcctCertificateNo(paramsJSON.getStr("acctCertificateNo")); -// req.setAcctOpenBankCode(paramsJSON.getStr("acctOpenBankCode")); -// req.setAcctOpenBankName(paramsJSON.getStr("acctOpenBankName")); -// req.setAcctClearBankCode(paramsJSON.getStr("acctClearBankCode")); -// -// if (paramsJSON.getJSONArray("attachList") != null && paramsJSON.getJSONArray("attachList").size() > 0) { -// List attachList = new ArrayList<>(); -// V2MmsOpenApiLedgerApplyLedgerReceiverRequest.AttachInfo attachInfo = new V2MmsOpenApiLedgerApplyLedgerReceiverRequest.AttachInfo(); -// for (JSONObject attachJSON : paramsJSON.getJSONArray("attachList").jsonIter()) { -// String fileName = attachJSON.getStr("attachName"); -// String attachType = attachJSON.getStr("attachType"); -// String fileBase64 = attachJSON.getStr("attachStoreFile"); -// attachInfo.setAttachName(fileName); -// attachInfo.setAttachType(attachType); -// -// JSONObject fileUploadResp = uploadFile(StringUtils.genLklOrderNo(8), attachType, -// StringUtils.getFileExt(fileName), fileBase64); -// if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { -// throw new ApiException(I18nUtil._("附件上传失败!")); -// } -// -// attachInfo.setAttachStorePath(fileUploadResp.getStr("attFileId")); -// attachList.add(attachInfo); -// } -// -// req.setAttachList(attachList); -// paramsJSON.set("attach_list", JSONUtil.toJsonStr(attachList)); -// } -// -// paramsJSON.set("orderNo", orderNo); -// paramsJSON.set("version", "2.0"); -// paramsJSON.set("org_code", orgCode); -// -// try { -// //3. 发送请求,申请创建分账接收方 -// String responseStr = LKLSDK.httpPost(req); -// -// JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); -// if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) { -// throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); -// } -// -// paramsJSON.set("receiver_no", lakalaRespJSON.getByPath("respData.receiverNo")); -// paramsJSON.set("org_id", lakalaRespJSON.getByPath("respData.orgId")); -// paramsJSON.set("org_name", lakalaRespJSON.getByPath("respData.orgName")); -// -// // 新增数据 -// // 将 JSON 对象的键名转换为下划线命名 -// LklLedgerReceiver lklLedgerReceiver = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerReceiver.class); -// -// // 新增或修改本地数据 -// lklLedgerReceiverService.saveOrUpdateByReceiverNo(lklLedgerReceiver); -// -// return CommonResult.success(null, "接收方创建成功!"); -// } catch (SDKException e) { -// log.error("接收方创建失败:", e); -// throw new ApiException(I18nUtil._("接收方创建失败!"), e); -// } -// } -// -// /** -// * 分账关系绑定申请 -// * 参考:https://o.lakala.com/#/home/document/detail?id=386 -// * -// * @param paramsJSON -// * @return -// */ -// @Override -// public CommonResult applyLedgerMerReceiverBind(JSONObject paramsJSON) { -// // 1. 配置初始化 -// initLKLSDK(); -// -// //2. 装配数据 -// V2MmsOpenApiLedgerApplyBindRequest req = new V2MmsOpenApiLedgerApplyBindRequest(); -// -// String orderNo = StringUtils.genLklOrderNo(8); // 8位随机数 -// req.setOrderNo(orderNo); -// req.setOrgCode(orgCode); -// req.setVersion("2.0"); -// -// req.setMerInnerNo(paramsJSON.getStr("merInnerNo")); -// req.setMerCupNo(paramsJSON.getStr("merCupNo")); -// req.setReceiverNo(paramsJSON.getStr("receiverNo")); -// -// String fileName = paramsJSON.getStr("entrustFileName"); -// String splitEntrustFileBase64 = paramsJSON.getStr("entrustFile"); -// req.setEntrustFileName(fileName); -// -// String retUrl = projectDomain + "/mobile/pay/lakala/ledger/applyLedgerMerReceiverBindNotify"; -// req.setRetUrl(retUrl); -// -// // 文件上传到拉卡拉服务器 -// JSONObject fileUploadResp = uploadFile(orderNo, -// "SPLIT_COOPERATION_FILE", -// StringUtils.getFileExt(fileName), -// splitEntrustFileBase64); -// if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { -// throw new ApiException(I18nUtil._("合作协议上传失败!")); -// } -// -// String entrustFilePath = fileUploadResp.getStr("attFileId"); -// req.setEntrustFilePath(entrustFilePath); -// -// paramsJSON.set("orderNo", orderNo); -// paramsJSON.set("version", "2.0"); -// paramsJSON.set("ret_url", retUrl); -// paramsJSON.set("org_code", orgCode); -// paramsJSON.set("entrust_file_name", fileName); -// paramsJSON.set("entrust_file_path", entrustFilePath); -// -// try { -// //3. 发送请求 -// String responseStr = LKLSDK.httpPost(req); -// -// JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); -// if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) { -// throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); -// } -// -// paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId")); -// paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg")); -// -// // 新增数据 -// // 将 JSON 对象的键名转换为下划线命名 -// LklLedgerMerReceiverBind lklLedgerMerReceiverBind = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMerReceiverBind.class); -// lklLedgerMerReceiverBindService.saveOrUpdateByMerCupNoReceiverNo(lklLedgerMerReceiverBind); -// -// return CommonResult.success(null, "提交成功,待审核中!"); -// } catch (SDKException e) { -// log.error("分账绑定关系申请失败:", e); -// throw new ApiException(I18nUtil._("分账绑定关系申请失败!"), e); -// } -// } -// -// /** -// * 分账关系绑定申请回调 -// * 参考:https://o.lakala.com/#/home/document/detail?id=379 -// * -// * @param request -// * @return -// */ -// @Override -// public JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request) { -// // 验签 -// String authorization = request.getHeader("Authorization"); -// String requestBody = LakalaUtil.getBody(request); -// -// boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath); -// if (!checkSuccess) { -// return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!"); -// } -// -//// String requestBody = LakalaUtil.getBody(request); -// -// JSONObject paramsJSON = JSONUtil.parseObj(requestBody); -// JSONObject respData = new JSONObject(); -// respData.put("retCode", "OP90003"); -// respData.put("retMsg", "响应处理失败!"); -// -// if (paramsJSON != null && paramsJSON.get("respData") != null) { -// JSONObject reqData = (JSONObject) paramsJSON.get("respData"); -// -// Boolean success = lklLedgerMerReceiverBindService.updateAuditResult(reqData.getStr("applyId"), -// reqData.getStr("merInnerNo"), -// reqData.getStr("merCupNo"), -// reqData.getStr("receiverNo"), -// reqData.getStr("entrustFileName"), -// reqData.getStr("entrustFilePath"), -// reqData.getStr("auditStatus"), -// reqData.getStr("auditStatusText"), -// reqData.getStr("remark")); -// if (success) { -// respData.put("retCode", "000000"); -// respData.put("retMsg", "操作成功!"); -// } -// } -// -// return respData; -// } - - } 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 0fdf76a8..6084290a 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 @@ -1695,7 +1695,8 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 商家分账 BigDecimal mchRatio = splitRatioMch.divide(new BigDecimal(100)); // 比如:94/100 Integer mchSplitCent = new BigDecimal(splitAmount).multiply(mchRatio).intValue(); - if (mchSplitCent > 0) { + if (mchSplitCent > 0 || splitAmount >= 1) { + // 总分账金额大于1分,商家则分账 V3SacsSeparateRecvDatas receiver = new V3SacsSeparateRecvDatas(); receiver.setRecvMerchantNo(merchantNo); receiver.setSeparateValue(mchSplitCent.toString()); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java index 5943cf28..72e66ab8 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java @@ -138,7 +138,7 @@ public class PushMessageServiceImpl implements PushMessageService { Pair result = uniCloudPushService.sendPushMessageBatch(cidList, appName + "邀请您签署入驻合同", - "恭喜您的开店入驻申请已审核通过!请尽快登录APP平台签署电子合同,签署链接24小时内有效(逾期需重新提交申请)。如有疑问请联系客服,感谢您的支持!", + "恭喜您的开店入驻申请已审核通过!请尽快登录小发商家 APP 平台签署电子合同,签署链接24小时内有效(逾期需重新提交申请)。如有疑问请联系客服,感谢您的支持!", payload); if (!result.getFirst()) { @@ -167,7 +167,7 @@ public class PushMessageServiceImpl implements PushMessageService { public void noticeMerchantEmployeeOrderAction(Integer storeId, String orderId, String title, String content, JSONObject payload) { try { List cidList = shopStoreEmployeeService.selectEmployeeGeTuiCidByStoreId(storeId, orderId, null); - log.debug("[订单推送] cid 列表:{}", cidList); + // log.debug("[订单推送] cid 列表:{}", cidList); // 获取 商家的 cid uniCloudPushService.sendPushMessageBatch(cidList, title, content, payload); } catch (Exception e) { diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java index 28db9ee8..04d9918b 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/OrderPayedListener.java @@ -183,6 +183,10 @@ public class OrderPayedListener { // 发送延迟消息 25分钟拣货配送时间(提前5分钟,下单20分钟后,提醒商家及时拣货) Long mchOrderExpireSeconds = shopOrderBaseService.sameCityOrderExpireSeconds(1500L) - 300; + redisService.set(RedisConstant.SF_Order_Proc_WillExpire_Key + String.format("%d&%s", orderInfoOld.getStore_id(), orderId), orderId, mchOrderExpireSeconds); + + // 发送延迟消息 25分钟拣货配送时间(下单25分钟后,提醒商家及时拣货) + mchOrderExpireSeconds = shopOrderBaseService.sameCityOrderExpireSeconds(1500L); redisService.set(RedisConstant.SF_Order_Proc_Expire_Key + String.format("%d&%s", orderInfoOld.getStore_id(), orderId), orderId, mchOrderExpireSeconds); } catch (Exception e) { diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/RedisKeyExpiredListener.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/RedisKeyExpiredListener.java index eb815b08..36691208 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/RedisKeyExpiredListener.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/listener/RedisKeyExpiredListener.java @@ -60,13 +60,31 @@ public class RedisKeyExpiredListener implements MessageListener { } log.info("[Redis过期监听] 处理订单超时消息. 店铺ID: {}, 订单号: {}", args[0], args[1]); - boolean result = handleOrderExpiredMessage(args[0], args[1]); + boolean result = handleOrderExpiredMessage(args[0], args[1], false); if (result) { log.info("[Redis过期监听] 订单超时事件处理成功. 店铺ID: {}, 订单号: {}", args[0], args[1]); } else { log.error("[Redis过期监听] 订单超时事件处理失败. 店铺ID: {}, 订单号: {}", args[0], args[1]); } + } else if (expiredKey.startsWith(RedisConstant.SF_Order_Proc_WillExpire_Key)) { + log.debug("[Redis过期监听] 开始处理订单即将(5分钟后)超时事件. 过期键: {}", expiredKey); + + // storeId&orderId + String[] args = expiredKey.replace(RedisConstant.SF_Order_Proc_WillExpire_Key, "").split("&"); + if (ArrayUtil.isEmpty(args) || args.length < 2) { + log.error("[Redis过期监听] 订单处理超时键格式错误. 键: {} 不符合预期格式", expiredKey); + return; + } + + log.info("[Redis过期监听] 处理订单即将超时消息. 店铺ID: {}, 订单号: {}", args[0], args[1]); + boolean result = handleOrderExpiredMessage(args[0], args[1], true); + + if (result) { + log.info("[Redis过期监听] 订单即将超时事件处理成功. 店铺ID: {}, 订单号: {}", args[0], args[1]); + } else { + log.error("[Redis过期监听] 订单即将超时事件处理失败. 店铺ID: {}, 订单号: {}", args[0], args[1]); + } } else { //log.debug("[Redis过期监听] 忽略非订单超时事件. 过期键: {}", expiredKey); } @@ -79,44 +97,53 @@ public class RedisKeyExpiredListener implements MessageListener { * @param orderId 订单ID * @return 处理结果 */ - private boolean handleOrderExpiredMessage(String storeId, String orderId) { + private boolean handleOrderExpiredMessage(String storeId, String orderId, boolean willExpire) { try { - log.debug("[订单超时处理] 开始处理订单超时消息. 店铺ID: {}, 订单号: {}", storeId, orderId); + String addWord = ""; + if (willExpire) { + addWord = "即将"; + } + + log.debug("[订单{}超时处理] 开始处理订单超时消息. 店铺ID: {}, 订单号: {}", addWord, storeId, orderId); // 参数验证 if (StrUtil.isBlank(orderId) && StrUtil.isBlank(storeId)) { - log.warn("[订单超时处理] 订单ID和店铺ID不能同时为空. 店铺ID: {}, 订单号: {}", storeId, orderId); + log.warn("[订单{}超时处理] 订单ID和店铺ID不能同时为空. 店铺ID: {}, 订单号: {}", addWord, storeId, orderId); return false; } if (StrUtil.isBlank(orderId)) { - log.warn("[订单超时处理] 订单号为空. 店铺ID: {}", storeId); + log.warn("[订单{}超时处理] 订单号为空. 店铺ID: {}", addWord, storeId); return false; } if (StrUtil.isBlank(storeId)) { - log.warn("[订单超时处理] 店铺ID为空. 订单号: {}", orderId); + log.warn("[订单{}超时处理] 店铺ID为空. 订单号: {}", addWord, orderId); return false; } - String title = "有一笔即将超时的订单!"; - String content = "您有一笔即将超时的订单[" + orderId + "],请及时处理。"; - log.debug("[订单超时处理] 准备推送消息. 标题: {}, 内容: {}", title, content); + String title = "有一笔" + addWord + "的订单!"; + String content = "您有一笔" + addWord + "超时的订单[" + orderId + "],请及时处理。"; + log.debug("[订单{}超时处理] 准备推送消息. 标题: {}, 内容: {}", addWord, title, content); // 构造推送消息内容 JSONObject payload = new JSONObject(); - payload.put("category", CommonConstant.PUSH_MSG_CATE_MCH_ABNORMAL_ORDER_LIST); + if (willExpire) { + payload.put("category", CommonConstant.PUSH_MSG_CATE_MCH_ONLINE_ORDER_LIST); + } else { + payload.put("category", CommonConstant.PUSH_MSG_CATE_MCH_ABNORMAL_ORDER_LIST); + } payload.put("orderId", orderId); - log.debug("[订单超时处理] 推送消息载荷已准备: {}", payload); + log.debug("[订单{}超时处理] 推送消息载荷已准备: {}", addWord, payload); // 发送推送消息给商家员工 - log.debug("[订单超时处理] 发送推送消息给商家员工. 店铺ID: {}, 订单号: {}", storeId, orderId); + log.debug("[订单{}超时处理] 发送推送消息给商家员工. 店铺ID: {}, 订单号: {}", addWord, storeId, orderId); pushMessageService.noticeMerchantEmployeeOrderAction( Convert.toInt(storeId), orderId, title, content, payload); - log.info("[订单超时处理] 订单超时消息处理完成. 订单号: {}, 店铺ID: {}, 推送类别: {}", - orderId, storeId, CommonConstant.PUSH_MSG_CATE_MCH_ABNORMAL_ORDER_LIST); + log.info("[订单{}超时处理] 订单超时消息处理完成. 订单号: {}, 店铺ID: {}, 推送类别: {}", + addWord, orderId, storeId, CommonConstant.PUSH_MSG_CATE_MCH_ABNORMAL_ORDER_LIST); return true; } catch (Exception e) { log.error("[订单超时处理] 处理订单超时消息时发生异常. 订单号: {}, 店铺ID: {}", orderId, storeId, e); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java index c0aa7081..aec00c4a 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java @@ -9062,38 +9062,6 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl