B
    DDb$:                 @   s
  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ dd Z	dd Z
d	d
 Zdd Zdd Zdd Zdd Zdd Zi fddZdd Zd7ddZdd Zdd Zd d! Zd"d# Zd8d$d%Zd&d' Zd(d) Zd9d+d,Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Z dS ):    )settingsN)join)UUIDc             K   sz   d}d}xR|  D ]F\}}||d 7 }t|s6|dkrH|t|d 7 }q|d| d 7 }qW d| |dd |dd f S )	z   insert SQL depracated
         ,null'z',zINSERT INTO %s (%s) VALUES (%s)N)itemsisNumberstr)tablekwargsksvskv r   ,G:\easytimepro\master/mysite/core\zktools.pygetSQL_insert   s    r   c             K   s   d}d}x|  D ]\}}|drl||dd d 7 }t|sH|dkrZ|t|d 7 }q|d| d	 7 }qt|s||dkr||d t| d
 7 }q||d | d 7 }qW |dkrd| |dd f S d| |dd |dd f S dS )z%  update SQL 
    depracated
        r   where   N=r   z and r   z' and r   z='z',zUPDATE %s SET %sr	   zUPDATE %s SET %s WHERE %s)r
   
startswithr   r   )r   r   kvs	kvs_wherer   r   r   r   r   getSQL_update   s    
r   c             C   s   d}d}x|  D ]\}}|drl||dd d 7 }t|sH|dkrZ|t|d 7 }q|d| d	 7 }qt|s||dkr||d t| d
 7 }q||d | d 7 }qW |dkrd| |dd f S d| |dd |dd f S dS )z update SQL 
        r   r   r   Nr   r   z and r   z' and r   z='z',zUPDATE %s SET %sr	   zUPDATE %s SET %s WHERE %sr   )r
   r   r   r   )r   dictr   r   r   r   r   r   r   getSQL_update_ex+   s    
r   c             C   s   yt |  dS    dS dS )u-    判断是否数字 (int float long)
        TFN)abs)Znumr   r   r   r   E   s
    r   c             C   s"   y| d|  d S    | S dS )u@    获取 C语言系统 传输过来的数据的字符串
        N )index)sr   r   r   getStr_cN   s    r$   c             C   s:   t | d }x |dkr,| | dkr,|d8 }qW | d| S )uR    获取 C语言系统 传输过来的指纹模版（后面填充的" "）
           r   r!   N)len)r#   ir   r   r   getFptemp_cV   s    r(   c             C   s.   y| d|  d dS    | dS dS )uX    获取 C语言系统 传输过来的数据的字符串，并按 gb18030 解码
        Nr!   gb18030)r"   decode)r#   r   r   r   getStr_c_decode^   s    r+   c             C   s  d}d}xV|  D ]H\}}||d 7 }t|tr:|j}|dkrFd}t|sV|dkrh|t|d 7 }qt|ttj krdt	j
kr|d|d d 7 }n|d|d d	 7 }qt|tjkrdt	j
kr|d
|d d	 7 }n|d|d d	 7 }qt|tjkrNdt	j
kr6|d|d d	 7 }n|d|d d	 7 }q|d| d	 7 }qW d| |dd |dd f S )z create insert SQL r   r   Nr   oraclez%to_date('%s','YYYY-MM-DD HH24:MI:SS')z%Y-%m-%d %H:%M:%Sr   z',zTIMESTAMP'1900-12-30 z%H:%M:%Sz%Y-%m-%dzINSERT INTO %s (%s) VALUES (%s)r	   )r
   
isinstancer   hexr   r   typedatetimenowr   DATABASE_ENGINEstrftimetimedate)r   r   r   r   r   r   r   r   r   getSQL_insert_exo   s0    


r6   c       	   	   K   s   d}d}g }|s|}x|  D ]\}}| }t|tr>|j}dtjkrtt|ttj	krttddd|j
|j|j}||d 7 }|dkrd}|d	7 }|| qW d
|  |dd |dd f }||fS )z3 create insert SQL 
    return sql,params
    
    r   r,   il        r   r   Nz%s,zINSERT INTO %s(%s) VALUES(%s)r	   )r
   lowerr-   r   r.   r   r2   r/   r0   r4   hourminutesecondappend)	r   ZDictr   r   r   r   r   r   ret_sqlr   r   r   getSQL_insert_new   s&     

 "r?   c       	   	   C   s  g }d}g }d|    }x| D ]\}}|  }|drl|dd   }||d 7 }|d7 }|| q"|}||d d d	 7 }d
tjkrtt|dkrtddd|j	|j
|j}|| q"W |r||7 }|dkr|dd t|fS |dd d |dd  t|fS dS )z/ create update SQL 	
    return sql,params
    r   zUPDATE %s SET r   r   Nr   z%s and z%sr   r,   z<type 'datetime.time'>il  r7   r8   r	   z WHERE r   )r9   r
   r   r=   r   r2   r   r/   r0   r:   r;   r<   tuple)	r   r   r   Zk_whereZkv_wherer>   r   r   Ztttr   r   r   getSQL_update_new   s,    

rA   Tc       
         s   g }t |dt j}xt| D ]r\ }}| fdd|D  x|D ]}|t | qHW |r x,|D ]$}t t |d }	|	|	d qjW q W g }|
  d S )Nwc                s$   g | ]}t t |g kr|qS r   )oslistdirr   ).0dir)rootr   r   
<listcomp>   s    zzipfolder.<locals>.<listcomp>/r   )zipfileZipFileZIP_DEFLATEDrC   walkextendwriter   ZipInfowritestrclose)
Z
foldernamefilenameZincludeEmptyDIrZ
empty_dirszipdirsfilesnamerF   Zzifr   )rG   r   	zipfolder   s    

rX   c             C   s  t | t tj kr| }n"t| dkr
t| dkr| }tt|dd t|dd t|dd t|dd t|dd t|dd }nnt| dkr@| }tt|dd t|dd	 t|dd t|d
d t|dd t|dd }n6| }tt|dd t|dd	 t|dd }|jd d d d |jd d  |j d d |jd |j	 d  |j
 }|S )N
      r            r7   r                     il  d      r%   iQ <   )r/   r0   r1   r&   intyearmonthdayr:   r;   r<   )currnowr1   r   ttr   r   r   OldEncodeTime   s    ^^2Lrm   c       	   
   C   s   | sdS yt | } W n. tk
rB } ztd| | dS d }~X Y nX | d }| d }|d }|d }|d }|d }|d d }|d }|d d }|d }|d d	 }d
||||||f S )Nr   zOldDecodeTimme=rf      re   r%   r7   rd   il  z%04d-%02d-%02d %02d:%02d:%02d)rg   	Exceptionprint)	Zstampetm_secttm_mintm_hourZtm_daytm_montm_yearr   r   r   OldDecodeTime  s&     rx   c             C   s  t | t tj kr| }n"t| dkr
t| dkr| }tt|dd t|dd t|dd t|dd t|dd t|dd }nnt| dkr@| }tt|dd t|dd	 t|dd t|d
d t|dd t|dd }n6| }tt|dd t|dd	 t|dd }|jd d |jd d  |j d d |jd |j	 d  |j
 }|S )NrY   rZ   r   r[   r\   r]   r7   r   r^   r_   r`   ra   rb   rc   re   r%   iQ rf   )r/   r0   r1   r&   rg   rh   ri   rj   r:   r;   r<   )rk   r1   r   rl   r   r   r   UnixTime!  s    ^^2Dry   c             C   s,   t | j|j d | j|j d  }|d S )u   暂不考虑day, 只根据month和year计算相差月份
    Parameters
    ----------
    x, y: 两个datetime.datetime类型的变量

    Return
    ------
    differ: x, y相差的月份
    r7   r%   )r    rh   ri   )xyZmonth_differr   r   r   zk_month_differ9  s    
$r|   c             C   s   g }| s|S dt t| ddd   }t|dkr@|dd  }n|dd  }g }xJttt|d D ]2}t||d |d d  d d d }|| }qfW x*tt|D ]}|| d	kr|| qW |S )
NZ0000000ra          iir]   r	   1)binrg   r&   rangelistr=   )valuedeviceresultZbin_strZllistr'   slistr   r   r   zk_get_VerifyStylesG  s     & r   c             C   s2   |  d}t||d kr*|| dkr*dS dS d S )N:r%   r   TF)splitr&   )Zbdtsr"   r   r   r   r   getTypeSupportW  s    
r   c             C   s  dddg}d}t | dd}t | dddksJt | dddkrNt | d	ddkrNd
}|sb| jrb|d
 |rp|d |s| jr|d
kr|ddddg }|s| jr|d
kr|ddg }|s| jr|dddg }|r|d | jo| jd
k}|r|ddg }|s|r| jr|ddg }|r,|r,|d |sP|rP| jrP|rP|d |rb|ddg }|rz|rz|ddg }t| d r| jrt| jdr|d! |S )"Nr   r}      FvFunOnRFCardOn0r   ZMIFAREZMIFAREIDr%   r[   r   rY   r7   rZ   r\   r^   r]   	   r`   r_      rb   ra         rc            rn   MultiBioDataSupport   )getattrZisFptempr=   isFacehasattrr   r   )r   r   r   r   r   r   r   r   zk_get_101_Choices_  sD    
0







r   r   c       
      C   sz   ddl }d}|| |ddd}|j||d}| }|rn|d }	|	dkrTt|d	  qvtd
|d |d f  ntd dS )z
    send sms
    r   Nzhttp://v.juhe.cn/sms/sendZ fe1255f5992d9bcca0c25c139e45ec5ejson)mobileZtpl_idZ	tpl_valuekeyZdtype)data
error_coder   z%s:%sreasonzrequest api error)requestsZpostr   rp   )
ZtplIDZtplValuer   Zusernamer   ZurlZparamsZresponseresr   r   r   r   SendSMS  s    r   c             C   sf   i }| rb|  dd dd} | |}x:|D ]2}|r,|d}|t|d d d ||d < q,W |S )u>   将以	或指定的分隔符号分隔的行变成字典 废弃r   
r   r   r%   N)replacer   r&   )ZrawDataZsplitfmtdliners   Zllr   r   r   lineToDict_ex  s    


$r   c          	   C   s@   t | } tdtt| d d dt| dd  f d}|S )Nz%s%sz{:04x}ra   )r   rg   r.   format)cardcr   r   r   zk_card8To10Num  s    4r   c             C   sP   t t| }|dd }|dd }ddt|ddtd| df }|S )u9   用于将十进制10位卡号转换成8位区位码卡号r   Nz%s%sz{:0>3}ra   z{:0>5}0x)r.   rg   r   )r   ZhcZc4Zc2r   r   r   r   zk_card10To8Num  s
    (r   c             C   s`   dd ttt| dd   } d| dd | dd | dd | dd f }t|d	}|S )
Nz%sz{:0>8}r}   z
0x%s%s%s%sr\   r]   r[   r   ra   )r   r   r.   rg   )r   hlr   r   r   zk_cardHTOL  s    "0
r   c             C   s8   |sdS t | dr0| jdkr0ttd| d}n|}|S )u0   根据设备类型转换卡号到十进制卡号r   MulCardUserr%   r   ra   )r   r   r   rg   )r   Zcardnor   r   r   r   zk_get_cardno  s     r   )T)N)r   )!Zdjango.confr   rC   rJ   r0   Zos.pathr   Zuuidr   r   r   r   r   r$   r(   r+   r6   r?   rA   rX   rm   rx   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s6   	)(

'
