🐛 fix(打卡里程): 回显里程去掉两位小数
运单里程列是 decimal(18,2),BigDecimal 经全局 ToStringSerializer 序列化后 下发成 "200.00",而客户端按正整数校验,原样回填直接提交会被拒。 - DriverPunchNodeVO / WaybillPunchRecordItemVO 的 mileage 改 String(正整数文本) - 新增 TransportBusinessSupport.mileageText,去尾随零后再下发 - 打卡记录单测断言同步为字符串
This commit is contained in:
+5
-3
@@ -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<DriverPunchPhotoVO> photos = new ArrayList<>();
|
||||
|
||||
+5
-3
@@ -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;
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
+1
-1
@@ -442,7 +442,7 @@ public class WaybillServiceImpl extends BaseServiceImpl<WaybillMapper, Waybill>
|
||||
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);
|
||||
|
||||
+9
@@ -282,4 +282,13 @@ public final class TransportBusinessSupport {
|
||||
return mileage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 里程回显文本:去掉列上 decimal(18,2) 带来的尾随零,使 "200.00" 下发为 "200"。
|
||||
* <p>
|
||||
* 客户端按正整数校验里程,回显成两位小数会被当成非法值拒掉——不清零就等于「原样回填不能提交」。
|
||||
*/
|
||||
public static String mileageText(BigDecimal mileage) {
|
||||
return mileage == null ? null : mileage.stripTrailingZeros().toPlainString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -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()));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user