From d2ef5afff8240c78616b2b4732d1bcd0eb8a248a Mon Sep 17 00:00:00 2001
From: lxw <810412026@qq.com>
Date: 星期六, 17 六月 2023 10:41:17 +0800
Subject: [PATCH] Merge branch 'master' of http://118.89.139.230:10101/r/fg_v2.0

---
 src/main/java/com/whyc/util/MathUtil.java |   92 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 88 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/whyc/util/MathUtil.java b/src/main/java/com/whyc/util/MathUtil.java
index 58b4c8c..7378221 100644
--- a/src/main/java/com/whyc/util/MathUtil.java
+++ b/src/main/java/com/whyc/util/MathUtil.java
@@ -6,10 +6,7 @@
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.text.ParseException;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 
 /**
  * 璁$畻宸ュ叿绫�
@@ -210,5 +207,92 @@
     }
 
 
+    /**
+     *
+     * @param startNum 璧峰鏁�  -1 = limitStart ,鍥犱负limit鏄粠0寮�濮�
+     * @param endNum 缁堟鏁�
+     * @param pageSize 姣忛〉鏉℃暟
+     * @param queryCountMap key-骞翠唤,value-鏁伴噺
+     * @return {"2023",[2,20]}
+     *           琛ㄥ悕,[limit 2,20]
+     */
+    public static Map<String, List<Integer>> getQueryTableAndLimit(int startNum, int endNum, int pageSize, Map<String, Integer> queryCountMap) {
+        Map<String,List<Integer>> resultMap = new LinkedHashMap<>();
+        //瀹氫綅璧峰鏁�,鍦ㄥ摢涓勾浠借寖鍥村唴,璧峰鏁板��;缁堟鏁�,鍦ㄥ摢涓勾浠借寖鍥村唴,缁堟鏁板��
+        Set<String> queryKeySet = queryCountMap.keySet();
+        int sum = 0;
+        int lastSum = 0;
 
+        String limitStartYear = null;
+        int limitStart = 0;
+        String limitEndYear = null;
+        int limitEndSize = pageSize;
+        boolean limitStartFinished = false;
+        for (String queryKey : queryKeySet) {
+            int queryCount  = queryCountMap.get(queryKey);
+            sum+=queryCount;
+            if(!limitStartFinished) {
+                if (startNum <= sum) {
+                    limitStart = startNum - lastSum;
+                    limitStartYear = queryKey;
+                    //瀹屾垚浜唋imit 璧峰鍊肩殑鑾峰彇,鍚庣画涓嶉渶瑕佺户缁墽琛�
+                    limitStartFinished = true;
+                }
+            }
+            if(limitStartFinished) { //limit 璧峰鍊艰幏鍙栧悗,寮�濮嬭绠楃粓姝㈢殑璁板綍鏁伴噺
+                if (endNum <= sum) {
+                    limitEndYear = queryKey;
+
+                    break;
+                }
+                //棣栨,鎵ц璧峰limit鐨勬椂鍊�, limitEndSize(璁板綍棰勭暀鐨勬煡璇釜鏁�)闇�瑕佸噺鍘籰imitStart鍗犵敤鐨�
+                if(limitEndSize == pageSize){
+                    limitEndSize = pageSize - (sum - startNum + 1);
+                }else{ //濡傛灉杩樻病杈惧埌 缁堟鏁板��,闇�瑕佸噺鍘绘湰娆℃煡璇㈡秷鑰楁帀鐨勬暟閲�
+                    limitEndSize = limitEndSize - queryCount;
+                }
+            }
+
+            lastSum = sum;
+        }
+
+        boolean limitStartCompareFlag = true;
+        boolean tableStartFlag = false;
+        for (String queryKey : queryKeySet) {
+            int queryCount  = queryCountMap.get(queryKey);
+            if(queryKey.equals(limitStartYear) && limitStartCompareFlag){
+                tableStartFlag = true;
+                //浠庤繖閲屽紑濮�,鍙栬褰曟暟
+                LinkedList<Integer> limitList = new LinkedList<>();
+                if(queryKey.equals(limitEndYear)) { //鍚屼竴骞�
+                    limitList.add(limitStart-1);
+                    limitList.add(pageSize);
+                    resultMap.put(queryKey,limitList);
+                    break;
+                }else{
+                    limitList.add(limitStart-1);
+                    limitList.add(queryCount);
+                    resultMap.put(queryKey,limitList);
+                }
+                limitStartCompareFlag = false;
+                continue;
+            }
+            //涓嶅悓骞�,缁х画
+            if(tableStartFlag) { //宸茬粡缁忚繃浜嗚捣濮嬪勾,鎵嶅彲浠ュ彇鏁版嵁. 璧峰骞村墠鐨勬暟鎹棤鏁�
+                if (queryKey.equals(limitEndYear)) { //鎵惧埌缁堟骞�
+                    LinkedList<Integer> limitList = new LinkedList<>();
+                    limitList.add(0);
+                    limitList.add(limitEndSize);
+                    resultMap.put(queryKey, limitList);
+                } else { //涓嶆槸缁堟骞�,灞炰簬涓棿骞�
+                    LinkedList<Integer> limitList = new LinkedList<>();
+                    limitList.add(0);
+                    limitList.add(queryCount);
+                    resultMap.put(queryKey, limitList);
+                }
+            }
+        }
+        return resultMap;
+
+    }
 }

--
Gitblit v1.9.1