yujian
2020-04-10 469bba3a544b3beef0c170f6fce5804c9e8a9676
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
package com.yeshi.fanli.service.impl.order.msg;
 
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import com.google.gson.Gson;
import com.yeshi.fanli.dto.push.PushContentDTO;
import com.yeshi.fanli.entity.bus.msg.MsgExtra;
import com.yeshi.fanli.entity.bus.msg.MsgOrderDetail;
import com.yeshi.fanli.entity.bus.msg.MsgOrderDetail.MsgTypeOrderTypeEnum;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.config.push.PushMsgFactory;
import com.yeshi.fanli.exception.msg.MsgOrderDetailException;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.service.inter.msg.MsgExtraService;
import com.yeshi.fanli.service.inter.order.msg.MsgOrderDetailService;
import com.yeshi.fanli.service.inter.order.msg.UserOrderMsgNotificationService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.factory.msg.MsgOrderDetailFactory;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.fanli.vo.msg.CommonMsgItemVO;
import com.yeshi.fanli.vo.msg.CommonMsgItemVOFactory;
 
@Service
public class UserOrderMsgNotificationServiceImpl implements UserOrderMsgNotificationService {
 
    @Resource
    private MsgOrderDetailService msgOrderDetailService;
 
    @Resource
    private PushService pushService;
    
    @Resource
    private MsgExtraService msgExtraService;
    
 
    @Override
    public void orderFanLiStatistic(Long uid, String orderId, int orderType, BigDecimal payMoney, BigDecimal money,
            int goodsCount, int orderState, Date downTime) {
        // 是否通知
        boolean needNotify = (payMoney != null && payMoney.compareTo(new BigDecimal(0)) > 0) ? true : false;
        // 保存消息明细消息
        addOrderStatistics(uid, orderId, orderType, Constant.TYPE_REBATE, goodsCount, payMoney, money, downTime, null, needNotify);
        
        if (needNotify) {
            PushContentDTO dto = PushMsgFactory.createFanLiOrderStatisticed(orderType, orderId, money);
            try {
                pushService.pushZNX(uid, dto.getTitle(), dto.getContent(), null, null);
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (PushException e) {
                e.printStackTrace();
            }
        }
    }
 
    @Override
    public void orderFanLiStateChanged(Long uid, String orderId, int orderType, BigDecimal payMoney, BigDecimal money,
            int orderState) {
        MsgOrderDetail detail = MsgOrderDetailFactory.createFanLiOrder(uid, orderId, orderType, 0, orderState, payMoney,
                money, null);
        // 暂时不推送
        try {
            msgOrderDetailService.updateMsgOrderDetail(detail, false);
        } catch (MsgOrderDetailException e) {
            e.printStackTrace();
        }
 
    }
 
    @Override
    public void orderShareStatistic(Long uid, String orderId, int orderType, BigDecimal payMoney, BigDecimal money,
            int goodsCount, int orderState, Date downTime) {
        // 是否通知
        boolean needNotify = (payMoney != null && payMoney.compareTo(new BigDecimal(0)) > 0) ? true : false;
        // 保存消息明细消息
        addOrderStatistics(uid, orderId, orderType, Constant.TYPE_SHAER, goodsCount, payMoney, money, downTime, null, needNotify);
        
 
        PushContentDTO dto = PushMsgFactory.createShareOrderStatisticed(orderType, orderId, money);
        try {
            pushService.pushZNX(uid, dto.getTitle(), dto.getContent(), null, null);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (PushException e) {
            e.printStackTrace();
        }
 
    }
 
    @Override
    public void orderShareStateChanged(Long uid, String orderId, int orderType, BigDecimal payMoney, BigDecimal money,
            int orderState) {
        MsgOrderDetail detail = MsgOrderDetailFactory.createShareOrder(uid, orderId, orderType, 0, orderState, payMoney,
                money, null);
        // 暂时不推送
        // try {
        // msgOrderDetailService.updateMsgOrderDetail(detail, false);
        // } catch (MsgOrderDetailException e) {
        // e.printStackTrace();
        // }
 
    }
 
    @Override
    public void orderInviteStatistic(Long uid, String orderId, int orderType, BigDecimal payMoney, BigDecimal money,
            int goodsCount, int orderState, Date downTime) {
        // 是否通知
        boolean needNotify = (payMoney != null && payMoney.compareTo(new BigDecimal(0)) > 0) ? true : false;
        // 保存消息明细消息
        addOrderStatistics(uid, orderId, orderType, Constant.TYPE_INVITE, goodsCount, payMoney, money, downTime, null, needNotify);
                
 
        PushContentDTO dto = PushMsgFactory.createInviteOrderStatisticed(orderType, orderId, money);
        try {
            pushService.pushZNX(uid, dto.getTitle(), dto.getContent(), null, null);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (PushException e) {
            e.printStackTrace();
        }
    }
 
    @Override
    public void orderInviteStateChanged(Long uid, String orderId, int orderType, BigDecimal payMoney, BigDecimal money,
            int orderState) {
        MsgOrderDetail detail = MsgOrderDetailFactory.createInviteOrder(uid, orderId, orderType, 0, orderState,
                payMoney, money, null);
        // 暂时不推送
        // try {
        // msgOrderDetailService.updateMsgOrderDetail(detail, false);
        // } catch (MsgOrderDetailException e) {
        // e.printStackTrace();
        // }
 
    }
 
    private String getShortName(String name) {
        if (name != null && name.length() > 2) {
            return name.charAt(0) + "**" + name.charAt(name.length() - 1);
        }
        return name;
    }
 
    @Override
    public void orderShareFirstLevelStatistic(Long uid, String orderId, int orderType, BigDecimal payMoney,
            BigDecimal money, int goodsCount, int orderState, String sourceUserName) {
        MsgOrderDetail detail = MsgOrderDetailFactory.createInviteOrder(uid, orderId, orderType, goodsCount, orderState,
                payMoney, money, String.format("由直接粉丝【%s】分享", getShortName(sourceUserName)));
        try {
            msgOrderDetailService.addMsgOrderDetail(detail,
                    (money == null || money.compareTo(new BigDecimal(0)) <= 0) ? false : true);
        } catch (MsgOrderDetailException e) {
            e.printStackTrace();
        }
 
        PushContentDTO dto = PushMsgFactory.createInviteOrderStatisticed(orderType, orderId, money);
        try {
            pushService.pushZNX(uid, dto.getTitle(), dto.getContent(), null, null);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (PushException e) {
            e.printStackTrace();
        }
    }
 
    @Override
    public void orderShareFirstLevelStateChanged(Long uid, String orderId, int orderType, BigDecimal payMoney,
            BigDecimal money, int orderState) {
        MsgOrderDetail detail = MsgOrderDetailFactory.createInviteOrder(uid, orderId, orderType, 0, orderState,
                payMoney, money, null);
        // 暂时不推送
        // try {
        // msgOrderDetailService.updateMsgOrderDetail(detail, false);
        // } catch (MsgOrderDetailException e) {
        // e.printStackTrace();
        // }
    }
 
    @Override
    public void orderFoundSuccess(Long uid, String orderId, int orderSource, int type, BigDecimal payMoney, BigDecimal money, int goodsCount, Date submitTime) {
        createOrderFoundSuccess(uid, orderId, orderSource, type, goodsCount, payMoney, money, submitTime, "");
    }
 
    @Override
    public void orderFoundFail(Long uid, String orderId, BigDecimal payMoney, int orderType, Date happendDate) {
        createOrderFoundFail(uid, orderId, null);
    }
 
    @Override
    public void orderElmeStatistic(Long uid, String orderId, int orderType, BigDecimal payMoney, BigDecimal money,
            int orderState) {
        MsgOrderDetail detail = MsgOrderDetailFactory.createElmeOrder(uid, orderId, orderType, orderState, payMoney,
                money, null);
        try {
            msgOrderDetailService.addMsgOrderDetail(detail,
                    (payMoney == null || payMoney.compareTo(new BigDecimal(0)) <= 0) ? false : true);
        } catch (MsgOrderDetailException e) {
            e.printStackTrace();
        }
    }
 
    @Override
    public void orderElmeStateChanged(Long uid, String orderId, int orderType, BigDecimal payMoney, BigDecimal money,
            int orderState) {
        MsgOrderDetail detail = MsgOrderDetailFactory.createElmeOrder(uid, orderId, orderType, orderState, payMoney,
                money, null);
        // 暂时不推送
        try {
            msgOrderDetailService.updateMsgOrderDetail(detail, false);
        } catch (MsgOrderDetailException e) {
            e.printStackTrace();
        }
    }
 
    
    
    /**
     * 创建订单被统计消息
     * @param uid
     * @param orderId 订单号
     * @param source  订单来源:淘宝、京东、天猫
     * @param type    订单类型:自购、分享、团队
     * @param goodsCount 商品数量
     * @param payMoney  付款金额
     * @param money     返利金额
     * @param downTime  下单时间
     * @param beiZhu 备注信息 - 非必填
     * @return
     */
    @Transactional
    private void addOrderStatistics(Long uid, String orderId, int source, int type, int goodsCount,
        BigDecimal payMoney, BigDecimal money, Date downTime, String beiZhu, boolean needNotify) {
        try {
            MsgOrderDetail detail = MsgOrderDetailFactory.createOrderStatistics(uid, orderId, source, type, goodsCount, payMoney, money, downTime, beiZhu);
            // 消息
            msgOrderDetailService.addMsgOrderDetail(detail, needNotify);
            // 消息内容
            msgExtraService.addMsgExtra(detail.getId(),detail.getExtraInfo(), MsgExtra.MSG_TYPE_ORDER);
        } catch (MsgOrderDetailException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 订单找回成功
     * @param uid
     * @param orderId 订单号
     * @param source  订单来源:淘宝、京东、天猫
     * @param type    订单类型:自购、分享、团队
     * @param goodsCount 商品数量
     * @param payMoney  付款金额
     * @param money     返利金额
     * @param submitTime  提交时间
     * @param beiZhu 备注信息 - 非必填
     * @return
     */
    private void createOrderFoundSuccess(Long uid, String orderId, int source, int type, int goodsCount,
            BigDecimal payMoney, BigDecimal money, Date submitTime, String beiZhu) {
        try {
            MsgOrderDetail detail = MsgOrderDetailFactory.createOrderFoundSuccess(uid, orderId, source, type, goodsCount, payMoney, money, submitTime, beiZhu);
            // 消息
            msgOrderDetailService.addMsgOrderDetail(detail, true);
            // 消息内容
            msgExtraService.addMsgExtra(detail.getId(), detail.getExtraInfo(), MsgExtra.MSG_TYPE_ORDER);
        } catch (MsgOrderDetailException e) {
            e.printStackTrace();
        }
    }
    
    
    /**
     * 订单找回失败
     * @param uid
     * @param orderId
     * @param beiZhu
     * @return
     */
    private void createOrderFoundFail(Long uid, String orderId, String beiZhu) {
        try {
            MsgOrderDetail detail = MsgOrderDetailFactory.createOrderFoundFail(uid, orderId, beiZhu);
            // 消息
            msgOrderDetailService.addMsgOrderDetail(detail, true);
            // 消息内容
            msgExtraService.addMsgExtra(detail.getId(), detail.getExtraInfo(), MsgExtra.MSG_TYPE_ORDER);
        } catch (MsgOrderDetailException e) {
            e.printStackTrace();
        }
    }
    
}