admin
2019-10-25 733281fcb5f1ab01e1196b542b7e07b49b3e44c4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.yeshi.fanli.util.rocketmq.order;
 
import java.util.List;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Component;
 
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.transaction.LocalTransactionChecker;
import com.aliyun.openservices.ons.api.transaction.TransactionStatus;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.order.OrderMoneyRecievedMQMsgDTO;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2SettleTempService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService;
import com.yeshi.fanli.util.rocketmq.MQTagConstant;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
 
@Component
public class MQLocalTransactionChecker implements LocalTransactionChecker {
 
    @Resource
    private MQLocalUserCouponUsedTransactionChecker mqLocalUserCouponUsedTransactionChecker;
 
    @Resource
    private HongBaoV2SettleTempService hongBaoV2SettleTempService;
 
    @Resource
    private InviteOrderSubsidyService inviteOrderSubsidyService;
 
    @Resource
    private CommonOrderService commonOrderService;
 
    @Resource
    private HongBaoOrderService hongBaoOrderService;
 
    public MQLocalTransactionChecker() {
 
    }
 
    @Override
    public TransactionStatus check(Message msg) {
 
        if (msg.getTopic().equalsIgnoreCase(MQTopicName.TOPIC_ORDER.name())) {
            if (msg.getTag().startsWith(MQTagConstant.TAG_ORDER_STATISTIC_PREFIX)) {// 订单加入红包标识
                return TransactionStatus.CommitTransaction;
            }
        } else if (msg.getTopic().equalsIgnoreCase(MQTopicName.TOPIC_FANLI.name())) {
            if (msg.getTag().equalsIgnoreCase("actual")) {// 查询key值是否在
                if (hongBaoV2SettleTempService.countByKey(msg.getKey()) > 0)
                    return TransactionStatus.CommitTransaction;
                else
                    return TransactionStatus.RollbackTransaction;
            } else if (msg.getTag().equalsIgnoreCase("delay")) {
                OrderMoneyRecievedMQMsgDTO dto = new Gson().fromJson(new String(msg.getBody()),
                        OrderMoneyRecievedMQMsgDTO.class);
                if (dto != null) {
                    if (dto.getType() == OrderMoneyRecievedMQMsgDTO.TYPE_ZIGOU) {
                        // TODO 尚未处理一个订单部分到账的状况
                        // 返利是否到账
                        List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(dto.getSourceType(),
                                dto.getOrderId());
                        for (CommonOrder order : orderList) {
                            HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(order.getId());
                            if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null
                                    && hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_YILINGQU) {
                                return TransactionStatus.CommitTransaction;
                            }
                        }
                        return TransactionStatus.RollbackTransaction;
                    }
                }
 
                // 其他未知条件暂时处理为回滚
                return TransactionStatus.RollbackTransaction;
            }
        } else if (msg.getTopic().equalsIgnoreCase(MQTopicName.TOPIC_SYSTEM_COUPON_USE.name())) {
            return mqLocalUserCouponUsedTransactionChecker.check(msg);
        }
 
        return TransactionStatus.Unknow;
    }
}