|
|
|
@@ -1,345 +1,396 @@
|
|
|
|
|
BZ='params4'
|
|
|
|
|
BY='params3'
|
|
|
|
|
BX='params1'
|
|
|
|
|
BW='queryYear'
|
|
|
|
|
BV='provinceCode'
|
|
|
|
|
BU='sceneType'
|
|
|
|
|
BT='consNoSrc'
|
|
|
|
|
BS='access_token'
|
|
|
|
|
BR='codeKey'
|
|
|
|
|
BQ='businessType'
|
|
|
|
|
BP='Channels'
|
|
|
|
|
BO='qrCodeSerial'
|
|
|
|
|
BN='redirect_url'
|
|
|
|
|
BM='_access_token'
|
|
|
|
|
BL='is_debug'
|
|
|
|
|
BK='refresh_interval'
|
|
|
|
|
BJ='doorAccountDict'
|
|
|
|
|
BI='refreshToken'
|
|
|
|
|
BH='accessToken'
|
|
|
|
|
BG='/osg-web0004/member/c24/f01'
|
|
|
|
|
BF='BCP_00026'
|
|
|
|
|
BE='serviceCode_smt'
|
|
|
|
|
BD='WEBA10070900'
|
|
|
|
|
BC='serviceType'
|
|
|
|
|
BB='jM_custType'
|
|
|
|
|
BA='jM_busiTypeCode'
|
|
|
|
|
B9='01008183'
|
|
|
|
|
B8='0101003'
|
|
|
|
|
B7='submit'
|
|
|
|
|
B2='consType'
|
|
|
|
|
B1='constType'
|
|
|
|
|
B0='powerUserList'
|
|
|
|
|
A_='publicKey'
|
|
|
|
|
Az='WEBA10070800'
|
|
|
|
|
Ay='timeDay'
|
|
|
|
|
Ax='105'
|
|
|
|
|
Aw='111'
|
|
|
|
|
Av='0901'
|
|
|
|
|
Au='WEBA10070700'
|
|
|
|
|
At='102'
|
|
|
|
|
As='0101143'
|
|
|
|
|
Ar='channelNo'
|
|
|
|
|
Ae='latestBillMonth'
|
|
|
|
|
Ad='yearTotalCost'
|
|
|
|
|
Ac='accountBalance'
|
|
|
|
|
Ab='userAccountId'
|
|
|
|
|
Aa='0000'
|
|
|
|
|
AZ='refresh_token'
|
|
|
|
|
AY='web'
|
|
|
|
|
AX='skey'
|
|
|
|
|
AW='userInfo'
|
|
|
|
|
AV=True
|
|
|
|
|
AU='215'
|
|
|
|
|
AT='0101046'
|
|
|
|
|
AJ='proCode'
|
|
|
|
|
AI='loginAccount'
|
|
|
|
|
AH='keyCode'
|
|
|
|
|
AG='querytypeCode'
|
|
|
|
|
AF='01010049'
|
|
|
|
|
AE='doorNumberManeger'
|
|
|
|
|
AD='monthBillList'
|
|
|
|
|
AC='list'
|
|
|
|
|
AB='userName'
|
|
|
|
|
AA='acctId'
|
|
|
|
|
A9='resultCode'
|
|
|
|
|
A8='quInfo'
|
|
|
|
|
A7='BCP_000026'
|
|
|
|
|
A6='app'
|
|
|
|
|
A5='WEBALIPAY_01'
|
|
|
|
|
A4='order'
|
|
|
|
|
A3='state_grid'
|
|
|
|
|
z=False
|
|
|
|
|
y='authFlag'
|
|
|
|
|
x='09'
|
|
|
|
|
w='0101183'
|
|
|
|
|
v='stepelect'
|
|
|
|
|
u='account'
|
|
|
|
|
t=len
|
|
|
|
|
s='consNo_dst'
|
|
|
|
|
r='token'
|
|
|
|
|
q='0101154'
|
|
|
|
|
p='getday'
|
|
|
|
|
n='consNo'
|
|
|
|
|
m='bizrt'
|
|
|
|
|
l='clearCache'
|
|
|
|
|
j='timestamp'
|
|
|
|
|
i='errmsg'
|
|
|
|
|
h='promotCode'
|
|
|
|
|
g='01'
|
|
|
|
|
f='SGAPP'
|
|
|
|
|
e='devciceId'
|
|
|
|
|
d='devciceIp'
|
|
|
|
|
c='orgNo'
|
|
|
|
|
b='tenant'
|
|
|
|
|
a='member'
|
|
|
|
|
Z=str
|
|
|
|
|
Y='daily_bill_list'
|
|
|
|
|
X='proNo'
|
|
|
|
|
W='promotType'
|
|
|
|
|
V='target'
|
|
|
|
|
U='userId'
|
|
|
|
|
T='srvrt'
|
|
|
|
|
S='subBusiTypeCode'
|
|
|
|
|
Q='serCat'
|
|
|
|
|
P='serialNo'
|
|
|
|
|
O='0902'
|
|
|
|
|
N='srvCode'
|
|
|
|
|
M='uscInfo'
|
|
|
|
|
L=None
|
|
|
|
|
K='busiTypeCode'
|
|
|
|
|
J='code'
|
|
|
|
|
I='channelCode'
|
|
|
|
|
H='1'
|
|
|
|
|
G='source'
|
|
|
|
|
E='funcCode'
|
|
|
|
|
D='serviceCode'
|
|
|
|
|
C='errcode'
|
|
|
|
|
B='data'
|
|
|
|
|
A=''
|
|
|
|
|
import json as AK,time as Af,aiohttp as Ag,urllib.parse,datetime as k
|
|
|
|
|
from.utils.logger import LOGGER as A0
|
|
|
|
|
from.utils.store import async_save_to_store as Ba
|
|
|
|
|
from.utils.crypt import a as AL,b as B3,c as A1,d as AM,e as Ah
|
|
|
|
|
o='3def6c365d284881bf1a9b2b502ee68c'
|
|
|
|
|
Ai='ab7357dae64944a197ace37398897f64'
|
|
|
|
|
F={M:{a:O,d:A,e:A,b:A3},G:f,V:'32101',I:O,Ar:O,'toPublish':g,'siteId':'2012000000033700',N:A,P:A,E:A,D:{A4:q,'uploadPic':'0101296','pauseSCode':'0101250','pauseTCode':'0101251','listconsumers':'0101093','messageList':'0101343',B7:B8,'sbcMsg':'0101210','powercut':'0104514','BkAuth01':'f15','BkAuth02':'f18','BkAuth03':'f02','BkAuth04':'f17','BkAuth05':'f05','BkAuth06':'f16','BkAuth07':'f01','BkAuth08':'f03'},'electricityArchives':{'servicecode':'0104505',G:O},'subscriptionList':{N:'APP_SGPMS_05_030',P:'22',I:O,E:'22',V:'-1'},'userInformation':{D:B9,G:f},'userInform':{D:w,G:f},'elesum':{I:O,E:A5,h:H,W:H,D:As,G:A6},u:{I:O,E:'WEBA1007200'},AE:{G:O,V:'-1',I:x,Ar:x,D:AF,E:'WEBA40050000',M:{a:O,d:A,e:A,b:A3}},'doorAuth':{G:f,D:'f04'},'xinZ':{Q:'101',BA:'101','fJ_busiTypeCode':At,BB:'03','fJ_custType':'02',BC:g,S:A,E:Au,A4:q,G:f,AG:H},'onedo':{D:AT,G:f,E:Au,'queryType':'03'},'xinHuTongDian':{Q:'110',K:'211',S:'21102',E:'WEBA10071200',I:O,G:x,D:w},'company':{Q:'104',E:Au,BC:'02',AG:H,y:H,G:f,A4:q},'charge':{I:x,E:'WEBA10071300',Ar:Av,Q:At,BB:g,BA:At},'other':{I:x,E:'WEBA10079700',Q:'129',K:'999',S:'21501',D:A7,N:A,P:A},'vatchange':{B7:B8,K:'320',S:A,Q:'115',E:'WEBA10074000',y:H},'bill':{l:H,E:A5,W:H,D:A7},v:{I:O,E:A5,W:H,l:x,D:A7,G:A6},p:{I:O,l:'11',E:A5,h:H,W:H,D:A7,G:A6},'mouthOut':{I:O,l:'11',E:A5,h:H,W:H,D:A7,G:A6},'meter':{Q:'114',K:'304',E:'WEBA10071000',S:A,D:AT,P:A},'complaint':{K:'005','srvMode':O,'anonymousFlag':'0','replyMode':g,'retvisitFlag':g},'report':{K:'006'},'tradewinds':{K:'019'},'somesay':{K:'091'},'faultrepair':{E:BD,D:w,Q:Aw,K:'001',S:'21505'},'electronicInvoice':{Q:Ax,K:'0'},'rename':{D:AT,E:'WEBA10076100',K:'210',Q:'109',y:H,'gh_busiTypeCode':'211','gh_subusi':'21101',P:A,N:A},'pause':{S:A,D:AF,E:'WEBA10073600',Q:'107',K:'203','jr_busi':'201',P:A,N:A},'capacityRecovery':{D:AF,G:f,N:A,P:A,E:'WEBA10073700','busiTypeCode_stop':'204','busiTypeCode_less':'202',K:'202',S:A,Q:'108',Ay:'5',y:H},'electricityPriceChange':{D:w,K:AU,S:'21502',Q:'113',y:H,Ay:'15',E:'WEBA10073900WEB',N:A,P:A},'electricityPriceStrategyChange':{D:B9,K:AU,S:'21506',Q:'160',E:'WEBV00000517WEB',N:A,P:A},'eemandValueAdjustment':{D:w,N:A,P:A,Q:'112',E:'WEBA10073800',K:AU,S:'21504',y:H,Ay:'5','getMonthServiceCode':AT},'businessProgress':{D:w,N:g,E:'WEB01'},'increase':{G:f,P:A,N:A,BE:AF,D:q,A4:q,E:Az,AG:H,Q:'106',K:Aw,S:A},'fjincrea':{Q:Ax,K:'110',S:A,G:f,E:Az,P:A,N:A,BE:AF,D:q,A4:q,AG:H},'persIncrea':{Q:Ax,K:'109',A4:q,S:A,G:f,E:Az,AG:H},'fgdChange':{D:w,N:g,I:x,E:BD,K:AU,S:'21505',Q:Aw,y:H},'createOrder':{I:O,E:A5,N:'BCP_000001','chargeMode':'02','conType':g,'bizTypeId':'BT_ELEC'},'largePopulation':{K:'383',E:'WEBA10076800',S:A,N:A,W:A,h:A,I:Av,Q:'383',D:A,P:A},'biaoJiCode':{D:'0104507',G:'1704',I:'1704'},'twoGuar':{K:'402',S:'40201',E:'web_twoGuar'},'electTrend':{D:BF,I:O},'emergency':{D:BF,E:'A10000000',I:O},'infoPublic':{D:'2545454',G:A6}}
|
|
|
|
|
B4='https://www.95598.cn/api'
|
|
|
|
|
B5='/oauth2/outer/c02/f02'
|
|
|
|
|
Aj='/osg-open-uc0001/member/c8/f24'
|
|
|
|
|
Ak='/osg-web0004/open/c50/f02'
|
|
|
|
|
Al='/osg-uc0013/member/c4/f04'
|
|
|
|
|
Am='/osg-open-uc0001/member/c8/f04'
|
|
|
|
|
An='/osg-uc0013/member/c4/f02'
|
|
|
|
|
B6='/osg-open-uc0001/member/c8/f11'
|
|
|
|
|
Ao='/oauth2/oauth/authorize'
|
|
|
|
|
AN='/oauth2/outer/getWebToken'
|
|
|
|
|
Ap='/oauth2/outer/refresh_web_token'
|
|
|
|
|
Aq='/osg-open-uc0001/member/c9/f02'
|
|
|
|
|
AO='/osg-open-bc0001/member/c05/f01'
|
|
|
|
|
AP='/osg-open-bc0001/member/c01/f02'
|
|
|
|
|
AQ='/osg-open-bc0001/member/c04/f03'
|
|
|
|
|
AR=BG
|
|
|
|
|
AS=BG
|
|
|
|
|
Bb=[Aj,Ak,Al,Am,An]
|
|
|
|
|
Bc=[Ak,Al,Am,An,B6,Ao,AN,Ap,Aq,AO,AP,AQ,AR,AS]
|
|
|
|
|
Bd=[Aq,AO,AP,AQ,AR,AS]
|
|
|
|
|
Be=[B6,AO,AP,AQ,AR,AS]
|
|
|
|
|
def A2(data):return AK.dumps(data,separators=(',',':'),ensure_ascii=z)
|
|
|
|
|
def R(data,key):
|
|
|
|
|
_Aw='get_door_ladder_api'
|
|
|
|
|
_Av='queryDate'
|
|
|
|
|
_Au='queryYear'
|
|
|
|
|
_At='access_token'
|
|
|
|
|
_As='businessType'
|
|
|
|
|
_Ar='qrCodeSerial'
|
|
|
|
|
_Aq='redirect_url'
|
|
|
|
|
_Ap='_access_token'
|
|
|
|
|
_Ao='dataVersion'
|
|
|
|
|
_An='refresh_interval'
|
|
|
|
|
_Am='doorAccountDict'
|
|
|
|
|
_Al='refreshToken'
|
|
|
|
|
_Ak='accessToken'
|
|
|
|
|
_Aj='/osg-web0004/member/c24/f01'
|
|
|
|
|
_Ai='BCP_00026'
|
|
|
|
|
_Ah='serviceCode_smt'
|
|
|
|
|
_Ag='WEBA10070900'
|
|
|
|
|
_Af='serviceType'
|
|
|
|
|
_Ae='jM_custType'
|
|
|
|
|
_Ad='jM_busiTypeCode'
|
|
|
|
|
_Ac='doorNumberManeger'
|
|
|
|
|
_Ab='month_t_ele_num'
|
|
|
|
|
_Aa='month_n_ele_num'
|
|
|
|
|
_AZ='month_v_ele_num'
|
|
|
|
|
_AY='month_p_ele_num'
|
|
|
|
|
_AX='month_ele_num'
|
|
|
|
|
_AW='constType'
|
|
|
|
|
_AV='provinceCode'
|
|
|
|
|
_AU='elecTypeCode'
|
|
|
|
|
_AT='powerUserList'
|
|
|
|
|
_AS='publicKey'
|
|
|
|
|
_AR='WEBA10070800'
|
|
|
|
|
_AQ='timeDay'
|
|
|
|
|
_AP='WEBA10070700'
|
|
|
|
|
_AO='channelNo'
|
|
|
|
|
_AN='month'
|
|
|
|
|
_AM='yearTotalCost'
|
|
|
|
|
_AL='consType'
|
|
|
|
|
_AK='provinceId'
|
|
|
|
|
_AJ='proCode'
|
|
|
|
|
_AI='userAccountId'
|
|
|
|
|
_AH='0000'
|
|
|
|
|
_AG='refresh_token'
|
|
|
|
|
_AF='skey'
|
|
|
|
|
_AE='userInfo'
|
|
|
|
|
_AD='0101046'
|
|
|
|
|
_AC='billYear'
|
|
|
|
|
_AB='loginAccount'
|
|
|
|
|
_AA='keyCode'
|
|
|
|
|
_A9='querytypeCode'
|
|
|
|
|
_A8='01010049'
|
|
|
|
|
_A7='account'
|
|
|
|
|
_A6='daily_bill_list'
|
|
|
|
|
_A5='userName'
|
|
|
|
|
_A4='acctId'
|
|
|
|
|
_A3='resultCode'
|
|
|
|
|
_A2='quInfo'
|
|
|
|
|
_A1='BCP_000026'
|
|
|
|
|
_A0='app'
|
|
|
|
|
_z='WEBALIPAY_01'
|
|
|
|
|
_y='order'
|
|
|
|
|
_x='state_grid'
|
|
|
|
|
_w='latestBillMonth'
|
|
|
|
|
_v='account_balance'
|
|
|
|
|
_u='list'
|
|
|
|
|
_t='authFlag'
|
|
|
|
|
_s='09'
|
|
|
|
|
_r='0101183'
|
|
|
|
|
_q='consNo'
|
|
|
|
|
_p='token'
|
|
|
|
|
_o=True
|
|
|
|
|
_n='0101154'
|
|
|
|
|
_m='getday'
|
|
|
|
|
_l='monthBillList'
|
|
|
|
|
_k='bizrt'
|
|
|
|
|
_j='timestamp'
|
|
|
|
|
_i=False
|
|
|
|
|
_h='month_ele'
|
|
|
|
|
_g='consNo_dst'
|
|
|
|
|
_f='errmsg'
|
|
|
|
|
_e='clearCache'
|
|
|
|
|
_d='promotCode'
|
|
|
|
|
_c='01'
|
|
|
|
|
_b='SGAPP'
|
|
|
|
|
_a='devciceId'
|
|
|
|
|
_Z='devciceIp'
|
|
|
|
|
_Y='orgNo'
|
|
|
|
|
_X='tenant'
|
|
|
|
|
_W='member'
|
|
|
|
|
_V='stepelect'
|
|
|
|
|
_U='proNo'
|
|
|
|
|
_T='promotType'
|
|
|
|
|
_S='target'
|
|
|
|
|
_R='userId'
|
|
|
|
|
_Q='srvrt'
|
|
|
|
|
_P='subBusiTypeCode'
|
|
|
|
|
_O='serCat'
|
|
|
|
|
_N='serialNo'
|
|
|
|
|
_M='0902'
|
|
|
|
|
_L='srvCode'
|
|
|
|
|
_K='uscInfo'
|
|
|
|
|
_J='busiTypeCode'
|
|
|
|
|
_I='channelCode'
|
|
|
|
|
_H='code'
|
|
|
|
|
_G='1'
|
|
|
|
|
_F=None
|
|
|
|
|
_E='source'
|
|
|
|
|
_D='funcCode'
|
|
|
|
|
_C='serviceCode'
|
|
|
|
|
_B='errcode'
|
|
|
|
|
_A='data'
|
|
|
|
|
import json,time,aiohttp,urllib.parse,datetime
|
|
|
|
|
from.const import VERSION
|
|
|
|
|
from.utils.logger import LOGGER
|
|
|
|
|
from.utils.store import async_save_to_store
|
|
|
|
|
from.utils.crypt import a,b,c,d,e
|
|
|
|
|
configuration={_K:{_W:_M,_Z:'',_a:'',_X:_x},_E:_b,_S:'32101',_I:_M,_AO:_M,'toPublish':_c,'siteId':'2012000000033700',_L:'',_N:'',_D:'',_C:{_y:_n,'uploadPic':'0101296','pauseSCode':'0101250','pauseTCode':'0101251','listconsumers':'0101093','messageList':'0101343','submit':'0101003','sbcMsg':'0101210','powercut':'0104514','BkAuth01':'f15','BkAuth02':'f18','BkAuth03':'f02','BkAuth04':'f17','BkAuth05':'f05','BkAuth06':'f16','BkAuth07':'f01','BkAuth08':'f03'},'electricityArchives':{'servicecode':'0104505',_E:_M},'subscriptionList':{_L:'APP_SGPMS_05_030',_N:'22',_I:_M,_D:'22',_S:'-1'},'userInformation':{_C:'01008183',_E:_b},'userInform':{_C:_r,_E:_b},'elesum':{_I:_M,_D:_z,_d:_G,_T:_G,_C:'0101143',_E:_A0},_A7:{_I:_M,_D:'WEBA1007200'},_Ac:{_E:_M,_S:'-1',_I:_s,_AO:_s,_C:_A8,_D:'WEBA40050000',_K:{_W:_M,_Z:'',_a:'',_X:_x}},'doorAuth':{_E:_b,_C:'f04'},'xinZ':{_O:'101',_Ad:'101','fJ_busiTypeCode':'102',_Ae:'03','fJ_custType':'02',_Af:_c,_P:'',_D:_AP,_y:_n,_E:_b,_A9:_G},'onedo':{_C:_AD,_E:_b,_D:_AP,'queryType':'03'},'xinHuTongDian':{_O:'110',_J:'211',_P:'21102',_D:'WEBA10071200',_I:_M,_E:_s,_C:_r},'company':{_O:'104',_D:_AP,_Af:'02',_A9:_G,_t:_G,_E:_b,_y:_n},'charge':{_I:_s,_D:'WEBA10071300',_AO:'0901',_O:'102',_Ae:_c,_Ad:'102'},'other':{_I:_s,_D:'WEBA10079700',_O:'129',_J:'999',_P:'21501',_C:_A1,_L:'',_N:''},'vatchange':{'submit':'0101003',_J:'320',_P:'',_O:'115',_D:'WEBA10074000',_t:_G},'bill':{_e:_G,_D:_z,_T:_G,_C:_A1},_V:{_I:_M,_D:_z,_T:_G,_e:_s,_C:_A1,_E:_A0},_m:{_I:_M,_e:'11',_D:_z,_d:_G,_T:_G,_C:_A1,_E:_A0},'mouthOut':{_I:_M,_e:'11',_D:_z,_d:_G,_T:_G,_C:_A1,_E:_A0},'meter':{_O:'114',_J:'304',_D:'WEBA10071000',_P:'',_C:_AD,_N:''},'complaint':{_J:'005','srvMode':_M,'anonymousFlag':'0','replyMode':_c,'retvisitFlag':_c},'report':{_J:'006'},'tradewinds':{_J:'019'},'somesay':{_J:'091'},'faultrepair':{_D:_Ag,_C:_r,_O:'111',_J:'001',_P:'21505'},'electronicInvoice':{_O:'105',_J:'0'},'rename':{_C:_AD,_D:'WEBA10076100',_J:'210',_O:'109',_t:_G,'gh_busiTypeCode':'211','gh_subusi':'21101',_N:'',_L:''},'pause':{_P:'',_C:_A8,_D:'WEBA10073600',_O:'107',_J:'203','jr_busi':'201',_N:'',_L:''},'capacityRecovery':{_C:_A8,_E:_b,_L:'',_N:'',_D:'WEBA10073700','busiTypeCode_stop':'204','busiTypeCode_less':'202',_J:'202',_P:'',_O:'108',_AQ:'5',_t:_G},'electricityPriceChange':{_C:_r,_J:'215',_P:'21502',_O:'113',_t:_G,_AQ:'15',_D:'WEBA10073900WEB',_L:'',_N:''},'electricityPriceStrategyChange':{_C:'01008183',_J:'215',_P:'21506',_O:'160',_D:'WEBV00000517WEB',_L:'',_N:''},'eemandValueAdjustment':{_C:_r,_L:'',_N:'',_O:'112',_D:'WEBA10073800',_J:'215',_P:'21504',_t:_G,_AQ:'5','getMonthServiceCode':_AD},'businessProgress':{_C:_r,_L:_c,_D:'WEB01'},'increase':{_E:_b,_N:'',_L:'',_Ah:_A8,_C:_n,_y:_n,_D:_AR,_A9:_G,_O:'106',_J:'111',_P:''},'fjincrea':{_O:'105',_J:'110',_P:'',_E:_b,_D:_AR,_N:'',_L:'',_Ah:_A8,_C:_n,_y:_n,_A9:_G},'persIncrea':{_O:'105',_J:'109',_y:_n,_P:'',_E:_b,_D:_AR,_A9:_G},'fgdChange':{_C:_r,_L:_c,_I:_s,_D:_Ag,_J:'215',_P:'21505',_O:'111',_t:_G},'createOrder':{_I:_M,_D:_z,_L:'BCP_000001','chargeMode':'02','conType':_c,'bizTypeId':'BT_ELEC'},'largePopulation':{_J:'383',_D:'WEBA10076800',_P:'',_L:'',_T:'',_d:'',_I:'0901',_O:'383',_C:'',_N:''},'biaoJiCode':{_C:'0104507',_E:'1704',_I:'1704'},'twoGuar':{_J:'402',_P:'40201',_D:'web_twoGuar'},'electTrend':{_C:_Ai,_I:_M},'emergency':{_C:_Ai,_D:'A10000000',_I:_M},'infoPublic':{_C:'2545454',_E:_A0}}
|
|
|
|
|
appKey='3def6c365d284881bf1a9b2b502ee68c'
|
|
|
|
|
appSecret='ab7357dae64944a197ace37398897f64'
|
|
|
|
|
baseApi='https://www.95598.cn/api'
|
|
|
|
|
get_request_key_api='/oauth2/outer/c02/f02'
|
|
|
|
|
get_qr_code_api='/osg-open-uc0001/member/c8/f24'
|
|
|
|
|
get_qr_code_status_api='/osg-web0004/open/c50/f02'
|
|
|
|
|
get_qr_code_token_api='/osg-uc0013/member/c4/f04'
|
|
|
|
|
send_code_api='/osg-open-uc0001/member/c8/f04'
|
|
|
|
|
code_login_api='/osg-uc0013/member/c4/f02'
|
|
|
|
|
getCertificationApi='/osg-open-uc0001/member/c8/f11'
|
|
|
|
|
get_request_authorize_api='/oauth2/oauth/authorize'
|
|
|
|
|
get_web_token_api='/oauth2/outer/getWebToken'
|
|
|
|
|
refresh_web_token_api='/oauth2/outer/refresh_web_token'
|
|
|
|
|
get_door_number_api='/osg-open-uc0001/member/c9/f02'
|
|
|
|
|
get_door_balance_api='/osg-open-bc0001/member/c05/f01'
|
|
|
|
|
get_door_bill_api='/osg-open-bc0001/member/c01/f02'
|
|
|
|
|
get_door_ladder_api='/osg-open-bc0001/member/c04/f03'
|
|
|
|
|
getJiaoFeiRecordApi=_Aj
|
|
|
|
|
get_door_daily_bill_api=_Aj
|
|
|
|
|
sessionIdControlApiList=[get_qr_code_api,get_qr_code_status_api,get_qr_code_token_api,send_code_api,code_login_api]
|
|
|
|
|
keyCodeControlApiList=[get_qr_code_status_api,get_qr_code_token_api,send_code_api,code_login_api,getCertificationApi,get_request_authorize_api,get_web_token_api,refresh_web_token_api,get_door_number_api,get_door_balance_api,get_door_bill_api,get_door_ladder_api,getJiaoFeiRecordApi,get_door_daily_bill_api]
|
|
|
|
|
authControlApiList=[get_door_number_api,get_door_balance_api,get_door_bill_api,get_door_ladder_api,getJiaoFeiRecordApi,get_door_daily_bill_api]
|
|
|
|
|
tControlApiList=[getCertificationApi,get_door_balance_api,get_door_bill_api,get_door_ladder_api,getJiaoFeiRecordApi,get_door_daily_bill_api]
|
|
|
|
|
def json_dumps(data):return json.dumps(data,separators=(',',':'),ensure_ascii=_i)
|
|
|
|
|
def normal_round(num,ndigits=0):
|
|
|
|
|
A=ndigits
|
|
|
|
|
if A==0:return int(num+.5)
|
|
|
|
|
else:B=10**A;return int(num*B+.5)/B
|
|
|
|
|
def catchFloat(data,key):
|
|
|
|
|
if key in data:
|
|
|
|
|
try:return float(data[key])
|
|
|
|
|
try:return normal_round(float(data[key]),2)
|
|
|
|
|
except:return 0
|
|
|
|
|
else:return 0
|
|
|
|
|
class StateGridDataClient:
|
|
|
|
|
hass=L;session=L;keyCode=L;publicKey=L;need_login=z;phone=L;codeKey=L;serialNo=L;qrCodeSerial=L;userInfo=L;accountInfo=L;powerUserList=L;doorAccountDict={};cookie=[];timestamp=int(Af.time()*1000);accessToken=L;refreshToken=L;token=L;expirationDate=L;refresh_interval=12;is_debug=z
|
|
|
|
|
def __init__(A,hass,config=L):
|
|
|
|
|
B=config;A.hass=hass;C=Ag.TCPConnector(ssl=z);D=Ag.CookieJar(quote_cookie=AV);A.session=Ag.ClientSession(cookie_jar=D,connector=C)
|
|
|
|
|
if B is not L:
|
|
|
|
|
try:A.keyCode=B[AH];A.publicKey=B[A_];A.accessToken=B[BH];A.refreshToken=B[BI];A.token=B[r];A.userInfo=B[AW];A.powerUserList=B[B0];A.doorAccountDict=B[BJ];A.refresh_interval=B[BK];A.is_debug=B[BL]
|
|
|
|
|
except Exception as E:A0.error(E)
|
|
|
|
|
async def save_data(A):B={};B[AH]=A.keyCode;B[A_]=A.publicKey;B[BH]=A.accessToken;B[BI]=A.refreshToken;B[r]=A.token;B[AW]=A.userInfo;B[B0]=A.powerUserList;B[BJ]=A.doorAccountDict;B[BK]=A.refresh_interval;B[BL]=A.is_debug;await Ba(A.hass,'state_grid.config',B)
|
|
|
|
|
def encrypt_post_data(B,data):C={BM:B.accessToken[t(B.accessToken)//2:]if B.accessToken else A,'_t':B.token[t(B.token)//2:]if B.token else A,'_data':data,j:B.timestamp};return B.encrypt_wapper_data(C)
|
|
|
|
|
def encrypt_wapper_data(A,data):C=AL(A2(data),A.keyCode);return{B:C+A1(C+Z(A.timestamp)),AX:AM(A.keyCode,A.publicKey),j:Z(A.timestamp)}
|
|
|
|
|
def handle_request_result_message(F,api,result):
|
|
|
|
|
E='message';D='resultMessage';A=result;C=L
|
|
|
|
|
if B in A and T in A[B]and D in A[B][T]:C=A[B][T][D]
|
|
|
|
|
elif T in A and D in A[T]:C=A[T][D]
|
|
|
|
|
elif E in A:C=A[E]
|
|
|
|
|
else:C=A2(A)
|
|
|
|
|
if F.is_debug:A0.error(api+': '+C);A0.error(A2(A))
|
|
|
|
|
return C
|
|
|
|
|
async def fetch(D,api,data,header=L):
|
|
|
|
|
Y='encryptData';X='464606a4-184c-4beb-b442-2ab7761d0796';W='key_code';V='state';U='sign';T='grant_type';S='application/json;charset=UTF-8';R='Content-Type';Q=header;P='client_secret';N='client_id';H=api;D.timestamp=int(Af.time()*1000);F=D.timestamp
|
|
|
|
|
if D.keyCode is L:D.keyCode=Ah(32,16,2)
|
|
|
|
|
I=D.keyCode;K={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.36','Accept':S,R:S,'version':'1.0',G:Av,j:Z(F),'wsgwType':AY,'appKey':o};C=data
|
|
|
|
|
if H==B5:C={N:o,P:Ai};M=AL(A2(C),I);C={B:M+A1(M+Z(F)),AX:AM(I,'042BC7AD510BF9793B7744C8854C56A8C95DD1027EE619247A332EC6ED5B279F435A23D62441FE861F4B0C963347ECD5792F380B64CA084BE8BE41151F8B8D19C8'),N:o,j:Z(F)}
|
|
|
|
|
elif H==Aj:C={BM:A,'_t':A,'_data':C,j:F}
|
|
|
|
|
elif H==Ao:
|
|
|
|
|
C={N:o,'response_type':J,BN:'/test',j:F,'rsi':D.token};C=urllib.parse.urlencode(C);K[R]='application/x-www-form-urlencoded; charset=UTF-8';K[AH]=I
|
|
|
|
|
async with D.session.post(B4+H,data=C,headers=K)as O:D.session.cookie_jar.update_cookies(O.cookies);E=await O.json();E=B3(E[B],D.token);E=AK.loads(E);return E
|
|
|
|
|
elif H==AN:C={T:'authorization_code',U:A1(o+Z(F)),P:Ai,V:X,W:I,N:o,j:F,J:C[J]};M=AL(A2(C),I);C={B:M+A1(M+Z(F)),AX:AM(I,D.publicKey),j:Z(F)}
|
|
|
|
|
elif H==Ap:C={T:AZ,U:A1(o+Z(F)),P:Ai,V:X,W:I,N:o,j:F,AZ:D.refreshToken};M=AL(A2(C),I);C={B:M+A1(M+Z(F)),AX:AM(I,D.publicKey),j:Z(F)};H=AN
|
|
|
|
|
else:C=D.encrypt_post_data(C)
|
|
|
|
|
if Q is not L:K.update(Q)
|
|
|
|
|
if H in Bb:K['sessionId']=AY+Z(F)
|
|
|
|
|
if H in Bc:K[AH]=I
|
|
|
|
|
if H in Bd:K['Authorization']='Bearer '+D.accessToken[:t(D.accessToken)//2]
|
|
|
|
|
if H in Be:K['t']=D.token[:t(D.token)//2]
|
|
|
|
|
async with D.session.post(B4+H,json=C,headers=K)as O:
|
|
|
|
|
E=await O.text()
|
|
|
|
|
if E.startswith('{'):
|
|
|
|
|
E=AK.loads(E)
|
|
|
|
|
if Y in E:E=B3(E[Y],I);E=AK.loads(E)
|
|
|
|
|
return E
|
|
|
|
|
hass=_F;coordinator=_F;session=_F;dataVersion=_F;keyCode=_F;publicKey=_F;need_login=_i;retry_times=0;phone=_F;codeKey=_F;serialNo=_F;qrCodeSerial=_F;userInfo=_F;accountInfo=_F;powerUserList=_F;doorAccountDict={};cookie=[];timestamp=int(time.time()*1000);accessToken=_F;refreshToken=_F;token=_F;expirationDate=_F;refresh_interval=6;is_debug=_i
|
|
|
|
|
def __init__(A,hass,config=_F):
|
|
|
|
|
B=config;A.hass=hass;C=aiohttp.TCPConnector(ssl=_i);D=aiohttp.CookieJar(quote_cookie=_o);A.session=aiohttp.ClientSession(cookie_jar=D,connector=C)
|
|
|
|
|
if B is not _F:
|
|
|
|
|
try:A.keyCode=B[_AA];A.publicKey=B[_AS];A.accessToken=B[_Ak];A.refreshToken=B[_Al];A.token=B[_p];A.userInfo=B[_AE];A.powerUserList=B[_AT];A.doorAccountDict=B[_Am];A.refresh_interval=B[_An];A.is_debug=B['is_debug'];A.dataVersion=B[_Ao]
|
|
|
|
|
except Exception as E:LOGGER.error(E)
|
|
|
|
|
async def save_data(B):A={};A[_AA]=B.keyCode;A[_AS]=B.publicKey;A[_Ak]=B.accessToken;A[_Al]=B.refreshToken;A[_p]=B.token;A[_AE]=B.userInfo;A[_AT]=B.powerUserList;A[_Am]=B.doorAccountDict;A[_An]=B.refresh_interval;A['is_debug']=B.is_debug;A[_Ao]=VERSION;await async_save_to_store(B.hass,'state_grid.config',A)
|
|
|
|
|
def encrypt_post_data(A,data):B={_Ap:A.accessToken[len(A.accessToken)//2:]if A.accessToken else'','_t':A.token[len(A.token)//2:]if A.token else'','_data':data,_j:A.timestamp};return A.encrypt_wapper_data(B)
|
|
|
|
|
def encrypt_wapper_data(A,data):B=a(json_dumps(data),A.keyCode);return{_A:B+c(B+str(A.timestamp)),_AF:d(A.keyCode,A.publicKey),_j:str(A.timestamp)}
|
|
|
|
|
def handle_request_result_message(E,api,result):
|
|
|
|
|
D='message';C='resultMessage';A=result;LOGGER.error(api+'-'+json_dumps(A));B=_F
|
|
|
|
|
if _A in A and _Q in A[_A]and C in A[_A][_Q]:B=A[_A][_Q][C]
|
|
|
|
|
elif _Q in A and C in A[_Q]:B=A[_Q][C]
|
|
|
|
|
elif D in A:B=A[D]
|
|
|
|
|
else:B=json_dumps(A)
|
|
|
|
|
return B
|
|
|
|
|
async def __fetch_safe(C,api,data):
|
|
|
|
|
B=await C.__fetch(api,data)
|
|
|
|
|
if _H not in B:return B
|
|
|
|
|
A=B[_H]
|
|
|
|
|
if 10015==A or 10108==A or 10009==A or 10207==A or 10005==A or 10010==A or 30010==A or 10002==A:
|
|
|
|
|
await C.__refresh_token()
|
|
|
|
|
if C.need_login is _o:return B
|
|
|
|
|
else:return await C.__fetch(api,data)
|
|
|
|
|
else:return B
|
|
|
|
|
async def __fetch(B,api,data,header=_F):
|
|
|
|
|
T='encryptData';S='464606a4-184c-4beb-b442-2ab7761d0796';R='key_code';Q='state';P='sign';O='grant_type';N='application/json;charset=UTF-8';M='Content-Type';L=header;K='client_secret';I='client_id';E=api;B.timestamp=int(time.time()*1000);D=B.timestamp
|
|
|
|
|
if B.keyCode is _F:B.keyCode=e(32,16,2)
|
|
|
|
|
F=B.keyCode;G={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.36','Accept':N,M:N,'version':'1.0',_E:'0901',_j:str(D),'wsgwType':'web','appKey':appKey};A=data
|
|
|
|
|
if E==get_request_key_api:A={I:appKey,K:appSecret};H=a(json_dumps(A),F);A={_A:H+c(H+str(D)),_AF:d(F,'042BC7AD510BF9793B7744C8854C56A8C95DD1027EE619247A332EC6ED5B279F435A23D62441FE861F4B0C963347ECD5792F380B64CA084BE8BE41151F8B8D19C8'),I:appKey,_j:str(D)}
|
|
|
|
|
elif E==get_qr_code_api:A={_Ap:'','_t':'','_data':A,_j:D}
|
|
|
|
|
elif E==get_request_authorize_api:
|
|
|
|
|
A={I:appKey,'response_type':_H,_Aq:'/test',_j:D,'rsi':B.token};A=urllib.parse.urlencode(A);G[M]='application/x-www-form-urlencoded; charset=UTF-8';G[_AA]=F
|
|
|
|
|
async with B.session.post(baseApi+E,data=A,headers=G)as J:B.session.cookie_jar.update_cookies(J.cookies);C=await J.json();C=b(C[_A],B.token);C=json.loads(C);return C
|
|
|
|
|
elif E==get_web_token_api:A={O:'authorization_code',P:c(appKey+str(D)),K:appSecret,Q:S,R:F,I:appKey,_j:D,_H:A[_H]};H=a(json_dumps(A),F);A={_A:H+c(H+str(D)),_AF:d(F,B.publicKey),_j:str(D)}
|
|
|
|
|
elif E==refresh_web_token_api:A={O:_AG,P:c(appKey+str(D)),K:appSecret,Q:S,R:F,I:appKey,_j:D,_AG:B.refreshToken};H=a(json_dumps(A),F);A={_A:H+c(H+str(D)),_AF:d(F,B.publicKey),_j:str(D)};E=get_web_token_api
|
|
|
|
|
else:A=B.encrypt_post_data(A)
|
|
|
|
|
if L is not _F:G.update(L)
|
|
|
|
|
if E in sessionIdControlApiList:G['sessionId']='web'+str(D)
|
|
|
|
|
if E in keyCodeControlApiList:G[_AA]=F
|
|
|
|
|
if E in authControlApiList:G['Authorization']='Bearer '+B.accessToken[:len(B.accessToken)//2]
|
|
|
|
|
if E in tControlApiList:G['t']=B.token[:len(B.token)//2]
|
|
|
|
|
async with B.session.post(baseApi+E,json=A,headers=G)as J:
|
|
|
|
|
C=await J.text()
|
|
|
|
|
if C.startswith('{'):
|
|
|
|
|
C=json.loads(C)
|
|
|
|
|
if T in C:C=b(C[T],F);C=json.loads(C)
|
|
|
|
|
return C
|
|
|
|
|
async def __get_request_key(A):
|
|
|
|
|
A.keyCode=L;D=await A.fetch(B5,{});E=A.handle_request_result_message('get_request_key_api',D)
|
|
|
|
|
if D[J]==H:A.keyCode=D[B][AH];A.publicKey=D[B][A_];return{C:0}
|
|
|
|
|
return{C:1,i:E}
|
|
|
|
|
async def __get_qr_code(E):
|
|
|
|
|
F={M:{d:A,b:A3,a:O,e:A},A8:{'optType':g,P:Ah(28,10,1)}};D=await E.fetch(Aj,F);G=E.handle_request_result_message('get_qr_code_api',D)
|
|
|
|
|
if D[J]==1:
|
|
|
|
|
if D[B]and D[B][T]and D[B][T][A9]==Aa:E.qrCodeSerial=D[B][m][BO];H=D[B][m]['qrCode'];return{C:0,B:H}
|
|
|
|
|
return{C:1,i:G}
|
|
|
|
|
async def __get_qr_code_status(D):
|
|
|
|
|
E={m:{BO:D.qrCodeSerial}};F={r:'98'+Ah(10,10,1)};A=await D.fetch(Ak,E,F);G=D.handle_request_result_message('get_qr_code_status_api',A)
|
|
|
|
|
if J in A and A[J]==1:
|
|
|
|
|
if B in A and A[B]!='null':D.token=A[B];return{C:0}
|
|
|
|
|
else:return{C:1,i:'未使用网上国网 App 扫码或确认登录'}
|
|
|
|
|
return{C:1,i:G}
|
|
|
|
|
A.keyCode=_F;B=await A.__fetch(get_request_key_api,{});C=A.handle_request_result_message('get_request_key_api',B)
|
|
|
|
|
if B[_H]==_G:A.keyCode=B[_A][_AA];A.publicKey=B[_A][_AS];return{_B:0}
|
|
|
|
|
return{_B:1,_f:C}
|
|
|
|
|
async def __get_qr_code(B):
|
|
|
|
|
C={_K:{_Z:'',_X:_x,_W:_M,_a:''},_A2:{'optType':_c,_N:e(28,10,1)}};A=await B.__fetch(get_qr_code_api,C);D=B.handle_request_result_message('get_qr_code_api',A)
|
|
|
|
|
if A[_H]==1:
|
|
|
|
|
if A[_A]and A[_A][_Q]and A[_A][_Q][_A3]==_AH:B.qrCodeSerial=A[_A][_k][_Ar];E=A[_A][_k]['qrCode'];return{_B:0,_A:E}
|
|
|
|
|
return{_B:1,_f:D}
|
|
|
|
|
async def __get_qr_code_status(B):
|
|
|
|
|
C={_k:{_Ar:B.qrCodeSerial}};D={_p:'98'+e(10,10,1)};A=await B.__fetch(get_qr_code_status_api,C,D);E=B.handle_request_result_message('get_qr_code_status_api',A)
|
|
|
|
|
if _H in A and A[_H]==1:
|
|
|
|
|
if _A in A and A[_A]!='null':B.token=A[_A];return{_B:0}
|
|
|
|
|
else:return{_B:1,_f:'未使用网上国网 App 扫码或确认登录'}
|
|
|
|
|
return{_B:1,_f:E}
|
|
|
|
|
async def __get_qr_code_token(B):
|
|
|
|
|
D={M:{b:A3,a:O,'isEncrypt':AV},r:B.token};A=await B.fetch(Al,D);E=B.handle_request_result_message('get_qr_code_token_api',A)
|
|
|
|
|
if T in A and A9 in A[T]and A[T][A9]==Aa:B.userInfo=A[m][AW];return{C:0}
|
|
|
|
|
return{C:1,i:E}
|
|
|
|
|
async def __send_code(E,phone):
|
|
|
|
|
F=phone;E.phone=F;G={M:{d:A,b:A3,a:O,e:A},A8:{'sendType':'0',u:F,BQ:'login','accountType':A},BP:AY};D=await E.fetch(Am,G);H=E.handle_request_result_message('send_code_api',D)
|
|
|
|
|
if D[J]==1:
|
|
|
|
|
if D[B]and D[B][T]and D[B][T][A9]==Aa:E.codeKey=D[B][m][BR];return{C:0}
|
|
|
|
|
return{C:1,i:H}
|
|
|
|
|
async def __verfiy_code(B,code):
|
|
|
|
|
E={M:{d:A,b:A3,a:O,e:A},A8:{u:B.phone,BQ:'login',J:code,'optSys':'ios','pushId':'00000',BR:B.codeKey},BP:AY};D=await B.fetch(An,E);F=B.handle_request_result_message('code_login_api',D)
|
|
|
|
|
if T in D and A9 in D[T]and D[T][A9]==Aa:B.token=D[m][r];B.userInfo=D[m][AW][0];return{C:0}
|
|
|
|
|
return{C:1,i:F}
|
|
|
|
|
async def __get_request_authorize(D):
|
|
|
|
|
A=await D.fetch(Ao,{});G=D.handle_request_result_message('get_request_authorize_api',A)
|
|
|
|
|
if J in A and A[J]==H:E=A[B][BN];F=E.rfind('code=');D.authorizeCode=E[F+5:F+5+32];return{C:0}
|
|
|
|
|
return{C:1,i:G}
|
|
|
|
|
C={_K:{_X:_x,_W:_M,'isEncrypt':_o},_p:B.token};A=await B.__fetch(get_qr_code_token_api,C);D=B.handle_request_result_message('get_qr_code_token_api',A)
|
|
|
|
|
if _Q in A and _A3 in A[_Q]and A[_Q][_A3]==_AH:B.userInfo=A[_k][_AE];return{_B:0}
|
|
|
|
|
return{_B:1,_f:D}
|
|
|
|
|
async def __send_code(B,phone):
|
|
|
|
|
C=phone;B.phone=C;D={_K:{_Z:'',_X:_x,_W:_M,_a:''},_A2:{'sendType':'0',_A7:C,_As:'login','accountType':''},'Channels':'web'};A=await B.__fetch(send_code_api,D);E=B.handle_request_result_message('send_code_api',A)
|
|
|
|
|
if A[_H]==1:
|
|
|
|
|
if A[_A]and A[_A][_Q]and A[_A][_Q][_A3]==_AH:B.codeKey=A[_A][_k]['codeKey'];return{_B:0}
|
|
|
|
|
return{_B:1,_f:E}
|
|
|
|
|
async def __verfiy_code(A,code):
|
|
|
|
|
C={_K:{_Z:'',_X:_x,_W:_M,_a:''},_A2:{_A7:A.phone,_As:'login',_H:code,'optSys':'ios','pushId':'00000','codeKey':A.codeKey},'Channels':'web'};B=await A.__fetch(code_login_api,C);D=A.handle_request_result_message('code_login_api',B)
|
|
|
|
|
if _Q in B and _A3 in B[_Q]and B[_Q][_A3]==_AH:A.token=B[_k][_p];A.userInfo=B[_k][_AE][0];return{_B:0}
|
|
|
|
|
return{_B:1,_f:D}
|
|
|
|
|
async def __get_request_authorize(B):
|
|
|
|
|
A=await B.__fetch(get_request_authorize_api,{});E=B.handle_request_result_message('get_request_authorize_api',A)
|
|
|
|
|
if _H in A and A[_H]==_G:C=A[_A][_Aq];D=C.rfind('code=');B.authorizeCode=C[D+5:D+5+32];return{_B:0}
|
|
|
|
|
return{_B:1,_f:E}
|
|
|
|
|
async def __get_web_token(A):
|
|
|
|
|
E={J:A.authorizeCode};D=await A.fetch(AN,E);F=A.handle_request_result_message('get_web_token_api',D)
|
|
|
|
|
if J in D and D[J]==H:A.accessToken=D[B][BS];A.refreshToken=D[B][AZ];return{C:0}
|
|
|
|
|
return{C:1,i:F}
|
|
|
|
|
async def __refresh_web_token(D):
|
|
|
|
|
A=await D.fetch(Ap,{});E=D.handle_request_result_message('refresh_web_token_api',A)
|
|
|
|
|
if J in A and A[J]==H:D.accessToken=A[B][BS];D.refreshToken=A[B][AZ];return{C:0}
|
|
|
|
|
return{C:1,i:E}
|
|
|
|
|
async def __get_door_number(E):
|
|
|
|
|
H={D:F[D],G:F[G],V:F[V],M:{a:F[AE][M][a],d:F[AE][M][d],e:F[AE][M][e],b:F[AE][M][b]},A8:{U:E.userInfo[U]},r:E.token};A=await E.fetch(Aq,H);I=E.handle_request_result_message('get_door_number_api',A)
|
|
|
|
|
if J in A and A[J]==1 and B in A and m in A[B]:E.powerUserList=A[B][m][B0];return{C:0}
|
|
|
|
|
return{C:1,i:I}
|
|
|
|
|
async def __get_door_balance(L,door_account):
|
|
|
|
|
C=door_account;O={B:{N:A,P:A,I:F[u][I],E:F[u][E],AA:L.userInfo[U],AB:L.userInfo[AI],W:H,h:H,Ab:L.userInfo[U],AC:[{BT:C[s],AJ:C[X],BU:C[B1],n:C[n],c:C[c]}]},D:As,G:F[G],V:C[X]};K=await L.fetch(AO,O);L.handle_request_result_message('get_door_balance_api',K)
|
|
|
|
|
if J in K and K[J]==1 and B in K and AC in K[B]:
|
|
|
|
|
M=K[B][AC]
|
|
|
|
|
if t(M)!=0:C[Ac]=M[0]
|
|
|
|
|
async def __get_door_bill(L,door_account,year):
|
|
|
|
|
Q='dataInfo';M='mothEleList';C=door_account;O={B:{N:A,P:A,I:F[u][I],E:F[u][E],AA:L.userInfo[U],AB:L.userInfo[AI],W:H,h:H,Ab:L.userInfo[U],AC:[{BT:C[s],AJ:C[X],BU:C['consSortCode'],n:C[n],c:C[c]}]},D:As,G:F[G],V:C[X]};O={B:{AA:L.userInfo[U],I:F[I],l:'11',B2:C[B1],E:'ALIPAY_01',c:C[c],AJ:C[X],h:H,W:H,P:A,N:A,AB:A,BV:C[X],Ab:L.userInfo[U],n:C[n],BW:year},D:A7,G:A6,V:C[X]};K=await L.fetch(AP,O);L.handle_request_result_message('get_door_bill_api',K)
|
|
|
|
|
if J in K and K[J]==1 and B in K:
|
|
|
|
|
if Q in K[B]:C[Ad]=K[B][Q]
|
|
|
|
|
if M in K[B]:C[AD]=K[B][M];C[Ae]=K[B][M][-1]['month']
|
|
|
|
|
async def __get_door_ladder(H,door_account,month):
|
|
|
|
|
O='ladder_flag';M=month;C=door_account;Q=C[s];R={B:{I:F[v][I],E:F[v][E],W:F[v][W],l:F[v][l],n:C[s],h:C[X],c:C[c],'queryDate':M,BV:C[X],B2:C[B1],Ab:H.userInfo[U],P:A,N:A,AB:H.userInfo[AI],AA:H.userInfo[U]},D:F[v][D],G:F[v][G],V:C[X]};K=await H.fetch(AQ,R);S=H.handle_request_result_message('get_door_ladder_api',K)
|
|
|
|
|
if J in K and K[J]==1 and B in K and AC in K[B]:
|
|
|
|
|
L=K[B][AC]
|
|
|
|
|
if t(L)!=0:
|
|
|
|
|
L=L[0];L['month']=M
|
|
|
|
|
if L['electricParticulars']['levelFlag']=='2':C[O]=1
|
|
|
|
|
else:C[O]=0
|
|
|
|
|
H.doorAccountDict[Q]['ladder']=L
|
|
|
|
|
async def __get_door_daily_bill(C,door_account,year,start_date,end_date):
|
|
|
|
|
L='sevenEleList';K=door_account;O={BX:{D:F[D],G:F[G],V:F[V],M:{a:F[M][a],d:F[M][d],e:F[M][e],b:F[M][b]},A8:{U:C.userInfo[U]},r:C.token},BY:{B:{AA:C.userInfo[U],n:K[s],B2:g,'endTime':end_date,c:K[c],BW:year,AJ:K[X],P:A,N:A,'startTime':start_date,AB:C.userInfo[AI],E:F[p][E],I:F[p][I],l:F[p][l],h:F[p][h],W:F[p][W]},D:F[p][D],G:F[p][G],V:K[X]},BZ:'010103'};H=await C.fetch(AS,O);Q=C.handle_request_result_message('get_door_daily_bill_api',H)
|
|
|
|
|
if J in H and H[J]==1 and B in H and L in H[B]:K[Y]=H[B][L]
|
|
|
|
|
async def __get_door_pay_record(C,door_account):J=door_account;L=J[s];K={BX:{D:F[D],G:F[G],V:F[V],M:{a:F[M][a],d:F[M][d],e:F[M][e],b:F[M][b]},A8:{U:C.userInfo[U]},r:C.token},BY:{B:{AA:C.userInfo[U],'bgnPayDate':'2023-04-24',I:F[I],n:J[s],'endPayDate':'2024-04-24',E:'webALIPAY_01','number':100,c:J[c],'page':H,AJ:J[X],h:H,W:H,P:A,N:A,AB:C.userInfo[AI]},D:'0101051',G:g,V:J[X]},BZ:'010104'};O=await C.fetch(AR,K)
|
|
|
|
|
C={_H:A.authorizeCode};B=await A.__fetch(get_web_token_api,C);D=A.handle_request_result_message('get_web_token_api',B)
|
|
|
|
|
if _H in B and B[_H]==_G:A.accessToken=B[_A][_At];A.refreshToken=B[_A][_AG];return{_B:0}
|
|
|
|
|
return{_B:1,_f:D}
|
|
|
|
|
async def __refresh_web_token(B):
|
|
|
|
|
A=await B.__fetch(refresh_web_token_api,{});C=B.handle_request_result_message('refresh_web_token_api',A)
|
|
|
|
|
if _H in A and A[_H]==_G:B.accessToken=A[_A][_At];B.refreshToken=A[_A][_AG];return{_B:0}
|
|
|
|
|
return{_B:1,_f:C}
|
|
|
|
|
async def __get_door_number(A):
|
|
|
|
|
B=configuration[_Ac];G={_C:B[_C],_E:B[_E],_S:B[_S],_K:{_W:B[_K][_W],_Z:B[_K][_Z],_a:B[_K][_a],_X:B[_K][_X]},_A2:{_R:A.userInfo[_R]},_p:A.token};C=await A.__fetch_safe(get_door_number_api,G);H=A.handle_request_result_message('get_door_number_api',C)
|
|
|
|
|
if _H in C and C[_H]==1 and _A in C and _k in C[_A]:
|
|
|
|
|
E={}
|
|
|
|
|
if A.powerUserList is not _F:E={A[_g]:A for A in A.powerUserList}
|
|
|
|
|
F=[]
|
|
|
|
|
for D in C[_A][_k][_AT]:
|
|
|
|
|
if D[_g]in E:F.append(E[D[_g]])
|
|
|
|
|
elif _AU in D and D[_AU]!='05':F.append(D)
|
|
|
|
|
A.powerUserList=F;return{_B:0}
|
|
|
|
|
return{_B:1,_f:H}
|
|
|
|
|
async def __get_door_balance(B,door_account):
|
|
|
|
|
A=door_account;E={_A:{_L:'',_N:'',_I:configuration[_A7][_I],_D:configuration[_A7][_D],_A4:B.userInfo[_R],_A5:B.userInfo.get(_AB,B.userInfo.get('nickname',_F)),_T:_G,_d:_G,_AI:B.userInfo[_R],_u:[{'consNoSrc':A[_g],_AJ:A.get(_U,A.get(_AK,_F)),'sceneType':A.get('consSortCode',A.get(_AU,_F)),_q:A[_q],_Y:A[_Y]}]},_C:'0101143',_E:configuration[_E],_S:A.get(_U,A.get(_AK,_F))};C=await B.__fetch_safe(get_door_balance_api,E);B.handle_request_result_message('get_door_balance_api',C)
|
|
|
|
|
if _H in C and C[_H]==1 and _A in C and _u in C[_A]:
|
|
|
|
|
D=C[_A][_u]
|
|
|
|
|
if len(D)!=0:A[_v]=D[0]
|
|
|
|
|
async def __get_door_bill(C,door_account,monthDate):
|
|
|
|
|
I='dataInfo';G='mothEleList';E=monthDate;A=door_account;J={_A:{_A4:C.userInfo[_R],_I:configuration[_I],_e:'11',_AL:A[_AW],_D:'ALIPAY_01',_Y:A[_Y],_AJ:A[_U],_d:_G,_T:_G,_N:'',_L:'',_A5:'',_AV:A[_U],_AI:C.userInfo[_R],_q:A[_q],_Au:E.year},_C:_A1,_E:_A0,_S:A[_U]};B=await C.__fetch_safe(get_door_bill_api,J);C.handle_request_result_message('get_door_bill_api',B)
|
|
|
|
|
if _H in B and B[_H]==1 and _A in B:
|
|
|
|
|
if I in B[_A]:A[_AM]=B[_A][I]
|
|
|
|
|
if G in B[_A]:
|
|
|
|
|
if _AC not in A or A[_AC]!=E.year:A[_l]=B[_A][G];A[_AC]=E.year
|
|
|
|
|
else:
|
|
|
|
|
F={A.month:A for A in A[_l]};H=B[_A][G]
|
|
|
|
|
for D in H:
|
|
|
|
|
if D.month in F and _h in F[D.month]:D[_h]=F[D.month][_h]
|
|
|
|
|
A[_l]=H
|
|
|
|
|
if len(A[_l])>0:A[_w]=A[_l][-1]
|
|
|
|
|
async def __get_door_ladder(C,door_account,monthBill):
|
|
|
|
|
E=monthBill;A=door_account;I=A[_g];F=datetime.datetime.strptime(E[_AN],'%Y%m');G=f"{F.year}-{F.month:02d}";H={_A:{_I:configuration[_V][_I],_D:configuration[_V][_D],_T:configuration[_V][_T],_e:configuration[_V][_e],_q:A[_g],_d:A[_U],_Y:A[_Y],_Av:G,_AV:A[_U],_AL:A[_AW],_AI:C.userInfo[_R],_N:'',_L:'',_A5:C.userInfo[_AB],_A4:C.userInfo[_R]},_C:configuration[_V][_C],_E:configuration[_V][_E],_S:A[_U]};B=await C.__fetch(get_door_ladder_api,H);J=C.handle_request_result_message(_Aw,B)
|
|
|
|
|
if _H in B and B[_H]==1 and _A in B and _u in B[_A]:
|
|
|
|
|
D=B[_A][_u]
|
|
|
|
|
if len(D)!=0:D=D[0];E['ladder']=D
|
|
|
|
|
async def __get_door_mouth_bill(I,door_account,monthBill):
|
|
|
|
|
S=monthBill;O='quantity';N='priceName';K='amtGroupList';H='readList';E=door_account;C='amtList';B='pointList';T=datetime.datetime.strptime(S[_AN],'%Y%m');V=f"{T.year}-{T.month:02d}";W={_A:{_I:configuration[_V][_I],_D:configuration[_V][_D],_T:configuration[_V][_T],_e:configuration[_V][_e],_q:E[_g],_d:E[_U],_Y:E[_Y],_Av:V,_AV:E[_U],_AL:E[_AW],_AI:I.userInfo[_R],_N:'',_L:'',_A5:I.userInfo[_AB],_A4:I.userInfo[_R]},_C:configuration[_V][_C],_E:configuration[_V][_E],_S:E[_U]};F=await I.__fetch(get_door_ladder_api,W);X=I.handle_request_result_message(_Aw,F)
|
|
|
|
|
if _H in F and F[_H]==1 and _A in F and _u in F[_A]:
|
|
|
|
|
A=F[_A][_u][0];U=0;P=0;Q=0;L=0;R=0;M=[]
|
|
|
|
|
if H in A and len(A[H])>0:M=A[H]
|
|
|
|
|
elif B in A and len(A[B])>0 and H in A[B][0]and len(A[B][0][H])>0:M=A[B][0][H]
|
|
|
|
|
if len(M)>0:U=catchFloat(M[0],'activeCount')
|
|
|
|
|
J=[]
|
|
|
|
|
if C in A and len(A[C])>0:J=A[C]
|
|
|
|
|
elif B in A and len(A[B])>0 and C in A[B][0]and len(A[B][0][C])>0:J=A[B][0][C]
|
|
|
|
|
elif B in A and len(A[B])>0 and K in A[B][0]and len(A[B][0][K])>0 and C in A[B][0][K][0]and len(A[B][0][K][0][C])>0:J=A[B][0][K][0][C]
|
|
|
|
|
if len(J)>0:
|
|
|
|
|
for D in J:
|
|
|
|
|
if D[N]=='峰':P=catchFloat(D,O)
|
|
|
|
|
elif D[N]=='谷':Q=catchFloat(D,O)
|
|
|
|
|
elif D[N]=='平':L=catchFloat(D,O)
|
|
|
|
|
elif D[N]=='尖':R=catchFloat(D,O)
|
|
|
|
|
if L==0:L=P+Q+R
|
|
|
|
|
G={};G[_AX]=normal_round(U,2);G[_AY]=normal_round(P,2);G[_AZ]=normal_round(Q,2);G[_Aa]=normal_round(L,2);G[_Ab]=normal_round(R,2);S[_h]=G
|
|
|
|
|
async def __get_door_daily_bill(B,door_account,year,start_date,end_date):
|
|
|
|
|
D='sevenEleList';A=door_account;E={'params1':{_C:configuration[_C],_E:configuration[_E],_S:configuration[_S],_K:{_W:configuration[_K][_W],_Z:configuration[_K][_Z],_a:configuration[_K][_a],_X:configuration[_K][_X]},_A2:{_R:B.userInfo[_R]},_p:B.token},'params3':{_A:{_A4:B.userInfo[_R],_q:A[_g],_AL:_c,'endTime':end_date,_Y:A[_Y],_Au:year,_AJ:A.get(_U,A.get(_AK,_F)),_N:'',_L:'','startTime':start_date,_A5:B.userInfo[_AB],_D:configuration[_m][_D],_I:configuration[_m][_I],_e:configuration[_m][_e],_d:configuration[_m][_d],_T:configuration[_m][_T]},_C:configuration[_m][_C],_E:configuration[_m][_E],_S:A.get(_U,A.get(_AK,_F))},'params4':'010103'};C=await B.__fetch_safe(get_door_daily_bill_api,E);F=B.handle_request_result_message('get_door_daily_bill_api',C)
|
|
|
|
|
if _H in C and C[_H]==1 and _A in C and D in C[_A]:A[_A6]=C[_A][D]
|
|
|
|
|
async def __get_door_pay_record(A,door_account):B=door_account;D=B[_g];C={'params1':{_C:configuration[_C],_E:configuration[_E],_S:configuration[_S],_K:{_W:configuration[_K][_W],_Z:configuration[_K][_Z],_a:configuration[_K][_a],_X:configuration[_K][_X]},_A2:{_R:A.userInfo[_R]},_p:A.token},'params3':{_A:{_A4:A.userInfo[_R],'bgnPayDate':'2023-04-24',_I:configuration[_I],_q:B[_g],'endPayDate':'2024-04-24',_D:'webALIPAY_01','number':100,_Y:B[_Y],'page':_G,_AJ:B[_U],_d:_G,_T:_G,_N:'',_L:'',_A5:A.userInfo[_AB]},_C:'0101051',_E:_c,_S:B[_U]},'params4':'010104'};E=await A.__fetch(getJiaoFeiRecordApi,C)
|
|
|
|
|
async def get_qr_code(B):
|
|
|
|
|
A=await B.__get_request_key()
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
return await B.__get_qr_code()
|
|
|
|
|
async def check_qr_code(B):
|
|
|
|
|
A=await B.__get_qr_code_status()
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
A=await B.__get_qr_code_token()
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
return await B.__get_token()
|
|
|
|
|
async def send_phone_code(B,phone):
|
|
|
|
|
A=await B.__get_request_key()
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
return await B.__send_code(phone)
|
|
|
|
|
async def verfiy_phone_code(B,code):
|
|
|
|
|
A=await B.__verfiy_code(code)
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
return await B.__get_token()
|
|
|
|
|
async def __get_token(D):
|
|
|
|
|
A=await D.__get_request_key()
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
A=await D.__get_request_authorize()
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
A=await D.__get_web_token()
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
A=await D.__get_door_number()
|
|
|
|
|
if C in A and A[C]!=0:return A
|
|
|
|
|
D.need_login=z;await D.save_data();return{C:0,B:D.powerUserList}
|
|
|
|
|
async def refresh_data(B,setup=z):
|
|
|
|
|
q='daily_t_ele_num';p='daily_n_ele_num';o='daily_v_ele_num';n='daily_p_ele_num';m='daily_ele_num';l='last_month_ele_cost';j='last_month_ele_num';i='year_ele_cost';h='year_ele_num';g='monthEleNum';f='thisTPq';e='thisNPq';d='thisVPq';c='thisPPq';S='balance';Q='ladder_level_num';P='ladder_level';L='%Y%m%d';K='day';I='dayElePq';r=setup or int(Af.time()*1000)-B.timestamp>B.refresh_interval*3600*1000
|
|
|
|
|
if r is z:return
|
|
|
|
|
E=await B.__get_door_number()
|
|
|
|
|
if C in E and E[C]!=0:
|
|
|
|
|
A0.warning('刷新 Token');E=await B.__get_request_key()
|
|
|
|
|
if C in E and E[C]!=0:return
|
|
|
|
|
E=await B.__refresh_web_token()
|
|
|
|
|
if C in E and E[C]==0:await B.save_data()
|
|
|
|
|
else:B.need_login=AV;A0.error('刷新 Token 失败');return
|
|
|
|
|
E=await B.__get_door_number()
|
|
|
|
|
if C in E and E[C]!=0:B.need_login=AV;A0.error('重新请求失败');return
|
|
|
|
|
T=k.datetime.now();J=T-k.timedelta(days=1);u=f"{J.year}-{J.month:02d}-{J.day:02d}";M=J-k.timedelta(days=40);v=f"{M.year}-{M.month:02d}-{M.day:02d}"
|
|
|
|
|
async def __get_token(B):
|
|
|
|
|
A=await B.__get_request_key()
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
A=await B.__get_request_authorize()
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
A=await B.__get_web_token()
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
A=await B.__get_door_number()
|
|
|
|
|
if _B in A and A[_B]!=0:return A
|
|
|
|
|
B.need_login=_i;await B.save_data();return{_B:0,_A:B.powerUserList}
|
|
|
|
|
async def __refresh_token(A):
|
|
|
|
|
B=await A.__get_request_key()
|
|
|
|
|
if _B in B and B[_B]!=0:return
|
|
|
|
|
B=await A.__refresh_web_token()
|
|
|
|
|
if _B in B and B[_B]==0:A.need_login=_i;A.retry_times=0;await A.save_data()
|
|
|
|
|
elif A.retry_times>=3:A.need_login=_o
|
|
|
|
|
else:A.retry_times=A.retry_times+1
|
|
|
|
|
async def refresh_data(B,setup=_i,force_refresh=_i):
|
|
|
|
|
t='last_month_ele_cost';s='year_ele_cost';r='thisTPq';q='thisNPq';p='thisVPq';o='thisPPq';n='%Y%m%d';m='day';l='refresh_time';f=setup;e='last_month_ele_num';d='dayElePq';U='year_ele_num';G='balance'
|
|
|
|
|
if f is _o:
|
|
|
|
|
if B.dataVersion!=VERSION:B.powerUserList=_F
|
|
|
|
|
g=await B.__get_door_number()
|
|
|
|
|
if _B in g and g[_B]!=0:B.need_login=_o
|
|
|
|
|
if B.need_login is _o:
|
|
|
|
|
if B.powerUserList is not _F:
|
|
|
|
|
for A in B.get_door_account_list():A[l]='Token刷新失败,请重新登录'
|
|
|
|
|
LOGGER.error('国家电网 - Token刷新失败,请重新登录!');return
|
|
|
|
|
u=f or force_refresh or int(time.time()*1000)-B.timestamp>B.refresh_interval*3600*1000
|
|
|
|
|
if u is _i:return
|
|
|
|
|
V=datetime.datetime.now();H=V-datetime.timedelta(days=1);v=f"{H.year}-{H.month:02d}-{H.day:02d}";W=H-datetime.timedelta(days=40);w=f"{W.year}-{W.month:02d}-{W.day:02d}"
|
|
|
|
|
for A in B.powerUserList:
|
|
|
|
|
w=A[s];B.doorAccountDict[w]=A;await B.__get_door_balance(A);await B.__get_door_daily_bill(A,T.year,v,u);N=A[Y][0]
|
|
|
|
|
try:float(N[I])
|
|
|
|
|
except:A[Y].pop(0)
|
|
|
|
|
N=A[Y][0];F=k.datetime.strptime(N[K],L);U=0;V=0;W=0;X=0;Z=0
|
|
|
|
|
for D in A[Y]:
|
|
|
|
|
H=k.datetime.strptime(D[K],L)
|
|
|
|
|
if H.month!=F.month:break
|
|
|
|
|
U+=R(D,I);V+=R(D,c);W+=R(D,d);X+=R(D,e);Z+=R(D,f)
|
|
|
|
|
O=F-k.timedelta(days=F.day);a=f"{O.year}-{O.month:02d}"
|
|
|
|
|
if Ae not in A or A[Ae]!=a:await B.__get_door_bill(A,O.year);await B.__get_door_ladder(A,a)
|
|
|
|
|
x=k.datetime.strptime(A[Ae],'%Y%m')
|
|
|
|
|
if x.month==12:
|
|
|
|
|
G=0
|
|
|
|
|
for D in A[Y]:
|
|
|
|
|
H=k.datetime.strptime(D[K],L)
|
|
|
|
|
if H.month!=12:break
|
|
|
|
|
G+=R(D,I)
|
|
|
|
|
x=A[_g];B.doorAccountDict[x]=A;await B.__get_door_balance(A)
|
|
|
|
|
if B.retry_times!=0:return
|
|
|
|
|
if _v in A:
|
|
|
|
|
y=catchFloat(A[_v],'accountBalance');z=catchFloat(A[_v],'estiAmt');X=catchFloat(A[_v],'prepayBal');Y=catchFloat(A[_v],'sumMoney')
|
|
|
|
|
if y!=0:A[G]=Y
|
|
|
|
|
elif X==0 or X==Y:A[G]=Y
|
|
|
|
|
else:A[G]=X-z
|
|
|
|
|
h=catchFloat(A[_v],'historyOwe')
|
|
|
|
|
if h>0:A[G]=-h
|
|
|
|
|
else:LOGGER.error('国家电网账户余额获取失败!')
|
|
|
|
|
if G not in A:A[G]=0
|
|
|
|
|
await B.__get_door_daily_bill(A,V.year,w,v)
|
|
|
|
|
if _A6 not in A:LOGGER.error('国家电网无法获取日用电数据!');continue
|
|
|
|
|
Z=0;L=_i
|
|
|
|
|
for i in range(10):
|
|
|
|
|
D=A[_A6][i]
|
|
|
|
|
try:float(D[d]);L=_o;break
|
|
|
|
|
except:Z=Z+1
|
|
|
|
|
j=0;a=0;b=0;M=0;c=0
|
|
|
|
|
if L:
|
|
|
|
|
for i in range(Z):A[_A6].pop(0)
|
|
|
|
|
D=A[_A6][0];E=datetime.datetime.strptime(D[m],n);A['daily_lasted_date']=f"{E.year}-{E.month:02d}-{E.day:02d}";j=catchFloat(D,d);a=catchFloat(D,o);b=catchFloat(D,p);M=catchFloat(D,q);c=catchFloat(D,r)
|
|
|
|
|
if M==0:M=a+b+c
|
|
|
|
|
A['daily_ele_num']=normal_round(j,2);A['daily_p_ele_num']=normal_round(a,2);A['daily_v_ele_num']=normal_round(b,2);A['daily_n_ele_num']=normal_round(M,2);A['daily_t_ele_num']=normal_round(c,2);N=0;I=0;J=0;F=0;K=0
|
|
|
|
|
if L:
|
|
|
|
|
for C in A[_A6]:
|
|
|
|
|
A0=datetime.datetime.strptime(C[m],n)
|
|
|
|
|
if A0.month!=E.month:break
|
|
|
|
|
N+=catchFloat(C,d);I+=catchFloat(C,o);J+=catchFloat(C,p);F+=catchFloat(C,q);K+=catchFloat(C,r)
|
|
|
|
|
if F==0:F=I+J+K
|
|
|
|
|
A[_AX]=normal_round(N,2);A[_AY]=normal_round(I,2);A[_AZ]=normal_round(J,2);A[_Aa]=normal_round(F,2);A[_Ab]=normal_round(K,2)
|
|
|
|
|
if L:
|
|
|
|
|
O=E-datetime.timedelta(days=E.day);A1=f"{O.year}{O.month:02d}"
|
|
|
|
|
if _AC not in A or A[_AC]!=O.year or _w not in A or A[_w][_AN]!=A1:await B.__get_door_bill(A,O)
|
|
|
|
|
if _l in A:
|
|
|
|
|
for C in A[_l]:
|
|
|
|
|
if _h not in C:await B.__get_door_mouth_bill(A,C)
|
|
|
|
|
if _AM in A:A[U]=catchFloat(A[_AM],'totalEleNum');A[s]=catchFloat(A[_AM],'totalEleCost')
|
|
|
|
|
if U not in A:A[U]=0;A[s]=0
|
|
|
|
|
if _w in A:A[e]=catchFloat(A[_w],'monthEleNum');A[t]=catchFloat(A[_w],'monthEleCost');k=datetime.datetime.strptime(A[_w][_AN],'%Y%m')
|
|
|
|
|
if e not in A:A[e]=0;A[t]=0;k=H
|
|
|
|
|
P=0;Q=0;R=0;S=0;T=0
|
|
|
|
|
if k.month==12:P=N;Q=I;R=J;S=F;T=K
|
|
|
|
|
else:
|
|
|
|
|
G=0
|
|
|
|
|
for D in A[AD]:G+=R(D,g)
|
|
|
|
|
y=t(A[AD])
|
|
|
|
|
for D in A[Y]:
|
|
|
|
|
H=k.datetime.strptime(D[K],L)
|
|
|
|
|
if H.month<=y:break
|
|
|
|
|
G+=R(D,I)
|
|
|
|
|
if G<=2760:A[P]='第一阶梯';A[Q]=1
|
|
|
|
|
elif G<=4800:A[P]='第二阶梯';A[Q]=2
|
|
|
|
|
else:A[P]='第三阶梯';A[Q]=3
|
|
|
|
|
if Ac in A:
|
|
|
|
|
A[S]=R(A[Ac],'prepayBal');b=R(A[Ac],'historyOwe')
|
|
|
|
|
if b>0:A[S]=-b
|
|
|
|
|
else:A[S]=0
|
|
|
|
|
if Ad in A:A[h]=R(A[Ad],'totalEleNum');A[i]=R(A[Ad],'totalEleCost')
|
|
|
|
|
else:A[h]=0;A[i]=0
|
|
|
|
|
if AD in A:A[j]=R(A[AD][-1],g);A[l]=R(A[AD][-1],'monthEleCost')
|
|
|
|
|
else:A[j]=0;A[l]=0
|
|
|
|
|
if Y in A:A[m]=R(A[Y][0],I);A[n]=R(A[Y][0],c);A[o]=R(A[Y][0],d);A[p]=R(A[Y][0],e);A[q]=R(A[Y][0],f)
|
|
|
|
|
else:A[m]=0;A[n]=0;A[o]=0;A[p]=0;A[q]=0
|
|
|
|
|
A['month_ele_num']=U;A['month_p_ele_num']=V;A['month_v_ele_num']=W;A['month_n_ele_num']=X;A['month_t_ele_num']=Z;A['daily_lasted_date']=f"{F.year}-{F.month:02d}-{F.day:02d}"
|
|
|
|
|
if _l in A:
|
|
|
|
|
for C in A[_l]:
|
|
|
|
|
if _h in C:P+=C[_h][_AX];Q+=C[_h][_AY];R+=C[_h][_AZ];S+=C[_h][_Aa];T+=C[_h][_Ab]
|
|
|
|
|
P+=N;Q+=I;R+=J;S+=F;T+=K
|
|
|
|
|
A[U]=normal_round(P,2);A['year_p_ele_num']=normal_round(Q,2);A['year_v_ele_num']=normal_round(R,2);A['year_n_ele_num']=normal_round(S,2);A['year_t_ele_num']=normal_round(T,2);A[l]=datetime.datetime.strftime(V,'%Y-%m-%d %H:%M:%S')
|
|
|
|
|
await B.save_data()
|
|
|
|
|
async def get_door_account_list(A):return list(A.doorAccountDict.values())
|
|
|
|
|
def get_door_account_list(A):return list(A.doorAccountDict.values())
|
|
|
|
|
def get_door_account(A):return A.doorAccountDict
|