Files
tsp-assistant/src/web/__pycache__/app.cpython-311.pyc

169 lines
41 KiB
Plaintext
Raw Normal View History

2025-09-06 21:06:18 +08:00
<EFBFBD>
2025-09-08 15:27:22 +08:00
5E<35>h<EFBFBD>\<00> <00>:<00>dZddlZddlZddlZddlmZmZddlmZmZm Z m
2025-09-06 21:06:18 +08:00
Z
m Z m Z ddl mZej<00>ej<00>ej<00>ej<00>e<13><00><00><00><00><00><00><00>ddlmZddlmZddlmZmZmZdd lmZdd
2025-09-08 15:27:22 +08:00
lmZee <20><00>Z!ee!<21><00>e<15><00>Z"e<17><00>Z#e<1D><00>Z$e<1F><00>Z%e!<21>&d <0B><00>d <0C><00><00>Z'e!<21>&d <0A><00>d<0E><00><00>Z(e!<21>&d<0F><00>d<10><00><00>Z)e!<21>&d<11><00>d<12><00><00>Z*e!<21>&ddg<01><14><00>d<15><00><00>Z+e!<21>&d<16><00>d<17><00><00>Z,e!<21>&ddg<01><14><00>d<19><00><00>Z-e!<21>&d<1A><00>d<1B><00><00>Z.e!<21>&ddg<01><14><00>d<1C><00><00>Z/e!<21>&ddg<01><14><00>d<1F><00><00>Z0e!<21>&dd g<01><14><00>d!<21><00><00>Z1e!<21>&d"dg<01><14><00>d#<23><00><00>Z2e!<21>&d$dg<01><14><00>d%<25><00><00>Z3e!<21>&d&<26><00>d'<27><00><00>Z4e!<21>&d(dg<01><14><00>d)<29><00><00>Z5e!<21>&d*<2A><00>d+<2B><00><00>Z6e!<21>&d,<2C><00>d-<2D><00><00>Z7e!<21>&d.dg<01><14><00>d/<2F><00><00>Z8e!<21>&d0dg<01><14><00>d1<64><00><00>Z9e!<21>&d2<64><00>d3<64><00><00>Z:e!<21>&d4dg<01><14><00>d5<64><00><00>Z;e!<21>&d6<64><00>d7<64><00><00>Z<e!<21>&d8d g<01><14><00>d9<64><00><00>Z=e!<21>&d:<3A><00>d;<3B><00><00>Z>e!<21>&d<<3C><00>d=<3D><00><00>Z?e!<21>&d>dg<01><14><00>d?<3F><00><00>Z@e!<21>&d@dg<01><14><00>dA<64><00><00>ZAe!<21>&dBdg<01><14><00>dC<64><00><00>ZBe!<21>&dDdg<01><14><00>dE<64><00><00>ZCe!<21>&dFdg<01><14><00>dG<64><00><00>ZDe!<21>&dH<64><00>dI<64><00><00>ZEe!<21>&dJ<64><00>dK<64><00><00>ZFe!<21>&dHdg<01><14><00>dL<64><00><00>ZGe!<21>&dM<64><00>dN<64><00><00>ZHe!<21>&dOdg<01><14><00>dP<64><00><00>ZIe!<21>&dQd g<01><14><00>dR<64><00><00>ZJe!<21>&dSdg<01><14><00>dT<64><00><00>ZKe!<21>&dUdg<01><14><00>dV<64><00><00>ZLe!<21>&dW<64><00>dX<64><00><00>ZMe!<21>&dWdg<01><14><00>dY<64><00><00>ZNe!<21>&dZ<64><00>d[<5B><00><00>ZOe!<21>&d\<5C><00>d]<5D><00><00>ZPe!<21>&d\dg<01><14><00>d^<5E><00><00>ZQe!<21>&d_<64><00>d`<60><00><00>ZRe!<21>&da<64><00>db<64><00><00>ZSe!<21>&dc<64><00>dd<64><00><00>ZTe!<21>&de<64><00>df<64><00><00>ZUe!<21>&dadg<01><14><00>dg<64><00><00>ZVe!<21>&dhdg<01><14><00>di<64><00><00>ZWe djkre!<21>Xdkdldm<64>n<EFBFBD><00>dSdS)ouK
2025-09-06 21:06:18 +08:00
TSP助手预警管理Web应用
提供预警系统的Web界面和API接口
<EFBFBD>N)<02>datetime<6D> timedelta)<06>Flask<73>render_template<74>request<73>jsonify<66>redirect<63>url_for)<01>CORS)<01> TSPAssistant)<01>TSPAgentAssistant)<03> AlertRule<6C>
2025-09-08 15:27:22 +08:00
AlertLevel<EFBFBD> AlertType)<01>RealtimeChatManager)<01>VehicleDataManager<65>/c<00> <00>td<01><00>S)u主页 - 综合管理平台zdashboard.html<6D>r<00><00><00>5C:\Users\jiezhao\Desktop\TSP_assistant\src\web\app.py<70>indexr!<00><00><00> <1B>+<2B> ,<2C> ,<2C>,rz/alertsc<00> <00>td<01><00>S)u预警管理页面z
2025-09-06 21:06:18 +08:00
index.htmlrrrr<00>alertsr&s<00><00> <1B><<3C> (<28> (<28>(rz /api/healthc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取系统健康状态<E78AB6>error<6F><72>N)<05> assistant<6E>get_system_healthr<00> Exception<6F>str<74><02>health<74>es r<00>
get_healthr'+<00>p<00><00>/<2F><1A>,<2C>,<2C>.<2E>.<2E><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>'*<00>
A<03>A<03>A<03>Az /api/alertsc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取预警列表rrN)r <00>get_active_alertsrr"r#<00>rr&s r<00>
2025-09-08 15:27:22 +08:00
get_alertsr-4r(r)<00>POST)<01>methodsc <00><><00> tj<00><00>}t<00>|<00>dd<02><00>|<00>dd<04><00>|<00>dd<06><00>|<00>dd<08><00><00> <09><00>}t d
|d <0B><02><00>S#t $r*}t d t|<02><00>i<01><00>d fcYd}~Sd}~wwxYw)u 创建预警<E9A284>
alert_type<EFBFBD>manual<61>titleu 手动预警<E9A284> description<6F><00>level<65>medium)r1r3r4r6T)<02>success<73>alertrrN)r<00>get_jsonr <00> create_alert<72>getrr"r#)<03>datar9r&s rr;r;=s<><00><00>
/<2F><16><1F>!<21>!<21><04><19>&<26>&<26><1B>x<EFBFBD>x<EFBFBD> <0C>h<EFBFBD>7<>7<><16>(<28>(<28>7<EFBFBD>N<EFBFBD>3<>3<><1C><08><08><1D><02>3<>3<><16>(<28>(<28>7<EFBFBD>H<EFBFBD>-<2D>-<2D> '<27>
<EFBFBD>
<EFBFBD><05> <17>4<EFBFBD>%<25>8<>8<>9<>9<>9<><39> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>BB<00>
C <03>C<03>>C <03>C z/api/alerts/statisticsc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取预警统计rrN)r <00>get_alert_statisticsrr"r#<00><02>statsr&s rr?r?Lsp<00><00>/<2F><19>.<2E>.<2E>0<>0<><05><16>u<EFBFBD>~<7E>~<7E><1D><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r)z"/api/alerts/<int:alert_id>/resolvec<00><><00> t<00>|<00><00>}|rtddd<03><02><00>Stddd<03><02><00>dfS#t$r*}tdt |<02><00>i<01><00>dfcYd }~Sd }~wwxYw)
u 解决预警Tu预警已解决<E8A7A3>r8<00>messageFu解决预警失败<E5A4B1><E8B4A5>rrN)r <00> resolve_alertrr"r#)<03>alert_idr8r&s rrFrFUs<><00><00>/<2F><1B>)<29>)<29>(<28>3<>3<><07> <12> U<01><1A>t<EFBFBD>8I<38>J<>J<>K<>K<> K<><1A>u<EFBFBD>9M<39>N<>N<>O<>O<>QT<51>T<> T<><54> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s"<00>-A<00>A<00>
2025-09-06 21:06:18 +08:00
A8<03>A3<03>-A8<03>3A8z
/api/rulesc <00><><00> tjj}g}|<00><00><00>D][\}}|<01>|j|j|jj|j j|j
2025-09-08 15:27:22 +08:00
|j |j |j |jd<01> <09><00><00>\t|<01><00>S#t $r*}tdt#|<04><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取预警规则列表<E58897> <09>namer4r1r6<00> threshold<6C> condition<6F>enabled<65>check_interval<61>cooldownrrN)r <00> alert_system<65>rules<65>items<6D>appendrJr4r1<00>valuer6rKrLrMrNrOrr"r#)rQ<00>
rules_datarJ<00>ruler&s r<00> get_rulesrWas<><00><00>/<2F><19>&<26>,<2C><05><17>
2025-09-06 21:06:18 +08:00
<EFBFBD><1F>+<2B>+<2B>-<2D>-<2D> <0F> <0F>J<EFBFBD>D<EFBFBD>$<24> <16> <1D> <1D><1C> <09>#<23>/<2F>"<22>o<EFBFBD>3<><1D><1A>)<29>!<21>^<5E>!<21>^<5E><1F><<3C>"&<26>"5<> <20>M<EFBFBD>
<0E>
<0E>
<0F>
<0F>
<0F>
<0F><17>z<EFBFBD>"<22>"<22>"<22><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>BB<00>
C<03>C<03>=C<03>Cc<00><><00> tj<00><00>}t|d|dt|d<00><00>t |d<00><00>t |d<00><00>|d|<00>dd<08><00>t|<00>d d
<EFBFBD><00><00><00>t|<00>d d <0C><00><00><00><00> <0A> <00> }tj <00>
2025-09-08 15:27:22 +08:00
|<01><00>}|rtddd<0F><02><00>Stddd<0F><02><00>dfS#t$r*}tdt|<03><00>i<01><00>dfcYd}~Sd}~wwxYw)u创建预警规则rJr4r1r6rKrLrMTrNi,rOirIu规则创建成功rCFu规则创建失败rErrN)rr:rrr<00>floatr<<00>intr rP<00>add_custom_rulerr"r#)r=rVr8r&s r<00> create_ruler\wsT<00><00>/<2F><16><1F>!<21>!<21><04><18><15>f<EFBFBD><1C><1C>]<5D>+<2B> <20><14>l<EFBFBD>!3<>4<>4<><1C>T<EFBFBD>'<27>]<5D>+<2B>+<2B><1B>D<EFBFBD><1B>-<2D>.<2E>.<2E><1A>;<3B>'<27><18>H<EFBFBD>H<EFBFBD>Y<EFBFBD><04>-<2D>-<2D><1E>t<EFBFBD>x<EFBFBD>x<EFBFBD>(8<>#<23>><3E>><3E>?<3F>?<3F><18><14><18><18>*<2A>d<EFBFBD>3<>3<>4<>4<>
2025-09-06 21:06:18 +08:00

<EFBFBD>

<EFBFBD>

<EFBFBD><04><1C>(<28>8<>8<><14>><3E>><3E><07> <12> U<01><1A>t<EFBFBD>8L<38>M<>M<>N<>N<> N<><1A>u<EFBFBD>9M<39>N<>N<>O<>O<>QT<51>T<> T<><54> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s$<00>C>D<00>D<00>
E <03>E<03>>E <03>E z/api/rules/<rule_name><3E>PUTc<00><00> tj<00><00>}tjj|fi|<01><01>}|rt ddd<03><02><00>St ddd<03><02><00>dfS#t $r*}t dt|<03><00>i<01><00>dfcYd }~Sd }~wwxYw)
2025-09-08 15:27:22 +08:00
u更新预警规则Tu规则更新成功rCFu规则更新失败rErrN)rr:r rP<00> update_rulerr"r#)<04> rule_namer=r8r&s rr_r_<00>s<><00><00>/<2F><16><1F>!<21>!<21><04><1B>(<28>4<>Y<EFBFBD>G<>G<>$<24>G<>G<><07> <12> U<01><1A>t<EFBFBD>8L<38>M<>M<>N<>N<> N<><1A>u<EFBFBD>9M<39>N<>N<>O<>O<>QT<51>T<> T<><54> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s#<00>=A<00>A<00>
2025-09-06 21:06:18 +08:00
B<03>B<03>=B<03>B<03>DELETEc<00><00> tj<00>|<00><00>}|rtddd<03><02><00>Stddd<03><02><00>dfS#t$r*}tdt |<02><00>i<01><00>dfcYd }~Sd }~wwxYw)
2025-09-08 15:27:22 +08:00
u删除预警规则Tu规则删除成功rCFu规则删除失败rErrN)r rP<00> delete_rulerr"r#)r`r8r&s rrcrc<00>s<><00><00>/<2F><1B>(<28>4<>4<>Y<EFBFBD>?<3F>?<3F><07> <12> U<01><1A>t<EFBFBD>8L<38>M<>M<>N<>N<> N<><1A>u<EFBFBD>9M<39>N<>N<>O<>O<>QT<51>T<> T<><54> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s"<00>2A <00>A <00>
2025-09-06 21:06:18 +08:00
A=<03>A8<03>2A=<03>8A=z/api/monitor/startc<00><><00> t<00><00><00>}|rtddd<03><02><00>Stddd<03><02><00>dfS#t$r*}tdt |<01><00>i<01><00>dfcYd }~Sd }~wwxYw)
2025-09-08 15:27:22 +08:00
u启动监控服务Tu监控服务已启动rCFu启动监控服务失败rErrN)r <00>start_monitoringrr"r#<00>r8r&s rrere<00>s<><00><00>/<2F><1B>,<2C>,<2C>.<2E>.<2E><07> <12> [<01><1A>t<EFBFBD>8O<38>P<>P<>Q<>Q<> Q<><1A>u<EFBFBD>9S<39>T<>T<>U<>U<>WZ<57>Z<> Z<><5A> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>"<00>,A<00>A<00>
2025-09-06 21:06:18 +08:00
A7<03> A2<03>,A7<03>2A7z/api/monitor/stopc<00><><00> t<00><00><00>}|rtddd<03><02><00>Stddd<03><02><00>dfS#t$r*}tdt |<01><00>i<01><00>dfcYd }~Sd }~wwxYw)
2025-09-08 15:27:22 +08:00
u停止监控服务Tu监控服务已停止rCFu停止监控服务失败rErrN)r <00>stop_monitoringrr"r#rfs rriri<00>s<><00><00>/<2F><1B>+<2B>+<2B>-<2D>-<2D><07> <12> [<01><1A>t<EFBFBD>8O<38>P<>P<>Q<>Q<> Q<><1A>u<EFBFBD>9S<39>T<>T<>U<>U<>WZ<57>Z<> Z<><5A> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>rgz/api/monitor/statusc<00>B<00> t<00><00><00>}t|<00>dd<02><00>|<00>dd<04><00>|<00>dd<04><00>d<06><03><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd }~Sd }~wwxYw)
u获取监控服务状态<E78AB6>monitor_status<75>unknown<77> health_scorer<00> active_alerts)rkrmrnrrN)r r!rr<r"r#r$s r<00>get_monitor_statusro<00>s<><00><00>/<2F><1A>,<2C>,<2C>.<2E>.<2E><06><16>$<24>j<EFBFBD>j<EFBFBD>)9<>9<EFBFBD>E<>E<>"<22>J<EFBFBD>J<EFBFBD>~<7E>q<EFBFBD>9<>9<>#<23>Z<EFBFBD>Z<EFBFBD><0F><11>;<3B>;<3B>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><>
<15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>A'A*<00>*
2025-09-08 15:27:22 +08:00
B<03>4B<03>B<03>Bz/api/check-alertsc<00><><00> t<00><00><00>}td|t|<00><00>d<02><03><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u手动检查预警T)r8r<00>countrrN)r <00> check_alertsr<00>lenr"r#r,s rrrrr<00>s<><00><00>/<2F><1A>'<27>'<27>)<29>)<29><06><16><1B><1C><18><16>[<5B>[<5B>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><>
<15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>8;<00>
2025-09-08 15:27:22 +08:00
A/<03>A*<03>$A/<03>*A/z/chatc<00> <00>td<01><00>S)u$实时对话页面 (WebSocket版本)z chat.htmlrrrr<00>chatru<00>s<00><00> <1B>;<3B> '<27> '<27>'rz
/chat-httpc<00> <00>td<01><00>S)u实时对话页面 (HTTP版本)zchat_http.htmlrrrr<00> chat_httprw<00>rrz/api/chat/sessionc<00>J<00> tj<00><00>}|<00>dd<02><00>}|<00>d<03><00>}t<00>||<02><00>}t d|dd<06><03><00>S#t $r*}t dt|<04><00>i<01><00>dfcYd }~Sd }~wwxYw)
u创建对话会话<E4BC9A>user_id<69> anonymous<75> work_order_idTu会话创建成功)r8<00>
session_idrDrrN)rr:r<<00> chat_manager<65>create_sessionrr"r#)r=ryr{r|r&s r<00>create_chat_sessionr<00>s<><00><00> /<2F><16><1F>!<21>!<21><04><16>(<28>(<28>9<EFBFBD>k<EFBFBD>2<>2<><07><1C><08><08><1F>1<>1<> <0A>!<21>0<>0<><17>-<2D>H<>H<>
2025-09-06 21:06:18 +08:00
<EFBFBD><16><1B>$<24>+<2B>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><>
<15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>A+A.<00>.
2025-09-08 15:27:22 +08:00
B"<03>8B<03>B"<03>B"z/api/chat/messagec<00>n<00> tj<00><00>}|<00>d<01><00>}|<00>d<02><00>}|r|stddi<01><00>dfSt<00>||<02><00>}t|<03><00>S#t $r*}tdt|<04><00>i<01><00>dfcYd}~Sd}~wwxYw)u发送聊天消息r|rDr<00>缺少必要参数rErN)rr:r<rr}<00>process_messager"r#)r=r|rD<00>resultr&s r<00>send_chat_messager<65><00>s<><00><00> /<2F><16><1F>!<21>!<21><04><19>X<EFBFBD>X<EFBFBD>l<EFBFBD>+<2B>+<2B>
2025-09-06 21:06:18 +08:00
<EFBFBD><16>(<28>(<28>9<EFBFBD>%<25>%<25><07><19> A<01><17> A<01><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40><1D>-<2D>-<2D>j<EFBFBD>'<27>B<>B<><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s$<00>AB<00>)B<00>
B4<03>
2025-09-08 15:27:22 +08:00
B/<03>)B4<03>/B4z/api/chat/history/<session_id>c<00><><00> t<00>|<00><00>}td|d<02><02><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取对话历史T)r8<00>historyrrN)r}<00>get_session_historyrr"r#)r|r<>r&s r<00>get_chat_historyr<79>s<><00><00>/<2F><1E>2<>2<>:<3A>><3E>><3E><07><16><1B><1E>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>+.<00>
A"<03>A<03>A"<03>A"z/api/chat/work-orderc<00><><00> tj<00><00>}|<00>d<01><00>}|<00>d<02><00>}|<00>d<03><00>}|<00>dd<05><00>}|<00>dd<07><00>}|r|r|stdd i<01><00>d
2025-09-08 15:27:22 +08:00
fSt<00>|||||<05><00>}t|<06><00>S#t $r*}tdt|<07><00>i<01><00>d fcYd }~Sd }~wwxYw) <0A> 创建工单r|r3r4<00>categoryu 技术问题<E997AE>priorityr7rr<>rErN)rr:r<rr}<00>create_work_orderr"r#)r=r|r3r4r<>r<>r<>r&s rr<>r<>s<00><00>/<2F><16><1F>!<21>!<21><04><19>X<EFBFBD>X<EFBFBD>l<EFBFBD>+<2B>+<2B>
2025-09-06 21:06:18 +08:00
<EFBFBD><14><08><08><17>!<21>!<21><05><1A>h<EFBFBD>h<EFBFBD>}<7D>-<2D>-<2D> <0B><17>8<EFBFBD>8<EFBFBD>J<EFBFBD><0E>7<>7<><08><17>8<EFBFBD>8<EFBFBD>J<EFBFBD><08>1<>1<><08><19> A<01><15> A<01>k<EFBFBD> A<01><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40><1D>/<2F>/<2F>
<EFBFBD>E<EFBFBD>;<3B>PX<50>Zb<5A>c<>c<><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s$<00>BC<00>,C<00>
2025-09-08 15:27:22 +08:00
C:<03>C5<03>/C:<03>5C:z(/api/chat/work-order/<int:work_order_id>c<00><><00> t<00>|<00><00>}t|<01><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取工单状态rrN)r}<00>get_work_order_statusrr"r#)r{r<>r&s rr<>r<>'sr<00><00>/<2F><1D>3<>3<>M<EFBFBD>B<>B<><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>(+<00>
A<03>A<03>A<03>Az/api/chat/session/<session_id>c<00><><00> t<00>|<00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u结束对话会话u会话已结束u结束会话失败rCrrN)r}<00> end_sessionrr"r#)r|r8r&s r<00>end_chat_sessionr<6E>0s<><00><00>/<2F><1E>*<2A>*<2A>:<3A>6<>6<><07><16><1E>,3<>M<>(<28>(<28>9M<39>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>/2<00>
2025-09-08 15:27:22 +08:00
A&<03>A!<03>A&<03>!A&z/api/chat/sessionsc<00><><00> t<00><00><00>}td|d<02><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取活跃会话列表T)r8<00>sessionsrrN)r}<00>get_active_sessionsrr"r#)r<>r&s rr<>r<><s<><00><00>/<2F><1F>3<>3<>5<>5<><08><16><1B> <20>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>*-<00>
2025-09-08 15:27:22 +08:00
A!<03>A<03>A!<03>A!z/api/agent/statusc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取Agent状态rrN)<05>agent_assistant<6E>get_agent_statusrr"r#)<02>statusr&s rr<>r<>Isp<00><00>/<2F> <20>1<>1<>3<>3<><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r)z/api/agent/togglec<00>*<00> tj<00><00>}|<00>dd<02><00>}t<00>|<01><00>}t |d|rdnd<05><00>d<06><02><00>S#t $r*}t dt|<03><00>i<01><00>dfcYd }~Sd }~wwxYw)
u切换Agent模式rMTuAgent模式已u启用u禁用rCrrN)rr:r<r<><00>toggle_agent_moderr"r#)r=rMr8r&s rr<>r<>Rs<><00><00> /<2F><16><1F>!<21>!<21><04><16>(<28>(<28>9<EFBFBD>d<EFBFBD>+<2B>+<2B><07>!<21>3<>3<>G<EFBFBD><<3C><<3C><07><16><1E>K<>G<EFBFBD>(I<><08><08><18>K<>K<>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>AA<00>
2025-09-08 15:27:22 +08:00
B<03>(B <03>B<03> Bz/api/agent/monitoring/startc<00><><00> t<00><00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u启动Agent监控uAgent监控已启动u 启动失败rCrrN)r<><00>start_proactive_monitoringrr"r#rfs r<00>start_agent_monitoringr<67>`s<><00><00>/<2F>!<21><<3C><<3C>><3E>><3E><07><16><1E>18<31>L<>-<2D>-<2D>n<EFBFBD>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>.1<00>
2025-09-08 15:27:22 +08:00
A%<03>A <03>A%<03> A%z/api/agent/monitoring/stopc<00><><00> t<00><00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u停止Agent监控uAgent监控已停止u 停止失败rCrrN)r<><00>stop_proactive_monitoringrr"r#rfs r<00>stop_agent_monitoringr<67>ls<><00><00>/<2F>!<21>;<3B>;<3B>=<3D>=<3D><07><16><1E>18<31>L<>-<2D>-<2D>n<EFBFBD>
2025-09-06 21:06:18 +08:00
<EFBFBD>
2025-09-08 15:27:22 +08:00
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z/api/agent/proactive-monitoringc<00><><00> t<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u主动监控检查rrN)r<><00>run_proactive_monitoringrr"r#)r<>r&s r<00>proactive_monitoringr<67>xsp<00><00>/<2F> <20>9<>9<>;<3B>;<3B><06><16>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r)z/api/agent/intelligent-analysisc<00><><00> t<00><00><00>}td|d<02><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u 智能分析T)r8<00>analysisrrN)r<><00>run_intelligent_analysisrr"r#)r<>r&s r<00>intelligent_analysisr<73><00>sz<00><00>/<2F>"<22>;<3B>;<3B>=<3D>=<3D><08><16>4<EFBFBD>X<EFBFBD>><3E>><3E>?<3F>?<3F>?<3F><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z/api/knowledgec<00>n<00> tj<00>ddt<00><03><00>}tj<00>ddt<00><03><00>}tj<00>||<01><06><00>}t|<02><00>S#t$r*}tdt|<03><00>i<01><00>dfcYd }~Sd }~wwxYw)
2025-09-06 21:06:18 +08:00
u获取知识库列表<E58897>page<67><00><01>type<70>per_page<67>
2025-09-08 15:27:22 +08:00
)r<>r<>rrN)
r<00>argsr<rZr <00>knowledge_manager<65>get_knowledge_entriesrr"r#)r<>r<><00>knowledge_entriesr&s r<00> get_knowledger<65><00>s<><00><00> /<2F><16>|<7C><1F><1F><06><01><03><1F>4<>4<><04><1A><<3C>#<23>#<23>J<EFBFBD><02><13>#<23>=<3D>=<3D><08>&<26>7<>M<>M<><15><08>N<01>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD><19><17>(<28>)<29>)<29>)<29><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>A=B<00>
B4<03>
2025-09-08 15:27:22 +08:00
B/<03>)B4<03>/B4z/api/knowledge/searchc<00>0<00> tj<00>dd<02><00>}t<00>|d<03><04><00>}t |<01>dg<00><00><00><00>S#t $r*}t dt|<02><00>i<01><00>dfcYd}~Sd}~wwxYw) u搜索知识库<E8AF86>qr5<00>)<01>top_k<5F>resultsrrN)rr<>r<r <00>search_knowledgerr"r#)<03>queryr<79>r&s rr<>r<><00>s<><00><00>/<2F><17> <0C> <20> <20><13>b<EFBFBD>)<29>)<29><05><1B>,<2C>,<2C>U<EFBFBD>!<21>,<2C><<3C><<3C><07><16>w<EFBFBD>{<7B>{<7B>9<EFBFBD>b<EFBFBD>1<>1<>2<>2<>2<><32> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>AA!<00>!
2025-09-06 21:06:18 +08:00
B<03>+B<03>
B<03>Bc<00>:<00> tj<00><00>}tj<00>|d|d|d|d<00><05><00>}t ||rdndd<08><02><00>S#t $r*}t d t|<02><00>i<01><00>d
2025-09-08 15:27:22 +08:00
fcYd }~Sd }~wwxYw) u添加知识库条目<E69DA1>question<6F>answerr<72><00>confidence_score)r<>r<>r<>r<>u知识添加成功<E68890> 添加失败rCrrN)rr:r r<><00>add_knowledge_entryrr"r#<00>r=r8r&s r<00> add_knowledger<65><00>s<><00><00>
2025-09-06 21:06:18 +08:00
/<2F><16><1F>!<21>!<21><04><1B>-<2D>A<>A<><19>*<2A>%<25><17><08>><3E><19>*<2A>%<25>!<21>"4<>5<> B<01>
<EFBFBD>
<EFBFBD><07> <17>7<EFBFBD>w<EFBFBD>7j<37>7K<37>7K<37>\j<>k<>k<>l<>l<>l<><6C> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>A#A&<00>&
2025-09-08 15:27:22 +08:00
B<03>0B<03>B<03>Bz/api/knowledge/statsc<00><><00> tj<00><00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取知识库统计rrN)r r<><00>get_knowledge_statsrr"r#r@s rr<>r<><00>ss<00><00>/<2F><19>+<2B>?<3F>?<3F>A<>A<><05><16>u<EFBFBD>~<7E>~<7E><1D><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>,/<00>
2025-09-06 21:06:18 +08:00
A#<03>A<03>A#<03>A#z/api/knowledge/uploadc<00>L<00> dtjvrtddi<01><00>dfStjd}|jdkrtddi<01><00>dfSddl}ddl}ddl}d |<03><00><00><00>|j<00> |j<00><00>d
<00><00>}|j<00>
2025-09-08 15:27:22 +08:00
|<01> <00><00>|<04><00>} |<00> |<05><00>t<00>||j<00><00>}t|<06><00> |j<00>|<05><00>r|j|<05><00>SS#t"$r'}t$<00>d |<07><00><02><00>Yd}~Sd}~wwxYw# |j<00>|<05><00>r|j|<05><00>ww#t"$r'}t$<00>d |<07><00><02><00>Yd}~wd}~wwxYwxYw#t"$rG}t$<00>d |<08><00><02><00>tdt+|<08><00>i<01><00>d fcYd}~Sd}~wwxYw)u上传文件并生成知识库<E8AF86>fileru没有上传文件rEr5u没有选择文件rN<>upload_r<5F>u清理临时文件失败: u文件上传处理失败: r)r<00>filesr<00>filename<6D>tempfile<6C>os<6F>uuid<69>uuid4<64>path<74>splitext<78>join<69>
gettempdir<EFBFBD>saver<65><00>process_file_to_knowledge<67>exists<74>unlinkr"<00>logger<65>warningrr#) r<>r<>r<>r<><00> temp_filename<6D> temp_pathr<68><00> cleanup_errorr&s r<00>upload_knowledge_filer<65><00>s<00><00>$/<2F> <11><17><1D> &<26> &<26><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40><16>}<7D>V<EFBFBD>$<24><04> <0F>=<3D>B<EFBFBD> <1E> <1E><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40> <18><0F><0F><0F><11> <09> <09> <09><13> <0B> <0B> <0B>U<01>$<24>*<2A>*<2A>,<2C>,<2C>T<><02><07>0@<40>0@<40><14><1D>0O<30>0O<30>PQ<50>0R<30>T<>T<> <0A><16>G<EFBFBD>L<EFBFBD>L<EFBFBD><18>!4<>!4<>!6<>!6<> <0A>F<>F<> <09> M<01> <10>I<EFBFBD>I<EFBFBD>i<EFBFBD> <20> <20> <20>%<25>><3E>><3E>y<EFBFBD>$<24>-<2D>X<>X<>F<EFBFBD><1A>6<EFBFBD>?<3F>?<3F> M<01><15>7<EFBFBD>><3E>><3E>)<29>,<2C>,<2C>)<29><1D>B<EFBFBD>I<EFBFBD>i<EFBFBD>(<28>(<28>(<28>(<28>)<29><><1C> M<01> M<01> M<01><16><0E><0E>K<>M<EFBFBD>K<>K<>L<>L<>L<>L<>L<>L<>L<>L<><4C><EFBFBD><EFBFBD><EFBFBD> M<01><><EFBFBD><EFBFBD><EFBFBD> M<01><15>7<EFBFBD>><3E>><3E>)<29>,<2C>,<2C>)<29><1D>B<EFBFBD>I<EFBFBD>i<EFBFBD>(<28>(<28>(<28>(<28>)<29><><1C> M<01> M<01> M<01><16><0E><0E>K<>M<EFBFBD>K<>K<>L<>L<>L<>L<>L<>L<>L<>L<><4C><EFBFBD><EFBFBD><EFBFBD> M<01><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <15>/<2F>/<2F>/<2F><0E> <0C> <0C>5<>!<21>5<>5<>6<>6<>6<><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<EFBFBD><00> G<00>/G<00>A5G<00> AE-<00> *D9<02>9
2025-09-06 21:06:18 +08:00
E*<05>E%<05> G<00>%E*<05>*G<00>-G<03>/*F<04>G<03>
G <07>%G<07>G<03>G <07> G<03>G<00>
2025-09-08 15:27:22 +08:00
H#<03><H<03>H#<03>H#z(/api/knowledge/delete/<int:knowledge_id>c<00><><00> tj<00>|<00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u删除知识库条目u 删除成功u 删除失败rCrrN)r r<><00>delete_knowledge_entryrr"r#<00><03> knowledge_idr8r&s r<00>delete_knowledger<65><00>s<><00><00>/<2F><1B>-<2D>D<>D<>\<5C>R<>R<><07><16>7<EFBFBD><17>7d<37>~<7E>~<7E>Vd<56>e<>e<>f<>f<>f<><66> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><00>47<00>
A+<03>A&<03> A+<03>&A+z(/api/knowledge/verify/<int:knowledge_id>c<00>4<00> tj<00><00>pi}|<01>dd<02><00>}tj<00>||<02><00>}t ||rdndd<05><02><00>S#t$r*}t dt|<04><00>i<01><00>dfcYd}~Sd}~wwxYw) u验证知识库条目<E69DA1> verified_by<62>adminu 验证成功u 验证失败rCrrN) rr:r<r r<><00>verify_knowledge_entryrr"r#)r<>r=r<>r8r&s r<00>verify_knowledger<65><00>s<><00><00>/<2F><16><1F>!<21>!<21>'<27>R<EFBFBD><04><1A>h<EFBFBD>h<EFBFBD>}<7D>g<EFBFBD>6<>6<> <0B><1B>-<2D>D<>D<>\<5C>S^<5E>_<>_<><07><16>7<EFBFBD><17>7d<37>~<7E>~<7E>Vd<56>e<>e<>f<>f<>f<><66> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>A A#<00>#
B<03>-B<03> B<03>Bz*/api/knowledge/unverify/<int:knowledge_id>c<00><><00> tj<00>|<00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u取消验证知识库条目u取消验证成功u取消验证失败rCrrN)r r<><00>unverify_knowledge_entryrr"r#r<>s r<00>unverify_knowledger<65><00>s<><00><00>/<2F><1B>-<2D>F<>F<>|<7C>T<>T<><07><16>7<EFBFBD>w<EFBFBD>7p<37>7K<37>7K<37>\p<>q<>q<>r<>r<>r<><72> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z/api/workordersc <00><><00><02><03> tj<00>d<01><00><00>tj<00>d<02><00><00>ddddddd d
2025-09-06 21:06:18 +08:00
<EFBFBD>d d d ddddd
2025-09-08 15:27:22 +08:00
<EFBFBD>g}<00>r<14>dkr<0E>fd<13>|D<00><00>}<00>r<14>dkr<0E>fd<14>|D<00><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取工单列表r<E8A1A8>r<>r<>u车辆无法远程启动u0用户反映APP中远程启动功能无法使用u 远程控制<E68EA7>high<67>openz2024-01-01T10:00:00Z)<07>idr3r4r<>r<>r<><00>
created_at<EFBFBD>uAPP显示异常u!APP中车辆信息显示不正确u APP功能r7<00> in_progressz2024-01-01T11:00:00Z<30>allc<00>,<00><01>g|]}|d<00>k<00>|<01><02>S)r<>r)<03>.0<EFBFBD>w<> status_filters <20>r<00>
<listcomp>z"get_workorders.<locals>.<listcomp>%s'<00><><00>P<>P<>P<><01>1<EFBFBD>X<EFBFBD>;<3B>-<2D>3O<33>3O<33>!<21>3O<33>3O<33>3Orc<00>,<00><01>g|]}|d<00>k<00>|<01><02>S)r<>r)r<>r<><00>priority_filters <20>rr<>z"get_workorders.<locals>.<listcomp>'s'<00><><00>T<>T<>T<><01>1<EFBFBD>Z<EFBFBD>=<3D>O<EFBFBD>3S<33>3S<33>!<21>3S<33>3S<33>3SrrrN)rr<>r<rr"r#)<04>
workordersr&r<>r<>s @@r<00>get_workordersr<73>s0<00><><EFBFBD><00>"/<2F><1F> <0C>(<28>(<28><18>2<>2<> <0A>!<21>,<2C>*<2A>*<2A>:<3A>6<>6<><0F>
2025-09-06 21:06:18 +08:00
<18>3<>Q<>*<2A>"<22> <20>4<> <0E> <0E><18>*<2A>B<>'<27>$<24>'<27>4<> <0E> <0E>
<EFBFBD>
<EFBFBD>, <19> Q<01>]<5D>e<EFBFBD>3<>3<>P<>P<>P<>P<>Z<EFBFBD>P<>P<>P<>J<EFBFBD> <1A> U<01><EFBFBD>%<25>7<>7<>T<>T<>T<>T<>Z<EFBFBD>T<>T<>T<>J<EFBFBD><16>z<EFBFBD>"<22>"<22>"<22><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>B B<00>
C<03>C<03>:C<03>Cc<00>(<00> tj<00><00>}t<00>|d|d|d|d<00><05><00>}t d|d<07><02><00>S#t
$r*}t dt |<02><00>i<01><00>d fcYd
}~Sd
2025-09-08 15:27:22 +08:00
}~wwxYw) r<>r3r4r<>r<>)r3r4r<>r<>T)r8<00> workorderrrN)rr:r r<>rr"r#)r=r<>r&s r<00>create_workorderr-s<><00><00>
2025-09-06 21:06:18 +08:00
/<2F><16><1F>!<21>!<21><04><1A>,<2C>,<2C><16>w<EFBFBD>-<2D><1C>]<5D>+<2B><19>*<2A>%<25><19>*<2A>%<25> -<2D>
<EFBFBD>
<EFBFBD><06> <17>4<EFBFBD>f<EFBFBD>=<3D>=<3D>><3E>><3E>><3E><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>AA<00>
2025-09-08 15:27:22 +08:00
B<03>'B <03>B<03> Bz/api/analyticsc<00><><00> t<00>d<01><00>}t|<00><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取分析数据<E695B0> last_7_daysrrN)r <00>generate_analyticsrr"r#)<02> analyticsr&s r<00> get_analyticsr=st<00><00>/<2F><1D>0<>0<><1D>?<3F>?<3F> <09><16>y<EFBFBD>!<21>!<21>!<21><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z /api/settingsc<00><><00> dddddd<04>}t|<00><00>S#t$r*}tdt|<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取系统设置<E8AEBE>r<>T)<05> api_timeout<75> max_history<72>refresh_interval<61>auto_monitoring<6E>
agent_moderrN)rr"r#)<02>settingsr&s r<00> get_settingsrGs~<00><00>
2025-09-06 21:06:18 +08:00
/<2F><1D><1D> "<22>#<23><1E> 
<EFBFBD>
<EFBFBD><08><17>x<EFBFBD> <20> <20> <20><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00><00>
2025-09-08 15:27:22 +08:00
A <03>A<03>A <03>A c<00><><00> tj<00><00>}tddd<03><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u保存系统设置Tu设置保存成功rCrrN)rr:rr"r#)r=r&s r<00> save_settingsrVsx<00><00>/<2F><16><1F>!<21>!<21><04><16>4<EFBFBD>4H<34>I<>I<>J<>J<>J<><4A> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>$'<00>
2025-09-06 21:06:18 +08:00
A<03>A<03>A<03>Az/api/system/infoc<00><><00> ddl}ddl}d|jdddd<07>}t|<02><00>S#t$r*}tdt |<03><00>i<01><00>d fcYd}~Sd}~wwxYw)
2025-09-08 15:27:22 +08:00
u获取系统信息rNz1.0.0<EFBFBD>SQLiteu 2天3小时<E5B08F><E697B6>)<05>version<6F>python_version<6F>database<73>uptime<6D> memory_usagerr)<06>sys<79>platformrrr"r#)rr<00>infor&s r<00>get_system_infor`s<><00><00> /<2F><12>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD>
<EFBFBD><17><0F><0F><0F><1E>!<21>k<EFBFBD> <20>#<23><1F> 
<EFBFBD>
<EFBFBD><04><17>t<EFBFBD>}<7D>}<7D><1C><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>#&<00>
A<03>A<03>A<03>Az/api/vehicle/datac<00><><00> tj<00>d<01><00>}tj<00>d<02><00>}tj<00>ddt<00><05><00>}|rt<00>|||<02><00>}nt<00>|<02><06><00>}t|<03><00>S#t$r*}tdt|<04><00>i<01><00>dfcYd }~Sd }~wwxYw)
u获取车辆数据<E695B0>
2025-09-08 15:27:22 +08:00
vehicle_id<EFBFBD> data_type<70>limitr<74>r<>)r"rrN)
rr<>r<rZ<00>vehicle_manager<65>get_vehicle_data<74>search_vehicle_datarr"r#)r r!r"r=r&s rr$r$rs<><00><00> /<2F><1C>\<5C>%<25>%<25>l<EFBFBD>3<>3<>
2025-09-06 21:06:18 +08:00
<EFBFBD><1B>L<EFBFBD>$<24>$<24>[<5B>1<>1<> <09><17> <0C> <20> <20><17>"<22>3<EFBFBD> <20>7<>7<><05> <15> D<01>"<22>3<>3<>J<EFBFBD> <09>5<EFBFBD>Q<>Q<>D<EFBFBD>D<EFBFBD>"<22>6<>6<>U<EFBFBD>6<>C<>C<>D<EFBFBD><16>t<EFBFBD>}<7D>}<7D><1C><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>s<00>B-B0<00>0
2025-09-08 15:27:22 +08:00
C$<03>:C<03>C$<03>C$z%/api/vehicle/data/<vehicle_id>/latestc<00><><00> t<00>|<00><00>}t|<01><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取车辆最新数据rrN)r#<00>get_latest_vehicle_datarr"r#)r r=r&s rr'r'<00>sr<00><00>/<2F><1E>6<>6<>z<EFBFBD>B<>B<><04><16>t<EFBFBD>}<7D>}<7D><1C><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z&/api/vehicle/data/<vehicle_id>/summaryc<00><><00> t<00>|<00><00>}t|<01><00>S#t$r*}tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取车辆数据摘要rrN)r#<00>get_vehicle_summaryrr"r#)r <00>summaryr&s rr)r)<00>st<00><00>/<2F>!<21>5<>5<>j<EFBFBD>A<>A<><07><16>w<EFBFBD><1F><1F><1F><> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>c<00>J<00> tj<00><00>}t<00>|d|d|d|<00>d<04><00><00><05><00>}t ||rdndd<08><02><00>S#t $r*}t d t|<02><00>i<01><00>d
fcYd }~Sd }~wwxYw) u添加车辆数据r r!<00>
data_value<EFBFBD> vehicle_vin)r r!r,r-u数据添加成功r<E58A9F>rCrrN)rr:r#<00>add_vehicle_datar<rr"r#r<>s rr.r.<00>s<><00><00>
2025-09-06 21:06:18 +08:00
/<2F><16><1F>!<21>!<21><04>!<21>2<>2<><1B>L<EFBFBD>)<29><1A>;<3B>'<27><1B>L<EFBFBD>)<29><1C><08><08><1D>/<2F>/<2F> 3<>
<EFBFBD>
2025-09-08 15:27:22 +08:00
<EFBFBD><07> <17>7<EFBFBD>w<EFBFBD>7j<37>7K<37>7K<37>\j<>k<>k<>l<>l<>l<><6C> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD>z/api/vehicle/init-sample-datac<00><><00> t<00><00><00>}t||rdndd<03><02><00>S#t$r*}tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u初始化示例车辆数据u示例数据初始化成功u初始化失败rCrrN)r#<00>add_sample_vehicle_datarr"r#rfs r<00>init_sample_vehicle_datar1<00>s<><00><00>/<2F>!<21>9<>9<>;<3B>;<3B><07><16>7<EFBFBD>X_<58>7v<37>7T<37>7T<37>ev<65>w<>w<>x<>x<>x<><78> <14>/<2F>/<2F>/<2F><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>r<EFBFBD><00>__main__Tz0.0.0.0i<EFBFBD>)<03>debug<75>host<73>port)Y<>__doc__rr<><00>jsonrr<00>flaskrrrrr r
2025-09-06 21:06:18 +08:00
<00>
2025-09-08 15:27:22 +08:00
flask_corsr r<>rS<00>dirname<6D>abspath<74>__file__<5F>src.mainr <00>src.agent_assistantr <00>src.analytics.alert_systemrrr<00>src.dialogue.realtime_chatr<00> src.vehicle.vehicle_data_managerr<00>__name__<5F>appr r<>r}r#<00>routerrr'r-r;r?rFrWr\r_rcrerirorrrurwrr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rrrrrr$r'r)r.r1<00>runrrr<00><module>rFs
<00><01><04><04>
2025-09-06 21:06:18 +08:00
 <0B>
<EFBFBD>
<EFBFBD>
2025-09-08 15:27:22 +08:00
<EFBFBD> <09> <09> <09> <09> <0B> <0B> <0B> <0B>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<>M<><1B><1B><1B><1B><1B><1B><04><08><0F><0F><02><07><0F><0F><02><07><0F><0F><02><07><0F><0F><08>0I<30>0I<30> J<> J<>K<>K<>L<>L<>L<>!<21>!<21>!<21>!<21>!<21>!<21>1<>1<>1<>1<>1<>1<>G<>G<>G<>G<>G<>G<>G<>G<>G<>G<>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F> <0B>e<EFBFBD>H<EFBFBD>o<EFBFBD>o<EFBFBD><03><04><04>S<EFBFBD> <09> <09> <09> <19>L<EFBFBD>N<EFBFBD>N<EFBFBD> <09>#<23>#<23>%<25>%<25><0F>"<22>"<22>$<24>$<24> <0C>$<24>$<24>&<26>&<26><0F><04><19><19>3<EFBFBD><1E><1E>-<2D>-<2D><10><1E>-<2D><05><19><19>9<EFBFBD><15><15>)<29>)<29><16><15>)<29><05><19><19>=<3D><19><19>/<2F>/<2F><1A><19>/<2F><05><19><19>=<3D><19><19>/<2F>/<2F><1A><19>/<2F><05><19><19>=<3D>6<EFBFBD>(<28><19>+<2B>+<2B> /<2F> /<2F>,<2C>+<2B> /<2F><05><19><19> #<23>$<24>$<24>/<2F>/<2F>%<25>$<24>/<2F><05><19><19> /<2F>&<26><18><19>B<>B<> /<2F> /<2F>C<01>B<> /<2F><05><19><19><<3C><18><18>/<2F>/<2F><19><18>/<2F>*<05><19><19><<3C>&<26><18><19>*<2A>*<2A>/<2F>/<2F>+<2B>*<2A>/<2F>0<05><19><19> #<23>e<EFBFBD>W<EFBFBD><19>5<>5<>
2025-09-06 21:06:18 +08:00
/<2F>
/<2F>6<>5<>
/<2F><05><19><19> #<23>h<EFBFBD>Z<EFBFBD><19>8<>8<> /<2F> /<2F>9<>8<> /<2F><05><19><19> <1F>&<26><18><19>2<>2<> /<2F> /<2F>3<>2<> /<2F><05><19><19> <1E><16><08><19>1<>1<> /<2F> /<2F>2<>1<> /<2F><05><19><19> <20>!<21>!<21>
/<2F>
/<2F>"<22>!<21>
/<2F><05><19><19> <1E><16><08><19>1<>1<>
/<2F>
/<2F>2<>1<>
/<2F><05><19><19>7<EFBFBD><13><13>(<28>(<28><14><13>(<28><05><19><19><<3C><18><18>-<2D>-<2D><19><18>-<2D><05><19><19> <1E><16><08><19>1<>1<>/<2F>/<2F>2<>1<>/<2F>"<05><19><19> <1E><16><08><19>1<>1<> /<2F> /<2F>2<>1<> /<2F><05><19><19> +<2B>,<2C>,<2C> /<2F> /<2F>-<2D>,<2C> /<2F><05><19><19> !<21>F<EFBFBD>8<EFBFBD><19>4<>4<>/<2F>/<2F>5<>4<>/<2F>$<05><19><19> 5<>6<>6<>/<2F>/<2F>7<>6<>/<2F><05><19><19> +<2B>h<EFBFBD>Z<EFBFBD><19>@<40>@<40> /<2F> /<2F>A<01>@<40> /<2F><05><19><19> <1F> <20> <20> /<2F> /<2F>!<21> <20> /<2F><05><19><19> <1E><1F><1F>/<2F>/<2F> <20><1F>/<2F><05><19><19> <1E><16><08><19>1<>1<> /<2F> /<2F>2<>1<> /<2F><05><19><19> (<28>6<EFBFBD>(<28><19>;<3B>;<3B> /<2F> /<2F><<3C>;<3B> /<2F><05><19><19> '<27>&<26><18><19>:<3A>:<3A> /<2F> /<2F>;<3B>:<3A> /<2F><05><19><19> ,<2C>v<EFBFBD>h<EFBFBD><19>?<3F>?<3F>/<2F>/<2F>@<01>?<3F>/<2F><05><19><19> ,<2C>v<EFBFBD>h<EFBFBD><19>?<3F>?<3F>/<2F>/<2F>@<01>?<3F>/<2F><05><19><19> <1B><1C><1C>/<2F>/<2F><1D><1C>/<2F> <05><19><19> "<22>#<23>#<23>/<2F>/<2F>$<24>#<23>/<2F><05><19><19> <1B>f<EFBFBD>X<EFBFBD><19>.<2E>.<2E> /<2F> /<2F>/<2F>.<2E> /<2F><05><19><19> !<21>"<22>"<22>/<2F>/<2F>#<23>"<22>/<2F><05><19><19> "<22>V<EFBFBD>H<EFBFBD><19>5<>5<>&/<2F>&/<2F>6<>5<>&/<2F>P<05><19><19> 5<><08>z<EFBFBD><19>J<>J<>/<2F>/<2F>K<01>J<>/<2F><05><19><19> 5<><06>x<EFBFBD><19>H<>H<>/<2F>/<2F>I<01>H<>/<2F><05><19><19> 7<>&<26><18><19>J<>J<>/<2F>/<2F>K<01>J<>/<2F><05><19><19> <1C><1D><1D>$/<2F>$/<2F><1E><1D>$/<2F>L<05><19><19> <1C>v<EFBFBD>h<EFBFBD><19>/<2F>/<2F> /<2F> /<2F>0<>/<2F> /<2F><05><19><19> <1B><1C><1C>/<2F>/<2F><1D><1C>/<2F><05><19><19>?<3F><1B><1B> /<2F> /<2F><1C><1B> /<2F><05><19><19>?<3F>V<EFBFBD>H<EFBFBD><19>-<2D>-<2D>/<2F>/<2F>.<2E>-<2D>/<2F><05><19><19> <1D><1E><1E>/<2F>/<2F><1F><1E>/<2F>"<05><19><19> <1E><1F><1F>/<2F>/<2F> <20><1F>/<2F> <05><19><19> 2<>3<>3<>/<2F>/<2F>4<>3<>/<2F><05><19><19> 3<>4<>4<>/<2F>/<2F>5<>4<>/<2F><05><19><19> <1E><16><08><19>1<>1<> /<2F> /<2F>2<>1<> /<2F><05><19><19> *<2A>V<EFBFBD>H<EFBFBD><19>=<3D>=<3D>/<2F>/<2F>><3E>=<3D>/<2F> <0C>z<EFBFBD><19><19><07>G<EFBFBD>G<EFBFBD>$<24>Y<EFBFBD>T<EFBFBD>G<EFBFBD>2<>2<>2<>2<>2<><1A>r