feat: 支持顺运宝批量创建采集任务 (#153)

This commit is contained in:
chengma
2026-08-11 14:59:26 +08:00
parent 2629e41211
commit b527204204
12 changed files with 341 additions and 14 deletions
+92
View File
@@ -1,9 +1,12 @@
package service
import (
"database/sql"
"errors"
"testing"
"time"
"cmautobuy/admin/model"
"cmautobuy/admin/repository"
)
@@ -116,3 +119,92 @@ func TestCreateShopeePddCollectTaskForUser_记录当前用户(t *testing.T) {
t.Fatalf("蝦皮入口任务创建人=%q err=%v", creator, err)
}
}
func TestCreateSybPddCollectTasksForUser_同一PDD商品去重(t *testing.T) {
db := newTestDB(t)
admin, _, _ := insertTaskUsers(t, db)
seedShopeeProduct(t, db, "1001", "商品一")
seedShopeeProduct(t, db, "1002", "商品二")
if _, err := AssociateShopeePdd(db, "1001", pddURLA, false); err != nil {
t.Fatal(err)
}
if _, err := AssociateShopeePdd(db, "1002", pddURLA, false); err != nil {
t.Fatal(err)
}
seedSybCollectOrder(t, db, "SYB-1", "1001")
seedSybCollectOrder(t, db, "SYB-2", "1002")
result, err := CreateSybPddCollectTasksForUser(
db, admin, []string{"SYB-1", "SYB-2", "SYB-1"}, "")
if err != nil || result.Created != 1 {
t.Fatalf("批量创建结果=%+v err=%v", result, err)
}
var taskCount int
if err := db.QueryRow(`SELECT COUNT(*) FROM tasks WHERE task_type='collect'`).Scan(&taskCount); err != nil || taskCount != 1 {
t.Fatalf("同一 PDD 商品应只建一条任务,count=%d err=%v", taskCount, err)
}
}
func TestCreateSybPddCollectTasksForUser_不可采集明细整批拒绝(t *testing.T) {
db := newTestDB(t)
admin, _, _ := insertTaskUsers(t, db)
seedShopeeProduct(t, db, "1001", "商品一")
seedShopeeProduct(t, db, "1002", "商品二")
AssociateShopeePdd(db, "1001", pddURLA, false)
AssociateShopeePdd(db, "1002", pddURLB, false)
seedSybCollectOrder(t, db, "SYB-PENDING", "1001")
seedSybCollectOrder(t, db, "SYB-COLLECTED", "1002")
if _, err := db.Exec(`UPDATE pdd_products SET collect_status='collected' WHERE goods_id='937122477375'`); err != nil {
t.Fatal(err)
}
_, err := CreateSybPddCollectTasksForUser(
db, admin, []string{"SYB-PENDING", "SYB-COLLECTED"}, "")
if !IsValidationError(err) {
t.Fatalf("不可采集明细应返回校验错误,实际 %v", err)
}
var taskCount int
db.QueryRow(`SELECT COUNT(*) FROM tasks WHERE task_type='collect'`).Scan(&taskCount)
if taskCount != 0 {
t.Fatalf("整批拒绝后不应产生部分任务,实际 %d", taskCount)
}
pending, _ := repository.GetPddProductByGoodsID(db, "737116531267")
if pending.CollectStatus != model.CollectPending {
t.Fatalf("整批拒绝后待采集商品状态被改变为 %s", pending.CollectStatus)
}
}
func TestCreateSybPddCollectTasksForUser_拒绝不可见客户端(t *testing.T) {
db := newTestDB(t)
admin, buyerA, buyerB := prepareClientAssignmentUsers(t, db)
if err := RegisterClient(db, model.Client{ClientID: "client-b", Name: "B 的机器"}, true); err != nil {
t.Fatal(err)
}
if _, _, err := AssignClient(db, admin, "client-b", buyerB.UserID,
time.Date(2026, 8, 11, 1, 0, 0, 0, time.UTC)); err != nil {
t.Fatal(err)
}
seedShopeeProduct(t, db, "1001", "商品一")
AssociateShopeePdd(db, "1001", pddURLA, false)
seedSybCollectOrder(t, db, "SYB-1", "1001")
_, err := CreateSybPddCollectTasksForUser(db, buyerA, []string{"SYB-1"}, "client-b")
if !IsValidationError(err) {
t.Fatalf("不可见客户端应返回校验错误,实际 %v", err)
}
var taskCount int
db.QueryRow(`SELECT COUNT(*) FROM tasks WHERE task_type='collect'`).Scan(&taskCount)
if taskCount != 0 {
t.Fatalf("客户端权限校验失败后不应建任务,实际 %d", taskCount)
}
}
func seedSybCollectOrder(t *testing.T, db *sql.DB, sybID, shopeeGoodsID string) {
t.Helper()
if _, err := repository.UpsertSybOrder(db, model.SybOrder{
SybID: sybID, OrderNo: "ORDER-" + sybID, Title: "测试商品", ProductSpec: "黑色,M",
ShopeeGoodsID: shopeeGoodsID, Quantity: 1, SybData: `{}`,
}); err != nil {
t.Fatalf("插入顺运宝测试明细失败: %v", err)
}
}