fix: 修复顺运宝采集任务孤儿状态 (#165)

This commit is contained in:
chengma
2026-08-11 17:00:33 +08:00
parent c8b1fd686a
commit 9e328984e9
17 changed files with 508 additions and 67 deletions
+15 -3
View File
@@ -404,7 +404,7 @@ func (r *TaskListResult) StatusLine() string {
// DeleteTasks 批量删除任务,返回实际删掉的条数。
func DeleteTasks(db *sql.DB, taskIDs []string) (int64, error) {
return repository.DeleteTasks(db, dedupe(taskIDs))
return deleteTasksInScope(db, dedupe(taskIDs), "", false)
}
// DeleteTasksForUser 保证整批删除要么全部在当前范围内成功,要么全部回滚。
@@ -413,7 +413,10 @@ func DeleteTasksForUser(db *sql.DB, actor *model.User, taskIDs []string) (int64,
if err != nil {
return 0, err
}
ids := dedupe(taskIDs)
return deleteTasksInScope(db, dedupe(taskIDs), visibleUserID, true)
}
func deleteTasksInScope(db *sql.DB, ids []string, visibleUserID string, enforceExactScope bool) (int64, error) {
if len(ids) == 0 {
return 0, nil
}
@@ -422,13 +425,22 @@ func DeleteTasksForUser(db *sql.DB, actor *model.User, taskIDs []string) (int64,
return 0, fmt.Errorf("开始删除任务事务失败: %w", err)
}
defer tx.Rollback()
goodsIDs, err := repository.ListCollectTaskGoodsIDsInScope(tx, ids, visibleUserID)
if err != nil {
return 0, err
}
n, err := repository.DeleteTasksInScope(tx, ids, visibleUserID)
if err != nil {
return 0, err
}
if n != int64(len(ids)) {
if enforceExactScope && n != int64(len(ids)) {
return 0, ErrTaskNotVisible
}
for _, goodsID := range goodsIDs {
if _, err := repository.ResetCollectingIfNoActiveTask(tx, goodsID); err != nil {
return 0, err
}
}
if err := tx.Commit(); err != nil {
return 0, fmt.Errorf("提交删除任务事务失败: %w", err)
}