def _initSetting(self): #初始根目录信息 strDir, strName = myIO.getPath_ByFile(__file__) Dir_Base = os.path.abspath(os.path.join(strDir, "..")) Dir_DataDB = Dir_Base + "/Data/DB_Trade/" gol._Set_Setting('manageBills_Stock', myManager_Bill.myManager_Bill(Dir_DataDB)) #实例 交易管理器
def Debug_byTag(tag, msg = "", bRecord = False, bTitle = True): nTime = time.time() ms_Deepth = gol._Get_Setting('Debug_Depth') if(bRecord): #记录信息 ms_Msgs[tag] = nTime Debug(tag, "", msg, "\n ", "--Start at", datetime.datetime.fromtimestamp(nTime).strftime('%H:%M:%S.%f')) ms_Deepth += 1 gol._Set_Setting('Debug_Depth', ms_Deepth) elif(ms_Msgs.__contains__(tag)): nInterval = nTime - ms_Msgs[tag] ms_Deepth -= 1 gol._Set_Setting('Debug_Depth', ms_Deepth) if(bTitle): Debug(tag, "", msg, "\n ", "--End at", datetime.datetime.fromtimestamp(nTime).strftime('%H:%M:%S.%f'), "\n ", "--耗时:", round(nInterval, 3), "秒") return nInterval
def __init__(self, useID): self.usrID = useID #用户名 self.usrTime = "" #数据日期(月) self.remark = "" #备注 #初始数据路径 strDir, strName = myIO.getPath_ByFile(__file__) self.Dir_Base = os.path.abspath(os.path.join(strDir, "../../..")) self.Dir_DataDB = self.Dir_Base + "/Data/DB_Trade/" #初始全局账单管理器 from myGlobal import gol gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) gol._Set_Setting('manageBills', myManager_Bill.myManager_Bill( self.Dir_DataDB)) #实例 账单管理器 self.billManager = gol._Get_Setting('manageBills', None)
def Init_UserInfo(self, usrName, usrNameNick, usrID): if (usrName == "zxcRobot" and usrID == "zxcRobotID" and usrNameNick == "zxc机器人"): strDir, strName = myIO.getPath_ByFile(__file__) strDir_Base = os.path.abspath(os.path.join(strDir, "../../..")) content = myIO.getContent( strDir_Base + '\zxcPy.Weixin\Data\zxcWeixin.cache', True, False, True) if (content != ""): dictUser = myData_Trans.Tran_ToDict(content) self.usrName = usrName self.usrNameNick = dictUser.get("NickName", "zxc机器人") #归属用户昵称 self.usrID = dictUser.get("UserName", "zxcRobotID") #归属用户昵称 gol._Set_Setting('usrName', self.usrName) gol._Set_Setting('usrNameNick', self.usrNameNick) gol._Set_Setting('usrID', self.usrID) self.Init()
def _initMsg_Swap(useMQ=False): if (gol._Get_Setting('dirMsgsSwaps', None) == None): gol._Set_Setting( 'dirMsgsSwaps', "D:/myCode/zxcProj/src/Zxc.Python/zxcPy.Weixin/Data/Swaps" ) #实例 消息缓存 gol._Set_Setting('bufferMsgs', myMsgs("zxc", "zxc", "", "")) #实例 消息缓存 gol._Set_Setting('manageMsgs', myManager_Msg()) #实例 消息管理器并初始消息api及消息队列 if (useMQ): gol._Get_Setting('manageMsgs', None)._Init_MQ(plat=myMsgPlat.robot, msgMQ_Sender=myMQ_Rabbit.myMQ_Rabbit( True, 'zxcMQ_robot'), msgUrl_API="") #不使用api回调 gol._Get_Setting('manageMsgs', None)._Init_MQ(plat=myMsgPlat.wx, msgMQ_Sender=myMQ_Rabbit.myMQ_Rabbit( True, 'zxcMQ_wx'), msgUrl_API="", usrHelper='filehelper') #不使用api回调 gol._Get_Setting('manageMsgs', None)._Init_MQ(plat=myMsgPlat.usrWin, msgMQ_Sender=myMQ_Rabbit.myMQ_Rabbit( True, 'zxcMQ_usrWin'), msgUrl_API="", isAuto_ack=True) #不使用api回调 else: dirMsgsSwaps = gol._Get_Setting('dirMsgsSwaps') pDataSwap_In = myData_Swap.myData_Swap_FileIO("msgWx", dirMsgsSwaps + "/SwapMsg", stepSwaps=1, delayedTime=0, useAck=True, nameSwap="zxcSwap_wx") gol._Get_Setting('manageMsgs')._Init_Swap(plat=myMsgPlat.wx, msgSwap_Sender=pDataSwap_In, isAuto_ack=True, msgUrl_API="") pass
@author: zhang bin @email: [email protected] Rest Server --服务启动, """ import mySystem mySystem.Append_Us("", False) import myWeb, myDataDB_Company from myGlobal import gol gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) #提取端口号(环境变量) HOST, PORT, dirBase = myWeb.get_InfoServer(__file__, 'SERVER_HOST', 'SERVER_PORT', 5555) gol._Set_Setting("serverUrl", "http://" + HOST + ":" + str(PORT)) gol._Set_Setting("serverBaseDir", dirBase) #初始Web程序 appWeb = myWeb.myWeb("0.0.0.0", PORT, webFolder = dirBase + "/" ) appWeb.add_Web() appWeb.add_API(myWeb.myAPI, '/test') #载入web页面类 import zxcPy_Form.infoCompany #公司信息数据初始 dbCompany = myDataDB_Company.myDataDB_Company("dbCompany", dirBase + "/Data/DB_Company/") gol._Set_Value("dbCompany", dbCompany)
# 自定义简易库表操作-股票收益排名(按月更新) class myDataDB_StockReturns_Rank(myData_DB.myData_Table): def __init__(self, nameDB="zxcDB_StockReturns_Rank", dir=""): #初始根目录信息 if (dir == ""): strDir, strName = myIO.getPath_ByFile(__file__) self.Dir_Base = os.path.abspath(os.path.join(strDir, "../../..")) self.Dir_DataDB = self.Dir_Base + "/Data/DB_Data/" myIO.mkdir(self.Dir_DataDB, False) super().__init__(nameDB, self.Dir_DataDB, False) #初始全局消息管理器 from myGlobal import gol gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) gol._Set_Setting('zxcdbStockReturns', myDataDB_StockReturns()) #实例 股票收益库对象 gol._Get_Setting('zxcdbStockReturns').Add_Fields( ['用户名', '姓名', '收益', '日期'], ['string', 'string', 'float', 'datetime'], []) #主启动程序 if __name__ == "__main__": #测试库表操作 pDB = gol._Get_Setting('zxcdbStockReturns') # 添加行数据 print(pDB.Add_Row({'用户名': '茶叶一主号', '收益': 0.1576, '日期': '2019-08-27'})) print(pDB.Add_Row({'用户名': '墨紫', '收益': '0.1476', '日期': '2019-08-26'})) print(pDB.Add_Row({'用户名': '墨紫', '收益': '0.1976', '日期': '2019-08-27'})) print(pDB.Add_Row({'用户名': '墨紫', '收益': '0.2976', '日期': '2019-08-27'}, True)) # 自定义筛选
#引用根目录类文件夹--必须,否则非本地目录起动时无法找到自定义类 mySystem.Append_Us("/zxcPy.APIs", False, __file__) mySystem.Append_Us("/zxcPy.Webs", False, __file__) mySystem.Append_Us("", False) import myWeb from myGlobal import gol #主程序启动 if __name__ == '__main__': gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) #单例运行检测 if (gol._Run_Lock(__file__) == False): exit(0) #gol._Set_Setting("CanPrint", False) gol._Set_Setting("serverUrl", 'http://106.13.206.223:8668/') import myRobot_Updata #更新说明 import myAPI_Robot, myWeb_Order, myWeb_Stock #会重启导致多次输出信息,调整为不输出打印信息 pWeb = myWeb.myWeb("0.0.0.0", 8668, webFolder=myRobot_Updata.myUpdata.Dir_Base + "/zxcPy.Webs/") pWeb.add_API(myWeb.myAPI, '/test') # 添加Robot接口并启动API、Webs myAPI_Robot.add_APIs(pWeb) myWeb_Order.add_Webs(pWeb) myWeb_Stock.add_Webs(pWeb) pWeb.run()
#查询、统计 def _Find(self, usrID, bAuto_Creat=False): bills = self.usrBills.get(usrID, None) if (bills == None and bAuto_Creat == True): bills = myObj_Bills(usrID, self.Dir_DataDB) return bills #用户账单 def __getitem__(self, usrID): return self._Find(usrID, True) #初始全局消息管理器 from myGlobal import gol gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) gol._Set_Setting('manageBills', myManager_Bill("")) #实例 账单管理器 #主启动程序 if __name__ == "__main__": #测试红包记录 pManager = gol._Get_Setting('manageBills', None) pBills = pManager['Test'] #pManager['朱美娜'].Save_DB() pBills.Add("", "门口超市", 10.2, "蔬菜", "", "", "", "") pBills.Add("", "门口超市", 20.4, "菜", "", "", "", "2018-8-20") pBills.Add("", "西边菜市场", 10.4, "菜", "", "", "", "2018-8-22") pBills.Add("", "西边菜市场", 10.4, "菜", "", "", "", "2018-8-23") pBills.Add("", "西边菜市场", 10.4, "菜", "", "", "", "2018-8-16") pBills.Add("", "西边菜市场", 16.5, "猪肉", "", "", "", "2018-8-29")
noteMsg['payTransferid'] = myData.Cut_str(msg['Content'],"<transferid><![CDATA[","]]></transferid>")[2] noteMsg['payTransfertime'] = myData.Cut_str(msg['Content'],"<begintransfertime><![CDATA[","]]></begintransfertime>")[2] noteMsg['payUser'] = myData.iif(noteMsg['paySubType'] == "1", msg['FromUserName'], msg['ToUserName']) if(noteMsg['payUser'] == self.usrID): noteMsg['payUser'] = "******" # 主动转账 return noteMsg #消息超时校检 def Check_TimeOut(self, msg, nTimeOut = 600): return self.usrMMsg.Check_TimeOut(msg, nTimeOut) #主启动程序 if __name__ == "__main__": gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) gol._Set_Setting("CanPrint_Debug", False) #消息处理 pWxReply = myWx_Reply("zxcc") pWxReply._Init("zxc", "墨紫") #权限初始 pWxReply.Done('zxc_ID','zxc_0',"墨紫",'@@Repeater') pWxReply.Done('zxc_ID','zxc_0',"墨紫",'@@Repeater') print()
strDir, strName = myIO.getPath_ByFile(__file__) strDir_Base = os.path.abspath(os.path.join(strDir, "../../..")) content = myIO.getContent( strDir_Base + '\zxcPy.Weixin\Data\zxcWeixin.cache', True, False, True) if (content != ""): dictUser = myData_Trans.Tran_ToDict(content) self.usrName = usrName self.usrNameNick = dictUser.get("NickName", "zxc机器人") #归属用户昵称 self.usrID = dictUser.get("UserName", "zxcRobotID") #归属用户昵称 gol._Set_Setting('usrName', self.usrName) gol._Set_Setting('usrNameNick', self.usrNameNick) gol._Set_Setting('usrID', self.usrID) self.Init() #定义全局方法集并缓存 gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) gol._Set_Value('rootRobot', myRoot()) #主启动程序 if __name__ == "__main__": pRoot = gol._Get_Value('rootRobot', None) print(pRoot.usrName) gol._Set_Setting('usrName', "zxcRobot2") gol._Set_Setting('usrNameNick', "zxc机器人2") gol._Set_Setting('usrID', "zxcRobotID2") pRoot.Init() print(pRoot.usrName)
#消息超时校检 def Check_TimeOut(self, msg, nTimeOut = 600, nTimeNow = -1): #时间校检, 十分钟内缓存数据有效(过早时间数据忽略) msgTime = msg.get('time', -1) if(nTimeNow < 0): nTimeNow = myData_Trans.Tran_ToTime_int() if(abs(msgTime - nTimeNow) >= 600): myDebug.Warnning("已超时::", nTimeNow, ",", msgTime) return True return False #初始全局消息管理器 from myGlobal import gol gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) gol._Set_Setting('bufferMsgs', myMsgs("zxc", "zxc", "", "")) #实例 消息缓存 gol._Set_Setting('manageMsgs', myManager_Msg()) #实例 消息管理器并初始消息api及消息队列 gol._Get_Setting('manageMsgs', None)._Init(plat = myMsgPlat.robot, msgMQ_Sender = myMQ_Rabbit.myMQ_Rabbit(True, 'zxcMQ_robot'), msgUrl_API = "") #不使用api回调 gol._Get_Setting('manageMsgs', None)._Init(plat = myMsgPlat.wx, msgMQ_Sender = myMQ_Rabbit.myMQ_Rabbit(True, 'zxcMQ_wx'), msgUrl_API = "", usrHelper = 'filehelper') #不使用api回调 if __name__ == '__main__': pMMsg = gol._Get_Setting('manageMsgs') pMMsg.Init_LogDir("D:/myGit/zxcProj/src/Zxc.Python/zxcPy.Robot/Log/Msgs/") #组装消息 msg = pMMsg.OnCreatMsg() msg["usrName"] = "茶叶一主号" msg["usrID"] = "zxcID" msg["msg"] = "测试消息py" msg["msgID"] = "msgID-***"
@email: [email protected] Python的数据交换接口实现 """ import sys, os, ast, re, mySystem #引用根目录类文件夹--必须,否则非本地目录起动时无法找到自定义类 mySystem.Append_Us("", False) import myWeb, myIO from myGlobal import gol gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) gol._Set_Value("msgSet_usrMQ", False) strDir, strName = myIO.getPath_ByFile(__file__) dirBase = os.path.abspath(os.path.join(strDir, "..")) gol._Set_Setting('dirMsgsSwaps', dirBase + "/Data/Swaps") #实例 消息缓存 #初始数据教会对象 import myData_Swap pDataSwap_In = myData_Swap.myData_Swap_FileIO("msgWx", dirBase + "/Data/Swaps/SwapMsg", isSender=True, stepSwaps=1, delayedTime=0, useAck=True, nameSwap="zxcSwap_wx") pDataSwap_Out = myData_Swap.myData_Swap_FileIO( "msgWx", dirBase + "/Data/Swaps/SwapMsg_Out") gol._Set_Value('dataSwap_msgWx', pDataSwap_In, True) gol._Set_Value('dataSwap_msgWx_out', pDataSwap_Out, True)
time.sleep(nSleep) pass # 变动信息装饰函数 def changeDataSwap(self): # 定义一个嵌套函数 def _change(fn): self.funChange = fn return _change #主启动程序 if __name__ == "__main__": gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) gol._Set_Setting("CanPrint_Debug", True) # 装饰函数,文件变动触发 pDataSwap = myData_Swap_FileIO( "Quote", "D:/myCode/zxcProj/src/Zxc.Python/zxcPy.Robot.Spider/Data/Swaps") @pDataSwap.changeDataSwap() def Reply(lstData): for x in lstData: print(lstData) pDataSwap.ackDataSwap(x) pass #文件交换处理 pDataSwap.SwapData_In(1)
pUser = self._Find(usrID, usrName, usrName_Nick, "", "", False) if (pUser == None): return False self.usrList.pop(pUser.usrInd) self.usrList_Name.pop(pUser.usrName) self.usrList_Name_Nick.pop(pUser.usrName_Nick) self.usrList_usrID.pop(pUser.usrID) self.usrList_usrID_sys.pop(pUser.usrID_sys) return True # 用户关联关系校正 def Check_RelationID_sys(self, pUser): return True #初始全局用户管理 gol._Set_Setting('sysUsers', myRoot_Usrs("@@zxcPy", "zxcPy", "zxcPy_sys")) #实例 用户对象集 #主启动程序 if __name__ == "__main__": pUsers = myRoot_Usrs("@@zxcPy", "zxcPy", "zxcPy_sys") pUsers._Save() exit(0) print( pUsers.Add( { 'usrName': "Test", 'usrName_Nick': "测试", 'usrID': "@@1", 'usrType': "wx" }, True))
except Exception as ex: myError.Error(ex) return True return False #运行-开始 def Start(self): self.isRunning = True self._Init_MQ(self.isRunning) #初始全局消息管理器 from myGlobal import gol gol._Init() #先必须在主模块初始化(只在Main模块需要一次即可) if (gol._Get_Setting('robotReply', None) == None): gol._Set_Setting('robotReply', myRobot_Reply_MQ(True)) #实例 机器人消息处理工厂类 myDebug.Print("消息处理工厂类::", "MQ" + ">> ", "--已开启\r\n") #主启动程序 if __name__ == "__main__": #机器人消息处理 pWxReply = gol._Get_Setting('robotReply') #实例生产者、消费者 from myGlobal import gol pMMsg = gol._Get_Setting('manageMsgs') #用户信息 msg = { "usrID": 'zxc_0', "usrName": '墨紫',