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