From 5e2982df8aca712c3156711c1917fcedb6cfb087 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期三, 09 九月 2026 10:30:23 +0800
Subject: [PATCH] fix: 09-09上午整改——RULE_001分项运政对比(6段)+阈值说明联动通用化+汇总大表列宽回归母版+导入结果弹窗 + 测试报告与工作日结
---
traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java | 68 ++++++++++++++++++++-------------
1 files changed, 41 insertions(+), 27 deletions(-)
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java b/traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java
index e4087de..a3dbab1 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/rulemanage/controller/RuleManageController.java
@@ -64,19 +64,22 @@
return Result.ok("宸蹭繚瀛�");
}
- /** % 鍓嶇殑鏁板�硷紙鍚嶇О/璇存槑涓殢闃堝�煎姩鎬佸彉鍖栫殑鐗囨锛�% 鍓嶅彲鑳芥槸 卤銆�>銆佽秴杩囥�侀珮鍑� 绛夋弿杩拌瘝锛屼粎鏇挎崲鏁板瓧鏈韩锛� */
- private static final Pattern PCT_NUM = Pattern.compile("\\d+(?:\\.\\d+)?(?=%)");
+ /** 鍚嶇О/璇存槑涓殢闃堝�煎姩鎬佸彉鍖栫殑鏁板瓧鐗囨锛氬尮閰嶄换鎰忔暟瀛楋紙% 鍓嶅悗銆佸彴/鍚�/鍏噷绛夊崟浣嶅墠鍧囧彲锛� */
+ private static final Pattern NUM_TOKEN = Pattern.compile("\\d+(?:\\.\\d+)?");
- /** 瑙f瀽闃堝�煎瓧绗︿覆涓涓�涓暟鍊硷紱鏃犳硶瑙f瀽杩斿洖 null */
- private Double parseThresholdNum(String threshold) {
- if (threshold == null || threshold.trim().isEmpty()) return null;
- java.util.regex.Matcher m = Pattern.compile("\\d+(?:\\.\\d+)?").matcher(threshold.trim());
- if (!m.find()) return null;
- try {
- return Double.parseDouble(m.group());
- } catch (Exception e) {
- return null;
+ /** 瑙f瀽闃堝�煎瓧绗︿覆涓殑鎵�鏈夋暟鍊硷紙鏀寔鈥�5,5,50鈥濈瓑澶氭闃堝�硷紝濡� RULE_001 鍒嗛」杩愭斂瀵规瘮锛� */
+ private java.util.List<Double> parseThresholdNums(String threshold) {
+ java.util.List<Double> out = new java.util.ArrayList<>();
+ if (threshold == null || threshold.trim().isEmpty()) return out;
+ java.util.regex.Matcher m = NUM_TOKEN.matcher(threshold.trim());
+ while (m.find()) {
+ try {
+ out.add(Double.parseDouble(m.group()));
+ } catch (Exception e) {
+ // 蹇界暐鏃犳硶瑙f瀽鐨勬
+ }
}
+ return out;
}
/** 鏁板�煎睍绀猴細鏁存暟鍘绘帀灏忔暟浣嶏紝鍏朵綑淇濈暀鍘熺簿搴� */
@@ -86,10 +89,11 @@
return new java.math.BigDecimal(String.valueOf(v)).stripTrailingZeros().toPlainString();
}
- /** 鐢遍槇鍊兼暟鍊兼帹瀵尖�滆鏄庢枃瀛楅噷鍐欑殑鏄櫨鍒嗕箣鍑犫�濈殑鍊欓�夊彛寰勶細
+ /** 鐢遍槇鍊兼暟鍊兼帹瀵尖�滃悕绉�/璇存槑閲屽啓鐨勬槸鐧惧垎涔嬪嚑鈥濈殑鍊欓�夊彛寰勶細
* 鈶� 闃堝�兼湰韬氨鏄櫨鍒嗘暟锛堝 20 鈫� 卤20%锛夛紱
* 鈶� 闃堝�兼槸灏忔暟姣斾緥锛堝 0.02 鈫� 2%銆�0.5 鈫� 50%锛夛紱姝ゆ椂 <1 鎵嶅惎鐢紱
- * 鈶� 闃堝�兼槸姣斿�硷紙濡� 1.3 鈫� 楂樺嚭30%锛夛紱姝ゆ椂 >1 鎵嶅惎鐢ㄣ�� */
+ * 鈶� 闃堝�兼槸姣斿�硷紙濡� 1.3 鈫� 楂樺嚭30%锛夛紱姝ゆ椂 >1 鎵嶅惎鐢紱
+ * 鍏朵綑鎸夊師鏁板尮閰嶏紙鍙�/鍚�/鍏噷绛夐槇鍊煎師鏍峰嚭鐜板湪鏂囧瓧涓級銆� */
private double[] thresholdPercentCandidates(double v) {
double[] cands;
if (v > 0 && v < 1) {
@@ -102,16 +106,23 @@
return cands;
}
- /** 鎸夋棫闃堝�煎尮閰嶆枃鏈腑宸叉湁鐨勭櫨鍒嗘瘮鐗囨锛屼粎鏇挎崲鈥滀笌鏃ч槇鍊煎寰椾笂鈥濈殑鏁板瓧涓烘柊闃堝�煎搴旀暟瀛楋紱瀵逛笉涓婄殑鏁板瓧锛堝璇存槑閲屼笌闃堝�兼棤鍏崇殑鏁板�硷級淇濇寔涓嶅姩 */
+ /** 鎸夆�滄棫闃堝�尖啋鏂伴槇鍊尖�濋�愭鏀瑰啓鍚嶇О/璇存槑涓殑鏁板瓧锛�
+ * 鍙浛鎹笌鏃ч槇鍊兼煇涓�娈碉紙鎴栧叾鐧惧垎姣斿彛寰勶級瀵瑰緱涓婄殑鏁板瓧锛涘娈甸槇鍊硷紙閫楀彿鍒嗛殧锛夐�愭瀵瑰簲锛�
+ * 涓庨槇鍊兼棤鍏崇殑鏁板瓧锛堟棩鏈熴�佷笌瑙勫垯鏃犲叧鐨勫浐瀹氭暟鍊肩瓑锛変繚鎸佷笉鍔ㄣ�� */
private String decorateThresholdText(String text, String oldThreshold, String newThreshold) {
if (text == null || text.trim().isEmpty()) return text;
- Double oldNum = parseThresholdNum(oldThreshold);
- Double newNum = parseThresholdNum(newThreshold);
- if (oldNum == null || newNum == null) return text;
- double[] oldCands = thresholdPercentCandidates(oldNum);
- double[] newCands = thresholdPercentCandidates(newNum);
- if (oldCands.length != newCands.length) return text;
- java.util.regex.Matcher m = PCT_NUM.matcher(text);
+ java.util.List<Double> olds = parseThresholdNums(oldThreshold);
+ java.util.List<Double> news = parseThresholdNums(newThreshold);
+ if (olds.isEmpty() || olds.size() != news.size()) return text;
+ int n = olds.size();
+ double[][] oc = new double[n][];
+ double[][] nc = new double[n][];
+ for (int i = 0; i < n; i++) {
+ oc[i] = thresholdPercentCandidates(olds.get(i));
+ nc[i] = thresholdPercentCandidates(news.get(i));
+ if (oc[i].length != nc[i].length) return text;
+ }
+ java.util.regex.Matcher m = NUM_TOKEN.matcher(text);
StringBuffer sb = new StringBuffer();
while (m.find()) {
double token;
@@ -121,10 +132,13 @@
continue;
}
String repl = null;
- for (int i = 0; i < oldCands.length; i++) {
- if (Math.abs(oldCands[i] - token) < 1e-9) {
- repl = fmtNum(newCands[i]);
- break;
+ outer:
+ for (int i = 0; i < n; i++) {
+ for (int j = 0; j < oc[i].length; j++) {
+ if (Math.abs(oc[i][j] - token) < 1e-9) {
+ repl = fmtNum(nc[i][j]);
+ break outer;
+ }
}
}
if (repl == null) continue;
@@ -134,7 +148,7 @@
return sb.toString();
}
- /** 鍚嶇О/璇存槑闅忛槇鍊煎悓姝ワ紙update 鏃舵寜 鏃р啋鏂� 鏀瑰啓骞舵寔涔呭寲锛� */
+ /** 鍚嶇О/璇存槑闅忛槇鍊煎悓姝ワ紙update 鏃舵寜 鏃р啋鏂� 鏀瑰啓骞舵寔涔呭寲锛涘娈甸槇鍊煎悓鏍烽�愭鑱斿姩锛� */
private void syncThresholdText(AuditRule rule, String oldThreshold) {
if (rule == null || rule.getThreshold() == null) return;
rule.setRuleName(decorateThresholdText(rule.getRuleName(), oldThreshold, rule.getThreshold()));
@@ -145,4 +159,4 @@
private void syncThresholdText(AuditRule rule) {
syncThresholdText(rule, rule == null ? null : rule.getThreshold());
}
-}
\ No newline at end of file
+}
--
Gitblit v1.9.1