| | |
| | | // 详情只接受测试电池身份;曲线工步身份不能作为详情列提交。 |
| | | if (!sources.containsAll(settings.sourceDetailOverrides().keySet())) throw new ServiceException("详情调整不属于所选测试电池"); |
| | | for (var override : settings.sourceDetailOverrides().values()) { |
| | | if (override == null || (override.experimentName() != null && override.experimentName().length() > 500)) throw new ServiceException("详情调整无效"); |
| | | if (override.fieldValues() != null && override.fieldValues().entrySet().stream().anyMatch(entry -> |
| | | entry.getKey() == null || !entry.getKey().matches("(?:battery|special)\\|.{1,100}") |
| | | || entry.getValue() == null || entry.getValue().length() > 500)) throw new ServiceException("详情字段名称或值无效"); |
| | | if (override == null) throw new ServiceException("详情调整无效"); |
| | | override.validate(); |
| | | } |
| | | } |
| | | for (Item item : items) if (item.stepCurves() != null) item.chargeSteps().forEach((cycle, ranges) -> ranges.forEach(step -> sources.add(sourceKey(item) + "|" + cycle + "|" + step.stepNo()))); |