
    jG"                        d dl m Z  d dlZd dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ 	 d dlZdZn # e$ r dZ	 d dlZn# e$ r dZY nw xY wY nw xY wdadededz  fdZdefd	Zd!d
Zd!dZdededededef
dZdada dededededef
dZ!d Z"d Z#d Z$d Z%dededee         dede&ee'f         f
dZ(dededee         dedeeeef                  f
dZ)dede'fdZ*de'ddfd Z+dS )"    )datetimeN)ListTuple)INSTANT_CLIENT_DIRORACLE_HOSTORACLE_PASSWORDORACLE_PORTORACLE_SERVICEORACLE_USERSMS_ORACLE_HOSTSMS_ORACLE_PASSWORDSMS_ORACLE_PORTSMS_ORACLE_SERVICESMS_ORACLE_USERloggerFnamereturnc                     t          j        |           }|d S |                                                                }|sd S |dv S )N>   1onyestrue)osgetenvstriplower)r   rawvalues      2/home/longshao/multi-rider-rag/shared/db/oracle.py_parse_bool_envr    $   sK    
)D//C
{tIIKKE t...    c                     t          d          } | | S t          j                            t                    sdS t          j        dk    rBt          j                            t          j                            t          d                    S 	 t          d t          j	        t                    D                       S # t          $ r Y dS w xY w)NORACLE_USE_THICK_MODEFntzoci.dllc              3   @   K   | ]}|                     d           V  dS )zlibclntsh.soN)
startswith).0r   s     r   	<genexpr>z.oracle_thick_mode_requested.<locals>.<genexpr>7   s.      ^^t4??>22^^^^^^r!   )r    r   pathisdirr   r   isfilejoinanylistdirOSError)explicits    r   oracle_thick_mode_requestedr1   .   s    677H7==+,, u	w$w~~bgll+=yIIJJJ^^rzJ\?]?]^^^^^^   uus   /B= =
C
Cc                  x   t           j        dk    rd S t           j                            t                    st          j        dt                     d S 	 t          j        t                     t          j        dt                     d S # t          $ r&} t          j        dt          |            Y d } ~ d S d } ~ ww xY w)Nr$   z-Oracle Instant Client directory not found: %szAdded Oracle DLL directory: %sz)Failed to add Oracle DLL directory %s: %s)
r   r   r)   r*   r   r   warningadd_dll_directoryinfo	Exceptionexcs    r    _prepare_windows_oracle_dll_pathr9   <   s    	w$7==+,, FHZ[[[]
/00046HIIIII ] ] ]BDVX[\\\\\\\\\]s   3B	 	
B9B44B9c                  ^   t           rd S t                      sda t          j        d           d S t	                       t
          {t          t
          d          rf	 t          j        t                     da t          j        dt                     d S # t          $ r } t          j
        d|            Y d } ~ d S d } ~ ww xY wt          f	 t          j        t                     da t          j        dt                     d S # t          $ r } t          j
        d|            Y d } ~ d S d } ~ ww xY wd S )	NTzKOracle thick mode disabled or client libraries unavailable; using thin modeinit_oracle_client)lib_dirz)Oracle client initialized with lib_dir=%szinit_oracle_client failed: %sz,cx_Oracle client initialized with lib_dir=%szcx_Oracle init failed: %s)_ORACLE_CLIENT_READYr1   r   r5   r9   oracledbhasattrr;   r   r6   r3   	cx_oracler7   s    r   init_oracle_client_if_neededrA   I   sj    &(( #abbb$&&&2F G G	A'0BCCCC#' KCEWXXXXX 	A 	A 	AN:C@@@@@@@@@	A			=(1CDDDD#' KFHZ[[[[[ 	= 	= 	=N6<<<<<<<<<	= 
	s0   6B 
B=B88B=6D   
D*
D%%D*hostportserviceuserpasswordc                     |  d| d| }t           t          j        |||          S t          t          j        |||          S t          d          )N:/)rE   rF   dsnzOracle driver not available)r>   connectr@   RuntimeErrorrB   rC   rD   rE   rF   rJ   s         r   _connect_oraclerN   e   sh    
$
$D
$
$7
$
$CTH#FFFF dX3GGGG
4
5
55r!   c                     |  d| d| }t           /t          t           d          rt          j        |||ddd          S t          /t          t          d	          rt          j        |||ddd          S dS )
zmCreate an oracledb connection pool (falls back to single-connect if
    the driver does not support pooling).rH   rI   Ncreate_pool         )rE   rF   rJ   minmax	incrementSessionPool)r>   r?   rP   r@   rW   rM   s         r   _create_poolrX   v   s     
$
$D
$
$7
$
$C- @ @#cqA
 
 
 	

 M!B!B$cqA
 
 
 	
 4r!   c                  v    t           ,t          t          t          t          t
          t                    a t           S N)_oracle_poolrX   r   r	   r
   r   r    r!   r   _get_oracle_poolr]      s*    #nk?
 
 r!   c                  v    t           ,t          t          t          t          t
          t                    a t           S rZ   )_sms_oracle_poolrX   r   r   r   r   r   r\   r!   r   _get_sms_oracle_poolr`      s.    '_.@0
 
 r!   c                      t                      } | |                                 S t          t          t          t
          t          t                    S rZ   )r]   acquirerN   r   r	   r
   r   r   pools    r   get_oracle_connectionre      s8    D||~~;^[Rabbbr!   c                      t                      } | |                                 S t          t          t          t
          t          t                    S rZ   )r`   rb   rN   r   r   r   r   r   rc   s    r   get_sms_oracle_connectionrg      sB    !!D||~~  r!   kssjjssjhours	model_keyc                     d}| |d}|rUg }t          |          D ]'\  }}d| }	|                    d|	            |||	<   (|dd                    |           dz  }||fS )NzYSELECT PIC_ABBREVIATE, TIME FROM yfgadb.T_SPY_ELCZP_XX WHERE TIME BETWEEN :kssj AND :jssj)rh   ri   hrH   z AND HOUR IN (,))	enumerateappendr,   )
rh   ri   rj   rk   sqlbindsplaceholdersindexhourkeys
             r   build_query_and_bindsrx      s    	-  4((E :$U++ 	 	KE4e++C	C		***E#JJ9 6 69999:r!   c                    t          | |||          \  }}t                       t                      5 }|                                5 }	 |                    d           n# t
          $ r Y nw xY w|                    ||           |                                }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   g }	|D ]}
|
r|
d         s|
d         }t          |
          dk    r|
d         nd }t          |t                    r|
                    d          }n|rt          |          nd}|	                    ||f           |	S )Nz;ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'r   rS   z%Y-%m-%d %H:%M:%S )rx   rA   re   cursorexecuter6   fetchalllen
isinstancer   strftimestrrq   )rh   ri   rj   rk   rr   rs   connr{   rowsoutputrowurlr   time_strs                 r   fetch_image_urlsr      s    'tT5)DDJC """		 	  %D[[]] 	%f\]]]]   NN3&&&??$$D	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%% % % % % % % % % % % % % % % %'F 	' 	' 	#a& 	!fc((Q,,ADeX&& 	3~~&9::HH%*2s5zzzHsHo&&&&MsY   B<B%	AB%
A,)B%+A,,-B%B<%B)	)B<,B)	-B<<C C 	id_numberc                    t          | pd                                          }|si S d}t                       t                      5 }|                                5 }|                    |d|i           |                                }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |si S g d}d t          ||          D             S )Nrz   a  
        SELECT
            xm,
            lxdh,
            ds,
            dsmc,
            ssxq,
            ssxqmc,
            pcs,
            pcsmc,
            dz
        FROM ywdata.t_ap_czrk_jbxx
        WHERE gmsfhm = :id_number
          AND ROWNUM = 1
    r   )	xmlxdhdsdsmcssxqssxqmcpcspcsmcdzc                 `    i | ]+\  }}||!t          |                                          nd,S )Nrz   )r   r   )r'   rw   r   s      r   
<dictcomp>z1fetch_dispatch_person_context.<locals>.<dictcomp>  sJ       C 	E$5c%jj   2  r!   )r   r   rA   re   r{   r|   fetchonezip)r   safe_id_numberrr   r   r{   r   keyss          r   fetch_dispatch_person_contextr      sp   b))//11N 	C !"""		 	  $D[[]] 	$fNN3n =>>>//##C	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
  	
 
 
D dC..   s6   B+-BB+B	B+B	B++B/2B/payloadc                    d}t          |                     dd          pd                                          t          |                     dd          pd                                          t          |                     dd          pd                                          t          |                     dd          pd                                          t          |                     dd          pd                                          t          |                     d	d          pd                                          t          |                     d
d          pd                                          d}t                       t	                      5 }|                                5 }|                    ||           d d d            n# 1 swxY w Y   |                                 d d d            d S # 1 swxY w Y   d S )Na	  
        INSERT INTO yfgadb.dfsdl (
            id, mobile, content, deadtime, status, eid, userid, password, userport
        ) VALUES (
            yfgadb.seq_sendsms.nextval, :mobile, :content, SYSDATE, :status, :eid, :userid, :password, :userport
        )
    mobilerz   contentstatus0eiduseridrF   userport)r   r   r   r   r   rF   r   )r   getr   rA   rg   r{   r|   commit)r   rr   rs   r   r{   s        r   insert_sms_queue_recordr     s9   C gkk(B//5266<<>>w{{9b117R88>>@@gkk(C007C88>>@@7;;ub))/R006688gkk(B//5266<<>>J339r::@@BBJ339r::@@BB E !"""	"	$	$ [[]] 	'fNN3&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'                 s6   H 1GH G	H G	H  HH)r   N),r   r   typingr   r   shared.config.configr   r   r   r	   r
   r   r   r   r   r   r   r   r>   r@   r6   	cx_Oracler=   r   boolr    r1   r9   rA   intrN   r[   r_   rX   r]   r`   re   rg   tupledictrx   r   r   r   r\   r!   r   <module>r      sW         				                                    	OOO II    H%%%%%   				  /# /$+ / / / /T    
] 
] 
] 
]= = = =86# 6S 63 6c 6S 6 6 6 6  s #  3 #    $    c c c
 
 


 9 	
 39   .

 9 	
 
%S/   >+S +T + + + +\T d      s2   7 AAAAAAAA