|
@@ -1,4 +1,7 @@
|
|
|
-from flask import request, jsonify
|
|
|
+import json
|
|
|
+from io import BytesIO, StringIO
|
|
|
+
|
|
|
+from flask import request, jsonify, Response
|
|
|
from flask_restx import Resource, Namespace, reqparse
|
|
|
from sqlalchemy import insert, select, update, delete
|
|
|
from sqlalchemy.orm import Session
|
|
@@ -33,9 +36,7 @@ class GetUserListApi(Resource):
|
|
|
stmt = select(User).where(User.account_status == status).offset(page_size * (page - 1)).limit(page_size)
|
|
|
results = session.execute(stmt).scalars().all()
|
|
|
|
|
|
- data = to_dict(results)
|
|
|
-
|
|
|
- return jsonify(code=StatesCode.SUCCESS, message="成功", data=data)
|
|
|
+ return jsonify(code=StatesCode.SUCCESS, message="成功", data=to_dict(results))
|
|
|
|
|
|
|
|
|
add_user = reqparse.RequestParser(bundle_errors=True)
|
|
@@ -134,7 +135,8 @@ class UsersApi(Resource):
|
|
|
return jsonify(code=StatesCode.UNKNOWN_ERROR, message="用户id或用户状态不能为空")
|
|
|
|
|
|
with Session(engine) as session:
|
|
|
- session.execute(update(User).where(User.id == user_id).values(account_status=account_status))
|
|
|
+ stmt = update(User).where(User.id == user_id).values(account_status=account_status)
|
|
|
+ session.execute(stmt)
|
|
|
session.commit()
|
|
|
|
|
|
return jsonify(code=StatesCode.SUCCESS, message="修改用户状态成功")
|
|
@@ -149,7 +151,8 @@ class UsersApi(Resource):
|
|
|
return jsonify(code=StatesCode.UNKNOWN_ERROR, message="用户id不能为空")
|
|
|
|
|
|
with Session(engine) as session:
|
|
|
- session.execute(delete(User).where(User.id == user_id))
|
|
|
+ stmt = delete(User).where(User.id == user_id)
|
|
|
+ session.execute(stmt)
|
|
|
session.commit()
|
|
|
|
|
|
return jsonify(code=StatesCode.SUCCESS, message="删除成功")
|
|
@@ -158,6 +161,22 @@ class UsersApi(Resource):
|
|
|
user_details = reqparse.RequestParser(bundle_errors=True)
|
|
|
user_details.add_argument(name='id', type=int, required=True, location='args', help='用户id')
|
|
|
|
|
|
+user_details_update = reqparse.RequestParser(bundle_errors=True)
|
|
|
+user_details_update.add_argument(name='id', type=str, required=True, location='form', help='用户id')
|
|
|
+user_details_update.add_argument(name='username', type=str, required=False, location='form', help='用户名')
|
|
|
+user_details_update.add_argument(name='password', type=str, required=False, location='form', help='密码')
|
|
|
+user_details_update.add_argument(name='photograph', type=str, required=False, location='form', help='照片')
|
|
|
+user_details_update.add_argument(name='name', type=str, required=False, location='form', help='姓名')
|
|
|
+user_details_update.add_argument(name='phone', type=str, required=False, location='form', help='电话')
|
|
|
+user_details_update.add_argument(name='email', type=str, required=False, location='form', help='邮箱')
|
|
|
+user_details_update.add_argument(name='company', type=str, required=False, location='form', help='公司')
|
|
|
+user_details_update.add_argument(name='department', type=str, required=False, location='form', help='部门')
|
|
|
+user_details_update.add_argument(name='role', type=str, required=False, location='form', help='角色')
|
|
|
+user_details_update.add_argument(name='permission', type=str, required=False, location='form', help='权限')
|
|
|
+user_details_update.add_argument(name='on_job_status', type=str, required=False, location='form', help='在职状态')
|
|
|
+user_details_update.add_argument(name='duty', type=str, required=False, location='form', help='职务')
|
|
|
+user_details_update.add_argument(name='nationality', type=str, required=False, location='form', help='国籍')
|
|
|
+
|
|
|
|
|
|
@ns.route('/user_details')
|
|
|
class GetUsersApi(Resource):
|
|
@@ -177,30 +196,108 @@ class GetUsersApi(Resource):
|
|
|
return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
|
|
|
|
|
|
@ns.doc(id='update_users_details', description='更新用户详情')
|
|
|
- @ns.expect()
|
|
|
+ @ns.expect(user_details_update)
|
|
|
def put(self):
|
|
|
"""更新用户详情"""
|
|
|
|
|
|
- return {"code": StatesCode.SUCCESS, "message": "成功", "data": ""}
|
|
|
+ user_id = request.form.get('id')
|
|
|
+ username = request.form.get('username')
|
|
|
+ password = request.form.get('password')
|
|
|
+ photograph = request.form.get('photograph')
|
|
|
+ name = request.form.get('name')
|
|
|
+ phone = request.form.get('phone')
|
|
|
+ email = request.form.get('email')
|
|
|
+ company = request.form.get('company')
|
|
|
+ department = request.form.get('department')
|
|
|
+ role = request.form.get('role')
|
|
|
+ permission = request.form.get('permission')
|
|
|
+ on_job_status = request.form.get('on_job_status')
|
|
|
+ duty = request.form.get('duty')
|
|
|
+ nationality = request.form.get('nationality')
|
|
|
+
|
|
|
+ with Session(engine) as session:
|
|
|
+ stmt = update(User).where(User.id == user_id).values(
|
|
|
+ user_name=username,
|
|
|
+ password=User().generate_password(password),
|
|
|
+ photograph=photograph,
|
|
|
+ name=name,
|
|
|
+ phone=phone,
|
|
|
+ email=email,
|
|
|
+ company=company,
|
|
|
+ department=department,
|
|
|
+ role=role,
|
|
|
+ permission=permission,
|
|
|
+ on_job_status=on_job_status,
|
|
|
+ duty=duty,
|
|
|
+ nationality=nationality,
|
|
|
+ )
|
|
|
+ session.execute(stmt)
|
|
|
+ session.commit()
|
|
|
+
|
|
|
+ return jsonify(code=StatesCode.SUCCESS, message='修改成功')
|
|
|
+
|
|
|
+
|
|
|
+batch_delete_user = reqparse.RequestParser(bundle_errors=True)
|
|
|
+batch_delete_user.add_argument(name='users_id', type=str, required=True, location='form', help='用户id列表')
|
|
|
|
|
|
|
|
|
@ns.route('/batch_delete_user')
|
|
|
class BatchDeleteUserApi(Resource):
|
|
|
@ns.doc(id='batch_delete_users', description='批量删除用户')
|
|
|
- @ns.expect()
|
|
|
+ @ns.expect(batch_delete_user)
|
|
|
def delete(self):
|
|
|
"""批量删除用户"""
|
|
|
+ users_id = request.form.get('users_id')
|
|
|
+
|
|
|
+ if users_id is not None:
|
|
|
+ users_id = json.loads(users_id)
|
|
|
+ else:
|
|
|
+ return jsonify(code=StatesCode.UNKNOWN_ERROR, message='用户id不能为空')
|
|
|
+
|
|
|
+ with Session(engine) as session:
|
|
|
+ stmt = select(User).where(User.id.in_(users_id))
|
|
|
+ results = session.execute(stmt).scalars().all()
|
|
|
+
|
|
|
+ for result in results:
|
|
|
+ session.delete(result)
|
|
|
+ session.commit()
|
|
|
+
|
|
|
+ return jsonify(code=StatesCode.SUCCESS, message='批量删除成功')
|
|
|
|
|
|
- return {"code": StatesCode.SUCCESS, "message": "成功", "data": "user004"}
|
|
|
+
|
|
|
+batch_modify_user_status = reqparse.RequestParser(bundle_errors=True)
|
|
|
+batch_modify_user_status.add_argument(name='users_id', type=list, required=True, location='form', help='用户id列表')
|
|
|
+batch_modify_user_status.add_argument(name='status', type=int, required=True, location='form',
|
|
|
+ help='用户状态 0为正常,1为禁用')
|
|
|
|
|
|
|
|
|
@ns.route('/batch_modify_user_status')
|
|
|
class BatchModifyUsersStatusApi(Resource):
|
|
|
- @ns.doc(id='get_users_details', description='批量修改用户状态,激活、禁用')
|
|
|
- @ns.expect()
|
|
|
+ @ns.doc(id='batch_modify_user_status', description='批量修改用户状态,激活、禁用')
|
|
|
+ @ns.expect(batch_modify_user_status)
|
|
|
def put(self):
|
|
|
"""批量修改用户状态,激活、禁用"""
|
|
|
- return {"code": StatesCode.SUCCESS, "message": "成功", "data": ""}
|
|
|
+
|
|
|
+ users_id = request.form.get('users_id')
|
|
|
+ account_status = request.form.get('status')
|
|
|
+
|
|
|
+ if users_id is not None and account_status is not None:
|
|
|
+ users_id = json.loads(users_id)
|
|
|
+ else:
|
|
|
+ return jsonify(code=StatesCode.UNKNOWN_ERROR, message='用户id和状态不能为空')
|
|
|
+
|
|
|
+ values = []
|
|
|
+ for user_id in users_id:
|
|
|
+ values.append({"id": user_id, "account_status": account_status})
|
|
|
+
|
|
|
+ with Session(engine) as session:
|
|
|
+ session.execute(
|
|
|
+ update(User),
|
|
|
+ values
|
|
|
+ )
|
|
|
+ session.commit()
|
|
|
+
|
|
|
+ return jsonify(code=StatesCode.SUCCESS, message='批量修改用户状态成功')
|
|
|
|
|
|
|
|
|
@ns.route('/export_data')
|
|
@@ -209,4 +306,11 @@ class ExportDataApi(Resource):
|
|
|
@ns.expect()
|
|
|
def get(self):
|
|
|
"""导出用户数据"""
|
|
|
- return {"code": StatesCode.SUCCESS, "message": "成功", "data": ""}
|
|
|
+ with Session(engine) as session:
|
|
|
+ stmt = select(User)
|
|
|
+ results = session.execute(stmt).scalars().all()
|
|
|
+
|
|
|
+ response = Response(StringIO(json.dumps(to_dict(results))))
|
|
|
+ response.headers['Content-Type'] = 'application/octet-stream'
|
|
|
+ response.headers['Content-Disposition'] = 'attachment; filename=%s' % 'users.json'
|
|
|
+ return response
|