package com.yeshi.fanli.job;
|
|
import java.util.Calendar;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
|
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.TimeUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
|
/**
|
* 淘宝渠道订单更新
|
*
|
* @author hexiaohui
|
*
|
*/
|
@Component
|
public class UpdateRelationAndSpecialOrderJob {
|
|
@Resource
|
private TaoBaoOrderService taoBaoOrderService;
|
|
@Resource
|
private RedisManager redisManager;
|
|
/**
|
* 更新渠道订单(最多20分钟)
|
*
|
* @param startTime
|
*/
|
private void updateRelationOrder(long startTime) {
|
String startTimeStr = TimeUtil.getGernalTime(startTime, "yyyy-MM-dd HH:mm:ss");
|
List<TaoBaoOrder> orderList = TaoKeApiUtil.getTaoBaoRelationOrder(startTimeStr, 1, Constant.TAOBAO_AUTH_APPKEY,
|
Constant.TAOBAO_AUTH_APPSECRET);
|
addRelationAndSpecialOrder(orderList);
|
}
|
|
/**
|
* 更新渠道订单
|
*
|
* @param fromPage
|
* 开始页码
|
* @param toPage
|
* 结束页码(每页100条数据)
|
*/
|
private void updateRelationOrder(int fromPage, int toPage) {
|
// 最近90天的订单
|
String startTimeStr = TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 90L,
|
"yyyy-MM-dd HH:mm:ss");
|
for (int p = fromPage; p < toPage; p++) {
|
List<TaoBaoOrder> orderList = TaoKeApiUtil.getTaoBaoRelationOrder(startTimeStr, p,
|
Constant.TAOBAO_AUTH_APPKEY, Constant.TAOBAO_AUTH_APPSECRET);
|
addRelationAndSpecialOrder(orderList);
|
|
orderList = TaoKeApiUtil.getTaoBaoRelationThirdOrder(startTimeStr, p, Constant.TAOBAO_AUTH_APPKEY,
|
Constant.TAOBAO_AUTH_APPSECRET);
|
addRelationAndSpecialOrder(orderList);
|
}
|
}
|
|
/**
|
* 按天更新
|
*
|
* @param day
|
*/
|
private void updateRelationOrderByDay(String day) {
|
long timestamp = TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd");
|
for (int i = 0; i < 72; i++) {
|
updateRelationOrder(timestamp + 1000 * 60 * 20L * i);
|
}
|
}
|
|
/**
|
* 更新会员订单(最多20分钟)
|
*
|
* @param startTime
|
*/
|
private void updateSpecialOrder(long startTime) {
|
String startTimeStr = TimeUtil.getGernalTime(startTime, "yyyy-MM-dd HH:mm:ss");
|
List<TaoBaoOrder> orderList = TaoKeApiUtil.getTaoBaoSpecialOrder(startTimeStr, 1, Constant.TAOBAO_AUTH_APPKEY,
|
Constant.TAOBAO_AUTH_APPSECRET);
|
addRelationAndSpecialOrder(orderList);
|
|
orderList = TaoKeApiUtil.getTaoBaoSpecialThirdOrder(startTimeStr, 1, Constant.TAOBAO_AUTH_APPKEY,
|
Constant.TAOBAO_AUTH_APPSECRET);
|
addRelationAndSpecialOrder(orderList);
|
}
|
|
/**
|
* 更新会员订单()
|
*
|
* @param fromPage-开始页码
|
* @param toPage-结束页码(每页20条数据)
|
*/
|
private void updateSpecialOrder(int fromPage, int toPage) {
|
String startTimeStr = TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 90L,
|
"yyyy-MM-dd HH:mm:ss");
|
for (int p = fromPage; p < toPage; p++) {
|
List<TaoBaoOrder> orderList = TaoKeApiUtil.getTaoBaoSpecialOrder(startTimeStr, p,
|
Constant.TAOBAO_AUTH_APPKEY, Constant.TAOBAO_AUTH_APPSECRET);
|
addRelationAndSpecialOrder(orderList);
|
}
|
}
|
|
/**
|
* 按天更新
|
*
|
* @param day
|
*/
|
private void updateSpecialOrderByDay(String day) {
|
long timestamp = TimeUtil.convertToTimeTemp(day, "yyyy-MM-dd");
|
for (int i = 0; i < 72; i++) {
|
updateSpecialOrder(timestamp + 1000 * 60 * 20L * i);
|
}
|
}
|
|
private void addRelationAndSpecialOrder(List<TaoBaoOrder> orderList) {
|
try {
|
taoBaoOrderService.addTaoBaoOrderList(orderList);
|
} catch (Exception e) {
|
try {
|
LogHelper.errorDetailInfo(e);
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
}
|
|
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, orders);
|
|
try {
|
// 20分钟内不再处理
|
redisManager.cacheCommonString(redisKey, "1", 60 * 20);
|
} catch (Exception e) {
|
|
}
|
}
|
}
|
} catch (Exception e) {
|
try {
|
LogHelper.errorDetailInfo(e);
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
}
|
}
|
|
// 每30s爬取一次
|
@Scheduled(cron = "0/30 * * * * ? ")
|
public void doJob1() {
|
if (!Constant.IS_TASK)
|
return;
|
// 爬取最近3页数据
|
updateRelationOrder(1, 3);
|
updateSpecialOrder(1, 3);
|
}
|
|
// 每5分钟更新(3-10页数据)
|
@Scheduled(cron = "0 0/5 * * * ? ")
|
public void doJob2() {
|
if (!Constant.IS_TASK)
|
return;
|
updateRelationOrder(3, 11);
|
updateSpecialOrder(3, 11);
|
}
|
|
// 每个小时更新10-1000页数据
|
@Scheduled(cron = "0 0 0/1 * * ? ")
|
public void doJob3() {
|
if (!Constant.IS_TASK)
|
return;
|
Calendar calendar = Calendar.getInstance();
|
int h = calendar.get(Calendar.HOUR_OF_DAY);
|
// 每个小时更新100页数据
|
int fromPage = h * 100;
|
if (fromPage <= 0)
|
fromPage = 11;
|
int toPage = h * 100 + 100;
|
updateRelationOrder(fromPage, toPage);
|
updateSpecialOrder(fromPage, toPage);
|
}
|
|
}
|