From 2147d023563a7c9d05d97547c00d6b0162c0644c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 09 十一月 2020 18:37:24 +0800 Subject: [PATCH] 刷单风险规则优化 --- fanli/src/main/java/com/yeshi/fanli/job/order/jd/UpdateJDOrderJob.java | 225 ++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 171 insertions(+), 54 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/job/order/jd/UpdateJDOrderJob.java b/fanli/src/main/java/com/yeshi/fanli/job/order/jd/UpdateJDOrderJob.java index b8b1dd1..eed5117 100644 --- a/fanli/src/main/java/com/yeshi/fanli/job/order/jd/UpdateJDOrderJob.java +++ b/fanli/src/main/java/com/yeshi/fanli/job/order/jd/UpdateJDOrderJob.java @@ -6,76 +6,193 @@ import javax.annotation.Resource; -import org.springframework.scheduling.annotation.Scheduled; +import com.yeshi.fanli.util.Constant; import org.springframework.stereotype.Component; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; import com.yeshi.fanli.dto.jd.JDOrderResult; import com.yeshi.fanli.entity.jd.JDOrder; import com.yeshi.fanli.exception.jd.JDOrderException; -import com.yeshi.fanli.service.inter.jd.JDOrderService; +import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.service.inter.order.jd.JDOrderService; +import com.yeshi.fanli.util.RedisKeyEnum; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.cmq.JDOrderCMQManager; +import org.yeshi.utils.TimeUtil; import com.yeshi.fanli.util.jd.JDApiUtil; +import com.yeshi.fanli.util.mq.cmq.order.JDOrderCMQManager; //浠庢窐瀹濈埇鍘昏鍗曟洿鏂� @Component public class UpdateJDOrderJob { - @Resource - private JDOrderService jdOrderService; + @Resource + private JDOrderService jdOrderService; - @Resource - private RedisManager redisManager; + @Resource + private RedisManager redisManager; - /** - * 淇濆瓨璁㈠崟 - * - * @param jdOrderList - */ - public void saveJDOrders(List<JDOrder> jdOrderList) { - for (JDOrder order : jdOrderList) - try { - jdOrderService.addJDOrder(order); - /** - * 鍋氶鐜囬檺鍒� - */ - String key = "jd-order-" + order.getOrderId(); - String result = redisManager.getCommonString(key); - if (!StringUtil.isNullOrEmpty(result)) - continue; - JDOrderCMQManager.getInstance().addJDOrder(order.getOrderId() + ""); - redisManager.cacheCommonString(key, "1", 60 * 60 * 2);// 2灏忔椂鍐呬笉鍐嶆洿鏂� - } catch (JDOrderException e) { - e.printStackTrace(); - } - } + /** + * 淇濆瓨璁㈠崟 + * + * @param jdOrderList + */ + public void saveJDOrders(List<JDOrder> jdOrderList) { + //5鍒嗛挓涓嶆洿鏂板氨鎶ヨ + try { + redisManager.cacheCommonString(RedisKeyEnum.monitor.getKey() + Constant.SOURCE_TYPE_JD, "1", 60 * 5); + } catch (Exception e) { + } - /** - * 蹇�熻鍗曟洿鏂帮紙鐖彇鏈皬鏃跺唴鐨勫崟,姣忓垎閽熶竴娆★級 - */ - @Scheduled(cron = "0 0/1 * * * ? ") - public void updateSoonOrder() { - JDOrderResult result = JDApiUtil.getOrderList(1, 200, new Date(), JDApiUtil.ORDER_TYPE_CREATETIME); - if (result != null && result.getOrderList() != null) - saveJDOrders(result.getOrderList()); - } + for (JDOrder order : jdOrderList) { + LogHelper.orderInfo("浜笢璁㈠崟:" + order.getOrderId() + "-" + order.getValidCode()); + if (order.getValidCode() == 15)// 杩囨护鎺夊緟浠樻 + continue; - /** - * 鐖彇鏈�杩戜竴灏忔椂鍐呯殑鐘舵�佹洿鏂颁簡鐨勫崟(10鍒嗛挓涓�娆�) - */ - @Scheduled(cron = "0 0/10 * * * ? ") - public void updateUpdateOrder() { - List<JDOrder> jdOrderList = new ArrayList<>(); - int pageSize = 200; - int page = 1; - JDOrderResult result = JDApiUtil.getOrderList(page++, pageSize, new Date(), JDApiUtil.ORDER_TYPE_UPDATETIME); - jdOrderList.addAll(result.getOrderList()); - while (result.isHasMore()) { - result = JDApiUtil.getOrderList(page++, pageSize, new Date(), JDApiUtil.ORDER_TYPE_UPDATETIME); - jdOrderList.addAll(result.getOrderList()); - } - saveJDOrders(jdOrderList); - } + // 闃叉澶氫釜鍟嗗搧鎷嗗崟闂锛岀埇鍙� + if (order.getOrderItemList().size() > 1 + && order.getOrderTime() > System.currentTimeMillis() - 1000 * 60 * 3L) { + continue; + } + + try { + jdOrderService.addJDOrder(order); + /** + * 鍋氶鐜囬檺鍒� + */ + String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.JDOrder, order.getOrderId() + ""); + String result = redisManager.getCommonString(key); + // 鍒ゆ柇 + if (StringUtil.isNullOrEmpty(result)) { + JDOrderCMQManager.getInstance().addJDOrder(order.getOrderId() + ""); + redisManager.cacheCommonString(key, "1", 60 * 60 * 2);// 2灏忔椂鍐呬笉鍐嶆洿鏂� + } + } catch (JDOrderException e) { + e.printStackTrace(); + } + } + } + + /** + * 蹇�熻鍗曟洿鏂帮紙鐖彇鏈皬鏃跺唴鐨勫崟,姣忓垎閽熶竴娆★級 + */ + @XxlJob("updateJDOrderHandler") + public ReturnT<String> updateJDSoonOrder(String param) throws Exception { + if ("1".equalsIgnoreCase(param)) {// 鏇存柊鏈皬鏃跺唴鐨勫崟 + LogHelper.job("寮�濮嬬埇鍙栦含涓滆鍗�"); + long now = System.currentTimeMillis(); + + JDOrderResult result = JDApiUtil.getOrderList(1, 200, new Date(now), JDApiUtil.ORDER_TYPE_CREATETIME); + if (result != null && result.getOrderList() != null) + saveJDOrders(result.getOrderList()); + // 鏌ヨ涓婁釜灏忔椂鐨� + result = JDApiUtil.getOrderList(1, 200, new Date(now - 1000 * 60 * 60L), JDApiUtil.ORDER_TYPE_CREATETIME); + if (result != null && result.getOrderList() != null) + saveJDOrders(result.getOrderList()); + } else if ("1hour".equalsIgnoreCase(param)) {// 鏇存柊1灏忔椂鍐呯殑璁㈠崟 + updateUpdateOrder(); + } else if ("1day".equalsIgnoreCase(param)) {// 鏇存柊1澶╁唴鐨勮鍗� + updateLatestDayOrder(new Date(System.currentTimeMillis())); + } else if ("3day".equalsIgnoreCase(param)) {// 鏇存柊鏈�杩�3澶╂洿鏂扮殑鏁版嵁 + updateLatest3DayOrder(); + } + + return ReturnT.SUCCESS; + } + + /** + * 鐖彇鏈�杩戜竴灏忔椂鍐呯殑鐘舵�佹洿鏂颁簡鐨勫崟(10鍒嗛挓涓�娆�) + */ + + public void updateUpdateOrder() { + List<JDOrder> jdOrderList = new ArrayList<>(); + int pageSize = 200; + int page = 1; + JDOrderResult result = JDApiUtil.getOrderList(page++, pageSize, new Date(), JDApiUtil.ORDER_TYPE_UPDATETIME); + if (result != null) { + jdOrderList.addAll(result.getOrderList()); + while (result != null && result.isHasMore()) { + result = JDApiUtil.getOrderList(page++, pageSize, new Date(), JDApiUtil.ORDER_TYPE_UPDATETIME); + if (result != null) + jdOrderList.addAll(result.getOrderList()); + } + } + saveJDOrders(jdOrderList); + } + + /** + * 鏇存柊涓�涓皬鏃剁殑璁㈠崟 + * + * @param date + */ + private List<JDOrder> getHourOrder(Date date) { + List<JDOrder> jdOrderList = new ArrayList<>(); + int pageSize = 200; + int page = 1; + JDOrderResult result = JDApiUtil.getOrderList(page++, pageSize, date, JDApiUtil.ORDER_TYPE_UPDATETIME); + if (result != null) { + jdOrderList.addAll(result.getOrderList()); + while (result != null && result.isHasMore()) { + result = JDApiUtil.getOrderList(page++, pageSize, date, JDApiUtil.ORDER_TYPE_UPDATETIME); + if (result != null) + jdOrderList.addAll(result.getOrderList()); + } + } + return jdOrderList; + } + + /** + * 鏇存柊涓�澶╃殑鏁版嵁 + * + * @param date + */ + public void updateDayOrder(Date date) { + Date now = new Date(); + List<JDOrder> orderList = new ArrayList<>(); + Date startTime = new Date( + TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(date.getTime(), "yyyy-MM-dd"), "yyyy-MM-dd")); + // 涓�涓皬鏃朵负涓�涓闀� + for (int i = 0; i < 24; i++) { + Date da = new Date(startTime.getTime() + 1000 * 60 * 60L * i); + if (da.getTime() > now.getTime()) + break; + List<JDOrder> tempOrderList = getHourOrder(da); + if (tempOrderList != null && tempOrderList.size() > 0) + orderList.addAll(tempOrderList); + } + saveJDOrders(orderList); + } + + /** + * 鏇存柊鏈�杩戜竴澶╃殑鏁版嵁 + * + * @param date + */ + public void updateLatestDayOrder(Date date) { + Date now = new Date(); + List<JDOrder> orderList = new ArrayList<>(); + Date startTime = new Date(date.getTime() - 1000 * 60 * 60 * 24L); + // 涓�涓皬鏃朵负涓�涓闀� + for (int i = 0; i < 24; i++) { + Date da = new Date(startTime.getTime() + 1000 * 60 * 60L * i); + if (da.getTime() > now.getTime()) + break; + List<JDOrder> tempOrderList = getHourOrder(da); + if (tempOrderList != null && tempOrderList.size() > 0) + orderList.addAll(tempOrderList); + } + saveJDOrders(orderList); + } + + /** + * 鏇存柊鏈�杩�3澶╃殑璁㈠崟锛堟瘡澶╂棭涓婂噷鏅�0鐐硅繃10鍒嗭紝鏃╀笂8鐐硅繃10鍒嗭級 + */ + public void updateLatest3DayOrder() { + Date now = new Date(); + for (int i = 1; i < 4; i++) { + updateDayOrder(new Date(now.getTime() - 1000 * 60 * 60 * 24L * i)); + } + } } -- Gitblit v1.8.0