|
|
@@ -490,6 +490,11 @@ class OaTaskActionBody(BaseModel):
|
|
|
comment: Optional[str] = None
|
|
|
|
|
|
|
|
|
+class OaCcReadBatchBody(BaseModel):
|
|
|
+ model_config = ConfigDict(populate_by_name=True)
|
|
|
+ ids: List[str] = Field(default_factory=list)
|
|
|
+
|
|
|
+
|
|
|
class OaAddSignBody(BaseModel):
|
|
|
model_config = ConfigDict(populate_by_name=True)
|
|
|
user_ids: List[str] = Field(default_factory=list, alias="userIds")
|
|
|
@@ -695,9 +700,69 @@ async def get_related_summaries(
|
|
|
return success_response({"list": items})
|
|
|
|
|
|
|
|
|
+@router.get("/tasks/cc/unread-count")
|
|
|
+async def oa_cc_unread_count(
|
|
|
+ user: dict = Depends(require_admin_or_super_admin),
|
|
|
+ db: Session = Depends(get_db),
|
|
|
+):
|
|
|
+ from app.services.oa_engine import OaEngineError, count_cc_unread
|
|
|
+
|
|
|
+ try:
|
|
|
+ tenant_no = _get_tenant_no(db, user)
|
|
|
+ n = count_cc_unread(
|
|
|
+ db, tenant_no=tenant_no, user_id=user.get("user_id") or ""
|
|
|
+ )
|
|
|
+ return success_response({"count": int(n)})
|
|
|
+ except OaEngineError as e:
|
|
|
+ return error_response(400, str(e))
|
|
|
+
|
|
|
+
|
|
|
+@router.post("/tasks/cc/read-batch")
|
|
|
+async def oa_cc_read_batch(
|
|
|
+ body: OaCcReadBatchBody,
|
|
|
+ user: dict = Depends(require_admin_or_super_admin),
|
|
|
+ db: Session = Depends(get_db),
|
|
|
+):
|
|
|
+ from app.services.oa_engine import OaEngineError, mark_cc_tasks_read_batch
|
|
|
+
|
|
|
+ try:
|
|
|
+ tenant_no = _get_tenant_no(db, user)
|
|
|
+ data = mark_cc_tasks_read_batch(
|
|
|
+ db,
|
|
|
+ tenant_no=tenant_no,
|
|
|
+ user_id=user.get("user_id") or "",
|
|
|
+ ids=body.ids or [],
|
|
|
+ )
|
|
|
+ return success_response(data, message="已标记已读")
|
|
|
+ except OaEngineError as e:
|
|
|
+ return error_response(400, str(e))
|
|
|
+
|
|
|
+
|
|
|
+@router.post("/tasks/{task_id}/read")
|
|
|
+async def oa_task_mark_read(
|
|
|
+ task_id: str,
|
|
|
+ user: dict = Depends(require_admin_or_super_admin),
|
|
|
+ db: Session = Depends(get_db),
|
|
|
+):
|
|
|
+ from app.services.oa_engine import OaEngineError, mark_cc_task_read
|
|
|
+
|
|
|
+ try:
|
|
|
+ tenant_no = _get_tenant_no(db, user)
|
|
|
+ data = mark_cc_task_read(
|
|
|
+ db,
|
|
|
+ tenant_no=tenant_no,
|
|
|
+ user_id=user.get("user_id") or "",
|
|
|
+ task_id=task_id,
|
|
|
+ )
|
|
|
+ return success_response(data, message="已标记已读")
|
|
|
+ except OaEngineError as e:
|
|
|
+ return error_response(400, str(e))
|
|
|
+
|
|
|
+
|
|
|
@router.get("/tasks/{kind}")
|
|
|
async def list_oa_tasks(
|
|
|
kind: str,
|
|
|
+ readStatus: Optional[str] = Query(None, alias="readStatus"),
|
|
|
user: dict = Depends(require_admin_or_super_admin),
|
|
|
db: Session = Depends(get_db),
|
|
|
):
|
|
|
@@ -706,7 +771,11 @@ async def list_oa_tasks(
|
|
|
try:
|
|
|
tenant_no = _get_tenant_no(db, user)
|
|
|
items = list_tasks(
|
|
|
- db, tenant_no=tenant_no, user_id=user.get("user_id") or "", kind=kind
|
|
|
+ db,
|
|
|
+ tenant_no=tenant_no,
|
|
|
+ user_id=user.get("user_id") or "",
|
|
|
+ kind=kind,
|
|
|
+ read_status=readStatus,
|
|
|
)
|
|
|
return success_response({"list": items})
|
|
|
except OaEngineError as e:
|