package com.yeshi.fanli.job;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderMapper;
|
import com.yeshi.fanli.entity.bus.user.Order;
|
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.common.DataMonitorService;
|
import com.yeshi.fanli.service.inter.order.LostOrderService;
|
import com.yeshi.fanli.service.inter.order.OrderProcessService;
|
import com.yeshi.fanli.service.inter.order.OrderService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanOrderService;
|
import com.yeshi.fanli.util.BeanUtil;
|
import com.yeshi.fanli.util.CMQManager;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.RedisManager;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TaoBaoConstant;
|
import com.yeshi.fanli.util.TimeUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeOrderApiUtil;
|
|
//从淘宝爬去订单更新
|
//@Component
|
public class UpdateCommonOrderJob {
|
|
public UpdateCommonOrderJob() {
|
System.out.println("初始化:UpdateOrderJob");
|
}
|
|
@Resource
|
private OrderProcessService orderProcessService;
|
|
@Resource
|
private TaoBaoOrderUtil taoBaoOrderUtil;
|
|
@Resource
|
private TaoBaoOrderService taoBaoOrderService;
|
|
@Resource
|
private TaoBaoUnionConfigService taoBaoUnionConfigService;
|
|
@Resource
|
private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
|
|
@Resource
|
private DataMonitorService dataMonitorService;
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Resource
|
private LostOrderService lostOrderService;
|
|
@Resource
|
private OrderService orderService;
|
|
@Resource
|
private TaoBaoOrderMapper taoBaoOrderMapper;
|
|
/**
|
* 新版获取普通订单
|
*
|
* @param startTime
|
* @param span
|
* @return
|
*/
|
private List<TaoBaoOrder> getCommonOrder(long startTime, int span) {
|
int page = 1;
|
String startTimeStr = TimeUtil.getGernalTime(startTime, "yyyy-MM-dd HH:mm:ss");
|
List<TaoBaoOrder> orderList = TaoKeOrderApiUtil.getTaoBaoAllOrder(startTimeStr, span, page,
|
TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
|
while (orderList.size() == 100 * page) {
|
page++;
|
List<TaoBaoOrder> tempOrderList = TaoKeOrderApiUtil.getTaoBaoAllOrder(startTimeStr, span, page,
|
TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
|
if (tempOrderList != null && tempOrderList.size() > 0)
|
orderList.addAll(tempOrderList);
|
}
|
return orderList;
|
}
|
|
/**
|
* 按天获取普通订单(新版)
|
*
|
* @param date
|
* @return
|
*/
|
private List<TaoBaoOrder> getCommonOrderByDay(Date date) {
|
List<TaoBaoOrder> orderList = new ArrayList<>();
|
// 将一天分成12段
|
for (int i = 0; i < 72; i++) {
|
List<TaoBaoOrder> tempOrderList = getCommonOrder(date.getTime() + 1000 * 60 * 20L * i, 1200);
|
if (tempOrderList != null && tempOrderList.size() > 0)
|
orderList.addAll(tempOrderList);
|
}
|
return orderList;
|
}
|
|
/**
|
* 将订单添加到数据库(新版)
|
*
|
* @param orderList
|
*/
|
private void addOrderNew(List<TaoBaoOrder> orderList) {
|
try {
|
taoBaoOrderService.addTaoBaoOrderList(orderList);
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
}
|
|
if (orderList != null)
|
for (int i = 0; i < orderList.size(); i++) {
|
// 移除会员运营ID(不包含补单的情况)与渠道专属订单
|
if (orderList.get(i).getAdPositionName().contains("会员运营")
|
|| orderList.get(i).getAdPositionName().contains("渠道专属")) {
|
if (orderList.get(i).getAdPositionName().contains("会员运营")) {// 处理订单申诉
|
Order order = orderService.findOrderByOrderIdAndType(orderList.get(i).getOrderId(),
|
Order.ORDER_TYPE_TAOBAO);
|
if (order != null && order.getBeizhu().contains("补单")) {// 不排除补单的情况
|
|
} else {
|
orderList.remove(i);
|
i--;
|
break;
|
}
|
} else {
|
orderList.remove(i);
|
i--;
|
}
|
}
|
}
|
|
try {
|
Map<String, List<TaoBaoOrder>> map = TaoBaoOrderUtil.classifyTaoBaoOrderByOrderId(orderList);
|
if (map != null) {
|
Iterator<String> its = map.keySet().iterator();
|
while (its.hasNext()) {
|
String key = its.next();
|
List<TaoBaoOrder> orders = map.get(key);
|
String redisKey = "addorderqueue-" + key;
|
// redis做频率限制
|
try {
|
if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(redisKey))) {
|
continue;
|
}
|
|
} catch (Exception e) {
|
|
}
|
|
CMQManager.getInstance().addTaoBaoOrderMsg(key);
|
|
try {
|
// 6小时内不再处理
|
redisManager.cacheCommonString(redisKey, "1", 60 * 60 * 6);
|
} catch (Exception e) {
|
|
}
|
}
|
}
|
} catch (Exception e) {
|
LogHelper.errorDetailInfo(e);
|
}
|
}
|
|
// 每5分钟爬取一次近6小时的
|
@Scheduled(cron = "0 0/5 * * * ? ")
|
public void doJob1() {
|
if (!Constant.IS_TASK)
|
return;
|
long currentTime = System.currentTimeMillis();
|
String h = TimeUtil.getGernalTime(currentTime, "HH");
|
String m = TimeUtil.getGernalTime(currentTime, "mm");
|
int mm = Integer.parseInt(h) * 60 + Integer.parseInt(m);
|
int pos = mm / 15;
|
if (pos >= 90)
|
pos = 89;
|
long startTime = TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(currentTime, "yyyy-MM-dd"), "yyyy-MM-dd")
|
- (1000 * 60 * 60 * 24L * (90 - pos));
|
long endTime = startTime + 1000 * 60 * 60 * 24L;
|
LogHelper.orderInfo("正在执行订单爬取...");
|
// updateOrder(startTime, endTime);
|
}
|
|
// 淘宝推广订单 每隔30秒执行一次
|
@Scheduled(cron = "0/30 * * * * ? ")
|
public void doJob2() {
|
if (!Constant.IS_TASK)
|
return;
|
long startTime = System.currentTimeMillis();
|
// 30s爬取一次近5分钟的
|
List<TaoBaoOrder> orderList = getCommonOrder(startTime, 300);
|
addOrderNew(orderList);
|
}
|
|
// 每晚10点执行漏单
|
@Scheduled(cron = "0 0 22 * * ? ")
|
public void doJob3() {
|
List<TaoBaoOrder> orderList = taoBaoOrderMapper.listLongTimeNoUpdateOrders(0, 10);
|
List<TaoBaoOrder> updateOrderList = new ArrayList<>();
|
for (TaoBaoOrder order : orderList) {
|
List<TaoBaoOrder> newList = TaoKeOrderApiUtil.getTaoBaoAllOrder(order.getCreateTime(), 60, 1,
|
TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
|
for (TaoBaoOrder o : newList) {
|
if (o.getOrderId().equalsIgnoreCase(order.getOrderId()))
|
updateOrderList.add(o);
|
}
|
}
|
addOrderNew(updateOrderList);
|
}
|
|
}
|