From 704318077dc45f0efae2bb2866597f90425a4126 Mon Sep 17 00:00:00 2001 From: zelong <2895587166@qq.com> Date: Thu, 12 Mar 2026 15:36:51 +0800 Subject: [PATCH] =?UTF-8?q?'task3phase2=E8=B0=83=E5=BA=A6=E5=99=A8?= =?UTF-8?q?=E5=92=8C=E6=99=BA=E8=83=BD=E8=A1=A8=E6=A0=BC=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=90=8D=E5=8D=95'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/token_cache.json | 4 +- config3/config.ini | 9 ++-- logs3/api_log_2026-03-12.jsonl | 27 ++++++++++ src/api_test.py | 92 ++++++++++++++++++++++++++----- src3/config.py | 71 +++++++++++++++++------- src3/scheduler.py | 98 ++++++++++++++++++++++++++++++++++ 6 files changed, 263 insertions(+), 38 deletions(-) create mode 100644 src3/scheduler.py diff --git a/config/token_cache.json b/config/token_cache.json index b993fa4..d1ac217 100644 --- a/config/token_cache.json +++ b/config/token_cache.json @@ -1,4 +1,4 @@ { - "access_token": "720bS457oj9c3NehV8Be0YZoqDTdzQhlk1MppoMMdn078G_ZDiJ5BPzbLw5nckIpV6rQLGBYeNc-GkKJgFNMKbhqa52JUDj6o0czz3q3WGAVGEH4z-GSSPDrHft38yjG_kjnk1Aa_LayL6dG_Ndy8POYhNKxyjiAz_veePxnzpWzhwRrQA5YsL2ufrAD12sjL6zfBONkDrLweLjlXPWVK3J9VJThtBMN0K3xzFI0Ku0", - "fetch_time": 1773146433.440257 + "access_token": "aAYJlq4Ueq_gF7-Rx8vfQixphAVb716T9Y6Baixp5zM-3tdA0dDXpEtacGI4DRSuDqzNC5x6Dq0NomwJvo5Glq6lwMvi9gCxV9Eu3FxGpk6AELfduZ8wRPTMJrOy4Y4-q0Xk_MLbUTtVlps5TXuMiDFNYVnCu6-DKONMgKarVPJQrlLa84QO1muTJIk_mg-BLCpf5XLEWKNgwbtyLTrO39RBoAtCRNYcqxFywJUrxIs", + "fetch_time": 1773296159.0088081 } \ No newline at end of file diff --git a/config3/config.ini b/config3/config.ini index 37e9da8..dc0c583 100644 --- a/config3/config.ini +++ b/config3/config.ini @@ -2,12 +2,13 @@ workspace_id = 58335167 [Schedule] -push_time = 09:30 +push_time = 15:35 skip_weekend = true [WeWork] webhook_url = https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=026670e0-9e8d-4f61-9b3f-1f81365954ff -[TechTeam] -# TAPD用户名到企微UserID的映射(逗号分隔,格式:TAPD用户名:企微UserID) -members =BardLin:BardLin,星渊:xingyuan,mithril:mi +[Smartsheet] +# 技术组成员配置表 +docid = dcidlinq5l8GWnXWpTVnp0zZDKki40d5fRf3y1Rhu8VXBbvDb2cqeypgtBegSmAFCsW5RwFF5DRl5DiiZXm2vJsA +sheet_id = q979lj \ No newline at end of file diff --git a/logs3/api_log_2026-03-12.jsonl b/logs3/api_log_2026-03-12.jsonl index d006203..dc95c01 100644 --- a/logs3/api_log_2026-03-12.jsonl +++ b/logs3/api_log_2026-03-12.jsonl @@ -68,3 +68,30 @@ {"event_type": "api_call", "timestamp": "2026-03-12 12:05:38", "task": "task3", "sync_id": "task3_20260312_120537_b6645a54", "module": "tapd", "operation": "bugs", "success": true, "request": {"workspace_id": "58335167", "current_owner": "mithril", "fields": "id,title,deadline,status"}, "response": {"status": 1, "data": [{"Bug": {"id": "1158335167002280921", "title": "【UI】【单机】血条UI歪了,不在屏幕正中间了@mithril(hanjingchao)", "deadline": "2025-12-01", "status": "closed"}}, {"Bug": {"id": "1158335167002280929", "title": "【联机】【弹道】左键第三段,第四段,飞剑子弹数量会丢失几根@mithril(hanjingchao)", "deadline": "2025-12-02", "status": "closed"}}, {"Bug": {"id": "1158335167002280930", "title": "【联机】【弹道】子弹受击特效丢失了@mithril(hanjingchao)", "deadline": "2025-12-01", "status": "closed"}}, {"Bug": {"id": "1158335167002280931", "title": "【联机】【UI】对方的体力条会显示得特别大@mithril(hanjingchao)", "deadline": "2025-12-02", "status": "closed"}}, {"Bug": {"id": "1158335167002283432", "title": "更新之后,放左键,没目标时弹道坏了,不会正确追踪地形", "deadline": "2025-12-09", "status": "closed"}}, {"Bug": {"id": "1158335167002287668", "title": "格挡成功后,延迟时间内盾也要保证和角色相对移动,(当前是会静止在原地,不跟随角色移动)", "deadline": "2025-12-12", "status": "closed"}}, {"Bug": {"id": "1158335167002287671", "title": "格挡成功后,延迟时间内再次格挡,则要刷新当前延迟时间(当前延迟时间内再次受击,延迟时间感觉并没有被刷新)", "deadline": "2025-12-16", "status": "closed"}}, {"Bug": {"id": "1158335167002287675", "title": "在新生成盾时,盾的内外表现不对,且旋转方向不对", "deadline": "2025-12-12", "status": "closed"}}, {"Bug": {"id": "1158335167002294091", "title": "【联机】【符箓】土牢符会把自己困住", "deadline": "2025-12-18", "status": "closed"}}, {"Bug": {"id": "1158335167002294096", "title": "【联机】【法宝】飞天盾会挡住自己的子弹", "deadline": "2025-12-18", "status": "closed"}}, {"Bug": {"id": "1158335167002295354", "title": "飞天盾相关bug - 子弹会穿盾,对角色造成伤害", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002295358", "title": "限制生成初始总数量为1,避免多次使用生成多个盾(再次使用时刷新盾血量和持续时间)", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002295360", "title": "飞天盾相关bug - 持续时间配置,避免盾一直不消失", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002296688", "title": "【BUG】包里能不能默认 DisableAllScreenMessages", "deadline": "2025-12-22", "status": "closed"}}, {"Bug": {"id": "1158335167002297733", "title": "【高-BUG】左键普攻,第四段飞剑命中后会延迟一会才消失,希望和前三段一样快速消失", "deadline": "2025-12-25", "status": "closed"}}, {"Bug": {"id": "1158335167002299602", "title": "【高-BUG】土牢符的符纸,自己能锁定", "deadline": "2025-12-27", "status": "closed"}}, {"Bug": {"id": "1158335167002300378", "title": "【bug】土牢符陷阱现在不开神识探查也能看见", "deadline": "2025-12-30", "status": "in_progress"}}, {"Bug": {"id": "1158335167002300531", "title": "【致命-BUG】按G会Crash,复现较为频繁", "deadline": "2025-12-28", "status": "closed"}}, {"Bug": {"id": "1158335167002300717", "title": "【高-BUG】巨剑术诀子弹,命中海王兽场景海面底下的地面时没有正确触发overlap事件,停在表面并播特效", "deadline": "2025-12-31", "status": "closed"}}, {"Bug": {"id": "1158335167002300837", "title": "【高-bug】MoveToTargetEX触发的时候,能直接从土牢符里穿出来,需要正常阻挡自身和目标穿出土牢符", "deadline": "2025-12-31", "status": "closed"}}, {"Bug": {"id": "1158335167002304061", "title": "【需Merge分支】【高-BUG】【联机】现在破定期间Q环绕飞剑,只环绕一次就消失了。", "deadline": "2026-01-07", "status": "closed"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} {"event_type": "api_call", "timestamp": "2026-03-12 12:05:39", "task": "task3", "sync_id": "task3_20260312_120537_b6645a54", "module": "wework", "operation": "webhook/send", "success": true, "request": {"msgtype": "markdown", "markdown": {"content": "⏰ TAPD 过期单提醒(2026-03-12)\n\n\n\n<@BardLin>(12 条过期)\n1.【需求】主角战斗 - 动作资源 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004787973)\n2.【需求】空中待机 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774664)\n3.【需求】雷属性受击 - 起始 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774629)\n4.【需求】雷属性受击 - 循环 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774628)\n5.【需求】飞遁动画 | 过期 41 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004828079)\n6.【需求】右键垫步突进 | 过期 34 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827909)\n7.【需求】青凝镜-回收Layout | 过期 13 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827996)\n8.【需求】青凝镜-检视表演Layout | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827991)\n9.【需求】青凝镜-召唤Layout | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827989)\n10.【需求】空中右键下劈 | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827910)\n11.【需求】噬金虫召唤动画Layout | 过期 3 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827929)\n12.【需求】3C-基础移动-Bug-Dodge卡帧 | 过期 2 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004866823)\n========================\n\n\n<@mi>(2 条过期)\n13.【缺陷】【bug】土牢符陷阱现在不开神识探查也能看见 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/bugtrace/bugs/view?bug_id=1158335167002300378)\n14.【需求】客户端审核 - 消耗品使用逻辑 | 过期 6 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004828679)\n========================\n\n\n<@xingyuan>(13 条过期)\n15.【需求】AS脚本Bind扩展 | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839302)\n16.【需求】尝试AS写Validator | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839301)\n17.【需求】Data Validator框架 | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839234)\n18.【需求】材质Mask模式不受motion blur影响 | 过期 35 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839323)\n19.【需求】Kawaii,Magic,AnimVelet调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839272)\n20.【需求】Chaos布料算法调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839270)\n21.【需求】编译Android版 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839267)\n22.【需求】对GPU解算进行改近 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839266)\n23.【需求】理解GPU算法 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839259)\n24.【需求】调试和理解NvCloth算法 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839246)\n25.【需求】NvCloth调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839241)\n26.【需求】布料解算基建 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839239)\n27.【需求】3C-基础移动-Bug-Dodge卡帧 | 过期 2 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004866823)\n========================\n共 27 条过期单,请今日内更新状态 🙏"}, "mentioned_list": ["BardLin", "mi", "xingyuan"]}, "response": {"errcode": 0, "errmsg": "ok"}, "error_message": null, "duration_ms": null, "extra": {}} {"event_type": "end_sync", "timestamp": "2026-03-12 12:05:39", "task": "task3", "sync_id": "task3_20260312_120537_b6645a54", "success": true, "stats": {"overdue_count": 27}, "error_message": null, "extra": {}} +{"event_type": "start_sync", "timestamp": "2026-03-12 14:34:39", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "trigger": "manual", "metadata": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:34:39", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "module": "tapd", "operation": "stories", "success": true, "request": {"workspace_id": "58335167", "owner": "BardLin", "fields": "id,name,due,status"}, "response": {"status": 1, "data": [{"Story": {"id": "1158335167004866823", "name": "3C-基础移动-Bug-Dodge卡帧", "due": "2026-03-10", "status": "status_9"}}, {"Story": {"id": "1158335167004834011", "name": "【动画】2026年1月 - 凡人各组月度产出梳理", "due": "2026-01-28", "status": "status_8"}}, {"Story": {"id": "1158335167004828079", "name": "飞遁动画", "due": "2026-01-30", "status": "status_9"}}, {"Story": {"id": "1158335167004828030", "name": "大啼魂-初绑", "due": "2026-03-02", "status": "status_8"}}, {"Story": {"id": "1158335167004827998", "name": "血色披风预研", "due": "2026-02-14", "status": "status_8"}}, {"Story": {"id": "1158335167004827996", "name": "青凝镜-回收Layout", "due": "2026-02-27", "status": "status_9"}}, {"Story": {"id": "1158335167004827994", "name": "青凝镜-待机", "due": "2026-03-20", "status": "status_9"}}, {"Story": {"id": "1158335167004827991", "name": "青凝镜-检视表演Layout", "due": "2026-02-28", "status": "status_9"}}, {"Story": {"id": "1158335167004827989", "name": "青凝镜-召唤Layout", "due": "2026-02-28", "status": "status_9"}}, {"Story": {"id": "1158335167004827987", "name": "青凝镜-初绑", "due": "2026-01-30", "status": "status_8"}}, {"Story": {"id": "1158335167004827946", "name": "玄铁飞天盾-初绑", "due": "2026-01-23", "status": "status_8"}}, {"Story": {"id": "1158335167004827929", "name": "噬金虫召唤动画Layout", "due": "2026-03-09", "status": "status_9"}}, {"Story": {"id": "1158335167004827926", "name": "噬金虫召-初绑", "due": "2026-01-26", "status": "status_8"}}, {"Story": {"id": "1158335167004827921", "name": "飞剑-解控", "due": "2026-03-27", "status": "status_9"}}, {"Story": {"id": "1158335167004827920", "name": "飞剑-检视表演", "due": "2026-03-27", "status": "status_7"}}, {"Story": {"id": "1158335167004827919", "name": "飞剑-检视表演Layout", "due": "2026-03-13", "status": "status_7"}}, {"Story": {"id": "1158335167004827914", "name": "剑影分光·闪回", "due": "2026-03-27", "status": "status_9"}}, {"Story": {"id": "1158335167004827912", "name": "剑影分光·上挑", "due": "2026-03-27", "status": "status_9"}}, {"Story": {"id": "1158335167004827910", "name": "空中右键下劈", "due": "2026-02-28", "status": "status_5"}}, {"Story": {"id": "1158335167004827909", "name": "右键垫步突进", "due": "2026-02-06", "status": "status_5"}}, {"Story": {"id": "1158335167004827852", "name": "动画制作 - 【法宝】青竹蜂云剑", "due": "2026-03-28", "status": "status_7"}}, {"Story": {"id": "1158335167004816915", "name": "3C-飞遁 - 状态机重构", "due": "2026-01-09", "status": "status_8"}}, {"Story": {"id": "1158335167004815661", "name": "3C-飞遁 - W输入HighSpeed状态", "due": "2026-01-09", "status": "status_8"}}, {"Story": {"id": "1158335167004787978", "name": "通用受击 - 动作资源", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004787977", "name": "海王兽 - 动作资源", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004787973", "name": "主角战斗 - 动作资源", "due": "2025-12-30", "status": "status_7"}}, {"Story": {"id": "1158335167004774665", "name": "地面待机", "due": "2025-12-30", "status": "status_8"}}, {"Story": {"id": "1158335167004774664", "name": "空中待机", "due": "2025-12-30", "status": "status_7"}}, {"Story": {"id": "1158335167004774629", "name": "雷属性受击 - 起始", "due": "2025-12-30", "status": "status_7"}}, {"Story": {"id": "1158335167004774628", "name": "雷属性受击 - 循环", "due": "2025-12-30", "status": "status_7"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:34:39", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "module": "tapd", "operation": "stories", "success": true, "request": {"workspace_id": "58335167", "owner": "星渊", "fields": "id,name,due,status"}, "response": {"status": 1, "data": [{"Story": {"id": "1158335167004866823", "name": "3C-基础移动-Bug-Dodge卡帧", "due": "2026-03-10", "status": "status_9"}}, {"Story": {"id": "1158335167004839323", "name": "材质Mask模式不受motion blur影响", "due": "2026-02-05", "status": "status_9"}}, {"Story": {"id": "1158335167004839302", "name": "AS脚本Bind扩展", "due": "2026-02-03", "status": "status_10"}}, {"Story": {"id": "1158335167004839301", "name": "尝试AS写Validator", "due": "2026-02-03", "status": "status_10"}}, {"Story": {"id": "1158335167004839299", "name": "简单Sample跑下流程", "due": "2026-02-03", "status": "status_8"}}, {"Story": {"id": "1158335167004839298", "name": "文档阅读", "due": "2026-02-03", "status": "status_8"}}, {"Story": {"id": "1158335167004839272", "name": "Kawaii,Magic,AnimVelet调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839270", "name": "Chaos布料算法调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839267", "name": "编译Android版", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839266", "name": "对GPU解算进行改近", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839263", "name": "育碧GPU布料结算的GDC Paper", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839259", "name": "理解GPU算法", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839251", "name": "增加Profiler", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839246", "name": "调试和理解NvCloth算法", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839242", "name": "编译NvCloth", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839241", "name": "NvCloth调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839239", "name": "布料解算基建", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839234", "name": "Data Validator框架", "due": "2026-02-03", "status": "status_5"}}, {"Story": {"id": "1158335167004834466", "name": "Horde相关-持续开发项", "due": "2026-05-30", "status": "status_5"}}, {"Story": {"id": "1158335167004834018", "name": "【引擎/TA】2026年1月 - 凡人各组月度产出梳理", "due": "2026-01-28", "status": "status_8"}}, {"Story": {"id": "1158335167004828309", "name": "技术基建-基础可过滤编辑器控件开发", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004802628", "name": "技术基建-XianDebugger-法术场Debugger", "due": null, "status": "status_9"}}, {"Story": {"id": "1158335167004802626", "name": "技术基建-XianDebugger", "due": null, "status": "status_5"}}, {"Story": {"id": "1158335167004800837", "name": "VAT贴图Foramt以及各种选项的意义", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004800834", "name": "VAT贴图尺寸和种类优化", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800832", "name": "VAT内存优化", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004800829", "name": "内存Profiling", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800828", "name": "内存优化", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800819", "name": "Async优化Lumen反射", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800816", "name": "优化Lumen反射,包括水的反射性能", "due": null, "status": "status_8"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:34:40", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "module": "tapd", "operation": "stories", "success": true, "request": {"workspace_id": "58335167", "owner": "mithril", "fields": "id,name,due,status"}, "response": {"status": 1, "data": [{"Story": {"id": "1158335167004865833", "name": "客户端审核 - 噬金虫相关功能", "due": "2026-03-13", "status": "status_7"}}, {"Story": {"id": "1158335167004840448", "name": "技能触发条件接入及联调。", "due": "2026-01-31", "status": "status_8"}}, {"Story": {"id": "1158335167004838325", "name": "AI Codereview", "due": "2026-05-30", "status": "status_5"}}, {"Story": {"id": "1158335167004838322", "name": "界面调整迭代", "due": "2026-02-28", "status": "status_8"}}, {"Story": {"id": "1158335167004838321", "name": "重构MainMenu", "due": "2026-02-28", "status": "status_8"}}, {"Story": {"id": "1158335167004838320", "name": "common ui调研,手机端测试", "due": "2026-03-20", "status": "status_7"}}, {"Story": {"id": "1158335167004836875", "name": "- 技能槽位系统重构-迭代", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004834469", "name": "Horde编译失败群通知", "due": "2026-05-30", "status": "status_9"}}, {"Story": {"id": "1158335167004834468", "name": "Horde 自动触发逻辑", "due": "2026-05-30", "status": "status_9"}}, {"Story": {"id": "1158335167004829003", "name": "补全运行时日志", "due": "2026-03-27", "status": "status_7"}}, {"Story": {"id": "1158335167004828993", "name": "接入xiandebug,可预览运行时子弹及相关数据", "due": "2026-03-27", "status": "status_7"}}, {"Story": {"id": "1158335167004828719", "name": "客户端审核 - 武器装备-UI逻辑", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004828716", "name": "客户端审核 - 法宝装备-UI逻辑", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004828709", "name": "客户端审核 - 武器装备界面逻辑", "due": "2026-03-13", "status": "status_12"}}, {"Story": {"id": "1158335167004828708", "name": "客户端审核 - 法宝装备界面逻辑", "due": "2026-03-13", "status": "status_12"}}, {"Story": {"id": "1158335167004828679", "name": "客户端审核 - 消耗品使用逻辑", "due": "2026-03-06", "status": "status_5"}}, {"Story": {"id": "1158335167004828673", "name": "客户端审核 - SkillSlotMgr新逻辑迭代", "due": "2026-01-28", "status": "status_8"}}, {"Story": {"id": "1158335167004828672", "name": "客户端审核 - 武器槽位映射逻辑重构", "due": "2026-01-30", "status": "status_8"}}, {"Story": {"id": "1158335167004827634", "name": "客户端审核 - 绑定Ability——左右键、派生技、武器战技和武器通用技能", "due": "2026-03-22", "status": "status_5"}}, {"Story": {"id": "1158335167004827625", "name": "客户端审核 - 可追踪角度、追踪速度等参数可靠性优化", "due": "2026-03-28", "status": "status_7"}}, {"Story": {"id": "1158335167004827584", "name": "客户端审核 - 根据血量裂纹和破碎效果", "due": "2026-04-03", "status": "status_7"}}, {"Story": {"id": "1158335167004827583", "name": "客户端审核 - 表现优化,接入动画资源", "due": "2026-04-02", "status": "status_7"}}, {"Story": {"id": "1158335167004806717", "name": "分支上增加显示玩家名称的功能", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800802", "name": "PSO收集", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004794635", "name": "客户端审核 - 格挡功能-子弹奉还", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004794632", "name": "客户端审核 - 弹道系统现有配置优化", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004794631", "name": "客户端审核 - 弹道系统优化- 激光类bullet", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004794629", "name": "客户端审核 - 弹道系统优化- AOE伤害&子弹爆炸", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004792154", "name": "玄铁飞天盾 - 格挡成功超出弧度生成多个盾后,若当前盾X秒内未再次受击则消散,直到仅剩下一个盾时,回到1倍大小", "due": "2026-04-02", "status": "status_7"}}, {"Story": {"id": "1158335167004792153", "name": "玄铁飞天盾 - 格挡成功后,X秒内未再次受击,则平滑往环绕半径轨道上移动", "due": "2026-04-02", "status": "status_7"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:34:40", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "module": "tapd", "operation": "bugs", "success": true, "request": {"workspace_id": "58335167", "current_owner": "BardLin", "fields": "id,title,deadline,status"}, "response": {"status": 1, "data": [{"Bug": {"id": "1158335167002283694", "title": "受击动画中,root质心需要跟随人物模型运动(如击飞、击浮空时root需要向上跟随),否则浮空连击时,敌人位置会频繁上下跳动。", "deadline": "2025-12-05", "status": "closed"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:34:40", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "module": "tapd", "operation": "bugs", "success": true, "request": {"workspace_id": "58335167", "current_owner": "星渊", "fields": "id,title,deadline,status"}, "response": {"status": 1, "data": [{"Bug": {"id": "1158335167002296797", "title": "优化性能,分辨率提升为1080P,静态帧率基本稳定60fps", "deadline": "2025-12-22", "status": "closed"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:34:40", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "module": "tapd", "operation": "bugs", "success": true, "request": {"workspace_id": "58335167", "current_owner": "mithril", "fields": "id,title,deadline,status"}, "response": {"status": 1, "data": [{"Bug": {"id": "1158335167002280921", "title": "【UI】【单机】血条UI歪了,不在屏幕正中间了@mithril(hanjingchao)", "deadline": "2025-12-01", "status": "closed"}}, {"Bug": {"id": "1158335167002280929", "title": "【联机】【弹道】左键第三段,第四段,飞剑子弹数量会丢失几根@mithril(hanjingchao)", "deadline": "2025-12-02", "status": "closed"}}, {"Bug": {"id": "1158335167002280930", "title": "【联机】【弹道】子弹受击特效丢失了@mithril(hanjingchao)", "deadline": "2025-12-01", "status": "closed"}}, {"Bug": {"id": "1158335167002280931", "title": "【联机】【UI】对方的体力条会显示得特别大@mithril(hanjingchao)", "deadline": "2025-12-02", "status": "closed"}}, {"Bug": {"id": "1158335167002283432", "title": "更新之后,放左键,没目标时弹道坏了,不会正确追踪地形", "deadline": "2025-12-09", "status": "closed"}}, {"Bug": {"id": "1158335167002287668", "title": "格挡成功后,延迟时间内盾也要保证和角色相对移动,(当前是会静止在原地,不跟随角色移动)", "deadline": "2025-12-12", "status": "closed"}}, {"Bug": {"id": "1158335167002287671", "title": "格挡成功后,延迟时间内再次格挡,则要刷新当前延迟时间(当前延迟时间内再次受击,延迟时间感觉并没有被刷新)", "deadline": "2025-12-16", "status": "closed"}}, {"Bug": {"id": "1158335167002287675", "title": "在新生成盾时,盾的内外表现不对,且旋转方向不对", "deadline": "2025-12-12", "status": "closed"}}, {"Bug": {"id": "1158335167002294091", "title": "【联机】【符箓】土牢符会把自己困住", "deadline": "2025-12-18", "status": "closed"}}, {"Bug": {"id": "1158335167002294096", "title": "【联机】【法宝】飞天盾会挡住自己的子弹", "deadline": "2025-12-18", "status": "closed"}}, {"Bug": {"id": "1158335167002295354", "title": "飞天盾相关bug - 子弹会穿盾,对角色造成伤害", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002295358", "title": "限制生成初始总数量为1,避免多次使用生成多个盾(再次使用时刷新盾血量和持续时间)", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002295360", "title": "飞天盾相关bug - 持续时间配置,避免盾一直不消失", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002296688", "title": "【BUG】包里能不能默认 DisableAllScreenMessages", "deadline": "2025-12-22", "status": "closed"}}, {"Bug": {"id": "1158335167002297733", "title": "【高-BUG】左键普攻,第四段飞剑命中后会延迟一会才消失,希望和前三段一样快速消失", "deadline": "2025-12-25", "status": "closed"}}, {"Bug": {"id": "1158335167002299602", "title": "【高-BUG】土牢符的符纸,自己能锁定", "deadline": "2025-12-27", "status": "closed"}}, {"Bug": {"id": "1158335167002300378", "title": "【bug】土牢符陷阱现在不开神识探查也能看见", "deadline": "2025-12-30", "status": "in_progress"}}, {"Bug": {"id": "1158335167002300531", "title": "【致命-BUG】按G会Crash,复现较为频繁", "deadline": "2025-12-28", "status": "closed"}}, {"Bug": {"id": "1158335167002300717", "title": "【高-BUG】巨剑术诀子弹,命中海王兽场景海面底下的地面时没有正确触发overlap事件,停在表面并播特效", "deadline": "2025-12-31", "status": "closed"}}, {"Bug": {"id": "1158335167002300837", "title": "【高-bug】MoveToTargetEX触发的时候,能直接从土牢符里穿出来,需要正常阻挡自身和目标穿出土牢符", "deadline": "2025-12-31", "status": "closed"}}, {"Bug": {"id": "1158335167002304061", "title": "【需Merge分支】【高-BUG】【联机】现在破定期间Q环绕飞剑,只环绕一次就消失了。", "deadline": "2026-01-07", "status": "closed"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:34:41", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "module": "wework", "operation": "webhook/send", "success": true, "request": {"msgtype": "markdown", "markdown": {"content": "⏰ TAPD 过期单提醒(2026-03-12)\n\n\n<@BardLin>(12 条过期)\n1.【需求】主角战斗 - 动作资源 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004787973)\n2.【需求】空中待机 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774664)\n3.【需求】雷属性受击 - 起始 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774629)\n4.【需求】雷属性受击 - 循环 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774628)\n5.【需求】飞遁动画 | 过期 41 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004828079)\n6.【需求】右键垫步突进 | 过期 34 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827909)\n7.【需求】青凝镜-回收Layout | 过期 13 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827996)\n8.【需求】青凝镜-检视表演Layout | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827991)\n9.【需求】青凝镜-召唤Layout | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827989)\n10.【需求】空中右键下劈 | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827910)\n11.【需求】噬金虫召唤动画Layout | 过期 3 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827929)\n12.【需求】3C-基础移动-Bug-Dodge卡帧 | 过期 2 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004866823)\n\n\n========================\n<@mi>(2 条过期)\n13.【缺陷】【bug】土牢符陷阱现在不开神识探查也能看见 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/bugtrace/bugs/view?bug_id=1158335167002300378)\n14.【需求】客户端审核 - 消耗品使用逻辑 | 过期 6 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004828679)\n\n\n========================\n<@xingyuan>(13 条过期)\n15.【需求】AS脚本Bind扩展 | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839302)\n16.【需求】尝试AS写Validator | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839301)\n17.【需求】Data Validator框架 | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839234)\n18.【需求】材质Mask模式不受motion blur影响 | 过期 35 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839323)\n19.【需求】Kawaii,Magic,AnimVelet调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839272)\n20.【需求】Chaos布料算法调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839270)\n21.【需求】编译Android版 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839267)\n22.【需求】对GPU解算进行改近 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839266)\n23.【需求】理解GPU算法 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839259)\n24.【需求】调试和理解NvCloth算法 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839246)\n25.【需求】NvCloth调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839241)\n26.【需求】布料解算基建 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839239)\n27.【需求】3C-基础移动-Bug-Dodge卡帧 | 过期 2 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004866823)\n\n\n========================\n共 27 条过期单,请今日内更新状态 🙏"}, "mentioned_list": ["BardLin", "mi", "xingyuan"]}, "response": {"errcode": 0, "errmsg": "ok"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "end_sync", "timestamp": "2026-03-12 14:34:41", "task": "task3", "sync_id": "task3_20260312_143439_6e21b546", "success": true, "stats": {"overdue_count": 27}, "error_message": null, "extra": {}} +{"event_type": "start_sync", "timestamp": "2026-03-12 14:35:41", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "trigger": "manual", "metadata": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:35:41", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "module": "tapd", "operation": "stories", "success": true, "request": {"workspace_id": "58335167", "owner": "BardLin", "fields": "id,name,due,status"}, "response": {"status": 1, "data": [{"Story": {"id": "1158335167004866823", "name": "3C-基础移动-Bug-Dodge卡帧", "due": "2026-03-10", "status": "status_9"}}, {"Story": {"id": "1158335167004834011", "name": "【动画】2026年1月 - 凡人各组月度产出梳理", "due": "2026-01-28", "status": "status_8"}}, {"Story": {"id": "1158335167004828079", "name": "飞遁动画", "due": "2026-01-30", "status": "status_9"}}, {"Story": {"id": "1158335167004828030", "name": "大啼魂-初绑", "due": "2026-03-02", "status": "status_8"}}, {"Story": {"id": "1158335167004827998", "name": "血色披风预研", "due": "2026-02-14", "status": "status_8"}}, {"Story": {"id": "1158335167004827996", "name": "青凝镜-回收Layout", "due": "2026-02-27", "status": "status_9"}}, {"Story": {"id": "1158335167004827994", "name": "青凝镜-待机", "due": "2026-03-20", "status": "status_9"}}, {"Story": {"id": "1158335167004827991", "name": "青凝镜-检视表演Layout", "due": "2026-02-28", "status": "status_9"}}, {"Story": {"id": "1158335167004827989", "name": "青凝镜-召唤Layout", "due": "2026-02-28", "status": "status_9"}}, {"Story": {"id": "1158335167004827987", "name": "青凝镜-初绑", "due": "2026-01-30", "status": "status_8"}}, {"Story": {"id": "1158335167004827946", "name": "玄铁飞天盾-初绑", "due": "2026-01-23", "status": "status_8"}}, {"Story": {"id": "1158335167004827929", "name": "噬金虫召唤动画Layout", "due": "2026-03-09", "status": "status_9"}}, {"Story": {"id": "1158335167004827926", "name": "噬金虫召-初绑", "due": "2026-01-26", "status": "status_8"}}, {"Story": {"id": "1158335167004827921", "name": "飞剑-解控", "due": "2026-03-27", "status": "status_9"}}, {"Story": {"id": "1158335167004827920", "name": "飞剑-检视表演", "due": "2026-03-27", "status": "status_7"}}, {"Story": {"id": "1158335167004827919", "name": "飞剑-检视表演Layout", "due": "2026-03-13", "status": "status_7"}}, {"Story": {"id": "1158335167004827914", "name": "剑影分光·闪回", "due": "2026-03-27", "status": "status_9"}}, {"Story": {"id": "1158335167004827912", "name": "剑影分光·上挑", "due": "2026-03-27", "status": "status_9"}}, {"Story": {"id": "1158335167004827910", "name": "空中右键下劈", "due": "2026-02-28", "status": "status_5"}}, {"Story": {"id": "1158335167004827909", "name": "右键垫步突进", "due": "2026-02-06", "status": "status_5"}}, {"Story": {"id": "1158335167004827852", "name": "动画制作 - 【法宝】青竹蜂云剑", "due": "2026-03-28", "status": "status_7"}}, {"Story": {"id": "1158335167004816915", "name": "3C-飞遁 - 状态机重构", "due": "2026-01-09", "status": "status_8"}}, {"Story": {"id": "1158335167004815661", "name": "3C-飞遁 - W输入HighSpeed状态", "due": "2026-01-09", "status": "status_8"}}, {"Story": {"id": "1158335167004787978", "name": "通用受击 - 动作资源", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004787977", "name": "海王兽 - 动作资源", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004787973", "name": "主角战斗 - 动作资源", "due": "2025-12-30", "status": "status_7"}}, {"Story": {"id": "1158335167004774665", "name": "地面待机", "due": "2025-12-30", "status": "status_8"}}, {"Story": {"id": "1158335167004774664", "name": "空中待机", "due": "2025-12-30", "status": "status_7"}}, {"Story": {"id": "1158335167004774629", "name": "雷属性受击 - 起始", "due": "2025-12-30", "status": "status_7"}}, {"Story": {"id": "1158335167004774628", "name": "雷属性受击 - 循环", "due": "2025-12-30", "status": "status_7"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:35:41", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "module": "tapd", "operation": "stories", "success": true, "request": {"workspace_id": "58335167", "owner": "星渊", "fields": "id,name,due,status"}, "response": {"status": 1, "data": [{"Story": {"id": "1158335167004866823", "name": "3C-基础移动-Bug-Dodge卡帧", "due": "2026-03-10", "status": "status_9"}}, {"Story": {"id": "1158335167004839323", "name": "材质Mask模式不受motion blur影响", "due": "2026-02-05", "status": "status_9"}}, {"Story": {"id": "1158335167004839302", "name": "AS脚本Bind扩展", "due": "2026-02-03", "status": "status_10"}}, {"Story": {"id": "1158335167004839301", "name": "尝试AS写Validator", "due": "2026-02-03", "status": "status_10"}}, {"Story": {"id": "1158335167004839299", "name": "简单Sample跑下流程", "due": "2026-02-03", "status": "status_8"}}, {"Story": {"id": "1158335167004839298", "name": "文档阅读", "due": "2026-02-03", "status": "status_8"}}, {"Story": {"id": "1158335167004839272", "name": "Kawaii,Magic,AnimVelet调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839270", "name": "Chaos布料算法调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839267", "name": "编译Android版", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839266", "name": "对GPU解算进行改近", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839263", "name": "育碧GPU布料结算的GDC Paper", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839259", "name": "理解GPU算法", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839251", "name": "增加Profiler", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839246", "name": "调试和理解NvCloth算法", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839242", "name": "编译NvCloth", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839241", "name": "NvCloth调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839239", "name": "布料解算基建", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839234", "name": "Data Validator框架", "due": "2026-02-03", "status": "status_5"}}, {"Story": {"id": "1158335167004834466", "name": "Horde相关-持续开发项", "due": "2026-05-30", "status": "status_5"}}, {"Story": {"id": "1158335167004834018", "name": "【引擎/TA】2026年1月 - 凡人各组月度产出梳理", "due": "2026-01-28", "status": "status_8"}}, {"Story": {"id": "1158335167004828309", "name": "技术基建-基础可过滤编辑器控件开发", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004802628", "name": "技术基建-XianDebugger-法术场Debugger", "due": null, "status": "status_9"}}, {"Story": {"id": "1158335167004802626", "name": "技术基建-XianDebugger", "due": null, "status": "status_5"}}, {"Story": {"id": "1158335167004800837", "name": "VAT贴图Foramt以及各种选项的意义", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004800834", "name": "VAT贴图尺寸和种类优化", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800832", "name": "VAT内存优化", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004800829", "name": "内存Profiling", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800828", "name": "内存优化", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800819", "name": "Async优化Lumen反射", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800816", "name": "优化Lumen反射,包括水的反射性能", "due": null, "status": "status_8"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:35:41", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "module": "tapd", "operation": "stories", "success": true, "request": {"workspace_id": "58335167", "owner": "mithril", "fields": "id,name,due,status"}, "response": {"status": 1, "data": [{"Story": {"id": "1158335167004865833", "name": "客户端审核 - 噬金虫相关功能", "due": "2026-03-13", "status": "status_7"}}, {"Story": {"id": "1158335167004840448", "name": "技能触发条件接入及联调。", "due": "2026-01-31", "status": "status_8"}}, {"Story": {"id": "1158335167004838325", "name": "AI Codereview", "due": "2026-05-30", "status": "status_5"}}, {"Story": {"id": "1158335167004838322", "name": "界面调整迭代", "due": "2026-02-28", "status": "status_8"}}, {"Story": {"id": "1158335167004838321", "name": "重构MainMenu", "due": "2026-02-28", "status": "status_8"}}, {"Story": {"id": "1158335167004838320", "name": "common ui调研,手机端测试", "due": "2026-03-20", "status": "status_7"}}, {"Story": {"id": "1158335167004836875", "name": "- 技能槽位系统重构-迭代", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004834469", "name": "Horde编译失败群通知", "due": "2026-05-30", "status": "status_9"}}, {"Story": {"id": "1158335167004834468", "name": "Horde 自动触发逻辑", "due": "2026-05-30", "status": "status_9"}}, {"Story": {"id": "1158335167004829003", "name": "补全运行时日志", "due": "2026-03-27", "status": "status_7"}}, {"Story": {"id": "1158335167004828993", "name": "接入xiandebug,可预览运行时子弹及相关数据", "due": "2026-03-27", "status": "status_7"}}, {"Story": {"id": "1158335167004828719", "name": "客户端审核 - 武器装备-UI逻辑", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004828716", "name": "客户端审核 - 法宝装备-UI逻辑", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004828709", "name": "客户端审核 - 武器装备界面逻辑", "due": "2026-03-13", "status": "status_12"}}, {"Story": {"id": "1158335167004828708", "name": "客户端审核 - 法宝装备界面逻辑", "due": "2026-03-13", "status": "status_12"}}, {"Story": {"id": "1158335167004828679", "name": "客户端审核 - 消耗品使用逻辑", "due": "2026-03-06", "status": "status_5"}}, {"Story": {"id": "1158335167004828673", "name": "客户端审核 - SkillSlotMgr新逻辑迭代", "due": "2026-01-28", "status": "status_8"}}, {"Story": {"id": "1158335167004828672", "name": "客户端审核 - 武器槽位映射逻辑重构", "due": "2026-01-30", "status": "status_8"}}, {"Story": {"id": "1158335167004827634", "name": "客户端审核 - 绑定Ability——左右键、派生技、武器战技和武器通用技能", "due": "2026-03-22", "status": "status_5"}}, {"Story": {"id": "1158335167004827625", "name": "客户端审核 - 可追踪角度、追踪速度等参数可靠性优化", "due": "2026-03-28", "status": "status_7"}}, {"Story": {"id": "1158335167004827584", "name": "客户端审核 - 根据血量裂纹和破碎效果", "due": "2026-04-03", "status": "status_7"}}, {"Story": {"id": "1158335167004827583", "name": "客户端审核 - 表现优化,接入动画资源", "due": "2026-04-02", "status": "status_7"}}, {"Story": {"id": "1158335167004806717", "name": "分支上增加显示玩家名称的功能", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800802", "name": "PSO收集", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004794635", "name": "客户端审核 - 格挡功能-子弹奉还", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004794632", "name": "客户端审核 - 弹道系统现有配置优化", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004794631", "name": "客户端审核 - 弹道系统优化- 激光类bullet", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004794629", "name": "客户端审核 - 弹道系统优化- AOE伤害&子弹爆炸", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004792154", "name": "玄铁飞天盾 - 格挡成功超出弧度生成多个盾后,若当前盾X秒内未再次受击则消散,直到仅剩下一个盾时,回到1倍大小", "due": "2026-04-02", "status": "status_7"}}, {"Story": {"id": "1158335167004792153", "name": "玄铁飞天盾 - 格挡成功后,X秒内未再次受击,则平滑往环绕半径轨道上移动", "due": "2026-04-02", "status": "status_7"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:35:42", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "module": "tapd", "operation": "bugs", "success": true, "request": {"workspace_id": "58335167", "current_owner": "BardLin", "fields": "id,title,deadline,status"}, "response": {"status": 1, "data": [{"Bug": {"id": "1158335167002283694", "title": "受击动画中,root质心需要跟随人物模型运动(如击飞、击浮空时root需要向上跟随),否则浮空连击时,敌人位置会频繁上下跳动。", "deadline": "2025-12-05", "status": "closed"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:35:42", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "module": "tapd", "operation": "bugs", "success": true, "request": {"workspace_id": "58335167", "current_owner": "星渊", "fields": "id,title,deadline,status"}, "response": {"status": 1, "data": [{"Bug": {"id": "1158335167002296797", "title": "优化性能,分辨率提升为1080P,静态帧率基本稳定60fps", "deadline": "2025-12-22", "status": "closed"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:35:42", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "module": "tapd", "operation": "bugs", "success": true, "request": {"workspace_id": "58335167", "current_owner": "mithril", "fields": "id,title,deadline,status"}, "response": {"status": 1, "data": [{"Bug": {"id": "1158335167002280921", "title": "【UI】【单机】血条UI歪了,不在屏幕正中间了@mithril(hanjingchao)", "deadline": "2025-12-01", "status": "closed"}}, {"Bug": {"id": "1158335167002280929", "title": "【联机】【弹道】左键第三段,第四段,飞剑子弹数量会丢失几根@mithril(hanjingchao)", "deadline": "2025-12-02", "status": "closed"}}, {"Bug": {"id": "1158335167002280930", "title": "【联机】【弹道】子弹受击特效丢失了@mithril(hanjingchao)", "deadline": "2025-12-01", "status": "closed"}}, {"Bug": {"id": "1158335167002280931", "title": "【联机】【UI】对方的体力条会显示得特别大@mithril(hanjingchao)", "deadline": "2025-12-02", "status": "closed"}}, {"Bug": {"id": "1158335167002283432", "title": "更新之后,放左键,没目标时弹道坏了,不会正确追踪地形", "deadline": "2025-12-09", "status": "closed"}}, {"Bug": {"id": "1158335167002287668", "title": "格挡成功后,延迟时间内盾也要保证和角色相对移动,(当前是会静止在原地,不跟随角色移动)", "deadline": "2025-12-12", "status": "closed"}}, {"Bug": {"id": "1158335167002287671", "title": "格挡成功后,延迟时间内再次格挡,则要刷新当前延迟时间(当前延迟时间内再次受击,延迟时间感觉并没有被刷新)", "deadline": "2025-12-16", "status": "closed"}}, {"Bug": {"id": "1158335167002287675", "title": "在新生成盾时,盾的内外表现不对,且旋转方向不对", "deadline": "2025-12-12", "status": "closed"}}, {"Bug": {"id": "1158335167002294091", "title": "【联机】【符箓】土牢符会把自己困住", "deadline": "2025-12-18", "status": "closed"}}, {"Bug": {"id": "1158335167002294096", "title": "【联机】【法宝】飞天盾会挡住自己的子弹", "deadline": "2025-12-18", "status": "closed"}}, {"Bug": {"id": "1158335167002295354", "title": "飞天盾相关bug - 子弹会穿盾,对角色造成伤害", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002295358", "title": "限制生成初始总数量为1,避免多次使用生成多个盾(再次使用时刷新盾血量和持续时间)", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002295360", "title": "飞天盾相关bug - 持续时间配置,避免盾一直不消失", "deadline": "2025-12-20", "status": "closed"}}, {"Bug": {"id": "1158335167002296688", "title": "【BUG】包里能不能默认 DisableAllScreenMessages", "deadline": "2025-12-22", "status": "closed"}}, {"Bug": {"id": "1158335167002297733", "title": "【高-BUG】左键普攻,第四段飞剑命中后会延迟一会才消失,希望和前三段一样快速消失", "deadline": "2025-12-25", "status": "closed"}}, {"Bug": {"id": "1158335167002299602", "title": "【高-BUG】土牢符的符纸,自己能锁定", "deadline": "2025-12-27", "status": "closed"}}, {"Bug": {"id": "1158335167002300378", "title": "【bug】土牢符陷阱现在不开神识探查也能看见", "deadline": "2025-12-30", "status": "in_progress"}}, {"Bug": {"id": "1158335167002300531", "title": "【致命-BUG】按G会Crash,复现较为频繁", "deadline": "2025-12-28", "status": "closed"}}, {"Bug": {"id": "1158335167002300717", "title": "【高-BUG】巨剑术诀子弹,命中海王兽场景海面底下的地面时没有正确触发overlap事件,停在表面并播特效", "deadline": "2025-12-31", "status": "closed"}}, {"Bug": {"id": "1158335167002300837", "title": "【高-bug】MoveToTargetEX触发的时候,能直接从土牢符里穿出来,需要正常阻挡自身和目标穿出土牢符", "deadline": "2025-12-31", "status": "closed"}}, {"Bug": {"id": "1158335167002304061", "title": "【需Merge分支】【高-BUG】【联机】现在破定期间Q环绕飞剑,只环绕一次就消失了。", "deadline": "2026-01-07", "status": "closed"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 14:35:42", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "module": "wework", "operation": "webhook/send", "success": true, "request": {"msgtype": "markdown", "markdown": {"content": "⏰ TAPD 过期单提醒(2026-03-12)\n\n\n<@BardLin>(12 条过期)\n1.【需求】主角战斗 - 动作资源 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004787973)\n2.【需求】空中待机 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774664)\n3.【需求】雷属性受击 - 起始 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774629)\n4.【需求】雷属性受击 - 循环 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004774628)\n5.【需求】飞遁动画 | 过期 41 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004828079)\n6.【需求】右键垫步突进 | 过期 34 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827909)\n7.【需求】青凝镜-回收Layout | 过期 13 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827996)\n8.【需求】青凝镜-检视表演Layout | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827991)\n9.【需求】青凝镜-召唤Layout | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827989)\n10.【需求】空中右键下劈 | 过期 12 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827910)\n11.【需求】噬金虫召唤动画Layout | 过期 3 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004827929)\n12.【需求】3C-基础移动-Bug-Dodge卡帧 | 过期 2 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004866823)\n\n\n========================\n<@mi>(2 条过期)\n13.【缺陷】【bug】土牢符陷阱现在不开神识探查也能看见 | 过期 72 天 | [查看](https://www.tapd.cn/58335167/bugtrace/bugs/view?bug_id=1158335167002300378)\n14.【需求】客户端审核 - 消耗品使用逻辑 | 过期 6 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004828679)\n\n\n========================\n<@xingyuan>(13 条过期)\n15.【需求】AS脚本Bind扩展 | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839302)\n16.【需求】尝试AS写Validator | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839301)\n17.【需求】Data Validator框架 | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839234)\n18.【需求】材质Mask模式不受motion blur影响 | 过期 35 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839323)\n19.【需求】Kawaii,Magic,AnimVelet调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839272)\n20.【需求】Chaos布料算法调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839270)\n21.【需求】编译Android版 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839267)\n22.【需求】对GPU解算进行改近 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839266)\n23.【需求】理解GPU算法 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839259)\n24.【需求】调试和理解NvCloth算法 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839246)\n25.【需求】NvCloth调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839241)\n26.【需求】布料解算基建 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839239)\n27.【需求】3C-基础移动-Bug-Dodge卡帧 | 过期 2 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004866823)\n\n\n========================\n共 27 条过期单,请今日内更新状态 🙏"}, "mentioned_list": ["BardLin", "mi", "xingyuan"]}, "response": {"errcode": 0, "errmsg": "ok"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "end_sync", "timestamp": "2026-03-12 14:35:42", "task": "task3", "sync_id": "task3_20260312_143541_36dab0b7", "success": true, "stats": {"overdue_count": 27}, "error_message": null, "extra": {}} +{"event_type": "start_sync", "timestamp": "2026-03-12 15:22:00", "task": "task3", "sync_id": "task3_20260312_152200_38d7444c", "trigger": "manual", "metadata": {}} +{"event_type": "end_sync", "timestamp": "2026-03-12 15:22:02", "task": "task3", "sync_id": "task3_20260312_152200_38d7444c", "success": false, "stats": {}, "error_message": "'str' object has no attribute 'get'", "extra": {}} +{"event_type": "start_sync", "timestamp": "2026-03-12 15:24:00", "task": "task3", "sync_id": "task3_20260312_152400_1b9bb4ae", "trigger": "manual", "metadata": {}} +{"event_type": "end_sync", "timestamp": "2026-03-12 15:24:01", "task": "task3", "sync_id": "task3_20260312_152400_1b9bb4ae", "success": false, "stats": {}, "error_message": "'str' object has no attribute 'get'", "extra": {}} +{"event_type": "start_sync", "timestamp": "2026-03-12 15:35:00", "task": "task3", "sync_id": "task3_20260312_153500_8f56d85c", "trigger": "manual", "metadata": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 15:35:03", "task": "task3", "sync_id": "task3_20260312_153500_8f56d85c", "module": "tapd", "operation": "stories", "success": true, "request": {"workspace_id": "58335167", "owner": "星渊", "fields": "id,name,due,status"}, "response": {"status": 1, "data": [{"Story": {"id": "1158335167004866823", "name": "3C-基础移动-Bug-Dodge卡帧", "due": "2026-03-10", "status": "status_9"}}, {"Story": {"id": "1158335167004839323", "name": "材质Mask模式不受motion blur影响", "due": "2026-02-05", "status": "status_9"}}, {"Story": {"id": "1158335167004839302", "name": "AS脚本Bind扩展", "due": "2026-02-03", "status": "status_10"}}, {"Story": {"id": "1158335167004839301", "name": "尝试AS写Validator", "due": "2026-02-03", "status": "status_10"}}, {"Story": {"id": "1158335167004839299", "name": "简单Sample跑下流程", "due": "2026-02-03", "status": "status_8"}}, {"Story": {"id": "1158335167004839298", "name": "文档阅读", "due": "2026-02-03", "status": "status_8"}}, {"Story": {"id": "1158335167004839272", "name": "Kawaii,Magic,AnimVelet调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839270", "name": "Chaos布料算法调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839267", "name": "编译Android版", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839266", "name": "对GPU解算进行改近", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839263", "name": "育碧GPU布料结算的GDC Paper", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839259", "name": "理解GPU算法", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839251", "name": "增加Profiler", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839246", "name": "调试和理解NvCloth算法", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839242", "name": "编译NvCloth", "due": "2026-02-13", "status": "status_8"}}, {"Story": {"id": "1158335167004839241", "name": "NvCloth调研", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839239", "name": "布料解算基建", "due": "2026-02-13", "status": "status_5"}}, {"Story": {"id": "1158335167004839234", "name": "Data Validator框架", "due": "2026-02-03", "status": "status_5"}}, {"Story": {"id": "1158335167004834466", "name": "Horde相关-持续开发项", "due": "2026-05-30", "status": "status_5"}}, {"Story": {"id": "1158335167004834018", "name": "【引擎/TA】2026年1月 - 凡人各组月度产出梳理", "due": "2026-01-28", "status": "status_8"}}, {"Story": {"id": "1158335167004828309", "name": "技术基建-基础可过滤编辑器控件开发", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004802628", "name": "技术基建-XianDebugger-法术场Debugger", "due": null, "status": "status_9"}}, {"Story": {"id": "1158335167004802626", "name": "技术基建-XianDebugger", "due": null, "status": "status_5"}}, {"Story": {"id": "1158335167004800837", "name": "VAT贴图Foramt以及各种选项的意义", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004800834", "name": "VAT贴图尺寸和种类优化", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800832", "name": "VAT内存优化", "due": null, "status": "status_7"}}, {"Story": {"id": "1158335167004800829", "name": "内存Profiling", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800828", "name": "内存优化", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800819", "name": "Async优化Lumen反射", "due": null, "status": "status_8"}}, {"Story": {"id": "1158335167004800816", "name": "优化Lumen反射,包括水的反射性能", "due": null, "status": "status_8"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 15:35:03", "task": "task3", "sync_id": "task3_20260312_153500_8f56d85c", "module": "tapd", "operation": "bugs", "success": true, "request": {"workspace_id": "58335167", "current_owner": "星渊", "fields": "id,title,deadline,status"}, "response": {"status": 1, "data": [{"Bug": {"id": "1158335167002296797", "title": "优化性能,分辨率提升为1080P,静态帧率基本稳定60fps", "deadline": "2025-12-22", "status": "closed"}}], "info": "success"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "api_call", "timestamp": "2026-03-12 15:35:03", "task": "task3", "sync_id": "task3_20260312_153500_8f56d85c", "module": "wework", "operation": "webhook/send", "success": true, "request": {"msgtype": "markdown", "markdown": {"content": "⏰ TAPD 过期单提醒(2026-03-12)\n\n\n<@xingyuan>(13 条过期)\n1.【需求】AS脚本Bind扩展 | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839302)\n2.【需求】尝试AS写Validator | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839301)\n3.【需求】Data Validator框架 | 过期 37 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839234)\n4.【需求】材质Mask模式不受motion blur影响 | 过期 35 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839323)\n5.【需求】Kawaii,Magic,AnimVelet调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839272)\n6.【需求】Chaos布料算法调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839270)\n7.【需求】编译Android版 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839267)\n8.【需求】对GPU解算进行改近 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839266)\n9.【需求】理解GPU算法 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839259)\n10.【需求】调试和理解NvCloth算法 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839246)\n11.【需求】NvCloth调研 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839241)\n12.【需求】布料解算基建 | 过期 27 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004839239)\n13.【需求】3C-基础移动-Bug-Dodge卡帧 | 过期 2 天 | [查看](https://www.tapd.cn/58335167/prong/stories/view/1158335167004866823)\n\n\n========================\n共 13 条过期单,请今日内更新状态 🙏"}, "mentioned_list": ["xingyuan"]}, "response": {"errcode": 0, "errmsg": "ok"}, "error_message": null, "duration_ms": null, "extra": {}} +{"event_type": "end_sync", "timestamp": "2026-03-12 15:35:03", "task": "task3", "sync_id": "task3_20260312_153500_8f56d85c", "success": true, "stats": {"overdue_count": 13}, "error_message": null, "extra": {}} diff --git a/src/api_test.py b/src/api_test.py index eacf8eb..d460e95 100644 --- a/src/api_test.py +++ b/src/api_test.py @@ -421,6 +421,65 @@ class WeWorkAPITester: print(f"✗ 请求异常: {str(e)}") return False + def get_sheet_list(self, docid): + """ + 获取智能表格的子表列表 + + Args: + docid: 文档ID + + Returns: + list: 子表列表,失败返回None + """ + print("\n=== 获取智能表格子表列表 ===") + + if not self.access_token: + print("✗ 请先获取access_token") + return None + + url = f"{self.base_url}/wedoc/smartsheet/get_sheet" + params = {"access_token": self.access_token} + data = {"docid": docid} + + try: + response = requests.post(url, params=params, json=data, timeout=10) + response_data = response.json() + + # 记录API调用 + request_data = { + "url": url, + "params": {"access_token": "***"}, + "body": data + } + self._log_api_call("get_sheet_list", request_data, response_data) + + if response_data.get("errcode") == 0: + sheets = response_data.get("sheet_list", []) + print(f"✓ 成功获取子表列表") + print(f" 文档ID: {docid}") + print(f" 子表数量: {len(sheets)}") + + if sheets: + print("\n子表列表:") + print("-" * 60) + for idx, sheet in enumerate(sheets, 1): + sheet_id = sheet.get('sheet_id', '(无ID)') + title = sheet.get('title', '(无标题)') + print(f" {idx}. {title}") + print(f" sheet_id: {sheet_id}") + print("-" * 60) + + return sheets + else: + print(f"✗ 获取失败") + print(f" 错误码: {response_data.get('errcode')}") + print(f" 错误信息: {response_data.get('errmsg')}") + return None + + except Exception as e: + print(f"✗ 请求异常: {str(e)}") + return None + def send_message(self, content): """ 发送应用消息 @@ -1230,14 +1289,15 @@ def print_menu(): print("3. 重命名文档") print("4. 删除文档") print("5. 发送应用消息") + print("6. 查询智能表格子表列表") print("\n【TAPD API】") - print("6. 获取缺陷字段配置") - print("7. 获取需求字段配置") - print("8. 获取需求") - print("9. 获取附件列表") - print("10. 上传附件") + print("7. 获取缺陷字段配置") + print("8. 获取需求字段配置") + print("9. 获取需求") + print("10. 获取附件列表") + print("11. 上传附件") print("\n【其他】") - print("11. 查看日志文件") + print("12. 查看日志文件") print("0. 退出") print("="*50) @@ -1249,7 +1309,7 @@ def main(): while True: print_menu() - choice = input("\n请选择操作 (0-11): ").strip() + choice = input("\n请选择操作 (0-12): ").strip() if choice == "0": print("\n感谢使用,再见!") @@ -1321,14 +1381,22 @@ def main(): wework_tester.send_message(content) elif choice == "6": + # 查询智能表格子表列表 + docid = input("\n请输入文档ID: ").strip() + if docid: + wework_tester.get_sheet_list(docid) + else: + print("✗ 文档ID不能为空") + + elif choice == "7": # 获取TAPD缺陷字段配置 tapd_tester.get_bug_custom_fields() - elif choice == "7": + elif choice == "8": # 获取TAPD需求字段配置 tapd_tester.get_story_fields_info() - elif choice == "8": + elif choice == "9": # 获取TAPD需求 story_id = input("\n请输入需求ID: ").strip() if not story_id: @@ -1336,7 +1404,7 @@ def main(): continue tapd_tester.get_story(story_id) - elif choice == "9": + elif choice == "10": # 获取TAPD附件列表 print("\n=== 获取附件列表 ===") print("是否需要添加筛选条件?") @@ -1374,7 +1442,7 @@ def main(): limit=limit ) - elif choice == "10": + elif choice == "11": # 上传附件到TAPD print("\n=== 上传附件 ===") file_path = input("请输入文件路径: ").strip() @@ -1418,7 +1486,7 @@ def main(): overwrite=overwrite ) - elif choice == "11": + elif choice == "12": print("\n=== 查看日志文件 ===") try: with open(wework_tester.log_file, 'r', encoding='utf-8') as f: diff --git a/src3/config.py b/src3/config.py index 4b46b7b..b61dd77 100644 --- a/src3/config.py +++ b/src3/config.py @@ -1,7 +1,13 @@ """任务三配置管理""" -from src.config import ConfigManager +import sys from pathlib import Path +# 添加项目根目录到Python路径 +project_root = Path(__file__).parent.parent +sys.path.insert(0, str(project_root)) + +from src.config import ConfigManager + class Task3ConfigManager(ConfigManager): """任务三配置管理器""" @@ -45,36 +51,61 @@ class Task3ConfigManager(ConfigManager): raise ValueError("webhook_url配置项不能为空") return webhook_url + def get_smartsheet_config(self) -> dict: + """获取智能表格配置""" + if not self.config.has_section('Smartsheet'): + raise ValueError("配置文件缺少[Smartsheet]节") + if not self.config.has_option('Smartsheet', 'docid'): + raise ValueError("配置文件[Smartsheet]节缺少docid配置项") + if not self.config.has_option('Smartsheet', 'sheet_id'): + raise ValueError("配置文件[Smartsheet]节缺少sheet_id配置项") + + docid = self.config.get('Smartsheet', 'docid').strip() + sheet_id = self.config.get('Smartsheet', 'sheet_id').strip() + + if not docid or not sheet_id: + raise ValueError("docid和sheet_id配置项不能为空") + + return {'docid': docid, 'sheet_id': sheet_id} + def get_tech_team_config(self) -> dict: - """解析技术组成员配置 + """从智能表格加载技术组成员配置 返回: { 'member_list': ['范宇', '杰割', '周浩'], 'user_mapping': {'范宇': 'FanYu', '杰割': 'JieGe', '周浩': 'ZhouHao'} } """ - if not self.config.has_section('TechTeam'): - raise ValueError("配置文件缺少[TechTeam]节") - if not self.config.has_option('TechTeam', 'members'): - raise ValueError("配置文件[TechTeam]节缺少members配置项") + from src.token_manager import TokenManager + from src.smartsheet import SmartSheetAPI - members_str = self.config.get('TechTeam', 'members').strip() - if not members_str: - raise ValueError("members配置项不能为空") + # 获取配置 + smartsheet_config = self.get_smartsheet_config() + docid = smartsheet_config['docid'] + sheet_id = smartsheet_config['sheet_id'] + + # 获取access_token + token_manager = TokenManager() + access_token = token_manager.get_token() + + # 读取智能表格 + api = SmartSheetAPI(access_token, docid) + records_result = api.get_records(sheet_id) + records = records_result['records'] member_list = [] user_mapping = {} - for item in members_str.split(','): - item = item.strip() - if ':' not in item: - raise ValueError(f"成员配置格式错误: {item},应为'TAPD用户名:企微UserID'") - tapd_name, wework_id = item.split(':', 1) - tapd_name = tapd_name.strip() - wework_id = wework_id.strip() - if not tapd_name or not wework_id: - raise ValueError(f"成员配置格式错误: {item}") - member_list.append(tapd_name) - user_mapping[tapd_name] = wework_id + for record in records: + tapd_name = api.get_field_value_by_title(record, 'TAPD用户名') + wework_id = api.get_field_value_by_title(record, '企微UserID') + enabled = api.get_field_value_by_title(record, '是否启用') + + if enabled == '是' and tapd_name and wework_id: + member_list.append(tapd_name) + user_mapping[tapd_name] = wework_id + + if not member_list: + raise ValueError("智能表格中没有启用的技术组成员") return { 'member_list': member_list, diff --git a/src3/scheduler.py b/src3/scheduler.py new file mode 100644 index 0000000..25a7d1c --- /dev/null +++ b/src3/scheduler.py @@ -0,0 +1,98 @@ +"""任务三定时调度器""" +import sys +import signal +import time +from pathlib import Path +from datetime import datetime + +# 添加项目根目录到Python路径 +project_root = Path(__file__).parent.parent +sys.path.insert(0, str(project_root)) + +import schedule +from src3.main import run_once + + +class Task3Scheduler: + """任务三定时调度器""" + + def __init__(self): + self.running = True + self.total_runs = 0 + self.success_count = 0 + self.fail_count = 0 + self.start_time = datetime.now() + + # 注册信号处理 + signal.signal(signal.SIGINT, self._signal_handler) + signal.signal(signal.SIGTERM, self._signal_handler) + + def _signal_handler(self, signum, frame): + """处理退出信号""" + print("\n收到退出信号,等待当前任务完成...") + self.running = False + + def _is_workday(self): + """判断是否为工作日(周一到周五)""" + return datetime.now().weekday() < 5 + + def _job(self): + """定时任务""" + if not self._is_workday(): + print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 今天是周末,跳过推送") + return + + print(f"\n{'='*50}") + print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 开始执行过期单推送") + print(f"{'='*50}") + + self.total_runs += 1 + + try: + run_once() + self.success_count += 1 + except Exception as e: + self.fail_count += 1 + print(f"执行失败: {e}") + + def start(self): + """启动调度器""" + from src3.config import Task3ConfigManager + + config = Task3ConfigManager() + push_time = config.get_push_time() + + print("="*50) + print("任务三:TAPD过期单推送调度器") + print("="*50) + print(f"推送时间: 每个工作日 {push_time}") + print(f"启动时间: {self.start_time.strftime('%Y-%m-%d %H:%M:%S')}") + print("="*50) + + # 设置定时任务 + schedule.every().day.at(push_time).do(self._job) + + # 循环执行 + while self.running: + schedule.run_pending() + time.sleep(1) + + # 退出统计 + self._print_stats() + + def _print_stats(self): + """打印运行统计""" + print("\n" + "="*50) + print("运行统计") + print("="*50) + print(f"启动时间: {self.start_time.strftime('%Y-%m-%d %H:%M:%S')}") + print(f"结束时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + print(f"总执行次数: {self.total_runs}") + print(f"成功次数: {self.success_count}") + print(f"失败次数: {self.fail_count}") + print("="*50) + + +if __name__ == "__main__": + scheduler = Task3Scheduler() + scheduler.start()