| | |
| | | if (totalT != null) sumTurnover += totalT; |
| | | |
| | | if (totalF == null && abF == null) continue; // 两侧都没数 → 交给缺数清单(另算) |
| | | double belowF = (totalF == null ? 0 : totalF) - (abF == null ? 0 : abF); |
| | | double belowT = (totalT == null ? 0 : totalT) - (abT == null ? 0 : abT); |
| | | if (belowF < -TOL) issues.add(String.format("货运体检:%s %s 规下货运量为负(全口径 %.4f − 规上 %.4f = %.4f)", period, city, totalF, abF, belowF)); |
| | | if (belowT < -TOL) issues.add(String.format("货运体检:%s %s 规下周转量为负(全口径 %.4f − 规上 %.4f = %.4f)", period, city, totalT, abT, belowT)); |
| | | if (totalF == null && abF != null) { |
| | | issues.add(String.format("货运体检:%s %s 缺②全口径(规上 %.4f 在、全口径缺)→ 规下无法计算" |
| | | + "(需先导《货运量周转量表》当月档)", period, city, abF)); |
| | | } |
| | | if (totalT == null && abT != null) { |
| | | issues.add(String.format("货运体检:%s %s 缺②全口径周转量(规上 %.4f 在、全口径缺)→ 规下无法计算", |
| | | period, city, abT)); |
| | | } |
| | | // 2026-10-12:②全口径缺(未导)时不再报「规下为负」——上面已单独报「缺②全口径」, |
| | | // 若这里仍按 0 − 规上 算,会对每个市州多刷一条假阳性(值不是负、是缺),把真问题淹没。 |
| | | if (totalF != null) { |
| | | double belowF = totalF - (abF == null ? 0 : abF); |
| | | if (belowF < -TOL) issues.add(String.format("货运体检:%s %s 规下货运量为负(全口径 %.4f − 规上 %.4f = %.4f)", period, city, totalF, abF, belowF)); |
| | | } |
| | | if (totalT != null) { |
| | | double belowT = totalT - (abT == null ? 0 : abT); |
| | | if (belowT < -TOL) issues.add(String.format("货运体检:%s %s 规下周转量为负(全口径 %.4f − 规上 %.4f = %.4f)", period, city, totalT, abT, belowT)); |
| | | } |
| | | if (totalF != null && abF == null) issues.add(String.format("货运体检:%s %s 有全口径但无规上记录 → 规下等于全口径(%.4f),疑①漏报", period, city, totalF)); |
| | | if (totalF != null && abF != null && totalF < abF) issues.add(String.format("货运体检:%s %s 全口径 %.4f 小于规上 %.4f", period, city, totalF, abF)); |
| | | |