| | |
| | | if (sys == null) return null; // 缺失由 EXISTENCE_SYS 规则提示 |
| | | String field = rule.getCheckField(); |
| | | double actual; |
| | | double reference; |
| | | Double referenceObj; |
| | | String fieldName; |
| | | if ("startCum".equals(field)) { |
| | | actual = nvl(monthly.getStartCum()); |
| | | reference = nvl(sys.getStartCum()); |
| | | referenceObj = sys.getStartCum(); |
| | | fieldName = "自开始建设累计"; |
| | | } else if ("yearCum".equals(field)) { |
| | | actual = nvl(monthly.getYearCum()); |
| | | reference = nvl(sys.getYearCum()); |
| | | referenceObj = sys.getYearCum(); |
| | | fieldName = "自年初累计"; |
| | | } else if ("monthDone".equals(field)) { |
| | | actual = nvl(monthly.getMonthDone()); |
| | | reference = nvl(sys.getMonthDone()); |
| | | referenceObj = sys.getMonthDone(); |
| | | fieldName = "本月完成"; |
| | | } else { |
| | | return null; |
| | | } |
| | | // 基准缺失(如新模板《2026年X月投资系统项目明细》没有「自年初累计」列)→ 不具备可比性,跳过并记日志; |
| | | // 不能把 null 当成 0 去比对,否则会成片误报。 |
| | | if (referenceObj == null) { |
| | | log.warn("投资比对跳过(投资系统基准缺失):rule={} project={} field={}", rule.getRuleCode(), projectName, fieldName); |
| | | return null; |
| | | } |
| | | double reference = referenceObj; |
| | | String[] parts = rule.getThreshold().split("\\|"); |
| | | double absThreshold = parts.length > 0 ? parseDoubleSafe(parts[0], 50) : 50; |
| | | double pctThreshold = parts.length > 1 ? parseDoubleSafe(parts[1], 5) : 5; |