Files
assist/src/web/blueprints/__pycache__/feishu_sync.cpython-311.pyc

94 lines
22 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>h<EFBFBD>;<00><00><><00>dZddlmZmZmZmZddlmZddlm Z ddl
m Z ddl m Z ddlZeje<10><00>Zeded <09>
<EFBFBD><00>Zdad <0B>Ze<12>d d dg<02><0F><00>d<10><00><00>Ze<12>ddg<01><0F><00>d<12><00><00>Ze<12>ddg<01><0F><00>d<14><00><00>Ze<12>d<15><00>d<16><00><00>Ze<12>d<17><00>d<18><00><00>Ze<12>ddg<01><0F><00>d<1A><00><00>Ze<12>d<1B><00>d<1C><00><00>Ze<12>ddg<01><0F><00>d<1E><00><00>Ze<12>ddg<01><0F><00>d <20><00><00>Ze<12>d!dg<01><0F><00>d"<22><00><00>Ze<12>d#<23><00>d$<24><00><00>Z e<12>d%<25><00>d&<26><00><00>Z!e<12>d'<27><00>d(<28><00><00>Z"e<12>d)d g<01><0F><00>d*<2A><00><00>Z#e<12>d+dg<01><0F><00>d,<2C><00><00>Z$e<12>d-dg<01><0F><00>d.<2E><00><00>Z%dS)/uE
飞书同步蓝图
处理飞书多维表格与工单系统的同步
<EFBFBD>)<04> Blueprint<6E>request<73>jsonify<66>render_template)<01> FeishuClient)<01>WorkOrderSyncService)<01>config_manager)<01>FeishuPermissionCheckerN<72> feishu_syncz/api/feishu-sync)<01>
url_prefixc<00><><00>t<00><>tj<00><00>}t|<00>d<02><00>|<00>d<03><00>|<00>d<04><00>|<00>d<05><00>g<04><00>st d<06><00><00>t |d|d<00><00>}t||d|d<00><00>atS)u获取同步服务实例N<E4BE8B>app_id<69>
app_secret<EFBFBD> app_token<65>table_idu6飞书配置不完整,请先配置飞书应用信息)<08> sync_servicer <00>get_feishu_config<69>all<6C>get<65> Exceptionrr)<02> feishu_config<69> feishu_clients <20>7d:\code\tsp-assistant\src\web\blueprints\feishu_sync.py<70>get_sync_servicers<><00><00><14><1B>&<26>8<>:<3A>:<3A> <0A><12>M<EFBFBD>%<25>%<25>h<EFBFBD>/<2F>/<2F><1D>1B<31>1B<31><<3C>1P<31>1P<31> <20>$<24>$<24>[<5B>1<>1<>=<3D>3D<33>3D<33>Z<EFBFBD>3P<33>3P<33>R<01>S<01>S<01> V<01><1B>T<>U<>U<> U<>$<24>]<5D>8<EFBFBD>%<<3C>m<EFBFBD>L<EFBFBD>>Y<>Z<>Z<> <0A>+<2B>M<EFBFBD>=<3D><1B>;U<>Wd<57>eo<65>Wp<57>q<>q<> <0C> <17><17>z/config<69>GET<45>POST)<01>methodsc<00><><00>tjdkrz tj<00><00>}t d|d<03><02><00>S#t
$rG}t <00>d|<01><00><02><00>t dt|<01><00>i<01><00>dfcYd}~Sd}~wwxYwtjdk<00>r# tj <00><00>}|<02>
d <09><00>}|<02>
d
<EFBFBD><00>}|<02>
d <0B><00>}|<02>
d <0C><00>}t||||g<04><00>st dd i<01><00>dfStj ||||<06><0F><00>}|rda t ddd<11><02><00>St ddi<01><00>dfS#t
$rG}t <00>d|<01><00><02><00>t dt|<01><00>i<01><00>dfcYd}~Sd}~wwxYwdS)u管理飞书同步配置rT<><02>success<73>configu获取配置失败: <20>error<6F><72>Nrrrrru缺少必要配置参数<E58F82><E695B0>)rrrru配置更新成功<E68890>r!<00>messageu配置更新失败u更新飞书配置失败: )r<00>methodr <00>get_config_summaryrr<00>loggerr#<00>str<74>get_jsonrr<00>update_feishu_configr)<08>config_summary<72>e<>datarrrrr!s r<00> manage_configr1%s,<00><00><0F>~<7E><15><1E><1E> 3<>+<2B>><3E>@<40>@<40>N<EFBFBD><1A><1F>(<28><0E><0E><0F><0F> <0F><><19> 3<> 3<> 3<> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1A>G<EFBFBD>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>,<2C>-<2D>-<2D>s<EFBFBD>2<> 2<> 2<> 2<> 2<> 2<> 2<><32><EFBFBD><EFBFBD><EFBFBD> 3<><33><EFBFBD><EFBFBD>
<11><1E>6<EFBFBD> !<21> !<21> 3<><1A>#<23>%<25>%<25>D<EFBFBD><19>X<EFBFBD>X<EFBFBD>h<EFBFBD>'<27>'<27>F<EFBFBD><1D><18><18>,<2C>/<2F>/<2F>J<EFBFBD><1C><08><08><1B>-<2D>-<2D>I<EFBFBD><1B>x<EFBFBD>x<EFBFBD>
<EFBFBD>+<2B>+<2B>H<EFBFBD><16><06>
<EFBFBD>I<EFBFBD>x<EFBFBD>@<40>A<>A<> K<01><1E><07>)C<>D<>E<>E<>s<EFBFBD>J<>J<>%<25>9<><1D>%<25>#<23>!<21> <0E><0E><0E>G<EFBFBD><17>
E<01> $<24> <0C><1E>#<23>3<> <12> <12><13><13><13>
<1F><07>)=<3D>><3E>?<3F>?<3F><13>D<>D<><44><18> 3<> 3<> 3<> <12>L<EFBFBD>L<EFBFBD>9<>a<EFBFBD>9<>9<> :<3A> :<3A> :<3A><1A>G<EFBFBD>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>,<2C>-<2D>-<2D>s<EFBFBD>2<> 2<> 2<> 2<> 2<> 2<> 2<><32><EFBFBD><EFBFBD><EFBFBD> 3<><33><EFBFBD><EFBFBD>A
"<22> !sF<00>$7<00>
B<03><B<03>=B<03>B<03>B E+<00>*-E+<00>E+<00>+
F<<03>5<F7<03>1F<<03>7F<z/sync-from-feishuc<00>r<00> tj<00><00>pi}|<00>dd<02><00>}|<00>dd<04><00>}t<00><00>}|<03>||<02><05><00>}|<04>d<06><00>rBd|d<00>d |d
<00>d <0B>}|<04>d <0C><00>r|d z }t d||d<0E><03><00>St d|<04>d<0F><00>i<01><00>dfS#t $rG}t<00>d|<06><00><02><00>t dt|<06><00>i<01><00>dfcYd}~Sd}~wwxYw)u从飞书同步数据到本地<E69CAC>generate_ai_suggestionsT<73>limit<69>
)r3r4r!u同步完成:创建 <20> created_countu 条,更新 <20> updated_countu<>ai_suggestions_generatedu,AI建议已生成并更新到飞书表格)r!r'<00>detailsr#r$u从飞书同步失败: N)
rr,rr<00>sync_from_feishurrr*r#r+)r0<00> generate_air4r<00>resultr'r/s rr:r:Xsq<00><00>/<2F><16><1F>!<21>!<21>'<27>R<EFBFBD><04><1A>h<EFBFBD>h<EFBFBD>8<>$<24>?<3F>?<3F> <0B><14><08><08><17>"<22>%<25>%<25><05>'<27>)<29>)<29> <0C><1D>.<2E>.<2E>{<7B>Z_<5A>.<2E>`<60>`<60><06> <11>:<3A>:<3A>i<EFBFBD> <20> <20> @<01>s<>v<EFBFBD>o<EFBFBD>/F<>s<>s<>V\<5C>]l<>Vm<56>s<>s<>s<>G<EFBFBD><15>z<EFBFBD>z<EFBFBD>4<>5<>5<> J<01><17>I<>I<><07><1A><1F>"<22>!<21><0E><0E><0F><0F> <0F> <1B>G<EFBFBD>V<EFBFBD>Z<EFBFBD>Z<EFBFBD><07>%8<>%8<>9<>:<3A>:<3A>C<EFBFBD>?<3F> ?<3F><> <14>/<2F>/<2F>/<2F><0E> <0C> <0C>2<>q<EFBFBD>2<>2<>3<>3<>3<><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<C%<00>?%C%<00>%
D6<03>/<D1<03>+D6<03>1D6z"/sync-to-feishu/<int:workorder_id>c<00><><00> t<00><00>}|<01>|<00><00>}|<02>d<01><00>rtddd<04><02><00>Std|<02>d<05><00>i<01><00>dfS#t$rG}t
<00>d|<03><00><02><00>tdt|<03><00>i<01><00>dfcYd}~Sd}~wwxYw) u将本地工单同步到飞书r!Tu同步到飞书成功r&r#r$u同步到飞书失败: N)r<00>sync_to_feishurrrr*r#r+)<04> workorder_idrr<r/s rr>r>ts<><00><00>/<2F>'<27>)<29>)<29> <0C><1D>,<2C>,<2C>\<5C>:<3A>:<3A><06> <11>:<3A>:<3A>i<EFBFBD> <20> <20> @<01><1A><1F>2<><0E><0E><0F><0F> <0F>
<1B>G<EFBFBD>V<EFBFBD>Z<EFBFBD>Z<EFBFBD><07>%8<>%8<>9<>:<3A>:<3A>C<EFBFBD>?<3F> ?<3F><> <14>/<2F>/<2F>/<2F><0E> <0C> <0C>2<>q<EFBFBD>2<>2<>3<>3<>3<><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 A2<00> %A2<00>2
C<03><<B><03>8C<03>>Cz/statusc<00><00> t<00><00>}|<00><00><00>}td|d<02><02><00>S#t$rG}t<00>d|<02><00><02><00>tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取同步状态T<E68081>r!<00>statusu获取同步状态失败: r#r$N)r<00>get_sync_statusrrr*r#r+<00>rrBr/s rrCrC<00>s<><00><00>
/<2F>'<27>)<29>)<29> <0C><1D>-<2D>-<2D>/<2F>/<2F><06><16><1B><1C>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <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><EFBFBD><00>36<00>
B<03><B<03><B<03>Bz/test-connectionc<00>*<00> tj<00><00>}|<00>d<01><00><00>r t<00><00>}|j<00><00><00>}|<02>d<01><00>s*t dd|<02>d<04><00><00><00>d<05><02><00>dfS|j<00>|j|j <00><00>}|<03>d<07><00>dkr-|<03>d i<00><00><00>d
g<00><00>|d <n4#t$r'}t<00> d |<04><00><02><00>Yd }~nd }~wwxYwt |<00><00>S#t$rG}t<00> d|<04><00><02><00>t dt|<04><00>i<01><00>dfcYd }~Sd }~wwxYw)u测试飞书连接r!Fu飞书连接测试失败: r'r&r%<00>coderr0<00>items<6D>fieldsu 获取表格字段信息失败: Nu测试飞书连接失败: r#r$)r <00>test_feishu_connectionrrr<00>test_connectionr<00>get_table_fieldsrrrr*<00>warningr#r+)r<r<00>connection_test<73> fields_infor/s rrKrK<00>s<><00><00>/<2F><1F>6<>8<>8<><06> <11>:<3A>:<3A>i<EFBFBD> <20> <20> G<01> G<01>/<2F>1<>1<> <0C>#/<2F>"<<3C>"L<>"L<>"N<>"N<><0F>&<26>*<2A>*<2A>9<EFBFBD>5<>5<><1C>"<22>#(<28>#`<60><0F>@S<>@S<>T]<5D>@^<5E>@^<5E>#`<60>#`<60>$<16>$<16><17><17><1C><1C><1C>
+<2B>8<>I<>I<> <20>*<2A>L<EFBFBD>,A<><12><12> <0B><1F>?<3F>?<3F>6<EFBFBD>*<2A>*<2A>a<EFBFBD>/<2F>/<2F>'2<><EFBFBD><EFBFBD>v<EFBFBD>r<EFBFBD>'B<>'B<>'F<>'F<>w<EFBFBD>PR<50>'S<>'S<>F<EFBFBD>8<EFBFBD>$<24><><EFBFBD><1C> G<01> G<01> G<01><16><0E><0E>E<>!<21>E<>E<>F<>F<>F<>F<>F<>F<>F<>F<><46><EFBFBD><EFBFBD><EFBFBD> G<01><><EFBFBD><EFBFBD><17>v<EFBFBD><EFBFBD><EFBFBD><1E><> <14>/<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>sN<00>)E<00>A%C><00>A+C><00>=E<00>>
D/<03>D*<03>%E<00>*D/<03>/E<00>
F<03> <F <03>F<03> Fz/create-workorderc<00><><00> tj<00><00>}|<00>d<01><00>}|stddd<04><02><00>dfSt <00><00>}|<02>|<01><00>}|<03>d<06><00>rt|<03><00>St|<03><00>dfS#t $rH}t<00>d|<04><00><02><00>tdt|<04><00>d<04><02><00>dfcYd }~Sd }~wwxYw)
u从飞书记录创建工单<E5B7A5> record_idFu缺少记录IDr&r%r!u创建工单失败: r$N)
rr,rrr<00>#create_workorder_from_feishu_recordrr*r#r+)r0rQrr<r/s r<00>create_workorder_from_feishurS<00>s <00><00>C<01><16><1F>!<21>!<21><04><18>H<EFBFBD>H<EFBFBD>[<5B>)<29>)<29> <09><18> Q<01><1A>u<EFBFBD>9I<39>J<>J<>K<>K<>S<EFBFBD>P<> P<>'<27>)<29>)<29> <0C><1D>A<>A<>)<29>L<>L<><06> <11>:<3A>:<3A>i<EFBFBD> <20> <20> (<28><1A>6<EFBFBD>?<3F>?<3F> "<22><1A>6<EFBFBD>?<3F>?<3F>C<EFBFBD>'<27> '<27><> <14>C<01>C<01>C<01><0E> <0C> <0C>/<2F>A<EFBFBD>/<2F>/<2F>0<>0<>0<><16>5<EFBFBD>S<EFBFBD><11>V<EFBFBD>V<EFBFBD><<3C><<3C>=<3D>=<3D>s<EFBFBD>B<>B<>B<>B<>B<>B<>B<><42><EFBFBD><EFBFBD><EFBFBD>C<01><><EFBFBD>s*<00>=B<00>AB<00>B<00>
C*<03>"=C%<03>C*<03>%C*z/field-mapping/statusc<00><00> t<00><00>}|<00><00><00>}td|d<02><02><00>S#t$rG}t<00>d|<02><00><02><00>tdt |<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u获取字段映射状态TrAu 获取字段映射状态失败: r#r$N)r<00>get_mapping_statusrrr*r#r+rDs r<00>get_field_mapping_statusrV<00>s<><00><00>
/<2F>'<27>)<29>)<29> <0C><1D>0<>0<>2<>2<><06><16><1B><1C>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><0E> <0C> <0C>;<3B><01>;<3B>;<3B><<3C><<3C><<3C><16><07><13>Q<EFBFBD><16><16>(<28>)<29>)<29>3<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>rEz/field-mapping/discoverc<00><><00> tj<00><00>pi}|<00>dd<02><00>}t<00><00>}|j}|<03>|j|j|<01><03><00>}|<04>d<04><00>dkr&td|<04>dd<08><00><00><00><02><00><00>|<04>d i<00><00><00>d
g<00><00>}|std d id <0A><03><00>S|d}|<03>
|<06><00>}|<02> |<07><00>}td ||d<0E><03><00>S#t$rG} t<00> d| <09><00><02><00>tdt| <09><00>i<01><00>dfcYd} ~ Sd} ~ wwxYw)u!发现字段并生成映射建议r4<00><00><01> page_sizerGru获取飞书记录失败: <20>msgu 未知错误r0rHTu没有找到飞书记录)r!r'<00>discovery_report)r!r\<00> sample_recordu字段发现失败: r#r$N)rr,rrr<00>get_table_recordsrrrr<00>parse_record_fields<64>get_field_discovery_reportr*r#r+)
r0r4rr<00>recordsrH<00> first_record<72> feishu_fieldsr\r/s
r<00>discover_fieldsrd<00>s<><00><00>$/<2F><16><1F>!<21>!<21>'<27>R<EFBFBD><04><14><08><08><17>!<21>$<24>$<24><05>'<27>)<29>)<29> <0C>%<25>2<> <0A><1F>1<>1<>,<2C>2H<32>,<2C>J_<4A>kp<6B>1<>q<>q<><07> <12>;<3B>;<3B>v<EFBFBD> <1E> <1E>!<21> #<23> #<23><1B>]<5D><17><1B><1B>U<EFBFBD>N<EFBFBD>9[<5B>9[<5B>]<5D>]<5D>^<5E>^<5E> ^<5E><17> <0B> <0B>F<EFBFBD>B<EFBFBD>'<27>'<27>+<2B>+<2B>G<EFBFBD>R<EFBFBD>8<>8<><05><14> <0F><1A><1F>5<>$&<26><0E><0E><0F><0F> <0F><1D>Q<EFBFBD>x<EFBFBD> <0C>%<25>9<>9<>,<2C>G<>G<> <0A>(<28>B<>B<>=<3D>Q<>Q<><18><16><1B> 0<>*<2A>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><0E> <0C> <0C>/<2F>A<EFBFBD>/<2F>/<2F>0<>0<>0<><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>CD'<00>"AD'<00>'
E8<03>1<E3<03>-E8<03>3E8z/field-mapping/addc<00><><00> tj<00><00>}|<00>d<01><00>}|<00>d<02><00>}|<00>dg<00><00>}|<00>dg<00><00>}|<00>dd<06><00>}|r|stddi<01><00>d fSt <00><00>}|<06>|||||<05>
<EFBFBD><00>}|rtd d |<01>d |<02>d<0E>d<0F><02><00>Stddi<01><00>dfS#t $rG}t<00>d|<08><00><02><00>tdt|<08><00>i<01><00>dfcYd}~Sd}~wwxYw)u添加字段映射<E698A0> feishu_field<6C> local_field<6C>aliases<65>patterns<6E>priority<74>r#u缺少必要参数r%)rfrgrhrirjT<>字段映射 'z' -> 'u' 添加成功r&u添加字段映射失败r$u添加字段映射失败: N)
rr,rrr<00>add_field_mappingrr*r#r+) r0rfrgrhrirjrr!r/s rrmrms<><00><00>/<2F><16><1F>!<21>!<21><04><1B>x<EFBFBD>x<EFBFBD><0E>/<2F>/<2F> <0C><1A>h<EFBFBD>h<EFBFBD>}<7D>-<2D>-<2D> <0B><16>(<28>(<28>9<EFBFBD>b<EFBFBD>)<29>)<29><07><17>8<EFBFBD>8<EFBFBD>J<EFBFBD><02>+<2B>+<2B><08><17>8<EFBFBD>8<EFBFBD>J<EFBFBD><01>*<2A>*<2A><08><1B> A<01>;<3B> A<01><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40>'<27>)<29>)<29> <0C><1E>0<>0<>%<25>#<23><1B><1D><1D> 1<>
<EFBFBD>
<EFBFBD><07> <13> G<01><1A><1F>[<5B>L<EFBFBD>[<5B>[<5B> <0B>[<5B>[<5B>[<5B><0E><0E><0F><0F> <0F>
<1B>G<EFBFBD>%?<3F>@<40>A<>A<>3<EFBFBD>F<> F<><46> <14>/<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+<00>BC.<00>AC.<00>C.<00>.
D?<03>8<D:<03>4D?<03>:D?z/field-mapping/removec<00><><00> tj<00><00>}|<00>d<01><00>}|stddi<01><00>dfSt <00><00>}|<02>|<01><00>}|rtdd|<01>d<07>d<08><02><00>Std d|<01>d
<EFBFBD>d<08><02><00>S#t $rG}t<00>d |<04><00><02><00>tdt|<04><00>i<01><00>d fcYd }~Sd }~wwxYw)u移除字段映射rfr#u缺少字段名参数r%Trlu' 移除成功r&Fu' 不存在或移除失败u移除字段映射失败: r$N)
rr,rrr<00>remove_field_mappingrr*r#r+)r0rfrr!r/s rroro*s3<00><00>/<2F><16><1F>!<21>!<21><04><1B>x<EFBFBD>x<EFBFBD><0E>/<2F>/<2F> <0C><1B> D<01><1A>G<EFBFBD>%<<3C>=<3D>><3E>><3E><03>C<> C<>'<27>)<29>)<29> <0C><1E>3<>3<>L<EFBFBD>A<>A<><07> <12> <0F><1A><1F>H<>L<EFBFBD>H<>H<>H<><0E><0E><0F><0F> <0F>
<1B> <20>T<>L<EFBFBD>T<>T<>T<><0E><0E><0F><0F> <0F><>
<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(<00><B<00>:B<00>:B<00>
C!<03><C<03>C!<03>C!z/check-permissionsc<00>:<00> t<00><00>}|<00><00><00>}td||<00><00><00>d<02><03><00>S#t$rG}t
<00>d|<02><00><02><00>tdt|<02><00>i<01><00>dfcYd}~Sd}~wwxYw)u检查飞书权限T)r!<00>permission_check<63>summaryu权限检查失败: r#r$N)r
<00>check_permissionsr<00>get_permission_summaryrr*r#r+)<03>checkerr<r/s rrsrsFs<><00><00> /<2F>)<29>+<2B>+<2B><07><18>*<2A>*<2A>,<2C>,<2C><06><16><1B> &<26><1E>5<>5<>7<>7<>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><>
<15>/<2F>/<2F>/<2F><0E> <0C> <0C>/<2F>A<EFBFBD>/<2F>/<2F>0<>0<>0<><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/field-mappingc<00> <00>td<01><00>S)u字段映射管理页面zfield_mapping.html)r<00>rr<00>field_mapping_pagerxVs<00><00> <1B>/<2F> 0<> 0<>0rz/preview-feishu-datac<00><><00> t<00><00>}|j<00>|j|jd<01><02><00>}|<01>d<03><00>dkr<>|<01>di<00><00><00>dg<00><00>}g}|D]G}|j<00>|<04><00>}|<03>|<04>d<07><00>|d<08><02><00><00>Htd |t|<03><00>d
<EFBFBD><03><00>Std |<01>d d <0A><00>d<0E><02><00>dfS#t$rG}t<00> d|<06><00><02><00>tdt|<06><00>i<01><00>dfcYd}~Sd}~wwxYw)u预览飞书数据r5rYrGrr0rHrQ)rQrIT)r!<00> preview_data<74> total_countFr[u获取数据失败)r!r#r$u预览飞书数据失败: r#N)rrr^rrrr_<00>appendr<00>lenrr*r#r+)rrarHrz<00>record<72> parsed_fieldsr/s r<00>preview_feishu_datar<61>[s<><00><00> /<2F>'<27>)<29>)<29> <0C><1F>,<2C>><3E>><3E> <18> "<22>L<EFBFBD>$9<>R<EFBFBD>?<3F>
<EFBFBD>
<EFBFBD><07> <13>;<3B>;<3B>v<EFBFBD> <1E> <1E>!<21> #<23> #<23><1B>K<EFBFBD>K<EFBFBD><06><02>+<2B>+<2B>/<2F>/<2F><07><12><<3C><<3C>E<EFBFBD><1D>L<EFBFBD><1F> <13> <13><06> ,<2C> :<3A> N<> N<>v<EFBFBD> V<> V<> <0A><1C>#<23>#<23>!'<27><1A><1A>K<EFBFBD>!8<>!8<>+<2B>%<12>%<12><13><13><13><13>
<1B><1F> ,<2C>"<22><<3C>0<>0<><0E><0E><0F><0F> <0F> <1B> <20> <20><1B><1B>U<EFBFBD>,@<40>A<>A<><0E><0E><0F><0F><14><14> <14><>
<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$<00>C#D<00>&'D<00>
E<03><E<03>E<03>Ez/config/exportc<00><><00> tj<00><00>}td|d<02><02><00>S#t$rG}t<00>d|<01><00><02><00>tdt |<01><00>i<01><00>dfcYd}~Sd}~wwxYw)u 导出配置Tr u导出配置失败: r#r$N)r <00> export_configrrr*r#r+)<02> config_jsonr/s rr<>r<><00>s<><00><00>/<2F>$<24>2<>4<>4<> <0B><16><1B>!<21>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><> <15>/<2F>/<2F>/<2F><0E> <0C> <0C>/<2F>A<EFBFBD>/<2F>/<2F>0<>0<>0<><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>
A8<03><A3<03>-A8<03>3A8z/config/importc<00><><00> tj<00><00>}|<00>d<01><00>}|stddi<01><00>dfSt j|<01><00>}|rdatddd<08><02><00>Stdd i<01><00>d
fS#t$rG}t<00> d |<03><00><02><00>tdt|<03><00>i<01><00>d
fcYd}~Sd}~wwxYw) u 导入配置r"r#u缺少配置数据r%NTu配置导入成功r&u配置导入失败r$u导入配置失败: ) rr,rrr <00> import_configrrr*r#r+)r0r<>r!r/s rr<>r<><00>s <00><00>/<2F><16><1F>!<21>!<21><04><1A>h<EFBFBD>h<EFBFBD>x<EFBFBD>(<28>(<28> <0B><1A> A<01><1A>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40> <20>.<2E>{<7B>;<3B>;<3B><07> <12>
A<01> <20>L<EFBFBD><1A><1F>/<2F><0E><0E><0F><0F> <0F>
<1B>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40><> <14>/<2F>/<2F>/<2F><0E> <0C> <0C>/<2F>A<EFBFBD>/<2F>/<2F>0<>0<>0<><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>)A<<00><
C <03><C<03>C <03>C z /config/resetc<00>$<00> tj<00><00>}|rdatddd<04><02><00>Stddi<01><00>dfS#t$rG}t
<00>d|<01><00><02><00>tdt|<01><00>i<01><00>dfcYd}~Sd}~wwxYw) u 重置配置NTu配置重置成功r&r#u配置重置失败r$u重置配置失败: )r <00> reset_configrrrr*r#r+)r!r/s rr<>r<><00>s<><00><00>/<2F> <20>-<2D>/<2F>/<2F><07> <12>
A<01> <20>L<EFBFBD><1A><1F>/<2F><0E><0E><0F><0F> <0F>
<1B>G<EFBFBD>%9<>:<3A>;<3B>;<3B>S<EFBFBD>@<40> @<40><> <14>/<2F>/<2F>/<2F><0E> <0C> <0C>/<2F>A<EFBFBD>/<2F>/<2F>0<>0<>0<><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>><00>
B<03><B
<03>B<03>
B)&<26>__doc__<5F>flaskrrrr<00>src.integrations.feishu_clientr<00>src.integrations.workorder_syncr<00>src.integrations.config_managerr <00>*src.integrations.feishu_permission_checkerr
<00>logging<6E> getLogger<65>__name__r*<00>feishu_sync_bprr<00>router1r:r>rCrKrSrVrdrmrorsrxr<>r<>r<>r<>rwrr<00><module>r<>s<><00><01><04><04>
?<3F>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>7<>7<>7<>7<>7<>7<>@<40>@<40>@<40>@<40>@<40>@<40>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>N<>N<>N<>N<>N<>N<><0E><0E><0E><0E> <1A><17> <1A>8<EFBFBD> $<24> $<24><06><1A><19>=<3D>(<28>?Q<>R<>R<>R<><0E><14> <0C><18><18><18> <10><15><15>i<EFBFBD>%<25><16><1F><15>9<>9<>03<>03<>:<3A>9<>03<>d<10><15><15>)<29>F<EFBFBD>8<EFBFBD><15><<3C><<3C>/<2F>/<2F>=<3D><<3C>/<2F>6<10><15><15>:<3A>V<EFBFBD>H<EFBFBD><15>M<>M<>/<2F>/<2F>N<01>M<>/<2F>$<10><15><15>i<EFBFBD> <20> <20> /<2F> /<2F>!<21> <20> /<2F><10><15><15>(<28>)<29>)<29> /<2F> /<2F>*<2A>)<29> /<2F>D<10><15><15>)<29>F<EFBFBD>8<EFBFBD><15><<3C><<3C>C<01>C<01>=<3D><<3C>C<01>*<10><15><15>-<2D>.<2E>.<2E> /<2F> /<2F>/<2F>.<2E> /<2F><10><15><15>/<2F>&<26><18><15>B<>B<>&/<2F>&/<2F>C<01>B<>&/<2F>P<10><15><15>*<2A>V<EFBFBD>H<EFBFBD><15>=<3D>=<3D> /<2F> /<2F>><3E>=<3D> /<2F>D<10><15><15>-<2D><06>x<EFBFBD><15>@<40>@<40>/<2F>/<2F>A<01>@<40>/<2F>6<10><15><15>*<2A>+<2B>+<2B> /<2F> /<2F>,<2C>+<2B> /<2F><10><15><15>&<26>'<27>'<27>1<>1<>(<28>'<27>1<><10><15><15>,<2C>-<2D>-<2D>"/<2F>"/<2F>.<2E>-<2D>"/<2F>H<10><15><15>&<26><15><07><15>8<>8<>
/<2F>
/<2F>9<>8<>
/<2F><10><15><15>&<26><16><08><15>9<>9<>/<2F>/<2F>:<3A>9<>/<2F>6<10><15><15>o<EFBFBD><06>x<EFBFBD><15>8<>8<>/<2F>/<2F>9<>8<>/<2F>/<2F>/r