feat(数据查看/汇总): 全省合计行置顶(武汉市之上),导出 Excel 合计行加粗 + 文档更新
| | |
| | | |
| | | 1. **å
¥å£**ï¼æ°æ®æ¥çå·¥å
·æ å ãè§å¾ï¼æç» / æå¸å·æ±æ»ã忢ï¼ä»
对æå¸å·ç»´åº¦çç±»ååºç°ï¼ã |
| | | 2. **æ±æ»æ¡ä»¶**ï¼èµ·æ¢æï¼ä»»æåºé´ï¼å¹´åè³ N æå³ 01~Nï¼ãæåå£å¾ï¼ç空 / æç´¯è®¡å¼éæï¼ãæ±æ»ãå¯¼åº Excelã |
| | | 3. **ç»æ**ï¼17 个å¸å·ï¼RegionUtil è§èåä¸é¡ºåºï¼+ãå
¨çå计ãè¡ã |
| | | 3. **ç»æ**ï¼ãå
¨çå计ãè¡æ¾å¨**æåé¢**ï¼2026-09-22 ç¨æ·è¦æ±ï¼ä½äºæ¦æ±å¸ä¹ä¸ï¼ï¼å
¶å为 17 个å¸å·ï¼RegionUtil è§èåä¸é¡ºåºï¼ï¼å¯¼åº Excel ä¸å计è¡å ç²ã |
| | | 4. **å£å¾è§å**ï¼ |
| | | - æµéç±»ï¼å®¢è¿é/å¨è½¬é/è´§è¿é/è®¢åæ°ï¼â è·¨ææ±åï¼ |
| | | - **æ¶ç¹ç±»ï¼è½¦è¾æ°ãä¼ä¸æ°ãç«ç¹æ°ï¼ä¸å䏿±æ»ï¼ä¸åºç°å¨ç»æä¸**ï¼ |
| | |
| | | | TC-7 | æå `rankMode=blank` | æåå为空 | ç©ºï¼æ¾ç¤º `-`ï¼ | éè¿ | |
| | | | TC-8 | æå `rankMode=recompute` | æç´¯è®¡å¼éåº | è´§è¿éï¼æ¦æ± 1ã宿 3ãé»ç³ 9ãåå ° 12ï¼å
¨çå计è¡ç空 | éè¿ | |
| | | | TC-9 | ç½çº¦è½¦ 2026-01~08 | æåå£å¾å计 | å
¨çå计订å 208,229,132 åã客è¿é 33864.94 ä¸äººæ¬¡ | éè¿ | |
| | | | TC-10 | `export`ï¼å
¬äº¤ 2026-01~08ï¼ | çæ xlsx | 5,773 åèï¼å¯æ£å¸¸æå¼ãå«è¡¨å¤´ä¸åè®¡è¡ | éè¿ | |
| | | | TC-10 | `export`ï¼å
¬äº¤ 2026-01~08ï¼ | çæ xlsx | 5,790 åèï¼å¯æ£å¸¸æå¼ãå«è¡¨å¤´ä¸å计è¡ï¼å计è¡å ç²ãæ°å¼æ ¼å¼ `0.00`ãåæ¯æ ¼å¼ `0.00%` | éè¿ | |
| | | | TC-10b | å计è¡ä½ç½® | 卿¦æ±å¸ä¹ä¸ | 第 1 è¡=å
¨çå计ï¼å®¢è¿é 110776.34ï¼ï¼ç¬¬ 2 è¡=æ¦æ±å¸ï¼æå 1ï¼ï¼åè®¡è¡æåç空 | éè¿ | |
| | | |
| | | ### 3.2 çæºç¨ä¾ |
| | | |
| | |
| | | - å端ï¼å·¥å
·æ å ãè§å¾ï¼æç» / æå¸å·æ±æ»ãï¼æ±æ»æ¨¡å¼æä¾èµ·æ¢æãæåãæ±æ»ãå¯¼åº Excelï¼ |
| | | - ä¿®å¤ä¸¤ä¸ªå£å¾åï¼è´§è¿éå¨è½¬é表ç"è¡å
累计 + æ¹åçå计è¡"éå¤è®¡ç®ï¼1,149,579 â 130,311.89 ä¸å¨ï¼ãç»æææ æ°æ®èªå¨åéï¼ |
| | | - ä¸æå·¥æ ¸ç®ä¸è´ï¼å
¬äº¤ 1-8 æ 110776.34 ä¸äººæ¬¡ãè´§è¿ä¼ä¸ 313,998,248 å¨ãè´§è¿éå¨è½¬é 130,311.89 ä¸å¨ã |
| | | - æ¶å°¾ï¼æç¨æ·è¦æ±æãå
¨çå计ãè¡æå°æåé¢ï¼æ¦æ±å¸ä¹ä¸ï¼ï¼å¯¼åº Excel ä¸å计è¡å ç²ã |
| | | |
| | | ### 5. æ±æ»å¤§è¡¨å¯¼åºç»æè½çç¼åï¼ç¨æ·ï¼"ä¸è½½è¿å°±ä¸è¯¥åçå¾ä¹
ï¼è½ä¸è½è®°ä½ä¸æ¬¡ç»æ"ï¼ |
| | | |
| | |
| | | Map<String, Map<String, Double>> last = sumByCity(longRows(type, lastFrom, lastTo), cols); |
| | | |
| | | List<Map<String, Object>> records = new ArrayList<>(); |
| | | // å
¨çåè®¡è¡æ¾å¨æåé¢ï¼ç¨æ·è¦æ±ï¼æ¾å¨æ¦æ±å¸ä¹ä¸ï¼ |
| | | records.add(outRow(cols, mergeAll(cur), mergeAll(last), TOTAL_CITY)); |
| | | for (String city : RegionUtil.cityList()) { |
| | | records.add(outRow(cols, cur.get(city), last.get(city), city)); |
| | | } |
| | | records.add(outRow(cols, mergeAll(cur), mergeAll(last), TOTAL_CITY)); |
| | | if (recomputeRank) { |
| | | applyRank(records, cols); |
| | | } |
| | |
| | | cell.setCellValue(String.valueOf(columns.get(i).get("label"))); |
| | | cell.setCellStyle(headStyle); |
| | | } |
| | | Font totalFont = wb.createFont(); |
| | | totalFont.setBold(true); |
| | | XSSFCellStyle totalStyle = wb.createCellStyle(); |
| | | totalStyle.setFont(totalFont); |
| | | |
| | | int r = 2; |
| | | for (Map<String, Object> rec : records) { |
| | | boolean isTotal = TOTAL_CITY.equals(rec.get("city")); |
| | | XSSFRow row = sheet.createRow(r++); |
| | | for (int i = 0; i < columns.size(); i++) { |
| | | String prop = String.valueOf(columns.get(i).get("prop")); |
| | |
| | | cell.setCellStyle(colLabel.contains("忝") ? pctStyle : numStyle); |
| | | } else { |
| | | cell.setCellValue(v == null ? "" : String.valueOf(v)); |
| | | if (isTotal) { |
| | | cell.setCellStyle(totalStyle); |
| | | } |
| | | } |
| | | } |
| | | } |