feat: 增加商品目录导入记录 (#134)
This commit is contained in:
@@ -64,6 +64,71 @@ func GetCatalogImportRun(q Execer, source, batchID string) (model.CatalogImportR
|
||||
return run, nil
|
||||
}
|
||||
|
||||
// ListCatalogImportRuns 在数据库中按来源、状态筛选并倒序分页。
|
||||
func ListCatalogImportRuns(q Execer, source string, status model.CatalogImportStatus, limit, offset int) ([]model.CatalogImportRun, int, error) {
|
||||
where := " WHERE 1=1"
|
||||
args := make([]any, 0, 4)
|
||||
if source != "" {
|
||||
where += " AND source=?"
|
||||
args = append(args, source)
|
||||
}
|
||||
if status != "" {
|
||||
where += " AND status=?"
|
||||
args = append(args, status)
|
||||
}
|
||||
var total int
|
||||
if err := q.QueryRow(`SELECT COUNT(*) FROM catalog_import_runs`+where, args...).Scan(&total); err != nil {
|
||||
return nil, 0, fmt.Errorf("统计商品目录批次失败: %w", err)
|
||||
}
|
||||
listArgs := append(append([]any{}, args...), limit, offset)
|
||||
rows, err := q.Query(`SELECT source,batch_id FROM catalog_import_runs`+where+` ORDER BY created_at DESC,source,batch_id LIMIT ? OFFSET ?`, listArgs...)
|
||||
if err != nil {
|
||||
return nil, 0, fmt.Errorf("查询商品目录批次列表失败: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
keys := make([][2]string, 0, limit)
|
||||
for rows.Next() {
|
||||
var key [2]string
|
||||
if err := rows.Scan(&key[0], &key[1]); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
keys = append(keys, key)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
list := make([]model.CatalogImportRun, 0, len(keys))
|
||||
for _, key := range keys {
|
||||
run, err := GetCatalogImportRun(q, key[0], key[1])
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
list = append(list, run)
|
||||
}
|
||||
return list, total, nil
|
||||
}
|
||||
|
||||
// ListCatalogImportSources 返回筛选下拉框所需的稳定来源名。
|
||||
func ListCatalogImportSources(q Execer) ([]string, error) {
|
||||
rows, err := q.Query(`SELECT DISTINCT source FROM catalog_import_runs ORDER BY source`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var list []string
|
||||
for rows.Next() {
|
||||
var source string
|
||||
if err := rows.Scan(&source); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
list = append(list, source)
|
||||
}
|
||||
return list, rows.Err()
|
||||
}
|
||||
|
||||
// RecordCatalogImportReplay 记录相同请求的重复提交,业务数据不会再次写入。
|
||||
func RecordCatalogImportReplay(q Execer, source, batchID, requestedAt string) error {
|
||||
result, err := q.Exec(`UPDATE catalog_import_runs SET request_count=request_count+1,last_request_at=?
|
||||
|
||||
Reference in New Issue
Block a user