admin
2020-04-08 4e7d423e48139727ec7177855f5c4949530b8817
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.Calendar;
import java.util.Date;
import java.util.List;
 
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.google.gson.Gson;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.OrderConfirmMQMsg;
import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
import com.yeshi.fanli.dto.mq.user.body.UserForbiddenMQMsg;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.ParamsException;
import com.yeshi.fanli.exception.money.TeamDividentsDebtException;
import com.yeshi.fanli.exception.order.dividents.TeamDividentsSourceOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.dividents.TeamDividentsSourceOrderService;
import com.yeshi.fanli.service.manger.order.TeamDividentsManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
 
/**
 * 订单分红消息
 * @author Administrator
 *
 */
@Component
public class OrderDividentsMessageListener implements MessageListener {
 
    @Resource
    private TeamDividentsSourceOrderService teamDividentsSourceOrderService;
 
    @Resource
    private CommonOrderService commonOrderService;
 
    @Resource
    private TeamDividentsManager teamDividentsManager;
 
    public OrderDividentsMessageListener() {
 
    }
 
    @Override
    public Action consume(Message message, ConsumeContext context) {
        LogHelper.mqInfo("consumer:OrderDividentsMessageListener", message.getMsgID(), message.getTopic(),
                message.getTag(), new String(message.getBody()));
        String tag = message.getTag();
 
        if (MQTopicName.TOPIC_USER.name().equalsIgnoreCase(message.getTopic())) {
            if (tag.equalsIgnoreCase(UserTopicTagEnum.forbiddenUser.name())) {
                // 查询上级红包
                UserForbiddenMQMsg dto = new Gson().fromJson(new String(message.getBody()), UserForbiddenMQMsg.class);
                if (dto != null) {
                    teamDividentsSourceOrderService.invalidOrderByUid(dto.getUid(), "用户被封禁");
                    return Action.CommitMessage;
                }
            }
        } else if (MQTopicName.TOPIC_ORDER.name().equalsIgnoreCase(message.getTopic())) {
            // 订单确认收货
            if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderConfirm.name())) {
                // 插入分红
                OrderConfirmMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderConfirmMQMsg.class);
                List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(dto.getSourceType(),
                        dto.getOrderNo());
                BigDecimal eincome = new BigDecimal(0);
                Date settleTime = null;
                for (CommonOrder order : commonOrderList) {
                    if (order.getState() == CommonOrder.STATE_JS)
                        eincome = eincome.add(order.geteIncome());
                    if (settleTime == null)
                        settleTime = order.getSettleTime();
                }
 
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(settleTime);
                calendar.add(Calendar.MONTH, 1);
                Date preSendTime = new Date(TimeUtil.convertToTimeTemp(
                        calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd"));
 
                TeamDividentsSourceOrder sourceOrder = new TeamDividentsSourceOrder();
                sourceOrder.setMoney(eincome);
                sourceOrder.setOrderNo(dto.getOrderNo());
                sourceOrder.setPreSendTime(preSendTime);
                sourceOrder.setSourceType(dto.getSourceType());
                sourceOrder.setState(TeamDividentsSourceOrder.STATE_CAN_SEND);
                sourceOrder.setUid(dto.getSourceUid());
                try {
                    teamDividentsSourceOrderService.addTeamDividentsSourceOrder(sourceOrder);
                    return Action.CommitMessage;
                } catch (ParamsException e) {
                    e.printStackTrace();
                } catch (TeamDividentsSourceOrderException e) {
                    e.printStackTrace();
                }
 
            } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.taoBaoOrderWeiQuan.name())) {
                TaoBaoWeiQuanOrder dto = new Gson().fromJson(new String(message.getBody()), TaoBaoWeiQuanOrder.class);
                try {
                    teamDividentsManager.weiQuan(dto.getOrderId(), Constant.SOURCE_TYPE_TAOBAO);
                    return Action.CommitMessage;
                } catch (TeamDividentsDebtException e) {
                    e.printStackTrace();
                }
            }
        }
        return Action.CommitMessage;
    }
}