From bc56870059cca013649077af0e53891cba8dbfd1 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期日, 04 八月 2024 09:43:41 +0800
Subject: [PATCH] 代理新功能完善

---
 src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java |   85 ++++++++++++++++++++++++++----------------
 1 files changed, 53 insertions(+), 32 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..bf505de 100644
--- a/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java
+++ b/src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java
@@ -1,17 +1,18 @@
 package com.taoke.autopay.manager;
 
 import com.taoke.autopay.entity.KeyOrder;
+import com.taoke.autopay.entity.SystemConfigKeyEnum;
+import com.taoke.autopay.service.ClientInfoService;
 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;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.PriorityQueue;
-import java.util.Queue;
+import java.util.*;
 
 /**
  * @author hxh
@@ -24,7 +25,7 @@
 
     @Data
     @Builder
-    public static class OrderQueue implements Comparable{
+    public static class OrderQueue implements Comparable {
         private String id;
         private long expireTime;
 
@@ -37,73 +38,93 @@
     @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;
+
+    @Resource
+    private ClientInfoService clientInfoService;
+
+    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);
+            // 瓒呮椂30鍒嗛挓涓嶆墽琛�
+            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();
+            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));
+            }
             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() + 1 * 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