| | |
| | | import java.math.BigDecimal;
|
| | | import java.net.URLEncoder;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Collections;
|
| | | import java.util.Comparator;
|
| | | import java.util.Date;
|
| | | import java.util.HashMap;
|
| | | import java.util.Iterator;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | |
|
| | | import javax.annotation.PostConstruct;
|
| | | import javax.annotation.Resource;
|
| | | import java.util.concurrent.ConcurrentHashMap;
|
| | |
|
| | | import org.apache.commons.httpclient.HttpClient;
|
| | | import org.apache.commons.httpclient.HttpException;
|
| | | import org.apache.commons.httpclient.methods.GetMethod;
|
| | | import org.springframework.stereotype.Component;
|
| | | import org.yeshi.utils.HttpUtil;
|
| | |
|
| | | import com.yeshi.fanli.dto.order.OrderItem;
|
| | | import com.yeshi.fanli.entity.bus.user.Order;
|
| | | import com.yeshi.fanli.entity.bus.user.OrderItem;
|
| | | import com.yeshi.fanli.entity.bus.user.UserInfo;
|
| | | import com.yeshi.fanli.entity.order.CommonOrder;
|
| | | import com.yeshi.fanli.entity.taobao.PidOrder;
|
| | | import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
|
| | | import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
|
| | | import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
|
| | | import com.yeshi.fanli.exception.TaoBaoOrderException;
|
| | | import com.yeshi.fanli.exception.order.TaoBaoOrderException;
|
| | | import com.yeshi.fanli.log.LogHelper;
|
| | | import com.yeshi.fanli.service.inter.config.ConfigService;
|
| | | import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
|
| | | import com.yeshi.fanli.service.inter.hongbao.HongBaoService;
|
| | | import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
|
| | | import com.yeshi.fanli.service.inter.order.OrderItemServcie;
|
| | | import com.yeshi.fanli.service.inter.order.OrderService;
|
| | | import com.yeshi.fanli.util.Constant;
|
| | | import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
| | | import com.yeshi.fanli.util.StringUtil;
|
| | | import com.yeshi.fanli.util.TimeUtil;
|
| | | import org.yeshi.utils.HttpUtil;
|
| | |
|
| | | import jxl.Sheet;
|
| | | import jxl.Workbook;
|
| | |
| | | @Component
|
| | | public class TaoBaoOrderUtil {
|
| | |
|
| | | private final static String CACHENAME = "tbCookie";
|
| | |
|
| | | private static final String ORDERFAILURE = "订单失效";
|
| | | private static final String ORDERPAYMENT = "订单付款";
|
| | | private static final String ORDERSETTLEMENT = "订单结算";
|
| | | private static final String ORDERSUCCESS = "订单成功";
|
| | |
|
| | | @Resource
|
| | | private OrderService orderService;
|
| | | @Resource
|
| | | private HongBaoService hongBaoService;
|
| | | @Resource
|
| | | private ConfigService configService;
|
| | |
|
| | | @Resource
|
| | | private OrderItemServcie orderItemServcie;
|
| | |
|
| | | @Resource
|
| | | private HongBaoManageService hongBaoManageService;
|
| | |
|
| | | @Resource
|
| | | private ThreeSaleSerivce threeSaleSerivce;
|
| | |
|
| | | private static TaoBaoOrderUtil taoBaoOrderUtil;
|
| | |
|
| | | @PostConstruct
|
| | | public void init() {
|
| | | taoBaoOrderUtil = this;
|
| | | taoBaoOrderUtil.orderService = this.orderService;
|
| | | taoBaoOrderUtil.hongBaoService = this.hongBaoService;
|
| | | taoBaoOrderUtil.configService = this.configService;
|
| | | taoBaoOrderUtil.hongBaoManageService = this.hongBaoManageService;
|
| | | taoBaoOrderUtil.orderItemServcie = this.orderItemServcie;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取淘宝联盟的Cookie
|
| | |
| | | String as = gm.getResponseBodyAsString();
|
| | | JSONObject root = JSONObject.fromObject(as);
|
| | | if (root.optInt("code") == 0) {// 上报成功
|
| | | LogHelper.cookieLog("上报成功!");
|
| | | LogHelper.error("上报成功!");
|
| | | return;
|
| | | }
|
| | | LogHelper.cookieLog("上报失败!");
|
| | | LogHelper.error("上报失败!");
|
| | |
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | LogHelper.cookieLog("上报失败!");
|
| | | LogHelper.error("上报失败!");
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | public static List<TaoBaoOrder> getOrderList(int day, TaoBaoUnionConfig config) {
|
| | | String cookie1 = getTaoBaoCookie(config.getAccount());
|
| | |
|
| | | LogHelper.cookieLog("账号为:" + config.getAccount() + ",cookie为:" + cookie1);
|
| | | LogHelper.error("账号为:" + config.getAccount() + ",cookie为:" + cookie1);
|
| | |
|
| | | String[] cookies = new String[] { cookie1 };
|
| | | List<TaoBaoOrder> list = new ArrayList<TaoBaoOrder>();
|
| | |
| | | private static List<TaoBaoOrder> downLoadOrderFromTaoBao(String url, TaoBaoUnionConfig config)
|
| | | throws TaoBaoOrderException {
|
| | | String cookie1 = getTaoBaoCookie(config.getAccount());
|
| | | LogHelper.cookieLog("账号为:" + config.getAccount() + ",cookie为:" + cookie1);
|
| | | LogHelper.error("账号为:" + config.getAccount() + ",cookie为:" + cookie1);
|
| | | String[] cookies = new String[] { cookie1 };
|
| | | List<TaoBaoOrder> list = new ArrayList<TaoBaoOrder>();
|
| | | int i = 0;
|
| | |
| | | return getOrderList(30, config);
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取维权成功订单
|
| | | * |
| | | * @param startTime
|
| | | * @param endTime
|
| | | * @return
|
| | | */
|
| | | public static List<TaoBaoWeiQuanOrder> getWeiQuanOrders(long startTime, long endTime, TaoBaoUnionConfig config) {
|
| | | String cookie = getTaoBaoCookie(config.getAccount());
|
| | | return getWeiQuanOrders(cookie, startTime, endTime);
|
| | | public static List<TaoBaoWeiQuanOrder> getWeiQuanOrders(InputStream input) {
|
| | | return parseWeiQuanOrder(input);
|
| | | }
|
| | |
|
| | | private static List<TaoBaoWeiQuanOrder> getWeiQuanOrders(String cookies, long startTime, long endTime) {
|
| | |
| | | }
|
| | |
|
| | | /**
|
| | | * 解析商品分享订单
|
| | | * |
| | | * @param in
|
| | | * @return
|
| | | */
|
| | | public static List<PidOrder> parsePidOrder(InputStream in) {
|
| | | List<TaoBaoOrder> orderList = parseOrder(in);
|
| | | if (orderList != null && orderList.size() > 0) {
|
| | | List<PidOrder> pidOrderList = new ArrayList<>();
|
| | | for (TaoBaoOrder order : orderList) {
|
| | | pidOrderList.add(convertToPidOrder(order));
|
| | | }
|
| | | return pidOrderList;
|
| | | }
|
| | | return new ArrayList<PidOrder>();
|
| | | }
|
| | |
|
| | | /**
|
| | | * 解析维权订单
|
| | | *
|
| | | * @param in
|
| | |
| | | for (int c = 0; c < sheet.getColumns(); c++) {
|
| | | String content = sheet.getCell(c, r).getContents().trim();
|
| | | switch (c) {
|
| | | case 0://
|
| | | orderRecord.setOrderId(content);
|
| | | break;
|
| | | case 1://
|
| | | orderRecord.setOrderItemId(content);
|
| | | break;
|
| | | case 2://
|
| | | orderRecord.setGoodsName(content);
|
| | | break;
|
| | | case 3:
|
| | | orderRecord.setMoney(StringUtil.isNullOrEmpty(content) ? null : new BigDecimal(content));
|
| | | break;
|
| | | case 4:
|
| | | orderRecord.setFanMoney(StringUtil.isNullOrEmpty(content) ? null : new BigDecimal(content));
|
| | | break;
|
| | | case 5://
|
| | | orderRecord.setState(content);
|
| | | break;
|
| | | case 6://
|
| | | if (!StringUtil.isNullOrEmpty(content))
|
| | | orderRecord.setJieSuanTime(
|
| | | new Date(TimeUtil.convertToTimeTemp(content, "yyyy-MM-dd HH:mm:ss")));
|
| | | break;
|
| | | case 7://
|
| | | case 0:// 维权时间
|
| | | if (!StringUtil.isNullOrEmpty(content))
|
| | | orderRecord.setWeiQuanTime(
|
| | | new Date(TimeUtil.convertToTimeTemp(content, "yyyy-MM-dd HH:mm:ss")));
|
| | | break;
|
| | | case 8://
|
| | | case 1:// 维权完成时间
|
| | | if (!StringUtil.isNullOrEmpty(content))
|
| | | orderRecord.setWeiQuanFinishTime(
|
| | | new Date(TimeUtil.convertToTimeTemp(content, "yyyy-MM-dd HH:mm:ss")));
|
| | | break;
|
| | | case 2:// 结算时间
|
| | | if (!StringUtil.isNullOrEmpty(content))
|
| | | orderRecord.setJieSuanTime(
|
| | | new Date(TimeUtil.convertToTimeTemp(content, "yyyy-MM-dd HH:mm:ss")));
|
| | | break;
|
| | | case 3:// 商品名称
|
| | | orderRecord.setGoodsName(content);
|
| | | break;
|
| | | case 5:// 淘宝订单号
|
| | | orderRecord.setOrderId(content);
|
| | | break;
|
| | | case 6:// 淘宝子订单号
|
| | | orderRecord.setOrderItemId(content);
|
| | | break;
|
| | | case 7:// 维权状态
|
| | | orderRecord.setState(content);
|
| | | break;
|
| | | case 8:// 结算金额
|
| | |
|
| | | break;
|
| | | case 9:// 退款金额
|
| | | orderRecord.setMoney(StringUtil.isNullOrEmpty(content) ? null : new BigDecimal(content));
|
| | | break;
|
| | |
|
| | | case 10:// 返还商家金额
|
| | | orderRecord.setFanMoney(StringUtil.isNullOrEmpty(content) ? null : new BigDecimal(content));
|
| | | break;
|
| | | }
|
| | | }
|
| | |
| | | return orderItem;
|
| | | }
|
| | |
|
| | | public static List<PidOrder> getPidOrderList(int day, TaoBaoUnionConfig config) {
|
| | | String cookie1 = getTaoBaoCookie(config.getAccount());
|
| | |
|
| | | LogHelper.cookieLog("账号为:" + config.getAccount() + ",cookie为:" + cookie1);
|
| | |
|
| | | String[] cookies = new String[] { cookie1 };
|
| | | List<PidOrder> list = new ArrayList<PidOrder>();
|
| | | int i = 0;
|
| | | for (String cookie : cookies) {
|
| | | if (com.yeshi.fanli.util.StringUtil.isNullOrEmpty(cookie)) {
|
| | | i++;
|
| | | continue;
|
| | | }
|
| | | // 原始为30
|
| | | String startTime = TimeUtil.getGernalTime(System.currentTimeMillis() - 1000 * 60 * 60 * 24L * day,
|
| | | "yyyy-MM-dd");
|
| | | String endTime = TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd");
|
| | |
|
| | | String url = String.format(
|
| | | "http://pub.alimama.com/report/getTbkPaymentDetails.json?spm=a219t.7664554.1998457203.85.9pFBtK&queryType=1&payStatus=&DownloadID=DOWNLOAD_REPORT_INCOME_NEW&startTime=%s&endTime=%s",
|
| | | startTime, endTime);
|
| | | HttpClient client = new HttpClient();
|
| | | // client.getHostConfiguration().setProxy("192.168.1.200", 8888);
|
| | | GetMethod gm = new GetMethod(url);
|
| | | gm.setRequestHeader("Cookie", cookie);
|
| | | gm.setRequestHeader("User-Agent",
|
| | | "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36");
|
| | | InputStream inputStream = null;
|
| | | try {
|
| | | client.executeMethod(gm);
|
| | | System.out.println(gm.getStatusCode());
|
| | | if (gm.getStatusCode() == 200) {
|
| | | System.out.println(gm.getResponseHeader("Content-Type").getValue());
|
| | | if (!gm.getResponseHeader("Content-Type").getValue().contains("excel")) {
|
| | | if (i == 0) {
|
| | | reportCookieInvalid(config.getAccount());
|
| | | }
|
| | | continue;
|
| | | }
|
| | | inputStream = gm.getResponseBodyAsStream();
|
| | | list.addAll(parsePidOrder(inputStream));
|
| | |
|
| | | // String path =
|
| | | // TaoBaoOrderUtil.class.getClassLoader().getResource("/").getPath();
|
| | | // String yyyyMMddHHmmss =
|
| | | // TimeUtil.yyyyMMddHHmmss(System.currentTimeMillis());
|
| | | // FileUtils.copyInputStreamToFile(inputStream, new
|
| | | // File(path+"/excel/"+yyyyMMddHHmmss+"."+"xls"));
|
| | | }
|
| | | } catch (HttpException e) {
|
| | | e.printStackTrace();
|
| | | } catch (IOException e) {
|
| | | e.printStackTrace();
|
| | | } finally {
|
| | | i++;
|
| | | if (inputStream != null) {
|
| | | try {
|
| | | inputStream.close();
|
| | | } catch (IOException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | return list;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 将淘宝订单按照订单号归类
|
| | | *
|
| | |
| | | * @return
|
| | | */
|
| | | public static Map<String, List<TaoBaoOrder>> classifyTaoBaoOrderByOrderId(List<TaoBaoOrder> orderList) {
|
| | | Map<String, List<TaoBaoOrder>> map = new HashMap<>();
|
| | | Map<String, List<TaoBaoOrder>> map = new ConcurrentHashMap<>();
|
| | | for (TaoBaoOrder order : orderList) {
|
| | | if (map.get(order.getOrderId()) == null)
|
| | | map.put(order.getOrderId(), new ArrayList<>());
|
| | |
| | | order.setOrderBy(map.get(order.getOrderId()).size() + 1);
|
| | | map.get(order.getOrderId()).add(order);
|
| | | }
|
| | |
|
| | | // 订单排序值灰度测试
|
| | | try {
|
| | | for (Iterator<String> its = map.keySet().iterator(); its.hasNext();) {
|
| | | String orderId = its.next();
|
| | | try {
|
| | | setOrderBy(map.get(orderId));
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e, "订单号:" + orderId, "订单排序值灰度测试");
|
| | | }
|
| | | }
|
| | | } catch (Exception e) {
|
| | | }
|
| | |
|
| | | return map;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 订单转换
|
| | | * |
| | | * @param taoBaoOrder
|
| | | * @return
|
| | | */
|
| | | public static PidOrder convertToPidOrder(TaoBaoOrder taoBaoOrder) {
|
| | | PidOrder pidOrder = new PidOrder();
|
| | | pidOrder.setOrderCreateTime(new Date(TimeUtil.convertDateToTemp2(taoBaoOrder.getCreateTime())));
|
| | | pidOrder.setGoodsTitle(taoBaoOrder.getTitle());
|
| | | pidOrder.setAuctionId(taoBaoOrder.getAuctionId());
|
| | | pidOrder.setGoodsNum(taoBaoOrder.getCount());
|
| | | pidOrder.setPrice(taoBaoOrder.getPrice());
|
| | | pidOrder.setState(taoBaoOrder.getOrderState());
|
| | | pidOrder.setOrderType(taoBaoOrder.getOrderType());
|
| | | pidOrder.setRate(taoBaoOrder.getiRatio());
|
| | | pidOrder.setPayMoney(taoBaoOrder.getPayment());
|
| | | if ("订单结算".equalsIgnoreCase(taoBaoOrder.getOrderState()))
|
| | | pidOrder.setPreMoney(taoBaoOrder.geteIncome());
|
| | | else
|
| | | pidOrder.setPreMoney(taoBaoOrder.getEstimate());
|
| | | pidOrder.setFinalMoney(taoBaoOrder.getSettlement());
|
| | | if (!StringUtil.isNullOrEmpty(taoBaoOrder.getSettlementTime()))
|
| | | pidOrder.setBalanceTime(new Date(TimeUtil.convertDateToTemp2(taoBaoOrder.getSettlementTime())));
|
| | | pidOrder.setOrderId(taoBaoOrder.getOrderId());
|
| | | pidOrder.setTypeName(taoBaoOrder.getClassName());
|
| | | pidOrder.setSrcMediaId(taoBaoOrder.getSourceMediaId());
|
| | | pidOrder.setAdzoneId(taoBaoOrder.getAdPositionId());
|
| | | return pidOrder;
|
| | | public static void setOrderBy(List<TaoBaoOrder> orderList) {// 提取一样的
|
| | | if (orderList == null || orderList.size() == 1)
|
| | | return;
|
| | | int len = orderList.get(0).getTradeId().length();
|
| | | int startIndex = 0;
|
| | | for (int i = 0; i < len; i++) {
|
| | | boolean isSame = true;
|
| | | for (int j = 0; j < orderList.size() - 1; j++) {
|
| | | if (orderList.get(j).getTradeId().charAt(i) != orderList.get(j + 1).getTradeId().charAt(i)) {
|
| | | isSame = false;
|
| | | break;
|
| | | }
|
| | | }
|
| | | if (!isSame) {
|
| | | startIndex = i;
|
| | | break;
|
| | | }
|
| | | }
|
| | | int endIndex = 0;
|
| | |
|
| | | for (int i = len - 1; i >= 0; i--) {
|
| | | boolean isSame = true;
|
| | | for (int j = 0; j < orderList.size() - 1; j++) {
|
| | | if (orderList.get(j).getTradeId().charAt(i) != orderList.get(j + 1).getTradeId().charAt(i)) {
|
| | | isSame = false;
|
| | | break;
|
| | | }
|
| | | }
|
| | | if (!isSame) {
|
| | | endIndex = i;
|
| | | break;
|
| | | }
|
| | | }
|
| | | for (TaoBaoOrder taoBaoOrder : orderList) {
|
| | | String tradeId = taoBaoOrder.getTradeId();
|
| | | String orderByStr = tradeId.substring(startIndex, endIndex + 1);
|
| | | if (orderByStr.length() > 8) {
|
| | | LogHelper.error(taoBaoOrder.getOrderId() + "-订单的orderBy超过8位:" + taoBaoOrder.getOrderBy());
|
| | | }
|
| | | int orderBy = Integer.parseInt(orderByStr);
|
| | | // taoBaoOrder.setOrderBy(orderBy);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | CommonOrder commonOrder = new CommonOrder();
|
| | | commonOrder.setCount(taoBaoOrder.getCount());
|
| | | commonOrder.setCreateTime(new Date());
|
| | | commonOrder.seteIncome(taoBaoOrder.geteIncome());
|
| | | if (taoBaoOrder.geteIncome() != null && taoBaoOrder.getSubsidy() != null)
|
| | | commonOrder.seteIncome(taoBaoOrder.geteIncome().add(taoBaoOrder.getSubsidy()));
|
| | | else
|
| | | commonOrder.seteIncome(taoBaoOrder.geteIncome());
|
| | | commonOrder.setEstimate(taoBaoOrder.getEstimate());
|
| | | commonOrder.setOrderNo(taoBaoOrder.getOrderId());
|
| | | commonOrder.setPayment(taoBaoOrder.getPayment());
|
| | |
| | | if (!StringUtil.isNullOrEmpty(taoBaoOrder.getSettlementTime()))
|
| | | commonOrder.setSettleTime(
|
| | | new Date(TimeUtil.convertToTimeTemp(taoBaoOrder.getSettlementTime(), "yyyy-MM-dd HH:mm:ss")));
|
| | | commonOrder.setSourcePosition(
|
| | | String.format("mm_%s_%s_%s", "124933865", taoBaoOrder.getSourceMediaId(), taoBaoOrder.getAdPositionId()));
|
| | | commonOrder.setSourcePosition(String.format("mm_%s_%s_%s", "124933865", taoBaoOrder.getSourceMediaId(),
|
| | | taoBaoOrder.getAdPositionId()));
|
| | | commonOrder.setSourceType(Constant.SOURCE_TYPE_TAOBAO);
|
| | | int state = 0;
|
| | | if ("订单付款".equalsIgnoreCase(taoBaoOrder.getOrderState())) {
|
| | |
| | | commonOrder.setThirdCreateTime(
|
| | | new Date(TimeUtil.convertToTimeTemp(taoBaoOrder.getCreateTime(), "yyyy-MM-dd HH:mm:ss")));
|
| | | commonOrder.setUpdateTime(new Date());
|
| | | commonOrder.setTradeId(taoBaoOrder.getTradeId());
|
| | |
|
| | | return commonOrder;
|
| | |
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取一组订单的hash值
|
| | | * |
| | | * @param list
|
| | | * @return
|
| | | */
|
| | | public static String getOrderDataHashCode(List<TaoBaoOrder> list) {
|
| | | List<TaoBaoOrder> orderList = new ArrayList<>();
|
| | | orderList.addAll(list);
|
| | | Comparator<TaoBaoOrder> orderCM = new Comparator<TaoBaoOrder>() {
|
| | |
|
| | | @Override
|
| | | public int compare(TaoBaoOrder o1, TaoBaoOrder o2) {
|
| | | return Long.parseLong(o1.getTradeId()) - Long.parseLong(o2.getTradeId()) > 0 ? 1 : -1;
|
| | | }
|
| | | };
|
| | | Collections.sort(orderList, orderCM);
|
| | | String sts = "";
|
| | | for (TaoBaoOrder order : orderList) {
|
| | | sts += (order.getTradeId() + "-" + order.getSpecialId() + "-" + order.getRelationId());
|
| | | }
|
| | | return StringUtil.Md5(sts);
|
| | | }
|
| | | }
|