From de82ddf7cd74a66fa7731b25815cf21b96fe4dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=B3=E4=B8=AD=E4=BC=9F?= Date: Thu, 17 Jul 2025 15:47:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VWED任务模块接口文档/地图数据推送接口文档.md | 18 +- VWED任务模块接口文档/库位管理接口文档.md | 5 - .../__pycache__/operate_point.cpython-312.pyc | Bin 6672 -> 6475 bytes .../operate_point_layer.cpython-312.pyc | Bin 7802 -> 7620 bytes data/models/operate_point.py | 4 +- data/models/operate_point_layer.py | 6 +- logs/app.log | 1072 +++++++++++++++++ .../operate_point_api.cpython-312.pyc | Bin 27510 -> 27289 bytes .../__pycache__/map_model.cpython-312.pyc | Bin 8528 -> 8147 bytes .../operate_point_model.cpython-312.pyc | Bin 22548 -> 22350 bytes routes/model/map_model.py | 7 +- routes/model/operate_point_model.py | 4 +- routes/operate_point_api.py | 4 - .../map_data_service.cpython-312.pyc | Bin 24483 -> 23910 bytes .../operate_point_service.cpython-312.pyc | Bin 57265 -> 56688 bytes .../robot_scheduling.cpython-312.pyc | Bin 39499 -> 39666 bytes .../execution/handlers/robot_scheduling.py | 7 +- services/map_data_service.py | 13 +- services/operate_point_service.py | 7 +- 19 files changed, 1093 insertions(+), 54 deletions(-) diff --git a/VWED任务模块接口文档/地图数据推送接口文档.md b/VWED任务模块接口文档/地图数据推送接口文档.md index 01032b1..0b09d34 100644 --- a/VWED任务模块接口文档/地图数据推送接口文档.md +++ b/VWED任务模块接口文档/地图数据推送接口文档.md @@ -94,53 +94,49 @@ "operate_points": [ { "station_name": "STATION-A-001", - "storage_location_name": "库位A001", "area_name": "一般存储区B", "max_layers": 2, "layers": [ { - "layer_name": "1-1" + "layer_name": "1-1" // 库位名称 }, { - "layer_name": "1-2" + "layer_name": "1-2" // 库位名称 } ] }, { "station_name": "STATION-B-001", - "storage_location_name": "库位B002", "area_name": "一般存储区B", "max_layers": 1, "layers": [ { - "layer_name": "2-1" + "layer_name": "2-1" //库位名称 } ] }, { "station_name": "STATION-B-004", - "storage_location_name": "库位B004", "area_name": "一般存储区C", "max_layers": 3, "layers": [ { - "layer_name": "4-1" + "layer_name": "4-1" //库位名称 }, { - "layer_name": "4-2" + "layer_name": "4-2" // 库位名称 }, { - "layer_name": "4-3" + "layer_name": "4-3"// 库位名称 } ] }, { "station_name": "STATION-B-003", - "storage_location_name": "库位B003", "max_layers": 1, "layers": [ { - "layer_name": "3-1" + "layer_name": "3-1" //库位名称 } ] } diff --git a/VWED任务模块接口文档/库位管理接口文档.md b/VWED任务模块接口文档/库位管理接口文档.md index f9b5eae..dfbf365 100644 --- a/VWED任务模块接口文档/库位管理接口文档.md +++ b/VWED任务模块接口文档/库位管理接口文档.md @@ -31,7 +31,6 @@ | scene_id | string | 否 | 场景ID | | storage_area_id | string | 否 | 库区ID | | station_name | string | 否 | 站点名称(支持模糊搜索) | -| storage_location_name | string | 否 | 库位名称(支持模糊搜索) | | layer_name | string | 否 | 层名称(支持模糊搜索) | | is_disabled | boolean | 否 | 是否禁用 | | is_occupied | boolean | 否 | 是否占用 | @@ -82,7 +81,6 @@ }, "operate_point_id": "637defff-4670-4574-a73e-033bc94941a5", "station_name": "STATION-B-004", - "storage_location_name": "库位B004", "scene_id": "1936411520272753371", "storage_area_id": "df28bb5a-f88f-4825-93e6-a1dae7c34bb1", "storage_area_type": "general", @@ -141,7 +139,6 @@ | ------------------------- | ------- | -------------------------------- | | operate_point_id | string | 动作点ID | | station_name | string | 站点名称 | -| storage_location_name | string | 库位名称 | | scene_id | string | 场景ID | | storage_area_id | string | 库区ID | | storage_area_type | string | 库区类型 | @@ -405,7 +402,6 @@ GET /api/vwed-operate-point/list?scene_id=scene-001&is_occupied=false&page=1&pag "operate_point_info": { "id": "point-001", "station_name": "存储站点A", - "storage_location_name": "A1库位", "scene_id": "scene-001", "area_name": "密集存储区" }, @@ -454,7 +450,6 @@ GET /api/vwed-operate-point/list?scene_id=scene-001&is_occupied=false&page=1&pag | --------------------- | ------ | ------------ | | id | string | 动作点ID | | station_name | string | 站点名称 | -| storage_location_name | string | 库位名称 | | scene_id | string | 场景ID | | area_name | string | 库区名称 | diff --git a/data/models/__pycache__/operate_point.cpython-312.pyc b/data/models/__pycache__/operate_point.cpython-312.pyc index 132e65f59f4a95a1fd80ca0083e1b1eab182da42..0869d9ff9503ce71c6d5ef5881098b4325534eb0 100644 GIT binary patch delta 1340 zcmZ{k%TE(g6vk(!Ep6#@`k1!73RoT^3Z_8wfdP z$yCmeD}M9A^iSJc^Bb1Eh~Kg4v}8b9@-t+NYia-(CT!#wNkeWOGOe+Bj}T^LDPm0j zVXQ@rSz*eM>YxsBEQmiCAvNlgzbf8Rd|=HN=r`CnG*>` zs|tWn--X;ozDw~vNS&!D6m%#%A}<)k;;3D~YHhr1 z#W2B$TD+`n#2eafy(Y)apqw!^i;wA6*(Z2Q=beshMA3G1b~8G=5t-X%nEUK7N5Tkq zp8EkI#_i<;F^9QH$W3wy2uUslNRoR52n1p#xCICcT)&D0YXDRqQ0+4~VE5oDTNVCh z5b(CX*VsgwO~L0;D~q_U{07@Xk(cF5!g1ot#d$K$IdIhAz+;B13Yf3u7uo=B{d)#( zG7c!Z1+&n3C0@QJ6rSIn31RAkq9nB<{)5K%* zlAMAAt|eQ`+N^5U)&sNpi4=U?%p-PyZuvDIh_)6AVoROS!N1E0mkTD-Ngk533ythJxdPbEWjA;~J$sc+h#B zZ#>jr)_F(ULfnwpihaT*KBr6Fk`hv62FYarcj6_%?W6mGe-7G~Oc$lKG~m%=Ys2e8 zU-~SJdqIwZoB;8I(4(Pmy$gn?Ku&`ML54tvK}JC?fQ%DaWn^eh7D4y}frr#{^3g3a zdz?z6+to2n@$u-6-h!XH>e-#_dshX^25`o5{0|NDk!83=xN1q@heG+ zh-j;jAFWOmXEmRytwAMdEh&Pa=;2!#w^*C>k7GK~u;a0O(ssc~tGUG*aqh|bIt`}5OUZOHfgBHJPxg~A=cakmEOtlx* z9;p^gHOng1*m_B(JGSY90Ewk_{h=XQiNXExlNC+Nc8+%LfLRR$vO2!xKy(vX=?P&i z1oN8PFSL=AW5R$BVsOrj#~)JUP`pFn{IK`q;$YzIWx~Aq}dvm_O(selN zmwiiK!>;CF^TCF_`RrpR84dp})1}gD+u|rZype7#+%L8(E1Sxu$ zQHwu{?hs^nq2?J@$ItPU7`U?Uv(b(}NW}%S-r}+92gUd5 zp6Ffs^aGu%e-%=q>C$Q*lv8fp$M=;=04&#XXLO^XBwtTV3N%+bZPV?JN528fB NyhD+($+Mk<$Y0%UL74ym diff --git a/data/models/__pycache__/operate_point_layer.cpython-312.pyc b/data/models/__pycache__/operate_point_layer.cpython-312.pyc index b428f002522bc8236846e3db7e262c0673323d5c..0ddf58cc931cc5888ead40d5b4090f725755435a 100644 GIT binary patch delta 1426 zcmZ8gOH30{6rJ~`V5v-@rS!|EK#>lm6cCZW;x`ymBSa#Nii9_Ow9sUVK@3SZ#D$3) z-&W!WV`AvWbfw0f8$;abraON-7ZOZNj4|H(TI$qE=G^PiYZjmN;E4oGpm8E;5(!$RgtdTqIq4V z(Ahv|X126_%arHs$ir=6Ra+#-fx^M64VtQa52wM;k>^|nu3B)p9`3X~RcPWg6g&oF zmx1>hcsKHJTbQpfl!?_CHs~oRipQ=sxTL(o-pc9>Gy3vey@9LAbAAI?E4Vt=VBqTW zT%&>W=eZ^W*MJMr4JNdTW+*Q)>6ba3A08PEMfz|HZzsArbC6-c>uT; z*2coDJssI|oh7j#>sXg!D(hoi>tPaWWd~syf@SwQiM6pqunMytz;<>RFv5BPJ61c@ z{>-+?P56(JBR`yCj{VQTh|ZMY@v>wtZvQZ( zD%C|d%UmMCl2Z#yvxy}B!=lL(#|LO~t9p#MI`A>!*NGXLswO?iKRY9^-742x-0p2Y zX{tF*=!DGUwE+dk7Z0d*{Q}>py%`WkE-bEMO$g97 VYaU!oup4o0Sl4)8-H-_@e*vl-9fAM= delta 1556 zcmZ9LO>7%Q6vuaFH_3Vxf5qRioj8uuWSu2x(iCVuno^ZS4NZZdMy(}?tj^{GB{5yw zg`zZ;AaFq9fQC~Gv?Uj+_)=LyT=+Qj5>={tXb-VCQo#vP5JEyi;=QqJ)~vMuH}jkS zym>RTdw1gRN#{MMQD{c` zR%5Kr5;hjEvmP7k60DmgZ7fk|y*AcUXDJ&?BBN3X>hEjRe~2mN{>DYtO6z3j4+_|AJ3SF4|DZs_1A_s4hKPcgJYy9Q{p_7HNk5h2bswq!s|4qnB{(61|FHo1T=xvQ5v(V8HV;RZe5@%%M8wl*)C@ zLy6AI?J<((`|V#6gHMMd`~&A!bO<(R4Wk@J834)SuamISJmz|v7`vakXzNj7;MY9a zqz=t$+r`{w!Q3oZM{r;aB#-}K0v?zb_ue8#<$LcwnK^;u4O7*DXJ@jdY+=Rm?G=e5EdlXxkLRY}} zVsIFY#o)f!@6F(UzNT&d8Cn;H5BV?Qc(9S8`7EN5G50H&-N5Yh>{)%3zY%$JydPN$ zN;gPVThCrGE%BjPtw_Z#{q)aTVgwUcl}Q$~?-;C<`FBYeiaV1fHjYjl7rggU$v2K`eRe*{_njCN$ z_&|vqa3eaUy!6ofd}Sj#OX!@!zmBDxxLc7!@30p6&#`w>;zmT)ERG2Su2fYgH*&1F PZXUOm`TOxH1xNk`@!m(? diff --git a/data/models/operate_point.py b/data/models/operate_point.py index 55bb415..fd8683d 100644 --- a/data/models/operate_point.py +++ b/data/models/operate_point.py @@ -23,7 +23,7 @@ class OperatePoint(BaseModel): id = Column(CHAR(64), primary_key=True, comment='动作点ID') station_name = Column(String(64), nullable=False, comment='动作站点名称') - storage_location_name = Column(String(64), nullable=False, comment='库位名称') + # storage_location_name = Column(String(64), nullable=False, comment='库位名称') scene_id = Column(String(64), nullable=False, comment='场景ID') # 原有字段 @@ -65,7 +65,7 @@ class OperatePoint(BaseModel): ) def __repr__(self): - return f"" + return f"" def get_available_layers(self): """获取可用层数""" diff --git a/data/models/operate_point_layer.py b/data/models/operate_point_layer.py index d9ac1ef..acbfad9 100644 --- a/data/models/operate_point_layer.py +++ b/data/models/operate_point_layer.py @@ -23,11 +23,11 @@ class OperatePointLayer(BaseModel): id = Column(CHAR(64), primary_key=True, comment='层ID') operate_point_id = Column(CHAR(64), ForeignKey('vwed_operate_point.id'), nullable=False, comment='动作点ID') station_name = Column(String(64), nullable=False, comment='动作点名称') - storage_location_name = Column(String(64), nullable=False, comment='库位名称') + # storage_location_name = Column(String(64), nullable=False, comment='库位名称') area_name = Column(String(64), nullable=True, comment='库区名称') scene_id = Column(String(64), nullable=False, comment='场景ID(冗余字段)') layer_index = Column(Integer, nullable=False, comment='层索引(从1开始)') - layer_name = Column(String(64), comment='层名称') + layer_name = Column(String(64), comment='库位名称') # 货物状态 is_occupied = Column(Boolean, nullable=False, default=False, comment='是否占用') @@ -66,7 +66,7 @@ class OperatePointLayer(BaseModel): ) def __repr__(self): - return f"" + return f"" def can_store_goods(self, weight=None, volume=None): """ diff --git a/logs/app.log b/logs/app.log index 9b57e40..991dddc 100644 --- a/logs/app.log +++ b/logs/app.log @@ -64745,3 +64745,1075 @@ Stack (most recent call last): 2025-07-16 10:49:25,621 - data.session - INFO - 异步数据库连接已关闭 2025-07-16 10:49:25,622 - data.session - INFO - 正在关闭数据库连接... 2025-07-16 10:49:25,622 - data.session - INFO - 数据库连接已关闭 +2025-07-16 11:06:49,926 - utils.component_manager - INFO - 已加载 8 个组件分类,共 52 个组件类型 +2025-07-16 11:06:52,658 - app - INFO - 服务器配置 - Host: 0.0.0.0, Port: 8000, Workers: 1, Reload: False +2025-07-16 11:06:52,669 - asyncio - DEBUG - Using proactor: IocpProactor +2025-07-16 11:06:53,155 - data.session - INFO - 正在初始化数据库... +2025-07-16 11:06:53,216 - data.session - INFO - 数据库 vwed_task 已创建或已存在 +2025-07-16 11:06:53,263 - data.session - INFO - 数据库表初始化完成 +2025-07-16 11:06:54,149 - services.enhanced_scheduler.task_scheduler - INFO - 加载任务调度器配置: 工作线程数=15-30, 队列数=3, 任务超时=3600秒 +2025-07-16 11:06:54,151 - services.enhanced_scheduler.priority_queue_manager - INFO - 初始化优先级队列管理器: 队列数=3, 阈值百分比=[0.1, 0.3, 1.0], 工作线程比例=[0.6, 0.3, 0.1] +2025-07-16 11:06:54,151 - services.enhanced_scheduler.worker_manager - INFO - 初始化工作线程管理器: min=15, max=30, 心跳间隔=120秒, 自动扩缩容间隔=120秒 +2025-07-16 11:06:54,153 - services.enhanced_scheduler.task_persistence - INFO - 初始化任务持久化管理器: 间隔=300秒, 目录=D:\jsw_code\project\VWED_task\data\task_backups, 最大备份数=5 +2025-07-16 11:06:54,154 - services.enhanced_scheduler.periodic_task_manager - INFO - 初始化定时任务管理器: 检查间隔=5秒 +2025-07-16 11:06:54,154 - services.enhanced_scheduler.task_scheduler - INFO - 增强版任务调度器初始化完成 +2025-07-16 11:06:54,156 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 0, 当前工作线程数: 1 +2025-07-16 11:06:54,156 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 1, 当前工作线程数: 2 +2025-07-16 11:06:54,157 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 2, 当前工作线程数: 3 +2025-07-16 11:06:54,158 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 3, 当前工作线程数: 4 +2025-07-16 11:06:54,158 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 4, 当前工作线程数: 5 +2025-07-16 11:06:54,159 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 5, 当前工作线程数: 6 +2025-07-16 11:06:54,159 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 6, 当前工作线程数: 7 +2025-07-16 11:06:54,160 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 7, 当前工作线程数: 8 +2025-07-16 11:06:54,161 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 8, 当前工作线程数: 9 +2025-07-16 11:06:54,162 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 9, 当前工作线程数: 10 +2025-07-16 11:06:54,162 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 10, 当前工作线程数: 11 +2025-07-16 11:06:54,168 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 11, 当前工作线程数: 12 +2025-07-16 11:06:54,175 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 12, 当前工作线程数: 13 +2025-07-16 11:06:54,180 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 13, 当前工作线程数: 14 +2025-07-16 11:06:54,190 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 14, 当前工作线程数: 15 +2025-07-16 11:06:54,207 - services.enhanced_scheduler.worker_manager - INFO - 工作线程管理器启动成功,初始工作线程数: 15 +2025-07-16 11:06:54,217 - services.enhanced_scheduler.task_persistence - INFO - 任务持久化管理器启动成功 +2025-07-16 11:06:54,243 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 启动 +2025-07-16 11:06:54,255 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 启动 +2025-07-16 11:06:54,260 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 启动 +2025-07-16 11:06:54,266 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 启动 +2025-07-16 11:06:54,273 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 启动 +2025-07-16 11:06:54,282 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 启动 +2025-07-16 11:06:54,289 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 启动 +2025-07-16 11:06:54,297 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 启动 +2025-07-16 11:06:54,304 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 启动 +2025-07-16 11:06:54,309 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 启动 +2025-07-16 11:06:54,311 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 启动 +2025-07-16 11:06:54,317 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 启动 +2025-07-16 11:06:54,319 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 启动 +2025-07-16 11:06:54,321 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 启动 +2025-07-16 11:06:54,322 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 启动 +2025-07-16 11:06:54,326 - services.enhanced_scheduler.worker_manager - INFO - 工作线程监控任务启动 +2025-07-16 11:06:54,333 - services.enhanced_scheduler.task_persistence - INFO - 备份工作线程启动 +2025-07-16 11:06:54,344 - aiomysql - DEBUG - caching sha2: succeeded by fast path. +2025-07-16 11:06:55,093 - services.enhanced_scheduler.periodic_task_manager - INFO - 已加载 0 个定时任务 +2025-07-16 11:06:55,105 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务管理器启动成功 +2025-07-16 11:06:55,133 - services.enhanced_scheduler.task_scheduler - INFO - 增强版任务调度器启动成功,工作线程数: 15 +2025-07-16 11:06:55,150 - app - INFO - 增强版任务调度器已启动,最小工作线程数: 15,最大工作线程数: 30 +2025-07-16 11:06:55,173 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务执行器启动 +2025-07-16 11:06:55,184 - services.enhanced_scheduler.task_scheduler - INFO - 任务监控启动 +2025-07-16 11:07:06,509 - middleware.request_logger - INFO - 请求开始: POST /api/vwed-map-data/push 来自 127.0.0.1 +2025-07-16 11:07:06,513 - services.map_data_service - INFO - 开始增量推送地图数据: 场景ID=1936411520272753371 +2025-07-16 11:07:06,513 - services.map_data_service - INFO - 开始处理库区数据: 数量=2 +2025-07-16 11:07:06,516 - services.map_data_service - INFO - 更新库区: 一般存储区B +2025-07-16 11:07:06,517 - services.map_data_service - INFO - 更新库区: 一般存储区C +2025-07-16 11:07:06,518 - services.map_data_service - INFO - 开始处理动作点数据: 数量=4 +2025-07-16 11:07:06,520 - services.map_data_service - INFO - 更新动作点: STATION-A-001 +2025-07-16 11:07:06,523 - services.map_data_service - DEBUG - 更新分层: 1-1 (layer_index=1) +2025-07-16 11:07:06,524 - services.map_data_service - DEBUG - 更新分层: 1-2 (layer_index=2) +2025-07-16 11:07:06,526 - services.map_data_service - INFO - 更新动作点: STATION-B-001 +2025-07-16 11:07:06,527 - services.map_data_service - DEBUG - 更新分层: 2-1 (layer_index=1) +2025-07-16 11:07:06,528 - services.map_data_service - INFO - 更新动作点: STATION-B-004 +2025-07-16 11:07:06,529 - services.map_data_service - DEBUG - 更新分层: 4-1 (layer_index=1) +2025-07-16 11:07:06,530 - services.map_data_service - DEBUG - 更新分层: 4-2 (layer_index=2) +2025-07-16 11:07:06,530 - services.map_data_service - DEBUG - 更新分层: 4-3 (layer_index=3) +2025-07-16 11:07:06,531 - services.map_data_service - INFO - 更新动作点: STATION-B-003 +2025-07-16 11:07:06,531 - services.map_data_service - DEBUG - 更新分层: 3-1 (layer_index=1) +2025-07-16 11:07:06,550 - services.map_data_service - INFO - 地图数据推送成功: 场景ID=1936411520272753371, 库区(新增=0,更新=2), 动作点(新增=0,更新=4), 分层(新增=0,更新=7) +2025-07-16 11:07:06,551 - middleware.request_logger - INFO - 请求完成: POST /api/vwed-map-data/push 状态码: 200 耗时: 0.0420秒 +2025-07-16 11:08:55,349 - services.enhanced_scheduler.task_scheduler - INFO - 清理 1 个僵尸任务 +2025-07-16 11:09:55,352 - services.enhanced_scheduler.task_scheduler - INFO - 清理 1 个僵尸任务 +2025-07-16 11:10:54,364 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 0 心跳超时,重启中... +2025-07-16 11:10:54,367 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 被取消 +2025-07-16 11:10:54,367 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 结束 +2025-07-16 11:10:54,368 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 0, 当前工作线程数: 14 +2025-07-16 11:10:54,368 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 0, 当前工作线程数: 15 +2025-07-16 11:10:54,369 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 1 心跳超时,重启中... +2025-07-16 11:10:54,369 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 启动 +2025-07-16 11:10:54,370 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 被取消 +2025-07-16 11:10:54,370 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 结束 +2025-07-16 11:10:54,372 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 1, 当前工作线程数: 14 +2025-07-16 11:10:54,373 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 1, 当前工作线程数: 15 +2025-07-16 11:10:54,374 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 2 心跳超时,重启中... +2025-07-16 11:10:54,374 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 启动 +2025-07-16 11:10:54,375 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 被取消 +2025-07-16 11:10:54,376 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 结束 +2025-07-16 11:10:54,378 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 2, 当前工作线程数: 14 +2025-07-16 11:10:54,378 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 2, 当前工作线程数: 15 +2025-07-16 11:10:54,379 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 3 心跳超时,重启中... +2025-07-16 11:10:54,381 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 被取消 +2025-07-16 11:10:54,382 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 结束 +2025-07-16 11:10:54,383 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 启动 +2025-07-16 11:10:54,384 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 3, 当前工作线程数: 14 +2025-07-16 11:10:54,385 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 3, 当前工作线程数: 15 +2025-07-16 11:10:54,385 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 4 心跳超时,重启中... +2025-07-16 11:10:54,386 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 启动 +2025-07-16 11:10:54,387 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 被取消 +2025-07-16 11:10:54,388 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 结束 +2025-07-16 11:10:54,389 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 4, 当前工作线程数: 14 +2025-07-16 11:10:54,390 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 4, 当前工作线程数: 15 +2025-07-16 11:10:54,391 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 5 心跳超时,重启中... +2025-07-16 11:10:54,392 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 启动 +2025-07-16 11:10:54,392 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 被取消 +2025-07-16 11:10:54,393 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 结束 +2025-07-16 11:10:54,394 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 5, 当前工作线程数: 14 +2025-07-16 11:10:54,395 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 5, 当前工作线程数: 15 +2025-07-16 11:10:54,397 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 6 心跳超时,重启中... +2025-07-16 11:10:54,398 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 启动 +2025-07-16 11:10:54,401 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 被取消 +2025-07-16 11:10:54,402 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 结束 +2025-07-16 11:10:54,403 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 6, 当前工作线程数: 14 +2025-07-16 11:10:54,404 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 6, 当前工作线程数: 15 +2025-07-16 11:10:54,406 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 7 心跳超时,重启中... +2025-07-16 11:10:54,407 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 启动 +2025-07-16 11:10:54,409 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 被取消 +2025-07-16 11:10:54,412 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 结束 +2025-07-16 11:10:54,413 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 7, 当前工作线程数: 14 +2025-07-16 11:10:54,414 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 7, 当前工作线程数: 15 +2025-07-16 11:10:54,415 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 8 心跳超时,重启中... +2025-07-16 11:10:54,415 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 启动 +2025-07-16 11:10:54,416 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 被取消 +2025-07-16 11:10:54,416 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 结束 +2025-07-16 11:10:54,416 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 8, 当前工作线程数: 14 +2025-07-16 11:10:54,416 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 8, 当前工作线程数: 15 +2025-07-16 11:10:54,417 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 9 心跳超时,重启中... +2025-07-16 11:10:54,417 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 启动 +2025-07-16 11:10:54,417 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 被取消 +2025-07-16 11:10:54,417 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 结束 +2025-07-16 11:10:54,417 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 9, 当前工作线程数: 14 +2025-07-16 11:10:54,417 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 9, 当前工作线程数: 15 +2025-07-16 11:10:54,417 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 10 心跳超时,重启中... +2025-07-16 11:10:54,417 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 启动 +2025-07-16 11:10:54,418 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 被取消 +2025-07-16 11:10:54,420 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 结束 +2025-07-16 11:10:54,422 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 10, 当前工作线程数: 14 +2025-07-16 11:10:54,423 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 10, 当前工作线程数: 15 +2025-07-16 11:10:54,424 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 11 心跳超时,重启中... +2025-07-16 11:10:54,424 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 启动 +2025-07-16 11:10:54,429 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 被取消 +2025-07-16 11:10:54,430 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 结束 +2025-07-16 11:10:54,430 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 11, 当前工作线程数: 14 +2025-07-16 11:10:54,432 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 11, 当前工作线程数: 15 +2025-07-16 11:10:54,434 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 12 心跳超时,重启中... +2025-07-16 11:10:54,435 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 启动 +2025-07-16 11:10:54,435 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 被取消 +2025-07-16 11:10:54,437 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 结束 +2025-07-16 11:10:54,437 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 12, 当前工作线程数: 14 +2025-07-16 11:10:54,438 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 12, 当前工作线程数: 15 +2025-07-16 11:10:54,439 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 13 心跳超时,重启中... +2025-07-16 11:10:54,440 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 启动 +2025-07-16 11:10:54,440 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 被取消 +2025-07-16 11:10:54,441 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 结束 +2025-07-16 11:10:54,442 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 13, 当前工作线程数: 14 +2025-07-16 11:10:54,443 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 13, 当前工作线程数: 15 +2025-07-16 11:10:54,444 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 14 心跳超时,重启中... +2025-07-16 11:10:54,444 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 启动 +2025-07-16 11:10:54,446 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 被取消 +2025-07-16 11:10:54,447 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 结束 +2025-07-16 11:10:54,448 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 14, 当前工作线程数: 14 +2025-07-16 11:10:54,449 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 14, 当前工作线程数: 15 +2025-07-16 11:10:54,460 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 启动 +2025-07-16 11:11:55,342 - services.enhanced_scheduler.task_scheduler - INFO - 清理 1 个僵尸任务 +2025-07-16 11:14:54,528 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 0 心跳超时,重启中... +2025-07-16 11:14:54,531 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 被取消 +2025-07-16 11:14:54,531 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 结束 +2025-07-16 11:14:54,531 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 0, 当前工作线程数: 14 +2025-07-16 11:14:54,531 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 0, 当前工作线程数: 15 +2025-07-16 11:14:54,532 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 1 心跳超时,重启中... +2025-07-16 11:14:54,532 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 启动 +2025-07-16 11:14:54,532 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 被取消 +2025-07-16 11:14:54,532 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 结束 +2025-07-16 11:14:54,532 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 1, 当前工作线程数: 14 +2025-07-16 11:14:54,533 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 1, 当前工作线程数: 15 +2025-07-16 11:14:54,533 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 2 心跳超时,重启中... +2025-07-16 11:14:54,533 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 启动 +2025-07-16 11:14:54,533 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 被取消 +2025-07-16 11:14:54,533 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 结束 +2025-07-16 11:14:54,535 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 2, 当前工作线程数: 14 +2025-07-16 11:14:54,535 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 2, 当前工作线程数: 15 +2025-07-16 11:14:54,535 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 3 心跳超时,重启中... +2025-07-16 11:14:54,536 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 启动 +2025-07-16 11:14:54,536 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 被取消 +2025-07-16 11:14:54,536 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 结束 +2025-07-16 11:14:54,536 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 3, 当前工作线程数: 14 +2025-07-16 11:14:54,536 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 3, 当前工作线程数: 15 +2025-07-16 11:14:54,537 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 4 心跳超时,重启中... +2025-07-16 11:14:54,537 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 启动 +2025-07-16 11:14:54,538 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 被取消 +2025-07-16 11:14:54,539 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 结束 +2025-07-16 11:14:54,539 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 4, 当前工作线程数: 14 +2025-07-16 11:14:54,539 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 4, 当前工作线程数: 15 +2025-07-16 11:14:54,539 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 5 心跳超时,重启中... +2025-07-16 11:14:54,539 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 启动 +2025-07-16 11:14:54,540 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 被取消 +2025-07-16 11:14:54,540 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 结束 +2025-07-16 11:14:54,540 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 5, 当前工作线程数: 14 +2025-07-16 11:14:54,540 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 5, 当前工作线程数: 15 +2025-07-16 11:14:54,540 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 6 心跳超时,重启中... +2025-07-16 11:14:54,540 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 启动 +2025-07-16 11:14:54,540 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 被取消 +2025-07-16 11:14:54,541 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 结束 +2025-07-16 11:14:54,541 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 6, 当前工作线程数: 14 +2025-07-16 11:14:54,541 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 6, 当前工作线程数: 15 +2025-07-16 11:14:54,541 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 7 心跳超时,重启中... +2025-07-16 11:14:54,541 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 启动 +2025-07-16 11:14:54,541 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 被取消 +2025-07-16 11:14:54,541 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 结束 +2025-07-16 11:14:54,541 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 7, 当前工作线程数: 14 +2025-07-16 11:14:54,542 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 7, 当前工作线程数: 15 +2025-07-16 11:14:54,544 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 8 心跳超时,重启中... +2025-07-16 11:14:54,544 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 启动 +2025-07-16 11:14:54,544 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 被取消 +2025-07-16 11:14:54,544 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 结束 +2025-07-16 11:14:54,544 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 8, 当前工作线程数: 14 +2025-07-16 11:14:54,544 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 8, 当前工作线程数: 15 +2025-07-16 11:14:54,548 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 9 心跳超时,重启中... +2025-07-16 11:14:54,551 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 启动 +2025-07-16 11:14:54,551 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 被取消 +2025-07-16 11:14:54,552 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 结束 +2025-07-16 11:14:54,553 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 9, 当前工作线程数: 14 +2025-07-16 11:14:54,553 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 9, 当前工作线程数: 15 +2025-07-16 11:14:54,558 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 10 心跳超时,重启中... +2025-07-16 11:14:54,565 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 启动 +2025-07-16 11:14:54,565 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 被取消 +2025-07-16 11:14:54,565 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 结束 +2025-07-16 11:14:54,566 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 10, 当前工作线程数: 14 +2025-07-16 11:14:54,566 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 10, 当前工作线程数: 15 +2025-07-16 11:14:54,566 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 11 心跳超时,重启中... +2025-07-16 11:14:54,567 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 启动 +2025-07-16 11:14:54,567 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 被取消 +2025-07-16 11:14:54,567 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 结束 +2025-07-16 11:14:54,567 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 11, 当前工作线程数: 14 +2025-07-16 11:14:54,568 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 11, 当前工作线程数: 15 +2025-07-16 11:14:54,568 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 12 心跳超时,重启中... +2025-07-16 11:14:54,568 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 启动 +2025-07-16 11:14:54,569 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 被取消 +2025-07-16 11:14:54,569 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 结束 +2025-07-16 11:14:54,570 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 12, 当前工作线程数: 14 +2025-07-16 11:14:54,570 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 12, 当前工作线程数: 15 +2025-07-16 11:14:54,571 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 13 心跳超时,重启中... +2025-07-16 11:14:54,571 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 启动 +2025-07-16 11:14:54,571 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 被取消 +2025-07-16 11:14:54,571 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 结束 +2025-07-16 11:14:54,572 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 13, 当前工作线程数: 14 +2025-07-16 11:14:54,572 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 13, 当前工作线程数: 15 +2025-07-16 11:14:54,575 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 14 心跳超时,重启中... +2025-07-16 11:14:54,576 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 启动 +2025-07-16 11:14:54,577 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 被取消 +2025-07-16 11:14:54,582 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 结束 +2025-07-16 11:14:54,582 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 14, 当前工作线程数: 14 +2025-07-16 11:14:54,582 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 14, 当前工作线程数: 15 +2025-07-16 11:14:54,601 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 启动 +2025-07-16 11:18:54,644 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 0 心跳超时,重启中... +2025-07-16 11:18:54,645 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 被取消 +2025-07-16 11:18:54,645 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 结束 +2025-07-16 11:18:54,646 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 0, 当前工作线程数: 14 +2025-07-16 11:18:54,646 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 0, 当前工作线程数: 15 +2025-07-16 11:18:54,646 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 1 心跳超时,重启中... +2025-07-16 11:18:54,646 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 启动 +2025-07-16 11:18:54,648 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 被取消 +2025-07-16 11:18:54,648 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 结束 +2025-07-16 11:18:54,648 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 1, 当前工作线程数: 14 +2025-07-16 11:18:54,648 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 1, 当前工作线程数: 15 +2025-07-16 11:18:54,649 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 2 心跳超时,重启中... +2025-07-16 11:18:54,649 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 启动 +2025-07-16 11:18:54,649 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 被取消 +2025-07-16 11:18:54,649 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 结束 +2025-07-16 11:18:54,649 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 2, 当前工作线程数: 14 +2025-07-16 11:18:54,650 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 2, 当前工作线程数: 15 +2025-07-16 11:18:54,650 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 3 心跳超时,重启中... +2025-07-16 11:18:54,650 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 启动 +2025-07-16 11:18:54,650 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 被取消 +2025-07-16 11:18:54,650 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 结束 +2025-07-16 11:18:54,651 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 3, 当前工作线程数: 14 +2025-07-16 11:18:54,651 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 3, 当前工作线程数: 15 +2025-07-16 11:18:54,651 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 4 心跳超时,重启中... +2025-07-16 11:18:54,651 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 启动 +2025-07-16 11:18:54,652 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 被取消 +2025-07-16 11:18:54,652 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 结束 +2025-07-16 11:18:54,652 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 4, 当前工作线程数: 14 +2025-07-16 11:18:54,652 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 4, 当前工作线程数: 15 +2025-07-16 11:18:54,653 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 5 心跳超时,重启中... +2025-07-16 11:18:54,653 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 启动 +2025-07-16 11:18:54,653 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 被取消 +2025-07-16 11:18:54,654 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 结束 +2025-07-16 11:18:54,654 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 5, 当前工作线程数: 14 +2025-07-16 11:18:54,654 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 5, 当前工作线程数: 15 +2025-07-16 11:18:54,655 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 6 心跳超时,重启中... +2025-07-16 11:18:54,655 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 启动 +2025-07-16 11:18:54,655 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 被取消 +2025-07-16 11:18:54,655 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 结束 +2025-07-16 11:18:54,656 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 6, 当前工作线程数: 14 +2025-07-16 11:18:54,656 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 6, 当前工作线程数: 15 +2025-07-16 11:18:54,656 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 7 心跳超时,重启中... +2025-07-16 11:18:54,656 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 启动 +2025-07-16 11:18:54,656 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 被取消 +2025-07-16 11:18:54,656 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 结束 +2025-07-16 11:18:54,656 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 7, 当前工作线程数: 14 +2025-07-16 11:18:54,657 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 7, 当前工作线程数: 15 +2025-07-16 11:18:54,657 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 8 心跳超时,重启中... +2025-07-16 11:18:54,657 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 启动 +2025-07-16 11:18:54,657 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 被取消 +2025-07-16 11:18:54,657 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 结束 +2025-07-16 11:18:54,657 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 8, 当前工作线程数: 14 +2025-07-16 11:18:54,658 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 8, 当前工作线程数: 15 +2025-07-16 11:18:54,658 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 9 心跳超时,重启中... +2025-07-16 11:18:54,658 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 启动 +2025-07-16 11:18:54,660 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 被取消 +2025-07-16 11:18:54,660 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 结束 +2025-07-16 11:18:54,660 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 9, 当前工作线程数: 14 +2025-07-16 11:18:54,660 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 9, 当前工作线程数: 15 +2025-07-16 11:18:54,660 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 10 心跳超时,重启中... +2025-07-16 11:18:54,660 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 启动 +2025-07-16 11:18:54,663 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 被取消 +2025-07-16 11:18:54,663 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 结束 +2025-07-16 11:18:54,664 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 10, 当前工作线程数: 14 +2025-07-16 11:18:54,664 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 10, 当前工作线程数: 15 +2025-07-16 11:18:54,664 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 11 心跳超时,重启中... +2025-07-16 11:18:54,664 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 启动 +2025-07-16 11:18:54,664 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 被取消 +2025-07-16 11:18:54,664 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 结束 +2025-07-16 11:18:54,664 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 11, 当前工作线程数: 14 +2025-07-16 11:18:54,664 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 11, 当前工作线程数: 15 +2025-07-16 11:18:54,665 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 12 心跳超时,重启中... +2025-07-16 11:18:54,665 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 启动 +2025-07-16 11:18:54,665 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 被取消 +2025-07-16 11:18:54,665 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 结束 +2025-07-16 11:18:54,665 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 12, 当前工作线程数: 14 +2025-07-16 11:18:54,665 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 12, 当前工作线程数: 15 +2025-07-16 11:18:54,665 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 13 心跳超时,重启中... +2025-07-16 11:18:54,667 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 启动 +2025-07-16 11:18:54,667 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 被取消 +2025-07-16 11:18:54,667 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 结束 +2025-07-16 11:18:54,667 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 13, 当前工作线程数: 14 +2025-07-16 11:18:54,667 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 13, 当前工作线程数: 15 +2025-07-16 11:18:54,667 - services.enhanced_scheduler.worker_manager - INFO - 工作线程 14 心跳超时,重启中... +2025-07-16 11:18:54,667 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 启动 +2025-07-16 11:18:54,667 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 被取消 +2025-07-16 11:18:54,668 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 结束 +2025-07-16 11:18:54,668 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 14, 当前工作线程数: 14 +2025-07-16 11:18:54,668 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 14, 当前工作线程数: 15 +2025-07-16 11:18:54,685 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 启动 +2025-07-16 11:18:55,416 - services.enhanced_scheduler.task_scheduler - INFO - 清理 1 个僵尸任务 +2025-07-16 11:19:37,991 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 被取消 +2025-07-16 16:22:24,480 - utils.component_manager - INFO - 已加载 8 个组件分类,共 52 个组件类型 +2025-07-16 16:22:25,585 - app - INFO - 服务器配置 - Host: 0.0.0.0, Port: 8000, Workers: 1, Reload: False +2025-07-16 16:22:25,589 - asyncio - DEBUG - Using proactor: IocpProactor +2025-07-16 16:22:25,678 - data.session - INFO - 正在初始化数据库... +2025-07-16 16:22:25,710 - data.session - INFO - 数据库 vwed_task 已创建或已存在 +2025-07-16 16:22:25,883 - data.session - INFO - 数据库表初始化完成 +2025-07-16 16:22:25,943 - services.enhanced_scheduler.task_scheduler - INFO - 加载任务调度器配置: 工作线程数=15-30, 队列数=3, 任务超时=3600秒 +2025-07-16 16:22:25,947 - services.enhanced_scheduler.priority_queue_manager - INFO - 初始化优先级队列管理器: 队列数=3, 阈值百分比=[0.1, 0.3, 1.0], 工作线程比例=[0.6, 0.3, 0.1] +2025-07-16 16:22:25,952 - services.enhanced_scheduler.worker_manager - INFO - 初始化工作线程管理器: min=15, max=30, 心跳间隔=120秒, 自动扩缩容间隔=120秒 +2025-07-16 16:22:25,954 - services.enhanced_scheduler.task_persistence - INFO - 初始化任务持久化管理器: 间隔=300秒, 目录=D:\jsw_code\project\VWED_task\data\task_backups, 最大备份数=5 +2025-07-16 16:22:25,959 - services.enhanced_scheduler.periodic_task_manager - INFO - 初始化定时任务管理器: 检查间隔=5秒 +2025-07-16 16:22:25,964 - services.enhanced_scheduler.task_scheduler - INFO - 增强版任务调度器初始化完成 +2025-07-16 16:22:25,966 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 0, 当前工作线程数: 1 +2025-07-16 16:22:25,966 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 1, 当前工作线程数: 2 +2025-07-16 16:22:25,966 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 2, 当前工作线程数: 3 +2025-07-16 16:22:25,966 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 3, 当前工作线程数: 4 +2025-07-16 16:22:25,967 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 4, 当前工作线程数: 5 +2025-07-16 16:22:25,967 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 5, 当前工作线程数: 6 +2025-07-16 16:22:25,981 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 6, 当前工作线程数: 7 +2025-07-16 16:22:25,982 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 7, 当前工作线程数: 8 +2025-07-16 16:22:25,982 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 8, 当前工作线程数: 9 +2025-07-16 16:22:25,983 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 9, 当前工作线程数: 10 +2025-07-16 16:22:25,983 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 10, 当前工作线程数: 11 +2025-07-16 16:22:25,983 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 11, 当前工作线程数: 12 +2025-07-16 16:22:25,983 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 12, 当前工作线程数: 13 +2025-07-16 16:22:25,984 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 13, 当前工作线程数: 14 +2025-07-16 16:22:25,984 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 14, 当前工作线程数: 15 +2025-07-16 16:22:25,985 - services.enhanced_scheduler.worker_manager - INFO - 工作线程管理器启动成功,初始工作线程数: 15 +2025-07-16 16:22:25,990 - services.enhanced_scheduler.task_persistence - INFO - 任务持久化管理器启动成功 +2025-07-16 16:22:26,000 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 启动 +2025-07-16 16:22:26,009 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 启动 +2025-07-16 16:22:26,012 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 启动 +2025-07-16 16:22:26,016 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 启动 +2025-07-16 16:22:26,022 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 启动 +2025-07-16 16:22:26,026 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 启动 +2025-07-16 16:22:26,031 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 启动 +2025-07-16 16:22:26,036 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 启动 +2025-07-16 16:22:26,043 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 启动 +2025-07-16 16:22:26,048 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 启动 +2025-07-16 16:22:26,052 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 启动 +2025-07-16 16:22:26,055 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 启动 +2025-07-16 16:22:26,058 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 启动 +2025-07-16 16:22:26,064 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 启动 +2025-07-16 16:22:26,068 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 启动 +2025-07-16 16:22:26,070 - services.enhanced_scheduler.worker_manager - INFO - 工作线程监控任务启动 +2025-07-16 16:22:26,075 - services.enhanced_scheduler.task_persistence - INFO - 备份工作线程启动 +2025-07-16 16:22:26,077 - aiomysql - DEBUG - caching sha2: succeeded by fast path. +2025-07-16 16:22:26,130 - services.enhanced_scheduler.periodic_task_manager - INFO - 已加载 0 个定时任务 +2025-07-16 16:22:26,133 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务管理器启动成功 +2025-07-16 16:22:26,137 - services.enhanced_scheduler.task_scheduler - INFO - 增强版任务调度器启动成功,工作线程数: 15 +2025-07-16 16:22:26,141 - app - INFO - 增强版任务调度器已启动,最小工作线程数: 15,最大工作线程数: 30 +2025-07-16 16:22:26,144 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务执行器启动 +2025-07-16 16:22:26,147 - services.enhanced_scheduler.task_scheduler - INFO - 任务监控启动 +2025-07-16 16:23:17,868 - middleware.request_logger - INFO - 请求开始: POST /api/vwed-map-data/push 来自 127.0.0.1 +2025-07-16 16:23:17,884 - middleware.request_logger - ERROR - [logger.py:204] - error() - 请求异常: POST /api/vwed-map-data/push 耗时: 0.0066秒 +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 111, in receive + return self.receive_nowait() + ^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 106, in receive_nowait + raise WouldBlock +anyio.WouldBlock + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 124, in receive + return receiver.item + ^^^^^^^^^^^^^ +AttributeError: 'MemoryObjectItemReceiver' object has no attribute 'item' + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 147, in call_next + message = await recv_stream.receive() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 126, in receive + raise EndOfStream +anyio.EndOfStream + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "D:\jsw_code\project\VWED_task\middlewares\request_logger.py", line 43, in log_requests + response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 153, in call_next + raise app_exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 140, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\cors.py", line 85, in __call__ + await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 714, in __call__ + await self.middleware_stack(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 734, in app + await route.handle(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 288, in handle + await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 76, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 73, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\routing.py", line 291, in app + solved_result = await solve_dependencies( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 666, in solve_dependencies + ) = await request_body_to_args( # body_params checked above + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 898, in request_body_to_args + v_, errors_ = _validate_value_with_model_field( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 706, in _validate_value_with_model_field + v_, errors_ = field.validate(value, values, loc=loc) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\_compat.py", line 129, in validate + self._type_adapter.validate_python(value, from_attributes=True), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\type_adapter.py", line 412, in validate_python + return self.validator.validate_python( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\_internal\_decorators_v1.py", line 96, in wrapper1 + return val1(value, values=info.data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\jsw_code\project\VWED_task\routes\model\map_model.py", line 89, in validate_operate_points + storage_location_names = [point.storage_location_name for point in v] + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\main.py", line 891, in __getattr__ + raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}') +AttributeError: 'OperatePointData' object has no attribute 'storage_location_name' +Stack (most recent call last): + File "D:\jsw_code\project\VWED_task\app.py", line 72, in + uvicorn.run( + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\main.py", line 579, in run + server.run() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\server.py", line 66, in run + return asyncio.run(self.serve(sockets=sockets)) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\runners.py", line 195, in run + return runner.run(main) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\runners.py", line 118, in run + return self._loop.run_until_complete(task) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 678, in run_until_complete + self.run_forever() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\windows_events.py", line 322, in run_forever + super().run_forever() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 645, in run_forever + self._run_once() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 1999, in _run_once + handle._run() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\events.py", line 88, in _run + self._context.run(self._callback, *self._args) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi + result = await app( # type: ignore[func-returns-value] + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ + return await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\applications.py", line 1054, in __call__ + await super().__call__(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\applications.py", line 112, in __call__ + await self.middleware_stack(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\errors.py", line 165, in __call__ + await self.app(scope, receive, _send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 175, in __call__ + response = await self.dispatch_func(request, call_next) + File "D:\jsw_code\project\VWED_task\middlewares\request_logger.py", line 53, in log_requests + logger.error(f"请求异常: {method} {url} 耗时: {process_time:.4f}秒") + File "D:\jsw_code\project\VWED_task\utils\logger.py", line 204, in error + self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs) +2025-07-16 16:23:17,908 - middleware.request_logger - ERROR - [logger.py:204] - error() - 异常详情: 'OperatePointData' object has no attribute 'storage_location_name' +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 111, in receive + return self.receive_nowait() + ^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 106, in receive_nowait + raise WouldBlock +anyio.WouldBlock + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 124, in receive + return receiver.item + ^^^^^^^^^^^^^ +AttributeError: 'MemoryObjectItemReceiver' object has no attribute 'item' + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 147, in call_next + message = await recv_stream.receive() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 126, in receive + raise EndOfStream +anyio.EndOfStream + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "D:\jsw_code\project\VWED_task\middlewares\request_logger.py", line 43, in log_requests + response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 153, in call_next + raise app_exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 140, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\cors.py", line 85, in __call__ + await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 714, in __call__ + await self.middleware_stack(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 734, in app + await route.handle(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 288, in handle + await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 76, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 73, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\routing.py", line 291, in app + solved_result = await solve_dependencies( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 666, in solve_dependencies + ) = await request_body_to_args( # body_params checked above + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 898, in request_body_to_args + v_, errors_ = _validate_value_with_model_field( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 706, in _validate_value_with_model_field + v_, errors_ = field.validate(value, values, loc=loc) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\_compat.py", line 129, in validate + self._type_adapter.validate_python(value, from_attributes=True), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\type_adapter.py", line 412, in validate_python + return self.validator.validate_python( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\_internal\_decorators_v1.py", line 96, in wrapper1 + return val1(value, values=info.data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\jsw_code\project\VWED_task\routes\model\map_model.py", line 89, in validate_operate_points + storage_location_names = [point.storage_location_name for point in v] + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\main.py", line 891, in __getattr__ + raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}') +AttributeError: 'OperatePointData' object has no attribute 'storage_location_name' +Stack (most recent call last): + File "D:\jsw_code\project\VWED_task\app.py", line 72, in + uvicorn.run( + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\main.py", line 579, in run + server.run() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\server.py", line 66, in run + return asyncio.run(self.serve(sockets=sockets)) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\runners.py", line 195, in run + return runner.run(main) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\runners.py", line 118, in run + return self._loop.run_until_complete(task) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 678, in run_until_complete + self.run_forever() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\windows_events.py", line 322, in run_forever + super().run_forever() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 645, in run_forever + self._run_once() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 1999, in _run_once + handle._run() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\events.py", line 88, in _run + self._context.run(self._callback, *self._args) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi + result = await app( # type: ignore[func-returns-value] + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ + return await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\applications.py", line 1054, in __call__ + await super().__call__(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\applications.py", line 112, in __call__ + await self.middleware_stack(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\errors.py", line 165, in __call__ + await self.app(scope, receive, _send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 175, in __call__ + response = await self.dispatch_func(request, call_next) + File "D:\jsw_code\project\VWED_task\middlewares\request_logger.py", line 54, in log_requests + logger.error(f"异常详情: {str(e)}") + File "D:\jsw_code\project\VWED_task\utils\logger.py", line 204, in error + self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs) +2025-07-16 16:23:17,919 - middleware.request_logger - ERROR - [logger.py:204] - error() - Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 111, in receive + return self.receive_nowait() + ^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 106, in receive_nowait + raise WouldBlock +anyio.WouldBlock + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 124, in receive + return receiver.item + ^^^^^^^^^^^^^ +AttributeError: 'MemoryObjectItemReceiver' object has no attribute 'item' + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 147, in call_next + message = await recv_stream.receive() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 126, in receive + raise EndOfStream +anyio.EndOfStream + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "D:\jsw_code\project\VWED_task\middlewares\request_logger.py", line 43, in log_requests + response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 153, in call_next + raise app_exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 140, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\cors.py", line 85, in __call__ + await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 714, in __call__ + await self.middleware_stack(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 734, in app + await route.handle(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 288, in handle + await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 76, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 73, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\routing.py", line 291, in app + solved_result = await solve_dependencies( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 666, in solve_dependencies + ) = await request_body_to_args( # body_params checked above + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 898, in request_body_to_args + v_, errors_ = _validate_value_with_model_field( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 706, in _validate_value_with_model_field + v_, errors_ = field.validate(value, values, loc=loc) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\_compat.py", line 129, in validate + self._type_adapter.validate_python(value, from_attributes=True), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\type_adapter.py", line 412, in validate_python + return self.validator.validate_python( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\_internal\_decorators_v1.py", line 96, in wrapper1 + return val1(value, values=info.data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\jsw_code\project\VWED_task\routes\model\map_model.py", line 89, in validate_operate_points + storage_location_names = [point.storage_location_name for point in v] + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\main.py", line 891, in __getattr__ + raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}') +AttributeError: 'OperatePointData' object has no attribute 'storage_location_name' +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 111, in receive + return self.receive_nowait() + ^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 106, in receive_nowait + raise WouldBlock +anyio.WouldBlock + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 124, in receive + return receiver.item + ^^^^^^^^^^^^^ +AttributeError: 'MemoryObjectItemReceiver' object has no attribute 'item' + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 147, in call_next + message = await recv_stream.receive() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\anyio\streams\memory.py", line 126, in receive + raise EndOfStream +anyio.EndOfStream + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "D:\jsw_code\project\VWED_task\middlewares\request_logger.py", line 43, in log_requests + response = await call_next(request) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 153, in call_next + raise app_exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 140, in coro + await self.app(scope, receive_or_disconnect, send_no_error) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\cors.py", line 85, in __call__ + await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in __call__ + await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 714, in __call__ + await self.middleware_stack(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 734, in app + await route.handle(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 288, in handle + await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 76, in app + await wrap_app_handling_exceptions(app, request)(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app + raise exc + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\_exception_handler.py", line 42, in wrapped_app + await app(scope, receive, sender) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\routing.py", line 73, in app + response = await f(request) + ^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\routing.py", line 291, in app + solved_result = await solve_dependencies( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 666, in solve_dependencies + ) = await request_body_to_args( # body_params checked above + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 898, in request_body_to_args + v_, errors_ = _validate_value_with_model_field( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\dependencies\utils.py", line 706, in _validate_value_with_model_field + v_, errors_ = field.validate(value, values, loc=loc) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\_compat.py", line 129, in validate + self._type_adapter.validate_python(value, from_attributes=True), + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\type_adapter.py", line 412, in validate_python + return self.validator.validate_python( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\_internal\_decorators_v1.py", line 96, in wrapper1 + return val1(value, values=info.data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\jsw_code\project\VWED_task\routes\model\map_model.py", line 89, in validate_operate_points + storage_location_names = [point.storage_location_name for point in v] + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\pydantic\main.py", line 891, in __getattr__ + raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}') +AttributeError: 'OperatePointData' object has no attribute 'storage_location_name' +Stack (most recent call last): + File "D:\jsw_code\project\VWED_task\app.py", line 72, in + uvicorn.run( + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\main.py", line 579, in run + server.run() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\server.py", line 66, in run + return asyncio.run(self.serve(sockets=sockets)) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\runners.py", line 195, in run + return runner.run(main) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\runners.py", line 118, in run + return self._loop.run_until_complete(task) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 678, in run_until_complete + self.run_forever() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\windows_events.py", line 322, in run_forever + super().run_forever() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 645, in run_forever + self._run_once() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\base_events.py", line 1999, in _run_once + handle._run() + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\asyncio\events.py", line 88, in _run + self._context.run(self._callback, *self._args) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 403, in run_asgi + result = await app( # type: ignore[func-returns-value] + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 60, in __call__ + return await self.app(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\fastapi\applications.py", line 1054, in __call__ + await super().__call__(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\applications.py", line 112, in __call__ + await self.middleware_stack(scope, receive, send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\errors.py", line 165, in __call__ + await self.app(scope, receive, _send) + File "d:\Users\j2538\miniconda3\envs\pytf\Lib\site-packages\starlette\middleware\base.py", line 175, in __call__ + response = await self.dispatch_func(request, call_next) + File "D:\jsw_code\project\VWED_task\middlewares\request_logger.py", line 55, in log_requests + logger.error(traceback.format_exc()) + File "D:\jsw_code\project\VWED_task\utils\logger.py", line 204, in error + self.logger.error(message, *args, exc_info=exc_info, stack_info=stack_info, **kwargs) +2025-07-16 16:24:17,012 - app - INFO - 应用程序关闭中... +2025-07-16 16:24:17,012 - services.enhanced_scheduler.task_scheduler - INFO - 任务监控被取消 +2025-07-16 16:24:17,013 - services.enhanced_scheduler.task_scheduler - INFO - 任务监控结束 +2025-07-16 16:24:17,013 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务执行器被取消 +2025-07-16 16:24:17,014 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务执行器结束 +2025-07-16 16:24:17,015 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务管理器已停止 +2025-07-16 16:24:17,015 - services.enhanced_scheduler.task_persistence - INFO - 备份工作线程被取消 +2025-07-16 16:24:17,016 - services.enhanced_scheduler.task_persistence - INFO - 备份工作线程结束 +2025-07-16 16:24:17,016 - services.enhanced_scheduler.task_persistence - INFO - 任务持久化管理器已停止 +2025-07-16 16:24:17,017 - services.enhanced_scheduler.worker_manager - INFO - 工作线程监控任务被取消 +2025-07-16 16:24:17,018 - services.enhanced_scheduler.worker_manager - INFO - 工作线程监控任务结束 +2025-07-16 16:24:17,018 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 被取消 +2025-07-16 16:24:17,020 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 结束 +2025-07-16 16:24:17,021 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 0, 当前工作线程数: 14 +2025-07-16 16:24:17,021 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 被取消 +2025-07-16 16:24:17,022 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 结束 +2025-07-16 16:24:17,026 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 1, 当前工作线程数: 13 +2025-07-16 16:24:17,027 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 被取消 +2025-07-16 16:24:17,027 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 结束 +2025-07-16 16:24:17,028 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 2, 当前工作线程数: 12 +2025-07-16 16:24:17,029 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 被取消 +2025-07-16 16:24:17,029 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 结束 +2025-07-16 16:24:17,030 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 3, 当前工作线程数: 11 +2025-07-16 16:24:17,031 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 被取消 +2025-07-16 16:24:17,031 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 结束 +2025-07-16 16:24:17,032 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 4, 当前工作线程数: 10 +2025-07-16 16:24:17,033 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 被取消 +2025-07-16 16:24:17,033 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 结束 +2025-07-16 16:24:17,034 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 5, 当前工作线程数: 9 +2025-07-16 16:24:17,035 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 被取消 +2025-07-16 16:24:17,035 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 结束 +2025-07-16 16:24:17,036 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 6, 当前工作线程数: 8 +2025-07-16 16:24:17,036 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 被取消 +2025-07-16 16:24:17,037 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 结束 +2025-07-16 16:24:17,037 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 7, 当前工作线程数: 7 +2025-07-16 16:24:17,038 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 被取消 +2025-07-16 16:24:17,038 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 结束 +2025-07-16 16:24:17,039 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 8, 当前工作线程数: 6 +2025-07-16 16:24:17,039 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 被取消 +2025-07-16 16:24:17,040 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 结束 +2025-07-16 16:24:17,040 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 9, 当前工作线程数: 5 +2025-07-16 16:24:17,042 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 被取消 +2025-07-16 16:24:17,043 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 结束 +2025-07-16 16:24:17,043 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 10, 当前工作线程数: 4 +2025-07-16 16:24:17,044 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 被取消 +2025-07-16 16:24:17,045 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 结束 +2025-07-16 16:24:17,045 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 11, 当前工作线程数: 3 +2025-07-16 16:24:17,046 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 被取消 +2025-07-16 16:24:17,047 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 结束 +2025-07-16 16:24:17,049 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 12, 当前工作线程数: 2 +2025-07-16 16:24:17,051 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 被取消 +2025-07-16 16:24:17,052 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 结束 +2025-07-16 16:24:17,053 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 13, 当前工作线程数: 1 +2025-07-16 16:24:17,053 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 被取消 +2025-07-16 16:24:17,054 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 结束 +2025-07-16 16:24:17,055 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 14, 当前工作线程数: 0 +2025-07-16 16:24:17,055 - services.enhanced_scheduler.worker_manager - INFO - 工作线程管理器已停止 +2025-07-16 16:24:17,056 - services.enhanced_scheduler.task_scheduler - INFO - 增强版任务调度器已停止 +2025-07-16 16:24:17,056 - app - INFO - 增强版任务调度器已停止 +2025-07-16 16:24:17,058 - data.session - INFO - 正在关闭异步数据库连接... +2025-07-16 16:24:17,059 - data.session - INFO - 异步数据库连接已关闭 +2025-07-16 16:24:17,060 - data.session - INFO - 正在关闭数据库连接... +2025-07-16 16:24:17,064 - data.session - INFO - 数据库连接已关闭 +2025-07-16 16:24:27,622 - utils.component_manager - INFO - 已加载 8 个组件分类,共 52 个组件类型 +2025-07-16 16:24:28,582 - app - INFO - 服务器配置 - Host: 0.0.0.0, Port: 8000, Workers: 1, Reload: False +2025-07-16 16:24:28,584 - asyncio - DEBUG - Using proactor: IocpProactor +2025-07-16 16:24:28,647 - data.session - INFO - 正在初始化数据库... +2025-07-16 16:24:28,679 - data.session - INFO - 数据库 vwed_task 已创建或已存在 +2025-07-16 16:24:28,721 - data.session - INFO - 数据库表初始化完成 +2025-07-16 16:24:28,748 - services.enhanced_scheduler.task_scheduler - INFO - 加载任务调度器配置: 工作线程数=15-30, 队列数=3, 任务超时=3600秒 +2025-07-16 16:24:28,748 - services.enhanced_scheduler.priority_queue_manager - INFO - 初始化优先级队列管理器: 队列数=3, 阈值百分比=[0.1, 0.3, 1.0], 工作线程比例=[0.6, 0.3, 0.1] +2025-07-16 16:24:28,748 - services.enhanced_scheduler.worker_manager - INFO - 初始化工作线程管理器: min=15, max=30, 心跳间隔=120秒, 自动扩缩容间隔=120秒 +2025-07-16 16:24:28,748 - services.enhanced_scheduler.task_persistence - INFO - 初始化任务持久化管理器: 间隔=300秒, 目录=D:\jsw_code\project\VWED_task\data\task_backups, 最大备份数=5 +2025-07-16 16:24:28,749 - services.enhanced_scheduler.periodic_task_manager - INFO - 初始化定时任务管理器: 检查间隔=5秒 +2025-07-16 16:24:28,750 - services.enhanced_scheduler.task_scheduler - INFO - 增强版任务调度器初始化完成 +2025-07-16 16:24:28,750 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 0, 当前工作线程数: 1 +2025-07-16 16:24:28,751 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 1, 当前工作线程数: 2 +2025-07-16 16:24:28,751 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 2, 当前工作线程数: 3 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 3, 当前工作线程数: 4 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 4, 当前工作线程数: 5 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 5, 当前工作线程数: 6 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 6, 当前工作线程数: 7 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 7, 当前工作线程数: 8 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 8, 当前工作线程数: 9 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 9, 当前工作线程数: 10 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 10, 当前工作线程数: 11 +2025-07-16 16:24:28,752 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 11, 当前工作线程数: 12 +2025-07-16 16:24:28,753 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 12, 当前工作线程数: 13 +2025-07-16 16:24:28,753 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 13, 当前工作线程数: 14 +2025-07-16 16:24:28,753 - services.enhanced_scheduler.worker_manager - INFO - 添加工作线程 14, 当前工作线程数: 15 +2025-07-16 16:24:28,753 - services.enhanced_scheduler.worker_manager - INFO - 工作线程管理器启动成功,初始工作线程数: 15 +2025-07-16 16:24:28,753 - services.enhanced_scheduler.task_persistence - INFO - 任务持久化管理器启动成功 +2025-07-16 16:24:28,754 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 启动 +2025-07-16 16:24:28,754 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 启动 +2025-07-16 16:24:28,754 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 启动 +2025-07-16 16:24:28,754 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 启动 +2025-07-16 16:24:28,754 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 启动 +2025-07-16 16:24:28,754 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 启动 +2025-07-16 16:24:28,756 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 启动 +2025-07-16 16:24:28,756 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 启动 +2025-07-16 16:24:28,756 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 启动 +2025-07-16 16:24:28,756 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 启动 +2025-07-16 16:24:28,756 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 启动 +2025-07-16 16:24:28,757 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 启动 +2025-07-16 16:24:28,757 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 启动 +2025-07-16 16:24:28,757 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 启动 +2025-07-16 16:24:28,757 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 启动 +2025-07-16 16:24:28,757 - services.enhanced_scheduler.worker_manager - INFO - 工作线程监控任务启动 +2025-07-16 16:24:28,757 - services.enhanced_scheduler.task_persistence - INFO - 备份工作线程启动 +2025-07-16 16:24:28,758 - aiomysql - DEBUG - caching sha2: succeeded by fast path. +2025-07-16 16:24:28,797 - services.enhanced_scheduler.periodic_task_manager - INFO - 已加载 0 个定时任务 +2025-07-16 16:24:28,800 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务管理器启动成功 +2025-07-16 16:24:28,802 - services.enhanced_scheduler.task_scheduler - INFO - 增强版任务调度器启动成功,工作线程数: 15 +2025-07-16 16:24:28,804 - app - INFO - 增强版任务调度器已启动,最小工作线程数: 15,最大工作线程数: 30 +2025-07-16 16:24:28,806 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务执行器启动 +2025-07-16 16:24:28,808 - services.enhanced_scheduler.task_scheduler - INFO - 任务监控启动 +2025-07-16 16:24:32,368 - middleware.request_logger - INFO - 请求开始: POST /api/vwed-map-data/push 来自 127.0.0.1 +2025-07-16 16:24:32,370 - services.map_data_service - INFO - 开始增量推送地图数据: 场景ID=1936411520272753371 +2025-07-16 16:24:32,371 - services.map_data_service - INFO - 开始处理库区数据: 数量=2 +2025-07-16 16:24:32,374 - services.map_data_service - INFO - 创建新库区: 一般存储区B +2025-07-16 16:24:32,380 - services.map_data_service - INFO - 创建新库区: 一般存储区C +2025-07-16 16:24:32,380 - services.map_data_service - INFO - 开始处理动作点数据: 数量=4 +2025-07-16 16:24:32,383 - services.map_data_service - INFO - 创建新动作点: STATION-A-001 +2025-07-16 16:24:32,396 - services.map_data_service - DEBUG - 为库位层 36c6b8c1-1a5e-4660-9dbd-355d2f97e1dd 同步了 2 个扩展属性 +2025-07-16 16:24:32,396 - services.map_data_service - DEBUG - 为新库位层 36c6b8c1-1a5e-4660-9dbd-355d2f97e1dd 同步扩展属性成功 +2025-07-16 16:24:32,397 - services.map_data_service - DEBUG - 创建新分层: 1-1 (layer_index=1) +2025-07-16 16:24:32,399 - services.map_data_service - DEBUG - 为库位层 6774fe1a-3094-4990-ba8e-188af1a030e7 同步了 2 个扩展属性 +2025-07-16 16:24:32,399 - services.map_data_service - DEBUG - 为新库位层 6774fe1a-3094-4990-ba8e-188af1a030e7 同步扩展属性成功 +2025-07-16 16:24:32,399 - services.map_data_service - DEBUG - 创建新分层: 1-2 (layer_index=2) +2025-07-16 16:24:32,399 - services.map_data_service - INFO - 创建新动作点: STATION-B-001 +2025-07-16 16:24:32,401 - services.map_data_service - DEBUG - 为库位层 883fe3a8-2ccc-4dd3-89bc-f584336cc9d5 同步了 2 个扩展属性 +2025-07-16 16:24:32,401 - services.map_data_service - DEBUG - 为新库位层 883fe3a8-2ccc-4dd3-89bc-f584336cc9d5 同步扩展属性成功 +2025-07-16 16:24:32,401 - services.map_data_service - DEBUG - 创建新分层: 2-1 (layer_index=1) +2025-07-16 16:24:32,401 - services.map_data_service - INFO - 创建新动作点: STATION-B-004 +2025-07-16 16:24:32,403 - services.map_data_service - DEBUG - 为库位层 3f0c8ef7-c6ca-4e43-b987-c8fee6c9f0a1 同步了 2 个扩展属性 +2025-07-16 16:24:32,403 - services.map_data_service - DEBUG - 为新库位层 3f0c8ef7-c6ca-4e43-b987-c8fee6c9f0a1 同步扩展属性成功 +2025-07-16 16:24:32,403 - services.map_data_service - DEBUG - 创建新分层: 4-1 (layer_index=1) +2025-07-16 16:24:32,405 - services.map_data_service - DEBUG - 为库位层 a9ae7ba3-1286-418b-9120-e6c762ce3aa0 同步了 2 个扩展属性 +2025-07-16 16:24:32,405 - services.map_data_service - DEBUG - 为新库位层 a9ae7ba3-1286-418b-9120-e6c762ce3aa0 同步扩展属性成功 +2025-07-16 16:24:32,405 - services.map_data_service - DEBUG - 创建新分层: 4-2 (layer_index=2) +2025-07-16 16:24:32,406 - services.map_data_service - DEBUG - 为库位层 bc459441-25c8-424a-a9bd-aa3cd641578d 同步了 2 个扩展属性 +2025-07-16 16:24:32,406 - services.map_data_service - DEBUG - 为新库位层 bc459441-25c8-424a-a9bd-aa3cd641578d 同步扩展属性成功 +2025-07-16 16:24:32,406 - services.map_data_service - DEBUG - 创建新分层: 4-3 (layer_index=3) +2025-07-16 16:24:32,408 - services.map_data_service - INFO - 创建新动作点: STATION-B-003 +2025-07-16 16:24:32,409 - services.map_data_service - DEBUG - 为库位层 f0d261aa-513e-4c25-ba71-468cb9124026 同步了 2 个扩展属性 +2025-07-16 16:24:32,409 - services.map_data_service - DEBUG - 为新库位层 f0d261aa-513e-4c25-ba71-468cb9124026 同步扩展属性成功 +2025-07-16 16:24:32,409 - services.map_data_service - DEBUG - 创建新分层: 3-1 (layer_index=1) +2025-07-16 16:24:32,423 - services.map_data_service - INFO - 地图数据推送成功: 场景ID=1936411520272753371, 库区(新增=2,更新=0), 动作点(新增=4,更新=0), 分层(新增=7,更新=0) +2025-07-16 16:24:32,428 - middleware.request_logger - INFO - 请求完成: POST /api/vwed-map-data/push 状态码: 200 耗时: 0.0597秒 +2025-07-16 16:27:12,217 - middleware.request_logger - INFO - 请求开始: GET /api/vwed-operate-point/4-1 来自 127.0.0.1 +2025-07-16 16:27:12,230 - middleware.request_logger - INFO - 请求完成: GET /api/vwed-operate-point/4-1 状态码: 200 耗时: 0.0128秒 +2025-07-16 16:27:21,455 - app - INFO - 应用程序关闭中... +2025-07-16 16:27:21,456 - services.enhanced_scheduler.task_scheduler - INFO - 任务监控被取消 +2025-07-16 16:27:21,456 - services.enhanced_scheduler.task_scheduler - INFO - 任务监控结束 +2025-07-16 16:27:21,457 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务执行器被取消 +2025-07-16 16:27:21,457 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务执行器结束 +2025-07-16 16:27:21,458 - services.enhanced_scheduler.periodic_task_manager - INFO - 定时任务管理器已停止 +2025-07-16 16:27:21,458 - services.enhanced_scheduler.task_persistence - INFO - 备份工作线程被取消 +2025-07-16 16:27:21,459 - services.enhanced_scheduler.task_persistence - INFO - 备份工作线程结束 +2025-07-16 16:27:21,459 - services.enhanced_scheduler.task_persistence - INFO - 任务持久化管理器已停止 +2025-07-16 16:27:21,459 - services.enhanced_scheduler.worker_manager - INFO - 工作线程监控任务被取消 +2025-07-16 16:27:21,460 - services.enhanced_scheduler.worker_manager - INFO - 工作线程监控任务结束 +2025-07-16 16:27:21,460 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 被取消 +2025-07-16 16:27:21,461 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 0 结束 +2025-07-16 16:27:21,461 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 0, 当前工作线程数: 14 +2025-07-16 16:27:21,462 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 被取消 +2025-07-16 16:27:21,462 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 1 结束 +2025-07-16 16:27:21,463 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 1, 当前工作线程数: 13 +2025-07-16 16:27:21,463 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 被取消 +2025-07-16 16:27:21,463 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 2 结束 +2025-07-16 16:27:21,464 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 2, 当前工作线程数: 12 +2025-07-16 16:27:21,464 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 被取消 +2025-07-16 16:27:21,465 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 3 结束 +2025-07-16 16:27:21,465 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 3, 当前工作线程数: 11 +2025-07-16 16:27:21,466 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 被取消 +2025-07-16 16:27:21,466 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 4 结束 +2025-07-16 16:27:21,466 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 4, 当前工作线程数: 10 +2025-07-16 16:27:21,467 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 被取消 +2025-07-16 16:27:21,467 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 5 结束 +2025-07-16 16:27:21,468 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 5, 当前工作线程数: 9 +2025-07-16 16:27:21,469 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 被取消 +2025-07-16 16:27:21,470 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 6 结束 +2025-07-16 16:27:21,470 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 6, 当前工作线程数: 8 +2025-07-16 16:27:21,470 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 被取消 +2025-07-16 16:27:21,471 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 7 结束 +2025-07-16 16:27:21,471 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 7, 当前工作线程数: 7 +2025-07-16 16:27:21,472 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 被取消 +2025-07-16 16:27:21,472 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 8 结束 +2025-07-16 16:27:21,473 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 8, 当前工作线程数: 6 +2025-07-16 16:27:21,473 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 被取消 +2025-07-16 16:27:21,473 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 9 结束 +2025-07-16 16:27:21,474 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 9, 当前工作线程数: 5 +2025-07-16 16:27:21,474 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 被取消 +2025-07-16 16:27:21,475 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 10 结束 +2025-07-16 16:27:21,475 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 10, 当前工作线程数: 4 +2025-07-16 16:27:21,476 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 被取消 +2025-07-16 16:27:21,476 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 11 结束 +2025-07-16 16:27:21,477 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 11, 当前工作线程数: 3 +2025-07-16 16:27:21,478 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 被取消 +2025-07-16 16:27:21,478 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 12 结束 +2025-07-16 16:27:21,478 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 12, 当前工作线程数: 2 +2025-07-16 16:27:21,479 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 被取消 +2025-07-16 16:27:21,479 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 13 结束 +2025-07-16 16:27:21,480 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 13, 当前工作线程数: 1 +2025-07-16 16:27:21,480 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 被取消 +2025-07-16 16:27:21,480 - services.enhanced_scheduler.task_scheduler - INFO - 工作线程 14 结束 +2025-07-16 16:27:21,481 - services.enhanced_scheduler.worker_manager - INFO - 移除工作线程 14, 当前工作线程数: 0 +2025-07-16 16:27:21,481 - services.enhanced_scheduler.worker_manager - INFO - 工作线程管理器已停止 +2025-07-16 16:27:21,482 - services.enhanced_scheduler.task_scheduler - INFO - 增强版任务调度器已停止 +2025-07-16 16:27:21,482 - app - INFO - 增强版任务调度器已停止 +2025-07-16 16:27:21,482 - data.session - INFO - 正在关闭异步数据库连接... +2025-07-16 16:27:21,485 - data.session - INFO - 异步数据库连接已关闭 +2025-07-16 16:27:21,485 - data.session - INFO - 正在关闭数据库连接... +2025-07-16 16:27:21,487 - data.session - INFO - 数据库连接已关闭 diff --git a/routes/__pycache__/operate_point_api.cpython-312.pyc b/routes/__pycache__/operate_point_api.cpython-312.pyc index 881ff630ae55ea9580b89f8b674c3eaa3a804739..46185790c77fd83ae37919c377729eb2d2d1998a 100644 GIT binary patch delta 2811 zcmai0YfKbZ6rQ^?vkSZIvh4C^7uFqwE`ord^037PA1z&0l$Q#Kzzm8-#M#{<4QN|U zqc*m}(G+Wa#8_hkrnO_5Hce{8KTZ3qwl%m-YMa)^KTS5ZG5#{WX9iZZDwE8&-+A17 z&OPVc$=<(7PW()Azc-tW41JQf4sKt#onih!VfJy%kbCaSxi&(!LIwHVD~Q>X8526q zq+=vr6vTy3XmZ3HF?aHX33iT`hwAdgMU(l^uS+qR#RADB6{S%Jct}7bg=>+=mb&;4puO&kdjm_C%y=^tUz9ZepQL9eDjN&;*#uLOR5asP12#_JS4jy{2DsQPx^Mc7Wi^PLP>2>MW;~hp zSS4)YnkOn@6W2~=z!+EToVO8rJmtYFSY<@5LC+ov}B=Wh2&EEp%**m?BN}QfoSao`l26 z=9vKaW1;VU`rhjUYh@B-*iz#r$wVBQ7-qx_UR#zkZrD7jo9*d{C1}vBbT-*x3yj#D zDe*zmtS%VceK;O2+tQrzd*d4zQ9nX|2T2g)sZTZ|*Nnu&X!Rlz51sWXkY`V(%xiaM zKDJ_z*~4yP2FWFMka%K4cl64zJ&P#U6A7n8Qoki64nECT!F{5W{qQjTGh(G;b>n&( zBdnLDK&USmCQ`skW!DprTtt;}^DOu%34BT6F7x0`CbEY(_*(L(Eq^-6Iqg_9owgAC z4o6Iy*={^&_}2xpW2F5R>issUE+q#ls+ez(T#cU?%82lZ3AsGrK`kr%U+zhNj01UrMFfQ-p^>!5f^qSEEO#F0j@y7NdqRJt=r1GKoa zNfQjaJ91j6pS%%a6T)VMRtg@yx`pgVg$P8jXSX43rx4In&YaSghqre_JROd+d;R~ z!@ouKZl!4HMOME7{TkrcGQp{ZvV{5FAxR#R-MCoa)7ux6WO+4YmahVRbG#XYczAg= zuJgm*@=SV~Q{_ecyHw#-Zj_(rN&T2F8IDw$)U(KqaJmXxd%Y^pr&h~_OP|(XZcfP_ zb(W*<*jcTwM{qHMq?E6W(=UG?<)a9r2xAC1@^T$QJ%V;bWY~3o$VCwfYEq4N&R@QJ z<>LyM+ytlB6#Ji_oKb#$D0M2=V-ziQwZ+F!MmVNat^JzQt4_zqd<$kvlk3CM_2+9M&-kp-%0zWpDz{SP(T#rQ?i04P}!^&ot6*tiuJyWQG zW-ot^Dsz-Cn(uQa^^BNrC>3tECYk>_c=XQUGcqP7?}uBhSg?n!1@q35HleucSp_?f zMuZU(h&{+P_%40RBm=oU{S;ULdU@&$~Ja8?=W z+M(N_e&_I-huPl#pmssj%e@bET-UB$ed<>|%npQt>ZeWpc*uB}WxRc1ZeSPfje0|H z=E8bW>XYd0RR;qrtR7ar0Cken_!X7$zfs^e1f^TBvFEjY87+j=l4(ow(ZHdd5muFc zOLC5PkG4m6Rf^~td&YRlXhFoF$uUeq+PHnx9EsIrBV$V+&mPT;m^3+VRyJ$0g|ViN zbBFdu;x*aIBs#`djlL8~Xd!+YJYr)OER5JSVpxoJ_gF^fClQ@ycwITW?I!yl;S6&~ delta 2940 zcmbVOYitx%6rQ`Yv)gvN+v)b*-R)}&bz2Ih1!c}HC% zCc|aoWI-yFrv1k&^UG5 znY>q6Bqz(6uwKYzo{Xp`0DIWTn(@V@#c+!E@=HbtbnqFra=9!zZYkVg5o%ckS2RL) z)Uym8GUT+1Brz?d^wHoZxwEIQ3;q!gr#qsP@F$7A``LS~7tSq9gR{w*j-834 zWWoiIKP$~AaC;n#24RR zWmR)hatRczOoE3}Gu7%;lUbaw?V!@#*9*ZWx9ZRQk`O!G%nq1OnrI^|%YK(6GqonW zk>yXD7(^^o4)yma5h90@nVts?uJqDJ(2Y>f-q1%3u5vf`aM~d82+PSO=Zvv5&zQSp zENj|W!8~~0<&JYXQWBoFUN3;~>NNPmwRv3~o3xMA%q0gF1UT+2O6R!vnsWYJd}_eU zpYsrua|E<|6H%U3SyRfNFGBnI`_O*AR6x0$XYv!)Ss^8;^oMAZ`jq=~GiiZ_{9;zy zJMvwumJjC_lGSh~zZ2#zOj%Cb*y28mzCo&QRc3~WeS5H{Tj~sUAweP9&TO=ULCC@& zPk(3`8aI!_sJgvCj!RpQdJtg)LJL9{XvH05rP^3Bn=n%M&Ulff;VCVizM6S`=`=qh^a9<_O~}f1E41 z4!Js5cWW9b+D%9_{vJT8>R@m8wn^VM>aKHq%;GO1t)(_t` z`!e)?NTe^b5s|o%Lboa1TV=Wil3OY=raC(Zoib!247TKn7{xeSBUL!n5)fWz#$xq) z%Z(@vwVwhQ&qLV zB4JfWFNHTTFv4;5!{8RvZoQSU?<0J7uVQqI-tBwPX5P@(*Q4L`5q?|0V%&U`c_{WX z#a@hFJh789$As~dZ5U?PKmxItwOaN0WZ=>Ts0h%;u6j<8UN#j{(|?U z9}`N--c9{>argHnTi~GFv)j{3$Z|5~NIw*MW~;{Q+Rtg8;jVDICg_@G;Zj_~72#6N zYUpvCyYSfJqYr5DhMvGBXAP%>?V8Qd6FF!0aA7z{vm3f&Tu(A|krOkA&Cd*K$*rV= zEv`AaRQK?buwP3t2BdQN)3h{0PUmt8vsojps}a PL^BzVLG`nZ7x;exn2Dpu diff --git a/routes/model/__pycache__/map_model.cpython-312.pyc b/routes/model/__pycache__/map_model.cpython-312.pyc index 7aab0dd62cab9ed8ddc6f5a9e1d4921f8ed0bffd..bfb328097ce6aef1abd1b20c23e4a685284ebda3 100644 GIT binary patch delta 1286 zcmZ9JOH30{6o%)P=>VO!(=vTOYI8?L^p0s5QB+m(mPvGvEF1oPW-_=iH_GGpx^q+s1wLEw0kOH!Id{IIB6u3t>jeGRl`MiC71qn32`>k*v^4L@! zlgeXHdj!Ry@|e?}j%>xLGPzWyJZh377VIt6pF8EWD(+db)4$?*%+2mdE@T@M0$y0m z?ttc;ui^syd^@!kpZfJ;Za$DZLWEN4iynmMx+kO*_KP9PhvFMzhtD<_bm=YiIPoZR z6{9+YC_|JZ4kHQ>Zp0A;kHFJKa}hQ0Ly`j}C=vVU6WgSi;8u9&io-i|ZKSCi(N#liG(0*uJk&cB zz7>hZv@`^N^Uy9=DI^Q04R0Uo&$ds0`qJtPR-?$+jv0zpi}E>@4~3dJgab$Iw@)QWp{ zQah^9E^bp13$l7zPX(PM-g=woKG{?7lh-l-+p8s}jC##Le6ooRv==k7-ul4jbHJJ; zNj>-uaTlw+XH`ahbEF4~{e4z;8EoXNdv>HAc;@$#0eJ0iDDe_=d@RY)B^e|FQAm6+ V$>Ewb`G|SOndIn_Y=naR^8c4!0|Nj6 delta 1633 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 diff --git a/routes/model/map_model.py b/routes/model/map_model.py index 084ba4c..b56dc6a 100644 --- a/routes/model/map_model.py +++ b/routes/model/map_model.py @@ -30,7 +30,6 @@ class OperatePointLayerData(BaseModel): class OperatePointData(BaseModel): """动作点数据""" station_name: str = Field(..., description="动作站点名称") - storage_location_name: str = Field(..., description="库位名称") area_name: Optional[str] = Field(None, description="所属库区名称") max_layers: int = Field(1, ge=1, description="最大层数") position_x: Optional[int] = Field(None, description="X坐标") @@ -39,7 +38,7 @@ class OperatePointData(BaseModel): content: Optional[str] = Field("", description="内容") tags: Optional[str] = Field("", description="标签") description: Optional[str] = Field(None, description="动作点描述") - layers: Optional[List[OperatePointLayerData]] = Field(None, description="分层数据") + layers: Optional[List[OperatePointLayerData]] = Field(None, description="库位名称") @validator('layers') def validate_layers(cls, v, values): @@ -85,10 +84,6 @@ class MapDataPushRequest(BaseModel): if len(station_names) != len(set(station_names)): raise ValueError("动作站点名称不能重复") - # 检查库位名称是否重复 - storage_location_names = [point.storage_location_name for point in v] - if len(storage_location_names) != len(set(storage_location_names)): - raise ValueError("库位名称不能重复") return v diff --git a/routes/model/operate_point_model.py b/routes/model/operate_point_model.py index 63b21e9..328df2e 100644 --- a/routes/model/operate_point_model.py +++ b/routes/model/operate_point_model.py @@ -94,7 +94,6 @@ class StorageLocationInfo(BaseModel): # 动作点信息(直接平铺) operate_point_id: Optional[str] = Field(None, description="所属动作点ID") station_name: Optional[str] = Field(None, description="动作站点名称") - storage_location_name: Optional[str] = Field(None, description="库位名称") scene_id: Optional[str] = Field(None, description="场景ID") storage_area_id: Optional[str] = Field(None, description="所属库区ID") storage_area_type: Optional[str] = Field(None, description="库区类型") @@ -112,8 +111,7 @@ class StorageLocationListRequest(BaseModel): scene_id: Optional[str] = Field(None, description="场景ID") storage_area_id: Optional[str] = Field(None, description="库区ID") station_name: Optional[str] = Field(None, description="站点名称(支持模糊搜索)") - storage_location_name: Optional[str] = Field(None, description="库位名称(支持模糊搜索)") - layer_name: Optional[str] = Field(None, description="层名称(支持模糊搜索)") + layer_name: Optional[str] = Field(None, description="库位名称(支持模糊搜索)") is_disabled: Optional[bool] = Field(None, description="是否禁用") is_occupied: Optional[bool] = Field(None, description="是否占用") is_locked: Optional[bool] = Field(None, description="是否锁定") diff --git a/routes/operate_point_api.py b/routes/operate_point_api.py index d8c786d..310f988 100644 --- a/routes/operate_point_api.py +++ b/routes/operate_point_api.py @@ -78,7 +78,6 @@ async def get_storage_location_list( scene_id: Optional[str] = Query(None, description="场景ID"), storage_area_id: Optional[str] = Query(None, description="库区ID"), station_name: Optional[str] = Query(None, description="站点名称(支持模糊搜索)"), - storage_location_name: Optional[str] = Query(None, description="库位名称(支持模糊搜索)"), layer_name: Optional[str] = Query(None, description="层名称(支持模糊搜索)"), is_disabled: Optional[bool] = Query(None, description="是否禁用"), is_occupied: Optional[bool] = Query(None, description="是否占用"), @@ -99,7 +98,6 @@ async def get_storage_location_list( - 场景ID:根据场景筛选库位 - 库区ID:根据库区筛选库位 - 站点名称:支持模糊搜索 - - 库位名称:支持模糊搜索 - 层名称:支持模糊搜索 - 是否禁用:筛选禁用/启用的库位 - 是否占用:筛选已占用/空闲的库位 @@ -121,7 +119,6 @@ async def get_storage_location_list( scene_id: 场景ID storage_area_id: 库区ID station_name: 站点名称 - storage_location_name: 库位名称 layer_name: 层名称 is_disabled: 是否禁用 is_occupied: 是否占用 @@ -142,7 +139,6 @@ async def get_storage_location_list( scene_id=scene_id, storage_area_id=storage_area_id, station_name=station_name, - storage_location_name=storage_location_name, layer_name=layer_name, is_disabled=is_disabled, is_occupied=is_occupied, diff --git a/services/__pycache__/map_data_service.cpython-312.pyc b/services/__pycache__/map_data_service.cpython-312.pyc index 5cc92193e19d74e3db4b095c165f3c3830dfbcd3..932b1a78b0a990d401bafcfbf8fa319dff8eb7bf 100644 GIT binary patch delta 2741 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 diff --git a/services/__pycache__/operate_point_service.cpython-312.pyc b/services/__pycache__/operate_point_service.cpython-312.pyc index 4997eea4a4b30998cd461b55741b5666bbbcc4c5..24fc85283aa9d1fa7b9a8e4120af2f94c731280d 100644 GIT binary patch delta 6036 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 diff --git a/services/execution/handlers/__pycache__/robot_scheduling.cpython-312.pyc b/services/execution/handlers/__pycache__/robot_scheduling.cpython-312.pyc index a229e666ee7f31cb91e631a2927abc7726ce328d..94d44a258449c2f3fe78992a87ef3f39683f20c7 100644 GIT binary patch delta 4616 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 delta 4418 zcmaJ^3s6+&72bdE?p>B$_QA5to8`5_@)QJ-hbSVT#)t`sE;b@^7bJqnWeEs(1pzfa z604_)8a0`wlNpW8LpPab>@OJ)t9qx{f=C<`>16Y&oOn}^EN3fgJfgSBF^(_r+-K`tNMrcVErp3TT8SLS&#&zE_jjI;R)qh^$26})~_r6I1PfJY7FVbmz| zVC{k+ZZtA!K>#i5Hu3JPT)ZBYr5*i_08*>#AFh^Nzh8rPtZ;vf;exU^C;0*2`0Cl>~zv!5otZ} z;k-=N4?(3*vnPDdmokpM>DymEjf+`L>U+T(DfoF*g^B3J*Wl*DWB(iazD3cd(==~N z=x}z?w7xSWqy)qh1d}2E4u^hC)w0skvZ|_y1l}QwJc4NiGZ38miI?dV3FM?Fvy#`F z%t~I#Lw0h0@~fnW=0}z?@SS|*T?W06md#XqIybbq{i-!>Z7pIq8LJ7NCD0HU2zY`c z1n&}z!4HqduvuVTl9x6fFiV~MPRFPUVFKA?Um~0??^lD z@%1kmU?H@*{QBng8#+C88|uaS)(&yM&$e`sH}#YA%>)AkgK)GahxNfETcUe-elhFqRav9|cS|=(f z@A3CZwV&WByyRMH?;`qOSm#}ttqSnFQ^$pg}SC^kB<$DAd2rd%P zsUtruQAJEHqr4$6(QrAzT!Jh2;UomDUdgUNU1cL&T0KWMB{b-5j`8Ky&*0cKSSQTU zHPM{K1OxE4;N?F;+L-`mcNi>n+t?@2K9x zE2z60zEo=Hp_Pk2z}FoyYykA02=)ymc^+dQ!A4Ko|BvFdCm*A@>q)>@#NNq2Jc_#% z1;K78?W$pSsXTkT3#JAFwxu!39YJugIo-FnyOM!%QyBcTv5M0PdZ_9tmWiPzcoTo-=FC<75^XAUHX%xgmdwpe zhykCZz12A-swgQ!3=~qN2wW%i zFehn+H2Qq4Pn04>y^tI*6G3HY3f;o;!X>~ zt^Vzw?L7L~p_88;IP#B^CqF&BFIMaW&(pcO7f>r6A~*}7?O6Z(9!o@q^7Df7y7n^ z!OJ@q@Ha^I0gUgE7Jovto8V&tHRa6{$X$<|vD|COJ<=GN$c=-1ipyvGZIX=>?1Fc8 zX5;4ia%W^;FuBM>sWa)J-)p&*mx~-gmRf>UmoK8R3OPdCz;&27-=|p z*zP6;{fFjP(87cqUuPu`|=H z$cNR;Wm66F4&tfI6|NdiBb(tYvKh`!M}F4MTv4jCu_ZPfjLc*%yJ{qlj7EycXk>O4 za_s0`@v3u~k*>aC#b_WYMs?Y!7@f^r4%KKeO&H@yKBg*B;@~{bT*<2Q8d99slj3|( z3~>x2Rdqfs0r`7I=E_jLXDSKA!G#Fs%2Hj3EYaiOVv^pKW4Jh@VkQo*Vs`net0|?^ zanN@i?TS>_BgyggSaN(lE}VFQ%nQvf6L&+;q2va-M{ZIPw=u$S8KY#xyipP_qeI4I z88JYVW5S48GUo8ai)3C|tX-+#{FX}uDZo#HD!zC2Ewl=`O=D-y3)$|W%6n653DL%Tvl3LS5i?UFZ8pv$RAMD+9q_i nxQoRMTpa%t9i52d9P}L6XX@dYi|yBck4+Gg+dUBX!j=C3LGqB> diff --git a/services/execution/handlers/robot_scheduling.py b/services/execution/handlers/robot_scheduling.py index 57c3751..0e6f875 100644 --- a/services/execution/handlers/robot_scheduling.py +++ b/services/execution/handlers/robot_scheduling.py @@ -193,7 +193,7 @@ class RobotBlockHandler(BlockHandler): """调用外部API的通用方法""" return await call_robot_api(api_name, params) - async def _validate_and_convert_key_route(self, key_route: str, map_id: str) -> tuple[bool, str, str]: + async def _validate_and_convert_key_route(self, key_route: str, map_id: str, flag: bool = False) -> tuple[bool, str, str]: """ 校验并转换keyRoute参数 @@ -240,7 +240,8 @@ class RobotBlockHandler(BlockHandler): station_name = operate_point_layer.station_name logger.info(f"keyRoute '{key_route}' 识别为库位,对应的动作点: {station_name},场景ID: {map_id}") return True, station_name, "" - + if flag: + return True, key_route, "" # 都不匹配,返回错误 error_msg = f"keyRoute '{key_route}' 在场景 {map_id} 中既不是有效的动作点名称也不是有效的库位名称" logger.error(error_msg) @@ -745,7 +746,7 @@ class SelectAgvBlockHandler(RobotBlockHandler): # 校验并转换keyRoute参数 # print(f"input_params >>>>>>>>>>>>>>>>>>>>>>>>>>>> key_route: {key_route}, map_id: {map_id}") - is_valid, key_station_name, error_msg = await self._validate_and_convert_key_route(key_route, map_id) + is_valid, key_station_name, error_msg = await self._validate_and_convert_key_route(key_route, map_id, flag=True) # print(f"output_params >>>>>>>>>>>>>>>>>>>>>>>>>>>> key_station_name: {key_station_name}, error_msg: {error_msg}") if not is_valid: result = { diff --git a/services/map_data_service.py b/services/map_data_service.py index ea8ce00..ebc3557 100644 --- a/services/map_data_service.py +++ b/services/map_data_service.py @@ -76,14 +76,8 @@ class MapDataService: duplicate_stations.append(point_data.station_name) logger.warning(f"发现在请求中重复的站点名称: {point_data.station_name}") continue - - if point_data.storage_location_name in seen_location_names: - duplicate_stations.append(f"{point_data.station_name}(库位名重复)") - logger.warning(f"发现在请求中重复的库位名称: {point_data.storage_location_name}") - continue - + seen_station_names.add(point_data.station_name) - seen_location_names.add(point_data.storage_location_name) valid_operate_points.append(point_data) # 处理动作点数据 - 增量更新 @@ -232,7 +226,6 @@ class MapDataService: if existing_point: # 更新现有动作点 - existing_point.storage_location_name = point_data.storage_location_name existing_point.storage_area_id = storage_area.id if storage_area else None existing_point.storage_area_type = storage_area.area_type if storage_area else None existing_point.area_name = point_data.area_name @@ -252,9 +245,8 @@ class MapDataService: new_point = OperatePoint( id=str(uuid.uuid4()), station_name=point_data.station_name, - storage_location_name=point_data.storage_location_name, scene_id=scene_id, - storage_area_id=storage_area.id if storage_area else None, + # storage_area_id=storage_area.id if storage_area else None, storage_area_type=storage_area.area_type if storage_area else None, area_name=point_data.area_name, max_layers=point_data.max_layers, @@ -321,7 +313,6 @@ class MapDataService: id=str(uuid.uuid4()), operate_point_id=operate_point.id, station_name=operate_point.station_name, - storage_location_name=operate_point.storage_location_name, area_name=operate_point.area_name, scene_id=operate_point.scene_id, layer_index=layer_index, diff --git a/services/operate_point_service.py b/services/operate_point_service.py index 4621575..c125d97 100644 --- a/services/operate_point_service.py +++ b/services/operate_point_service.py @@ -60,11 +60,8 @@ class OperatePointService: if request.station_name: query = query.filter(OperatePointLayer.station_name.like(f"%{request.station_name}%")) + # 库位名称模糊搜索 - if request.storage_location_name: - query = query.filter(OperatePointLayer.storage_location_name.like(f"%{request.storage_location_name}%")) - - # 层名称模糊搜索 if request.layer_name: query = query.filter(OperatePointLayer.layer_name.like(f"%{request.layer_name}%")) @@ -161,7 +158,6 @@ class OperatePointService: if include_operate_point_info and layer.operate_point: storage_location_info.operate_point_id = layer.operate_point.id storage_location_info.station_name = layer.operate_point.station_name - storage_location_info.storage_location_name = layer.operate_point.storage_location_name storage_location_info.scene_id = layer.operate_point.scene_id storage_location_info.storage_area_id = layer.operate_point.storage_area_id storage_location_info.storage_area_type = layer.operate_point.storage_area_type.value if layer.operate_point.storage_area_type else None @@ -1068,7 +1064,6 @@ class OperatePointService: operate_point_info = { "id": layer.operate_point.id, "station_name": layer.operate_point.station_name, - "storage_location_name": layer.operate_point.storage_location_name, "scene_id": layer.operate_point.scene_id, "storage_area_id": layer.operate_point.storage_area_id, "storage_area_type": layer.operate_point.storage_area_type.value if layer.operate_point.storage_area_type else None,