feat: 展示任务PDD店铺和客户端名称 (#158)

This commit is contained in:
chengma
2026-08-11 15:49:01 +08:00
parent 3e52e188f5
commit df1287f8eb
7 changed files with 175 additions and 28 deletions
+40 -12
View File
@@ -176,16 +176,37 @@ func TaskVisibleToUser(q Execer, taskID, visibleUserID string) (bool, error) {
return count == 1, nil
}
// GetTaskCreatorUsername 返回任务创建人的用户名;历史任务或账号不存在时为空。
func GetTaskCreatorUsername(q Execer, taskID string) (string, error) {
var username sql.NullString
if err := q.QueryRow(`SELECT u.username FROM tasks t LEFT JOIN users u ON u.user_id=t.created_by_user_id WHERE t.task_id=?`, taskID).Scan(&username); err != nil {
// TaskDisplayContext 是任务详情按当前关联数据展示的名称。
// 名称可能被修改或对应记录被删除,因此 tasks 仍只保存稳定 ID。
type TaskDisplayContext struct {
CreatorUsername string
ClientName string
PddShopName string
}
// GetTaskDisplayContext 返回详情需要的当前创建人、客户端名称和 PDD 店铺。
// PDD 商品软删除后不再作为当前商品档案展示,店铺名自然为空。
func GetTaskDisplayContext(q Execer, taskID string) (TaskDisplayContext, error) {
var result TaskDisplayContext
var creatorUsername, clientName, pddShopName sql.NullString
err := q.QueryRow(`
SELECT u.username, c.name, p.shop_name
FROM tasks t
LEFT JOIN users u ON u.user_id = t.created_by_user_id
LEFT JOIN clients c ON c.client_id = t.assigned_client
LEFT JOIN pdd_products p
ON p.goods_id = t.pdd_goods_id AND p.deleted_at IS NULL
WHERE t.task_id = ?`, taskID).Scan(&creatorUsername, &clientName, &pddShopName)
if err != nil {
if err == sql.ErrNoRows {
return "", nil
return result, nil
}
return "", fmt.Errorf("读取任务创建人失败: %w", err)
return result, fmt.Errorf("读取任务展示信息失败: %w", err)
}
return username.String, nil
result.CreatorUsername = creatorUsername.String
result.ClientName = clientName.String
result.PddShopName = pddShopName.String
return result, nil
}
// RecordClaim 记一笔"某客户端领过某任务"。
@@ -323,6 +344,7 @@ type TaskListRow struct {
AssignedClient string // 空表示无主任务
CreatedByUserID string
CreatedByUsername string
ClientName string
OrderNo string
PddGoodsID string
@@ -335,7 +357,8 @@ type TaskListRow struct {
// PddTitle 是 join pdd_products 拿到的标题,**可能为空**:
// 没有对应商品、或商品已被软删除时都是空。
// `[必须]` service 层退回显示 PddGoodsID,不能显示空,见 #19。
PddTitle string
PddTitle string
PddShopName string
}
// taskFilterClause 把三项筛选条件拼成 WHERE 子句,供 ListTasks 和
@@ -387,11 +410,13 @@ func ListTasks(q Execer, filter TaskFilter, limit, offset int) ([]TaskListRow, e
sqlText := `
SELECT t.task_id, t.task_type, t.status, t.execution_mode, t.assigned_client,
t.order_no, t.pdd_goods_id, t.pdd_options, t.quantity, t.max_price_cent,
t.updated_at, p.title, t.created_by_user_id, u.username
t.updated_at, p.title, p.shop_name,
t.created_by_user_id, u.username, c.name
FROM tasks t
LEFT JOIN pdd_products p
ON p.goods_id = t.pdd_goods_id AND p.deleted_at IS NULL
LEFT JOIN users u ON u.user_id = t.created_by_user_id` +
LEFT JOIN users u ON u.user_id = t.created_by_user_id
LEFT JOIN clients c ON c.client_id = t.assigned_client` +
where + ` ORDER BY t.updated_at DESC, t.task_id DESC LIMIT ? OFFSET ?`
args = append(args, limit, offset)
@@ -404,13 +429,14 @@ func ListTasks(q Execer, filter TaskFilter, limit, offset int) ([]TaskListRow, e
list := make([]TaskListRow, 0, 16)
for rows.Next() {
var r TaskListRow
var assigned, orderNo, pddGoodsID, pddOptions, title, creatorID, creatorName sql.NullString
var assigned, orderNo, pddGoodsID, pddOptions, title, shopName sql.NullString
var creatorID, creatorName, clientName sql.NullString
var quantity, maxPrice sql.NullInt64
if err := rows.Scan(
&r.TaskID, &r.TaskType, &r.Status, &r.ExecutionMode, &assigned,
&orderNo, &pddGoodsID, &pddOptions, &quantity, &maxPrice,
&r.UpdatedAt, &title, &creatorID, &creatorName,
&r.UpdatedAt, &title, &shopName, &creatorID, &creatorName, &clientName,
); err != nil {
return nil, fmt.Errorf("读取任务列表失败: %w", err)
}
@@ -422,8 +448,10 @@ func ListTasks(q Execer, filter TaskFilter, limit, offset int) ([]TaskListRow, e
r.Quantity = int(quantity.Int64)
r.MaxPriceCent = maxPrice.Int64
r.PddTitle = title.String
r.PddShopName = shopName.String
r.CreatedByUserID = creatorID.String
r.CreatedByUsername = creatorName.String
r.ClientName = clientName.String
list = append(list, r)
}
return list, rows.Err()