# -*- coding: utf-8 -*- import sys sys.path.append('../local_packages') import q7 import f7 import os import json import time import datetime import hashlib import urllib.request import tornado.ioloop import tornado.web def md5Sign(params, secret, timestamp, connstr = '&', secret_connstr = ':'): params_str = '' for key in sorted(params.keys()): params_str = params_str + key + '=' + str(params[key]) + connstr if params_str != '' and connstr != '': params_str = params_str[0:-1] str1 = params_str + secret_connstr + str(timestamp) + secret try: m5 = hashlib.md5() m5.update(str1.encode('utf-8')) return m5.hexdigest() except Exception as e: print('md5Sign error: ' + str(e), flush=True) def getDaySeconds(time_val, incdays): time_zone = 8 dayseconds = int((time_val + time_zone * 3600)/3600/24 + incdays) * 3600 * 24 - 3600 * time_zone; print(dayseconds, flush=True) return dayseconds def sendNotify(conf, sendtime): try: print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%s"), flush=True) print('sendNotify start', flush=True) params = {'key' : 'kingsome'} secret = 'fc38349c5d084e920925e614c420be9f' timestamp = time.time() md5signstr = md5Sign(params, secret, timestamp) url = conf['notify_url'] + '×tamp=' + str(timestamp) + '&sign=' + md5signstr req = urllib.request.Request(url) data = urllib.request.urlopen(req).read() print('sendNotify end', flush=True) except Exception as e: print('sendNotifu error: ' + str(e), flush=True) #进入下一次循环 def _sendNotify(conf, sendtime): if f7.app.ext['sendNotify']: f7.timer.callAt(getDaySeconds(time.time(), 1) + sendtime, lambda : _sendNotify(conf, sendtime)) return def donekefu_callback(): f7.app.ext['sendNotify'] = False f7.timer.callAt(getDaySeconds(time.time(), 1) + sendtime, lambda : _sendNotify(conf, sendtime)) f7.app.ext['sendNotify'] = True f7.app.createAsyncTask(donekefu_callback, sendNotify(conf, sendtime), (conf, sendtime)) def sendOrderNotify(conf, sendtime): try: print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%s"), flush=True) print('sendOrderNotify start', flush=True) params = {'key' : 'kingsome'} secret = 'fc38349c5d084e920925e614c420be9f' timestamp = time.time() md5signstr = md5Sign(params, secret, timestamp) url = conf['subscribe_notify_url'] + '×tamp=' + str(timestamp) + '&sign=' + md5signstr req = urllib.request.Request(url) data = urllib.request.urlopen(req).read() print('sendOrderNotify end', flush=True) except Exception as e: print('sendOrderNotify error: ' + str(e), flush=True) #进入下一次循环 def _sendOrderNotify(conf, sendtime): if f7.app.ext['sendOrder']: f7.timer.callAt(getDaySeconds(time.time(), 1) + sendtime, lambda : _sendOrderNotify(conf, sendtime)) return def doneorder_callback(): f7.app.ext['sendOrder'] = False f7.timer.callAt(getDaySeconds(time.time(), 1) + sendtime, lambda : _sendOrderNotify(conf, sendtime)) f7.app.ext['sendOrder'] = True f7.app.createAsyncTask(doneorder_callback, sendOrderNotify, (conf, sendtime)) def test(request): conf = json.loads(open('../config/kefu_robot.json', 'r').read()) _sendOrderNotify(conf, conf['signtime']) return '{"error_code":0, "error_msg":""}' if __name__ == "__main__": print('start!', flush=True) q7.xPrint('pid %d' % os.getpid()) f7.app.init('/data/logs/kefu_robot/logs') f7.udplog.info('kefu_robot start pid:' + str(os.getpid())) f7.app.ext['sendOrder'] = False f7.app.ext['sendNotify'] = False conf = json.loads(open('../config/kefu_robot.json', 'r').read()) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['sendtime1'], lambda : _sendNotify(conf, conf['sendtime1'])) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['sendtime2'], lambda : _sendNotify(conf, conf['sendtime2'])) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['sendtime3'], lambda : _sendNotify(conf, conf['sendtime3'])) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['signtime'], lambda : _sendOrderNotify(conf, conf['signtime'])) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['boxtime'], lambda : _sendOrderNotify(conf, conf['boxtime'])) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['diamondtime1'], lambda : _sendOrderNotify(conf, conf['diamondtime1'])) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['diamondtime2'], lambda : _sendOrderNotify(conf, conf['diamondtime2'])) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['diamondtime3'], lambda : _sendOrderNotify(conf, conf['diamondtime3'])) f7.timer.callAt(getDaySeconds(time.time(), 1) + conf['seasontime'], lambda : _sendOrderNotify(conf, conf['seasontime'])) f7.app.listen(conf['listen_port']) f7.app.registerHandler('Ops', 'test', test) f7.app.start()