TaskMessageConsumer.java 2.16 KB
package com.diligrp.cashier.trade.manager;

import com.diligrp.cashier.shared.util.NumberUtils;
import com.diligrp.cashier.trade.Constants;
import com.diligrp.cashier.trade.domain.TaskMessage;
import com.diligrp.cashier.trade.service.ICashierAssistantService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

import java.nio.charset.StandardCharsets;

@Service("taskMessageConsumer")
public class TaskMessageConsumer {

    private static final Logger LOG = LoggerFactory.getLogger(TaskMessageConsumer.class);

    @Resource
    private ICashierAssistantService cashierAssistantService;

    /**
     * 监听支付通道异步处理任务消息
     */
    @RabbitHandler
    @RabbitListener(queues = {Constants.PAYMENT_DELAY_QUEUE})
    public void onDelayMessage(Message message) {
        byte[] packet = message.getBody();
        MessageProperties properties = message.getMessageProperties();
        String charSet = properties != null && properties.getContentEncoding() != null
                ? properties.getContentEncoding() : StandardCharsets.UTF_8.name();
        try {
            String body = new String(packet, charSet);
            LOG.debug("Receiving async delay task message: {}", body);
            TaskMessage task = TaskMessage.fromJson(body);
            int times = NumberUtils.str2Int(task.getParams(), Integer.MAX_VALUE);
            if (task.getType() == TaskMessage.TYPE_CASHIER_ORDER_SCAN) {
                cashierAssistantService.scanCashierTradeOrder(task.getPayload(), times);
            } else if (task.getType() == TaskMessage.TYPE_CASHIER_REFUND_SCAN) {
                cashierAssistantService.scanCashierRefundOrder(task.getPayload(), times);
            } else {
                LOG.error("Never happened");
            }
        } catch (Exception ex) {
            LOG.error("Consume async delay task message exception", ex);
        }
    }
}