コード例 #1
0
ファイル: gm.py プロジェクト: DJune12138/flask_demo
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({})
コード例 #2
0
ファイル: recharge.py プロジェクト: DJune12138/flask_demo
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")
コード例 #3
0
ファイル: gm.py プロジェクト: DJune12138/flask_demo
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({})
コード例 #4
0
ファイル: gm.py プロジェクト: DJune12138/flask_demo
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({})
コード例 #5
0
ファイル: gm.py プロジェクト: DJune12138/flask_demo
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"修改保险柜密码成功"})
コード例 #6
0
ファイル: gm.py プロジェクト: DJune12138/flask_demo
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({})
コード例 #7
0
ファイル: admin_user.py プロジェクト: DJune12138/flask_demo
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='删除成功')
コード例 #8
0
ファイル: first.py プロジェクト: DJune12138/flask_demo
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({})
コード例 #9
0
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")
コード例 #10
0
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
コード例 #11
0
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)
コード例 #12
0
ファイル: admin_user.py プロジェクト: DJune12138/flask_demo
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'生成秘钥成功!')
コード例 #13
0
ファイル: recharge.py プロジェクト: DJune12138/flask_demo
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)
コード例 #14
0
ファイル: admin_user.py プロジェクト: DJune12138/flask_demo
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'清除秘钥成功!')
コード例 #15
0
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)
コード例 #16
0
ファイル: search_bar.py プロジェクト: DJune12138/flask_demo
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))
コード例 #17
0
ファイル: admin_user.py プロジェクト: DJune12138/flask_demo
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
コード例 #18
0
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)
コード例 #19
0
ファイル: admin_user.py プロジェクト: DJune12138/flask_demo
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'))
コード例 #20
0
ファイル: first.py プロジェクト: DJune12138/flask_demo
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)
コード例 #21
0
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)
コード例 #22
0
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)
コード例 #23
0
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)
コード例 #24
0
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
コード例 #25
0
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'修改成功!')
コード例 #26
0
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)