feat(t224): add incremental freight sync
This commit is contained in:
@@ -140,6 +140,17 @@ func (h *Handler) ImportFreight(ctx *gin.Context) {
|
||||
CSRFToken: token,
|
||||
},
|
||||
IdempotencyKey: key,
|
||||
Mode: "ORDER_NUMBER",
|
||||
}
|
||||
if location, locationErr := time.LoadLocation("Asia/Shanghai"); locationErr == nil {
|
||||
today := time.Now().In(location).Format(time.DateOnly)
|
||||
page.CreatedFrom = today
|
||||
page.CreatedTo = today
|
||||
}
|
||||
if watermark, watermarkErr := service.GetFreightWatermark(
|
||||
ctx.Request.Context(),
|
||||
); watermarkErr == nil {
|
||||
page.Watermark = watermark
|
||||
}
|
||||
if syncID := strings.TrimSpace(ctx.Query("sync")); syncID != "" {
|
||||
run, getErr := service.GetFreightSync(ctx.Request.Context(), syncID)
|
||||
@@ -157,9 +168,29 @@ func (h *Handler) CreateFreightImport(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
orderNumber := strings.TrimSpace(ctx.PostForm("order_number"))
|
||||
mode := strings.TrimSpace(ctx.PostForm("mode"))
|
||||
if mode == "" {
|
||||
mode = "ORDER_NUMBER"
|
||||
}
|
||||
createdFrom := strings.TrimSpace(ctx.PostForm("created_from"))
|
||||
createdTo := strings.TrimSpace(ctx.PostForm("created_to"))
|
||||
syncToNow := ctx.PostForm("sync_to_now") == "true"
|
||||
if syncToNow {
|
||||
createdFrom = ""
|
||||
createdTo = ""
|
||||
}
|
||||
key := strings.TrimSpace(ctx.PostForm("idempotency_key"))
|
||||
if orderNumber == "" || len([]byte(orderNumber)) > 128 ||
|
||||
!validToken(key) {
|
||||
validInput := validToken(key)
|
||||
if mode == "ORDER_NUMBER" {
|
||||
validInput = validInput && orderNumber != "" &&
|
||||
len([]byte(orderNumber)) <= 128
|
||||
} else if mode == "CREATED_RANGE" {
|
||||
validInput = validInput &&
|
||||
(syncToNow || (createdFrom != "" && createdTo != ""))
|
||||
} else {
|
||||
validInput = false
|
||||
}
|
||||
if !validInput {
|
||||
token, _ := csrfToken(ctx)
|
||||
h.render(ctx, http.StatusUnprocessableEntity, "freight-import", freightImportPage{
|
||||
Page: pageView{
|
||||
@@ -168,8 +199,11 @@ func (h *Handler) CreateFreightImport(ctx *gin.Context) {
|
||||
CSRFToken: token,
|
||||
},
|
||||
OrderNumber: orderNumber,
|
||||
Mode: mode,
|
||||
CreatedFrom: createdFrom,
|
||||
CreatedTo: createdTo,
|
||||
IdempotencyKey: key,
|
||||
Error: "请输入完整单号后重试。",
|
||||
Error: "请检查同步方式和查询条件后重试。",
|
||||
})
|
||||
return
|
||||
}
|
||||
@@ -179,7 +213,11 @@ func (h *Handler) CreateFreightImport(ctx *gin.Context) {
|
||||
CreateFreightSyncInput{
|
||||
ActorUserID: actorUserID(ctx.Request.Context()),
|
||||
IdempotencyKey: key,
|
||||
Mode: mode,
|
||||
OrderNumber: orderNumber,
|
||||
CreatedFrom: createdFrom,
|
||||
CreatedTo: createdTo,
|
||||
SyncToNow: syncToNow,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
@@ -191,6 +229,9 @@ func (h *Handler) CreateFreightImport(ctx *gin.Context) {
|
||||
CSRFToken: token,
|
||||
},
|
||||
OrderNumber: orderNumber,
|
||||
Mode: mode,
|
||||
CreatedFrom: createdFrom,
|
||||
CreatedTo: createdTo,
|
||||
IdempotencyKey: key,
|
||||
Error: "同步任务创建失败,请稍后使用相同提交标识重试。",
|
||||
})
|
||||
@@ -1056,10 +1097,14 @@ type freightPage struct {
|
||||
|
||||
type freightImportPage struct {
|
||||
Page pageView
|
||||
Mode string
|
||||
OrderNumber string
|
||||
CreatedFrom string
|
||||
CreatedTo string
|
||||
IdempotencyKey string
|
||||
Error string
|
||||
Sync *FreightSync
|
||||
Watermark *FreightWatermark
|
||||
}
|
||||
|
||||
type freightDetailPage struct {
|
||||
|
||||
Reference in New Issue
Block a user