feat: 展示任务PDD店铺和客户端名称 (#158)
This commit is contained in:
+40
-12
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user