Files
assist/__pycache__/init_database.cpython-313.pyc

171 lines
35 KiB
Plaintext
Raw Normal View History

<EFBFBD>
&<26><>h}<7D><00><00><><00>SrSSKrSSKrSSKrSSKrSSKJrJrJrJ r SSK
J r J r SSK J r Jr SSKJr \R"R%\R"R'\R"R)\555 SSKJr SSKJr SS KJr SS
KJrJrJrJ r J!r!J"r"J#r# "S S 5r$S r%\&S:Xa\%"5 gg)u~
TSP助手数据库初始化脚本 - 重构版本
结合项目新特性,提供更高效的数据库初始化和管理功能
<EFBFBD>N)<04>Dict<63>List<73>Optional<61>Any)<02>text<78>inspect)<02>datetime<6D> timedelta)<01>Path)<01>Config)<01> setup_logging)<01>
db_manager)<07>Base<73> WorkOrder<65>KnowledgeEntry<72> Conversation<6F> Analytics<63>Alert<72> VehicleDatac<00><><00>\rSrSrSrSrS\4SjrS#S\S\4Sjjr S\4Sjr
S\4S jr S\4S
jr S\4S jr S\4S jrS\4S jrS\4SjrS\4SjrS\4SjrS\4SjrS\4SjrS\S\\S\4SjrS\S\S\4SjrS\4SjrS\\\\44SjrS\4SjrS\4SjrS\4SjrSr Sr!S\"4Sjr#S\\\44S jr$S!r%g")$<24>DatabaseInitializer<65>u$数据库初始化器 - 重构版本c<00>B<00>[R"[5Ul[ [
R R5UlSUR;Ul SUR;Ul
SUR;Ul UR5Ul /Ulg)N<>mysql<71>sqlite<74>
postgresql)<0F>logging<6E> getLogger<65>__name__<5F>logger<65>strr<00>engine<6E>url<72>db_url<72>is_mysql<71> is_sqlite<74> is_postgresql<71>_get_database_version<6F>
db_version<EFBFBD>migration_history<72><01>selfs <20>!E:\tsp-assistant\init_database.py<70>__init__<5F>DatabaseInitializer.__init__sy<00><00><1D>'<27>'<27><08>1<><04> <0B><19>*<2A>+<2B>+<2B>/<2F>/<2F>0<><04> <0B><1F>4<EFBFBD>;<3B>;<3B>.<2E><04> <0A>!<21>T<EFBFBD>[<5B>[<5B>0<><04><0E>)<29>T<EFBFBD>[<5B>[<5B>8<><04><1A><1F>4<>4<>6<><04><0F>"$<24><04><1E><00>returnc<00>x<00>[R"5nUR(a9UR[ S55R 5nSUS3sSSS5 $UR (aJUR[ S55R 5nSUSR5S3sSSS5 $UR[ S55R 5nS US3sSSS5 $!,(df  g=f![a(nURRS
U35 SnAg SnAff=f) u获取数据库版本信息zSELECT VERSION()zMySQL rNzSELECT version()z PostgreSQL <20>zSELECT sqlite_version()zSQLite u无法获取数据库版本: <20>Unknown) r<00> get_sessionr%<00>executer<00>fetchoner'<00>split<69> Exceptionr <00>warning)r,<00>session<6F>result<6C>es r-r(<00>)DatabaseInitializer._get_database_version(s<00><00> <1D><1B>'<27>'<27>)<29>W<EFBFBD><17>=<3D>=<3D>$<24>_<EFBFBD>_<EFBFBD>T<EFBFBD>2D<32>-E<>F<>O<>O<>Q<>F<EFBFBD>#<23>F<EFBFBD>1<EFBFBD>I<EFBFBD>;<3B>/<2F>*<2A>)<29><1A>'<27>'<27>$<24>_<EFBFBD>_<EFBFBD>T<EFBFBD>2D<32>-E<>F<>O<>O<>Q<>F<EFBFBD>(<28><16><01><19><1F><1F>):<3A>1<EFBFBD>)=<3D>(><3E>?<3F> *<2A>)<29>%<25>_<EFBFBD>_<EFBFBD>T<EFBFBD>2K<32>-L<>M<>V<>V<>X<>F<EFBFBD>$<24>V<EFBFBD>A<EFBFBD>Y<EFBFBD>K<EFBFBD>0<>*<2A>)<29>)<29><><19> <1D> <10>K<EFBFBD>K<EFBFBD> <1F> <1F>"?<3F><01>s<EFBFBD> C<> D<><1C><> <1D>sN<00>D<00>AC6<03> D<00>"AC6<03>3 D<00>=/C6<03>, D<00>6
D<07>D<00>D<00>
D9<03>D4<03>4D9<03> force_resetc<00>j<00>[S5 [S5 [S5 [SUR35 [SUR35 [S[R"5R S535 [S5 [ [R[R5 UR5(dgU(aUR5(dgUR5(dgUR5(dgUR5(dgUR5(dgUR!5 [S5 [S 5 [S5 g
!["a5n[S U35 UR$R'S U3S
S 9 SnAgSnAff=f)u$初始化数据库 - 主入口函数<E587BD>P================================================================================u,🚀 TSP智能助手数据库初始化系统u📊 数据库类型: u🔗 连接地址: u⏰ 初始化时间: z%Y-%m-%d %H:%M:%SF<53>Q
================================================================================u 🎉 数据库初始化完成Tu
❌ 数据库初始化失败: u数据库初始化失败: )<01>exc_infoN)<14>printr)r$r <00>now<6F>strftimer r <00> LOG_LEVEL<45>LOG_FILE<4C>_test_connection<6F>_reset_database<73>_create_tables<65>_run_migrations<6E>_insert_initial_data<74>_verify_database_integrity<74>_generate_init_reportr9r <00>error)r,r?r=s r-<00>initialize_database<73>'DatabaseInitializer.initialize_database9sk<00><00> <0A>h<EFBFBD><0F> <0A><<3C>=<3D> <0A>h<EFBFBD><0F> <0A>&<26>t<EFBFBD><EFBFBD><EFBFBD>&7<>8<>9<> <0A>#<23>D<EFBFBD>K<EFBFBD>K<EFBFBD>=<3D>1<>2<> <0A>%<25>h<EFBFBD>l<EFBFBD>l<EFBFBD>n<EFBFBD>&=<3D>&=<3D>>Q<>&R<>%S<>T<>U<> <0A>h<EFBFBD><0F>( <19> <19>&<26>*<2A>*<2A>F<EFBFBD>O<EFBFBD>O<EFBFBD> <<3C><18>(<28>(<28>*<2A>*<2A><1C><1B><1B>+<2B>+<2B>-<2D>-<2D> <20><18>&<26>&<26>(<28>(<28><1C><18>'<27>'<27>)<29>)<29><1C><18>,<2C>,<2C>.<2E>.<2E><1C><18>2<>2<>4<>4<><1C> <11> &<26> &<26> (<28> <11>/<2F> "<22> <11>4<> 5<> <11>(<28>O<EFBFBD><17><><18> <19> <11>4<>Q<EFBFBD>C<EFBFBD>8<> 9<> <10>K<EFBFBD>K<EFBFBD> <1D> <1D> :<3A>1<EFBFBD>#<23>><3E><14> <1D> N<><18><> <19>s<<00>=E3<00> E3<00>)E3<00>?E3<00>E3<00>+E3<00>1E3<00>3
F2<03>=+F-<03>-F2c<00><><00>[S5 [R"5(a [S5 g[S5 g![an[SU35 SnAgSnAff=f)u测试数据库连接u
🔌 测试数据库连接...u✅ 数据库连接成功Tu❌ 数据库连接失败Fu!❌ 数据库连接测试异常: N)rDr<00>test_connectionr9<00>r,r=s r-rI<00>$DatabaseInitializer._test_connectionmsZ<00><00> <0A>/<2F>0<> <19><19>)<29>)<29>+<2B>+<2B><15>1<>2<><1B><15>1<>2<><1C><><18> <19> <11>5<>a<EFBFBD>S<EFBFBD>9<> :<3A><18><> <19>s<00>%?<00> ?<00>
A!<03> A<03>A!c<00>><00>[S5 [RR[R
S9 [S5 [RR [R
S9 [S5 g![an[SU35 SnAgSnAff=f) u!重置数据库谨慎使用u
⚠️ 重置数据库...<2E><01>bindu✅ 数据库表删除成功u"✅ 数据库表重新创建成功Tu❌ 数据库重置失败: NF)rDr<00>metadata<74>drop_allrr"<00>
create_allr9rUs r-rJ<00>#DatabaseInitializer._reset_database{s<><00><00> <0A>,<2C>-<2D> <19> <10>M<EFBFBD>M<EFBFBD> "<22> "<22>
<EFBFBD>(9<>(9<> "<22> :<3A> <11>0<> 1<> <11>M<EFBFBD>M<EFBFBD> $<24> $<24>*<2A>*;<3B>*;<3B> $<24> <<3C> <11>6<> 7<><17><><18> <19> <11>/<2F><01>s<EFBFBD>3<> 4<><18><> <19>s<00>A,A:<00>:
B<03>B<03>Bc<00><><00>[S5 [[R5nUR 5n[
R R[RS9 UR 5n[U5[U5-
nU(a[SSRU535 g[S5 g![an[SU35 SnAg SnAff=f)
u创建数据库表u
📋 创建数据库表...rXu✅ 新创建表: z, u✅ 所有表已存在Tu❌ 创建数据库表失败: NF) rDrrr"<00>get_table_namesrrZr\<00>set<65>joinr9)r,<00> inspector<6F>existing_tables<65>
new_tables<EFBFBD>created_tablesr=s r-rK<00>"DatabaseInitializer._create_tables<65>s<><00><00> <0A>,<2C>-<2D> <19><1F>
<EFBFBD> 1<> 1<>2<>I<EFBFBD>'<27>7<>7<>9<>O<EFBFBD> <11>M<EFBFBD>M<EFBFBD> $<24> $<24>*<2A>*;<3B>*;<3B> $<24> <<3C>#<23>2<>2<>4<>J<EFBFBD> <20><1A>_<EFBFBD>s<EFBFBD>?<3F>/C<>C<>N<EFBFBD><1D><15>*<2A>4<EFBFBD>9<EFBFBD>9<EFBFBD>^<5E>+D<>*E<>F<>G<><18><16>.<2E>/<2F><17><><18> <19> <11>2<>1<EFBFBD>#<23>6<> 7<><18><> <19>s<00>BB9<00>- B9<00>9
C<03>C<03>Cc<00><><00>[S5 URURURURUR
UR UR/nSnUHnU"5(aUS- nMM [S US
[U5S 35 US:<3A>$![aQnURRSURSU35 [SURSU35 SnAM<>SnAff=f) u执行数据库迁移u
🔄 执行数据库迁移...rr3u迁移失败: <20>: u⚠️ 迁移 u 失败: Nu ✅ 完成 <20>/u
个迁移) rD<00>&_migrate_knowledge_verification_fields<64>_migrate_alert_severity_field<6C>_migrate_vehicle_data_table<6C>"_migrate_conversation_enhancements<74>_migrate_workorder_enhancements<74>_migrate_analytics_enhancements<74>#_migrate_system_optimization_fieldsr9r rPr<00>len)r,<00>
migrations<EFBFBD> success_count<6E> migrationr=s r-rL<00>#DatabaseInitializer._run_migrations<6E>s<00><00> <0A>/<2F>0<> <11> 7<> 7<> <10> .<2E> .<2E> <10> ,<2C> ,<2C> <10> 3<> 3<> <10> 0<> 0<> <10> 0<> 0<> <10> 4<> 4<>
<EFBFBD>
<EFBFBD><1A> <0A>#<23>I<EFBFBD> J<01><1C>;<3B>;<3B>!<21>Q<EFBFBD>&<26>M<EFBFBD><1F>$<24> <0E> <0B>M<EFBFBD>?<3F>!<21>C<EFBFBD>
<EFBFBD>O<EFBFBD>+<<3C>J<EFBFBD>G<>H<><1C>q<EFBFBD> <20> <20><> <1D> J<01><14> <0B> <0B>!<21>!<21>N<EFBFBD>9<EFBFBD>3E<33>3E<33>2F<32>b<EFBFBD><11><03>"L<>M<><15><0F> <09>(:<3A>(:<3A>';<3B>9<EFBFBD>Q<EFBFBD>C<EFBFBD>H<>I<>I<><49> J<01>s<00>#B<02>
C5<05>$AC0<05>0C5c<00>D<00>[S5 /SQnURSU5$)u迁移知识库验证字段u& 📝 检查知识库验证字段...))<02> is_verified<65>BOOLEAN DEFAULT FALSE)<02> verified_by<62> VARCHAR(100))<02> verified_at<61>DATETIME<4D>knowledge_entries<65>rD<00>_add_table_columns<6E>r,<00> fields_to_adds r-rj<00>:DatabaseInitializer._migrate_knowledge_verification_fields<64>s(<00><00> <0A>6<>7<>
<EFBFBD> <0A> <14>&<26>&<26>':<3A>M<EFBFBD>J<>Jr0c<00>B<00>[S5 S/nURSU5$)u迁移预警严重程度字段u) 🚨 检查预警严重程度字段...)<02>severityzVARCHAR(20) DEFAULT 'medium'<27>alertsr~r<>s r-rk<00>1DatabaseInitializer._migrate_alert_severity_field<6C>s,<00><00> <0A>9<>:<3A> ;<3B>
<EFBFBD> <0A><14>&<26>&<26>x<EFBFBD><1D>?<3F>?r0c<00><><00>[S5 [R"5n[[R5nSUR 5;a?[S5 [ RRURSS9 [S5 O [S5 UR5 SSS5 g!,(df  g=f![an[S U35 SnAg
SnAff=f) u迁移车辆数据表u 🚗 检查车辆数据表...<2E> vehicle_datau" 创建vehicle_data表...T)<01>
checkfirstu% ✅ vehicle_data表创建成功u" ✅ vehicle_data表已存在Nu' ❌ 车辆数据表迁移失败: F) rDrr5rr"r_r<00> __table__<5F>createrY<00>commitr9)r,r;rbr=s r-rl<00>/DatabaseInitializer._migrate_vehicle_data_table<6C>s<><00><00> <0A>0<>1<> <19><1B>'<27>'<27>)<29>W<EFBFBD>#<23>J<EFBFBD>$5<>$5<>6<> <09>!<21><19>)B<>)B<>)D<>D<><19>><3E>?<3F><1F>)<29>)<29>0<>0<><17><1C><1C>$<24>0<>O<><19>A<>B<><19>><3E>?<3F><17><0E><0E> <20><1B>*<2A>)<29>)<29><><19> <19> <11>;<3B>A<EFBFBD>3<EFBFBD>?<3F> @<40><18><> <19>s5<00>C<00>B B4<03>+C<00>4
C<07>>C<00>C<00>
C'<03>C"<03>"C'c<00>D<00>[S5 /SQnURSU5$)u迁移对话增强字段u# 💬 检查对话增强字段...))<02> response_time<6D>FLOAT)<02>user_satisfaction<6F>INTEGER)<02> ai_confidencer<65>)<02> context_data<74>TEXT<58> conversationsr~r<>s r-rm<00>6DatabaseInitializer._migrate_conversation_enhancements<74>s'<00><00> <0A>3<>4<>
<EFBFBD> <0A><14>&<26>&<26><EFBFBD> <0A>F<>Fr0c<00>D<00>[S5 /SQnURSU5$)u迁移工单增强字段u# 📋 检查工单增强字段...))<02> ai_suggestionr<6E>)<02>human_resolutionr<6E>)<02> ai_similarityr<79>)<02> ai_approvedrx)<02>feishu_record_idrz)<02> sync_statuszVARCHAR(20) DEFAULT 'pending')<02>source<63> VARCHAR(50))<02>modulerz)<02>
created_byrz)<02>
wilfulnessrz)<02> date_of_closer|)<02> vehicle_typerz)<02>vin_simr<6D>)<02>app_remote_control_versionrz)<02>hmi_swrz)<02> parent_recordrz)<02>has_updated_same_dayr<79>)<02>operating_timerz<00> work_ordersr~r<>s r-rn<00>3DatabaseInitializer._migrate_workorder_enhancements<74>s'<00><00> <0A>3<>4<>
<EFBFBD> <0A>,<14>&<26>&<26>}<7D>m<EFBFBD>D<>Dr0c<00>D<00>[S5 /SQnURSU5$)u迁移分析增强字段u# 📊 检查分析增强字段...))<02>performance_scorer<65>)<02>quality_metricsr<73>)<02> cost_analysisr<73>)<02>optimization_suggestionsr<73><00> analyticsr~r<>s r-ro<00>3DatabaseInitializer._migrate_analytics_enhancementss'<00><00> <0A>3<>4<>
<EFBFBD> <0A><14>&<26>&<26>{<7B>M<EFBFBD>B<>Br0c<00><><00>[S5 /SQSS//SQS.nSnUR5Hup4URX45(aMSnM! U$) u迁移系统优化字段u& ⚙️ 检查系统优化字段...))<02>processing_timer<65>)<02> memory_usager<65>)<02> cpu_usager<65>)<02>processing_efficiencyr<79>)<02>resource_usager<65>))<02>search_frequencyzINTEGER DEFAULT 0)<02> last_accessedr|)<02>relevance_scorer<65>)r<>r<>r}TF)rD<00>itemsr)r,<00>tables_and_fields<64>success<73>
table_name<EFBFBD>fieldss r-rp<00>7DatabaseInitializer._migrate_system_optimization_fields sd<00><00> <0A>6<>7<><0E> 3<>*<2A><0E>"<0E>
<EFBFBD><19>"<17><07>"3<>"9<>"9<>";<3B> <1E>J<EFBFBD><17>*<2A>*<2A>:<3A>><3E>><3E><1F><07>#<<3C><17>r0r<>r<>c<00>`<00>SnSnUH<>upVURX5(aUS- nM#[SUSUS35 [R"5nSUSUSU3nUR [ U55 UR 5 S S S 5 [S
US 35 US- nM<> US:<3A>a[SUSUS35 g[SUS35 g!,(df  NO=f![an [S US U 35 S n A M<>S n A ff=f![an
[SU
35 S n
A
gS n
A
ff=f)u为表添加字段rr3u 添加字段 <20>.z...z ALTER TABLE z ADD COLUMN <20> Nu ✅ 字段 u 添加成功u ⚠️ 字段 u 添加失败: u 📊 成功添加 u 个字段,跳过 u 个已存在字段u- 📊 所有字段都已存在,跳过 u
个字段Tu$ ❌ 添加字段过程失败: F)<08>_column_existsrDrr5r6rr<>r9) r,r<>r<><00> added_count<6E> skipped_count<6E>
field_name<EFBFBD>
field_typer;<00> alter_sql<71> field_errorr=s r-r<00>&DatabaseInitializer._add_table_columns=s]<00><00>" <19><1B>K<EFBFBD><1D>M<EFBFBD>*0<>&<26>
<EFBFBD>\<01><1B>*<2A>*<2A>:<3A>B<>B<>%<25><11>*<2A> <0A> <20><19>3<>J<EFBFBD><<3C>q<EFBFBD><1A> <0C>C<EFBFBD>P<>Q<>$<24>/<2F>/<2F>1<>W<EFBFBD>&2<>:<3A>,<2C>l<EFBFBD>:<3A>,<2C>VW<56>Xb<58>Wc<57>$d<> <09><1F><0F><0F><04>Y<EFBFBD><0F>8<><1F><0E><0E>(<28>2<>
<1A>-<2D>j<EFBFBD>\<5C><1D>G<>H<><1F>1<EFBFBD>$<24>K<EFBFBD>+1<>*<1B>Q<EFBFBD><EFBFBD><15>0<><1B> <0A>=Q<>R_<52>Q`<60>`s<>t<>u<><18><16>E<>m<EFBFBD>_<EFBFBD>T^<5E>_<>`<60><17>#2<>1<><31>!<21>\<01><19>1<>*<2A><1C>_<EFBFBD>[<5B>M<EFBFBD>Z<>[<5B>[<5B><>\<01><><19> <19> <11>8<><11><03><<3C> =<3D><18><> <19>sh<00> D <00>C"<02>D <00>'C"<02>6C<05>C"<02>$D <00>D <00>
C <09>C"<02>"
D<05>,D<05>=D <00>D<05>D <00>
D-<03>D(<03>(D-<03> column_namec<00><><00>[R"5nUR(a,UR[ S5XS.5R 5nOhUR (a,UR[ S5XS.5R 5nO+UR[ S5XS.5R 5nUSS:<3A>sSSS5 $!,(df  g=f![a gf=f)u检查字段是否存在a&
SELECT COUNT(*) as count
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = :table_name
AND COLUMN_NAME = :column_name
)r<>r<>z<>
SELECT COUNT(*) as count
FROM information_schema.columns
WHERE table_name = :table_name
AND column_name = :column_name
z<>
SELECT COUNT(*) as count
FROM pragma_table_info(:table_name)
WHERE name = :column_name
rNF)rr5r%r6rr7r'r9)r,r<>r<>r;r<s r-r<><00>"DatabaseInitializer._column_existscs<><00><00> <19><1B>'<27>'<27>)<29>W<EFBFBD><17>=<3D>=<3D>$<24>_<EFBFBD>_<EFBFBD>T<EFBFBD>3<18>.<19> *4<>P<> R<01> S[<01>RZ<52>R\<5C> <1B><1A>'<27>'<27>$<24>_<EFBFBD>_<EFBFBD>T<EFBFBD>3<18>.<19>
*4<>P<> R<01>
S[<01>RZ<52>R\<5C> <1B>%<25>_<EFBFBD>_<EFBFBD>T<EFBFBD>3<18>.<19>*4<>P<> R<01>S[<01>RZ<52>R\<5C> <1B> <1E>a<EFBFBD>y<EFBFBD>1<EFBFBD>}<7D>/*<2A>)<29>)<29><>0<19> <19><18> <19>s/<00>C<00>B-C<03> C<00>
C<07>C<00>C<00>
C,<03>+C,c<00>D<00>[S5 [R"5nUR[5R 5nUS:<3A>a[SUS35 SSS5 gUR 5nUHn[ S 0UD6nURU5 M! UR5 [S[U5S35 UR5 UR5 SSS5 g!,(df  g=f![an[S U35 SnAg
SnAff=f) u插入初始数据u
📊 插入初始数据...ru ✅ 数据库中已有 u. 条知识库条目跳过初始数据插入NTu ✅ 成功插入 <20> 条知识库条目u! ❌ 插入初始数据失败: F<>) rDrr5<00>queryr<00>count<6E>_get_initial_knowledge_data<74>addr<64>rq<00>_add_sample_vehicle_data<74>_verify_existing_knowledger9)r,r;<00>existing_count<6E> initial_data<74>data<74>entryr=s r-rM<00>(DatabaseInitializer._insert_initial_data<74>s<00><00> <0A>,<2C>-<2D> <19><1B>'<27>'<27>)<29>W<EFBFBD>!(<28><1D><1D>~<7E>!><3E>!D<>!D<>!F<><0E>!<21>A<EFBFBD>%<25><19>6<>~<7E>6F<36>Ft<46>u<>v<><1F> *<2A>)<29> $<24>?<3F>?<3F>A<> <0C>(<28>D<EFBFBD>*<2A>2<>T<EFBFBD>2<>E<EFBFBD><1B>K<EFBFBD>K<EFBFBD><05>&<26>)<29><18><0E><0E> <20><15>,<2C>S<EFBFBD><1C>-><3E>,?<3F>?R<>S<>T<><15>-<2D>-<2D>/<2F><15>/<2F>/<2F>1<><1B>-*<2A>)<29>)<29><>.<19> <19> <11>5<>a<EFBFBD>S<EFBFBD>9<> :<3A><18><> <19>sA<00>C=<00>:C,<03>C=<00>%A>C,<03>#C=<00>,
C:<07>6C=<00>:C=<00>=
D<03>D<03>Dc<00>^<00>SSSSSS[R"5SSS. S S
SS SS[R"5SS S. S S SSSS[R"5SSS. SSSS SS[R"5SS S. SSSSSS[R"5SSS. SSSS SS[R"5SS S. SSSSSS[R"5SSS. SSSSSS[R"5SSS. SSSS SS[R"5SS S. S S!SSSS[R"5SSS. /
$)"u获取初始知识库数据u如何重置密码u<EFBC9F>您可以通过以下步骤重置密码1. 点击登录页面的'忘记密码'链接 2. 输入您的邮箱地址 3. 检查邮箱并点击重置链接 4. 设置新密码u 账户问题g<E9A298><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?T<>systemr) <09>question<6F>answer<65>category<72>confidence_scorerwryr{r<>r<>u账户被锁定了怎么办u<EFBC9F>如果您的账户被锁定请尝试以下解决方案1. 等待15分钟后重试登录 2. 如果问题持续请联系客服并提供您的用户IDg<44><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?u如何修改个人信息u<EFBC9F>您可以在个人设置页面修改个人信息1. 登录后点击右上角的个人头像 2. 选择'个人设置' 3. 修改相关信息并保存<E4BF9D>ffffff<66>?u支付失败怎么办u<EFBC9F>如果支付失败请检查1. 银行卡余额是否充足 2. 银行卡是否支持在线支付 3. 网络连接是否正常 4. 如果问题持续请联系支付客服u 支付问题u如何申请退款u<EFBC9F>申请退款流程1. 在订单详情页面点击'申请退款' 2. 选择退款原因 3. 填写退款说明 4. 提交申请后等待审核u系统无法访问怎么办u<EFBC9F>如果系统无法访问请尝试1. 检查网络连接 2. 清除浏览器缓存 3. 尝试使用其他浏览器 4. 如果问题持续请联系技术支持u 技术问题u如何联系客服u<EFBC9F>您可以通过以下方式联系客服1. 在线客服:点击页面右下角的客服图标 2. 电话客服400-123-4567 3. 邮箱客服support@example.comu 服务问题u如何远程启动车辆u<EFBC9F>远程启动车辆需要满足以下条件1. 车辆处于P档 2. 手刹拉起 3. 车门已锁 4. 电池电量充足。操作步骤打开APP → 点击远程启动按钮 → 确认启动条件 → 等待启动完成u 远程控制u'APP显示车辆信息错误怎么办u<EFBC9F>如果APP显示车辆信息错误请尝试1. 重新登录APP 2. 重启车辆系统 3. 检查网络连接 4. 如果问题持续请联系客服u APP功能u$车辆无法远程启动的原因u<EFBC9F>车辆无法远程启动的常见原因1. 车辆不在P档 2. 手刹未拉起 3. 车门未锁 4. 电池电量不足 5. 网络信号差 6. 车辆系统故障)r rEr+s r-r<><00>/DatabaseInitializer._get_initial_knowledge_data<74>s<><00><00>4<>G<03>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>=<3D>x<02>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>:<3A>q<02>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>7<>K<03>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>4<>i<02>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>=<3D><02>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>4<>B<03>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>:<3A>y<03>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>F<01>s<02>'<27>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>C<01>|<02>*<2A>$'<27>#<23>'<27>'<27>|<7C>|<7C>~<7E>$%<25>#&<26>
<0E>Io
<EFBFBD>o
r0c<00><><00>SSKJn U"5nUR5nU(a [S5 U$[S5 U$![an[SU35 SnAgSnAff=f)u添加示例车辆数据r)<01>VehicleDataManageru% ✅ 示例车辆数据添加成功u% ❌ 示例车辆数据添加失败u' ❌ 添加示例车辆数据失败: NF)<05> src.vehicle.vehicle_data_managerr<72><00>add_sample_vehicle_datarDr9)r,r<><00>vehicle_managerr<72>r=s r-r<><00>,DatabaseInitializer._add_sample_vehicle_datasf<00><00> <19> K<>0<>2<>O<EFBFBD>%<25>=<3D>=<3D>?<3F>G<EFBFBD><16><15>=<3D>><3E><1B>N<EFBFBD><16>=<3D>><3E><1A>N<EFBFBD><4E><18> <19> <11>;<3B>A<EFBFBD>3<EFBFBD>?<3F> @<40><18><> <19>s<00>0A<00> A<00>
A"<03>
A<03>A"c<00><><00>[R"5nUR[5R [R
S:H5R 5nU(a<>[S[U5S35 UH]nSUlSUl [R"5Ul [US5(dSUl[US5(aMVS UlM_ UR!5 [S
[U5S 35 O [S 5 S S S 5 g!,(df  g =f!["an[SU35 S nAgS nAff=f)u验证现有的知识库条目Fu 📝 发现 u 条未验证的知识库条目T<E79BAE> system_initr<74>rr<>r<>u ✅ 成功验证 r<>u% ✅ 所有知识库条目已验证Nu$ ❌ 验证知识库条目失败: )rr5r<>r<00>filterrw<00>allrDrqryr rEr{<00>hasattrr<72>r<>r<>r9)r,r;<00>unverified_entriesr<73>r=s r-r<><00>.DatabaseInitializer._verify_existing_knowledge&s<00><00> <19><1B>'<27>'<27>)<29>W<EFBFBD>%,<2C>]<5D>]<5D>><3E>%B<>%I<>%I<>"<22>.<2E>.<2E>%<25>7<>&<12><15>#<23>%<25>#<23>&<26><19>O<EFBFBD>C<EFBFBD>0B<30>,C<>+D<>Dc<44>d<>e<>"4<><05>,0<><05>)<29>,9<><05>)<29>,4<>L<EFBFBD>L<EFBFBD>N<EFBFBD><05>)<29>&<26>u<EFBFBD>.@<40>A<>A<>56<35>E<EFBFBD>2<>&<26>u<EFBFBD>.?<3F>@<40>@<40>47<34>E<EFBFBD>1<>"4<><1C>N<EFBFBD>N<EFBFBD>$<24><19>0<><13>5G<35>1H<31>0I<30>I\<5C>]<5D>^<5E><19>A<>B<><1B>1*<2A>)<29>)<29><>2<19> <19> <11>8<><11><03><<3C> =<3D><18><> <19>s<<00>D,<00>B7D<03>AD<03>D,<00>
D)<07>%D,<00>)D,<00>,
E<03>6E <03> Ec <00>N<00>[S5 [R"5n[[[
[ [[S.nSnUR5H;upEURU5R5nX6- n[SUSUS35 M= [S
U35 UR5 [S 5 S S S 5 g ![an[SUSU35 S nAM<>S nAff=f!,(df  g =f![an[S U35 S nAgS nAff=f)u验证数据库完整性u!
🔍 验证数据库完整性...<2E>r<>r<>r}r<>r<>r<>ru 📋 rh<00>
条记录u ⚠️ <20>: 检查失败 - Nu 📊 总记录数: u% ✅ 数据库完整性验证通过Tu' ❌ 数据库完整性验证失败: F)rDrr5rrrrrrr<>r<>r<>r9<00>_check_critical_fields)r,r;<00> tables_info<66> total_recordsr<73><00> model_classr<73>r=s r-rN<00>.DatabaseInitializer._verify_database_integrityFs!<00><00> <0A>2<>3<> <19><1B>'<27>'<27>)<29>W<EFBFBD>$-<2D>%1<>)7<>!*<2A>#<23>$/<2F> <12> <0B>!"<22> <0A>/:<3A>/@<40>/@<40>/B<>+<2B>J<EFBFBD>N<01> '<27> <0A> <0A>k<EFBFBD> :<3A> @<40> @<40> B<><05>%<25>.<2E> <0A><1D><08><1A> <0C>B<EFBFBD>u<EFBFBD>g<EFBFBD>Z<EFBFBD>H<>I<> 0C<01><16>.<2E>}<7D>o<EFBFBD>><3E>?<3F><15>+<2B>+<2B>-<2D><15>=<3D>><3E><1B>5*<2A>)<29><>"%<25>N<01><1D> <0B>J<EFBFBD><<3C>7H<37><11><03>L<>M<>M<><4D>N<01><>#*<2A>)<29><>6<19> <19> <11>;<3B>A<EFBFBD>3<EFBFBD>?<3F> @<40><18><> <19>s^<00>D<00>9C1<03>5C<04>.C1<03>?D<00>
C.<07>C)<07>#C1<03>)C.<07>.C1<03>1
C?<07>;D<00>?D<00>
D$<03> D<03>D$c<00><><00>/SQnUHAup#URX#5(a[SUSUS35 M/[SUSUS35 MC g)u检查关键字段))r}rw)r<>r<>)r<><00>
vehicle_id)r<>r<>)r<>r<>u
✅ r<>u 字段存在u ⚠️ u 字段缺失N)r<>rD)r,<00>critical_checksr<73>r<>s r-r<><00>*DatabaseInitializer._check_critical_fieldsjsW<00><00>
<EFBFBD><0F>'6<> "<22>J<EFBFBD><13>"<22>"<22>:<3A>:<3A>:<3A><15>
<EFBFBD>:<3A>,<2C>a<EFBFBD>
<EFBFBD>|<7C>=<3D>I<>J<><15><0E>z<EFBFBD>l<EFBFBD>!<21>J<EFBFBD><<3C>}<7D>M<>N<> '6r0c<00><><00>[S5 [R"5R5URUR
[ UR5UR5SSS.n[S5n[USSS9n[R"XSS S
9 S S S 5 [S U35 g !,(df  N=f![an[S U35 S nAg S nAff=f)u生成初始化报告u
📋 生成初始化报告...T)<07> init_time<6D>database_version<6F> database_url<72>migrations_applied<65>tables_created<65>initial_data_inserted<65>verification_passedzdatabase_init_report.json<6F>wzutf-8)<01>encoding<6E>F)<02>indent<6E> ensure_asciiNu$ ✅ 初始化报告已保存到: u( ⚠️ 生成初始化报告失败: )rDr rE<00> isoformatr)r$rqr*<00>_get_table_countr <00>open<65>json<6F>dumpr9)r,<00>report<72> report_path<74>fr=s r-rO<00>)DatabaseInitializer._generate_init_reportzs<><00><00> <0A>/<2F>0<> B<01>%<25>\<5C>\<5C>^<5E>5<>5<>7<>$(<28>O<EFBFBD>O<EFBFBD> $<24> <0B> <0B>&)<29>$<24>*@<40>*@<40>&A<>"&<26>"7<>"7<>"9<>)-<2D>'+<2B><0E>F<EFBFBD><1F>:<3A>;<3B>K<EFBFBD><15>k<EFBFBD>3<EFBFBD><17>9<>Q<EFBFBD><14> <09> <09>&<26>A<EFBFBD>E<EFBFBD>B<>:<3A> <12>8<><1B> <0A>F<> G<>:<3A>9<><39>
<19> B<01> <11><<3C>Q<EFBFBD>C<EFBFBD>@<40> A<> A<><41> B<01>s0<00>A6C<00>B1<03>C<00>1
B?<07>;C<00>
C$<03> C<03>C$c<00><><00>[[R5n[UR 55$![
a gf=f)u获取表数量r)rrr"rqr_r9)r,rbs r-r<00>$DatabaseInitializer._get_table_count<6E>s=<00><00> <15><1F>
<EFBFBD> 1<> 1<>2<>I<EFBFBD><16>y<EFBFBD>0<>0<>2<>3<> 3<><33><18> <15><14> <15>s<00>14<00>
A<03>Ac
<00><><00>[S5 [S5 [S5 [R"5n[[[
[ [[S.nURS0S[R"5R5S.nUR5HKupEURU5R5nXcSU'US ==U- ss'[S
US US 35 MM SUS;Ga[#USS[$5(a<>USSnUS:<3A>a<>UR[R&5R)5R+5n [S[-U 535 [-U 5US'U SSHn
UR[R.5R1[R&U
S:H5R)5R+5n [SU
SS [-U 5S35 M<> SUS;a<>[#USS[$5(a<>UR[
5R1[
R2S:H5R5n UR[
5R1[
R2S:H5R5n [SU 35 [SU 35 U U S.US'[SUS 35 [S5 UsSSS5 $![ a(nS U3USU'[SUSU35 SnAGM<>SnAff=f!,(df  g=f![ a%n[S U35 S![5U50sSnA$SnAff=f)"u检查数据库状态rBu📊 数据库状态检查rAr<>u正常r)r<00>connection_status<75>tablesr<73><00>
last_checkrr<>u📋 rhr<>u错误: u⚠️ r<>Nr<4E>u - 车辆数量: <20> vehicle_count<6E>u - 车辆 u 种数据类型r}TFu - 已验证: u - 未验证: )<02>verified<65>
unverified<EFBFBD>knowledge_verificationu
📊 总记录数: u
✅ 数据库状态检查完成u!❌ 数据库状态检查失败: rP)rDrr5rrrrrrr)r rErr<>r<>r<>r9<00>
isinstance<EFBFBD>intr<74><00>distinctr<74>rq<00> data_typer<65>rwr!)r,r;r<><00>statusr<73>r<>r<>r=r<00> vehicle_idsr<73><00>vehicle_data_types<65>verified_count<6E>unverified_counts r-<00>check_database_status<75>)DatabaseInitializer.check_database_status<75>s@<00><00> <0A>o<EFBFBD><1E> <0A>*<2A>+<2B> <0A>h<EFBFBD><0F>> %<25><1B>'<27>'<27>)<29>W<EFBFBD>$-<2D>%1<>)7<>!*<2A>#<23>$/<2F> <12> <0B>)-<2D><0F><0F>)1<> <20>%&<26>"*<2A>,<2C>,<2C>.<2E>":<3A>":<3A>"<<3C> <12><06>0;<3B>/@<40>/@<40>/B<>+<2B>J<EFBFBD>K<01> '<27> <0A> <0A>k<EFBFBD> :<3A> @<40> @<40> B<><05>7<<3C>x<EFBFBD>(<28><1A>4<><1E><EFBFBD>/<2F>5<EFBFBD>8<>/<2F><1D><05>j<EFBFBD>\<5C><12>E<EFBFBD>7<EFBFBD>*<2A>E<>F<> 0C<01>"<22>V<EFBFBD>H<EFBFBD>%5<>5<>*<2A>V<EFBFBD>H<EFBFBD>EU<45>Vd<56>Ee<45>gj<67>:k<>:k<>$*<2A>8<EFBFBD>$4<>^<5E>$D<>M<EFBFBD>$<24>q<EFBFBD>(<28>&-<2D>m<EFBFBD>m<EFBFBD>K<EFBFBD>4J<34>4J<34>&K<>&T<>&T<>&V<>&Z<>&Z<>&\<5C> <0B><1D> 3<>C<EFBFBD> <0B>4D<34>3E<33>F<>G<>25<32>k<EFBFBD>2B<32><06><EFBFBD>/<2F>*5<>b<EFBFBD>q<EFBFBD>/<2F>J<EFBFBD>18<31><1D><1D>{<7B>?T<>?T<>1U<31>1\<5C>1\<5C> +<2B> 6<> 6<>*<2A>Q<EFBFBD>-<2D> G<>2<1E>&<26>h<EFBFBD>j<EFBFBD><13><13><15>/<2F>"<22>L<EFBFBD><1A>A<EFBFBD><1D><0F>r<EFBFBD>#<23>FX<46>BY<42>AZ<41>Zj<5A>"k<>l<> +:<3A>'<27>&<26><18>*:<3A>:<3A>z<EFBFBD>&<26>QY<51>JZ<4A>[n<>Jo<4A>qt<71>?u<>?u<>%,<2C>]<5D>]<5D>><3E>%B<>%I<>%I<>.<2E>Jd<4A>Jd<4A>hl<68>Jl<4A>%m<>%s<>%s<>%u<>N<EFBFBD>'.<2E>}<7D>}<7D>^<5E>'D<>'K<>'K<>N<EFBFBD>Lf<4C>Lf<4C>jo<6A>Lo<4C>'p<>'v<>'v<>'x<>$<24><19>,<2C>^<5E>,<<3C>=<3D>><3E><19>,<2C>-=<3D>,><3E>?<3F>@<40>$2<>&6<>8<16>F<EFBFBD>3<>4<>
<16>-<2D>f<EFBFBD>_<EFBFBD>.E<>-F<>G<>H<><15>9<>:<3A><1D>s*<2A>)<29><>2%<25>K<01>9A<39>!<21><13>~<7E><06>x<EFBFBD>(<28><1A>4<><1D><08><1A> <0C>4E<34>a<EFBFBD>S<EFBFBD>I<>J<>J<><4A>K<01><>3*<2A>)<29><>v<19> %<25> <11>5<>a<EFBFBD>S<EFBFBD>9<> :<3A><1B>S<EFBFBD><11>V<EFBFBD>$<24> $<24><> %<25>sg<00>M<00>A*L1<03>#AK<<04>(H
L1<03>2 M<00><
L.<07>L)<07>"L1<03>)L.<07>.L1<03>1
L?<07>;M<00>?M<00>
M1<03> M,<03>&M1<03>,M1)r$r)r%r'r&r r*N)F)&r<00>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>__doc__r.r!r(<00>boolrQrIrJrKrLrjrkrlrmrnrorpr<00>tuplerr<>rMrrr<>r<>r<>rNr<>rOr$rr,<00>__static_attributes__r<5F>r0r-rrsn<00><00>.<2E> $<24><1D>s<EFBFBD><1D>"2<19>t<EFBFBD>2<19><04>2<19>h <19>$<24> <19><19><14><19>"<19><04><19>2!<21><14>!<21>4
K<01><04>
K<01>@<01>t<EFBFBD>@<01><19>T<EFBFBD><19>* G<01>D<EFBFBD> G<01>E<01><14>E<01>8 C<01><14> C<01><17>T<EFBFBD><17>:$<19>S<EFBFBD>$<19>$<24>u<EFBFBD>+<2B>$<19>$<24>$<19>L<19><13><19>3<EFBFBD><19>4<EFBFBD><19><<19>d<EFBFBD><19>@q
<EFBFBD>T<EFBFBD>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>-A<>q
<EFBFBD>f<19>$<24><19>$<19>D<EFBFBD><19>@"<19>D<EFBFBD>"<19>HO<01> B<01>2<15>#<23><15>D%<25>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>D%r0rc<00>v<00>[S5 [S5 [5nS[R;=(d S[R;nU(a8[S5 [ S5nUR 5S:wa [S5 g URUS 9(GaUR5 [S 5 [S 5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S 5 [S!5 [S"5 g [S 5 [S#5 [S5 [S$5 [S%5 [S&5 [S'5 [S(5 [S)5 g ![ a [S
5 GN<>f=f)*u 主函数u;🚀 TSP智能助手数据库初始化工具 - 重构版本rAz--resetz--forceuA⚠️ 警告将重置数据库所有数据将被删除u确定要继续吗?(y/N): <20>yu操作已取消Nu非交互环境,跳过确认)r?rBu 🎉 数据库初始化成功u✅ 已完成的操作u - 创建所有数据库表u - 执行数据库迁移u - 添加知识库验证字段u - 创建车辆数据表u - 插入初始知识库数据u - 添加示例车辆数据u - 验证所有知识库条目u - 生成初始化报告u6
🚀 现在您可以运行以下命令启动系统z python start_dashboard.pyu
🧪 或运行功能测试z python test_new_features.pyu
📋 新功能包括u - 知识库分页显示u - 知识库验证机制u - 车辆实时数据管理u - 文件上传生成知识库u# - 智能对话结合车辆数据u - 飞书同步功能u - 系统性能优化u❌ 数据库初始化失败u 请检查u1. 数据库文件权限u2. 数据库服务是否运行u3. 磁盘空间是否充足u4. Python依赖库是否完整u5. 配置文件是否正确) rDr<00>sys<79>argv<67>input<75>lowerr9rQr,)<03> initializerr?<00>confirms r-<00>mainr=<00>s<><00><00> <09>
G<EFBFBD>H<> <09>(<28>O<EFBFBD>&<26>'<27>K<EFBFBD><1C>s<EFBFBD>x<EFBFBD>x<EFBFBD>'<27>@<40>9<EFBFBD><03><08><08>+@<40>K<EFBFBD><12> <0A>Q<>R<> 4<><1B>:<3A>;<3B>G<EFBFBD><16>}<7D>}<7D><EFBFBD>#<23>%<25><15>'<27>(<28><16>&<26><13>&<26>&<26>;<3B>&<26>?<3F><13>)<29>)<29>+<2B> <0A>o<EFBFBD><1E> <0A>0<>1<> <0A>h<EFBFBD><0F> <0A>)<29>*<2A> <0A>-<2D>.<2E> <0A>*<2A>+<2B> <0A>0<>1<> <0A>*<2A>+<2B> <0A>0<>1<> <0A>-<2D>.<2E> <0A>0<>1<> <0A>*<2A>+<2B> <0A>G<>H<> <0A>,<2C>-<2D> <0A>/<2F>0<> <0A>.<2E>/<2F> <0A>)<29>*<2A> <0A>*<2A>+<2B> <0A>*<2A>+<2B> <0A>-<2D>.<2E> <0A>0<>1<> <0A>3<>4<> <0A>'<27>(<28> <0A>'<27>(<28> <0A>o<EFBFBD><1E> <0A>/<2F>0<> <0A>h<EFBFBD><0F> <0A>n<EFBFBD><1D> <0A>(<28>)<29> <0A>.<2E>/<2F> <0A>+<2B>,<2C> <0A>.<2E>/<2F> <0A>+<2B>,<2C><>S<19> 4<> <11>2<> 3<> 4<>s<00>!*H<00>H8<03>7H8<03>__main__)'r1r7<00>osrr<00>typingrrrr<00>
sqlalchemyrrr r
<00>pathlibr <00>path<74>append<6E>dirname<6D>abspath<74>__file__<5F>src.config.configr <00>src.utils.helpersr <00>src.core.databaser<00>src.core.modelsrrrrrrrrr=rr<>r0r-<00><module>rLs<><00><01><04>
 <0B> <09><0E> <0B>,<2C>,<2C>$<24>(<28><18><04><08><08><0F><0F><02><07><07><0F><0F><02><07><07><0F><0F><08> 9<>:<3A>;<3B>$<24>+<2B>(<28>h<>h<>h<>G %<25>G %<25>R;-<2D>z <0C>z<EFBFBD><19><08>F<EFBFBD>r0