def TransmissionTemplateDemo(content): template = TransmissionTemplate() template.transmissionType = 2 template.appId = APPID template.appKey = APPKEY template.transmissionContent = content #'请填入透传内容' # iOS 推送需要的PushInfo字段 前三项必填,后四项可以填空字符串 # template.setPushInfo(actionLocKey, badge, message, sound, payload, locKey, locArgs, launchImage) # template.setPushInfo("", 0, "", "com.gexin.ios.silence", "", "", "", ""); # APN简单推送 alertMsg = SimpleAlertMsg() alertMsg.alertMsg = "兔乖乖" apn = APNPayload() apn.alertMsg = alertMsg apn.badge = 2 # apn.sound = "" apn.addCustomMsg("payload", "payload") # apn.contentAvailable=1 # apn.category="ACTIONABLE" template.setApnInfo(apn) logger.info( "TransmissionTemplateDemo: transmissionContent={}".format(content)) return template
def pushMessageToList(tokenList, template): # 消息模版: # 1.TransmissionTemplate:透传功能模板 # 2.LinkTemplate:通知打开链接功能模板 # 3.NotificationTemplate:通知透传功能模板 # 4.NotyPopLoadTemplate:通知弹框下载功能模板 # template = NotificationTemplateDemo() # template = LinkTemplateDemo() # template = TransmissionTemplateDemo() # template = NotyPopLoadTemplateDemo() message = IGtListMessage() message.data = template message.isOffline = True message.offlineExpireTime = 1000 * 3600 * 12 message.pushNetWorkType = 0 arr = [] for token in tokenList: target = Target() target.appId = APPID target.clientId = token target.alias = Alias arr.append(target) contentId = push.getContentId(message) ret = push.pushMessageToList(contentId, arr) logger.info("pushMessageToList result = {}".format(ret))
def applyPermission(args): userId = args.get('UserId', '') phone = args.get('Phone', '') user = User.getUserByIdOrPhoneOrMail(id=userId, phone=phone) applyDetail = args.get('ApplyDetail') macAddress = applyDetail.get('Mac', '') startTime = applyDetail.get('StartTime', '') if applyDetail.get('StartTime', '') else None endTime = applyDetail.get('EndTime', '') if applyDetail.get('EndTime', '') else None money = applyDetail.get('Money', 0.0) machine = Machine.query.filter_by(macAddress=macAddress).first() if not machine: return jsonify({'Status': 'Failed', 'StatusCode':-1, 'Msg': "MacAddress {} does't exist".format(macAddress)}), 400 needPermission = applyDetail.get('Permission') reason = applyDetail.get('Reason') shenQing = ShenQing(user.id, machine.id, reason=reason, needPermission=needPermission, startTime=startTime, endTime=endTime, money=money) db.session.add(shenQing) db.session.commit() managerIds = [element.userId for element in QuanXian.query.filter_by(machineId=machine.id) if element.permission in [QuanXian.SuperAdmin, QuanXian.Admin]] tokenList = filter(lambda x : len(x) > 0, [User.query.get(id).pushToken for id in managerIds]) logger.info("managerIds = {}\ntokens ={}".format(managerIds, tokenList)) pushContent = request.get_json() pushContent.pop('Token', None) pushContent['UserName'] = user.userName pushContent['Phone'] = user.phone pushContent['Action'] = 'applyPermission' pushContent['ShenQingId'] = shenQing.id pushMessageToSingle(tokenList, TransmissionTemplateDemo( json.dumps(pushContent) )) return jsonify({'Status': 'Success', 'StatusCode': 0, 'Msg': '申请成功!', 'ApplyDetail': shenQing.toJson()}), 200
def updatePassword(args): phone = args.get('Phone', '') user = User.getUserByIdOrPhoneOrMail(phone=phone) questionId = args.get('QuestionId') questionAnswer = args.get('QuestionAnswer') if (user.passWordQA != "") and (user.passWordQA == str(questionId) + ";" + questionAnswer): try: user.updatePassWord(args.get('NewPassWord')) db.session.merge(user) db.session.commit() return jsonify({ 'Status': 'Success', 'StatusCode': 0, 'Msg': "操作成功!", 'User': user.toJson() }), 200 except ValueError, error: logger.info('ValueError: errorMsg = {}'.format(error.message)) return jsonify({ 'Status': 'Failed', 'StatusCode': -1, 'Msg': error.message }), 400
def getMachineDetailInfo(args): logger.info("getMachineDetailInfo: request json = {}".format(request.get_json())) macList = request.get_json().get('MacList') mac = macList.get('Mac') machine = Machine.query.filter_by(macAddress=mac).first() if machine: return jsonify({'Status': 'Success', 'StatusCode': 0, 'Msg': '操作成功!', 'MachineInfo': machine.toJson()}), 200 else: return jsonify({'Status': 'Success', 'StatusCode': -1, 'Msg': '操作失败,机器mac={}不存在!'.format(mac)}), 400
def register(args): try: user = User(**request.get_json()) user.verifyUser() db.session.add(user) db.session.commit() return jsonify({'Status': 'Success', 'StatusCode': 0, 'Msg': '注册成功!', 'User': user.toJson()}), 200 except ValueError, error: logger.info('ValueError: errorMsg = {}'.format(error.message)) return jsonify({'Status': 'Failed', 'StatusCode': -1, 'Msg': error.message}), 400
def applyPermission(args): userId = args.get('UserId', '') phone = args.get('Phone', '') user = User.getUserByIdOrPhoneOrMail(id=userId, phone=phone) applyDetail = args.get('ApplyDetail') macAddress = applyDetail.get('Mac', '') startTime = applyDetail.get('StartTime', '') if applyDetail.get( 'StartTime', '') else None endTime = applyDetail.get('EndTime', '') if applyDetail.get('EndTime', '') else None money = applyDetail.get('Money', 0.0) machine = Machine.query.filter_by(macAddress=macAddress).first() if not machine: return jsonify({ 'Status': 'Failed', 'StatusCode': -1, 'Msg': "MacAddress {} does't exist".format(macAddress) }), 400 needPermission = applyDetail.get('Permission') reason = applyDetail.get('Reason') shenQing = ShenQing(user.id, machine.id, reason=reason, needPermission=needPermission, startTime=startTime, endTime=endTime, money=money) db.session.add(shenQing) db.session.commit() managerIds = [ element.userId for element in QuanXian.query.filter_by(machineId=machine.id) if element.permission in [QuanXian.SuperAdmin, QuanXian.Admin] ] tokenList = filter(lambda x: len(x) > 0, [User.query.get(id).pushToken for id in managerIds]) logger.info("managerIds = {}\ntokens ={}".format(managerIds, tokenList)) pushContent = request.get_json() pushContent.pop('Token', None) pushContent['UserName'] = user.userName pushContent['Phone'] = user.phone pushContent['Action'] = 'applyPermission' pushContent['ShenQingId'] = shenQing.id pushMessageToSingle(tokenList, TransmissionTemplateDemo(json.dumps(pushContent))) return jsonify({ 'Status': 'Success', 'StatusCode': 0, 'Msg': '申请成功!', 'ApplyDetail': shenQing.toJson() }), 200
def addressGeoCoding(address): print address if not address: raise ValueError("address不能为空!") try: location = Baidu('sXN2OGE9BeXBtg86alaspxFFcEWEp5B1').geocode(address) logger.info("addressGeoCoding, location = {}".format(location)) return (location.longitude, location.latitude) except Exception as e: print e raise ValueError("地址 %s 解析失败,error=%s!" % (address, e.message))
def __init__(self, **kargs): logger.info('User __init__: kargs = {}'.format(kargs)) self.userName = kargs.get('UserName', "") self.passWord = generate_password_hash(kargs.get('Password')) self.phone = kargs.get('Phone', '') self.email = kargs.get('Email', '') self.verifyCode = kargs.get('VerifyCode', '') self.pushToken = kargs.get('PushToken', '') #self.userType = kargs.get('UserType', 0) self.registerType = int(kargs.get('RegisterType', 0)) self.userMoney = kargs.get('UserMoney', 0.0) self.passWordQA = kargs.get('PassWordQA', '')
def updatePassword(args): phone = args.get('Phone', '') user = User.getUserByIdOrPhoneOrMail(phone=phone) if not user: return jsonify({'Status': 'Failed', 'StatusCode':-1, 'Msg': "User phone={} does't exist".format(phone)}), 400 questionId = args.get('QuestionId') questionAnswer = args.get('QuestionAnswer') if (user.passWordQA != "") and (user.passWordQA == str(questionId) + ";" + questionAnswer): try: user.updatePassWord(args.get('NewPassWord')) db.session.merge(user) db.session.commit() return jsonify({'Status': 'Success', 'StatusCode': 0, 'Msg': "操作成功!", 'User': user.toJson()}), 200 except ValueError, error: logger.info('ValueError: errorMsg = {}'.format(error.message)) return jsonify({'Status': 'Failed', 'StatusCode': -1, 'Msg': error.message}), 400
def getMachineDetailInfo(args): logger.info("getMachineDetailInfo: request json = {}".format( request.get_json())) macList = request.get_json().get('MacList') mac = macList.get('Mac') machine = Machine.query.filter_by(macAddress=mac).first() if machine: return jsonify({ 'Status': 'Success', 'StatusCode': 0, 'Msg': '操作成功!', 'MachineInfo': machine.toJson() }), 200 else: return jsonify({ 'Status': 'Success', 'StatusCode': -1, 'Msg': '操作失败,机器mac={}不存在!'.format(mac) }), 400
def getMachinePermissionDetail(args): userId = args.get('UserId') phone = args.get('PhoneList').get('Phone') ownMachines = QuanXian.query.filter(QuanXian.userId == userId).filter( QuanXian.permission.in_((0,1,2)) ) ownMachineIds = [element.machineId for element in ownMachines] userIds = [] if phone == 'All': userIds = [user.id for user in User.query.all()] else: userIds = [user.id for user in User.query.filter_by(phone=phone)] logger.info("getMachinePermissionDetail ownMachineIds = {}".format(ownMachineIds)) if not ownMachineIds: return jsonify({'Status': 'Success', 'StatusCode': -1, 'Msg': '操作失败,您还不是任何机器的管理员!'}), 400 macList = args.get('MacList') permissonDetail = [] for mac in macList: if mac.get('Mac') == 'All': for element in QuanXian.query.filter(QuanXian.machineId.in_(ownMachineIds)): if element.userId not in userIds: continue user = User.query.get(element.userId) userJson = user.toJson() userJson.pop('passWord', None) userJson.pop('token', None) machine = Machine.query.get(element.machineId) permissonDetail.append({'User': userJson, 'Permission': element.permission, 'Machine': machine.toJson()}) else: machine = Machine.query.filter_by(macAddress=mac.get('Mac')).first() if not machine: return jsonify({'Status': 'Success', 'StatusCode': -1, 'Msg': '操作失败,机器{}不存在!'.format(mac.get('Mac'))}), 400 if machine.id not in ownMachineIds: return jsonify({'Status': 'Success', 'StatusCode': -1, 'Msg': '操作失败,您不是机器{}的管理员!'.format(mac.get('Mac'))}), 400 for element in QuanXian.query.filter_by(machineId=machine.id): if element.userId not in userIds: continue user = User.query.get(element.userId) userJson = user.toJson() userJson.pop('passWord', None) userJson.pop('token', None) machine = Machine.query.get(element.machineId) permissonDetail.append({'User': userJson, 'Permission': element.permission, 'Machine': machine.toJson()}) return jsonify({'Status': 'Success', 'StatusCode': 0, 'Msg': '操作成功!', 'PermissionDetail': permissonDetail}), 200
def notify_url_handler(): logger.info('running notify_url_handler...\n' + pprint.pformat(request.args.to_dict())) if notify_verify(request.args.to_dict()): #商户网站订单号 tn = request.args.get('out_trade_no') logger.info('Change the status of order %s' % tn) #支付宝单号 trade_no = request.args.get('trade_no') #返回支付状态 trade_status = request.args.get('trade_status') order = Order.query.get(id=tn) order.status = trade_status db.session.merge(order) db.session.commit() if trade_status == 'TRADE_SUCCESS' or trade_status == 'TRADE_FINISHED': return "success" else: return "fail"
def pushMessageToSingle(tokenList, template): # 定义"SingleMessage"消息体,设置是否离线,离线有效时间,模板设置 message = IGtSingleMessage() message.isOffline = True message.offlineExpireTime = 1000 * 3600 * 12 message.data = template message.pushNetWorkType = 0#设置是否根据WIFI推送消息,2为4G/3G/2G,1为wifi推送,0为不限制推送 target = Target() target.appId = APPID for token in tokenList: target.clientId = token try: ret = push.pushMessageToSingle(message, target) logger.info("pushMessageToSingle: token={}, result={}".format(token, ret)) except RequestException, e: # 发生异常重新发送 requstId = e.getRequestId() ret = push.pushMessageToSingle(message, target, requstId) logger.info("pushMessageToSingle: token={}, resend result={}".format(token, ret))
def createShare(args): user = User.getUserByIdOrPhoneOrMail(id=args.get('UserId', ''), phone=args.get('Phone', '')) if Share.query.filter_by(userId=user.id, title=args.get('Title'), address=args.get('Address')).count() > 0: return jsonify({ 'Status': 'Failed', 'StatusCode': -1, 'Msg': '你已经发布过相同的分享了!' }), 400 try: (longitude, latitude) = addressGeoCoding(args.get('Address')) except Exception as error: return jsonify({ 'Status': 'Failed', 'StatusCode': -1, 'Msg': str(error) }), 400 hotPoint = HotPoint.checkExist(args.get('HotPointTag')) shareDict = dict(args) shareDict.update({ 'UserId': user.id, 'HotPointIds': hotPoint.id, 'Longitude': longitude, 'ImageUrls': ','.join(args.get('ImageUrls')), 'Latitude': latitude }) shareDict['Address'] = args.get('Address') logger.info("createShare, shareObj = \n" + pprint.pformat(shareDict)) shareObj = Share(**shareDict) db.session.add(shareObj) db.session.commit() return jsonify({ 'Status': 'Success', 'StatusCode': 0, 'Msg': "操作成功!", 'Share': shareObj.toJson() }), 200
def pushMessageToSingle(tokenList, template): # 定义"SingleMessage"消息体,设置是否离线,离线有效时间,模板设置 message = IGtSingleMessage() message.isOffline = True message.offlineExpireTime = 1000 * 3600 * 12 message.data = template message.pushNetWorkType = 0 #设置是否根据WIFI推送消息,2为4G/3G/2G,1为wifi推送,0为不限制推送 target = Target() target.appId = APPID for token in tokenList: target.clientId = token try: ret = push.pushMessageToSingle(message, target) logger.info("pushMessageToSingle: token={}, result={}".format( token, ret)) except RequestException, e: # 发生异常重新发送 requstId = e.getRequestId() ret = push.pushMessageToSingle(message, target, requstId) logger.info( "pushMessageToSingle: token={}, resend result={}".format( token, ret))
def TransmissionTemplateDemo(content): template = TransmissionTemplate() template.transmissionType = 2 template.appId = APPID template.appKey = APPKEY template.transmissionContent = content #'请填入透传内容' # iOS 推送需要的PushInfo字段 前三项必填,后四项可以填空字符串 # template.setPushInfo(actionLocKey, badge, message, sound, payload, locKey, locArgs, launchImage) # template.setPushInfo("", 0, "", "com.gexin.ios.silence", "", "", "", ""); # APN简单推送 alertMsg = SimpleAlertMsg() alertMsg.alertMsg = "兔乖乖" apn = APNPayload(); apn.alertMsg = alertMsg apn.badge = 2 # apn.sound = "" apn.addCustomMsg("payload", "payload") # apn.contentAvailable=1 # apn.category="ACTIONABLE" template.setApnInfo(apn) logger.info("TransmissionTemplateDemo: transmissionContent={}".format(content)) return template
def searchShare(args): hotPoint = HotPoint.query.filter_by(name=args.get('HotPointTag')).first() if not hotPoint: return jsonify({ 'Status': 'Failed', 'StatusCode': -1, 'Msg': "输入的HotPointTag={}无效!".format(args.get('HotPointTag')) }), 400 try: (longitude, latitude) = addressGeoCoding(args.get('Address')) except Exception as error: return jsonify({ 'Status': 'Failed', 'StatusCode': -1, 'Msg': str(error) }), 400 sql = text( 'SELECT *, (POWER(MOD(ABS(longitude - {}),360),2) + POWER(ABS(latitude - {}),2)) AS distance FROM `share` where hotPointIds={} ORDER BY distance LIMIT 100' .format(longitude, latitude, hotPoint.id)) result = [] for row in db.engine.execute(sql.execution_options(autocommit=True)): logger.info(row) share = Share.query.get(row['id']).toJson() share['Distance'] = row['distance'] result.append(share) return jsonify({ 'Status': 'Success', 'StatusCode': 0, 'Msg': "操作成功!", 'Shares': result }), 200
def getMachinePermissionDetail(args): userId = args.get('UserId') phone = args.get('PhoneList').get('Phone') ownMachines = QuanXian.query.filter(QuanXian.userId == userId).filter( QuanXian.permission.in_((0, 1, 2))) ownMachineIds = [element.machineId for element in ownMachines] userIds = [] if phone == 'All': userIds = [user.id for user in User.query.all()] else: userIds = [user.id for user in User.query.filter_by(phone=phone)] logger.info( "getMachinePermissionDetail ownMachineIds = {}".format(ownMachineIds)) if not ownMachineIds: return jsonify({ 'Status': 'Success', 'StatusCode': -1, 'Msg': '操作失败,您还不是任何机器的管理员!' }), 400 macList = args.get('MacList') permissonDetail = [] for mac in macList: if mac.get('Mac') == 'All': for element in QuanXian.query.filter( QuanXian.machineId.in_(ownMachineIds)): if element.userId not in userIds: continue user = User.query.get(element.userId) userJson = user.toJson() userJson.pop('passWord', None) userJson.pop('token', None) machine = Machine.query.get(element.machineId) permissonDetail.append({ 'User': userJson, 'Permission': element.permission, 'Machine': machine.toJson() }) else: machine = Machine.query.filter_by( macAddress=mac.get('Mac')).first() if not machine: return jsonify({ 'Status': 'Success', 'StatusCode': -1, 'Msg': '操作失败,机器{}不存在!'.format(mac.get('Mac')) }), 400 if machine.id not in ownMachineIds: return jsonify({ 'Status': 'Success', 'StatusCode': -1, 'Msg': '操作失败,您不是机器{}的管理员!'.format(mac.get('Mac')) }), 400 for element in QuanXian.query.filter_by(machineId=machine.id): if element.userId not in userIds: continue user = User.query.get(element.userId) userJson = user.toJson() userJson.pop('passWord', None) userJson.pop('token', None) machine = Machine.query.get(element.machineId) permissonDetail.append({ 'User': userJson, 'Permission': element.permission, 'Machine': machine.toJson() }) return jsonify({ 'Status': 'Success', 'StatusCode': 0, 'Msg': '操作成功!', 'PermissionDetail': permissonDetail }), 200
'Password' : fields.Str(required=True), #'UserType' : fields.Int(required=True, missing=1, validate=validateUserType), 'RegisterType': fields.Int(required=True, missing=0, validate=lambda value : value in [0, 1])}, locations = ('json',)) def register(args): try: user = User(**request.get_json()) user.verifyUser() db.session.add(user) db.session.commit() return jsonify({'Status': 'Success', 'StatusCode': 0, 'Msg': '注册成功!', 'User': user.toJson()}), 200 except ValueError, error: logger.info('ValueError: errorMsg = {}'.format(error.message)) return jsonify({'Status': 'Failed', 'StatusCode': -1, 'Msg': error.message}), 400 except Exception, error: logger.info('Exception: errorMsg = {}'.format(error.message)) return jsonify({'Status': 'Failed', 'StatusCode': -2, 'Msg': error.message}), 400 @api_blueprint.route('/login', methods=['POST']) @verify_request_json @use_args({'Password' : fields.Str(required=True), 'Phone' : fields.Str(missing=''), 'Email' : fields.Str(missing=''), 'RegisterType' : fields.Int(required=True, validate=lambda value : value in [0, 1])}, locations = ('json',)) def login(args): passWord = args['Password'] registerType = args['RegisterType'] phone = args['Phone'] email = args['Email'] if registerType == 0 and not phone:
db.session.commit() return jsonify({ 'Status': 'Success', 'StatusCode': 0, 'Msg': '注册成功!', 'User': user.toJson() }), 200 except ValueError, error: logger.info('ValueError: errorMsg = {}'.format(error.message)) return jsonify({ 'Status': 'Failed', 'StatusCode': -1, 'Msg': error.message }), 400 except Exception, error: logger.info('Exception: errorMsg = {}'.format(error.message)) return jsonify({ 'Status': 'Failed', 'StatusCode': -2, 'Msg': error.message }), 400 @api_blueprint.route('/login', methods=['POST']) @verify_request_json @use_args( { 'Password': fields.Str(required=True), 'Phone': fields.Str(missing=''),