Files
assist/src/web/__pycache__/app.cpython-311.pyc

271 lines
57 KiB
Plaintext
Raw Normal View History

2025-09-06 21:06:18 +08:00
<EFBFBD>
<00><><EFBFBD>h<EFBFBD><68><00> <00><00>dZddlZddlZddlZddlZddlmZmZddlm Z ddl
m Z ddl m Z mZmZmZmZmZmZmZddlmZddlmZej<00>ej<00>ej<00>ej<00>e<1D><00><00><00><00><00><00><00>dd lmZdd
l m!Z!dd l"m#Z#m$Z$m%Z%dd l&m'Z'dd l(m)Z)e e*<2A><00>Z+ee+<2B><00>dZ,e,e+j-d<de+j-d<e<1F><00>Z.e!<21><00>Z/e'<27><00>Z0e)<29><00>Z1e+<2B>2d<12><00>d<13><00><00>Z3e+<2B>2d<14><00>d<15><00><00>Z4e+<2B>2d<16><00>d<17><00><00>Z5e+<2B>2d<18><00>d<19><00><00>Z6e+<2B>2ddg<01><1B><00>d<1C><00><00>Z7e+<2B>2d<1D><00>d<1E><00><00>Z8e+<2B>2ddg<01><1B><00>d <20><00><00>Z9e+<2B>2d!<21><00>d"<22><00><00>Z:e+<2B>2d!dg<01><1B><00>d#<23><00><00>Z;e+<2B>2d$d%g<01><1B><00>d&<26><00><00>Z<e+<2B>2d$d'g<01><1B><00>d(<28><00><00>Z=e+<2B>2d)dg<01><1B><00>d*<2A><00><00>Z>e+<2B>2d+dg<01><1B><00>d,<2C><00><00>Z?e+<2B>2d-<2D><00>d.<2E><00><00>Z@e+<2B>2d/dg<01><1B><00>d0<64><00><00>ZAe+<2B>2d1<64><00>d2<64><00><00>ZBe+<2B>2d3<64><00>d4<64><00><00>ZCe+<2B>2d5dg<01><1B><00>d6<64><00><00>ZDe+<2B>2d7dg<01><1B><00>d8<64><00><00>ZEe+<2B>2d9<64><00>d:<3A><00><00>ZFe+<2B>2d;dg<01><1B><00>d<<3C><00><00>ZGe+<2B>2d=<3D><00>d><3E><00><00>ZHe+<2B>2d?d'g<01><1B><00>d@<40><00><00>ZIe+<2B>2dA<64><00>dB<64><00><00>ZJe+<2B>2dC<64><00>dD<64><00><00>ZKe+<2B>2dEdg<01><1B><00>dF<64><00><00>ZLe+<2B>2dGdg<01><1B><00>dH<64><00><00>ZMe+<2B>2dIdg<01><1B><00>dJ<64><00><00>ZNe+<2B>2dKdg<01><1B><00>dL<64><00><00>ZOe+<2B>2dMdg<01><1B><00>dN<64><00><00>ZPe+<2B>2dO<64><00>dP<64><00><00>ZQe+<2B>2dQ<64><00>dR<64><00><00>ZRe+<2B>2dOdg<01><1B><00>dS<64><00><00>ZSe+<2B>2dT<64><00>dU<64><00><00>ZTe+<2B>2dVdg<01><1B><00>dW<64><00><00>ZUe+<2B>2dXd'g<01><1B><00>dY<64><00><00>ZVe+<2B>2dZdg<01><1B><00>d[<5B><00><00>ZWe+<2B>2d\dg<01><1B><00>d]<5D><00><00>ZXe+<2B>2d^<5E><00>d_<64><00><00>ZYe+<2B>2d^dg<01><1B><00>d`<60><00><00>ZZe+<2B>2da<64><00>db<64><00><00>Z[e+<2B>2dad%g<01><1B><00>dc<64><00><00>Z\e+<2B>2dd<64><00>de<64><00><00>Z]df<64>Z^e+<2B>2dg<64><00>dh<64><00><00>Z_e+<2B>2didg<01><1B><00>dj<64><00><00>Z`e+<2B>2dk<64><00>dl<64><00><00>Zae+<2B>2dm<64><00>dn<64><00><00>Zbe+<2B>2do<64><00>dp<64><00><00>Zce+<2B>2dodg<01><1B><00>dq<64><00><00>Zde+<2B>2dr<64><00>ds<64><00><00>Zee+<2B>2dt<64><00>du<64><00><00>Zfe+<2B>2dv<64><00>dw<64><00><00>Zge+<2B>2dx<64><00>dy<64><00><00>Zhe+<2B>2dtdg<01><1B><00>dz<64><00><00>Zie+<2B>2d{dg<01><1B><00>d|<7C><00><00>Zje*d}kre+<2B>kd~dd<7F><64><EFBFBD><EFBFBD><00>dSdS)<29>uK
2025-09-06 21:06:18 +08:00
TSP助手预警管理Web应用
提供预警系统的Web界面和API接口
<EFBFBD>N<><02>datetime<6D> timedelta)<01>Workbook)<01>Font)<08>Flask<73>render_template<74>request<73>jsonify<66>redirect<63>url_for<6F>send_from_directory<72> send_file)<01>CORS)<01>secure_filename)<01> TSPAssistant)<01>TSPAgentAssistant)<03> AlertRule<6C>
AlertLevel<EFBFBD> AlertType)<01>RealtimeChatManager)<01>VehicleDataManager<65>uploads<64> UPLOAD_FOLDERi<01>MAX_CONTENT_LENGTH<54>/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>,r z/alertsc<00> <00>td<01><00>S)u预警管理页面z
index.htmlrrr r!<00>alertsr%/s<00><00> <1B><<3C> (<28> (<28>(r z /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_healthr04<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获取预警列表r'r(N)r)<00>get_active_alertsr r+r,<00>r%r/s r!<00>
get_alertsr6=r1r2<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
2025-09-08 15:27:22 +08:00
|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)r:r<r=r?T)<02>success<73>alertr'r(N)r
<00>get_jsonr)<00> create_alert<72>getr r+r,)<03>datarBr/s r!rDrDFs<><00><00>
2025-09-08 15:27:22 +08: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获取预警统计r'r(N)r)<00>get_alert_statisticsr r+r,<00><02>statsr/s r!rHrHUsp<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>r2z"/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>rA<00>messageFu解决预警失败<E5A4B1><E8B4A5>r'r(N)r)<00> resolve_alertr r+r,)<03>alert_idrAr/s r!rOrO^s<><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
|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>namer=r:r?<00> threshold<6C> condition<6F>enabled<65>check_interval<61>cooldownr'r(N)r)<00> alert_system<65>rules<65>items<6D>appendrSr=r:<00>valuer?rTrUrVrWrXr r+r,)rZ<00>
rules_datarS<00>ruler/s r!<00> get_rulesr`js<><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>
|<01><00>}|rtddd<0F><02><00>Stddd<0F><02><00>dfS#t$r*}tdt|<03><00>i<01><00>dfcYd}~Sd}~wwxYw)u创建预警规则rSr=r:r?rTrUrVTrWi,rXirRu规则创建成功rLFu规则创建失败rNr'r(N)r
rCrrr<00>floatrE<00>intr)rY<00>add_custom_ruler r+r,)rFr_rAr/s r!<00> create_rulere<00>sT<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)
u更新预警规则Tu规则更新成功rLFu规则更新失败rNr'r(N)r
rCr)rY<00> update_ruler r+r,)<04> rule_namerFrAr/s r!rhrh<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)
u删除预警规则Tu规则删除成功rLFu规则删除失败rNr'r(N)r)rY<00> delete_ruler r+r,)rirAr/s r!rlrl<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)
u启动监控服务Tu监控服务已启动rLFu启动监控服务失败rNr'r(N)r)<00>start_monitoringr r+r,<00>rAr/s r!rnrn<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)
u停止监控服务Tu监控服务已停止rLFu停止监控服务失败rNr'r(N)r)<00>stop_monitoringr r+r,ros r!rrrr<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>rpz/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)rtrvrwr'r(N)r)r*r rEr+r,r-s r!<00>get_monitor_statusrx<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>*
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)rAr%<00>countr'r(N)r)<00> check_alertsr <00>lenr+r,r5s r!r{r{<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>
A/<03>A*<03>$A/<03>*A/z/chatc<00> <00>td<01><00>S)u$实时对话页面 (WebSocket版本)z chat.htmlrrr r!<00>chatr~<00>s<00><00> <1B>;<3B> '<27> '<27>'r z
/chat-httpc<00> <00>td<01><00>S)u实时对话页面 (HTTP版本)zchat_http.htmlrrr r!<00> chat_httpr<70><00>r#r z/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会话创建成功)rA<00>
session_idrMr'r(N)r
rCrE<00> chat_manager<65>create_sessionr r+r,)rFr<>r<>r<>r/s r!<00>create_chat_sessionr<6E><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>.
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<E681AF>rMr'<00>缺少必要参数rNr(N)r
rCrEr r<><00>process_messager+r,)rFr<>rM<00>resultr/s r!<00>send_chat_messager<65>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>
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)rA<00>historyr'r(N)r<><00>get_session_historyr r+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
fSt<00>|||||<05><00>}t|<06><00>S#t $r*}tdt|<07><00>i<01><00>d fcYd }~Sd }~wwxYw) <0A> 创建工单r<E58D95>r<r=<00>category<72> 技术问题<E997AE>priorityr@r'r<>rNr(N)r
rCrEr r<><00>create_work_orderr+r,)rFr<>r<r=r<>r<>r<>r/s r!r<>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>
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获取工单状态r'r(N)r<><00>get_work_order_statusr r+r,)r<>r<>r/s r!r<>r<>0sr<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结束会话失败rLr'r(N)r<><00> end_sessionr r+r,)r<>rAr/s r!<00>end_chat_sessionr<6E>9s<><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>
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)rA<00>sessionsr'r(N)r<><00>get_active_sessionsr r+r,)r<>r/s r!r<>r<>Es<><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>
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状态r'r(N)<05>agent_assistant<6E>get_agent_statusr r+r,)<02>statusr/s r!r<>r<>Rsp<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>r2z/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模式rVTuAgent模式已u启用u禁用rLr'r(N)r
rCrEr<><00>toggle_agent_moder r+r,)rFrVrAr/s r!r<>r<>[s<><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>
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 启动失败rLr'r(N)r<><00>start_proactive_monitoringr r+r,ros r!<00>start_agent_monitoringr<67>is<><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>
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 停止失败rLr'r(N)r<><00>stop_proactive_monitoringr r+r,ros r!<00>stop_agent_monitoringr<67>us<><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>
<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主动监控检查r'r(N)r<><00>run_proactive_monitoringr r+r,)r<>r/s r!<00>proactive_monitoringr<67><00>sp<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>r2z/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)rA<00>analysisr'r(N)r<><00>run_intelligent_analysisr r+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>
)r<>r<>r'r(N)
r
<00>argsrErcr)<00>knowledge_manager<65>get_knowledge_entriesr r+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>
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>qr><00>)<01>top_k<5F>resultsr'r(N)r
r<>rEr)<00>search_knowledger r+r,)<03>queryr<79>r/s r!r<>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
fcYd }~Sd }~wwxYw) u添加知识库条目<E69DA1>question<6F>answerr<72><00>confidence_score)r<>r<>r<>r<>u知识添加成功<E68890> 添加失败rLr'r(N)r
rCr)r<><00>add_knowledge_entryr r+r,<00>rFrAr/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>&
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获取知识库统计r'r(N)r)r<><00>get_knowledge_statsr r+r,rIs r!r<>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>
|<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>filer'<00>没有上传文件rNr><00>没有选择文件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>warningr'r,) 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>
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 删除失败rLr'r(N)r)r<><00>delete_knowledge_entryr r+r,<00><03> knowledge_idrAr/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 验证失败rLr'r(N) r
rCrEr)r<><00>verify_knowledge_entryr r+r,)r<>rFr<>rAr/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取消验证失败rLr'r(N)r)r<><00>unverify_knowledge_entryr r+r,r<>s r!<00>unverify_knowledger<65>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
<EFBFBD>dddddddd
<EFBFBD>dddddddd
<EFBFBD>ddddd dd!d
<EFBFBD>d"d#d$dddd%d
<EFBFBD>d&d'd(d)d*dd+d
<EFBFBD>d,d-d.d/ddd0d
<EFBFBD>g}<00>r<14>d1kr<0E>fd2<64>|D<00><00>}<00>r<14>d1kr<0E>fd3<64>|D<00><00>}t|<00><00>S#t$r*}td4t |<01><00>i<01><00>d5fcYd6}~Sd6}~wwxYw)7u获取工单列表r<E8A1A8>r<>r<><00>车辆无法远程启动u0用户反映APP中远程启动功能无法使用<E4BDBF> 远程控制<E68EA7>high<67>open<65>2024-01-01T10:00:00Z)<07>idr<r=r<>r<>r<><00>
created_at<EFBFBD>uAPP显示异常u!APP中车辆信息显示不正确u APP功能r@<00> in_progressz2024-01-01T11:00:00Z<30>u蓝牙连接失败u$用户无法通过蓝牙连接车辆u 蓝牙功能z2024-01-01T12:00:00Z<30>u车辆定位不准确u0APP中显示的车辆位置与实际位置不符u 定位功能<E58A9F>resolvedz2024-01-01T13:00:00Zr<5A>u远程解锁失败u'用户无法通过APP远程解锁车辆<E8BDA6>urgentz2024-01-01T14:00:00Z<30>uAPP闪退问题u-用户反映APP在使用过程中频繁闪退z2024-01-01T15:00:00Z<30>u车辆状态更新延迟u0车辆状态信息更新不及时存在延迟u 数据同步<E5908C>lowz2024-01-01T16:00:00Z<30>u用户认证失败u!部分用户无法正常登录APPu 用户认证z2024-01-01T17: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>ds'<00><><00>P<>P<>P<><01>1<EFBFBD>X<EFBFBD>;<3B>-<2D>3O<33>3O<33>!<21>3O<33>3O<33>3Or c<00>,<00><01>g|]}|d<00>k<00>|<01><02>S)r<>r)rr<00>priority_filters <20>r!rz"get_workorders.<locals>.<listcomp>fs'<00><><00>T<>T<>T<><01>1<EFBFBD>Z<EFBFBD>=<3D>O<EFBFBD>3S<33>3S<33>!<21>3S<33>3S<33>3Sr r'r(N)r
r<>rEr r+r,)<04>
workordersr/rrs @@r!<00>get_workordersrs<><00><><EFBFBD><00>X/<2F><1F> <0C>(<28>(<28><18>2<>2<> <0A>!<21>,<2C>*<2A>*<2A>:<3A>6<>6<><0F>
<18>3<>Q<>*<2A>"<22> <20>4<> <0E> <0E><18>*<2A>B<>'<27>$<24>'<27>4<> <0E> <0E><18>-<2D>E<>*<2A>"<22> <20>4<> <0E> <0E><18>0<>Q<>*<2A>$<24>$<24>4<> <0E> <0E><18>-<2D>H<>*<2A>$<24> <20>4<> <0E> <0E><18>*<2A>N<>'<27>"<22>'<27>4<> <0E> <0E><18>3<>Q<>*<2A>!<21> <20>4<> <0E> <0E><18>-<2D>B<>*<2A>"<22>$<24>4<> <0E> <0E>AI
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD>X <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>CC<00>
C;<03>C6<03>0C;<03>6C;c<00>(<00> tj<00><00>}t<00>|d|d|d|d<00><05><00>}t d|d<07><02><00>S#t
2025-09-06 21:06:18 +08:00
$r*}t dt |<02><00>i<01><00>d fcYd
}~Sd
}~wwxYw) r<>r<r=r<>r<>)r<r=r<>r<>T)rA<00> workorderr'r(N)r
rCr)r<>r r+r,)rFr<>r/s r!<00>create_workorderrls<><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>
B<03>'B <03>B<03> Bz"/api/workorders/<int:workorder_id>c<00><><00> |d|d<02><04>dddddddd d d
d d d d<0E>ddddd<0E>gd<13> }t|<01><00>S#t$r*}tdt|<02><00>i<01><00>dfcYd }~Sd }~wwxYw)u获取工单详情<E8AFA6>WO<57>06dr<64>uu用户反映APP中远程启动功能无法使用点击启动按钮后没有任何反应车辆也没有响应。r<E38082>r<>r<>rNr<4E>u我的车辆无法远程启动uN我了解您的问题。让我帮您排查一下远程启动功能的问题。z2024-01-01T10:05:00Z)r<00> user_message<67>assistant_response<73> timestampru'点击启动按钮后没有任何反应uu这种情况通常是由于网络连接或车辆状态问题导致的。请检查车辆是否处于可启动状态。z2024-01-01T10:10:00Z) r<00>order_idr<r=r<>r<>r<>r<00>
updated_at<EFBFBD>
resolution<EFBFBD>satisfaction_score<72> conversationsr'r(<00>r r+r,)<03> workorder_idrr/s r!<00>get_workorder_detailsr'{s<><00><00> /<2F><1F>/<2F>\<5C>/<2F>/<2F>/<2F>/<2F>S<02>&<26><1E><1C>0<>0<><1E>"&<26><1C>$D<>*z<>!7<> <12><12><1C>$M<>+b<02>!7<> <12><12> <0E>
<EFBFBD>
<EFBFBD> <09>6<17>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>s<00>-0<00>
A$<03>A<03>A$<03>A$c
<00><><00> tj<00><00>}|<01>d<01><00>r|<01>d<02><00>stddi<01><00>dfS||<01>d<01><00>|<01>d<02><00>|<01>dd<07><00>|<01>dd <09><00>|<01>d
d <0B><00>|<01>d <0C><00>|<01>d <0A><00>t j<00><00><00><00><00>d<0E> }tdd|d<11><03><00>S#t$r*}tdt|<03><00>i<01><00>dfcYd}~Sd}~wwxYw)u 更新工单r<r=r'u标题和描述不能为空rNr<>r<>r<>r@r<>r<>r"r#) rr<r=r<>r<>r<>r"r#r!Tu工单更新成功)rArMrr(N) r
rCrEr r<00>now<6F> isoformatr+r,)r&rF<00>updated_workorderr/s r!<00>update_workorderr,<00>se<00><00>/<2F><16><1F>!<21>!<21><04><14>x<EFBFBD>x<EFBFBD><07> <20> <20> J<01><04><08><08><1D>(?<3F>(?<3F> J<01><1A>G<EFBFBD>%B<>C<>D<>D<>c<EFBFBD>I<> I<>
<1F><19>X<EFBFBD>X<EFBFBD>g<EFBFBD>&<26>&<26><1F>8<EFBFBD>8<EFBFBD>M<EFBFBD>2<>2<><1C><08><08><1A>^<5E><<3C><<3C><1C><08><08><1A>X<EFBFBD>6<>6<><1A>h<EFBFBD>h<EFBFBD>x<EFBFBD><16>0<>0<><1E>(<28>(<28><<3C>0<>0<>"&<26>(<28>(<28>+?<3F>"@<40>"@<40>"<22>,<2C>.<2E>.<2E>2<>2<>4<>4<>

<EFBFBD>

<EFBFBD><19><17><1B>+<2B>*<2A>
<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>AD<00>C D<00>
E<03>&E <03>E<03> Ez/api/analyticsc<00>J<00> tj<00>dd<02><00>}tj<00>dd<04><00>}tt |<00><00>|<01><00>}t |<02><00>S#t $r*}t dt|<03><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取分析数据<E695B0> timeRange<67>30<33> dimensionrr'r(N)r
r<>rE<00>generate_analytics_datarcr r+r,)<04>
time_ranger0<00> analyticsr/s r!<00> get_analyticsr4<00>s<><00><00>/<2F><1C>\<5C>%<25>%<25>k<EFBFBD>4<EFBFBD>8<>8<>
<EFBFBD><1B>L<EFBFBD>$<24>$<24>[<5B>,<2C>?<3F>?<3F> <09>,<2C>C<EFBFBD>
<EFBFBD>O<EFBFBD>O<EFBFBD>Y<EFBFBD>G<>G<> <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>c <00><><00>ddl}ddlm}m}g}t|<00><00>D]|}|j<00><00>|||z
dz
<00><05><00>z
<00>d<06><00>}|<02>dd<08><00>}|<02>dd <09><00>} |<05>||| d
<EFBFBD><03><00><00>}|<02>d d <0C><00>|<02>d d <0A><00>|<02>dd<0E><00>|<02>d d<0F><00>|<02>dd <0B><00>|<02>dd<11><00>|<02>dd<13><00>|<02>d d<14><00>|<02>dd<0E><00>|<02>dd<10><00>d<15>|<02>dd<13><00>|<02>dd<11><00>|<02>d d<14><00>|<02>dd<10><00>d<16>d<17>}
t|<02> dd<19><00>d<04><00>|<02>dd<07><00>|<02>dd <09><00>|<02>dd<10><00>|<02>dd <0A><00>|<02>dd<11><00>d<1A>d<1B>} |<02>d d<0F><00>|<02>dd<0E><00>|<02>dd <0B><00>|<02>d d<14><00>|<02>dd <0A><00>|<02>dd<08><00>|<02>dd <09><00>d<1D>d<1E>} t|<02> dd <20><00>d<1C><00>t|<02> d!d"<22><00>d<04><00>t|<02> d#d <20><00>d<1C><00>|<02>d$d%<25><00>d&<26>} ||
| | | |
d'|
d'dkr"t|
d(|
d'z d zd<04><00>nd| d)| d*d+<2B>d,<2C>S)-u生成分析数据rNrr<>)<01>daysz%Y-%m-%dr<64><00>r<>)<03>daterr%<00>dr(<00>2<00><00><><00><00>P<00><00><<00>()r<>u 业务问题u 系统故障u 功能需求u其他)r r@r<>r)<07>totalr<6C>rr<00>closed<65> by_category<72> by_priorityg @g333333@)<05>1<>2<>3<>4<>5)<02>average<67> distributionr)r r@r<><00>critical)rB<00>activer<00>by_levelg<00>?g@<40>_g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X@g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?i<><00><>)<04> response_time<6D>uptime<6D>
error_rate<EFBFBD>
throughputrBrrKrN)<04>total_workorders<72>resolution_rate<74>avg_satisfactionrw)<06>trendr<00> satisfactionr%<00> performance<63>summary)
<EFBFBD>randomrr<00>ranger)<00>strftime<6D>randintr\<00>round<6E>uniform)r6r0r]rr<00>
trend_data<EFBFBD>ir8rr%<00>workorders_stats<74>satisfaction_stats<74> alerts_stats<74>performance_statss r!r1r1<00>s<><00><00><11>M<EFBFBD>M<EFBFBD>M<EFBFBD>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C><14>J<EFBFBD> <12>4<EFBFBD>[<5B>[<5B> <0B> <0B><01><1C><08> <0C><0E><0E><19><19><04>Q<EFBFBD><06>q<EFBFBD><08>!9<>!9<>!9<>9<>C<>C<>J<EFBFBD>O<>O<><04><1B>^<5E>^<5E>A<EFBFBD>r<EFBFBD>*<2A>*<2A>
<EFBFBD><17><1E><1E><01>2<EFBFBD>&<26>&<26><06><12><19><19><18>$<24><1C>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B> <0B><18><1E><1E><03>S<EFBFBD>)<29>)<29><16><0E><0E>r<EFBFBD>2<EFBFBD>&<26>&<26><1D>~<7E>~<7E>a<EFBFBD><12>,<2C>,<2C><1A>N<EFBFBD>N<EFBFBD>2<EFBFBD>s<EFBFBD>+<2B>+<2B><18>.<2E>.<2E><12>S<EFBFBD>)<29>)<29>"<22>N<EFBFBD>N<EFBFBD>2<EFBFBD>r<EFBFBD>2<>2<>"<22>N<EFBFBD>N<EFBFBD>2<EFBFBD>r<EFBFBD>2<>2<>"<22>N<EFBFBD>N<EFBFBD>2<EFBFBD>r<EFBFBD>2<>2<>"<22>N<EFBFBD>N<EFBFBD>1<EFBFBD>b<EFBFBD>1<>1<><1C>n<EFBFBD>n<EFBFBD>Q<EFBFBD><02>+<2B>+<2B> 
<EFBFBD>
<EFBFBD><1A>><3E>><3E>"<22>b<EFBFBD>)<29>)<29><1C>n<EFBFBD>n<EFBFBD>R<EFBFBD><12>,<2C>,<2C><1A>N<EFBFBD>N<EFBFBD>2<EFBFBD>r<EFBFBD>*<2A>*<2A><1C>n<EFBFBD>n<EFBFBD>Q<EFBFBD><02>+<2B>+<2B> 
<EFBFBD>
<EFBFBD><06><06><14>.<19><16><1E><1E><03>S<EFBFBD>1<>1<>1<EFBFBD>5<>5<><17><1E><1E><01>1<EFBFBD>%<25>%<25><17><1E><1E><01>2<EFBFBD>&<26>&<26><17><1E><1E><01>2<EFBFBD>&<26>&<26><17><1E><1E><02>B<EFBFBD>'<27>'<27><17><1E><1E><02>B<EFBFBD>'<27>'<27> 
<EFBFBD>
<EFBFBD> <06> <06><16><18><1E><1E><02>C<EFBFBD>(<28>(<28><18>.<2E>.<2E><11>B<EFBFBD>'<27>'<27><1A>N<EFBFBD>N<EFBFBD>2<EFBFBD>s<EFBFBD>+<2B>+<2B><19>><3E>><3E>"<22>b<EFBFBD>)<29>)<29><1C>n<EFBFBD>n<EFBFBD>R<EFBFBD><12>,<2C>,<2C><1A>N<EFBFBD>N<EFBFBD>1<EFBFBD>b<EFBFBD>)<29>)<29><1E><0E><0E>q<EFBFBD>"<22>-<2D>-<2D> 
<EFBFBD>
<EFBFBD>
<06>
<06>L<EFBFBD><1F>v<EFBFBD>~<7E>~<7E>c<EFBFBD>3<EFBFBD>7<>7<><11>;<3B>;<3B><17><06><0E><0E>r<EFBFBD>4<EFBFBD>0<>0<>!<21>4<>4<><1B>F<EFBFBD>N<EFBFBD>N<EFBFBD>3<EFBFBD><03>4<>4<>a<EFBFBD>8<>8<><1C>n<EFBFBD>n<EFBFBD>T<EFBFBD>4<EFBFBD>0<>0<> <06><06><15><1C>&<26>*<2A><1E>(<28> 0<><17> 9<>m}<7D>F<02>nG<02>JK<02>nK<02>nK<02>u<EFBFBD>&6<>z<EFBFBD>&B<>EU<45>V]<5D>E^<5E>&^<5E>be<62>%e<>gh<67>i<>i<>i<>QR<02> 2<>9<EFBFBD> =<3D>)<29>(<28>3<> 
<EFBFBD>
<EFBFBD> <06> <06> r z/api/analytics/exportc<00>N<00> tdd<02><00>}t<00><00>}|j}d|_d|d<t dd<07><08><00>|d_d |d
<t d<07> <0B><00>|d
_d |d <|dd|d<d|d<|dd|d<d|d<|dd|d<d}t jdd<07><1A><00>|<01>|<03><00>t|dd<1B><1C><00>S#t$r*}tdt|<04><00>i<01><00>dfcYd}~Sd}~wwxYw) u导出分析报告r;ru 分析报告uTSP智能助手分析报告<E68AA5>A1<41>T)<02>size<7A>boldu 工单统计<E7BB9F>A3)rmu 总工单数<E58D95>A4rB<00>B4u 待处理<E5A484>A5r<35><00>B5u 已解决<E8A7A3>A6r<00>B6zuploads/analytics_report.xlsxr<00><01>exist_okzanalytics_report.xlsx)<02> as_attachment<6E> download_namer'r(N) r1rrNr<r<00>fontr<74><00>makedirsr<73>rr+r r,)r3<00>wb<77>ws<77> report_pathr/s r!<00>export_analyticsr~$sT<00><00>/<2F>+<2B>B<EFBFBD> <0C>=<3D>=<3D> <09><16>Z<EFBFBD>Z<EFBFBD><02> <0F>Y<EFBFBD><02>!<21><02><08>1<><02>4<EFBFBD><08><1C>"<22>4<EFBFBD>0<>0<>0<><02>4<EFBFBD><08> <0A>"<22><02>4<EFBFBD><08><1C>$<24><0F><0F><0F><02>4<EFBFBD><08> <0A>!<21><02>4<EFBFBD><08><1C>\<5C>*<2A>7<EFBFBD>3<><02>4<EFBFBD><08><1E><02>4<EFBFBD><08><1C>\<5C>*<2A>6<EFBFBD>2<><02>4<EFBFBD><08><1E><02>4<EFBFBD><08><1C>\<5C>*<2A>:<3A>6<><02>4<EFBFBD><08>6<> <0B>
<EFBFBD> <0B>I<EFBFBD><04>-<2D>-<2D>-<2D>-<2D>
<EFBFBD><07><07> <0B><1C><1C><1C><18><1B>D<EFBFBD>H_<48>`<60>`<60>`<60>`<60><> <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-C0<00>0
D$<03>:D<03>D$<03>D$z/api/workorders/importc<00>j <00> dtjvrtddi<01><00>dfStjd}|jdkrtddi<01><00>dfS|j<00>d<07><00>stddi<01><00>dfSt |j<00><00>}t j<00>d |<01><00>}t j d d
<EFBFBD> <0B><00>|<00>
|<02><00> tj |<02><00>}g}|<03> <00><00>D<00>]<5D>\}}ttj<00><00>|zd zd ttj<00><00>|zd zd<0E><04>t#|<06>d|<06>dd|d z<00><00><02><00><00><00><00><00>t#|<06>d|<06>dd<05><00><00><00><00><00>t#|<06>d|<06>dd<16><00><00><00><00><00>t#|<06>d|<06>dd<19><00><00><00><00><00>t#|<06>d|<06>dd<1C><00><00><00><00><00>t'j<00><00><00><00><00>t'j<00><00><00><00><00>tj|<06>d|<06>d<1E><00><00><00><00><00>r7t#|<06>d|<06>dd<05><00><00><00><00><00>ndtj|<06>d |<06>d!<21><00><00><00><00><00>r7t/|<06>d |<06>d!d"<22><00><00><00><00><00>ndd#<23> }tj<00>|<07><00>|<04>|<07><00><00><02><>t j|<02><00>td
d$t|<04><00><00>d%<25>t|<04><00>|d&<26><04><00>S#t4$r`}t j<00>|<02><00>rt j|<02><00>tdd't#|<08><00><00><00>i<01><00>dfcYd}~Sd}~wwxYw#t4$r*}tdt#|<08><00>i<01><00>d(fcYd}~Sd}~wwxYw))u导入Excel工单文件r<E4BBB6>r'r<>rNr>r<>)z.xlsxz.xlsu!只支持Excel文件(.xlsx, .xls)rTrur<>rr<00>标题r<u 导入工单 <20>描述r=<00>分类r<E7B1BB>r<><00> 优先级r<E7BAA7>r@<00>状态r<E68081>r<><00> 解决方案r"N<> 满意度r#r) rr r<r=r<>r<>r<>rr!r"r#u 成功导入 u
个工单)rArM<00>imported_countru解析Excel文件失败: r()r
r<>r r<><00>endswithrr<>r<>r<>rzr<><00>pd<70>
read_excel<EFBFBD>iterrowsr|r)<00> work_ordersr,rErr)r*<00>notnarcr\<00>remover+r<>) r<>r<><00> upload_path<74>df<64>imported_workordersr"<00>rowrr/s r!<00>import_workordersr<73>Is<><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><13>}<7D>%<25>%<25>&7<>8<>8<> P<01><1A>G<EFBFBD>%H<>I<>J<>J<>C<EFBFBD>O<> O<>#<23>4<EFBFBD>=<3D>1<>1<><08><18>g<EFBFBD>l<EFBFBD>l<EFBFBD>9<EFBFBD>h<EFBFBD>7<>7<> <0B>
<EFBFBD> <0B>I<EFBFBD><04>-<2D>-<2D>-<2D>-<2D> <0C> <09> <09>+<2B><1E><1E><1E>' Q<01><13><1D>{<7B>+<2B>+<2B>B<EFBFBD>"$<24> <1F>!<21>k<EFBFBD>k<EFBFBD>m<EFBFBD>m<EFBFBD> 6<> 6<>
<EFBFBD><05>s<EFBFBD><1E>i<EFBFBD>3<>4<>4<>u<EFBFBD><<3C>q<EFBFBD>@<40> Q<>S<EFBFBD><19>)><3E>%?<3F>%?<3F>%<25>%G<>!<21>%K<> Q<> Q<> Q<> <20><13><17><17><18>3<EFBFBD>7<EFBFBD>7<EFBFBD>7<EFBFBD>D_<44>TY<54>\]<5D>T]<5D>D_<44>D_<44>3`<60>3`<60>!a<>!a<>b<>b<>#&<26>s<EFBFBD>w<EFBFBD>w<EFBFBD>x<EFBFBD><13><17><17><1D>PR<50>9S<39>9S<39>'T<>'T<>#U<>#U<> #<23>C<EFBFBD>G<EFBFBD>G<EFBFBD>H<EFBFBD>c<EFBFBD>g<EFBFBD>g<EFBFBD>j<EFBFBD>.<2E>6Y<36>6Y<36>$Z<>$Z<> [<5B> [<5B> #<23>C<EFBFBD>G<EFBFBD>G<EFBFBD>K<EFBFBD><13><17><17><1A>X<EFBFBD>9V<39>9V<39>$W<>$W<> X<> X<>!<21>#<23>'<27>'<27>(<28>C<EFBFBD>G<EFBFBD>G<EFBFBD>H<EFBFBD>f<EFBFBD>4M<34>4M<34>"N<>"N<>O<>O<>"*<2A>,<2C>.<2E>.<2E>":<3A>":<3A>"<<3C>"<<3C>"*<2A>,<2C>.<2E>.<2E>":<3A>":<3A>"<<3C>"<<3C>]_<>]e<>fi<66>fm<66>fm<66>n|<7C>B<02>F<02>F<02>GS<02>T<02>T<02>gU<02>gU<02>^V<02>^V<02>#`<02>#<23>c<EFBFBD>g<EFBFBD>g<EFBFBD>n<EFBFBD>c<EFBFBD>g<EFBFBD>g<EFBFBD>l<EFBFBD>TV<54>>W<>>W<>&X<>&X<>"Y<>"Y<>"Y<>\`<02>ik<69>iq<69>ru<72>ry<72>ry<72>{F<02>HK<02>HO<02>HO<02>Pd<02>He<02>He<02>sf<02>sf<02>jg<02>jg<02>+q<02>#<23>c<EFBFBD>g<EFBFBD>g<EFBFBD>k<EFBFBD>3<EFBFBD>7<EFBFBD>7<EFBFBD>K_<4B>ab<61>Cc<43>Cc<43>.d<>.d<>*e<>*e<>*e<>mq<02> <12> <12> <09><1A>%<25>,<2C>,<2C>Y<EFBFBD>7<>7<>7<>#<23>*<2A>*<2A>9<EFBFBD>5<>5<>5<>5<> <0F>I<EFBFBD>k<EFBFBD> "<22> "<22> "<22><1A><1F>O<>3<EFBFBD>/B<>+C<>+C<>O<>O<>O<>"%<25>&9<>":<3A>":<3A>1<> <0E><0E><0F><0F> <0F><><19> Q<01> Q<01> Q<01><11>w<EFBFBD>~<7E>~<7E>k<EFBFBD>*<2A>*<2A> '<27><12> <09>+<2B>&<26>&<26>&<26><1A>G<EFBFBD>%I<><13>Q<EFBFBD><16><16>%I<>%I<>J<>K<>K<>S<EFBFBD>P<> P<> P<> P<> P<> P<> P<><50><EFBFBD><EFBFBD><EFBFBD>  Q<01><><EFBFBD><EFBFBD><EFBFBD> <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> Q><00>/Q><00>,Q><00>AQ><00> L0P<00>
Q;<03>AQ6<03>0Q;<03>1Q><00>6Q;<03>;Q><00>>
R2<03>R-<03>'R2<03>-R2z/api/workorders/import/templatec<00>L<00> gd<01>gd<02>gd<03>gd<04>gd<05>gd<06>gd<07>d<08>}tj|<00><00>}d }tjd
d <0B> <0C><00>|<01>|d <0A><0E><00>t d dd<10><02><00>S#t $r*}t dt|<03><00>i<01><00>dfcYd}~Sd}~wwxYw)u下载工单导入模板)u车辆无法启动u空调不制冷u导航系统故障)u$用户反映车辆无法正常启动u空调系统无法制冷u导航系统显示异常)r<>r<>r<>)r<>r@r )r<>rr)u检查电池和启动系统u检查制冷剂和压缩机u更新导航软件)r<>rr<>)r<>r<>r<>r<>r<>r<>r<>zuploads/workorder_template.xlsxrTruF)r"z /uploads/workorder_template.xlsx)rA<00> template_urlr'r(N)r<><00> DataFramer<65>rz<00>to_excelr r+r,)<04> template_datar<61><00> template_pathr/s r!<00>download_import_templater<65><00>s<00><00>/<2F>V<01>U<>U<>v<>v<>v<>F<>F<>F<>2<>2<>2<>9<>9<>9<>p<>p<>p<>"<22><19><19>
<EFBFBD>
<EFBFBD> <0A><10>\<5C>-<2D> (<28> (<28><02>:<3A> <0A>
<EFBFBD> <0B>I<EFBFBD><04>-<2D>-<2D>-<2D>-<2D>
<EFBFBD> <0B> <0B>M<EFBFBD><15> <0B>/<2F>/<2F>/<2F><16><1B>?<3F>
<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>/
B#<03>9B<03>B#<03>B#z/uploads/<filename>c<00>B<00>ttjd|<00><00>S)u!提供上传文件的下载服务r)r<00>app<70>config)r<>s r!<00> uploaded_filer<65><00>s<00><00> <1F>s<EFBFBD>z<EFBFBD>/<2F>:<3A>H<EFBFBD> E<> E<>Er z /api/settingsc<00><><00> dddddd<04>}t|<00><00>S#t$r*}tdt|<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取系统设置r;r<>T)<05> api_timeout<75> max_history<72>refresh_interval<61>auto_monitoring<6E>
agent_moder'r(Nr%)<02>settingsr/s r!<00> get_settingsr<73><00>s~<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>
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设置保存成功rLr'r(N)r
rCr r+r,)rFr/s r!<00> save_settingsr<73><00>sx<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)
u获取系统信息rNz1.0.0<EFBFBD>SQLiteu 2天3小时<E5B08F><E697B6>)<05>version<6F>python_version<6F>databaserS<00> memory_usager'r()<06>sys<79>platformr<6D>r r+r,)r<>r<><00>infor/s r!<00>get_system_infor<6F><00>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>
vehicle_id<EFBFBD> data_type<70>limitr<74>r<>)r<>r'r(N)
r
r<>rErc<00>vehicle_manager<65>get_vehicle_data<74>search_vehicle_datar r+r,)r<>r<>r<>rFr/s r!r<>r<><00>s<><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
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获取车辆最新数据r'r(N)r<><00>get_latest_vehicle_datar r+r,)r<>rFr/s r!r<>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获取车辆数据摘要r'r(N)r<><00>get_vehicle_summaryr r+r,)r<>r\r/s r!r<>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<E68DAE>r<><00>
data_value<EFBFBD> vehicle_vin)r<>r<>r<>r<>u数据添加成功r<E58A9F>rLr'r(N)r
rCr<><00>add_vehicle_datarEr r+r,r<>s r!r<>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>
<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初始化失败rLr'r(N)r<><00>add_sample_vehicle_datar r+r,ros r!<00>init_sample_vehicle_datar<61> 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.0rQ)<03>debug<75>host<73>port)l<>__doc__r<5F>r<><00>json<6F>pandasr<73>rr<00>openpyxlr<00>openpyxl.stylesr<00>flaskrr r
r r r rr<00>
flask_corsr<00>werkzeug.utilsrr<>r\<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__r<5F>rr<>r)r<>r<>r<><00>router"r%r0r6rDrHrOr`rerhrlrnrrrxr{r~r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rrr'r,r4r1r~r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<><00>runrr r!<00><module>r<>s<> <00><01><04><04>
2025-09-06 21:06:18 +08:00
 <0B>
<EFBFBD>
<EFBFBD>
<EFBFBD> <09> <09> <09> <09> <0B> <0B> <0B> <0B><13><13><13><13>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28><1D><1D><1D><1D><1D><1D> <20> <20> <20> <20> <20> <20>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<>m<><1B><1B><1B><1B><1B><1B>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A><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><1A> <0A>+<2B><03>
<EFBFBD>?<3F><1B>#3<><03>
<EFBFBD> <1F> <20> <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>Z/<2F>Z/<2F><1E><1D>Z/<2F>x<05><19><19> <1C>v<EFBFBD>h<EFBFBD><19>/<2F>/<2F> /<2F> /<2F>0<>/<2F> /<2F><05><19><19> /<2F>0<>0<>"/<2F>"/<2F>1<>0<>"/<2F>H<05><19><19> /<2F>%<25><17><19>A<>A<>/<2F>/<2F>B<01>A<>/<2F>@<05><19><19> <1B><1C><1C>
/<2F>
/<2F><1D><1C>
/<2F>T<06>T<06>T<06>l<05><19><19> "<22>#<23>#<23>!/<2F>!/<2F>$<24>#<23>!/<2F>H<05><19><19> #<23>f<EFBFBD>X<EFBFBD><19>6<>6<>?/<2F>?/<2F>7<>6<>?/<2F>B<05><19><19> ,<2C>-<2D>-<2D>/<2F>/<2F>.<2E>-<2D>/<2F>:<05><19><19> <20>!<21>!<21>F<01>F<01>"<22>!<21>F<01>
<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