diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/JsonToXmlConversionService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/JsonToXmlConversionService.java index c532c50..0426c25 100644 --- a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/JsonToXmlConversionService.java +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/JsonToXmlConversionService.java @@ -188,12 +188,15 @@ public class JsonToXmlConversionService { String name = reportItem.getName(); if (name.contains("urcbFluc") || - name.contains("urcbStHarm") || - name.contains("urcbStIHarm") || - name.contains("urcbStMMXU") || - name.contains("urcbStMSQI") || + name.contains("brcbFluc") || + name.contains("urcbRtHarm") || + name.contains("urcbRtIHarm") || + name.contains("urcbRtMMXU") || + name.contains("urcbRtMSQI") || name.contains("urcbPLT") || name.contains("urcbPST") || + name.contains("brcbPLT") || + name.contains("brcbPST") || name.contains("urcbFlicker") || name.contains("urcbStatistic")|| name.contains("urcbRealData")) { @@ -771,6 +774,7 @@ public class JsonToXmlConversionService { if(2==configType && fullKey.contains("线电压总有效值")){ daPath = "1_" + daPath; } + int offset=calculateOffset(sdiItem.getName(), typeItem.getName(), doiItem); MetricInfo info = new MetricInfo(); info.setLnClass(dataSetGroup.getLnClass()); info.setLnInst(instItem.getInst()); @@ -781,6 +785,7 @@ public class JsonToXmlConversionService { info.setStart(doiItem.getStart()); info.setEnd(doiItem.getEnd()); info.setBaseFlag(doiItem.getBaseflag()); + info.setOffset(offset); metrics.put(fullKey.toLowerCase(), info); } } @@ -829,10 +834,15 @@ public class JsonToXmlConversionService { int start = doiItem.getStart(); if (baseflag == 1) { - boolean isInterHarmonic = isInterHarmonicMetric(doiItem); + boolean isInterHarmonic = isInterHarmonicMetric(doiItem);//间谐波判断 int m = isInterHarmonic ? 0 : 2; int i = m - start; - sb.append("[%-").append(i).append("]"); + //判断是Offset是否需要 + if(i<0){ + sb.append("[%-0]"); + }else { + sb.append("[%-").append(i).append("]"); + } } else { sb.append("[").append(start).append("]"); } @@ -848,6 +858,28 @@ public class JsonToXmlConversionService { } return sb.toString(); } + + private int calculateOffset(String sdiName, String typeName, DoiItem doiItem) { + int offset=0; + if (sdiName != null && !sdiName.isEmpty()){ + if (sdiName.endsWith("Har") && doiItem != null) { + int baseflag = doiItem.getBaseflag(); + int start = doiItem.getStart(); + if (baseflag == 1) { + boolean isInterHarmonic = isInterHarmonicMetric(doiItem);//间谐波判断 + int m = isInterHarmonic ? 0 : 2; + int i = m - start; + + //判断是Offset是否需要 + if(i<0){ + offset = i; + } + } + } + } + + return offset; + } /** * 标准化相别名称,将具体相别转换为通配符格式 @@ -906,6 +938,8 @@ public class JsonToXmlConversionService { MetricInfo metric = mappingMetrics.get(rule.getName()); rule.setDoPath(metric.getDoPath()); rule.setDaPath(metric.getDaPath()); + // 传递offset值,将Integer转换为String + rule.setOffset(String.valueOf(metric.getOffset())); applicable.put(ruleKey, rule); matched = true; addMethodDescribe(methodDescribeList, "✓ 规则匹配成功: " + ruleKey + " -> DO=" + rule.getDoPath() + ", DA=" + rule.getDaPath()); @@ -1066,10 +1100,11 @@ public class JsonToXmlConversionService { RuleBasedXmlMappingService.ValueRule matchedRule = applicableRules.get(desc); if (matchedRule != null) { StringBuilder valueNode = new StringBuilder("= 0) { + return path; + } + + int adjustment = -offset; + + // 匹配 %数字,数字% 格式并调整(如 %0,49%) + java.util.regex.Pattern pattern3 = java.util.regex.Pattern.compile("%(\\d+),(\\d+)%"); + java.util.regex.Matcher matcher3 = pattern3.matcher(path); + StringBuffer result3 = new StringBuffer(); + while (matcher3.find()) { + int startVal = Integer.parseInt(matcher3.group(1)); + int endVal = Integer.parseInt(matcher3.group(2)); + int newStart = startVal + adjustment; + int newEnd = endVal + adjustment; + matcher3.appendReplacement(result3, "%"+newStart+","+newEnd+"%"); + } + matcher3.appendTail(result3); + path = result3.toString(); + + return path; + } catch (NumberFormatException e) { + // 如果offset无法解析为整数,返回原始路径 + return path; + } + } private void addMethodDescribe(List methodDescribeList, String message) { if (methodDescribeList == null || message == null || message.trim().isEmpty()) { @@ -1231,7 +1308,9 @@ public class JsonToXmlConversionService { private int end; private int baseCount; private int baseFlag; - + private int offset; + public int getOffset() {return offset;} + public void setOffset(int offset) {this.offset = offset;} public String getLnClass() { return lnClass; } public void setLnClass(String lnClass) { this.lnClass = lnClass; } public String getLnInst() { return lnInst; } diff --git a/tools/mms-mapping/src/main/resources/template/JiangSu_Config1.xml b/tools/mms-mapping/src/main/resources/template/JiangSu_Config1.xml index 2f5da52..261fcb7 100644 --- a/tools/mms-mapping/src/main/resources/template/JiangSu_Config1.xml +++ b/tools/mms-mapping/src/main/resources/template/JiangSu_Config1.xml @@ -217,14 +217,14 @@ - - - - - - - - + + + + + + + + @@ -277,18 +277,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/tools/mms-mapping/src/main/resources/template/默认规则.txt b/tools/mms-mapping/src/main/resources/template/默认规则.txt index f080dbb..1532e22 100644 --- a/tools/mms-mapping/src/main/resources/template/默认规则.txt +++ b/tools/mms-mapping/src/main/resources/template/默认规则.txt @@ -43,10 +43,10 @@ - - - - + + + + @@ -281,6 +281,7 @@ +