fanli/src/main/java/com/yeshi/fanli/controller/admin/UploadController.java
@@ -161,7 +161,7 @@ } } CMQManager.getInstance().addTaoBaoOrderMsg(key, orders); CMQManager.getInstance().addTaoBaoOrderMsg(key); try { // 6小时内不再处理 if (Constant.IS_OUTNET) { fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserOrderController.java
@@ -639,7 +639,7 @@ try { isS = orderService.addOrder(or); if (isS) { CMQManager.getInstance().addTaoBaoOrderMsg(order, orderList); CMQManager.getInstance().addTaoBaoOrderMsg(order); // 加入到LostOrder LostOrder lo = new LostOrder(); lo.setCreateTime(System.currentTimeMillis()); fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java
@@ -171,7 +171,7 @@ List<TaoBaoGoodsBrief> list = tljBuyGoodsService.listPreGoods(1); Collections.shuffle(list); if (list.size() > 20) list = list.subList(0, 1); list = list.subList(0, 20); addTLJBuyGoods(list, day); } fanli/src/main/java/com/yeshi/fanli/job/UpdateCommonOrderJob.java
@@ -160,7 +160,7 @@ } CMQManager.getInstance().addTaoBaoOrderMsg(key, orders); CMQManager.getInstance().addTaoBaoOrderMsg(key); try { // 6小时内不再处理 fanli/src/main/java/com/yeshi/fanli/job/UpdateOrderJob.java
@@ -324,7 +324,7 @@ } CMQManager.getInstance().addTaoBaoOrderMsg(key, orders); CMQManager.getInstance().addTaoBaoOrderMsg(key); try { // 6小时内不再处理 fanli/src/main/java/com/yeshi/fanli/job/UpdateRelationAndSpecialOrderJob.java
@@ -16,6 +16,7 @@ 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.TaoKeOrderApiUtil; @@ -53,6 +54,12 @@ list.addAll(list2); if (list3 != null && list3.size() > 0) list.addAll(list3); // 爬取到的订单号 if (list != null) for (TaoBaoOrder order : list) { LogHelper.orderInfo("爬取到的订单号:" + order.getOrderId()); } addRelationAndSpecialOrder(list); } @@ -81,7 +88,13 @@ } CMQManager.getInstance().addTaoBaoOrderMsg(key, orders); LogHelper.orderInfo("添加到队列:" + key); if (orders != null && orders.size() > 0 && System.currentTimeMillis() - TimeUtil.convertToTimeTemp(orders.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss") < 1000 * 60 * 10L)// 10分钟内产生的单作为新订单处理 CMQManager.getInstance().addTaoBaoNewOrderMsg(key); else CMQManager.getInstance().addTaoBaoOrderMsg(key); try { // 20分钟内不再处理 @@ -102,6 +115,7 @@ if (!Constant.IS_TASK) return; // 爬取近20分钟的数据 LogHelper.orderInfo("爬单:30s爬取一次单"); long endTime = System.currentTimeMillis(); updateRelationAndSpecialOrder(endTime - 1000 * 60 * 20L, endTime); } fanli/src/main/java/com/yeshi/fanli/mapping/user/UserExtraTaoBaoInfoMapper.xml
@@ -28,7 +28,7 @@ </select> <select id="selectByUid" resultMap="BaseResultMap" parameterType="java.lang.Long"> parameterType="java.lang.Long" useCache="false"> select <include refid="Base_Column_List" /> from yeshi_ec_user_info_extra_taobao where uiet_uid = fanli/src/main/java/com/yeshi/fanli/service/impl/goods/CommonTemplateContentServiceImpl.java
@@ -15,13 +15,17 @@ import com.yeshi.fanli.dto.common.CommonContentTypeEnum; import com.yeshi.fanli.dto.dataoke.DaTaoKeGoodsResult; import com.yeshi.fanli.entity.bus.clazz.GoodsClass; import com.yeshi.fanli.entity.bus.lable.QualityFactory; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaobaoMeterial; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; import com.yeshi.fanli.service.inter.goods.CommonTemplateContentService; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; import com.yeshi.fanli.service.inter.lable.QualityGoodsService; import com.yeshi.fanli.service.inter.lable.TaoKeGoodsService; import com.yeshi.fanli.service.inter.taobao.TaobaoMeterialService; import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil; import com.yeshi.fanli.util.taobao.DaTaoKeUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; @@ -37,6 +41,12 @@ @Resource private TaoKeGoodsService taoKeGoodsService; @Resource private HongBaoManageService hongBaoManageService; @Resource private QualityGoodsService qualityGoodsService; private static List<CommonContentNav> getCommonNav() { List<CommonContentNav> navList = new ArrayList<>(); @@ -74,16 +84,18 @@ navList.add(new CommonContentNav(gc.getId() + "", gc.getName())); } } else if (type == CommonContentTypeEnum.chaoSheng) { navList.add(new CommonContentNav("1", "5%~10%返利")); navList.add(new CommonContentNav("2", "10%~20%返利")); navList.add(new CommonContentNav("3", "20%~30%返利")); navList.add(new CommonContentNav("4", "30%~40%返利")); navList.add(new CommonContentNav("5", "40%以上返利")); navList.add(new CommonContentNav("1", "1-5元返利")); navList.add(new CommonContentNav("2", "5-10元返利 ")); navList.add(new CommonContentNav("3", "10-15元返利")); navList.add(new CommonContentNav("4", "15-20元返利")); navList.add(new CommonContentNav("5", "20元以上返利")); } else if (type == CommonContentTypeEnum.haoQuan) { navList.add(new CommonContentNav("1", "5~10元券")); navList.add(new CommonContentNav("2", "10~30元券")); navList.add(new CommonContentNav("3", "30~50元券")); navList.add(new CommonContentNav("4", "50元以上券")); navList.add(new CommonContentNav("1", "1-5元券")); navList.add(new CommonContentNav("2", "5-10元券")); navList.add(new CommonContentNav("3", "10-20元券")); navList.add(new CommonContentNav("4", "20-30元券")); navList.add(new CommonContentNav("5", "30-50元券")); navList.add(new CommonContentNav("6", "50元以上券")); } else if (type == CommonContentTypeEnum.juJia) { navList = getCommonNav(); } else if (type == CommonContentTypeEnum.meiShi) { @@ -146,10 +158,22 @@ return getQiCheHuWaiContent(cid, page, pageSize); } else if (type == CommonContentTypeEnum.chaoPinReMai) { return getChaoPinReMaiContent(cid, page, pageSize); } else if (type == CommonContentTypeEnum.chaoSheng) { return getCaoShengContent(cid, page, pageSize); } else if (type == CommonContentTypeEnum.haoQuan) { return getHaoQuanContent(cid, page, pageSize); } return null; } /** * 9快9包邮 * * @param cid * @param page * @param pageSize * @return */ private CommonContentResult get9K9Content(String cid, int page, int pageSize) { if (pageSize == 20) pageSize = 50; @@ -181,6 +205,133 @@ } /** * 超级省钱 * * @param cid * @param page * @param pageSize * @return */ private CommonContentResult getCaoShengContent(String cid, int page, int pageSize) { pageSize = Constant.PAGE_SIZE; Integer startAmount = null; Integer endAmount = null; if (cid.equalsIgnoreCase(1 + "")) { startAmount = 1; endAmount = 5; } else if (cid.equalsIgnoreCase(2 + "")) { startAmount = 5; endAmount = 10; } else if (cid.equalsIgnoreCase(3 + "")) { startAmount = 10; endAmount = 15; } else if (cid.equalsIgnoreCase(4 + "")) { startAmount = 15; endAmount = 20; } else if (cid.equalsIgnoreCase(5 + "")) { startAmount = 20; endAmount = 10000; } double tkRate = 20.00; BigDecimal proportion = hongBaoManageService.getFanLiRate(); List<QualityFactory> listQuery = qualityGoodsService.listQueryByRebateAmount((page - 1) * pageSize, pageSize, proportion.toString(), startAmount, endAmount, tkRate); long count = qualityGoodsService.countQueryByRebateAmount(proportion.toString(), startAmount, endAmount, tkRate); List<TaoBaoGoodsBrief> goodsList = new ArrayList<>(); // 遍历列表数据 if (listQuery != null) for (QualityFactory quality : listQuery) { TaoBaoGoodsBrief taoBaoGoodsBrief = quality.getTaoBaoGoodsBrief(); if (taoBaoGoodsBrief == null) { continue; } int biz30day = taoBaoGoodsBrief.getBiz30day(); if (biz30day >= 10000) { double sales = biz30day; String salesCountMidea = String.format("%.1f", sales / 10000); taoBaoGoodsBrief.setSalesCount(salesCountMidea + "万"); } else { taoBaoGoodsBrief.setSalesCount(biz30day + ""); } goodsList.add(taoBaoGoodsBrief); } return new CommonContentResult(goodsList, count); } /** * 高额好券 * * @param cid * @param page * @param pageSize * @return */ private CommonContentResult getHaoQuanContent(String cid, int page, int pageSize) { pageSize = Constant.PAGE_SIZE; Integer startAmount = null; Integer endAmount = null; if (cid.equalsIgnoreCase(1 + "")) { startAmount = 1; endAmount = 5; } else if (cid.equalsIgnoreCase(2 + "")) { startAmount = 5; endAmount = 10; } else if (cid.equalsIgnoreCase(3 + "")) { startAmount = 10; endAmount = 20; } else if (cid.equalsIgnoreCase(4 + "")) { startAmount = 20; endAmount = 30; } else if (cid.equalsIgnoreCase(5 + "")) { startAmount = 30; endAmount = 50; } else if (cid.equalsIgnoreCase(6 + "")) { startAmount = 50; endAmount = 10000; } Integer startPropor = 20; List<QualityFactory> listQuery = qualityGoodsService.listQueryByCouponAmount((page - 1) * pageSize, pageSize, startAmount, endAmount, startPropor); long count = qualityGoodsService.countQueryByCouponAmount(startAmount, endAmount, startPropor); List<TaoBaoGoodsBrief> goodsList = new ArrayList<>(); // 遍历列表数据 for (QualityFactory selectionGoods : listQuery) { TaoBaoGoodsBrief taoBaoGoodsBrief = selectionGoods.getTaoBaoGoodsBrief(); if (taoBaoGoodsBrief == null) { continue; } int biz30day = taoBaoGoodsBrief.getBiz30day(); if (biz30day >= 10000) { double sales = biz30day; String salesCountMidea = String.format("%.1f", sales / 10000); taoBaoGoodsBrief.setSalesCount(salesCountMidea + "万"); } else { taoBaoGoodsBrief.setSalesCount(biz30day + ""); } goodsList.add(taoBaoGoodsBrief); } return new CommonContentResult(goodsList, count); } /** * 居家生活 * * @param cid fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoWeiQuanDrawBackServiceImpl.java
@@ -262,7 +262,7 @@ // 新版通知 userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, drawBackMoney, userInfoMapper.selectByPrimaryKey(uid).getMyHongBao()); userInfoMapper.selectByPKey(uid).getMyHongBao()); userNotificationService.weiQuanFanli(uid, orderId, drawBackMoney); } fanli/src/main/java/com/yeshi/fanli/util/CMQManager.java
@@ -1,8 +1,7 @@ package com.yeshi.fanli.util; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -11,7 +10,6 @@ import com.alipay.api.response.AlipayFundTransToaccountTransferResponse; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import com.qcloud.cmq.Message; import com.yeshi.fanli.dto.HongBao; import com.yeshi.fanli.entity.bus.user.AlipayTransferResultInfo; @@ -19,10 +17,7 @@ import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.common.AdminUser; import com.yeshi.fanli.entity.push.PushQueueRecord; import com.yeshi.fanli.entity.taobao.TaoBaoOrder; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; import net.sf.json.JSONObject; public class CMQManager { private static String secretId = "AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25"; @@ -31,6 +26,10 @@ private static CMQUtil cmqUtil; // TODO 订单处理队列 public static String QUEUENAME_ORDER = "fanli-orders"; // 刚刚产生的订单处理队列 public static String QUEUENAME_NEW_ORDER = "fanli-new-orders"; // 提现结果处理队列 public static String EXTRACT_RESULT = "extract-result"; // TODO IOS推送队列 @@ -53,6 +52,7 @@ if (Constant.IS_TEST) { QUEUENAME_ORDER = "test-" + QUEUENAME_ORDER; QUEUENAME_NEW_ORDER = "test-" + QUEUENAME_NEW_ORDER; EXTRACT_RESULT = "test-" + EXTRACT_RESULT; PUSH_IOS = "test-" + PUSH_IOS; FANLI_ORDER = "test-" + FANLI_ORDER; @@ -62,6 +62,7 @@ } QUEUENAME_ORDER += "-" + Constant.systemCommonConfig.getProjectName(); QUEUENAME_NEW_ORDER += "-" + Constant.systemCommonConfig.getProjectName(); EXTRACT_RESULT += "-" + Constant.systemCommonConfig.getProjectName(); PUSH_IOS += "-" + Constant.systemCommonConfig.getProjectName(); FANLI_ORDER += "-" + Constant.systemCommonConfig.getProjectName(); @@ -72,6 +73,7 @@ cmqUtil = CMQUtil.getInstance(secretId, secretKey); // 最大消息为1M cmqUtil.createQueue(QUEUENAME_ORDER, 1024 * 1024); cmqUtil.createQueue(QUEUENAME_NEW_ORDER, 1024 * 1024); cmqUtil.createQueue(EXTRACT_RESULT); cmqUtil.createQueue(PUSH_IOS); cmqUtil.createQueue(FANLI_ORDER); @@ -92,11 +94,9 @@ * * @param orderMap */ public void addTaoBaoOrderMsg(String orderId, List<TaoBaoOrder> orderList) { if (!StringUtil.isNullOrEmpty(orderId) && orderList != null && orderList.size() > 0) { JSONObject item = new JSONObject(); item.put(orderId, new GsonBuilder().create().toJson(orderList)); cmqUtil.sendMsg(QUEUENAME_ORDER, item.toString()); public void addTaoBaoOrderMsg(String orderId) { if (!StringUtil.isNullOrEmpty(orderId)) { cmqUtil.sendMsg(QUEUENAME_ORDER, orderId); } } @@ -105,27 +105,18 @@ * * @param count */ @SuppressWarnings("unchecked") public Map<String, List<TaoBaoOrder>> consumeTaoBaoOrderMsg(int count) { public List<String> consumeTaoBaoOrderMsg(int count) { List<String> resultList = new ArrayList<>(); List<Message> list = cmqUtil.recieveMsg(count, QUEUENAME_ORDER); Map<String, List<TaoBaoOrder>> map = new HashMap<>(); if (list != null) for (Message msg : list) { String result = msg.msgBody; JSONObject data = JSONObject.fromObject(result); Iterator<String> its = data.keySet().iterator(); if (its.hasNext()) { String orderId = its.next(); Type type = new TypeToken<List<TaoBaoOrder>>() { }.getType(); List<TaoBaoOrder> orderList = new Gson().fromJson(data.optJSONArray(orderId).toString(), type); map.put(orderId, orderList); } resultList.add(result); // 删除消息 cmqUtil.deleteMsg(QUEUENAME_ORDER, msg.receiptHandle); } return map; return resultList; } /** @@ -134,7 +125,46 @@ * @param receiptHandle */ public void deleteTaoBaoOrderMsg(String receiptHandle) { cmqUtil.deleteMsg(EXTRACT_RESULT, receiptHandle); cmqUtil.deleteMsg(QUEUENAME_ORDER, receiptHandle); } /** * 发送订单消息(刚刚产生的订单) * * @param orderMap */ public void addTaoBaoNewOrderMsg(String orderId) { if (!StringUtil.isNullOrEmpty(orderId)) { cmqUtil.sendMsg(QUEUENAME_NEW_ORDER, orderId); } } /** * 消费淘宝订单消息(刚刚产生的订单) * * @param count */ public List<String> consumeTaoBaoNewOrderMsg(int count) { List<String> resultList = new ArrayList<>(); List<Message> list = cmqUtil.recieveMsg(count, QUEUENAME_NEW_ORDER); if (list != null) for (Message msg : list) { String result = msg.msgBody; resultList.add(result); // 删除消息 cmqUtil.deleteMsg(QUEUENAME_NEW_ORDER, msg.receiptHandle); } return resultList; } /** * 删除淘宝订单消息(刚刚产生的订单) * * @param receiptHandle */ public void deleteTaoBaoNewOrderMsg(String receiptHandle) { cmqUtil.deleteMsg(QUEUENAME_NEW_ORDER, receiptHandle); } /** fanli/src/main/java/com/yeshi/fanli/util/SpringContext.java
@@ -1,6 +1,7 @@ package com.yeshi.fanli.util; import java.math.BigDecimal; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -12,6 +13,7 @@ import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Component; import org.yeshi.utils.NumberUtil; import org.yeshi.utils.tencentcloud.COSManager; import org.yeshi.utils.tencentcloud.entity.COSInitParams; @@ -108,6 +110,7 @@ if (Constant.IS_TASK) { doExtractResult();// 处理提现结果 doTaoBaoOrders();// 处理淘宝订单 doTaoBaoNewOrders();// 处理淘宝订单(刚刚产生的) doOrderFanLiNew();// 新版返利 doOrderTiChengFanLi();// 处理订单提成返利 doWeiQuanOrder();// 处理维权订单 @@ -185,16 +188,58 @@ while (true) { try { // 取16个订单 Map<String, List<TaoBaoOrder>> map = CMQManager.getInstance().consumeTaoBaoOrderMsg(16); if (map != null) { // 从库里面查询 Iterator<String> its = map.keySet().iterator(); while (its.hasNext()) { String orderId = its.next(); List<String> orderIds = CMQManager.getInstance().consumeTaoBaoOrderMsg(16); Map<String, List<TaoBaoOrder>> map = new HashMap<>(); if (orderIds != null) { for (String orderId : orderIds) { if (NumberUtil.isNumeric(orderId.trim())) { List<TaoBaoOrder> orderList = taoBaoOrderService .getTaoBaoOrderByOrderId(orderId); map.put(orderId, orderList); LogHelper.orderInfo("开始处理订单:" + orderId); orderProcessService.processOrder(map); LogHelper.orderInfo("结束处理订单:" + orderId); } } } } catch (Exception e) { try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { } } } } }); } } /** * 刚刚产生的订单 */ public void doTaoBaoNewOrders() { // 同时开启3个线程处理 for (int i = 0; i < 1; i++) { executor.execute(new Runnable() { @Override public void run() { while (true) { try { // 取16个订单 List<String> orderIds = CMQManager.getInstance().consumeTaoBaoNewOrderMsg(16); Map<String, List<TaoBaoOrder>> map = new HashMap<>(); if (orderIds != null) { for (String orderId : orderIds) { List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId); map.put(orderId, orderList); LogHelper.orderInfo("新订单-开始处理订单:" + orderId); long startTime = System.currentTimeMillis(); orderProcessService.processOrder(map); LogHelper.orderInfo("新订单-结束处理订单:" + orderId + "- 处理时间:" + (System.currentTimeMillis() - startTime)); } orderProcessService.processOrder(map); } } catch (Exception e) { try { @@ -384,7 +429,6 @@ boutiqueAutoRuleService.startScheduler(); } /** * 更新精选库商品 */ fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoOrderUtil.java
@@ -5,8 +5,10 @@ import java.math.BigDecimal; import java.net.URLEncoder; import java.util.ArrayList; 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 java.util.concurrent.ConcurrentHashMap; @@ -681,9 +683,67 @@ 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; } 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("订单的orderBy超过8位:" + taoBaoOrder.getOrderBy()); } int orderBy = Integer.parseInt(orderByStr); // taoBaoOrder.setOrderBy(orderBy); } } /** * 计算邀请赚的返利时间 *