项目基础模块代码
This commit is contained in:
42
app/model/bussiness_model.py
Normal file
42
app/model/bussiness_model.py
Normal file
@ -0,0 +1,42 @@
|
||||
from app.db.db_base import DbCommon
|
||||
from sqlalchemy import String, Integer
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
|
||||
class ProjectType(DbCommon):
|
||||
"""
|
||||
项目类别表 - 标识项目的类型目前存在的(目标识别,OCR识别,瑕疵检测,图像分类)
|
||||
"""
|
||||
__tablename__ = "project_type"
|
||||
type_code = Mapped[str] = mapped_column(String(20), unique=True, nullable=False)
|
||||
type_name = Mapped[str] = mapped_column(String(20))
|
||||
icon_path = Mapped[str] = mapped_column(String(255))
|
||||
description = Mapped[str] = mapped_column(String(255))
|
||||
type_status = Mapped[str] = mapped_column(String(10))
|
||||
|
||||
|
||||
class ProjectInfo(DbCommon):
|
||||
"""项目信息表"""
|
||||
__tablename__ = "project_info"
|
||||
project_no = Mapped[str] = mapped_column(String(32), unique=True, nullable=False)
|
||||
project_name = Mapped[str] = mapped_column(String(32), unique=True, nullable=False)
|
||||
type_code = Mapped[str] = mapped_column(String(10))
|
||||
description = Mapped[str] = mapped_column(String(255))
|
||||
project_status = Mapped[str] = mapped_column(String(10))
|
||||
user_id = Mapped[int] = mapped_column(Integer)
|
||||
train_version = Mapped[int] = mapped_column(Integer)
|
||||
|
||||
|
||||
class ProjectLabel(DbCommon):
|
||||
"""项目标签表"""
|
||||
__tablename__ = "project_label"
|
||||
label_name = Mapped[str] = mapped_column(String(32), unique=True, nullable=False)
|
||||
project_id = Mapped[int] = mapped_column(Integer, nullable=False)
|
||||
|
||||
|
||||
class ProjectImage(DbCommon):
|
||||
"""项目图片表"""
|
||||
__tablename__ = "project_image"
|
||||
image_url = Mapped[str] = mapped_column(String(255), nullable=False)
|
||||
thumb_image_url = Mapped[str] = mapped_column(String(255), nullable=False)
|
||||
project_id = Mapped[int] = mapped_column(Integer)
|
35
app/model/crud/project_image_crud.py
Normal file
35
app/model/crud/project_image_crud.py
Normal file
@ -0,0 +1,35 @@
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy import asc
|
||||
|
||||
from app.model.bussiness_model import ProjectImage as piModel
|
||||
from app.model.schemas.project_image_schemas import ProjectImage, ProjectImagePager
|
||||
from app.db.page_util import get_pager
|
||||
|
||||
|
||||
def get_image_pager(image: ProjectImagePager, session: Session):
|
||||
query = session.query(piModel).filter(piModel.project_id == image.project_id).order_by(asc(piModel.id))
|
||||
pager = get_pager(query, image.pagerNum, image.pagerSize)
|
||||
pager.data = [ProjectImage.from_orm(image) for image in pager.data]
|
||||
return pager
|
||||
|
||||
|
||||
def get_image_list(image: ProjectImage, session: Session):
|
||||
query = session.query(piModel).filter(piModel.project_id == image.project_id).order_by(asc(piModel.id))
|
||||
image_list = [ProjectImage.from_orm(image) for image in query.all()]
|
||||
return image_list
|
||||
|
||||
|
||||
def add_image(image: ProjectImage, session: Session):
|
||||
session.add(image)
|
||||
session.commit()
|
||||
return image
|
||||
|
||||
|
||||
def del_image(id: str, session: Session):
|
||||
row_del = session.query(piModel).filter_by(id=id).delete()
|
||||
session.commit()
|
||||
return row_del
|
||||
|
||||
|
||||
|
||||
|
42
app/model/crud/project_info_crud.py
Normal file
42
app/model/crud/project_info_crud.py
Normal file
@ -0,0 +1,42 @@
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy import desc
|
||||
|
||||
from app.model.bussiness_model import ProjectInfo
|
||||
from app.model.schemas.project_info_schemas import ProjectInfoOut
|
||||
from app.model.schemas.project_info_schemas import ProjectInfoPager
|
||||
from app.db.page_util import get_pager
|
||||
|
||||
|
||||
def get_project_pager(info: ProjectInfoPager, session: Session):
|
||||
"""分页查询项目信息"""
|
||||
query = session.query(ProjectInfo).order_by(desc(ProjectInfo.id))
|
||||
filters = []
|
||||
if info.project_name is not None:
|
||||
filters.append(ProjectInfo.project_name.ilike(f"%{info.project_name}%"))
|
||||
if len(filters) > 0:
|
||||
query.filter(*filters)
|
||||
pager = get_pager(query, info.pagerNum, info.pagerSize)
|
||||
pager.data = [ProjectInfoOut.from_orm(info).dict() for info in pager.data]
|
||||
return pager
|
||||
|
||||
|
||||
def get_project_by_id(id: str, session: Session):
|
||||
info = session.query(ProjectInfo).filter_by(id=id).first()
|
||||
info_out = ProjectInfoOut.from_orm(info)
|
||||
return info_out
|
||||
|
||||
def add_project(info: ProjectInfo, session: Session):
|
||||
"""新建项目,并在对应文件夹下面创建文件夹"""
|
||||
session.add(info)
|
||||
session.commit()
|
||||
return info
|
||||
|
||||
|
||||
def check_project_name(project_name: str, session: Session):
|
||||
"""检验是否存在重名的项目名称"""
|
||||
count = session.query(ProjectInfo).filter(ProjectInfo.project_name == project_name).count()
|
||||
if count > 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
72
app/model/crud/project_label_crud.py
Normal file
72
app/model/crud/project_label_crud.py
Normal file
@ -0,0 +1,72 @@
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.model.bussiness_model import ProjectLabel as plModel
|
||||
from app.model.schemas.project_label_schemas import ProjectLabel
|
||||
|
||||
|
||||
def get_label_list(project_id: int, session: Session):
|
||||
"""
|
||||
根绝项目id获取标签列表
|
||||
:param project_id: 项目id
|
||||
:param session:
|
||||
:return:
|
||||
"""
|
||||
label_list = session.query(plModel).filter(plModel.project_id == project_id).all()
|
||||
label_list = [ProjectLabel.from_orm(label) for label in label_list]
|
||||
return label_list
|
||||
|
||||
|
||||
def add_label(label: plModel, session: Session):
|
||||
"""
|
||||
新增标签
|
||||
:param label:
|
||||
:param session:
|
||||
:return:
|
||||
"""
|
||||
session.add(label)
|
||||
session.commit()
|
||||
return label.id
|
||||
|
||||
|
||||
def check_label_name(project_id: int, label_name: str, session: Session, label_id: int = None):
|
||||
"""
|
||||
检验标签名称是否存在
|
||||
:param label_id:
|
||||
:param project_id: 项目id
|
||||
:param label_name: 标签名称
|
||||
:param session:
|
||||
:return:
|
||||
"""
|
||||
query = session.query(plModel)
|
||||
filters = [plModel.project_id == project_id, plModel.label_name == label_name]
|
||||
if label_id is not None:
|
||||
filters.append(plModel.id != label_id)
|
||||
query.filter(*filters)
|
||||
if query.count() > 0:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def update_label(label: plModel, session: Session):
|
||||
"""
|
||||
修改标签名称
|
||||
:param label:
|
||||
:param session:
|
||||
:return:
|
||||
"""
|
||||
session.query(plModel).filter_by(id=label.id).update({
|
||||
"label_name": label.label_name
|
||||
})
|
||||
session.commit()
|
||||
|
||||
|
||||
def del_label(id: str, session: Session):
|
||||
"""
|
||||
根据标签id删除标签
|
||||
:param id: 标签id
|
||||
:param session:
|
||||
:return:
|
||||
"""
|
||||
row_del = session.query(plModel).filter_by(id=id).delete()
|
||||
return row_del
|
13
app/model/crud/project_type_crud.py
Normal file
13
app/model/crud/project_type_crud.py
Normal file
@ -0,0 +1,13 @@
|
||||
from app.model.bussiness_model import ProjectType
|
||||
from app.model.schemas.project_type_schemas import ProjectTypeOut
|
||||
|
||||
from sqlalchemy import asc
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
|
||||
def get_list(session: Session):
|
||||
"""获取项目类型列表"""
|
||||
query = session.query(ProjectType).order_by(asc(ProjectType.id))
|
||||
query.filter(ProjectType.type_status == "0")
|
||||
result_list = [ProjectTypeOut.from_orm(project_type).dict() for project_type in query.all()]
|
||||
return result_list
|
@ -1,23 +1,21 @@
|
||||
from app.model.model import SysUser
|
||||
from app.model.sys_model import SysUser
|
||||
from app.model.schemas.sys_user_schemas import SysUserPager, SysUserOut
|
||||
from app.common.bcrypt_pw import hash_password
|
||||
from app.db.page_util import get_pager
|
||||
|
||||
from sqlalchemy import and_, desc
|
||||
from sqlalchemy import and_, asc
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
|
||||
def user_pager(user: SysUserPager, session: Session):
|
||||
query = session.query(SysUser).order_by(desc(SysUser.id))
|
||||
query = session.query(SysUser).order_by(asc(SysUser.id))
|
||||
filters = []
|
||||
if user.username is not None:
|
||||
filters.append(SysUser.username.ilike(f"%{user.username}%"))
|
||||
if user.dept_id is not None:
|
||||
filters.append(SysUser.dept_id == user.dept_id)
|
||||
if len(filters) > 0:
|
||||
query.filter(and_(*filters))
|
||||
pager = get_pager(query, user.pagerNum, user.pagerSize)
|
||||
pager.data = [SysUserOut.from_orm(user) for user in pager.data]
|
||||
pager.data = [SysUserOut.from_orm(user).dict() for user in pager.data]
|
||||
return pager
|
||||
|
||||
|
||||
@ -35,13 +33,13 @@ def get_user_by_id(id: int, session: Session):
|
||||
|
||||
def stop_user(user: SysUser, session: Session):
|
||||
user.user_status = "1"
|
||||
session.commit();
|
||||
session.commit()
|
||||
return user
|
||||
|
||||
|
||||
def start_user(user: SysUser, session: Session):
|
||||
user.user_status = "0"
|
||||
session.commit();
|
||||
session.commit()
|
||||
return user
|
||||
|
||||
|
||||
|
@ -1,29 +0,0 @@
|
||||
from app.db.db_base import DbCommon
|
||||
from sqlalchemy import String,Integer
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
|
||||
class SysUser(DbCommon):
|
||||
|
||||
__tablename__ = "sys_user"
|
||||
username: Mapped[str] = mapped_column(String(50), unique=True, nullable=False)
|
||||
password: Mapped[str] = mapped_column(String(255))
|
||||
dept_id: Mapped[int] = mapped_column(Integer)
|
||||
login_name: Mapped[str] = mapped_column(String(255))
|
||||
avatar: Mapped[str] = mapped_column(String(255))
|
||||
user_status: Mapped[str] = mapped_column(String(10))
|
||||
|
||||
|
||||
def keys(self):
|
||||
keys = ["username", "password", "dept_id", "login_name", "avatar", "user_status"]
|
||||
keys.extend(super().keys())
|
||||
return keys
|
||||
|
||||
|
||||
def __getitem__(self, item):
|
||||
'''
|
||||
内置方法, 当使用obj['name']的形式的时候, 将调用这个方法, 这里返回的结果就是值
|
||||
:param item:
|
||||
:return:
|
||||
'''
|
||||
return getattr(self, item, None)
|
15
app/model/schemas/project_image_schemas.py
Normal file
15
app/model/schemas/project_image_schemas.py
Normal file
@ -0,0 +1,15 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ProjectImage(BaseModel):
|
||||
id: Optional[int] = Field(None, description="id")
|
||||
project_id: Optional[int] = Field(..., description="项目id")
|
||||
image_url: Optional[str] = Field(..., description="原图路径")
|
||||
thumb_image_url: Optional[str] = Field(..., description="缩略图路径")
|
||||
|
||||
|
||||
class ProjectImagePager(BaseModel):
|
||||
project_id: Optional[int] = Field(..., description="项目id")
|
||||
pagerNum: Optional[int] = Field(1, description="当前页码")
|
||||
pagerSize: Optional[int] = Field(10, description="每页数量")
|
32
app/model/schemas/project_info_schemas.py
Normal file
32
app/model/schemas/project_info_schemas.py
Normal file
@ -0,0 +1,32 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ProjectInfoIn(BaseModel):
|
||||
"""项目信息输入"""
|
||||
id: Optional[int] = Field(None, description="项目id")
|
||||
project_name: Optional[str] = Field(..., description="项目名称")
|
||||
type_code: Optional[str] = Field(..., description="项目类型编码")
|
||||
description: Optional[str] = Field(None, description="项目描述")
|
||||
|
||||
|
||||
class ProjectInfoOut(BaseModel):
|
||||
"""项目信息输出"""
|
||||
id: Optional[int] = Field(None, description="项目id")
|
||||
project_no: Optional[str] = Field(..., description="项目编号")
|
||||
project_name: Optional[str] = Field(..., description="项目名称")
|
||||
type_code: Optional[str] = Field(..., description="项目类型编码")
|
||||
description: Optional[str] = Field(None, description="项目描述")
|
||||
user_name: Optional[str] = Field(None, description="创建人")
|
||||
train_version: Optional[int] = Field(None, description="训练版本号")
|
||||
project_status: Optional[str] = Field(None, description="项目状态")
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class ProjectInfoPager(BaseModel):
|
||||
project_name: Optional[str] = Field(None, description="项目名称")
|
||||
pagerNum: Optional[int] = Field(1, description="当前页码")
|
||||
pagerSize: Optional[int] = Field(10, description="每页数量")
|
||||
|
12
app/model/schemas/project_label_schemas.py
Normal file
12
app/model/schemas/project_label_schemas.py
Normal file
@ -0,0 +1,12 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ProjectLabel(BaseModel):
|
||||
"""项目标签输入输出"""
|
||||
id: Optional[int] = Field(None, description="id")
|
||||
project_id: Optional[int] = Field(..., description="项目id")
|
||||
label_name: Optional[str] = Field(..., description="标签名称")
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
26
app/model/schemas/project_type_schemas.py
Normal file
26
app/model/schemas/project_type_schemas.py
Normal file
@ -0,0 +1,26 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class ProjectTypeIn(BaseModel):
|
||||
"""
|
||||
项目类型输入
|
||||
"""
|
||||
type_code: Optional[str] = Field(..., description="类型code", max_length=20)
|
||||
type_name: Optional[str] = Field(..., description="类型名称", max_length=20, min_length=4)
|
||||
icon_path: Optional[str] = Field(None, description="iconPath", max_length=255)
|
||||
description: Optional[str] = Field(None, description="类型描述", max_length=255)
|
||||
|
||||
|
||||
class ProjectTypeOut(BaseModel):
|
||||
"""
|
||||
项目类型输出
|
||||
"""
|
||||
id: Optional[int] = Field(..., description="id")
|
||||
type_code: Optional[str] = Field(..., description="类型code", max_length=20)
|
||||
type_name: Optional[str] = Field(..., description="类型名称", max_length=20, min_length=4)
|
||||
icon_path: Optional[str] = Field(None, description="iconPath", max_length=255)
|
||||
description: Optional[str] = Field(None, description="类型描述", max_length=255)
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
@ -3,10 +3,9 @@ from typing import Optional
|
||||
|
||||
|
||||
# 用户相关的原型
|
||||
class SysUserIN(BaseModel):
|
||||
class SysUserIn(BaseModel):
|
||||
username: Optional[str] = Field(..., description="用户名", max_length=50)
|
||||
password: Optional[str] = Field(..., description="密码", max_length=30, min_length=6)
|
||||
dept_id: Optional[str] = Field(None, description="部门id")
|
||||
login_name: Optional[str] = Field(None, description="昵称", max_length=20)
|
||||
|
||||
|
||||
@ -18,9 +17,8 @@ class SysUserLogin(BaseModel):
|
||||
class SysUserOut(BaseModel):
|
||||
id: Optional[int] = Field(..., description="id")
|
||||
username: Optional[str] = Field(..., description="用户名")
|
||||
dept_id: Optional[str] = Field(None, description="部门id")
|
||||
dept_name: Optional[str] = Field(None, description="部门名称")
|
||||
login_name: Optional[str] = Field(None, description="昵称")
|
||||
user_status: Optional[str] = Field(None, description="用户状态")
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
@ -34,7 +32,6 @@ class SysUserUpdatePw(BaseModel):
|
||||
|
||||
class SysUserPager(BaseModel):
|
||||
username: Optional[str] = Field(None, description="用户名")
|
||||
dept_id: Optional[str] = Field(None, description="部门id")
|
||||
login_name: Optional[str] = Field(None, description="昵称")
|
||||
pagerNum: Optional[int] = Field(1, description="当前页码")
|
||||
pagerSize: Optional[int] = Field(10, description="每页数量")
|
||||
|
15
app/model/sys_model.py
Normal file
15
app/model/sys_model.py
Normal file
@ -0,0 +1,15 @@
|
||||
from app.db.db_base import DbCommon
|
||||
from sqlalchemy import String
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
|
||||
class SysUser(DbCommon):
|
||||
"""
|
||||
用户表 - 保存用户基本信息
|
||||
"""
|
||||
__tablename__ = "sys_user"
|
||||
username: Mapped[str] = mapped_column(String(50), unique=True, nullable=False)
|
||||
password: Mapped[str] = mapped_column(String(255))
|
||||
login_name: Mapped[str] = mapped_column(String(255))
|
||||
avatar: Mapped[str] = mapped_column(String(255))
|
||||
user_status: Mapped[str] = mapped_column(String(10))
|
Reference in New Issue
Block a user