123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import hashlib
- import hmac
- import json
- import logging
- import os
- import random
- import requests
- from base import init_env
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "configs.testing")
- init_env(interactive = False)
- from apps.web.user.models import RechargeRecord
- from apps.web.south_intf.swap_carcharger import SwapContract
- from apps.web.api.utils import AES_CBC_PKCS5padding_encrypt, AES_CBC_PKCS5padding_decrypt
- logger = logging.getLogger(__name__)
- # newObj = SwapContract(
- # source = u'快电',
- # swapLabel = 'wfl_kd',
- # operatorType = 'agent',
- # operatorInnerId = '5b5d87ebaa4fca310e25c5b1',
- # OperatorID = 'MA4KWBHB5',
- # OperatorName = u'微付乐',
- # OperatorTell = '18963981712',
- # OperatorTel2 = '19063981712',
- # OperatorRegAddress = u'光谷物联港',
- # OperatorNote = u'oooo',
- # northToken = 'waerasasfwr322',
- # northPort = 'localhost:1883',
- #
- # secretFromUs = 'UePNOXPHzb4Jz6cD',
- # sigSecretFromUs = 'y6J5Qneg7e9tZ2XI',
- # dataSecretFromUs = 'G6WRJDkZUFW3XSmP',
- # dataSecretIVFromUs = 'vN2yZWX54Z9zaIZQ',
- #
- # operatorId2Us = 'MA005DBW1',
- # secret2Us = 'UePNOXPHzb4Jz6cD',
- # sigSecret2Us = 'y6J5Qneg7e9tZ2XI',
- # dataSecret2Us = 'G6WRJDkZUFW3XSmP',
- # dataSecretIV2Us = 'vN2yZWX54Z9zaIZQ',
- # )
- #
- # newObj.save()
- # dev = Device.get_dev_by_l('32010600110308')
- # box = ActionDeviceBuilder.create_action_device(dev)
- # box.get_port_status_from_dev()
- kdOperId = 'MA005DBW1'
- kdSecret = 'UePNOXPHzb4Jz6cD'
- sigSecret2Us = 'y6J5Qneg7e9tZ2XI'
- dataSecret2Us = 'G6WRJDkZUFW3XSmP'
- dataSecretIV2Us = 'vN2yZWX54Z9zaIZQ'
- testUrl = 'http://211.159.224.10' #'http://localhost:8011' #
- def get_sig( data):
- sigSecret = sigSecret2Us
- return hmac.new(sigSecret, data, hashlib.md5).hexdigest().upper()
- def get_token():
- url = '%s/api/swap/wfl_kd/query_token' % testUrl
- data = {
- "OperatorID": kdOperId,
- "OperatorSecret": kdSecret
- }
- result = send_request(url, **data)
- ret = result.get("Ret")
- print 'ret is ',ret
- if ret != 0:
- return
- responseJson = result.get("Data")
- print 'get token data :',responseJson
- responseData = json.loads(
- AES_CBC_PKCS5padding_decrypt(s=responseJson, dataSecret=dataSecret2Us, dataSecretIV=dataSecretIV2Us) or "{}"
- )
- # 防止解析出错
- token = responseData.get("AccessToken", "")
- print 'token is :',token
- return token
-
- def send_request( url, **kwargs):
- """
- 主动发送HTTP请求获取数据 秘钥以及签名
- :param url:
- :param kwargs:
- :return:
- """
- headers = {"Content-Type": "application/json;charset=utf-8"}
- token = kwargs.pop("token", None)
-
- if token: headers.update({"Authorization": "Bearer {}".format(token)})
- timeout = kwargs.pop("timeout", 60)
- # 主动推送 加密以及向量为 dataSecret 和 dataSecretIV
- data = AES_CBC_PKCS5padding_encrypt(
- json.dumps(kwargs), dataSecret=dataSecret2Us, dataSecretIV=dataSecretIV2Us
- )
-
- data = {
- "OperatorID": kdOperId,
- "TimeStamp": datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
- "Seq": "{:0>4}".format(random.randint(1, 1)),
- "Data": data
- }
-
- sig = get_sig(data.get("OperatorID") + data.get("Data") + data.get("TimeStamp") + data.get("Seq"))
- data.update({"Sig": sig})
-
- try:
- response = requests.post(url = url, json = data, headers = headers, timeout = timeout)
- except requests.Timeout:
- return dict()
- except Exception as e:
- return dict()
-
- if response.status_code != 200:
- return dict()
-
- return response.json()
- # 测试query stations info
- token = get_token()
- # LastQueryTime = '2022-02-01 00:00:00'
- # pageNo = 1
- # pageSize = 10
- # result = send_request('%s/api/swap/wfl_kd/query_stations_info' % testUrl,token=token,LastQueryTime=LastQueryTime,pageNo=pageNo,pageSize=pageSize)
- # LastQueryTime = '2022-02-01 00:00:00'
- # pageNo = 1
- # pageSize = 10
- # result = send_request('%s/api/swap/wfl_kd/query_stations_info' % testUrl,token=token,LastQueryTime=LastQueryTime,pageNo=pageNo,pageSize=pageSize)
- # from apps.web.constant import Const
- # dev = Device.get_dev_by_l('11112203240001')
- # SwapContract.notify_2_all_northers_port_status(dev, 1, Const.DEV_WORK_STATUS_FAULT)
- # StationIDs = ['d6d5e1621d073a0f']
- # result = send_request('%s/api/swap/wfl_kd/query_station_status'% testUrl,token=token,StationIDs=StationIDs)
- # StationID = 'd6d5e1621d073a0f'
- # StartTime = '2000-02-01'
- # EndTime = '2023-02-01'
- # result = send_request('%s/api/swap/wfl_kd/query_station_stats'% testUrl,token=token,StationID=StationID,StartTime=StartTime,EndTime = EndTime)
- # EquipAuthSeq = 'd6d5e1621d073a0f'
- # ConnectorID = '62c3d8e5b7c98916a00bf0be'
- # result = send_request('%s/api/swap/wfl_kd/query_equip_auth'% testUrl,token=token,EquipAuthSeq=EquipAuthSeq,ConnectorID=ConnectorID)
- # EquipBizSeq = 'd6d5e1621d073a0f'
- # ConnectorID = '623c3d54b7c98903d90b4e8e'
- # result = send_request('%s/api/swap/wfl_kd/query_equip_business_policy'% testUrl,token=token,EquipBizSeq=EquipBizSeq,ConnectorID=ConnectorID)
- # StartChargeSeq = 'd6d5e1621d073a0f2222'
- # ConnectorID = '62c3d8e5b7c98916a00bf0be'
- # QRCode = ''
- # result = send_request('%s/api/swap/wfl_kd/query_start_charge'% testUrl,token=token,StartChargeSeq=StartChargeSeq,ConnectorID=ConnectorID,QRCode=QRCode)
- # StartChargeSeq = 'd6d5e1621d073a0f2222'
- # result = send_request('%s/api/swap/wfl_kd/query_equip_charge_status'% testUrl,token=token,StartChargeSeq=StartChargeSeq)
- # StartChargeSeq = 'd6d5e1621d073a0f2222'
- # ConnectorID = '623c3d54b7c98903d90b4e8e'
- # result = send_request('%s/api/swap/wfl_kd/query_stop_charge'% testUrl,token=token,StartChargeSeq=StartChargeSeq,ConnectorID=ConnectorID)
- # dev = Device.get_dev_by_l('11112203240001')
- # SwapContract.notify_2_all_northers_port_network_status(dev,DeviceOnlineStatus.DEV_STATUS_OFFLINE)
- # SwapContract.notify_2_all_northers_port_status(dev,1,1)
- # orderStatus ={
- # 'StartChargeSeq':'123412341234',
- # 'StartChargeSeqStat':4 ,
- # 'ConnectorID':'2323423',
- # 'ConnectorStatus':2,
- # 'CurrentA':2,
- # 'VoltageA':220.0,
- # 'Soc':0,
- # 'StartTime':'2022-02-23 00:00:23',
- # 'EndTime':'2022-02-23 00:00:23',
- # 'TotalPower':3,
- # 'TotalMoney':4,
- # 'ConnectorId':'223232323',
- # }
- #
- # SwapContract.notify_2_all_northers_order_status(dev,orderStatus)
- # result = {
- # 'StartChargeSeq':'123412341234',
- # 'StartChargeSeqStat':4 ,
- # 'ConnectorID':'2323423',
- # 'ConnectorStatus':2,
- # 'StartTime':'2022-02-23 00:00:23',
- # 'EndTime':'2022-02-23 00:00:23',
- # 'TotalPower':3,
- # 'TotalElecMoney':4,
- # 'TotalSeviceMoney':3,
- # 'TotalMoney':4,
- # 'StopReason':2
- # }
- # SwapContract.notify_2_all_northers_order_info(dev,result)
- from apps.web.device.models import Device,Part
- def notify_order(orderNo):
- rechargeRcd = RechargeRecord.objects(wxOrderNo = orderNo).first()
- if rechargeRcd is None:
- return
- devNo = rechargeRcd.devNo
- part = Part.objects(logicalCode = rechargeRcd.logicalCode,partNo = str(rechargeRcd.extraInfo['portNo'])).first()
- if part is None:
- return
- devObj = Device.objects(devNo = devNo).first()
- if devObj is None:
- return
- feeMode= devObj.otherConf.get('feeMode')
- serveMoney = feeMode['jianServe'] * consumeDict['jianElec'] + feeMode['fengServe'] * consumeDict['fengElec'] \
- + feeMode['pingServe'] * consumeDict['pingElec'] + feeMode['guServe'] * consumeDict['guElec']
-
- reasonAdapter = {'40':1,'41':2,'42':1,'43':1,'44':1,'45':0,'00':1}
- result = {
- 'StartChargeSeq':rechargeRcd.wxOrderNo,
- 'ConnectorID':str(part.id),
- 'StartTime':rechargeRcd.time,
- 'EndTime':consumeDict['finishTime'],
- 'TotalPower':consumeDict['elec'],
- 'TotalElecMoney':consumeDict['spendMoney'] - serveMoney,
- 'TotalSeviceMoney':serveMoney,
- 'TotalMoney':consumeDict['spendMoney'],
- 'StopReason':reasonAdapter.get(data[312:328],0) if int(data[312:328]) <= 45 else int(data[312:328]) - 65
- }
- consumeRcd.servicedInfo.update(result)
- consumeRcd.save()
- SwapContract.notify_2_all_northers_order_info(self.device,result)
- print 'OK'
|