🐛 修车辆重新认证长期有效字段回显,有效期不再要求起期
- 卡片接口不再把「长期」当日期下发,也不在长期有效时下发上一版证件残留的止期: 两者都会被「重新认证」表单原样回填再原样提交,前者进日期框后按 LocalDate 反序列化直接报错, 后者会让一辆长期有效的车带着一个早已作废的止期一路写回车辆行。 - 车辆有效期校验收敛为「止期必填、起期可空」,和管理端车辆表单同一口径: 起期只在两端都有值时才比较先后。司机端表单本来也不采集起期。 - 补 6 个测试:3 个盯卡片回显(含长期有效 + 残留止期、无止期两种), 3 个盯有效期校验(起期可空、止期必填、长期有效时止期可空)。
This commit is contained in:
+14
-7
@@ -155,20 +155,27 @@ public class DriverAppServiceImpl implements IDriverAppService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期字段的展示值:长期有效显示「长期」,没填显示空串,其余显示日期
|
||||
* 日期字段的下发值:只下发 {@code yyyy-MM-dd} 或空串,**从不下发「长期」这类文字**
|
||||
* <p>
|
||||
* 卡片是「重新认证」表单的回填来源,空值必须是空串而不是「null」这类字符串,
|
||||
* 否则用户会在日期框里看到一个字面量 null。
|
||||
* 卡片是「重新认证」表单的回填来源,值会直接进日期框,所以两条约束必须守住:
|
||||
* <ul>
|
||||
* <li>长期有效时下发**空串**:长期与否由同名字段 {@code xxxLongTerm} 表达,
|
||||
* 界面上显示「长期」是前端的事。把「长期」当日期下发,用户关掉长期有效开关后
|
||||
* 日期框里会留着一个字面量「长期」,提交时后端按 {@code LocalDate} 反序列化直接报错。</li>
|
||||
* <li>长期有效时**不下发止期**:止期在「长期」语义下已作废(管理端勾长期有效时也会清掉它),
|
||||
* 下发旧值会被表单原样回传、审核通过后又写回车辆行,形成「长期有效 + 一个过期止期」
|
||||
* 的脏数据——车辆行上一次长期有效的提交正是这样留下 2040-08-14 的。</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param date 日期
|
||||
* @param longTerm 长期有效标志:1 表示长期
|
||||
* @return 展示文本
|
||||
* @return {@code yyyy-MM-dd} 或空串
|
||||
*/
|
||||
private String dateText(LocalDate date, Integer longTerm) {
|
||||
if (date != null) {
|
||||
return date.toString();
|
||||
if (Integer.valueOf(1).equals(longTerm)) {
|
||||
return "";
|
||||
}
|
||||
return Integer.valueOf(1).equals(longTerm) ? "长期" : "";
|
||||
return date == null ? "" : date.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+10
-6
@@ -161,23 +161,27 @@ public class DriverCertServiceImpl implements IDriverCertService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 有效期校验:未勾「长期有效」时起止必填,且止不得早于起
|
||||
* 有效期校验:未勾「长期有效」时**止期**必填;勾了长期有效则止期也不要求
|
||||
* <p>
|
||||
* 起期不再是必填:司机端表单不采集它(管理端车辆表单同样只填止期),
|
||||
* 存量车辆档案里起期列全是空的,强制必填会让每一次重新认证都卡在提交前。
|
||||
* 起止先后只在**两端都有值**时才比较——只有止期时没有可比的对象。
|
||||
*
|
||||
* @param start 有效期起
|
||||
* @param start 有效期起,可为空
|
||||
* @param end 有效期止
|
||||
* @param longTerm 长期有效标志:1 表示长期
|
||||
* @param emptyText 缺值提示
|
||||
* @param rangeText 区间颠倒提示
|
||||
* @param emptyText 缺止期时的提示
|
||||
* @param rangeText 区间颠倒时的提示
|
||||
*/
|
||||
private void requireDateRange(LocalDate start, LocalDate end, Integer longTerm,
|
||||
String emptyText, String rangeText) {
|
||||
if (Integer.valueOf(1).equals(longTerm)) {
|
||||
return;
|
||||
}
|
||||
if (start == null || end == null) {
|
||||
if (end == null) {
|
||||
throw new ServiceException(emptyText);
|
||||
}
|
||||
if (end.isBefore(start)) {
|
||||
if (start != null && end.isBefore(start)) {
|
||||
throw new ServiceException(rangeText);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user