Commit 3a720bf4 authored by zhangyibo's avatar zhangyibo

我也不知道改了什么2024.04.09

parent 450e8544
import os
from flask import Flask, render_template, redirect, url_for,request
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required,current_user
from models import db,User,SQLAlchemy,Games,SeasonPlayers,Seasons
from sqlalchemy import desc,or_,and_
from werkzeug.utils import secure_filename
import datetime
import uuid
# import json
current_season = 1
......@@ -102,7 +105,71 @@ def register():
def get_current_user(): # 获取当前登录用户信息
if current_user == None:
return {"status":"LOGOUT"}
return {"status":"SUCCESS","user_id":current_user.id,"username":current_user.username,"is_su":current_user.is_su,"is_member":current_user.is_member,"real_name":current_user.real_name,"profile_file":current_user.profile_file}
return {"status":"SUCCESS","user_id":current_user.id,"username":current_user.username,"is_su":current_user.is_su,"is_member":current_user.is_member,"real_name":current_user.real_name,"profile_file":current_user.profile_file,"background_file":current_user.background_file}
@app.route('/api/setAvatar',methods=['POST'])
def set_avatar():
user_avatar = request.files.get('avatar')
extension = user_avatar.filename.split('.')[-1].lower()
if extension not in ['jpg','gif','png','jepg']:
return {"status":"FAILED"}
unique_filename = str(uuid.uuid4()) + '.' + extension
filename = secure_filename(unique_filename)
user_avatar.save(os.path.join("/home/zyb/clubdata/avatar/",filename))
user = User.query.filter_by(id=current_user.get_id()).first()
user.profile_file = "/avatar/" + filename
try:
db.session.commit()
return {"status":"SUCCESS","new_avatar_path":"/avatar/"+filename}
except:
db.session.rollback()
return {"status":"FAILED"}
@app.route('/api/setBackground',methods=['POST'])
def set_background():
user_background = request.files.get('background')
extension = user_background.filename.split('.')[-1].lower()
if extension not in ['jpg','gif','png','jepg']:
return {"status":"FAILED"}
unique_filename = str(uuid.uuid4()) + '.' + extension
filename = secure_filename(unique_filename)
user_background.save(os.path.join("/home/zyb/clubdata/userBackground/",filename))
user = User.query.filter_by(id=current_user.get_id()).first()
user.background_file = "/userBackground/" + filename
try:
db.session.commit()
return {"status":"SUCCESS","new_background_path":"/userBackground/"+filename}
except:
db.session.rollback()
return {"status":"FAILED"}
# @app.route('/api/winrate', methods=['GET'])
# def winrate():
# user_id = current_user.id
# total_games = Games.query.filter(or_(Games.player1_id == user_id, Games.player2_id == user_id)).count()
# if total_games == 0:
# return {'status': 'SUCCESS', 'winrate': 0.0}
# wins = Games.query.filter(((Games.player1_id == user_id) & (Games.score1 > Games.score2)) |
# ((Games.player2_id == user_id) & (Games.score2 > Games.score1))).count()
# winrate = (wins / total_games) * 100
# return {'status': 'SUCCESS', 'winrate': int(winrate)}
@app.route('/api/setUserinform', methods=['POST'])
def set_userinform():
data = request.get_json()
username = data.get('user_name')
psword = data.get("user_password")
user = User.query.filter_by(id=current_user.get_id()).first()
if username != None:
user.username = username
if psword != None:
user.password = psword
try:
db.session.commit()
return {"status":"SUCCESS"}
except:
db.session.rollback()
return {"status":"FAILED"}
@app.route('/api/setMembers',methods=['POST'])
def su_set_members():
......@@ -130,50 +197,51 @@ def su_set_members():
@app.route('/api/games',methods=['GET'])
def get_games(): # 获取最近比赛列表
season_id = request.args.get("season_id")
pages = request.args.get("pages")
# pages = request.args.get("pages")
player = request.args.get("player")
if season_id == "0":
season_id = current_season
if pages is None:
return {"status":"FAILED"}
else:
pages = int(pages)
# if pages is None:
# return {"status":"FAILED"}
# else:
# pages = int(pages)
# games = Games.query.all()
lim = 10
# lim = 10
if season_id is None and player is None:
games = Games.query.order_by(desc(Games.game_date)).slice((pages-1)*lim,(pages)*lim).all()
games = Games.query.order_by(desc(Games.game_date)).all()
elif season_id is not None and player is None:
season_id = int(season_id)
games = Games.query.order_by(desc(Games.game_date)).filter(Games.season_id==season_id).slice((pages-1)*lim,(pages)*lim).all()
games = Games.query.order_by(desc(Games.game_date)).filter(Games.season_id==season_id).all()
elif season_id is None and player is not None:
player = int(player)
games = Games.query.order_by(desc(Games.game_date)).filter(or_(Games.player1_id==player,Games.player2_id==player)).slice((pages-1)*lim,(pages)*lim).all()
games = Games.query.order_by(desc(Games.game_date)).filter(or_(Games.player1_id==player,Games.player2_id==player)).all()
elif season_id is not None and player is not None:
season_id = int(season_id)
player = int(player)
games = Games.query.order_by(desc(Games.game_date)).filter(and_(Games.season_id==season_id,or_(Games.player1_id==player,Games.player2_id==player))).slice((pages-1)*lim,(pages)*lim).all()
games = Games.query.order_by(desc(Games.game_date)).filter(and_(Games.season_id==season_id,or_(Games.player1_id==player,Games.player2_id==player))).all()
else:
return {"status":"FAILED"}
game_list = []
for game in games:
game_info={}
game_info['id'] = game.id
game_info['game_date'] = game.game_date.strftime('%Y-%m-%d %H:%M')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
game_info['score1'] = game.score1
game_info['player2_id'] = game.player2_id
game_info['player2_real_name'] = game.player2.real_name
game_info['player2_profile_file'] = game.player2.profile_file
game_info['score2'] = game.score2
game_info['season_name'] = game.season.season_name
game_list.append(game_info)
if game.enable == True:
game_info={}
game_info['id'] = game.id
game_info['game_date'] = game.game_date.strftime('%Y/%m/%d')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
game_info['score1'] = game.score1
game_info['player2_id'] = game.player2_id
game_info['player2_real_name'] = game.player2.real_name
game_info['player2_profile_file'] = game.player2.profile_file
game_info['score2'] = game.score2
game_info['season_name'] = game.season.season_name
game_list.append(game_info)
return {"status":"SUCCESS","Games":game_list}
......@@ -191,7 +259,7 @@ def get_game_detail(): # 获取比赛详情
game_info["status"] = "SUCCESS"
game_info['id'] = game.id
# game_info['game_date'] = str(game.game_date)
game_info['game_date'] = game.game_date.strftime('%Y-%m-%d %H:%M')
game_info['game_date'] = game.game_date.strftime('%Y/%m/%d')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
......@@ -205,11 +273,11 @@ def get_game_detail(): # 获取比赛详情
game_info['laucher_id'] = game.laucher_id
game_info['laucher_real_name'] = game.laucher.real_name
game_info['laucher_profile_file'] = game.laucher.profile_file
game_info['lauch_date'] = game.lauch_date.strftime('%Y-%m-%d %H:%M')
game_info['lauch_date'] = game.lauch_date.strftime('%Y/%m/%d')
game_info['confirmer_id'] = game.confirmer_id
game_info['confirmer_real_name'] = game.confirmer.real_name
game_info['confirmer_profile_file'] = game.confirmer.profile_file
game_info['confirm_date'] = game.confirm_date.strftime('%Y-%m-%d %H:%M')
game_info['confirm_date'] = game.confirm_date.strftime('%Y/%m/%d')
game_info['game_type'] = game.game_type
return game_info
......@@ -218,22 +286,15 @@ def get_game_detail(): # 获取比赛详情
@app.route('/api/players',methods=['GET'])
def get_players(): # 获取队员(赛季积分排序)
season_id = request.args.get("season_id")
pages = request.args.get("pages")
lim = 10
myplayer_id = request.args.get("player_id")
if season_id is None:
season_id = current_season
else:
season_id = int(season_id)
if pages is None:
return {"status":"FAILED"}
if myplayer_id == None:
players = SeasonPlayers.query.filter_by(season_id=season_id).order_by(desc(SeasonPlayers.score)).all()
else:
pages = int(pages)
players = SeasonPlayers.query.filter_by(season_id=season_id).order_by(desc(SeasonPlayers.score)).slice((pages-1)*lim,(pages)*lim).all()
players = SeasonPlayers.query.filter(and_(SeasonPlayers.season_id == season_id,SeasonPlayers.player_id == myplayer_id)).all()
player_list = []
for player in players:
player_info = {}
......@@ -244,18 +305,20 @@ def get_players(): # 获取队员(赛季积分排序)
player_info['player_id'] = player.player_id
player_info['player_real_name'] = player.player.real_name
player_info['player_profile_file'] = player.player.profile_file
player_info['winrate'] = player.winrate
player_info['total_games'] = player.total_games
player_list.append(player_info)
return {"status":"SUCCESS","Players":player_list}
@app.route('/api/lauchGame',methods=['POST'])
@app.route('/api/launchGame',methods=['POST'])
def lauch_game(): # 发起比赛
game_info = request.get_json()
new_game = Games()
new_game.game_type=1
new_game.game_date=datetime.datetime.strptime(game_info['game_date'], "%Y-%m-%d %H:%M") # 时间转换
new_game.game_date=datetime.datetime.strptime(game_info['game_date'], "%Y/%m/%d") # 时间转换
new_game.player1_id=game_info.get('player1_id')
new_game.score1=game_info.get('score1')
new_game.player2_id=game_info.get('player2_id')
......@@ -289,8 +352,11 @@ def confirm_game(): # 审核比赛
if game_confirm:
game.confirm_date = datetime.datetime.now()
game.enable = True
update_scores(game)
update_winrate(game)
else:
game.lauch_date = None
game.confirm_date = datetime.datetime.now()
try:
db.session.commit()
return {"status":"SUCCESS"}
......@@ -298,6 +364,35 @@ def confirm_game(): # 审核比赛
db.session.rollback()
return {"status":"FAILED"}
def update_scores(game):
if game.score1 > game.score2:
winner_id = game.player1_id
elif game.score1 < game.score2:
winner_id = game.player2_id
else:
return
season_player = SeasonPlayers.query.filter(and_(SeasonPlayers.season_id == game.season_id,SeasonPlayers.player_id == winner_id)).first()
season_player.score += 1
try:
db.session.commit()
except:
db.session.rollback()
def update_winrate(game):
# total_game = Games.query.filter(or_(Games.player1_id == game.player1_id, Games.player2_id == game.player2_id)).count()
season_player1 = SeasonPlayers.query.filter(and_(SeasonPlayers.season_id == game.season_id,SeasonPlayers.player_id == game.player1_id)).first()
season_player2 = SeasonPlayers.query.filter(and_(SeasonPlayers.season_id == game.season_id,SeasonPlayers.player_id == game.player2_id)).first()
season_player1.total_games += 1
season_player2.total_games += 1
season_player1.winrate = int((season_player1.score / season_player1.total_games) * 100)
season_player2.winrate = int((season_player2.score / season_player2.total_games) * 100)
try:
db.session.commit()
except:
db.session.rollback()
@app.route('/api/lauchedGames',methods=['GET'])
def get_lauched_game(): # 获取审核中比赛列表
games = Games.query.filter(and_(Games.confirmer_id == current_user.id,Games.confirm_date==None)).order_by(desc(Games.lauch_date))
......@@ -305,7 +400,7 @@ def get_lauched_game(): # 获取审核中比赛列表
for game in games:
game_info={}
game_info['id'] = game.id
game_info['game_date'] = game.game_date.strftime('%Y-%m-%d %H:%M')
game_info['game_date'] = game.game_date.strftime('%Y/%m/%d')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
......@@ -320,12 +415,12 @@ def get_lauched_game(): # 获取审核中比赛列表
@app.route('/api/myLauchedGames',methods=['GET'])
def get_my_lauched_game(): # 获取发起审核比赛列表
games = Games.query.filter(and_(Games.laucher_id == current_user.id,Games.enable==False)).order_by(desc(Games.game_date))
games = Games.query.filter(and_(Games.laucher_id == current_user.id)).order_by(desc(Games.game_date))
game_list = []
for game in games:
game_info={}
game_info['id'] = game.id
game_info['game_date'] = game.game_date.strftime('%Y-%m-%d %H:%M')
game_info['game_date'] = game.game_date.strftime('%Y/%m/%d')
game_info['player1_id'] = game.player1_id
game_info['player1_real_name'] = game.player1.real_name
game_info['player1_profile_file'] = game.player1.profile_file
......@@ -335,7 +430,12 @@ def get_my_lauched_game(): # 获取发起审核比赛列表
game_info['player2_profile_file'] = game.player2.profile_file
game_info['score2'] = game.score2
game_info['season_name'] = game.season.season_name
game_info['status'] = 'WAITING' if game.lauch_date is not None else "REJECT"
if game.enable:
game_info['status'] = 'PASSED'
elif game.lauch_date is not None:
game_info['status'] = 'WAITING'
else:
game_info['status'] = "REJECT"
game_list.append(game_info)
return {"status":"SUCCESS","Games":game_list}
# @app.after_request
......@@ -346,6 +446,62 @@ def get_my_lauched_game(): # 获取发起审核比赛列表
# response.headers.add('Access-Control-Allow-Credentials', 'true')
# return response
@app.route('/api/player_ranking',methods=['GET'])
def getplayer_ranking(): # 获取队员(赛季积分排序)
season_id = request.args.get("season_id")
if season_id is None:
season_id = current_season
else:
season_id = int(season_id)
players_1 = SeasonPlayers.query.filter(and_(SeasonPlayers.season_id == season_id,SeasonPlayers.group == 1)).order_by(desc(SeasonPlayers.winrate)).all()
player_list_1 = []
for player_1 in players_1:
player_info = {}
player_info['season_id'] = player_1.season_id
player_info['season_name'] = player_1.season.season_name
player_info['score'] = player_1.score
player_info['group'] = player_1.group
player_info['player_id'] = player_1.player_id
player_info['player_real_name'] = player_1.player.real_name
player_info['player_profile_file'] = player_1.player.profile_file
player_info['winrate'] = player_1.winrate
player_info['total_games'] = player_1.total_games
player_list_1.append(player_info)
players_2 = SeasonPlayers.query.filter(and_(SeasonPlayers.season_id == season_id,SeasonPlayers.group == 2)).order_by(desc(SeasonPlayers.winrate)).all()
player_list_2 = []
for player_2 in players_2:
player_info = {}
player_info['season_id'] = player_2.season_id
player_info['season_name'] = player_2.season.season_name
player_info['score'] = player_2.score
player_info['group'] = player_2.group
player_info['player_id'] = player_2.player_id
player_info['player_real_name'] = player_2.player.real_name
player_info['player_profile_file'] = player_2.player.profile_file
player_info['winrate'] = player_2.winrate
player_info['total_games'] = player_2.total_games
player_list_2.append(player_info)
players_3 = SeasonPlayers.query.filter(and_(SeasonPlayers.season_id == season_id,SeasonPlayers.group == 3)).order_by(desc(SeasonPlayers.winrate)).all()
player_list_3 = []
for player_3 in players_3:
player_info = {}
player_info['season_id'] = player_3.season_id
player_info['season_name'] = player_3.season.season_name
player_info['score'] = player_3.score
player_info['group'] = player_3.group
player_info['player_id'] = player_3.player_id
player_info['player_real_name'] = player_3.player.real_name
player_info['player_profile_file'] = player_3.player.profile_file
player_info['winrate'] = player_3.winrate
player_info['total_games'] = player_3.total_games
player_list_3.append(player_info)
return {"status":"SUCCESS","Group_1":player_list_1,"Group_2":player_list_2,"Group_3":player_list_3}
if __name__ == '__main__':
with app.app_context():
db.create_all()
......
......@@ -11,6 +11,7 @@ class User(db.Model,UserMixin):
is_member = db.Column(db.Boolean, unique=False, nullable=False,default=False)
real_name = db.Column(db.String(80), unique=False, nullable=True)
profile_file = db.Column(db.String(120), unique=False, nullable=True)
background_file = db.Column(db.String(120), unique=False, nullable=True)
class Seasons(db.Model):
id = db.Column(db.Integer, primary_key=True)
......@@ -55,5 +56,7 @@ class SeasonPlayers(db.Model):
season = db.relationship("Seasons",foreign_keys=[season_id])
score = db.Column(db.Integer, unique=False, nullable=False,default=0)
group = db.Column(db.Integer, unique=False, nullable=False)
total_games = db.Column(db.Integer, unique=False, nullable=False,default=0)
winrate = db.Column(db.Integer, unique=False, nullable=False,default=0)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment