💬 同意调整路线的跟进记录改写成调整后的整条路线
原来只写变化差分(「到货地 旧 → 新」「途经站由 X 个改为 Y 个」), 中间站变化时会出现「途经站由 2 个改为 2 个」这种没有信息量的句子。 改成按站序把调整后的地址用「 → 」连起来;一个地址都没改时仍写 「同意调整路线,未修改路线」。
This commit is contained in:
+9
-28
@@ -107,6 +107,9 @@ public class ExceptionDisposalServiceImpl
|
||||
private static final String ROUTE_CHANGE_UNCHANGED = "同意调整路线,未修改路线";
|
||||
private static final String ROUTE_CHANGE_PREFIX = "同意调整路线:";
|
||||
|
||||
/** 结论里站点之间的连接符,如「A → B → C」 */
|
||||
private static final String ROUTE_STATION_SEPARATOR = " → ";
|
||||
|
||||
/** task_info_json 里存路线变更记录数组的键,与 PC 同一份结构 */
|
||||
private static final String TASK_INFO_ROUTE_CHANGE_RECORDS = "routeChangeRecords";
|
||||
|
||||
@@ -719,40 +722,18 @@ public class ExceptionDisposalServiceImpl
|
||||
|
||||
/**
|
||||
* 同一份结论既进跟进记录,也进 task_info_json 的变更记录:
|
||||
* 首末站地址变了逐条写「出发地 / 到货地 旧 → 新」,否则说明途经站变化,完全没变给固定的一句。
|
||||
* 写调整后的站点顺序(地址 → 地址 → …),不写「哪一站从什么改成什么」;
|
||||
* 一个地址都没改时给固定的一句。
|
||||
*/
|
||||
private String routeChangeContent(List<String> sourceAddresses, List<String> targetAddresses) {
|
||||
if (sourceAddresses.equals(targetAddresses)) {
|
||||
return ROUTE_CHANGE_UNCHANGED;
|
||||
}
|
||||
List<String> parts = new ArrayList<>(2);
|
||||
String sourceStart = firstOf(sourceAddresses);
|
||||
String targetStart = firstOf(targetAddresses);
|
||||
if (!Objects.equals(sourceStart, targetStart)) {
|
||||
parts.add("出发地 " + displayAddress(sourceStart) + " → " + displayAddress(targetStart));
|
||||
List<String> parts = new ArrayList<>(targetAddresses.size());
|
||||
for (String address : targetAddresses) {
|
||||
parts.add(displayAddress(address));
|
||||
}
|
||||
String sourceEnd = lastOf(sourceAddresses);
|
||||
String targetEnd = lastOf(targetAddresses);
|
||||
if (!Objects.equals(sourceEnd, targetEnd)) {
|
||||
parts.add("到货地 " + displayAddress(sourceEnd) + " → " + displayAddress(targetEnd));
|
||||
}
|
||||
if (parts.isEmpty()) {
|
||||
// 首末站未变时按途经站数量说明变化
|
||||
parts.add("途经站由 " + transitCount(sourceAddresses) + " 个改为 " + transitCount(targetAddresses) + " 个");
|
||||
}
|
||||
return ROUTE_CHANGE_PREFIX + String.join(";", parts);
|
||||
}
|
||||
|
||||
private String firstOf(List<String> addresses) {
|
||||
return addresses.isEmpty() ? "" : addresses.get(0);
|
||||
}
|
||||
|
||||
private String lastOf(List<String> addresses) {
|
||||
return addresses.isEmpty() ? "" : addresses.get(addresses.size() - 1);
|
||||
}
|
||||
|
||||
private int transitCount(List<String> addresses) {
|
||||
return Math.max(addresses.size() - 2, 0);
|
||||
return ROUTE_CHANGE_PREFIX + String.join(ROUTE_STATION_SEPARATOR, parts);
|
||||
}
|
||||
|
||||
private String displayAddress(String address) {
|
||||
|
||||
+12
-7
@@ -140,11 +140,11 @@ class ExceptionDisposalRouteAdjustTest {
|
||||
assertEquals("", latest.get("remark"));
|
||||
String changeTime = String.valueOf(latest.get("changeTime"));
|
||||
assertTrue(changeTime.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}"), changeTime);
|
||||
assertEquals("同意调整路线:途经站由 1 个改为 2 个", latest.get("content"));
|
||||
assertEquals(routeContent(START, TRANSIT_SECOND, TRANSIT, END), latest.get("content"));
|
||||
assertEquals("旧记录", ((Map<?, ?>) records.get(1)).get("content"), "已有记录排在新的后面");
|
||||
|
||||
ExceptionDisposalFollowRecord record = insertedRecord();
|
||||
assertEquals("同意调整路线:途经站由 1 个改为 2 个", record.getFollowContent());
|
||||
assertEquals(routeContent(START, TRANSIT_SECOND, TRANSIT, END), record.getFollowContent());
|
||||
assertEquals(USER_ID, record.getFollowUser());
|
||||
assertEquals("韦调度", record.getFollowUserName());
|
||||
assertNotNull(record.getFollowTime());
|
||||
@@ -314,7 +314,7 @@ class ExceptionDisposalRouteAdjustTest {
|
||||
assertEquals(NEW_END, updated.getArrivalAddress());
|
||||
Map<String, Object> taskInfo = JsonUtil.toMap(updated.getTaskInfoJson());
|
||||
Map<?, ?> latest = (Map<?, ?>) ((List<?>) taskInfo.get("routeChangeRecords")).get(0);
|
||||
assertEquals("同意调整路线:到货地 " + END + " → " + NEW_END, latest.get("content"));
|
||||
assertEquals(routeContent(START, TRANSIT, NEW_END), latest.get("content"));
|
||||
assertEquals("completed", updatedDisposal().getDisposalStatus());
|
||||
verify(loadingManageMapper, never()).selectOne(any());
|
||||
}
|
||||
@@ -355,7 +355,7 @@ class ExceptionDisposalRouteAdjustTest {
|
||||
assertEquals(legacyRouteJson, updated.getRouteJson(), "认不出的路线形状不能瞎写");
|
||||
assertEquals(START, updated.getDepartureAddress());
|
||||
assertEquals(NEW_END, updated.getArrivalAddress());
|
||||
assertEquals("同意调整路线:到货地 " + END + " → " + NEW_END, insertedRecord().getFollowContent());
|
||||
assertEquals(routeContent(START, NEW_END), insertedRecord().getFollowContent());
|
||||
assertEquals("completed", updatedDisposal().getDisposalStatus());
|
||||
}
|
||||
|
||||
@@ -400,8 +400,8 @@ class ExceptionDisposalRouteAdjustTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("目的地未变而只见中间站变化时,按途经站数量说明")
|
||||
void adjustRouteReportsTransitCountChange() {
|
||||
@DisplayName("目的地未变而只见中间站变化时,结论仍写调整后的整条路线")
|
||||
void adjustRouteWritesResultingRouteWhenOnlyTransitChanges() {
|
||||
stubPendingDisposal();
|
||||
stubLoading(loading("in_progress",
|
||||
stationRowsJson(List.of(
|
||||
@@ -416,11 +416,16 @@ class ExceptionDisposalRouteAdjustTest {
|
||||
node("transit", TRANSIT, List.of("装2")),
|
||||
node("end", END, List.of("卸2")))));
|
||||
|
||||
assertEquals("同意调整路线:途经站由 1 个改为 2 个", insertedRecord().getFollowContent());
|
||||
assertEquals(routeContent(START, TRANSIT_SECOND, TRANSIT, END), insertedRecord().getFollowContent());
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------ 夹具
|
||||
|
||||
/** 结论写调整后的站点顺序,如「同意调整路线:A → B → C」 */
|
||||
private static String routeContent(String... addresses) {
|
||||
return "同意调整路线:" + String.join(" → ", addresses);
|
||||
}
|
||||
|
||||
private void stubPendingDisposal() {
|
||||
ExceptionDisposal disposal = new ExceptionDisposal();
|
||||
disposal.setId(DISPOSAL_ID);
|
||||
|
||||
Reference in New Issue
Block a user