fix(order): persist cleared courier tracking numbers
This commit is contained in:
@@ -64,6 +64,8 @@ public class OrderEntity extends BaseEntity {
|
||||
private Long rootOrderId;
|
||||
private Integer splitSequence;
|
||||
private String expressCompany;
|
||||
// 客户清空单号或改用其他交货方式时,必须把 NULL 写入数据库。
|
||||
@TableField(updateStrategy = FieldStrategy.ALWAYS)
|
||||
private String expressTrackingNo;
|
||||
private LocalDateTime submittedAt;
|
||||
private LocalDateTime completedAt;
|
||||
|
||||
@@ -44,6 +44,30 @@ class MerchantOrderCommandTransactionTest {
|
||||
private OrderRequests.SaveRequest draft;
|
||||
private com.baiyue.order.client.FirstlegInboundClient firstleg;
|
||||
|
||||
/** 通过真实 MyBatis 和内存数据库验证单号更新及清空,避免空值被更新策略忽略。 */
|
||||
@Test
|
||||
void courierTrackingCanBeClearedAndSwitchingPickupMethodClearsItInDatabase() {
|
||||
var fields = (com.fasterxml.jackson.databind.node.ObjectNode) json.valueToTree(draft);
|
||||
fields.remove("carrierSnapshotComplete");
|
||||
fields.put("expressTrackingNo", " SF-ORIGINAL ");
|
||||
var filled = json.convertValue(fields, OrderRequests.SaveRequest.class);
|
||||
long id = service.createDraft(11L, 7L, "operator", filled, "courier-create");
|
||||
assertThat(db.queryForObject("SELECT express_tracking_no FROM ord_order WHERE id=?", String.class, id))
|
||||
.isEqualTo("SF-ORIGINAL");
|
||||
|
||||
fields.remove("expressTrackingNo");
|
||||
var blank = json.convertValue(fields, OrderRequests.SaveRequest.class);
|
||||
service.updateDraft(11L, 7L, id, new OrderRequests.DraftUpdateRequest(0, blank), "courier-clear");
|
||||
assertThat(db.queryForObject("SELECT express_tracking_no FROM ord_order WHERE id=?", String.class, id)).isNull();
|
||||
|
||||
service.updateDraft(11L, 7L, id, new OrderRequests.DraftUpdateRequest(1, filled), "courier-restore");
|
||||
fields.put("pickupMethod", "SELF_TRUCK");
|
||||
fields.put("expressTrackingNo", "SPOOFED");
|
||||
var truck = json.convertValue(fields, OrderRequests.SaveRequest.class);
|
||||
service.updateDraft(11L, 7L, id, new OrderRequests.DraftUpdateRequest(2, truck), "courier-switch");
|
||||
assertThat(db.queryForObject("SELECT express_tracking_no FROM ord_order WHERE id=?", String.class, id)).isNull();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void prepare() throws Exception {
|
||||
JdbcDataSource source = new JdbcDataSource();
|
||||
|
||||
Reference in New Issue
Block a user