From aed295c8c185850516731641030ee1dbee5c792f Mon Sep 17 00:00:00 2001 From: QiuSW <105186638@qq.com> Date: Sat, 12 Sep 2026 11:36:43 +0800 Subject: [PATCH] fix(syb): reduce parse status to success or failed (#272) --- server/app/goauto/models/schema.go | 2 +- server/app/goauto/sybimport/apply.go | 3 +++ server/app/goauto/sybimport/reparse.go | 3 +++ server/app/goauto/sybimport/role_repair.go | 3 +++ .../1789200000000_syb_parse_status_binary.go | 27 +++++++++++++++++++ web/src/views/goauto/syb-products/index.vue | 8 +++--- 6 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 server/cmd/migrate/migration/version-local/1789200000000_syb_parse_status_binary.go diff --git a/server/app/goauto/models/schema.go b/server/app/goauto/models/schema.go index 203ea5a..58671ff 100644 --- a/server/app/goauto/models/schema.go +++ b/server/app/goauto/models/schema.go @@ -455,7 +455,7 @@ func (product *ShopeeProduct) BeforeCreate(_ *gorm.DB) error { // Parse status for a SYBProduct's productSpec extraction. See sybimport.Parse. const ( SYBParseStatusSuccess = "success" - SYBParseStatusUncertain = "uncertain" + SYBParseStatusUncertain = "uncertain" // legacy input only; persistence normalizes to failed SYBParseStatusFailed = "failed" ) diff --git a/server/app/goauto/sybimport/apply.go b/server/app/goauto/sybimport/apply.go index 8e18a2b..b4b021f 100644 --- a/server/app/goauto/sybimport/apply.go +++ b/server/app/goauto/sybimport/apply.go @@ -84,6 +84,9 @@ func ApplyDetail(ctx context.Context, db *gorm.DB, order OrderInput, detail Deta } parsed := Parse(detail.ProductSpec) + if parsed.Status == models.SYBParseStatusUncertain { + parsed.Status = models.SYBParseStatusFailed + } rawJSON, err := normalizeRaw(detail.Raw) if err != nil { return ApplyResult{}, err diff --git a/server/app/goauto/sybimport/reparse.go b/server/app/goauto/sybimport/reparse.go index 195056d..efdf1d0 100644 --- a/server/app/goauto/sybimport/reparse.go +++ b/server/app/goauto/sybimport/reparse.go @@ -77,6 +77,9 @@ func Reparse(ctx context.Context, db *gorm.DB, sybProductID uint64, force bool) return fmt.Errorf("syb product %d: stored raw json is not decodable: %w", record.ID, err) } parsed := Parse(raw.ProductSpec) + if parsed.Status == models.SYBParseStatusUncertain { + parsed.Status = models.SYBParseStatusFailed + } outcome.NewStatus = parsed.Status if parsed.Color == record.TargetColor && parsed.Size == record.TargetSize && parsed.Status == record.ParseStatus { diff --git a/server/app/goauto/sybimport/role_repair.go b/server/app/goauto/sybimport/role_repair.go index eed48f7..0ce0ca0 100644 --- a/server/app/goauto/sybimport/role_repair.go +++ b/server/app/goauto/sybimport/role_repair.go @@ -42,6 +42,9 @@ func RepairReversedSpecRoles(ctx context.Context, db *gorm.DB) (SpecRoleRepairRe continue } parsed := Parse(raw.ProductSpec) + if parsed.Status == models.SYBParseStatusUncertain { + parsed.Status = models.SYBParseStatusFailed + } if parsed.Status == models.SYBParseStatusFailed || parsed.Color == record.TargetColor || parsed.Color != record.TargetSize || parsed.Size != record.TargetColor { continue diff --git a/server/cmd/migrate/migration/version-local/1789200000000_syb_parse_status_binary.go b/server/cmd/migrate/migration/version-local/1789200000000_syb_parse_status_binary.go new file mode 100644 index 0000000..b09cfd4 --- /dev/null +++ b/server/cmd/migrate/migration/version-local/1789200000000_syb_parse_status_binary.go @@ -0,0 +1,27 @@ +package version_local + +import ( + "go-admin/app/goauto/models" + "go-admin/cmd/migrate/migration" + common "go-admin/common/models" + "gorm.io/gorm" +) + +func init() { migration.Migrate.SetVersion("1789200000000", migrateSYBParseStatusBinary) } + +// migrateSYBParseStatusBinary folds legacy uncertain rows into failed and +// narrows the check constraint to the two supported states (#272). +func migrateSYBParseStatusBinary(db *gorm.DB, version string) error { + if err := db.Model(&models.SYBProduct{}).Where("parse_status = ?", "uncertain").Update("parse_status", models.SYBParseStatusFailed).Error; err != nil { + return err + } + if db.Dialector.Name() == "mysql" { + if err := db.Exec("ALTER TABLE syb_product DROP CHECK ck_syb_product_parse_status").Error; err != nil { + return err + } + if err := db.Exec("ALTER TABLE syb_product ADD CONSTRAINT ck_syb_product_parse_status CHECK (parse_status IN ('success','failed'))").Error; err != nil { + return err + } + } + return db.Create(&common.Migration{Version: version}).Error +} diff --git a/web/src/views/goauto/syb-products/index.vue b/web/src/views/goauto/syb-products/index.vue index 70608c6..7dde69f 100644 --- a/web/src/views/goauto/syb-products/index.vue +++ b/web/src/views/goauto/syb-products/index.vue @@ -10,7 +10,7 @@ - + 查询重置AI 匹配{{ aiMatchCandidates.length }}创建采购{{ purchaseCandidates.length }}创建采集{{ collectionCandidates.length }} @@ -160,8 +160,8 @@