From 002d5613647cc1894c5cfe884994032d98f65ce6 Mon Sep 17 00:00:00 2001 From: gaowdong Date: Mon, 24 Feb 2025 11:01:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E8=AE=A2=E5=8D=95-=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/business/OrderResultBusiness.java | 6 +- .../common/constants/OrderErrorStateEnum.java | 24 + .../common/constants/OrderErrorTypeEnum.java | 28 ++ .../common/mapper/OrderErrorLogMapper.java | 11 + .../order/common/model/OrderErrorLog.java | 113 +++++ .../common/service/OrderErrorLogService.java | 8 + .../impl/OrderErrorLogServiceImpl.java | 25 + .../order/mq/listener/OrderMqHandler.java | 465 ++++++++++++++++++ .../OrderMqListenerAsyncPayResult.java | 26 + 9 files changed, 704 insertions(+), 2 deletions(-) create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/constants/OrderErrorStateEnum.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/constants/OrderErrorTypeEnum.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/mapper/OrderErrorLogMapper.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/model/OrderErrorLog.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderErrorLogService.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderErrorLogServiceImpl.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/listener/OrderMqHandler.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/listener/OrderMqListenerAsyncPayResult.java diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderResultBusiness.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderResultBusiness.java index d781a681..874e0004 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderResultBusiness.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/business/OrderResultBusiness.java @@ -3,7 +3,9 @@ package com.bonus.core.order.common.business; import com.bonus.core.order.common.model.OrderDetail; import com.bonus.core.order.common.model.OrderInfo; +import com.bonus.core.order.mq.po.OrderPlacedPO; import com.bonus.core.pay.api.vo.UnifyPaySelectVO; +import com.bonus.core.pay.common.po.PayResultPO; import java.util.List; @@ -11,8 +13,8 @@ public interface OrderResultBusiness { UnifyPaySelectVO reSyncOrderPayResult(Long orderId); // UnifyRefundSelectVO reSyncOrderRefundResult(Long orderRefundId); -// -// String asyncPayResultHandler(PayResultPO payResultPO); + + String asyncPayResultHandler(PayResultPO payResultPO); // // void asyncRefundResultHandler(RefundResultPO refundResultPO); // diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/constants/OrderErrorStateEnum.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/constants/OrderErrorStateEnum.java new file mode 100644 index 00000000..04419143 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/constants/OrderErrorStateEnum.java @@ -0,0 +1,24 @@ +package com.bonus.core.order.common.constants; + +public enum OrderErrorStateEnum { + CREATED(1, "已创建"), + FIXED(2, "已处理"), + NOT_FIX(3, "暂不处理"); + + private final Integer key; + private final String desc; + + private OrderErrorStateEnum(Integer key, String desc) { + this.key = key; + this.desc = desc; + } + + public Integer getKey() { + return this.key; + } + + public String getDesc() { + return this.desc; + } + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/constants/OrderErrorTypeEnum.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/constants/OrderErrorTypeEnum.java new file mode 100644 index 00000000..4bda34a1 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/constants/OrderErrorTypeEnum.java @@ -0,0 +1,28 @@ +package com.bonus.core.order.common.constants; + +public enum OrderErrorTypeEnum { + MQ_MAC_ASYNC_SAVE(1, "设备异步保存 MQ"), + MQ_MAC_ASYNC_QUERY(2, "订单定时取消 MQ"), + MQ_ORDER_PAY_RESULT(3, "支付结果回调处理 MQ"), + MQ_ORDER_CANCEL(4, "订单定时取消 MQ"), + OFFLINE_ORDER(5, "离线订单上传"), + WEIGHT_ORDER_PAY(6, "自助餐结算"), + MQ_ORDER_REFUND_RESULT(7, "退款结果回调处理 MQ"); + + private final Integer key; + private final String desc; + + private OrderErrorTypeEnum(Integer key, String desc) { + this.key = key; + this.desc = desc; + } + + public Integer getKey() { + return this.key; + } + + public String getDesc() { + return this.desc; + } + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/mapper/OrderErrorLogMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/mapper/OrderErrorLogMapper.java new file mode 100644 index 00000000..88a6a78b --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/mapper/OrderErrorLogMapper.java @@ -0,0 +1,11 @@ +package com.bonus.core.order.common.mapper; + +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bonus.core.order.common.model.OrderErrorLog; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +@InterceptorIgnore +public interface OrderErrorLogMapper extends BaseMapper { +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/model/OrderErrorLog.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/model/OrderErrorLog.java new file mode 100644 index 00000000..dac36d10 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/model/OrderErrorLog.java @@ -0,0 +1,113 @@ +package com.bonus.core.order.common.model; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +@TableName("order_error_log") +public class OrderErrorLog { + @TableId + private Long logId; + private Long relatedId; + private String traceId; + private Integer orderErrorType; + private Integer orderErrorState; + private String msg; + private String data; + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + private LocalDateTime crtime; + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + private LocalDateTime uptime; + + public Long getLogId() { + return this.logId; + } + + public Long getRelatedId() { + return this.relatedId; + } + + public String getTraceId() { + return this.traceId; + } + + public Integer getOrderErrorType() { + return this.orderErrorType; + } + + public Integer getOrderErrorState() { + return this.orderErrorState; + } + + public String getMsg() { + return this.msg; + } + + public String getData() { + return this.data; + } + + public LocalDateTime getCrtime() { + return this.crtime; + } + + public LocalDateTime getUptime() { + return this.uptime; + } + + public void setLogId(final Long logId) { + this.logId = logId; + } + + public void setRelatedId(final Long relatedId) { + this.relatedId = relatedId; + } + + public void setTraceId(final String traceId) { + this.traceId = traceId; + } + + public void setOrderErrorType(final Integer orderErrorType) { + this.orderErrorType = orderErrorType; + } + + public void setOrderErrorState(final Integer orderErrorState) { + this.orderErrorState = orderErrorState; + } + + public void setMsg(final String msg) { + this.msg = msg; + } + + public void setData(final String data) { + this.data = data; + } + + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + public void setCrtime(final LocalDateTime crtime) { + this.crtime = crtime; + } + + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + public void setUptime(final LocalDateTime uptime) { + this.uptime = uptime; + } + +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderErrorLogService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderErrorLogService.java new file mode 100644 index 00000000..0da7ebd2 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/OrderErrorLogService.java @@ -0,0 +1,8 @@ +package com.bonus.core.order.common.service; + + +import com.bonus.core.order.common.constants.OrderErrorTypeEnum; + +public interface OrderErrorLogService { + void saveError(Long relatedId, String traceId, OrderErrorTypeEnum typeEnum, String msg, String data); +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderErrorLogServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderErrorLogServiceImpl.java new file mode 100644 index 00000000..21693511 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/common/service/impl/OrderErrorLogServiceImpl.java @@ -0,0 +1,25 @@ +package com.bonus.core.order.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bonus.core.order.common.constants.OrderErrorStateEnum; +import com.bonus.core.order.common.constants.OrderErrorTypeEnum; +import com.bonus.core.order.common.mapper.OrderErrorLogMapper; +import com.bonus.core.order.common.model.OrderErrorLog; +import com.bonus.core.order.common.service.OrderErrorLogService; +import com.bonus.utils.id.Id; +import org.springframework.stereotype.Service; + +@Service +public class OrderErrorLogServiceImpl extends ServiceImpl implements OrderErrorLogService { + public void saveError(Long relatedId, String traceId, OrderErrorTypeEnum typeEnum, String msg, String data) { + OrderErrorLog orderErrorLog = new OrderErrorLog(); + orderErrorLog.setLogId(Id.next()); + orderErrorLog.setRelatedId(relatedId); + orderErrorLog.setTraceId(traceId); + orderErrorLog.setOrderErrorType(typeEnum.getKey()); + orderErrorLog.setOrderErrorState(OrderErrorStateEnum.CREATED.getKey()); + orderErrorLog.setMsg(msg); + orderErrorLog.setData(data); + ((OrderErrorLogMapper)this.baseMapper).insert(orderErrorLog); + } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/listener/OrderMqHandler.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/listener/OrderMqHandler.java new file mode 100644 index 00000000..c43e09b8 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/listener/OrderMqHandler.java @@ -0,0 +1,465 @@ +package com.bonus.core.order.mq.listener; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.bonus.core.common.constant.LeMqConstant; +import com.bonus.core.common.redis.RedisUtil; +import com.bonus.core.common.utils.JacksonUtil; +import com.bonus.core.common.utils.LogUtil; +import com.bonus.core.common.utils.TenantContextHolder; +import com.bonus.core.data.dataset.Executors; +import com.bonus.core.order.common.business.OrderPlaceBusiness; +import com.bonus.core.order.common.business.OrderResultBusiness; +import com.bonus.core.order.common.constants.DishesStateEnum; +import com.bonus.core.order.common.constants.OrderCacheConstants; +import com.bonus.core.order.common.constants.OrderErrorTypeEnum; +import com.bonus.core.order.common.model.OrderInfo; +import com.bonus.core.order.common.service.OrderErrorLogService; +import com.bonus.core.order.common.service.OrderInfoService; +import com.bonus.core.order.mq.MqPayload; +import com.bonus.core.order.mq.MqUtil; +import com.bonus.core.order.mq.po.*; +import com.bonus.core.pay.common.constants.PayStateEnum; +import com.bonus.core.pay.common.constants.TradeTypeEnum; +import com.bonus.core.pay.common.po.PayResultPO; +import com.bonus.core.pay.common.po.RefundResultPO; +import org.redisson.api.RLock; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.function.BiConsumer; + +@Service +public class OrderMqHandler { + private static final Logger log = LoggerFactory.getLogger(OrderMqHandler.class); + @Lazy + @Autowired + private OrderPlaceBusiness orderPlaceBusiness; + @Lazy + @Autowired + private OrderResultBusiness orderResultBusiness; + @Lazy + @Autowired + protected OrderInfoService orderInfoService; +// @Lazy +// @Autowired +// protected OrderPhotoService orderPhotoService; + @Lazy + @Autowired + protected OrderErrorLogService orderErrorLogService; +// @Lazy +// @Autowired +// protected OrderDeviceApi orderDeviceApi; +// @Lazy +// @Autowired +// protected MacWeighBindService macWeighBindService; +// @Lazy +// @Autowired +// private OrderWeightBusiness orderWeightBusiness; +// @Lazy +// @Autowired +// private OrderPayApi orderPayApi; + + public void handleMessage(MqPayload payload, Class clz, BiConsumer handleFunc) { + try { + log.info("[订单消息]收到消息 {}", payload); + T payloadData = JacksonUtil.readValue((String)payload.getData(), clz); + if (payloadData != null) { + Executors.doInTenant(payload.getTenantId(), (s) -> { + handleFunc.accept(this, payloadData); + }); + } else { + log.error("[订单消息]解析失败"); + } + } catch (Exception var5) { + log.error("[订单消息]处理异常", var5); + } + + } + +// public void orderAsyncSave(OrderSavePO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// RLock lock = RedisUtil.getLock(OrderCacheConstants.orderCacheSaveLockKey(payload.getMacOrderId())); +// lock.lock(); +// +// try { +// log.info("[订单异步保存]MQ消费:开始"); +// if (CollUtil.isNotEmpty(payload.getOrderInfoList()) && this.orderInfoService.existOrderId(((OrderInfo)payload.getOrderInfoList().get(0)).getOrderId(), ((OrderInfo)payload.getOrderInfoList().get(0)).getOrderDate())) { +// log.warn("[订单异步保存]MQ消费:订单已存在,不再保存:{}", payload.getMacOrderId()); +// } else { +// this.orderResultBusiness.asyncSaveHandler(payload); +// } +// +// log.info("[订单异步保存]MQ消费:消息消费完成"); +// } catch (Exception var12) { +// log.info("[订单异步保存]MQ消费:处理异常", var12); +// this.orderErrorLogService.saveError(payload.getPayVO().getTradeId(), payload.getTraceId(), OrderErrorTypeEnum.MQ_MAC_ASYNC_SAVE, var12.getMessage(), JacksonUtil.writeValueAsString(payload)); +// } finally { +// if (CharSequenceUtil.isNotBlank(payload.getMacOrderId())) { +// this.orderPlaceBusiness.orderHandlerUnLock(payload.getMacOrderId()); +// } +// +// try { +// if (lock.isHeldByCurrentThread() && lock.isLocked()) { +// lock.unlock(); +// } +// } catch (Exception var11) { +// log.error("解锁异常", var11); +// } +// +// } +// +// } +// +// public void orderAsyncSaveWeight(OrderSaveWeightPO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// RLock lock = RedisUtil.getLock(OrderCacheConstants.orderCacheSaveLockKey(payload.getMacOrderId())); +// lock.lock(); +// +// try { +// log.info("[订单异步保存自助餐]MQ消费:开始"); +// String cacheStr = (String)Executors.readInTenant(payload.getTenantId(), () -> { +// return RedisUtil.getString(OrderCacheConstants.orderCacheKey(payload.getMacOrderId())); +// }); +// if (CharSequenceUtil.isEmpty(cacheStr)) { +// throw new LeException("未查询到缓存 " + payload.getMacOrderId()); +// } +// +// OrderSavePO orderSavePO = (OrderSavePO)JacksonUtil.readValue(cacheStr, OrderSavePO.class); +// if (orderSavePO == null) { +// throw new LeException("[订单异步保存自助餐]缓存解析错误: " + cacheStr); +// } +// +// Executors.doInTenant(payload.getTenantId(), (s) -> { +// this.orderResultBusiness.asyncSaveHandler(orderSavePO); +// }); +// log.info("[订单异步保存自助餐]MQ消费:消息消费完成"); +// } catch (Exception var13) { +// log.error("[订单异步保存自助餐]MQ消费:处理异常", var13); +// Executors.doInTenant(payload.getTenantId(), (s) -> { +// this.orderErrorLogService.saveError((Long)null, payload.getTraceId(), OrderErrorTypeEnum.MQ_MAC_ASYNC_SAVE, var13.getMessage(), JacksonUtil.writeValueAsString(payload)); +// }); +// } finally { +// try { +// if (lock.isHeldByCurrentThread() && lock.isLocked()) { +// lock.unlock(); +// } +// } catch (Exception var12) { +// log.error("解锁异常", var12); +// } +// +// } +// +// } + + public void orderAsyncPayResult(PayResultPO payload) { + if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { + LogUtil.putLogTraceId(payload.getTraceId()); + } else { + LogUtil.generateNewLogTraceId(); + } + + if (!TradeTypeEnum.isConsumeType(payload.getTradeType())) { + log.info("[订单异步支付结果]MQ消费:非消费类型交易,不处理"); + } else { + RLock lock = RedisUtil.getLock(OrderCacheConstants.orderAsyncPayResultLockKey(payload.getTradeId().toString())); + lock.lock(); + String macOrderId = null; + + try { + log.info("[订单异步支付结果]MQ消费:开始"); + macOrderId = (String)Executors.readInTenant(payload.getMerchantId(), () -> { + return this.orderResultBusiness.asyncPayResultHandler(payload); + }); + log.info("[订单异步支付结果]MQ消费:消息消费完成"); + } catch (Exception var13) { + log.error("[订单异步支付结果]MQ消费:处理异常", var13); + Executors.doInTenant(payload.getMerchantId(), (s) -> { + this.orderErrorLogService.saveError(payload.getTradeId(), payload.getTraceId(), OrderErrorTypeEnum.MQ_ORDER_PAY_RESULT, var13.getMessage(), JacksonUtil.writeValueAsString(payload)); + }); + } finally { + if (CharSequenceUtil.isNotEmpty(macOrderId) && PayStateEnum.isFinishedState(payload.getTradeState())) { + this.orderPlaceBusiness.orderHandlerUnLock(macOrderId); + } + + try { + if (lock.isHeldByCurrentThread() && lock.isLocked()) { + lock.unlock(); + } + } catch (Exception var12) { + log.error("解锁异常", var12); + } + + } + + } + } +// +// public void orderTimeout(OrderCancelPO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// try { +// log.info("[订单异步超时]MQ消费:开始"); +// Executors.doInTenant(payload.getMerchantId(), (s) -> { +// this.orderResultBusiness.asyncTradeTimeoutHandler(payload); +// }); +// log.info("[订单异步超时]MQ消费:消息消费完成"); +// } catch (Exception var3) { +// log.error("[订单异步超时]MQ消费:处理异常", var3); +// Executors.doInTenant(payload.getMerchantId(), (s) -> { +// this.orderErrorLogService.saveError(payload.getTradeId(), payload.getTraceId(), OrderErrorTypeEnum.MQ_ORDER_CANCEL, var3.getMessage(), JacksonUtil.writeValueAsString(payload)); +// }); +// } +// +// } +// +// public void updateOrderImage(OrderImagePO payload) { +// LogUtil.generateNewLogTraceId(); +// +// try { +// log.info("[订单图片MQ]-数据:{}", payload); +// TenantContextHolder.setTenantId(payload.getMerchantId()); +// Executors.doInTenant(payload.getMerchantId(), (transactionStatus) -> { +// this.orderPhotoService.saveOrUpdatePhoto(payload.getSaveList()); +// }); +// } catch (Exception var3) { +// log.error("[订单图片MQ]MQ消费:处理异常", var3); +// } +// +// } + +// public void orderPlaced(OrderPlacedPO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// try { +// log.info("[订单已下单]MQ消费:开始"); +// Executors.doInTenant(payload.getTenantId(), (s) -> { +// this.orderResultBusiness.orderPlacedHandler(payload); +// }); +// log.info("[订单已下单]MQ消费:消息消费完成"); +// } catch (Exception var3) { +// log.error("[订单已下单]MQ消费:处理异常", var3); +// } +// +// } +// +// public void orderCanceled(OrderCanceledPO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// try { +// log.info("[订单已取消]MQ消费:开始"); +// Executors.doInTenant(payload.getTenantId(), (s) -> { +// this.orderResultBusiness.orderCanceledHandler(payload); +// }); +// log.info("[订单已取消]MQ消费:消息消费完成"); +// } catch (Exception var3) { +// log.error("[订单已取消]MQ消费:处理异常", var3); +// } +// +// } +// +// public void orderRefunded(OrderRefundPO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// try { +// log.info("[订单已退款]MQ消费:开始"); +// Executors.doInTenant(payload.getTenantId(), (s) -> { +// this.orderResultBusiness.orderRefundedHandler(payload); +// }); +// log.info("[订单已退款]MQ消费:消息消费完成"); +// } catch (Exception var3) { +// log.error("[订单已退款]MQ消费:处理异常", var3); +// } +// +// } +// +// public void orderStateUpdated(OrderDishesStateUpdatePO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// try { +// log.info("[订单更新制作配送状态]MQ消费:开始"); +// Executors.doInTenant(payload.getTenantId(), (s) -> { +// this.orderResultBusiness.orderDishesStateUpdateHandler(payload); +// }); +// log.info("[订单更新制作配送状态]MQ消费:消息消费完成"); +// } catch (Exception var3) { +// log.error("[订单更新制作配送状态]MQ消费:处理异常", var3); +// } +// +// } +// +// public void orderDishesAdd(OrderDishesEditPO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// try { +// log.info("[订单加菜]MQ消费:开始"); +// Executors.doInTenant(payload.getTenantId(), (s) -> { +// this.orderResultBusiness.orderAddDishesHandler(payload); +// }); +// log.info("[订单加菜]MQ消费:消息消费完成"); +// } catch (Exception var3) { +// log.error("[订单加菜]MQ消费:处理异常", var3); +// } +// +// } +// +// public void orderDishesRemove(OrderDishesEditPO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// try { +// log.info("[订单减菜]MQ消费:开始"); +// Executors.doInTenant(payload.getTenantId(), (s) -> { +// this.orderResultBusiness.orderRemoveDishesHandler(payload); +// }); +// log.info("[订单减菜]MQ消费:消息消费完成"); +// } catch (Exception var3) { +// log.error("[订单减菜]MQ消费:处理异常", var3); +// } +// +// } +// +// public void DcPushUser(JSONObject content) { +// try { +// log.info(content.toJSONString()); +// Long ordId = content.getLong("ordId"); +// OrderChangePO orderChangePO = this.orderDeviceApi.getOrderInfoById(ordId); +// OrderInfo orderInfo = orderChangePO.getOrderInfo(); +// if (DishesStateEnum.WAIT_TAKE.getKey().equals(orderInfo.getDishesState())) { +// Integer cleanType = content.getInteger("clean"); +// if (cleanType == 2) { +// String sendTimeStr = content.getString("sendTime"); +// if (sendTimeStr != null) { +// LocalDateTime sendTime = LocalDateTime.parse(sendTimeStr, DateTimeFormatter.ISO_LOCAL_DATE_TIME); +// orderChangePO.setTimeoutClean(sendTime); +// } +// } +// +// orderChangePO.setCleanType(cleanType); +// MqUtil.send(JSON.toJSONString(orderChangePO), LeMqConstant.Topic.ORDER_CHANGE); +// } +// } catch (Exception var8) { +// log.error("[取餐柜超时]MQ消费:处理异常", var8); +// } +// +// } +// +// public void buffetPay(BuffetBindPayDto payload) { +// LogUtil.generateNewLogTraceId(); +// +// try { +// log.info("[计量主机支付]MQ入参:{}", payload); +// Executors.doInTenant(payload.getMerchantId(), (s) -> { +// String version = RedisUtil.getString(String.format("yunshitang:%s:payversion:%s", payload.getMerchantId(), payload.getMacOrdId())); +// if ((!ObjectUtil.isEmpty(payload.getPayversion()) || !ObjectUtil.isNotEmpty(version)) && (!ObjectUtil.isNotEmpty(payload.getPayversion()) || payload.getPayversion().equals(version))) { +// OrderWeightPayDTO orderWeightPayDTO = new OrderWeightPayDTO(); +// orderWeightPayDTO.setMacOrderId(payload.getMacOrdId()); +// orderWeightPayDTO.setWeightBindType(payload.getBindType()); +// orderWeightPayDTO.setOpenid(payload.getOpenId()); +// AliMacWeightBindVO bindVO = this.orderPayApi.getAliMacWeightBindByMacOrdId(payload.getMacOrdId()); +// if (bindVO != null) { +// orderWeightPayDTO.setAliSign(bindVO.getAliSign()); +// orderWeightPayDTO.setAlifToken(bindVO.getAlifToken()); +// } +// +// OrderWeightPayVO orderWeightPayVO = this.orderWeightBusiness.pay(orderWeightPayDTO); +// if (!orderWeightPayVO.weightPaySuccess() && (ObjectUtil.isEmpty(payload.getPayNum()) ? 2 : payload.getPayNum()) < 4) { +// payload.setPayNum(ObjectUtil.isEmpty(payload.getPayNum()) ? 2 : payload.getPayNum() + 1); +// BuffetBindSend.bindPaySend(payload); +// } +// +// if (ObjectUtil.isEmpty(payload.getPayNum()) || payload.getPayNum() < 2) { +// this.macWeighBindService.cleanAfterOrderPaid(payload.getMacOrdId(), payload.getPlateSerialNum()); +// } +// +// } +// }); +// } catch (Exception var3) { +// log.error("[计量主机支付]:处理异常", var3); +// } +// +// } +// +// public void orderAsyncRefundResult(RefundResultPO payload) { +// if (CharSequenceUtil.isNotEmpty(payload.getTraceId())) { +// LogUtil.putLogTraceId(payload.getTraceId()); +// } else { +// LogUtil.generateNewLogTraceId(); +// } +// +// if (!TradeTypeEnum.isConsumeRefundType(payload.getTradeType())) { +// log.info("[订单异步支付结果]MQ消费:非消费退款类型交易,不处理"); +// } else { +// RLock lock = RedisUtil.getLock(OrderCacheConstants.orderAsyncPayResultLockKey(payload.getRefundTradeId().toString())); +// lock.lock(); +// +// try { +// log.info("[订单异步退款结果]MQ消费:开始"); +// Executors.doInTenant(payload.getMerchantId(), (s) -> { +// this.orderResultBusiness.asyncRefundResultHandler(payload); +// }); +// log.info("[订单异步退款结果]MQ消费:消息消费完成"); +// } catch (Exception var12) { +// log.error("[订单异步退款结果]MQ消费:处理异常", var12); +// Executors.doInTenant(payload.getMerchantId(), (s) -> { +// this.orderErrorLogService.saveError(payload.getRefundTradeId(), payload.getTraceId(), OrderErrorTypeEnum.MQ_ORDER_REFUND_RESULT, var12.getMessage(), JacksonUtil.writeValueAsString(payload)); +// }); +// } finally { +// try { +// if (lock.isHeldByCurrentThread() && lock.isLocked()) { +// lock.unlock(); +// } +// } catch (Exception var11) { +// log.error("解锁异常", var11); +// } +// +// } +// +// } +// } +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/listener/OrderMqListenerAsyncPayResult.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/listener/OrderMqListenerAsyncPayResult.java new file mode 100644 index 00000000..b739ea1e --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/core/order/mq/listener/OrderMqListenerAsyncPayResult.java @@ -0,0 +1,26 @@ +package com.bonus.core.order.mq.listener; + +import com.bonus.core.order.mq.MqPayload; +import com.bonus.core.pay.common.po.PayResultPO; +import com.bonus.mq.MQListener; +import com.bonus.mq.MQMessageListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; + +@MQMessageListener( + group = "order-order-v3-async-pay-result", + topic = "order", + tag = "order-v3-async-pay-result" +) +public class OrderMqListenerAsyncPayResult implements MQListener> { + private static final Logger log = LoggerFactory.getLogger(OrderMqListenerAsyncPayResult.class); + @Autowired + @Lazy + private OrderMqHandler orderMqHandler; + + public void onMessage(MqPayload payload) { + this.orderMqHandler.handleMessage(payload, PayResultPO.class, OrderMqHandler::orderAsyncPayResult); + } +}