Files
goauto/server/app/goauto/purchase/quick_replace.go
T

45 lines
1.6 KiB
Go

package purchase
import (
"context"
"go-admin/app/goauto/shopeeproduct"
"gorm.io/gorm"
)
// Called inside the link transaction, after locking the SYB and Shopee rows.
// Reuse the authoritative stage calculation, without AI or task creation.
func ValidateQuickReplacement(ctx context.Context, tx *gorm.DB, id uint64) error {
s := NewService(tx)
dataset, err := s.loadBatchPreviewDataset(ctx, []uint64{id})
if err != nil {
return err
}
guard, _, err := s.readOnlyPriceGuard(ctx)
if err != nil {
return err
}
preview := s.previewFromDataset(id, dataset, guard)
qualification := aiMatchQualificationForDataset(id, dataset)
preview.AIMatchEligible = qualification.Eligible
preview.AIMatchDisabledReason = qualification.DisabledReason
stage := processStageFromDataset(id, dataset, preview)
syb := dataset.sybByID[id]
disabled := false
if syb.ShopeeProductID != nil {
shopee := dataset.shopeeByID[*syb.ShopeeProductID]
if shopee.PDDProductID != nil {
pdd := dataset.pddByID[*shopee.PDDProductID]
disabled = pdd.Status == "disabled"
if _, active := dataset.activeCollectionByPDD[pdd.ID]; active {
return &shopeeproduct.ServiceError{Code: shopeeproduct.CodeLinkConflict, Message: "商品正在采集,请结束后刷新再操作"}
}
}
}
if stage.NextAction == "open_pdd" && (stage.Stage == ProcessStagePDDPending || stage.Stage == ProcessStagePDDCollectionFail ||
(stage.Stage == ProcessStageManualAction && (disabled || preview.ReasonCode == "PDD_PRICE_MISSING"))) {
return nil
}
return &shopeeproduct.ServiceError{Code: shopeeproduct.CodeLinkConflict, Message: "处理阶段已变化,当前不能一键替换,请刷新列表"}
}