feat(T+): 完成数据贯通与自动接入闭环
打通 T+ 快照、业务、发货、回款和核算准备链路,保留来源差异并提供待补状态。 新增业务自动接入任务、跨平台读取服务托管、权限复核、来源关联和前端核对页面。 补充迁移、隔离集成测试、浏览器模拟验收及角色授权边界修复。
This commit is contained in:
1 parent
3efe72c344
commit
1e53792ad6
151 files changed
+8842
-401
No files matched your search
@@ -18,8 +18,10 @@ from app.schemas.tplus import (
|
||||
TPlusErrorQuery,
|
||||
TPlusOverviewOut,
|
||||
TPlusRetryIn,
|
||||
TPlusRuntimeOut,
|
||||
TPlusRuntimeUpdate,
|
||||
)
|
||||
from app.services.tplus import automation_config, query_service, task_service
|
||||
from app.services.tplus import automation_config, query_service, runtime_control, task_service
|
||||
|
||||
router = APIRouter(prefix="/tplus", tags=["系统管理 · T+ 数据同步"])
|
||||
router.include_router(workbench_router)
|
||||
@@ -39,6 +41,17 @@ def update_automation(session: DbSession, admin: PayrollWriter, meta: RequestMet
|
||||
return ok(automation_config.save(session, payload, task_service.TaskActor(admin, meta)))
|
||||
|
||||
|
||||
@router.get("/runtime", response_model=ApiResponse[TPlusRuntimeOut])
|
||||
def runtime_status(session: DbSession, _: WorkbenchReader):
|
||||
return ok(runtime_control.overview(session))
|
||||
|
||||
|
||||
@router.put("/runtime", response_model=ApiResponse[TPlusRuntimeOut])
|
||||
def update_runtime(session: DbSession, admin: PayrollWriter, meta: RequestMetaDep,
|
||||
payload: TPlusRuntimeUpdate):
|
||||
return ok(runtime_control.save(session, payload, task_service.TaskActor(admin, meta)))
|
||||
|
||||
|
||||
@router.get("/batches", response_model=ApiResponse[PageResult[TPlusBatchOut]])
|
||||
def batches(session: DbSession, _: WorkbenchReader, query: Annotated[TPlusBatchQuery, Query()]):
|
||||
"""分页查询批次元数据。"""
|
||||
|
||||
@@ -7,12 +7,46 @@ from starlette.responses import StreamingResponse
|
||||
|
||||
from app.api.deps import DbSession, PayrollWriter, WorkbenchReader
|
||||
from app.core.response import ApiResponse, PageQuery, PageResult, ok
|
||||
from app.schemas.tplus_workbench import FactIn, SourceChoiceQuery, WorkCreateIn, WorkQuery
|
||||
from app.services.tplus import workbench
|
||||
from app.schemas.tplus_business_sync import BusinessSyncRun, BusinessSyncUpdate, SyncRange
|
||||
from app.schemas.tplus_workbench import (
|
||||
CorrectionPairIn,
|
||||
FactIn,
|
||||
SourceChoiceQuery,
|
||||
WorkCreateIn,
|
||||
WorkQuery,
|
||||
)
|
||||
from app.services.tplus import business_sync_control, workbench
|
||||
|
||||
router = APIRouter()
|
||||
RunNo = Annotated[str, Path(pattern=r"^[A-Za-z0-9_-]+$", max_length=32)]
|
||||
|
||||
@router.get("/business-sync")
|
||||
def business_sync_config(session: DbSession, _: WorkbenchReader):
|
||||
return ok(business_sync_control.configuration(session))
|
||||
|
||||
|
||||
@router.put("/business-sync")
|
||||
def business_sync_save(session: DbSession, actor: PayrollWriter, payload: BusinessSyncUpdate):
|
||||
return ok(business_sync_control.save(session, payload, actor.id))
|
||||
|
||||
|
||||
@router.post("/business-sync/preview")
|
||||
def business_sync_preview(session: DbSession, _: PayrollWriter, payload: SyncRange):
|
||||
return ok(business_sync_control.readonly_preview(session, payload.start_date))
|
||||
|
||||
|
||||
@router.post("/business-sync/runs")
|
||||
def business_sync_run(session: DbSession, actor: PayrollWriter, payload: BusinessSyncRun):
|
||||
return ok(business_sync_control.queue(session, actor.id, payload.start_date, payload.request_key))
|
||||
|
||||
|
||||
@router.post("/correction-pairs")
|
||||
def save_correction_pair(session: DbSession, actor: PayrollWriter, payload: CorrectionPairIn):
|
||||
"""成对排除转客户更正单,将实际回款关联原业务,保留实际到账日。"""
|
||||
from app.services.tplus.corrections import save_pair
|
||||
|
||||
return ok(save_pair(session, payload, actor.id))
|
||||
|
||||
|
||||
@router.get("/facts", response_model=ApiResponse[PageResult[dict]])
|
||||
def facts(session: DbSession, _: WorkbenchReader, query: Annotated[WorkQuery, Query()]):
|
||||
|
||||
Reference in new issue
Block a user