From 734dfe9eb0a2176103dce8245c69b1194574c68e Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 29 七月 2024 20:16:15 +0800 Subject: [PATCH] 代理新功能完善 --- src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java | 74 +++++++++++++++++++++++-------------- 1 files changed, 46 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java b/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java index 6e7813a..9c3e4df 100644 --- a/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java +++ b/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java @@ -1,7 +1,10 @@ package com.taoke.autopay.manager; import com.taoke.autopay.entity.KeyOrder; +import com.taoke.autopay.entity.SystemConfigKeyEnum; import com.taoke.autopay.service.KeyOrderService; +import com.taoke.autopay.service.SystemConfigService; +import com.taoke.autopay.utils.StringUtil; import lombok.Builder; import lombok.Data; import org.springframework.stereotype.Component; @@ -24,7 +27,7 @@ @Data @Builder - public static class OrderQueue implements Comparable{ + public static class OrderQueue implements Comparable { private String id; private long expireTime; @@ -37,73 +40,88 @@ @Resource private KeyOrderService keyOrderService; - private Map<String,Integer> reProcessCountMap=new HashMap<>(); + private Map<String, Integer> reProcessCountMap = new HashMap<>(); - private Queue<OrderQueue> orderQueues=new PriorityQueue<>(); + private Queue<OrderQueue> orderQueues = new PriorityQueue<>(); - public void clearCacheData(){ + @Resource + private SystemConfigService systemConfigService; + + public void clearCacheData() { reProcessCountMap.clear(); orderQueues.clear(); } @Transactional(rollbackFor = Exception.class) - public void processFromQueue(){ - if(orderQueues.isEmpty()){ + public void processFromQueue() { + if (orderQueues.isEmpty()) { return; } - OrderQueue queue = orderQueues.peek(); - 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){ - return; - } - if(reProcessCountMap.containsKey(queue.getId())&&reProcessCountMap.get(queue.getId())>3){ + OrderQueue queue = orderQueues.peek(); + 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) { + return; + } + if (reProcessCountMap.containsKey(queue.getId()) && reProcessCountMap.get(queue.getId()) > 3) { return; } - if(!reProcessCountMap.containsKey(queue.getId())){ - reProcessCountMap.put(queue.getId(), 0); - } - reProcessCountMap.put(queue.getId(), reProcessCountMap.get(queue.getId())+1); + if (!reProcessCountMap.containsKey(queue.getId())) { + reProcessCountMap.put(queue.getId(), 0); + } + reProcessCountMap.put(queue.getId(), reProcessCountMap.get(queue.getId()) + 1); keyOrderService.removeDistributedClient(queue.getId()); + + String clientIds = systemConfigService.getValueCache(SystemConfigKeyEnum.RE_EXCUTE_PAY_CLIENTS); + + // 绉婚櫎宸茬粡鍒嗛厤鐨勮澶囷紝鏀瑰彉鐘舵�佷负鏈垎閰� - KeyOrder update=new KeyOrder(); + KeyOrder update = new KeyOrder(); update.setId(queue.getId()); update.setState(KeyOrder.STATE_NOT_PROCESS); update.setStateDesc("閲嶆柊鍒嗛厤"); + if (!StringUtil.isNullOrEmpty(clientIds)) { + String[] cids = clientIds.split(","); + int index = (int) Math.round(Math.random() * cids.length); + if (index + 1 > cids.length) { + index = cids.length - 1; + } + update.setDistributeClientUid(Long.parseLong(cids[index])); + } keyOrderService.update(update); } } /** + * @return void * @author hxh * @description 澶勭悊鏀粯澶辫触 * @date 21:28 2024/7/26 * @param: id * @param: msg - * @return void **/ @Transactional(rollbackFor = Exception.class) - public void processPayFail(String id,String msg){ - if(msg==null||!msg.contains("瓒呮椂")){ + public void processPayFail(String id, String msg) { + if (msg == null || !msg.contains("瓒呮椂")) { return; } //鍔犲叆閲嶈瘯闃熷垪 - orderQueues.add(OrderQueue.builder().id(id).expireTime(System.currentTimeMillis()+2*60*1000).build()); - KeyOrder update=new KeyOrder(); + orderQueues.add(OrderQueue.builder().id(id).expireTime(System.currentTimeMillis() + 2 * 60 * 1000).build()); + KeyOrder update = new KeyOrder(); update.setId(id); update.setState(KeyOrder.STATE_REJECT_PAY); update.setStateDesc(msg); keyOrderService.update(update); } - public static void main(String[] args){ - Queue<OrderQueue> orderQueues=new PriorityQueue<>(); + public static void main(String[] args) { + Queue<OrderQueue> orderQueues = new PriorityQueue<>(); orderQueues.add(OrderQueue.builder().id("1").build()); orderQueues.add(OrderQueue.builder().id("2").build()); - OrderQueue queue = orderQueues.peek(); - queue = orderQueues.poll(); + OrderQueue queue = orderQueues.peek(); + queue = orderQueues.poll(); orderQueues.isEmpty(); -- Gitblit v1.8.0