+
    \j$                         R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RItRtRt	Rt
RtRtRt. ROt. ROtRR ltR	 tR
 tR tR tR t]R8X  d
   ]! 4        R# R# )u  恢复拉取：客户 + 活动，按 start_time 日期分段（每段 <1000 行）避开 MCP OFFSET≤1000 上限。
2026-09-09 发现：MCP search_by_mql 的 LIMIT offset 上限为 1000，OFFSET 翻页无法拉 >1000 行的表。
修复：按 start_time 日期范围切片，每片 OFFSET < 1000，逐片拉取后按 work_item_id 全局去重。
铁律：写临时文件 → 校验条数 vs 首屏总数 → 完整才替换。
Nz'https://project.feishu.cn/mcp_server/v1z&m-abfb29e8-3104-434f-9944-8d0bb592f8cdu7   /Users/liuxinyuan/Desktop/Hermes输出-工作类/数据6593cd71471290e3cc6be6e665ae1e403c87b152f3365ca665ae1e5d44338dbe7c39a29ac                    R RR^RRRRV RV//p\        ^4       EFU  p \        P                  P                  \        \
        P                  ! V4      P                  R4      R	\        R
R/R7      p\        P                  P                  WRR7      ;_uu_ 4       pVP                  4       P                  R4      pRRR4       XP!                  R4      '       d*   TP#                  R4      ^ ,          P%                  RR^4      p \
        P&                  ! T4      p
RT
9   dV   \        R\
        P                  ! T
R,          RR7      R,           24       T^8X  d    R# \        P                  ! ^4       EKY  RT
9  g   R T
R,          9  dO   \        R!\
        P                  ! T
RR7      R,           24       T^8X  d    R# \        P                  ! ^4       EK  T
R,          R ,           Fe  pTP)                  R"R4      pT'       d   R#T9   d   K&  \*        P,                  ! R$RTP/                  4       4      p \
        P&                  ! T4      u u # 	  T^8X  d    R# \        P                  ! ^4       EKX  	  R#   + '       g   i     EL; i  \         dk   pT^8X  d   \        RT 24        Rp? R# ^^T,          ,          p	\        RT^,            RT RT	 R24       \        P                  ! T	4        Rp?EK  Rp?ii ; i  \         d<    T^8X  d   \        RTR,           24         R# \        P                  ! ^4        EK-  i ; i  \         d    \        R%TR&,           24         EK!  i ; i)'jsonrpcz2.0idmethodz
tools/callparamsname	argumentsutf-8zX-Mcp-TokenzContent-Typezapplication/json)dataheaders)timeoutNu       ❌ HTTP 5次失败: u       ⚠️ 请求异常(z/5): u   ，u   s 后重试zdata:
zdata:  u       ❌ JSON解析失败: :N   Nerroru       ❌ MCP error: F)ensure_ascii:N   Nresultcontentu       ❌ 意外响应: textlog_idz\nlog_id:.*$u!       ⚠️ content text 非JSON: :Nx   N)rangeurllibrequestRequestMCP_URLjsondumpsencode	MCP_TOKENurlopenreaddecode	Exceptionprinttimesleep
startswithsplitreplaceloadsgetresubstrip)r   argsr   payloadattemptreqrrawewdctcleaneds   &&&           O   /Users/liuxinyuan/Desktop/Hermes输出-工作类/数据/_recover_pull_offset.pymcp_callr@   $   s   %q(L&&+t<>G8	..((djj188A&	>CUV ) XC '''==ffhoog. > >>'""))D/!$,,Xr1=C	

3A a<'

1W:E(RSW(X'YZ[!|JJrN1	8 <*4::ae+LT+R*STU!|JJrN8Y''Afb!AAff_b!'')<Gzz'** ( a<

2c d [ >== 	!|1!56Q'\"A,WQYKuQCs1#[QRJJqM	  	!|23t9+>?JJqM	2  9!D'CDsg   A9J
 I68J
L3M6JJ
J

K?K:1AK::K?'M-MM M10M1c                    . pV '       g   V# V P                  R / 4      P                  4        EF  w  r#\        V\        4      '       g   K  V EF  p/ pVP                  R4      ;'       g    .  EFX  pVR,          pVP                  R4      p\        V\        4      '       dY   \	        V4      ^ 8  dI   \        V^ ,          \
        4      '       d#   RV^ ,          9   d   V^ ,          R,          WW&   K  V^ ,          pVf   RWW&   K  \        V\
        4      '       d   RV9   d   VR,          WW&   K  RV9   d   VR,          WW&   K  RV9   d   VR,          WW&   K  R	V9   d   VR	,          WW&   K  R
V9   d   VR
,          WW&   EK  RV9   d   VR,          WW&   EK&  RV9   d   VR,          WW&   EK;  \        V4      WW&   EKK  \        V4      WW&   EK[  	  VP                  V4       EK  	  EK  	  V# )r   moql_field_listkeyvaluelabelr   string_valuedouble_value
long_valuekey_label_value
user_valueuser_value_listkey_label_value_list)r/   items
isinstancelistlendictstrappend)	r   rM   gidgitemsitemfieldsfkvs	   &        r?   parse_itemsr[   \   s   Ezz&"-335&$''DFhh0177R7eHEE'Na&&3q6A:!!A$--'QqT/$%aDM	 !A9 "FI4((%*$%n$5	'1,$%n$5	%*$%lO	*a/$%&7$8	%*$%lO	*a/$%&7$8	/14$%&<$=	$'F	 #AFI9 8: LL ?  6F L    c                    . pV'       d   VP                  RV R24       V'       d   VP                  RV R24       RV RV  R2pV'       d    VRRP                  V4      ,           ,          pVR	,          p. p\        4       p^ p^ p	\        ^^(4       F  p
V R
V 2p\	        RR\
        RVRR/4      pVf0   \        RT;'       g    R RT;'       g    R RV
 RV R2	4        V# \        V4      p\        V4      ^ 8X  d   V	^,          p	V	^8  d    V# MW^ p	V FO  pVP                  RR4      pV'       d	   W9   d   K%  V'       d   VP                  V4       VP                  V4       KQ  	  V^2,          p\        P                  ! R4       K  	  V# )uS   按日期范围拉取一段（<1000 行，OFFSET 安全），返回 items 列表。zstart_time >= ''zstart_time < 'zSELECT u    FROM `销售管理`.``z WHERE z AND z ORDER BY start_time DESCz LIMIT 50 OFFSET search_by_mqlproject_keymql
session_idr   u       ❌ 段 -~u    第u   页(OFFSET=u   ) 失败work_item_idg333333?)rS   joinsetr   r@   SALES_PKr(   r[   rP   r/   addr)   r*   )type_keycolsstartendwhererb   rM   seenoffsetempty_streakpagepmqlr   batchitwids   &&&&            r?   
pull_chunkrx      s   EugQ/0
~cU!,-D6/z
;Cy7<<...&&CE5DFLa'x0/((E4rRT>L#a

s|4v[QWPXX`ab" L! F#u:?ALq  L ! Lff^R03;HHSMR   	"

3- . Lr\   c                     R p . p\        4       p\         F  w  r4\        \        WV4      p\	        RT;'       g    R RT;'       g    R R\        V4       R24       V FO  pVP                  RR4      pV'       d	   Wr9   d   K%  V'       d   VP                  V4       VP                  V4       KQ  	  K  	  VP                  R	 R
7       V# )zXname, field_c3224b, field_5ed7ab, field_c8e80d, field_17186c, field_6415cf, work_item_id     段 -infre   +inf:     条rf   r   c                 &    V P                  R R4      # )r
   r   r/   xs   &r?   <lambda>run_customers.<locals>.<lambda>   s    vr!2r\   )rC   )
rh   CUSTOMER_CHUNKSrx   TYPE_CUSTOMERr(   rP   r/   rj   rS   sortrl   	all_itemsrp   rm   rn   rM   rv   rw   s           r?   run_customersr      s    7DI5D%
=$s;u'qr#e*TJKB&&,Cs{R   & NN2N3r\   c                     R p . p\        4       p\         F  w  r4\        \        WV4      p\	        RT;'       g    R RT;'       g    R R\        V4       R24       V FO  pVP                  RR4      pV'       d	   Wr9   d   K%  V'       d   VP                  V4       VP                  V4       KQ  	  K  	  VP                  R	 R
R7       V# )zAname, start_time, field_b99055, field_5f20fc, owner, work_item_idrz   r{   re   r|   r}   r~   rf   r   c                 &    V P                  R R4      # )
start_timer   r   r   s   &r?   r    run_activities.<locals>.<lambda>   s    |R!8r\   T)rC   reverse)
rh   ACTIVITY_CHUNKSrx   TYPE_ACTIVITYr(   rP   r/   rj   rS   r   r   s           r?   run_activitiesr      s    NDI5D%
=$s;u'qr#e*TJKB&&,Cs{R   & NN8$NGr\   c            
      R   \        \        P                  4      ^8  d   \        P                  ^,          MRp \        P                  ! R4      pV R9   Ed   \        R4       \        R4       \        R4       \        4       p\        P                  P                  \        R4      p\        VRRR7      ;_uu_ 4       p\        P                  ! R	VRV/VR
^R7       RRR4       \        V4      R8  d   \        R\        V4       R24       MQ\        P                  ! V\        P                  P                  \        R4      4       \        R\        V4       R24       V R 9   Ed   \        R4       \        R4       \        R4       \        4       p\        P                  P                  \        R4      p\        VRRR7      ;_uu_ 4       p\        P                  ! RVR\        V4      RV/VR
^R7       RRR4       \        V4      R8  d   \        R\        V4       R24       MQ\        P                  ! V\        P                  P                  \        R4      4       \        R\        V4       R24       \        R4       R#   + '       g   i     EL; i  + '       g   i     L; i)!   bothz%Y-%m-%d %H:%M:%S	customersu.   恢复拉取 客户（按 start_time 分段）zmcp_customers.json.tmpr:   r   )encoding
updated_atF)r   indentNi@  u     🔴 客户仅 u7    条（应 ~1727），不替换，保留临时文件！zmcp_customers.jsonu     ✅ 客户写入: r~   u.   恢复拉取 活动（按 start_time 分段）zdaily_activities_mcp.json.tmpupdatedtotalrM   i  u     🔴 活动仅 u7    条（应 ~4493），不替换，保留临时文件！zdaily_activities_mcp.jsonu     ✅ 活动写入: u   
恢复拉取结束。)r   r   z<============================================================)
activitiesr   )rP   sysargvr)   strftimer(   r   ospathrg   DATA_DIRopenr    dumpr-   r   )whichnowrM   tmprX   s        r?   mainr      s   sxx=1,CHHQK&E
--+
,C%%h>?hggll8%=>#sW--II|S+u=qu]^_ .u:%c%j\1hijJJsBGGLL3GHI(UD9:&&h>?h ggll8%DE#sW--IIy#wE
GUKeA7 . u:%c%j\1hijJJsBGGLL3NOP(UD9:	
#$/ .-- .-s   ;J	*JJ	J&	__main__))N
2024-06-01)r   
2024-07-01)r   
2025-01-01)r   
2026-01-01)r   N))z
2026-07-01
2026-07-11)r   
2026-07-21)r   
2026-08-01)r   
2026-08-11)r   
2026-08-21)r   
2026-09-01)r   N)r   )__doc__r    r   r0   r   r)   urllib.requestr   r   r#   r   ri   r   r   r   r   r@   r[   rx   r   r   r   __name__ r\   r?   <module>r      sw   
 / . .
34	D%**5p'T'T&$!%H zF r\   