yujian
2020-04-10 97486e6417f97714d33b0214773876531461f6cb
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.yeshi.fanli.util.rocketmq.consumer.order;
 
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Component;
 
import com.aliyun.openservices.ons.api.Action;
import com.aliyun.openservices.ons.api.ConsumeContext;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.MessageListener;
import com.aliyun.openservices.ons.api.Producer;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.OrderMoneyRecievedMQMsg;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.HongBaoV2SettleTemp;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2SettleTempService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
 
/**
 * 订单到账消费
 * 
 * @author Administrator
 *
 */
@Component
public class OrderMoneyRecievedMessageListener implements MessageListener {
 
    @Resource
    private HongBaoV2SettleTempService hongBaoV2SettleTempService;
 
    @Resource
    private HongBaoV2Service hongBaoV2Service;
 
    @Resource
    private HongBaoOrderService hongBaoOrderService;
 
    @Resource
    private Producer producer;
 
    private int getHongBaoType(int type) {
        switch (type) {
        case HongBaoV2.TYPE_YIJI:
        case HongBaoV2.TYPE_ERJI:
        case HongBaoV2.TYPE_SHARE_YIJI:
        case HongBaoV2.TYPE_SHARE_ERJI:
            return OrderMoneyRecievedMQMsg.TYPE_INVITE;
        case HongBaoV2.TYPE_SHARE_GOODS:
            return OrderMoneyRecievedMQMsg.TYPE_SHARE;
        case HongBaoV2.TYPE_ZIGOU:
            return OrderMoneyRecievedMQMsg.TYPE_ZIGOU;
        }
        return 0;
    }
 
    @Override
    public Action consume(Message message, ConsumeContext context) {
        LogHelper.mqInfo("consumer:OrderMoneyRecievedMessageListener", message.getMsgID(), message.getTopic(),
                message.getTag(), new String(message.getBody()));
        // 根据红包做订单分发
        if (MQTopicName.TOPIC_ORDER.name().equalsIgnoreCase(message.getTopic())) {
            if (OrderTopicTagEnum.orderFanLiActual.name().equalsIgnoreCase(message.getTag())) {
                String key = message.getKey();
                List<HongBaoV2SettleTemp> list = hongBaoV2SettleTempService.listByKey(key);
                Map<String, BigDecimal> moneyMap = new HashMap<>();
                // 临时订单消息
                for (HongBaoV2SettleTemp temp : list) {
                    long hongBaoId = temp.getHongBaoId();
                    HongBaoV2 v2 = hongBaoV2Service.selectByPrimaryKey(hongBaoId);
                    if (v2 != null) {
                        long mainHongBaoId = v2.getId();
                        if (v2.getParent() != null)
                            mainHongBaoId = v2.getParent().getId();
                        HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByHongBaoId(mainHongBaoId);
                        if (hongBaoOrder != null && hongBaoOrder.getCommonOrder() != null) {
                            // 按订单号与用户统计资金
                            String mapKey = String.format("%s#%s#%s#%s", hongBaoOrder.getCommonOrder().getOrderNo(),
                                    hongBaoOrder.getCommonOrder().getSourceType(), v2.getUserInfo().getId(),
                                    getHongBaoType(v2.getType()));
                            if (moneyMap.get(mapKey) == null)
                                moneyMap.put(mapKey, new BigDecimal(0));
                            moneyMap.put(mapKey, moneyMap.get(mapKey).add(v2.getMoney()));
                        }
                    }
                }
 
                for (Iterator<String> its = moneyMap.keySet().iterator(); its.hasNext();) {
                    String mapKey = its.next();
                    String[] mapKeys = mapKey.split("#");
                    String orderNo = mapKeys[0];
                    String sourceType = mapKeys[1];
                    String uid = mapKeys[2];
                    String type = mapKeys[3];
                    OrderMoneyRecievedMQMsg msg = new OrderMoneyRecievedMQMsg(Integer.parseInt(type),
                            Long.parseLong(uid), Integer.parseInt(sourceType), orderNo, moneyMap.get(mapKey),
                            new Date(), 0);
                    LogHelper.test(String.format("批量返利到账订单分发:\n key值:%s  \n 内容:%s", key, new Gson().toJson(msg)));
                    producer.send(MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER,
                            OrderTopicTagEnum.orderFanLiSeparateByOrderNo, msg));
                }
 
                return Action.CommitMessage;
            }
        }
 
        return Action.CommitMessage;
    }
 
}