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
302
303
304
305
306
307
308
309
310
311
312
313
314
315
package cn.wisenergy.service.app.impl;
import cn.wisenergy.common.constant.CommonAttributes;
import cn.wisenergy.common.utils.R;
import cn.wisenergy.mapper.OrderMapper;
import cn.wisenergy.mapper.RecommendUserMapper;
import cn.wisenergy.mapper.UsersMapper;
import cn.wisenergy.model.app.OrderInfo;
import cn.wisenergy.model.app.RecommendUser;
import cn.wisenergy.model.dto.AccountInfoQuery;
import cn.wisenergy.model.dto.OrderInfoQuery;
import cn.wisenergy.service.app.OrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageInfo;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.youzan.cloud.open.sdk.common.exception.SDKException;
import com.youzan.cloud.open.sdk.core.client.auth.Token;
import com.youzan.cloud.open.sdk.core.client.core.DefaultYZClient;
import com.youzan.cloud.open.sdk.core.oauth.model.OAuthToken;
import com.youzan.cloud.open.sdk.core.oauth.token.TokenParameter;
import com.youzan.cloud.open.sdk.gen.v4_0_0.model.YouzanTradesSoldGetResult;
import com.youzan.cloud.open.sdk.gen.v4_0_1.api.YouzanTradesSoldGet;
import com.youzan.cloud.open.sdk.gen.v4_0_1.model.YouzanTradesSoldGetParams;
import javafx.scene.input.DataFormat;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* @author zw
* @ Description: 定期获取有赞订单数据及更新订单状态
* @ Author : zw
* @ Date : 2021/2/22 17:06
*/
@Service
@Slf4j
public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private UsersMapper usersMapper;
@Autowired
private RecommendUserMapper recommendUserMapper;
//有赞客户端
DefaultYZClient yzClient = new DefaultYZClient();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startCreatedDate = null;
Date endCreatedDate = null;
Date startUpdateDate = null;
Date endUpdateDate = null;
// Date date = new Date();
/**
* 根据订单的创建时间获取有赞的订单数据 插入本地数据库
*
* @return
* @throws SDKException
*/
@XxlJob(value = "YouZanOrdersjobhandler")
@Override
public void getYouZanOrdersForCreateTime() throws SDKException {
Date date = new Date();
Token token = youzanToken();
YouzanTradesSoldGet youzanTradesSoldGet = new YouzanTradesSoldGet();
//创建参数对象,并设置参数
YouzanTradesSoldGetParams youzanTradesSoldGetParams = new YouzanTradesSoldGetParams();
OrderInfo orderInfo = new OrderInfo();
try {
// startCreatedDate = sdf.parse("2021-01-28 11:04:01");
// endCreatedDate = sdf.parse("2021-03-1 16:39:59");
//当前时间的前1分钟
startCreatedDate = sdf.parse(sdf.format(new Date(date.getTime() - (long) 5 * 60 * 1000)));
log.info("订单创建开始时间" + sdf.format(startCreatedDate));
endCreatedDate = sdf.parse(sdf.format(date));
String format = sdf.format(date);
log.info("订单创建结束时间" + sdf.format(endCreatedDate));
} catch (ParseException e) {
e.printStackTrace();
}
//设置查询条件 --> 根据订单创建时间获取
youzanTradesSoldGetParams.setStartCreated(startCreatedDate);
youzanTradesSoldGetParams.setEndCreated(endCreatedDate);
youzanTradesSoldGet.setAPIParams(youzanTradesSoldGetParams);
//执行查询
YouzanTradesSoldGetResult result = yzClient.invoke(youzanTradesSoldGet, token, YouzanTradesSoldGetResult.class);
List<YouzanTradesSoldGetResult.YouzanTradesSoldGetResultFullorderinfolist> fullOrderInfoList = result.getData().getFullOrderInfoList();
//遍历订单数据
for (YouzanTradesSoldGetResult.YouzanTradesSoldGetResultFullorderinfolist youzanTradesSoldGetResultFullorderinfolist : fullOrderInfoList) {
YouzanTradesSoldGetResult.YouzanTradesSoldGetResultBuyerinfo buyerInfo = youzanTradesSoldGetResultFullorderinfolist.getFullOrderInfo().getBuyerInfo();
List<YouzanTradesSoldGetResult.YouzanTradesSoldGetResultOrders> orders = youzanTradesSoldGetResultFullorderinfolist.getFullOrderInfo().getOrders();
YouzanTradesSoldGetResult.YouzanTradesSoldGetResultOrderinfo youzanOrderInfo = youzanTradesSoldGetResultFullorderinfolist.getFullOrderInfo().getOrderInfo();
YouzanTradesSoldGetResult.YouzanTradesSoldGetResultPayinfo payInfo = youzanTradesSoldGetResultFullorderinfolist.getFullOrderInfo().getPayInfo();
//item_id 字段 处理
List<String> itemList = new ArrayList<>();
for (YouzanTradesSoldGetResult.YouzanTradesSoldGetResultOrders order : orders) {
String itemId = order.getItemId().toString();
itemList.add(itemId);
}
orderInfo.setItemId(itemList.toString());
//有赞的outer_user_id 与有赞的对应关系是邀请码 邀请码唯一
String outerUserId = buyerInfo.getOuterUserId();
log.info("有赞返回OutUserId------------" + outerUserId);
String userId = usersMapper.getUserIdByIntiveCode(outerUserId);
log.info("对应西田森系统中的用户Id--------" + userId);
orderInfo.setUserId(userId);
//支付方式
orderInfo.setPayType(youzanOrderInfo.getPayType().toString());
//有赞update_time
orderInfo.setYouzanUpdateTime(youzanOrderInfo.getUpdateTime());
//tid
orderInfo.setTid(youzanOrderInfo.getTid());
//created 订单创建时间
orderInfo.setCreated(youzanOrderInfo.getCreated());
//team_type 店铺类型
orderInfo.setTeamType(youzanOrderInfo.getTeamType());
//pay_time
orderInfo.setPayTime(youzanOrderInfo.getPayTime());
//pay_type_str 支付渠道
orderInfo.setPayTypeStr(youzanOrderInfo.getPayTypeStr());
//close_type
orderInfo.setCloseType(youzanOrderInfo.getCloseType().intValue());
//refund_state 退款状态
orderInfo.setRefundState(youzanOrderInfo.getRefundState());
//success_time
orderInfo.setSuccessTime(youzanOrderInfo.getSuccessTime());
//payment
orderInfo.setPayment(new BigDecimal(payInfo.getPayment()));
//当前订单所对应的用户直推表当月消费 累计消费字段累加
RecommendUser recommendUserMapperByUserId = recommendUserMapper.getByUserId(userId);
if (null != recommendUserMapperByUserId){
//历史消费
BigDecimal historyCount = recommendUserMapperByUserId.getHistoryCount();
//当月消费
BigDecimal monthyCount = recommendUserMapperByUserId.getMonthyCount();
recommendUserMapperByUserId.setHistoryCount(historyCount.add(new BigDecimal(payInfo.getPayment())));
recommendUserMapperByUserId.setMonthyCount(monthyCount.add(new BigDecimal(payInfo.getPayment())));
recommendUserMapper.updateById(recommendUserMapperByUserId);
}
//rebate_status 返佣状态
orderInfo.setRebateStatus(0);
//level_status 升级状态
orderInfo.setLevelStatus(0);
//month_order_status //当月订单处理状态
orderInfo.setMonthOrderStatus(0);
//monthly_task_status //月度任务处理状态
orderInfo.setMonthlyTaskStatus(0);
log.info("根据创建时间获取有赞订单号:" + youzanOrderInfo.getTid());
orderMapper.insertYouZanOrders(orderInfo);
}
}
/**
* 根据订单的修改时间获取有赞的订单数据 修改本地数据库的相关订单数据
*
* @return
* @throws SDKException
*/
@XxlJob(value = "YouZanOrdersForUpdateTimejobhandler")
@Override
public void getYouZanOrdersForUpdateTime() throws SDKException {
Date date = new Date();
Token token = youzanToken();
YouzanTradesSoldGet youzanTradesSoldGet = new YouzanTradesSoldGet();
//创建参数对象,并设置参数
YouzanTradesSoldGetParams youzanTradesSoldGetParams = new YouzanTradesSoldGetParams();
OrderInfo orderInfo = new OrderInfo();
try {
// startUpdateDate = sdf.parse("2021-02-28 11:04:01");
// endUpdateDate = sdf.parse("2021-03-2 16:39:59");
startUpdateDate = sdf.parse(sdf.format(new Date(date.getTime() - (long) 5 * 60 * 1000)));
log.info("订单修改开始时间" + sdf.format(startUpdateDate));
endUpdateDate = sdf.parse(sdf.format(date));
log.info("订单修改结束时间" + sdf.format(endUpdateDate));
} catch (ParseException e) {
e.printStackTrace();
}
//设置查询条件 --> 根据订单修改时间获取
youzanTradesSoldGetParams.setStartUpdate(startUpdateDate);
youzanTradesSoldGetParams.setEndUpdate(endUpdateDate);
youzanTradesSoldGet.setAPIParams(youzanTradesSoldGetParams);
//调用有赞客户端进行查询
YouzanTradesSoldGetResult result = yzClient.invoke(youzanTradesSoldGet, token, YouzanTradesSoldGetResult.class);
List<YouzanTradesSoldGetResult.YouzanTradesSoldGetResultFullorderinfolist> fullOrderInfoList = result.getData().getFullOrderInfoList();
//遍历订单数据
for (YouzanTradesSoldGetResult.YouzanTradesSoldGetResultFullorderinfolist youzanTradesSoldGetResultFullorderinfolist : fullOrderInfoList) {
YouzanTradesSoldGetResult.YouzanTradesSoldGetResultOrderinfo youzanOrderInfo = youzanTradesSoldGetResultFullorderinfolist.getFullOrderInfo().getOrderInfo();
YouzanTradesSoldGetResult.YouzanTradesSoldGetResultPayinfo payInfo = youzanTradesSoldGetResultFullorderinfolist.getFullOrderInfo().getPayInfo();
//根据修改时间获取到的有赞订单数据的Tid
String tid = youzanOrderInfo.getTid();
OrderInfo orderByTid = orderMapper.getByTid(tid);
//确保是同一笔订单且订单的success_time=null是进行订单success_time状态修改
if (orderByTid != null && orderByTid.getSuccessTime() == null) {
//支付方式
orderInfo.setPayType(youzanOrderInfo.getPayType().toString());
//有赞update_time
orderInfo.setYouzanUpdateTime(youzanOrderInfo.getUpdateTime());
//tid
orderInfo.setTid(youzanOrderInfo.getTid());
//pay_time
orderInfo.setPayTime(youzanOrderInfo.getPayTime());
//pay_type_str 支付渠道
orderInfo.setPayTypeStr(youzanOrderInfo.getPayTypeStr());
//close_type
orderInfo.setCloseType(youzanOrderInfo.getCloseType().intValue());
//refund_state 退款状态
orderInfo.setRefundState(youzanOrderInfo.getRefundState());
//success_time
orderInfo.setSuccessTime(youzanOrderInfo.getSuccessTime());
//payment
orderInfo.setPayment(new BigDecimal(payInfo.getPayment()));
log.info("根据修改时间获取有赞订单号:" + youzanOrderInfo.getTid());
//修改订单数据
orderMapper.updateById(orderInfo);
}
}
}
/**
* 有赞token获取
*
* @return
* @throws SDKException
*/
public static Token youzanToken() throws SDKException {
DefaultYZClient yzClient = new DefaultYZClient();
TokenParameter tokenParameter = TokenParameter.self()
.clientId("92bc1c500ce7c248f3")
.clientSecret("3d65e88f5106e8ee78dbc5cf5ff45526")
.grantId("92488799")
.refresh(true)
.build();
OAuthToken oAuthToken = yzClient.getOAuthToken(tokenParameter);
String accessToken = oAuthToken.getAccessToken();
log.info("调用有赞接口获取到的有赞Token" + accessToken);
Token youzanToken = new Token(accessToken);
return youzanToken;
}
/**
* 分页查询订单数据
*
* @return
*/
@Override
public R<PageInfo<OrderInfo>> findByPage(OrderInfoQuery query) {
log.info("shop-mall[]OrderServiceImpl[]findByPage[]input.param.query:" + query);
if (null == query){
return R.error("入参不能为空");
}
pageHandle(query);
HashMap<String, Object> map = new HashMap<>();
int total = orderMapper.count();
map.put("startNum", query.getStartNum());
map.put("endNum", query.getEndNum());
if(null != query.getUserId()){
map.put("userId",query.getUserId());
}
List<OrderInfo> list = orderMapper.findByPage(map);
PageInfo<OrderInfo> info = new PageInfo<>();
info.setPageSize(query.getPageSize());
info.setPageNum(query.getPageNo());
info.setTotal(total);
info.setList(list);
return R.ok(info);
}
/**
* 分页处理方法
*
* @param schemeVo 参数
*/
private void pageHandle(OrderInfoQuery schemeVo) {
Integer pageNum = schemeVo.getPageNo();
Integer pageSize = schemeVo.getPageSize();
if (null == pageSize || pageSize == 0) {
pageSize = 10;
}
if (null == pageNum || pageNum == 0) {
pageNum = 1;
}
Integer endNum = pageSize;
Integer startNum = (pageNum - CommonAttributes.NUM_ONE) * pageSize;
schemeVo.setEndNum(endNum);
schemeVo.setStartNum(startNum);
schemeVo.setPageNo(pageNum);
schemeVo.setPageSize(pageSize);
}
}