fix: 修复重新上报任务状态不一致 (#91)
This commit is contained in:
+21
-12
@@ -50,6 +50,7 @@ from .purchase_reconcile_service import PurchaseReconcileFactory
|
||||
from .selected_android_device_service import SelectedAndroidDeviceService
|
||||
from .settings_repository import SettingsRepository
|
||||
from .task_models import (
|
||||
OutboxEventType,
|
||||
OutboxStatus,
|
||||
TaskFilters,
|
||||
TaskStatus,
|
||||
@@ -213,7 +214,7 @@ class ClaimTaskWorker(QObject):
|
||||
|
||||
|
||||
class ResultResubmitWorker(QObject):
|
||||
"""在后台逐条重发既有结果 Outbox,不执行任何手机操作。"""
|
||||
"""在后台逐条重发既有 Outbox,不执行任何手机操作。"""
|
||||
|
||||
progress = pyqtSignal(int, int, str)
|
||||
finished = pyqtSignal(object, object, object)
|
||||
@@ -248,7 +249,7 @@ class ResultResubmitWorker(QObject):
|
||||
break
|
||||
self.progress.emit(current, total, task_id)
|
||||
try:
|
||||
event = self._repository.latest_result_outbox(task_id)
|
||||
event = self._repository.outbox_for_resubmit(task_id)
|
||||
except Exception:
|
||||
skipped.append(task_id)
|
||||
continue
|
||||
@@ -258,11 +259,18 @@ class ResultResubmitWorker(QObject):
|
||||
|
||||
self._repository.mark_outbox_sending(event.id)
|
||||
try:
|
||||
receipt = self._gateway.submit_result(
|
||||
task_id,
|
||||
event.idempotency_key,
|
||||
event.payload_json,
|
||||
)
|
||||
if event.event_type is OutboxEventType.TASK_FAILURE:
|
||||
receipt = self._gateway.submit_failure(
|
||||
task_id,
|
||||
event.idempotency_key,
|
||||
event.payload_json,
|
||||
)
|
||||
else:
|
||||
receipt = self._gateway.submit_result(
|
||||
task_id,
|
||||
event.idempotency_key,
|
||||
event.payload_json,
|
||||
)
|
||||
if not receipt.accepted:
|
||||
raise AdminGatewayError(
|
||||
"ADMIN_RESULT_NOT_ACCEPTED",
|
||||
@@ -469,7 +477,7 @@ class PDDTaskPageEvent(QObject):
|
||||
|
||||
@pyqtSlot(object)
|
||||
def request_resubmit(self, task_ids) -> None:
|
||||
"""确认后在后台重发勾选任务的原始结果 Outbox。"""
|
||||
"""确认后在后台重发勾选任务尚未发送或最新的 Outbox。"""
|
||||
|
||||
stable_ids = tuple(
|
||||
dict.fromkeys(str(value) for value in task_ids if value)
|
||||
@@ -490,8 +498,9 @@ class PDDTaskPageEvent(QObject):
|
||||
return
|
||||
|
||||
dialog = MessageBox(
|
||||
f"重新上报 {len(stable_ids)} 条任务结果?",
|
||||
"只会重新提交本地已经保存的原始结果,"
|
||||
f"重新上报 {len(stable_ids)} 条任务数据?",
|
||||
"会优先提交尚未发送的结果或失败信息;没有待发送数据时,"
|
||||
"才重新提交本地已经保存的最新结果。"
|
||||
"不会重新采集、采购或操作 Android 手机,也不会修改本地结果。",
|
||||
self._page.window(),
|
||||
)
|
||||
@@ -504,13 +513,13 @@ class PDDTaskPageEvent(QObject):
|
||||
self._start_resubmit_worker(stable_ids)
|
||||
|
||||
def _start_resubmit_worker(self, task_ids: tuple[str, ...]) -> None:
|
||||
"""启动只处理指定结果 Outbox 的工作线程。"""
|
||||
"""启动只处理指定任务 Outbox 的工作线程。"""
|
||||
|
||||
assert self._claim_gateway is not None
|
||||
self._resubmit_busy = True
|
||||
self._page.set_resubmit_running(True)
|
||||
self._page.set_engine_status(
|
||||
f"正在准备重新上报 {len(task_ids)} 条任务结果…"
|
||||
f"正在准备重新上报 {len(task_ids)} 条任务数据…"
|
||||
)
|
||||
|
||||
thread = QThread(self)
|
||||
|
||||
Reference in New Issue
Block a user