|
@@ -62,10 +62,7 @@ import com.sckw.transport.common.config.UrlConfigProperties;
|
|
|
import com.sckw.transport.dao.*;
|
|
import com.sckw.transport.dao.*;
|
|
|
import com.sckw.transport.model.*;
|
|
import com.sckw.transport.model.*;
|
|
|
import com.sckw.transport.model.dto.*;
|
|
import com.sckw.transport.model.dto.*;
|
|
|
-import com.sckw.transport.model.enuma.ApproveStatusEnum;
|
|
|
|
|
-import com.sckw.transport.model.enuma.CarWaybillDetailEnum;
|
|
|
|
|
-import com.sckw.transport.model.enuma.CarWaybillNdexTopEnum;
|
|
|
|
|
-import com.sckw.transport.model.enuma.CarWaybillTableTopEnum;
|
|
|
|
|
|
|
+import com.sckw.transport.model.enuma.*;
|
|
|
import com.sckw.transport.model.param.WaybillOrderNodeReq;
|
|
import com.sckw.transport.model.param.WaybillOrderNodeReq;
|
|
|
import com.sckw.transport.model.param.WaybillOrderReq;
|
|
import com.sckw.transport.model.param.WaybillOrderReq;
|
|
|
import com.sckw.transport.model.param.WaybillOrderResp;
|
|
import com.sckw.transport.model.param.WaybillOrderResp;
|
|
@@ -5458,7 +5455,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private List<Integer> getWaybillOrderStatus() {
|
|
private List<Integer> getWaybillOrderStatus() {
|
|
|
- return Arrays.asList(CarWaybillV1Enum.WEIGHT_TRAFFIC.getCode(), CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode(),
|
|
|
|
|
|
|
+ return Arrays.asList( CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode(),
|
|
|
CarWaybillV1Enum.WAIT_LEAVE.getCode(), CarWaybillV1Enum.UNLOADING.getCode(),
|
|
CarWaybillV1Enum.WAIT_LEAVE.getCode(), CarWaybillV1Enum.UNLOADING.getCode(),
|
|
|
CarWaybillV1Enum.WAIT_RELEASE.getCode(), CarWaybillV1Enum.REPLENISHING.getCode(),
|
|
CarWaybillV1Enum.WAIT_RELEASE.getCode(), CarWaybillV1Enum.REPLENISHING.getCode(),
|
|
|
CarWaybillV1Enum.REPLENISH_FINISH.getCode(), CarWaybillV1Enum.RELEASED_NOT_EXITED.getCode());
|
|
CarWaybillV1Enum.REPLENISH_FINISH.getCode(), CarWaybillV1Enum.RELEASED_NOT_EXITED.getCode());
|
|
@@ -5496,8 +5493,13 @@ public class KwtWaybillOrderV1Service {
|
|
|
//获取时间线
|
|
//获取时间线
|
|
|
List<WaybillOrderNodeVo.Timeline> voList = getTimelines(nodes);
|
|
List<WaybillOrderNodeVo.Timeline> voList = getTimelines(nodes);
|
|
|
waybillOrderNodeVo.setTimelines(voList);
|
|
waybillOrderNodeVo.setTimelines(voList);
|
|
|
- // 获取时间节点
|
|
|
|
|
|
|
+ // 获取时间节点,并按前端五步序号排序(映射写入 orderStatus / orderStatusName)
|
|
|
List<WaybillOrderNodeVo.WaybillOrderNode> nodeList = getWaybillOrderNodes(voList);
|
|
List<WaybillOrderNodeVo.WaybillOrderNode> nodeList = getWaybillOrderNodes(voList);
|
|
|
|
|
+ log.info("查询运单节点轨迹,时间节点:{}", JSON.toJSONString(nodeList));
|
|
|
|
|
+ // 将原始运单状态映射为前端五步时间轴阶段(1-5),并更新节点的状态码和名称
|
|
|
|
|
+ applyTimelinePhaseFromWaybillStatus(nodeList);
|
|
|
|
|
+ // 对映射后的节点列表按阶段去重,保留每个阶段最早的一条记录
|
|
|
|
|
+ nodeList = dedupeWaybillOrderNodesByStatus(nodeList);
|
|
|
nodeList = nodeList.stream()
|
|
nodeList = nodeList.stream()
|
|
|
.sorted(Comparator.comparing(WaybillOrderNodeVo.WaybillOrderNode::getOrderStatus))
|
|
.sorted(Comparator.comparing(WaybillOrderNodeVo.WaybillOrderNode::getOrderStatus))
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
@@ -5544,7 +5546,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
@NotNull
|
|
@NotNull
|
|
|
private static List<WaybillOrderNodeVo.WaybillOrderNode> getWaybillOrderNodes(List<WaybillOrderNodeVo.Timeline> voList) {
|
|
private static List<WaybillOrderNodeVo.WaybillOrderNode> getWaybillOrderNodes(List<WaybillOrderNodeVo.Timeline> voList) {
|
|
|
Map<Integer, List<WaybillOrderNodeVo.Timeline>> statusAndTimelineMap = voList.stream()
|
|
Map<Integer, List<WaybillOrderNodeVo.Timeline>> statusAndTimelineMap = voList.stream()
|
|
|
- .filter(t ->!Arrays.asList(CarWaybillV1Enum.WEIGHT_TRAFFIC.getCode(),CarWaybillV1Enum.COMPLETED.getCode(),CarWaybillV1Enum.CANCELLED.getCode(), CarWaybillV1Enum.REVIEW_REJECTION.getCode()).contains(t.getOrderStatus()))
|
|
|
|
|
|
|
+ .filter(t ->!Arrays.asList(CarWaybillV1Enum.COMPLETED.getCode(),CarWaybillV1Enum.CANCELLED.getCode(), CarWaybillV1Enum.REVIEW_REJECTION.getCode()).contains(t.getOrderStatus()))
|
|
|
.sorted(Comparator.comparing(WaybillOrderNodeVo.Timeline::getCreateTime))
|
|
.sorted(Comparator.comparing(WaybillOrderNodeVo.Timeline::getCreateTime))
|
|
|
.collect(Collectors.groupingBy(WaybillOrderNodeVo.Timeline::getOrderStatus));
|
|
.collect(Collectors.groupingBy(WaybillOrderNodeVo.Timeline::getOrderStatus));
|
|
|
List<WaybillOrderNodeVo.WaybillOrderNode> nodeList = Lists.newArrayList();
|
|
List<WaybillOrderNodeVo.WaybillOrderNode> nodeList = Lists.newArrayList();
|
|
@@ -5562,6 +5564,54 @@ public class KwtWaybillOrderV1Service {
|
|
|
return nodeList;
|
|
return nodeList;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 将原始运单状态映射到前端五步时间轴,写入既有字段 {@code orderStatus}(1~5 阶段序号)、{@code orderStatusName}(阶段文案);
|
|
|
|
|
+ * 无法映射的节点保留 {@link #getWaybillOrderNodes} 中已赋值的原始码与描述。
|
|
|
|
|
+ */
|
|
|
|
|
+ private static void applyTimelinePhaseFromWaybillStatus(List<WaybillOrderNodeVo.WaybillOrderNode> nodeList) {
|
|
|
|
|
+ if (CollectionUtils.isEmpty(nodeList)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ for (WaybillOrderNodeVo.WaybillOrderNode node : nodeList) {
|
|
|
|
|
+ WaybillTimelinePhaseEnum.resolve(node.getOrderStatus()).ifPresent(phase -> {
|
|
|
|
|
+ node.setOrderStatus(phase.getPhaseOrder());
|
|
|
|
|
+ node.setOrderStatusName(phase.getPhaseLabel());
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 映射后多个原始状态可能合并为同一阶段序号(1~5),会出现重复 {@code orderStatus};
|
|
|
|
|
+ * 按状态码去重,同一时间保留该阶段下 {@code createTime} 最早(第一次出现)的一条节点。
|
|
|
|
|
+ */
|
|
|
|
|
+ private static List<WaybillOrderNodeVo.WaybillOrderNode> dedupeWaybillOrderNodesByStatus(
|
|
|
|
|
+ List<WaybillOrderNodeVo.WaybillOrderNode> nodeList) {
|
|
|
|
|
+ if (CollectionUtils.isEmpty(nodeList)) {
|
|
|
|
|
+ return nodeList;
|
|
|
|
|
+ }
|
|
|
|
|
+ return nodeList.stream()
|
|
|
|
|
+ .filter(node -> node.getOrderStatus() != null)
|
|
|
|
|
+ .collect(Collectors.toMap(
|
|
|
|
|
+ WaybillOrderNodeVo.WaybillOrderNode::getOrderStatus,
|
|
|
|
|
+ Function.identity(),
|
|
|
|
|
+ (a, b) -> {
|
|
|
|
|
+ Date ta = parseWaybillNodeCreateTime(a.getCreateTime());
|
|
|
|
|
+ Date tb = parseWaybillNodeCreateTime(b.getCreateTime());
|
|
|
|
|
+ return !ta.after(tb) ? a : b;
|
|
|
|
|
+ }))
|
|
|
|
|
+ .values()
|
|
|
|
|
+ .stream()
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static Date parseWaybillNodeCreateTime(String createTime) {
|
|
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isBlank(createTime)) {
|
|
|
|
|
+ return new Date(0L);
|
|
|
|
|
+ }
|
|
|
|
|
+ Date d = DateUtils.formatDate(createTime);
|
|
|
|
|
+ return d != null ? d : new Date(0L);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 构建状态描述文本
|
|
* 构建状态描述文本
|
|
|
* 格式:车辆【川A5478C】司机【张三】装载货物【铁矿石】【参运】【28.70吨】
|
|
* 格式:车辆【川A5478C】司机【张三】装载货物【铁矿石】【参运】【28.70吨】
|