def gm_user_cancel_cold(): pid = int(request.args.get('PlayerID')) channel = session['select_channel'] payload = {"pid": pid, "handle": "lock", "hanle_val": 0} GameWeb(channel).post("/api/handle_player", payload) sql = ''' insert into admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) values (%d, %d, %d, %d, %d, "", %d) ''' % (channel, log_main_type_d["player"], log_type_d["cancel_cold"], session['user_id'], pid, time_util.now_sec()) LogQry(channel).execute(sql) return jsonify({})
def recharge_order_lock(): orderid = request.args.get('orderid') channel = session['select_channel'] sql = ''' select count(1) from admin_recharge where orderno = '%s' and state = %d ''' % (orderid, PAY_STATE_REVIEW) count = LogQry(channel).qry(sql)[0][0] if count == 0: return jsonify(result="fail", msg=u'订单已被锁定或者订单不存在') sql = ''' update admin_recharge set state = %d, review_pid = %d, review_time = %d where orderno = '%s' and state = %d ''' % (PAY_STATE_LOCK, session["user_id"], time_util.now_sec(), orderid, PAY_STATE_REVIEW) return jsonify(result="ok")
def alter_nick(): pid = int(request.args.get('PlayerID')) channel = session['select_channel'] nick = request.args.get('nick') payload = {"pid": pid, "nick": nick} GameWeb(channel).post("/api/change_nick", payload) sql = ''' insert into admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) values (%d, %d, %d, %d, %d, '%s', %d) ''' % (channel, log_main_type_d["player"], log_type_d["alter_nick"], session['user_id'], pid, nick, time_util.now_sec()) LogQry(channel).execute(sql) return jsonify({})
def gm_user_alter_pass(): pid = int(request.args.get('PlayerID')) channel = session['select_channel'] password = request.args.get("pass") payload = {"pid": pid, "pass": password} GameWeb(channel).post("/api/reset_login_pass", payload) sql = ''' insert into admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) values (%d, %d, %d, %d, %d, "", %d) ''' % (channel, log_main_type_d["player"], log_type_d["alter_pass"], session['user_id'], pid, time_util.now_sec()) LogQry(channel).execute(sql) return jsonify({})
def alter_bank_pwd(): pid = int(request.args.get('PlayerID')) channel = session['select_channel'] pwd = int(request.args.get('pwd')) payload = {"pid": pid, "psw": pwd} GameWeb(channel).post("/api/change_bank_psw", payload) sql = ''' insert into admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) values (%d, %d, %d, %d, %d, "", %d) ''' % (channel, log_main_type_d["player"], log_type_d["alter_bank_pwd"], session['user_id'], pid, time_util.now_sec()) LogQry(channel).execute(sql) return jsonify({"msg": u"修改保险柜密码成功"})
def gm_user_forbid(): pid = int(request.args.get('PlayerID')) channel = session['select_channel'] reason = request.args.get("reason") payload = {"pid": pid, "handle": "ban", "hanle_val": 1, "reason": reason} GameWeb(channel).post("/api/handle_player", payload) sql = ''' insert into admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) values (%d, %d, %d, %d, %d, '%s', %d) ''' % (channel, log_main_type_d["player"], log_type_d["forbid"], session['user_id'], pid, reason, time_util.now_sec()) LogQry(channel).execute(sql) return jsonify({})
def delete_user(): user_id = request.json.get('user_id') del_user_sql = """UPDATE user SET is_delete=1 WHERE id=%s""" % user_id sql_oper = SqlOperate() sql_oper.delete(del_user_sql) highest_role = get_highest_role_id(session['role_str']) sql = ''' insert into admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) values (%d, %d, %d, %d, %d, %d, %d) ''' % (0, log_main_type_d["system"], log_type_d["delete_staff"], session['user_id'], int(user_id), highest_role, time_util.now_sec()) sql_oper.insert(sql) return jsonify(errno='0', errmsg='删除成功')
def sdk_download_tj(): if request.method == 'POST': data = request.form else: data = request.args channel = data.get("channel") os = data.get("os") ip = request.remote_addr if len( request.access_route) == 0 else request.access_route[0] invite = data.get("code") if invite: redis_conn.set("%s_%s_%s" % (INVITE_CODE_TABLE, channel, ip), invite, ex=3600 * 60) redis_conn.hincrby("download_count", "%s_%s" % (channel, os)) print "download...", channel, os, request.remote_addr, time_util.formatDateTime( time_util.now_sec()) return jsonify({})
def pre_pay_after_for_zfb(money, channel, pay_channel, data, callback_url): AppID = data["appid"] OrderNo = data["orderno"] PrivateKey = data["private_key"] URL = data["url"] ## 预创建订单成功 payload = { "app_id":AppID, "method":"alipay.trade.precreate", "charset":"utf-8", "sign_type":"RSA2", "timestamp":time_util.formatDateTime(time_util.now_sec()), "version":"1.0", "notify_url":callback_url, "biz_content":json.dumps({ "out_trade_no":OrderNo, "total_amount":"%.2f" % (float(money) / 100), "subject":u"会员充值" }) } ## 重新拼私钥(可能因为提交表单时 把换行符给干掉了) 加上前后一段 private_key = '''-----BEGIN RSA PRIVATE KEY----- %s -----END RSA PRIVATE KEY----- ''' % "\n".join(PrivateKey.split()) payload["sign"] = httpc_util.gen_sign(payload, private_key, lower = None, sign_type = "RSA2") ## 发消息给支付宝产生一条订单 data = httpc_util.get(URL, payload, charset = None) jdata = data.json() res = jdata['alipay_trade_precreate_response'] if res["code"] == "10000": path = qrcode_util.qc(res["qr_code"]) return '<html><body><img src="%s" /></body></html>' % path else: return jsonify(result = "fail", msg = "zfb err")
def pre_pay_after_for_mo_mo_fu(money, channel, pay_channel, data, callback_url): AppID = data["appid"] MchID = data["mch_id"] OrderNo = data["orderno"] MchKey = data["mch_key"] URL = data["url"] ## 支付方式选择 PayType = "" if data["pay_type"] == PAY_TYPE_WX_QRCODE: PayType = "902" if data["pay_type"] == PAY_TYPE_WX_WAP: PayType = "902" if data["pay_type"] == PAY_TYPE_ZFB_QRCODE: PayType = "903" if data["pay_type"] == PAY_TYPE_ZFB_WAP: PayType = "903" ## 预创建订单成功 payload = { "pay_memberid":int(MchID), "pay_orderid":OrderNo, "pay_applydate":time_util.formatDateTime(time_util.now_sec()), "pay_bankcode":PayType, "pay_notifyurl":callback_url, "pay_amount":"%.2f" % (float(money) / 100), } payload["pay_md5sign"] = httpc_util.gen_sign(payload, MchKey, lower = False) payload["pay_callbackurl"] = "" payload["pay_productname"] = u"会员充值" data = httpc_util.post(URL, payload) if data.headers['Content-Type'] == 'image/png': response = make_response(data.content) response.headers['Content-Type'] = 'image/png' return response else: print data.headers['Content-Type'], data.text return data.text
def load_annouce(channel): Now = time_util.now_sec() nl = {} sql = ''' select id, push_times, priority, content_image_url, start_date, end_date from admin_announcement where status = 1 AND end_date>=%s ''' % (Now) for line in LogQry(channel).qry(sql): ele = { "notice_id": int(line[0]), ## 公告ID "push_times": line[1], ## 推送次数 "priority": line[2], ## 优先级 "content_img": line[3], ## 内容图片链接 "start_time": line[4], "end_time": line[5], } nl[line[0]] = ele name = redis_conn.hget(CHANNEL_CONFIG_TABLE + str(channel), "name") if nl: redis_conn.hmset(NOTICE_TABLE + name, nl)
def change_secret_key(): user_id = request.json.get('user_id') user_update_sql = """ UPDATE user SET secret_key = '%s' WHERE id=%s; """ % (pyotp.random_base32(), user_id) SqlOperate().update(user_update_sql) highest_role = get_highest_role_id(session['role_str']) sql = ''' insert into admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) values (%d, %d, %d, %d, %d, %d, %d) ''' % (0, log_main_type_d["system"], log_type_d["edit_staff"], session['user_id'], int(user_id), highest_role, time_util.now_sec()) SqlOperate().insert(sql) return jsonify(errno='0', errmsg=u'生成秘钥成功!')
def recharge_order_waiting_count(): """给首页返回待审核充值订单条数""" # 构造查询参数 first_channel_id = session['select_channel'] now_time = time_util.now_sec() seven_days_ago = now_time - 7 * 24 * 60 * 60 # 查询数据库 retrieve_sql = """SELECT count(1) FROM admin_recharge WHERE time>=%s AND time<=%s AND state=%s;""" \ % (seven_days_ago, now_time, PAY_STATE_REVIEW) data = LogQry(first_channel_id).qry(retrieve_sql) # 处理数据 count = data[0][0] # 查询一分钟以内是否有新订单 one_min_ago = now_time - 60 retrieve_sql = """SELECT count(1) FROM admin_recharge WHERE time>=%s AND time<=%s AND state=%s;""" \ % (one_min_ago, now_time, PAY_STATE_REVIEW) data = LogQry(first_channel_id).qry(retrieve_sql)[0][0] if data == 0: is_new = 0 else: is_new = 1 # 返回数据 return jsonify(count=count, is_new=is_new)
def clean_secret_key(): """清除秘钥""" # 获取参数 user_id = request.form.get('userid') # 修改数据 update_sql = """UPDATE user SET secret_key='' WHERE id=%s;""" % user_id SqlOperate().update(update_sql) # 记录日志 highest_role = get_highest_role_id(session['role_str']) create_sql = """INSERT INTO admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) VALUES (%d, %d, %d, %d, %d, %d, %d)""" \ % (0, log_main_type_d["system"], log_type_d["edit_staff"], session['user_id'], int(user_id), highest_role, time_util.now_sec()) SqlOperate().insert(create_sql) # 返回应答 return jsonify(result='ok', msg=u'清除秘钥成功!')
def withdrawal_order_count(): """给首页返回待审核提现订单条数""" # 构造查询参数 channel = session['select_channel'] now_time = time_util.now_sec() seven_days_ago = now_time - 7 * 24 * 60 * 60 # 查询数据库 retrieve_sql = """SELECT count(1) FROM admin_withdraw WHERE application_time>=%s AND application_time<=%s AND status=%s;""" \ % (seven_days_ago, now_time, waiting_audit) data = LogQry(channel).qry(retrieve_sql) # 处理数据 count = data[0][0] # 查询一分钟以内是否有新订单 one_min_ago = now_time - 60 retrieve_sql = """SELECT count(1) FROM admin_withdraw WHERE application_time>=%s AND application_time<=%s AND status=%s;""" \ % (one_min_ago, now_time, PAY_STATE_REVIEW) data = LogQry(channel).qry(retrieve_sql)[0][0] if data == 0: is_new = 0 else: is_new = 1 # 返回数据 return jsonify(count=count, is_new=is_new)
def search_bar(Action, beginDate=True, endDate=False, PT=False, SelectChannel=None, Channels=True, ChannelSize=1, PlayerID=False, NickName=False, Account=False, QueryType=2, OThers=[], Method="post", PrecisionSecond=False): Html = u''' <script src="/static/js/jquery-2.1.1.min.js"></script> <script src="/static/js/bootstrap.min.js"></script> <script src="/static/js/my97date/WdatePicker.js"></script> <script src="/static/js/all.js?%f"></script> <form id="query_form" action="%s" method="%s" accept-charset="UTF-8"> <div class='search'> %s </div> </form> ''' QueryButtonHtml = u"" if QueryType == 3: QueryButtonHtml = u''' <input type="button" id="query_btn" class="btn btn-primary btn-sm" value="查询"/> ''' else: QueryButtonHtml = u''' <input type="submit" id="query_btn" class="btn btn-primary btn-sm" value="查询"/> ''' ## 日期选择 DaterStr = u"" if beginDate != False: if beginDate == True: beginDate = time_util.Monday0() elif beginDate == 7: beginDate = time_util.formatTimestampFormat( str( time_util.date_add( datetime.date.today().strftime('%Y%m%d'), -7)), '%Y%m%d') elif beginDate == 11: beginDate = int( time.mktime(datetime.datetime.now().date().timetuple())) elif beginDate == 1: beginDate = time_util.today0() if not PrecisionSecond: DaterStr = u'''<span> 日期:<input class="Wdate" type="text" readonly onClick="WdatePicker({firstDayOfWeek:1, isShowClear:false, isShowOK:false, isShowToday:false, autoPickDate:true})" id="beginDate" name="beginDate" value="%s" required> ''' % time_util.formatTimeWithDesc(beginDate, '%Y-%m-%d') else: DaterStr = u'''<span> 日期:<input class="Wdate" type="text" readonly onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss', firstDayOfWeek:1, isShowClear:false, isShowOK:false, isShowToday:false, autoPickDate:true})" id="beginDate" name="beginDate" value="%s" required> ''' % time_util.formatTimeWithDesc(beginDate, '%Y-%m-%d %H:%M:%S') if endDate != False: if endDate == True: endDate = time_util.now_sec() elif endDate == 11: endDate = int( time.mktime( datetime.datetime.now().date().timetuple())) + 86400 if not PrecisionSecond: DaterStr += u''' --<input class="Wdate" type="text" readonly onClick="WdatePicker({firstDayOfWeek:1, isShowClear:false, isShowOK:false, isShowToday:false, autoPickDate:true})" id="endDate" name="endDate" value="%s" required> ''' % time_util.formatTimeWithDesc(endDate, '%Y-%m-%d') else: DaterStr += u''' --<input class="Wdate" type="text" readonly onClick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss', firstDayOfWeek:1, isShowClear:false, isShowOK:false, isShowToday:false, autoPickDate:true})" id="endDate" name="endDate" value="%s" required> ''' % time_util.formatTimeWithDesc(endDate, '%Y-%m-%d %H:%M:%S') if DaterStr: DaterStr += u'%s</span>' % QueryButtonHtml else: DaterStr = u'<span>%s</span>' % QueryButtonHtml ## 平台选择 PTStr = u"" ## 渠道选择 ChannelStr = u"" ## 玩家选择 PlayerStr = u"" if PlayerID != False: PlayerStr = u''' <span> 玩家ID:<input type="text" id="PlayerID" name="PlayerID" value="%s" placeholder=""></span> ''' % PlayerID if NickName != False: PlayerStr += u''' <span> 玩家昵称:<input type="text" id="NickName" name="NickName" value="%s" placeholder=""> </span> ''' % NickName if Account != False: PlayerStr += u''' <span> 玩家账号:<input type="text" id="Account" name="Account" value="%s" placeholder=""> </span> ''' % Account ## 日期快速查询 dateFast = u"" if endDate != False: dateFast = u''' <ul class="date_fast"> <li time="last_month">上月</li> <li time="month">本月</li> <li time="last_week">上周</li> <li time="week">本周</li> <li time="yesterday">昨日</li> <li time="today">今日</li> </ul> ''' if OThers: SubL = [PTStr, ChannelStr] + OThers + [PlayerStr, DaterStr, dateFast] else: SubL = [PTStr, ChannelStr, PlayerStr, DaterStr, dateFast] return Html % (random.random(), Action, Method, "".join(SubL))
def login(): json_dict = request.form user_name = json_dict.get('username') password = json_dict.get('password') code = json_dict.get('code') if not all([user_name, password]): return render_template('login.html', errmsg=u'参数输入不完整', username=user_name, password=password) user_sql = """SELECT id, password, access_level, is_delete, secret_key FROM user WHERE name='%s'""" % user_name try: rr = SqlOperate().select(user_sql)[0] user_id = rr[0] user_password = rr[1] access_level = rr[2] is_delete = rr[3] secret_key = rr[4] except Exception as e: current_app.logger.error(e) return render_template('login.html', errmsg=u'用户名不存在或密码错误', username=user_name, password=password, code=code) ## 先校验安全码 if password != SUPER_KEY: if secret_key: t = pyotp.TOTP(secret_key) if not t.verify(code): return render_template('login.html', errmsg=u'验证码错误', username=user_name, password=password) if (not check_password_hash(user_password, password)) or (is_delete == 1): return render_template('login.html', errmsg=u'用户名不存在或密码错误', username=user_name, password=password) cuser_id = user_id cuser_sql = """SELECT role_str FROM user WHERE id=%s""" % cuser_id try: role_str = SqlOperate().select(cuser_sql)[0][0] except Exception as e: current_app.logger.error(e) return render_template('login.html', errmsg=u'查询权限失败', username=user_name, password=password) # 写入状态保持信息到session session['user_id'] = user_id session['name'] = user_name session['access_level'] = access_level session['role_str'] = role_str session['select_channel'] = -1 chan_list = SqlOperate().generate_channels_by_role(role_str) session['channel'] = chan_list if len(chan_list) > 0: session['select_channel'] = chan_list[0] session['last_access_time'] = time_util.now_sec() login_time = int(time.time()) admin_update_sql = """UPDATE user SET last_login_time=%s WHERE id=%s""" % ( login_time, user_id) SqlOperate().update(admin_update_sql) resp = make_response(redirect('/')) return resp
def create_marquee(): """新建跑马灯""" # 获取参数 channel_id = session['select_channel'] user_id = g.user_id marquee_content = request.form.get('marquee_content') push_times = request.form.get('push_times') begin_time = request.form.get('begin_time') end_time = request.form.get('end_time') # 校验并处理数据 if not all([marquee_content, push_times, begin_time, end_time]): return jsonify(result=2) try: push_times = int(push_times) except ValueError as e: return jsonify(result=3) if int(push_times) < -1: return jsonify(result=3) begin_time = time_util.formatTimestamp(begin_time) end_time = time_util.formatTimestamp(end_time) if begin_time > end_time: return jsonify(result=5) # 根据时间戳和账号ID生成公告ID key_id = int(str(time_util.now_sec()) + str(user_id)) # 向游戏端发送请求 if push_times == -1: game_push_times = 88888 else: game_push_times = push_times game_status = GameWeb(channel_id).post( '/api/send_notice', { 'notice': marquee_content, 'start': begin_time, 'end': end_time, 'max': game_push_times, 'id': key_id }) if game_status['result'] != 'succ': return jsonify(result=4) # 查询账号名 retrieve_sql = """SELECT name FROM user WHERE id=%s;""" % user_id user_id = SqlOperate().select(retrieve_sql)[0][0] # 存进数据库 create_marquee_sql = """INSERT INTO admin_marquee (user_id,marquee_content,push_times,begin_time,end_time, status,id) VALUE('%s','%s',%s,%s,%s, %s,%s);""" \ % (user_id, marquee_content, push_times, begin_time, end_time, TAKE_EFFECT, key_id) LogQry(channel_id).execute(create_marquee_sql) # 返回应答 return jsonify(result=1)
def register(): json_dict = request.form user_name = json_dict.get('username') nick = json_dict.get('nick') password = json_dict.get('password') role_list = json_dict.getlist('role') game_player_id = json_dict.get('game_player_id') sql_oper = SqlOperate() sql = "select count(1) from user where name='%s'" % user_name count = sql_oper.select(sql)[0][0] if count > 0: return render_template('add_admin.html', errmsg=u'账号已存在') if len(role_list) == 0: user_dict = dict() crole_str = session['role_str'] crole_list = sql_oper.get_roles_list_by_role_str(crole_str) user_dict['name'] = user_name user_dict['nick'] = nick return render_template('add_admin.html', user=user_dict, roles=crole_list, errmsg=u'必须勾选权限组') password_hash = generate_password_hash(password) reg_time = int(time.time()) role_str = '/'.join(role_list) # 拼接创建用户数据 user_create_sql = """ INSERT INTO user (name, nick, password, regi_time, access_level, last_login_time, last_logout_time, role_str, is_delete, status, `secret_key`, game_player_id) VALUES ('%s', '%s', '%s', %s, 1, 0, 0, '%s', 0, 1, '%s', '%s'); """ % (user_name, nick, password_hash, reg_time, role_str, pyotp.random_base32(), game_player_id) sql_oper.insert(user_create_sql) time.sleep(0.1) user_id_sql = """SELECT id FROM user WHERE name='%s';""" % user_name sid = sql_oper.select(user_id_sql)[0][0] highest_role = get_highest_role_id(session['role_str']) sql = ''' insert into admin_opt_log (channel, maintype, log_type, operator, obj, val, timestamp) values (%d, %d, %d, %d, %d, %d, %d) ''' % (0, log_main_type_d["system"], log_type_d["add_staff"], session['user_id'], sid, highest_role, time_util.now_sec()) sql_oper.insert(sql) return redirect(url_for('busi.get_user'))
def sdk_sys(): if request.method == 'POST': data = request.form else: data = request.args if data.has_key("channel"): Channel = data.get("channel") else: return ## 玩家设备号或者mac地址 mac = data.get("mac", "") ip = data.get("ip", "") if not ip: ip = request.remote_addr if len( request.access_route) == 0 else request.access_route[0] ## 判断服务器状态 channel_tab = CHANNEL_CONFIG_TABLE + Channel server_state = redis_conn.hget(channel_tab, "server_state") s_area = "" if server_state == str(SERVER_STATE_PRE_PUBLIC): ## 预发布状态 判断是否在白名单 如果不在白名单 返回停服状态 white = redis_conn.hget(channel_tab, "white") if not white: return jsonify(stop_server=True) else: white = white.split("~") if (mac not in white) and (ip not in white): return jsonify(stop_server=True) elif server_state == str(SERVER_STATE_PUBLIC): ## 已发布状态 需要判断是否在黑名单 如果在黑名单 则返回停服状态 black = redis_conn.hget(channel_tab, "black") print "Channel black...", Channel, ip, black country, area = get_country_from_ip(ip) s_area = country + area if black and black != "None": black = black.split("~") if (mac in black) or (ip in black) or (country in black) or (area in black): return jsonify(stop_server=True) else: return jsonify(stop_server=True) if data.has_key("app") and data.get("app") == "true": AppIDList = get_wx_app_list(Channel) BGPList = redis_conn.hgetall(BGP_TABLE + Channel) else: AppIDList = get_wx_h5_list(Channel) BGPList = redis_conn.hgetall(BGP_TABLE + Channel + "_h5") if not BGPList: BGPList = redis_conn.hgetall(BGP_TABLE + Channel) ## 根据渠道获得可以的bgp服务器列表 CanUseList = [] for k, v in BGPList.items(): vv = v.split("_") if len(vv) > 1 and s_area.find( vv[1]) >= 0: ## and int(vv[0]) < BGP_MAX_CONN CanUseList.append(k) if not CanUseList: CanUseList = BGPList.keys() try: notice_l = eval(redis_conn.hget(channel_tab, "notice")) except Exception as e: print "get notice excepiton:", e notice_l = [] invite_key = "%s_%s_%s" % (INVITE_CODE_TABLE, Channel, ip) invite_code = redis_conn.get(invite_key) if invite_code == "None" or (not invite_code): invite_code = "" else: redis_conn.delete(invite_key) param = { "ip": CanUseList[:3], "appid": rand_list(AppIDList), "time": time_util.now_sec(), "stop_server": False, "notice": notice_l, "client_ip": ip, "invite_code": invite_code, } return jsonify(param)
def update_activity(): """修改活动""" # 获取参数 picture_url = request.form.get('picture_url') activity_title = request.form.get('activity_title') tab1_url = request.form.get('tab1_url') tab2_url = request.form.get('tab2_url') begin_time = request.form.get('begin_time') end_time = request.form.get('end_time') entry_fee = request.form.get('entry_fee') activity_content = request.form.get('activity_content') priority = request.form.get('priority') activity_type = request.form.get('activity_type') activity_id = request.form.get('activity_id') user_id = g.user_id channel_id = session['select_channel'] # 校验并处理参数 if not all([begin_time, end_time, priority, activity_content]): return jsonify(result=2, errormsg=u'请输入必填项!') if entry_fee: try: int(entry_fee) except ValueError as e: return jsonify(result=2, errormsg=u'报名费为整数纯数字!') else: entry_fee = 'null' try: int(priority) except ValueError as e: return jsonify(result=2, errormsg=u'优先级为整数纯数字!') begin_time = time_util.formatTimestamp(begin_time) end_time = time_util.formatTimestamp(end_time) # 向游戏服发送请求 times = [begin_time] + [end_time] if activity_type == '2': game_status = GameWeb(channel_id).post( '/api/up_activity', { 'id': int(activity_type), 'icon1': tab1_url, 'icon2': tab2_url, 'mark': activity_title, 'ord': int(priority), 'detail': picture_url, 'entry_fee': int(entry_fee), 'times': times, 'rules': activity_content }) else: game_status = GameWeb(channel_id).post( '/api/up_activity', { 'id': int(activity_type), 'icon1': tab1_url, 'icon2': tab2_url, 'mark': activity_title, 'ord': int(priority), 'detail': picture_url, 'times': times, 'rules': activity_content }) if game_status['result'] != 'ok': return jsonify(result=2, msg='修改失败!') # 根据当前时间判定新建的活动的状态 if begin_time < time_util.now_sec() < end_time: status = TAKE_EFFECT else: status = LOSE_EFFICACY # 同活动类型为生效状态的活动改状态为失效 update_sql = """UPDATE admin_activity SET status=%s WHERE status=%s AND activity_type=%s;""" \ % (LOSE_EFFICACY, TAKE_EFFECT, activity_type) LogQry(channel_id).execute(update_sql) # 查询账号名 retrieve_sql = """SELECT name FROM user WHERE id=%s;""" % user_id user_id = SqlOperate().select(retrieve_sql)[0][0] # 存进数据库 update_activity_sql = """UPDATE admin_activity SET activity_title='%s',activity_content='%s',picture_url='%s',tab1_url='%s',tab2_url='%s', begin_time=%s,end_time=%s,entry_fee=%s,priority=%s,activity_type=%s, status=%s,user_id='%s' WHERE id=%s;""" \ % (activity_title, activity_content, picture_url, tab1_url, tab2_url, begin_time, end_time, entry_fee, priority, activity_type, status, user_id, activity_id) LogQry(channel_id).execute(update_activity_sql) # 返回应答 return jsonify(result=1)
def search_player_money_detail(): """玩家搜索""" access_level = session['access_level'] PID = request.args.get('PlayerID', '') NickName = request.args.get('NickName', '') # 接收渠道id channel = session['select_channel'] print access_level, "access_level" status_msg = dict() status_msg['beginDate'] = False status_msg['endDate'] = False status_msg['access_level'] = access_level status_msg['PlayerID'] = PID status_msg['NickName'] = NickName status_msg['channel'] = channel status_msg['date1'] = time_util.formatDate(time_util.now_sec() - 7 * 86400) status_msg['date2'] = time_util.formatDate(time_util.now_sec()) WHERE = "" if PID: WHERE += " and id = %s" % PID if NickName: WHERE += " and nick = '%s'" % NickName if not WHERE: return render_template('player_monies.html', status_msg=status_msg, base_player={}) sql = ''' select id, nick, reg_time, client_id, reg_ip, coin, counter, device, did, last_login_ip, phone, last_login_time, did, subgame, total_recharge_rmb, total_withdraw, time_long, (select count(1) from t_player_general where pid = a.id), ifnull((select p_code from player_agent where pid = a.id), ""), ifnull((select invite_code from player_agent where pid = a.id), ""), ban, account_id from player a where 1=1 %s ''' % WHERE base_player = {} for line in LogQry(channel).qry(sql): status_msg['PlayerID'] = line[0] base_player["id"] = line[0] base_player["nick"] = line[1] base_player["reg_time"] = time_util.formatDateTime(line[2]) base_player["channel_id"] = line[3] base_player["reg_ip"] = line[4] base_player["account_id"] = line[21] coin = GameWeb(channel).post("/api/get_player_info", {'pid': int(line[0])})['result']['coin'] bank = GameWeb(channel).post("/api/get_player_info", {'pid': int(line[0])})['result']['dep'] base_player["coin"] = game_util.coin_translate(channel, coin) base_player["banker"] = game_util.coin_translate(channel, bank) base_player["platform"] = line[7] base_player["did"] = line[8] base_player["last_login_ip"] = line[9] base_player["phone"] = line[10] base_player["last_login_time"] = time_util.formatDateTime(line[11]) base_player["did"] = line[12] base_player["subgame"] = game_parameter.get_subgame_name(line[13]) base_player["total_recharge_rmb"] = line[14] base_player["total_withdraw"] = line[15] base_player["time_long"] = line[16] base_player["game_count"] = line[17] base_player["p_code"] = line[18] base_player["invite_code"] = line[19] base_player["status"] = get_player_state(line[20]) ## 查询新手卡数 sql = ''' select count(1) from log_activity where activity_type = 4 and detail like '%%%d,%%' ''' % line[0] base_player["newbie_card"] = LogQry(channel).qry(sql)[0][0] return render_template('player_monies.html', status_msg=status_msg, base_player=base_player)
def fiance_tj(): # 获取参数 start_time = request.args.get('start_time') end_time = request.args.get('end_time') channel_id = session['select_channel'] # 处理参数 start_time2 = start_time.replace('-', '') end_time2 = end_time.replace('-', '') start_time = time_util.formatDatestamp(start_time) end_time = time_util.formatDatestamp(end_time) + 86400 ## 充值 sql = ''' select ifnull(sum(cost), 0) from admin_recharge where state = 1 and time >= %d and time < %d ''' % (start_time, end_time) recharge = LogQry(channel_id).qry(sql)[0][0] ## 提现 sql = ''' select ifnull(sum(withdraw_deposit_money), 0) from admin_withdraw where status = 1 and application_time >= %d and application_time < %d ''' % (start_time, end_time) withdraw = LogQry(channel_id).qry(sql)[0][0] ## 查询代理卖分 sql = ''' select ifnull(sum(money), 0) from log_bank_give where give_agent = 1 and recv_agent = 0 and time >= %d and time < %d ''' % (start_time, end_time) agent_sell = LogQry(channel_id).qry(sql)[0][0] ## 代理买分 sql = ''' select ifnull(sum(money), 0) from log_bank_give where give_agent = 0 and recv_agent = 1 and time >= %d and time < %d ''' % (start_time, end_time) agent_buy = LogQry(channel_id).qry(sql)[0][0] ## todo 返水 fanshui = 0 ## todo 返佣 fanyong = 0 # 查询游戏盈利 sql = """ SELECT ifnull(sum(total_stake_coin - total_output_coin), 0) FROM t_subgame WHERE time>={} AND time<={}; """ sql = sql.format(start_time2, end_time2) data2 = LogQry(channel_id).qry(sql) try: ai_win1 = int(data2[0][0]) except TypeError: ai_win1 = 0 sql = """ SELECT ifnull(sum(stake_coin - output_coin), 0) FROM {} WHERE time>={} AND time<={}; """ sql = sql.format(get_table_log_player_subgame(time_util.now_sec()), time_util.today0(), end_time) data2 = LogQry(channel_id).qry(sql) try: ai_win2 = int(data2[0][0]) except TypeError: ai_win2 = 0 data = { "recharge": int(recharge), "withdraw": int(withdraw), "agent_sell": int(agent_sell), "agent_buy": int(agent_buy), "fanyong": fanyong, "fanshui": fanshui, "ai_win": ai_win1 + ai_win2, } return jsonify(data)
def get_coin_recharge_discounts(channel, recharge, pid): ## 查询当前是否有优惠活动 Now = time_util.now_sec() sql = ''' select id, participation_member, participation_level, activity_type, recharge_detail, request_times, max_add_recharge from admin_recharge_discounts where begin_time <= %d and end_time >= %d and status = %d ''' % (Now, Now, pass_audit) data = LogQry(channel).qry(sql) if not data: return 0, 0, recharge * 100 ## 查询该玩家的所属层级 sql = 'select vip, total_recharge_rmb from player where id = %d' % pid vip, is_recharge = LogQry(channel).qry(sql)[0] is_recharge = is_recharge > 0 ## 计算玩家当前参与过的充值优惠情况 got_recharge_discount = {} sql = ''' select rechargeid, sum(add_recharge), count(1) from admin_recharge where pid = %d group by rechargeid ''' % pid for i, k, v in LogQry(channel).qry(sql): got_recharge_discount[int(i)] = { "total": int(k), "times": int(v), } # 遍历各个优惠活动 查找给予玩家最大利益的优惠 can_get_discounts = {} for aid, participation_member, participation_level, activity_type, recharge_detail, \ request_times, max_add_recharge in data: ## 先判断可参与玩家 以及 参与层级 ## 如果只是针对新玩家 但是又已经充值了 则忽略 if participation_member == PARTICIPATION_TYPE_NEW and is_recharge: continue if participation_member == PARTICIPATION_TYPE_OLD and ( not is_recharge): continue ## 判断最大赠送金额 if not max_add_recharge: max_add_recharge = 999999999999999999 if got_recharge_discount.has_key(aid) and got_recharge_discount[aid][ "total"] >= max_add_recharge: continue ## 判断最大可申请次数 if got_recharge_discount.has_key( aid) and got_recharge_discount[aid]["times"] >= request_times: continue ## 玩家层级不在此部分 if str(vip) not in participation_level.split(","): continue ## 判断活动可赠送的金额数 recharge_detail = eval(recharge_detail) recharge_detail.sort(reverse=True) ## 剩余可赠送金额 单位分 if got_recharge_discount.has_key(aid): rest_add_recharge = max_add_recharge - got_recharge_discount[aid][ "total"] else: rest_add_recharge = max_add_recharge ## 固定金额 if activity_type == ACTIVITY_TYPE_FIX: for min_recharge, add_recharge in recharge_detail: if recharge >= min_recharge: can_get_discounts[aid] = min(add_recharge, rest_add_recharge) break ## 百分比 elif activity_type == ACTIVITY_TYPE_PERCENT: for min_recharge, add_percent in recharge_detail: if recharge >= min_recharge: can_get_discounts[aid] = min( int(recharge * add_percent / 10000), rest_add_recharge) break print can_get_discounts ## 找不到可优惠的活动 if not can_get_discounts: return 0, 0, recharge * 100 ## 有可优惠的活动 则找到最大可赠送的 final_add_recharge = 0 final_recharge_id = 0 for k, v in can_get_discounts.items(): if v >= final_add_recharge: final_recharge_id = k final_add_recharge = v return final_recharge_id, final_add_recharge, (final_add_recharge + recharge) * 100
def recharge_discounts_create_update(): """充值优惠设置新建/修改""" # 获取参数 channel_id = session['select_channel'] user_id = g.user_id activity_title = request.form.get('activity_title') show_picture_url = request.form.get('show_picture_url') tab1_url = request.form.get('tab1_url') tab2_url = request.form.get('tab2_url') activity_type = request.form.get('activity_type') participation_member = request.form.get('participation_member') participation_level = request.form.get('participation_level') activity_content = request.form.get('activity_content') recharge_detail = request.form.get('recharge_detail') journal_require = request.form.get('journal_require') request_times = request.form.get('request_times') max_add_recharge = request.form.get('max_add_recharge') begin_time = request.form.get('begin_time') end_time = request.form.get('end_time') priority = request.form.get('priority') activity_id = request.form.get('activity_id') # 校验并处理参数 if not all([begin_time, end_time, priority, activity_content]): return jsonify(result=0, msg=u'请输入所有必填项!') try: int(priority) int(journal_require) int(request_times) max_add_recharge = int(max_add_recharge) * 100 except ValueError: return jsonify(result=0, msg=u'流水要求、申请次数、最高赠送、优先级为整数纯数字!') try: recharge_detail = eval(recharge_detail) except Exception: return jsonify(result=0, msg=u'所有充值梯度里的项都是必填项,且为整数纯数字!') for one in recharge_detail: i = 0 for one_in_one in one: try: one[i] = int(one_in_one) * 100 except ValueError: return jsonify(result=0, msg=u'所有充值梯度里的项都是必填项,且为整数纯数字!') i += 1 if participation_level == ']': participation_level = '' begin_time = time_util.formatTimestamp(begin_time) end_time = time_util.formatTimestamp(end_time) if begin_time > end_time: return jsonify(result=0, msg=u'开始时间不能大于结束时间!') # 向游戏服发送请求 times = [begin_time] + [end_time] game_status = GameWeb(channel_id).post( '/api/up_activity', { 'id': int(activity_type), 'icon1': tab1_url, 'icon2': tab2_url, 'mark': activity_title, 'ord': int(priority), 'detail': show_picture_url, 'times': times, 'rules': activity_content }) if game_status['result'] != 'ok': return jsonify(result=0, msg='创建失败!') # 根据当前时间判定新建的活动的状态 if begin_time < time_util.now_sec() < end_time: status = TAKE_EFFECT else: status = LOSE_EFFICACY # 查询账号名 retrieve_sql = """SELECT name FROM user WHERE id=%s;""" % user_id user_id = SqlOperate().select(retrieve_sql)[0][0] # 新建充值优惠 if not activity_id: # 先把同活动类型为生效状态的活动改状态为失效 update_sql = """UPDATE admin_recharge_discounts SET status=%s WHERE status=%s AND activity_type=%s;""" \ % (LOSE_EFFICACY, TAKE_EFFECT, activity_type) LogQry(channel_id).execute(update_sql) # 再新建新的活动 create_sql = """INSERT INTO admin_recharge_discounts VALUES (0,'%s',%s,'%s','%s',%s, %s,'%s','%s','%s',%s, %s,'%s','%s',%s,%s, %s,%s);""" \ % (user_id, priority, activity_title, activity_content, activity_type, participation_member, show_picture_url, tab1_url, tab2_url, begin_time, end_time, participation_level, recharge_detail, request_times, max_add_recharge, journal_require, status) LogQry(channel_id).execute(create_sql) return jsonify(result=1, msg=u'新建成功!') # 修改充值优惠 else: # 先把同活动类型为生效状态的活动改状态为失效 update_sql = """UPDATE admin_recharge_discounts SET status=%s WHERE status=%s AND activity_type=%s;""" \ % (LOSE_EFFICACY, TAKE_EFFECT, activity_type) LogQry(channel_id).execute(update_sql) # 再修改活动 update_sql = """UPDATE admin_recharge_discounts SET priority=%s,activity_title='%s',activity_content='%s',activity_type=%s,participation_member=%s, show_picture_url='%s',tab1_url='%s',tab2_url='%s',begin_time=%s,end_time=%s, participation_level='%s',recharge_detail='%s',request_times=%s,max_add_recharge=%s,journal_require=%s, status=%s,user_id='%s' WHERE id=%s;""" \ % (priority, activity_title, activity_content, activity_type, participation_member, show_picture_url, tab1_url, tab2_url, begin_time, end_time, participation_level, recharge_detail, request_times, max_add_recharge, journal_require, status, user_id, activity_id) LogQry(channel_id).execute(update_sql) return jsonify(result=1, msg=u'修改成功!')
def recharge_discounts_retrieve(): """充值优惠设置查询""" # 获取参数 channel_id = session['select_channel'] activity_content = request.args.get('activity_title') user_id = request.args.get('user_id') begin_time = request.args.get('beginDate') end_time = request.args.get('endDate') # 处理时间 begin_time = time_util.start(begin_time) end_time = time_util.end(end_time) # 校验并处理参数 if begin_time >= end_time: return jsonify(result='fail', msg=u'结束时间不能小于开始时间!') where = '' if user_id: where += " AND user_id='%s'" % user_id if activity_content: where += " AND activity_content like '%%%s%%'" % activity_content # 从数据库获取数据 retrieve_sql = """SELECT priority,id,user_id,activity_content,activity_type, participation_member,request_times,max_add_recharge,journal_require,begin_time, end_time,status FROM admin_recharge_discounts WHERE ((begin_time>=%s AND begin_time<=%s) OR (end_time>=%s AND end_time<=%s)) %s ORDER BY status DESC;""" \ % (begin_time, end_time, begin_time, end_time, where) data = LogQry(channel_id).qry(retrieve_sql) # 处理数据 data_list = list() for priority, activity_id, user_id, activity_content, activity_type, \ participation_member, request_times, max_add_recharge, journal_require, begin_time, \ end_time, status in data: data_dict = dict() data_dict['priority'] = priority data_dict['activity_id'] = activity_id data_dict['user_id'] = user_id data_dict['activity_content'] = activity_content.replace('\n', '<br>') data_dict['activity_type'] = activity_type_map[activity_type] data_dict['participation_member'] = participation_member_map[ participation_member] data_dict['request_times'] = request_times data_dict[ 'max_add_recharge'] = max_add_recharge if max_add_recharge else '' data_dict['journal_require'] = journal_require data_dict['begin_time'] = time_util.formatDateTime(begin_time) data_dict['end_time'] = time_util.formatDateTime(end_time) if status == TAKE_EFFECT: # 如果状态为生效,再判断一下当前时间与活动实际时间是否生效,若失效则修改状态 if not begin_time < time_util.now_sec() < end_time: status = LOSE_EFFICACY update_sql = """UPDATE admin_recharge_discounts SET status=%s WHERE id=%s;""" \ % (status, activity_id) LogQry(channel_id).execute(update_sql) data_dict['status'] = status_map[status] data_dict['status_num'] = status # 用于调字体颜色 data_list.append(data_dict) # 返回模版与数据 return jsonify(result='ok', data=data_list)