diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverPunchNodeVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverPunchNodeVO.java index 7533ce2e..5674f7e7 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverPunchNodeVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/DriverPunchNodeVO.java @@ -11,7 +11,6 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -103,8 +102,11 @@ public class DriverPunchNodeVO implements Serializable { @Schema(description = "本节点是否需要采集里程(末位可打卡节点且计费规则含里程)") private Boolean needMileage; - @Schema(description = "运单里程(公里),needMileage 为真时用于回显") - private BigDecimal mileage; + /** + * 里程只有正整数口径(ADR-0023 决策 6),下发的是去尾随零的文本,如 "200" 而非 "200.00"。 + */ + @Schema(description = "运单里程(公里,正整数文本),needMileage 为真时用于回显") + private String mileage; @Schema(description = "已上传凭证图(已打卡回显)") private List photos = new ArrayList<>(); diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillPunchRecordItemVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillPunchRecordItemVO.java index 62f089ba..4d003d5f 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillPunchRecordItemVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/WaybillPunchRecordItemVO.java @@ -9,7 +9,6 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -62,8 +61,11 @@ public class WaybillPunchRecordItemVO implements Serializable { @Schema(description = "本条是否需要采集里程(末位打卡节点且计费规则含里程)") private Boolean needMileage; - @Schema(description = "运单里程(公里),needMileage 为真时用于回显") - private BigDecimal mileage; + /** + * 里程只有正整数口径(ADR-0023 决策 6),下发的是去尾随零的文本,如 "200" 而非 "200.00"。 + */ + @Schema(description = "运单里程(公里,正整数文本),needMileage 为真时用于回显") + private String mileage; @Schema(description = "里程是否已冻结(运单已生成结算单,只能看不能改)") private Boolean mileageLocked; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java index 25b6bd4a..22bab55a 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/DriverWaybillServiceImpl.java @@ -1649,7 +1649,7 @@ public class DriverWaybillServiceImpl implements IDriverWaybillService { // 里程同样只在末位卡采集:末位判定与上面同一个变量,避免两处各算一次走偏。 if (lastPunchNode && lastNodeNeedsMileage) { vo.setNeedMileage(true); - vo.setMileage(waybill.getMileage()); + vo.setMileage(TransportBusinessSupport.mileageText(waybill.getMileage())); } if (done) { if (punched.getPunchTime() != null) { diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java index 45a9ffa8..98aff41c 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java @@ -442,7 +442,7 @@ public class WaybillServiceImpl extends BaseServiceImpl item.setType(isTransit ? "enroute" : "node"); if (lastNodeNeedsMileage && !isTransit && lastPunchKey.equals(nodeCode)) { item.setNeedMileage(true); - item.setMileage(waybill.getMileage()); + item.setMileage(TransportBusinessSupport.mileageText(waybill.getMileage())); item.setMileageLocked(punchMileageLocked); } item.setExceptionFlag(false); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/TransportBusinessSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/TransportBusinessSupport.java index 5f1e8efd..1a17390d 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/TransportBusinessSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/TransportBusinessSupport.java @@ -282,4 +282,13 @@ public final class TransportBusinessSupport { return mileage; } + /** + * 里程回显文本:去掉列上 decimal(18,2) 带来的尾随零,使 "200.00" 下发为 "200"。 + *

+ * 客户端按正整数校验里程,回显成两位小数会被当成非法值拒掉——不清零就等于「原样回填不能提交」。 + */ + public static String mileageText(BigDecimal mileage) { + return mileage == null ? null : mileage.stripTrailingZeros().toPlainString(); + } + } diff --git a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/WaybillPunchRecordListTest.java b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/WaybillPunchRecordListTest.java index d9e7e76b..baef2cae 100644 --- a/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/WaybillPunchRecordListTest.java +++ b/blade-service/blade-transport/src/test/java/org/springblade/transport/service/impl/WaybillPunchRecordListTest.java @@ -211,7 +211,7 @@ class WaybillPunchRecordListTest { // 接单不参与司机打卡序列,末位是装货 assertFalse(Boolean.TRUE.equals(accept.getNeedMileage())); assertTrue(Boolean.TRUE.equals(load.getNeedMileage())); - assertEquals(0, new BigDecimal("128").compareTo(load.getMileage())); + assertEquals("128", load.getMileage()); assertFalse(Boolean.TRUE.equals(load.getMileageLocked())); }