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 Long rootOrderId;
|
||||||
private Integer splitSequence;
|
private Integer splitSequence;
|
||||||
private String expressCompany;
|
private String expressCompany;
|
||||||
|
// 客户清空单号或改用其他交货方式时,必须把 NULL 写入数据库。
|
||||||
|
@TableField(updateStrategy = FieldStrategy.ALWAYS)
|
||||||
private String expressTrackingNo;
|
private String expressTrackingNo;
|
||||||
private LocalDateTime submittedAt;
|
private LocalDateTime submittedAt;
|
||||||
private LocalDateTime completedAt;
|
private LocalDateTime completedAt;
|
||||||
|
|||||||
@@ -44,6 +44,30 @@ class MerchantOrderCommandTransactionTest {
|
|||||||
private OrderRequests.SaveRequest draft;
|
private OrderRequests.SaveRequest draft;
|
||||||
private com.baiyue.order.client.FirstlegInboundClient firstleg;
|
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
|
@BeforeEach
|
||||||
void prepare() throws Exception {
|
void prepare() throws Exception {
|
||||||
JdbcDataSource source = new JdbcDataSource();
|
JdbcDataSource source = new JdbcDataSource();
|
||||||
|
|||||||
Reference in New Issue
Block a user