fix: 使用 Excel 生成日期导入档口入库码 (#237)
This commit is contained in:
@@ -31,14 +31,14 @@ func TestParseInnerCodeWorkbook_表头前置行与重复业务组(t *testing.T)
|
||||
}
|
||||
rows := [][]string{
|
||||
{"线下档口标签"},
|
||||
{"标签打印序号", "内部档口入库码", "Shopee订单编号", "清洗后规格", "档口名称", "档口货号", "店铺名称"},
|
||||
{"1", "DK001", "ORDER-1", "A-027 黑色,M碼 建議45-55公斤", "A档", "027", "shop-a"},
|
||||
{"2", "DK001", "ORDER-1", "A-027 黑色,M碼 建議45-55公斤", "A档", "027", "shop-a"},
|
||||
{"3", "DK002", "ORDER-2", "杏色,XL", "B档", "102", "shop-b"},
|
||||
{"标签打印序号", "内部档口入库码", "Shopee订单编号", "清洗后规格", "档口名称", "档口货号", "店铺名称", "生成日期"},
|
||||
{"1", "DK001", "ORDER-1", "A-027 黑色,M碼 建議45-55公斤", "A档", "027", "shop-a", "2026-08-15"},
|
||||
{"2", "DK001", "ORDER-1", "A-027 黑色,M碼 建議45-55公斤", "A档", "027", "shop-a", "2026-08-15"},
|
||||
{"3", "DK002", "ORDER-2", "杏色,XL", "B档", "102", "shop-b", "2026-08-15"},
|
||||
}
|
||||
setInnerCodeWorkbookRows(t, book, rows)
|
||||
|
||||
result, imported, err := parseInnerCodeWorkbook(book, "2026-08-15", "user-1")
|
||||
result, imported, err := parseInnerCodeWorkbook(book, "labels.xlsx", "user-1")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -46,6 +46,9 @@ func TestParseInnerCodeWorkbook_表头前置行与重复业务组(t *testing.T)
|
||||
t.Fatalf("统计不正确: result=%+v rows=%d", result, len(imported))
|
||||
}
|
||||
first := imported[0]
|
||||
if result.BusinessDate != "2026-08-15" || first.BusinessDate != "2026-08-15" {
|
||||
t.Fatalf("生成日期解析不正确: result=%+v row=%+v", result, first)
|
||||
}
|
||||
if first.SpecKey != "黑色,M" || first.Stall != "A档#027" || first.SourceDuplicateCount != 2 {
|
||||
t.Fatalf("首行业务字段不正确: %+v", first)
|
||||
}
|
||||
@@ -61,11 +64,11 @@ func TestParseInnerCodeWorkbook_同日入库码指向不同业务键时报错(t
|
||||
t.Fatal(err)
|
||||
}
|
||||
setInnerCodeWorkbookRows(t, book, [][]string{
|
||||
{"内部档口入库码", "Shopee订单编号", "清洗后规格", "档口及货号"},
|
||||
{"DK001", "ORDER-1", "黑色,M", "A#1"},
|
||||
{"DK001", "ORDER-2", "白色,L", "B#2"},
|
||||
{"内部档口入库码", "Shopee订单编号", "清洗后规格", "档口及货号", "生成日期"},
|
||||
{"DK001", "ORDER-1", "黑色,M", "A#1", "2026-08-15"},
|
||||
{"DK001", "ORDER-2", "白色,L", "B#2", "2026-08-15"},
|
||||
})
|
||||
_, _, err := parseInnerCodeWorkbook(book, "2026-08-15", "user-1")
|
||||
_, _, err := parseInnerCodeWorkbook(book, "labels.xlsx", "user-1")
|
||||
if err == nil || !strings.Contains(err.Error(), "对应多组") {
|
||||
t.Fatalf("期望同日入库码冲突错误,实际 %v", err)
|
||||
}
|
||||
@@ -78,11 +81,11 @@ func TestParseInnerCodeWorkbook_业务键相同但入库码不同时报错(t *te
|
||||
t.Fatal(err)
|
||||
}
|
||||
setInnerCodeWorkbookRows(t, book, [][]string{
|
||||
{"内部档口入库码", "Shopee订单编号", "清洗后规格", "档口及货号"},
|
||||
{"DK001", "ORDER-1", "黑色,M", "A#1"},
|
||||
{"DK002", "ORDER-1", "黑色,M", "A#1"},
|
||||
{"内部档口入库码", "Shopee订单编号", "清洗后规格", "档口及货号", "生成日期"},
|
||||
{"DK001", "ORDER-1", "黑色,M", "A#1", "2026-08-15"},
|
||||
{"DK002", "ORDER-1", "黑色,M", "A#1", "2026-08-15"},
|
||||
})
|
||||
_, _, err := parseInnerCodeWorkbook(book, "2026-08-15", "user-1")
|
||||
_, _, err := parseInnerCodeWorkbook(book, "labels.xlsx", "user-1")
|
||||
if err == nil || !strings.Contains(err.Error(), "业务键相同") {
|
||||
t.Fatalf("期望业务键冲突错误,实际 %v", err)
|
||||
}
|
||||
@@ -116,8 +119,8 @@ func TestParseInnerCodeWorkbook_脱敏文件可重开(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
setInnerCodeWorkbookRows(t, book, [][]string{
|
||||
{"内部档口入库码", "Shopee订单编号", "原始产品规格(源Excel D列,原样直拷)", "档口及货号"},
|
||||
{"DK-TEST-1", "ORDER-TEST-1", "蓝色,L", "T#001"},
|
||||
{"内部档口入库码", "Shopee订单编号", "原始产品规格(源Excel D列,原样直拷)", "档口及货号", "生成日期"},
|
||||
{"DK-TEST-1", "ORDER-TEST-1", "蓝色,L", "T#001", "08-15"},
|
||||
})
|
||||
if err := book.SaveAs(path); err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -128,12 +131,70 @@ func TestParseInnerCodeWorkbook_脱敏文件可重开(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer reopened.Close()
|
||||
_, imported, err := parseInnerCodeWorkbook(reopened, "2026-08-15", "user-1")
|
||||
_, imported, err := parseInnerCodeWorkbook(reopened, "labels_20260815_V3.3.xlsx", "user-1")
|
||||
if err != nil || len(imported) != 1 || imported[0].SpecKey != "蓝色,L" {
|
||||
t.Fatalf("重开解析失败 rows=%+v err=%v", imported, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseInnerCodeWorkbook_短日期与文件名不一致时报错(t *testing.T) {
|
||||
book := newInnerCodeDateTestBook(t, "08-14")
|
||||
defer book.Close()
|
||||
_, _, err := parseInnerCodeWorkbook(book, "labels_20260815_V3.3.xlsx", "user-1")
|
||||
if err == nil || !strings.Contains(err.Error(), "与文件名日期") {
|
||||
t.Fatalf("期望文件名日期冲突,实际 %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseInnerCodeWorkbook_混合生成日期整批失败(t *testing.T) {
|
||||
book := excelize.NewFile()
|
||||
defaultSheet := book.GetSheetList()[0]
|
||||
if err := book.SetSheetName(defaultSheet, innerCodeSheetName); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
setInnerCodeWorkbookRows(t, book, [][]string{
|
||||
{"内部档口入库码", "Shopee订单编号", "清洗后规格", "档口及货号", "生成日期"},
|
||||
{"DK001", "ORDER-1", "黑色,M", "A#1", "2026-08-14"},
|
||||
{"DK002", "ORDER-2", "白色,L", "B#2", "2026-08-15"},
|
||||
})
|
||||
defer book.Close()
|
||||
_, _, err := parseInnerCodeWorkbook(book, "labels.xlsx", "user-1")
|
||||
if err == nil || !strings.Contains(err.Error(), "多个生成日期") {
|
||||
t.Fatalf("期望混合日期错误,实际 %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseInnerCodeWorkbook_缺少生成日期表头时报错(t *testing.T) {
|
||||
book := excelize.NewFile()
|
||||
defaultSheet := book.GetSheetList()[0]
|
||||
if err := book.SetSheetName(defaultSheet, innerCodeSheetName); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
setInnerCodeWorkbookRows(t, book, [][]string{
|
||||
{"内部档口入库码", "Shopee订单编号", "清洗后规格", "档口及货号"},
|
||||
{"DK001", "ORDER-1", "黑色,M", "A#1"},
|
||||
})
|
||||
defer book.Close()
|
||||
_, _, err := parseInnerCodeWorkbook(book, "labels.xlsx", "user-1")
|
||||
if err == nil || !strings.Contains(err.Error(), "生成日期") {
|
||||
t.Fatalf("期望缺少生成日期表头错误,实际 %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func newInnerCodeDateTestBook(t *testing.T, businessDate string) *excelize.File {
|
||||
t.Helper()
|
||||
book := excelize.NewFile()
|
||||
defaultSheet := book.GetSheetList()[0]
|
||||
if err := book.SetSheetName(defaultSheet, innerCodeSheetName); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
setInnerCodeWorkbookRows(t, book, [][]string{
|
||||
{"内部档口入库码", "Shopee订单编号", "清洗后规格", "档口及货号", "生成日期"},
|
||||
{"DK001", "ORDER-1", "黑色,M", "A#1", businessDate},
|
||||
})
|
||||
return book
|
||||
}
|
||||
|
||||
func setInnerCodeWorkbookRows(t *testing.T, book *excelize.File, rows [][]string) {
|
||||
t.Helper()
|
||||
for rowIndex, row := range rows {
|
||||
|
||||
Reference in New Issue
Block a user