hxp
2025-06-04 f4a514d5ac952110da846636ecbb9de951eaf3d2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
I™ec@sáddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    dZ
dZ d„Z d„Z d„Zdd„Zd„Zd    d
„Zd „Zd d „Zdd„Zd„Zd„Zd„Zdd„Zd„Zdd„Ziid„Zed„Zd„Zid„Z d„Z!d„Z"d„Z#d„Z$d„Z%d „Z&d!ie'd"„Z(d#„Z)dd$„Z*d%„Z+dd&„Z,d'„Z-d(„Z.dS()iÿÿÿÿNsutf-8t
_FinalDatacCs[t|tƒr|jtƒSt|tƒs:t|tƒr>|St|tƒsWt|ƒS|S(N(t
isinstancetunicodetencodetEncodingtinttlongtstr(ts((s#E:\www\Server\eventdata\CommFunc.pyRs 
cCs|jtƒjdƒS(Ntgbk(tdecodeRR(R((s#E:\www\Server\eventdata\CommFunc.pyttoGBKscCst|tƒjtƒS(N(RRR(tpyChStr((s#E:\www\Server\eventdata\CommFunc.pyt
encodePych!scCs'ttƒtj|r|ntƒdS(N(treloadtsystsetdefaultencodingR(tencoding((s#E:\www\Server\eventdata\CommFunc.pyR%s
cCs›i}xŽtjdD]}|jdƒ}|s5qnt|ƒdkrQ|dnd}|jdƒr…|jdƒr…|dd!}n|||d<qW|S(Nit=tt[t]iÿÿÿÿi(Rtargvtsplittlent
startswithtendswith(targvDicttargvInfotkvListtvalue((s#E:\www\Server\eventdata\CommFunc.pyt
parse_args*s"icCs#yt|ƒ}|SWn|SXdS(N(R(t
inputValuetdefValuetresult((s#E:\www\Server\eventdata\CommFunc.pyttoInt:s
 cCs:|s
tS|r ||kr tS|r6||kr6tStS(N(tFalsetTrue(t    startDatetendDatet    checkDate((s#E:\www\Server\eventdata\CommFunc.pyR(Ass%Y-%m-%dcCs&ytjj||ƒSWndSXdS(N(tdatetimetstrptime(ttimeStrt    strFormat((s#E:\www\Server\eventdata\CommFunc.pyt strToDatetimeOscCs2|dkrtjjƒ}n|tjd|ƒS(Ntdays(tNoneR)ttodayt    timedelta(tdiffDaystdateObj((s#E:\www\Server\eventdata\CommFunc.pytgetDiffDaysDateUs cCs tjjƒS(N(R)R0(((s#E:\www\Server\eventdata\CommFunc.pytgetCurrentTime[scCs)tjjƒ}d|j|j|jfS(Ns %d-%02d-%02d(R)R0tyeartmonthtday(tcurTime((s#E:\www\Server\eventdata\CommFunc.pytgetCurrentDateStr^scCs7|jdƒ}t|ƒdkr%dSt|ddƒS(Nt@iiiÿÿÿÿi(RRR(taccIDtinfoList((s#E:\www\Server\eventdata\CommFunc.pyt getServerIDbsidcCs8|t|ƒ}t|ƒjdƒr4t|ƒ}n|S(Ns.0(tfloatRRR(t    coinValuetratettoValue((s#E:\www\Server\eventdata\CommFunc.pytcoinToYfscCs\|jdd|ƒr0t|jdd|ƒƒS|jddƒrXt|jddƒƒSdS(NtExChangesExChangeScale_%st ExChangeScaleid(t
has_optionRtget(tcfgtspid((s#E:\www\Server\eventdata\CommFunc.pyt getCoinRatems
icCs7t||ƒ}t|ƒjdƒr3t|ƒ}n|S(Ns.0(troundRRR(Rtndigits((s#E:\www\Server\eventdata\CommFunc.pytroundIntuscCsˆx@|jƒD]2\}}||kr+q n|||kr tSq Wx>|jƒD]0\}}||krltS|||krPtSqPWtS(se æ£€æŸ¥æµå‘数据是否是需要满足匹配条件的数据
    @param matchSet: åŒ¹é…è®¾å®š {匹配key:[匹配值列表], ...}, å³åªä¼šåŒ¹é…å¯¹åº”key为指定值列表的内容
    @param filterSet: è¿‡æ»¤è®¾å®š, {过滤key:[过滤值列表], ...}, å³ä¼šè¿‡æ»¤æŽ‰å¯¹åº”key为某些值的内容 
    @return: æ˜¯å¦æ˜¯éœ€è¦ç»Ÿè®¡çš„æµå‘数据
    (titemsR$R%(tdrDicttmatchSett    filterSett    filterKeyt
filterListtmatchKeyt    matchList((s#E:\www\Server\eventdata\CommFunc.pytmatchDr|s  cCsÞg}|s|S|jddƒjdƒ}x¬|D]¤}|jƒrZ|jt|ƒƒq2d|kr2|jdƒ}|r¬|jtt|dƒt|dƒdƒƒqÖ|jt|dƒt|dƒgƒq2q2W|S(s- è§£æžåˆæœæœåС噍ID组合信息
            æ”¯æŒæ ¼å¼ï¼š
                    èŒƒå›´: æœåС噍ID~服务器ID
                    å•服:服务器ID
            
            ç»„合格式:按支持的格式使用英文逗号分割,如  1~10,20,30  ä»£è¡¨ 1至10服 åŠ 20服 åŠ 30服
    t Rt,t~ii(treplaceRtisdigittappendRtextendtrange(tmixServerIDInfot useAllIDListt serverIDListt    splitListtidInfot rangeIDList((s#E:\www\Server\eventdata\CommFunc.pytparseMixServerIDInfo’s       1.c
Cstt|ƒ}|stSxW|D]O}t|tƒr|}||krHtSx!|D]G}t|tƒrjqOn|\}}||ko|knrOtSqOWq|\}}    xÀ|D]¸}t|tƒrè||koÜ|    knrhtSq°|\}}||ko |    knsd||ko'|    knsd||koC|knsd||ko_|knr°tSq°WqWtS(s; æ£€æŸ¥æ˜¯å¦æ»¡è¶³éœ€è¦æŸ¥è¯¢çš„区服备份
    @param queryServerIDList: éœ€è¦æŸ¥è¯¢çš„目标服务器组合列表,由 parseMixServerIDInfo è§£æžå¾—到
    @param checkServerInfo: éœ€è¦æ£€æŸ¥æ˜¯å¦æ»¡è¶³æ¡ä»¶çš„区分ID信息串,可由 parseMixServerIDInfo è§£æžçš„æ ¼å¼
    @return: æ˜¯å¦æ»¡è¶³
    (ReR$RRR%(
tqueryServerIDListtcheckServerInfotcheckServerIDListtcheckServerIDInfotcheckIDtqueryServerIDInfot
queryIDMint
queryIDMaxt
checkIDMint
checkIDMax((s#E:\www\Server\eventdata\CommFunc.pytcheckIsBackupServerFolderªs0         88 cCsž|jddƒ}d|d<tjd|dtj|ƒƒ}tj|ddƒ}|jƒ}|smd    GHdS|jd
ƒsˆd |kr‘|GHdStj    |ƒS( Nt
ServerInfotEventDataBackupToolUrlitqueryCenterbakturltdatattimeoutixs>error: query backup center's eventdata no message return!<br/>serror:t    Traceback(
RGturllib2tRequestturllibt    urlencodeturlopentreadRtjsontloads(RHtpostDataRttreqtres_datatresMsg((s#E:\www\Server\eventdata\CommFunc.pytqueryBackupCenterDRÍs
! cCs d|GHdS(Ns    error: %s((terrorMsg((s#E:\www\Server\eventdata\CommFunc.pytqueryBackupCenterErrorßs    cCs!tj|dtdd„ƒGHdS(Nt ensure_asciitdefaultcSs|jS(N(t__dict__(tobj((s#E:\www\Server\eventdata\CommFunc.pyt<lambda>æs(R~tdumpsR$(tretData((s#E:\www\Server\eventdata\CommFunc.pytqueryBackupCenterOKãscCsOtjƒ}|jddƒjddƒjddƒjddƒ}dG|GHdS(    Nt<s&lt;t>s&gt;s s<br/>s
s error:<br/>:(t    tracebackt
format_excRZ(terror((s#E:\www\Server\eventdata\CommFunc.pytprintExceptionErrorés 6c Os+t|ƒ}t|ƒ}    d}
tjdt|ƒƒtjj|jddƒdƒ} x…tj    | ƒD]t\} } }| j
dƒ}|d}t|ƒ}|r¼|
s³||
kr¼|}
nt ||    |ƒsÔqfnd|kr
g|dD]}d||f^që}n|}xÇ|D]¿}tjj| |ƒ}tjj |ƒsJqn|}||||Ž\}}|stqn||j d    ƒ }t|d
ƒ}|jƒ}|jƒx'|D]}|||||||Žq³WqWqfW|jd ƒo| p|
p||
k}|rd |d <ntjdƒ|S(s  å¾ªçŽ¯éåŽ†æ¸¸æˆä¸»æœæµå‘ä¿¡æ¯ï¼Œå¹¶è§£æžæ»¡è¶³æ—¶é—´èŒƒå›´æµå‘
    @param cfg: InterfaceConfig.php é…ç½®å¯¹è±¡
    @param startDate: èµ·å§‹æ—¥æœŸ
    @param endDate: ç»“束日期
    @param argvDict: post到中心的参数
    @param checkDrFileNeedParseFunc: é¢å¤–检查流向文件是否需要解析的函数,传入参数(流向文件名 drFileName, *parseArgs, **kv),返回自定义信息提供  parseLineFunc ç”¨
    @param parseLineFunc: è§£æžæµå‘每行内容的逻辑函数,传入参数(流向名drName, æ‰€å±ždateStr, checkDrFileNeedParseFunc è¿”回的结果信息 checkNeedParseRetInfo, æµå‘行内容line, *parseArgs, **kv)
    @param *parseArgs: è‡ªå®šä¹‰å‚æ•°
    
    @return: needQueryCenterbak æ˜¯å¦éœ€è¦æŸ¥è¯¢ä¸­å¿ƒå¤‡ä»½æµå‘数据
    sloopMainServerDR %sRqt
ServerPathsEventServer\EventDatas\iÿÿÿÿt
drNameLists    %s_%s.txtt_trt queryAllDataiRstEndN(R-R/tloggingtinfoRtostpathtjoinRGtwalkRR(tisfiletrindextopent    readlinestclose(RHR&R'RtcheckDrFileNeedParseFunct parseLineFunct    parseArgstkvt startDatetimet endDatetimet minDatetimet
FolderPathtparentR—tfileListt
parentListtlastStrt fileDatetimetdrNamet loopFileListt
drFileNametfullPathtdateStrtisNeedtcheckNeedParseRetInfotftlinestlinetneedQueryCenterbak((s#E:\www\Server\eventdata\CommFunc.pytloopMainServerDRïsF  !
      *  
 %)  cCs|jdƒdkS(NRs(RGR/(R((s#E:\www\Server\eventdata\CommFunc.pytisQueryCenterbak.sc0 OsÎtjdt|ƒƒ|jddƒ}|s=tdƒdS|jddƒ}    tjj|jddƒ|    d    ƒ}
|jdd
ƒd k} tjd | |    |
fƒtjj    |
ƒsÉtd |
ƒdSt
|ƒ} t
|ƒ} t |jddƒƒ}|r|gn    t |ƒ}d|    }tjd||fƒx…tj |
ƒD]t}|tdƒ}t
|ƒ}t| d|ƒsqEn| s¶x1tj tjj|
|ƒƒD] }|jdƒr¿q¤n|j|ƒsÔq¤n|t|ƒ}t||ƒsùq¤ntjdtjj|
||ƒƒxtjtjj|
||ƒƒD]m\}}}|sYq>n|jdƒ}|d}t
|ƒ}t| | |ƒs–q>nd|krÌg|dD]}d||f^q­}n|}xÖ|D]Î}tjj||ƒ}tjj|ƒs qÙn|} g}!|rE||||Ž\}"}!|"sEqÙqEn||jdƒ }t|dƒ}#|#jƒ}$|#jƒx'|$D]}%||| |!|%||Žq„WqÙWq>Wq¤WqEddlm}&xðtj tjj|
|ƒƒD]Ð}|jdƒsqån|j|ƒsqån|t|ƒd!}t||ƒs=qån|&jtjj|
||ƒƒ}'|'jƒ}(g}d|kr¨i})x†|(ddd…D]q}*d|*kr®q–n|*jdƒ}+|+d} t
| ƒ}|sßq–nt| | |ƒs÷q–n|*},|,|)| <q–W|)jƒ}-|-jƒxŠ|-D]y} |)| },xf|dD]Z}tjj|,d|| fƒ}.|.|(krC|j tjj|,d|| fƒƒqCqCWq(Wn|(}x|D]ü}*d|*krÍqµn|*jdƒ}+t|+ƒdkrôqµn|+d} t
| ƒ}t| | |ƒs"qµn|+d}g}!|r_||||Ž\}"}!|"s_qµq_n||jdƒ }|'j|*ƒ}/x-|/jƒD]}%||| |!|%||ŽqŽWqµWqåWqEWtjd ƒt!S(!sҠ循环遍历中心服务器备份流向信息,并解析满足时间范围及区服条件的流向
    @note: Rar专用
    @param cfg: InterfaceConfig.php é…ç½®å¯¹è±¡
    @param argvDict: post到中心的参数
    @param checkDrFileNeedParseFunc: é¢å¤–检查流向文件是否需要解析的函数,传入参数(流向文件名 drFileName, *parseArgs, **kv),返回自定义信息提供  parseLineFunc ç”¨
    @param parseLineFunc: è§£æžæµå‘每行内容的逻辑函数,传入参数(流向名drName, æ‰€å±ždateStr, checkDrFileNeedParseFunc è¿”回的结果信息 checkNeedParseRetInfo, æµå‘行内容line, *parseArgs, **kv)
    @param *parseArgs: è§£æžå‡½æ•°æ‰€éœ€çš„参数
    
    @return: æ˜¯å¦æˆåŠŸ
    sloopCenterbakRarDR %sR_Rscan not found mixServerIDInfo!NtspIDRqtEventDataBackupPatht    EventDatatEventDataBackupUseRaris!isUseRar=%s,spID=%s,backupPath=%sscan not found backup path: %st OnlyServerIDis
Event_%s-ssserverIDList=%s,spfileFormat=%stEvent_s.rarsloop %ss\iÿÿÿÿR–s    %s_%s.txtR—R˜(trarfileiüÿÿÿt.iiþÿÿÿtloopEnd("R›RœRRGR†RRžRŸtgetinttexistsR-RRetlistdirRR(RRRpR RR¡R¢R£R¤R¥tunrarRÆtRarFiletnamelisttkeystsortR\R%(0RHR&R'RR¦R§R¨R©R_RÀt
backupPathtisUseRarRªR«RÄRat spfileFormattbackupDateFilet backupDateStrtbackupDatetimet backupServert
serverInfoR®R—R¯R°R±R²R³R´RµR¶R·R¹R¸RºR»R¼RÆt    drRarFiletdrFileNameListt loopDateInfotdrPathtrspListt
drDatePatht loopDateListt
loopDrPatht
rarOpenObj((s#E:\www\Server\eventdata\CommFunc.pytloopCenterbakRarDR2sê 
$  
 %#1
  *      
 ,%!   
 
 
 4  
 
    ) Rc CsÆd}|r-|tdƒdt|ƒ7}n|d7}|d7}|rX|d|7}nx:|D]2}|j|iƒ}|d|jd|ƒ7}q_W|d7}xt|ƒD]\}}    |d7}|rÝ|d|d    7}nxÊ|D]Â}d}
t|    tƒr|    j|dƒ}
n!t|    |ƒr5t|    |ƒ}
nt|
tƒrV|
j    t
ƒ}
nt|
t ƒstt |
ƒ}
n|j|iƒ}|d
|jd d ƒ|
f7}qäW|d7}q¬W|d 7}|S(sO ç¼–辑表格html
    @param dataList: æ•°æ®åˆ—表,元素支持 ç±»å®žä¾‹ æˆ– å­—å…¸
    @param tdList: è¡¨æ ¼å±žæ€§å­—段key顺序列表
    @param rowNumTitle: è¡Œç¼–号标题,如果空表示不显示行编号,非空则传入行编号标题名,行编号默认为 index + 1
    @param styleInfo: å±žæ€§å­—段样式信息
    Ru 数据条数s    : %s<br/>s$<table id="tt" class="border-table">s<tr>s<td align='center'>%s</td>ttitles</tr>is<td align='%s'>%s</td>taligntcenters</table>( R—RRGt    enumerateRtdictthasattrtgetattrRRRR( tdataListttdListt rowNumTitlet    styleInfot
printCountttablHtmlttdKeytstyletitdataObjttdValue((s#E:\www\Server\eventdata\CommFunc.pyt editTableHtmlÚs<!
 
 
 
 $
cCsd|jddƒ|jddƒ|f}tjj|ƒsrd|jddƒ|f}tjj|ƒsriSni}t|dƒ}|jƒ}xk|D]c}|s¬qšn|jdƒ}t|ƒdkrÓqšn|d    jd
dƒjd dƒ||d <qšW|S( Ns ../../Common/config/%s/%s/%s.txtRÀRtlangs../../Common/config/%s/%s.txtR˜s    iis s
i(    RGRRžRÊR£R¤RRRZ(tcfgNameRt
txtFileDirtkvDictRºR»R¼tspList((s#E:\www\Server\eventdata\CommFunc.pytgetCfgKeyNameDict    s +  .cCskd|jddƒ}tjj|ƒs,|Stjƒ}|j|ƒ|j||ƒs[|S|j||ƒS(sg获取sp运营项目对应专属配置
    @param section é…ç½®èŠ‚ç‚¹
    @param option é…ç½®é¡¹
    s!../../Common/config/%s/config.iniRÀR(RGRRžRÊt ConfigParserR}RF(Rtsectiontoptiont defaultValuet
iniFileDirRH((s#E:\www\Server\eventdata\CommFunc.pyt getSPConfigs  cCs‹|dkrt|ƒ}nl|dkrDd|dtdƒf}nC|dkrmd|dtdƒf}nd|d    td
ƒf}|S( Ni'i@Bs%.2f%sgˆÃ@u万iáõs%.1f%ss%.3f%sg„×—Au亿(RR—(tnumtfpStr((s#E:\www\Server\eventdata\CommFunc.pyt transformNum*s   cCsP|sd}nt|ƒtkr-|g}ntjdd|ƒ}|jƒdS(Ntzh_CNt eventDataPys../../language(ttypeRtgettextt translationtinstall(t    languagestgt((s#E:\www\Server\eventdata\CommFunc.pytgettextInstall5s     
cCstitdƒd6tdƒd6tdƒd6tdƒd6td    ƒd
6td ƒd 6}|j|d tdƒ|fƒS(Nu    äººæ°‘币iu美元iu    è¶Šå—盾iusoha币iu 金票点券iu代币is%s[%s]u未知订单类型(R—RG(t payOrderTypetPayOrderTypeName((s#E:\www\Server\eventdata\CommFunc.pytgetPayOrderTypeName?sTcCs$idd6dd6}|j|dƒS(Niiiid(RG(RtrateDict((s#E:\www\Server\eventdata\CommFunc.pytgetPayOrderCoinRateCs(/RR)R‘RxRzR~RR›RRüRt FinalDataSignRR R R/RRR#R(R-R4R5R:R>RCRJRMRVR$ReRpR„R†RŽR”R¾R¿RâR%RõRûRRR RR(((s#E:\www\Server\eventdata\CommFunc.pyt<module>sX                                                              #                 ?        ¨/