From 27c6695551c7229786ef2cf7dae722886c9edf53 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 09 八月 2024 22:53:44 +0800 Subject: [PATCH] 代理新功能完善 --- src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java b/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java index bf505de..a4b2097 100644 --- a/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java +++ b/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java @@ -1,5 +1,7 @@ package com.taoke.autopay.manager; +import com.taoke.autopay.dao.KeyOrderMapper; +import com.taoke.autopay.entity.ClientInfo; import com.taoke.autopay.entity.KeyOrder; import com.taoke.autopay.entity.SystemConfigKeyEnum; import com.taoke.autopay.service.ClientInfoService; @@ -53,13 +55,50 @@ orderQueues.clear(); } + private Long getTargetClientId() { + List<Long> clientIds = clientInfoService.getRePayClientIds(); + if (clientIds != null && clientIds.size() > 0) { + // 鏌ヨ璁惧鏈墽琛岀殑鏁伴噺 + List<List<Long>> clist=new ArrayList<>(); + for (Long cuid : clientIds) { + KeyOrderMapper.DaoQuery daoQuery = new KeyOrderMapper.DaoQuery(); + daoQuery.distributeClientUid =cuid; + daoQuery.state = KeyOrder.STATE_NOT_PAY; + daoQuery.minCreateTime=new Date(System.currentTimeMillis() - 1000*60*30L); + long count = keyOrderService.count(daoQuery); + clist.add(Arrays.asList(new Long[]{cuid,count})); + } + clist.sort(new Comparator<List<Long>>() { + @Override + public int compare(List<Long> o1, List<Long> o2) { + return (int)(o1.get(1)-o2.get(1)); + } + }); + if(clist.size()>1) { + for (int i = 1; i < clist.size(); i++) { + if (clist.get(i).get(1).longValue() != clist.get(i - 1).get(1)) { + clist = clist.subList(0, i); + break; + } + } + } + Collections.shuffle(clist); + return clist.get(0).get(0); + } + return null; + } + @Transactional(rollbackFor = Exception.class) public void processFromQueue() { if (orderQueues.isEmpty()) { return; } + Long targetCUID = getTargetClientId(); + if (targetCUID == null) { + return; + } OrderQueue queue = orderQueues.peek(); - if (queue != null && System.currentTimeMillis() > queue.expireTime) { + if (queue != null && System.currentTimeMillis() >= queue.expireTime) { queue = orderQueues.poll(); KeyOrder order = keyOrderService.selectById(queue.getId()); if (order == null || order.getState() != KeyOrder.STATE_REJECT_PAY) { @@ -70,29 +109,23 @@ } // 瓒呮椂30鍒嗛挓涓嶆墽琛� - if(System.currentTimeMillis() - order.getCreateTime().getTime()> 30*60*1000L){ + if (System.currentTimeMillis() - order.getCreateTime().getTime() > 30 * 60 * 1000L) { return; } if (!reProcessCountMap.containsKey(queue.getId())) { reProcessCountMap.put(queue.getId(), 0); } + reProcessCountMap.put(queue.getId(), reProcessCountMap.get(queue.getId()) + 1); keyOrderService.removeDistributedClient(queue.getId()); - - List<Long> clientIds = clientInfoService.getRePayClientIds(); // 绉婚櫎宸茬粡鍒嗛厤鐨勮澶囷紝鏀瑰彉鐘舵�佷负鏈垎閰� KeyOrder update = new KeyOrder(); update.setId(queue.getId()); update.setState(KeyOrder.STATE_NOT_PROCESS); update.setStateDesc("閲嶆柊鍒嗛厤"); - if (clientIds!=null&&clientIds.size()>0) { - int index = (int) Math.round(Math.random() *clientIds.size()); - if (index + 1 > clientIds.size()) { - index = clientIds.size() - 1; - } - update.setDistributeClientUid(clientIds.get(index)); - } + update.setDistributeClientUid(targetCUID); + update.setDistributeTime(new Date()); keyOrderService.update(update); } } @@ -111,12 +144,13 @@ return; } //鍔犲叆閲嶈瘯闃熷垪 - orderQueues.add(OrderQueue.builder().id(id).expireTime(System.currentTimeMillis() + 1 * 60 * 1000).build()); + orderQueues.add(OrderQueue.builder().id(id).expireTime(System.currentTimeMillis()).build()); KeyOrder update = new KeyOrder(); update.setId(id); update.setState(KeyOrder.STATE_REJECT_PAY); update.setStateDesc(msg); keyOrderService.update(update); + processFromQueue(); } public static void main(String[] args) { -- Gitblit v1.8.0