diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml
new file mode 100644
index 0000000..02b915b
--- /dev/null
+++ b/.idea/git_toolbox_prj.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/urban-investment-research.iml b/.idea/urban-investment-research.iml
index 8e5446a..e24c4b8 100644
--- a/.idea/urban-investment-research.iml
+++ b/.idea/urban-investment-research.iml
@@ -3,6 +3,7 @@
+
@@ -11,4 +12,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Context/common.py b/Context/common.py
index f587d14..ed6b464 100644
--- a/Context/common.py
+++ b/Context/common.py
@@ -1,5 +1,8 @@
# 全局使用的服务放到这里初始化,作为项目配置输入的入口
from logging import getLogger
+
+from sqlalchemy.orm import declarative_base
+
from Utils.AuthUtils import AuthUtil, TokenDataModel
from Utils.RedisUtils import RedisPool
from Utils.SqlAlchemyUtils import SqlalchemyConnect
@@ -18,7 +21,8 @@ redis_pool = RedisPool(host=conf['redis']['host'], port=int(conf['redis']['port'
redis_pool.connect()
# 共用mysql数据库
-common_db = SqlalchemyConnect(host=conf['mysql']['host'],
+common_db_base = declarative_base()
+common_db = SqlalchemyConnect(common_db_base, host=conf['mysql']['host'],
user=conf['mysql']['user'],
password=conf['mysql']['password'],
db=conf['mysql']['db'])
diff --git a/Mods/EditRecord/Crud.py b/Mods/EditRecord/Crud.py
index e69de29..a565c4e 100644
--- a/Mods/EditRecord/Crud.py
+++ b/Mods/EditRecord/Crud.py
@@ -0,0 +1,40 @@
+from sqlalchemy.orm import Session
+from .Schemas import EditItemTypeQuery, EditItemTypeAddInfo
+from .Models import EditRecord, EditItemType
+
+
+def edit_item_type_add(db: Session, data: EditItemTypeAddInfo):
+ item = EditItemType(**data.dict())
+ db.add(item)
+ db.commit()
+ db.refresh(item)
+ return item
+
+
+def edit_item_type_delete(db: Session, item_id: int):
+ db.query(EditItemType).filter_by(id=item_id).delete()
+ db.commit()
+
+
+def edit_item_type_query(db: Session, params: EditItemTypeQuery):
+ params_dict = params.dict()
+ query = db.query(EditItemType)
+ db_model = EditItemType
+ for key, value in params_dict.items():
+ if key not in ['page', 'page_size'] and value is not None:
+ if type(value) == str:
+ query = query.filter(getattr(db_model, key).like(f'%{value}%'))
+ elif type(value) in [int, float, bool]:
+ query = query.filter_by(**{key: value})
+ else:
+ query = query.filter(getattr(db_model, key) == value)
+ count = query.count()
+ page = None
+ page_size = None
+ if 'page' in params_dict:
+ page = params_dict['page']
+ if 'page_size' in params_dict:
+ page_size = params_dict['page_size']
+ if page is not None and page_size is not None:
+ query = query.offset((page - 1) * page_size).limit(page_size).all()
+ return count, query
diff --git a/Mods/EditRecord/Models.py b/Mods/EditRecord/Models.py
index 052a32d..05756bc 100644
--- a/Mods/EditRecord/Models.py
+++ b/Mods/EditRecord/Models.py
@@ -1,7 +1,43 @@
-from Utils.SqlAlchemyUtils import Base
-from sqlalchemy import Column, Integer, String
+from sqlalchemy.orm import relationship
+
+from Context.common import common_db
+from sqlalchemy import Column, Integer, String, ForeignKey, Text
+
+Base = common_db.Base
class EditRecord(Base):
+ """
+ 编辑记录表
+ """
+ __tablename__ = "edit_record"
id = Column(Integer, primary_key=True)
- user = Column(String(255))
+ edit_user = Column(String(128), ForeignKey('user.email'), comment="填报人")
+ user_info = relationship('User', uselist=False, backref='user')
+ item_id = Column(Integer, comment="编辑项id")
+ item_type_id = Column(Integer, ForeignKey('edit_item_type.id'), comment="编辑项类型信息")
+ item_type_info = relationship('EditItemType', uselist=False, backref='edit_item_type')
+ before_edit_data = Column(Text, comment="编辑前的信息json")
+ after_edit_data = Column(Text, comment="编辑后的信息json")
+
+ def to_dict(self):
+ data = {c.name: getattr(self, c.name) for c in self.__table__.columns}
+ user_info = getattr(self, 'user_info')
+ data['user_info'] = user_info.to_dict()
+ item_type_info = getattr(self, 'item_type_info')
+ data['item_type_info'] = item_type_info.to_dict()
+ return data
+
+
+class EditItemType(Base):
+ """
+ 编辑项信息配置表,这个表需手动配置
+ """
+ __tablename__ = "edit_item_type"
+ id = Column(Integer, primary_key=True)
+ name = Column(String(255), comment="名称")
+ category = Column(String(255), comment="类别")
+
+ def to_dict(self):
+ data = {c.name: getattr(self, c.name) for c in self.__table__.columns}
+ return data
diff --git a/Mods/EditRecord/Router.py b/Mods/EditRecord/Router.py
index e69de29..584d9d8 100644
--- a/Mods/EditRecord/Router.py
+++ b/Mods/EditRecord/Router.py
@@ -0,0 +1,35 @@
+from fastapi import APIRouter, Depends
+from sqlalchemy.orm import Session
+
+from Context.common import common_db
+from . import Schemas
+from . import Crud
+
+router = APIRouter(tags=["日报"],
+ prefix="/api/record")
+
+
+@router.post("/edit_item_type/add", response_model=Schemas.EditItemTypeAddRes)
+def edit_item_type_query(req: Schemas.EditItemTypeAddReq, db: Session = Depends(common_db.get_db)):
+ item = Crud.edit_item_type_add(db, req)
+ return Schemas.EditItemTypeAddRes(**item.to_dict())
+
+
+@router.post("/edit_item_type/delete")
+def edit_item_type_delete(req: Schemas.EditItemTypeDeleteReq, db: Session = Depends(common_db.get_db)):
+ Crud.edit_item_type_delete(db, req.id)
+ return "删除成功"
+
+
+@router.post("/edit_item_type/update", response_model=Schemas.EditItemTypeUpdateRes)
+def edit_item_type_update(req: Schemas.EditItemTypeUpdateReq, db: Session = Depends(common_db.get_db)):
+ count, query = Crud.edit_record_update(db, req)
+ items = [Schemas.EditItemTypeInfo(**item.to_dict()) for item in query]
+ return Schemas.EditItemTypeQueryRes(count, items)
+
+
+@router.post("/edit_item_type/query", response_model=Schemas.EditItemTypeQueryRes)
+def edit_item_type_query(req: Schemas.EditItemTypeQueryReq, db: Session = Depends(common_db.get_db)):
+ count, query = Crud.edit_item_type_query(db, req)
+ items = [Schemas.EditItemTypeInfo(**item.to_dict()) for item in query]
+ return Schemas.EditItemTypeQueryRes(count, items)
diff --git a/Mods/EditRecord/Schemas.py b/Mods/EditRecord/Schemas.py
index e69de29..88e8243 100644
--- a/Mods/EditRecord/Schemas.py
+++ b/Mods/EditRecord/Schemas.py
@@ -0,0 +1,38 @@
+from pydantic import BaseModel
+from typing import Optional, List
+
+
+class EditItemTypeInfo(BaseModel):
+ id: Optional[int]
+ name: Optional[str]
+ category: Optional[str]
+
+
+class EditItemTypeAddInfo(BaseModel):
+ name: str
+ category: str
+
+
+class EditItemTypeAddReq(EditItemTypeAddInfo):
+ pass
+
+
+class EditItemTypeAddRes(EditItemTypeInfo):
+ pass
+
+
+class EditItemTypeQuery(EditItemTypeInfo):
+ pass
+
+
+class EditItemTypeQueryReq(EditItemTypeQuery):
+ pass
+
+
+class EditItemTypeQueryRes(BaseModel):
+ count: int
+ items: List[EditItemTypeInfo]
+
+
+class EditItemTypeDeleteReq(BaseModel):
+ id: int
diff --git a/Utils/SqlAlchemyUtils.py b/Utils/SqlAlchemyUtils.py
index d683c1c..4f869d5 100644
--- a/Utils/SqlAlchemyUtils.py
+++ b/Utils/SqlAlchemyUtils.py
@@ -2,11 +2,10 @@ from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Session
-Base = declarative_base()
-
class SqlalchemyConnect:
- def __init__(self, host="127.0.0.1", user="", password="", db=""):
+ def __init__(self, Base: declarative_base, host="127.0.0.1", user="", password="", db=""):
+ self.Base = Base
self.host = host
self.user = user
self.password = password
@@ -43,4 +42,4 @@ class SqlalchemyConnect:
return db
def init_database(self):
- Base.metadata.create_all(bind=self.engine)
+ self.Base.metadata.create_all(bind=self.engine)
diff --git a/debug.py b/debug.py
index 8cbe184..925cb3f 100644
--- a/debug.py
+++ b/debug.py
@@ -1,6 +1,6 @@
from fastapi.exceptions import RequestValidationError
from Config.uvicorn_log_config import uvicorn_log_config
-from Middleware.DebugMiddleware import validation_exception_handler, exception_handler
+from Utils.MiddlewareUtils import validation_exception_handler, exception_handler
from Utils.PrintUtils import hook_print_exception
from main import app
import uvicorn
diff --git a/main.py b/main.py
index ab6630f..c1d5865 100644
--- a/main.py
+++ b/main.py
@@ -3,8 +3,6 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from Config.uvicorn_log_config import uvicorn_log_config
-from Router import HelloRouter
-from CrudRouter import StudentCrudRouter
from Context.common import conf
app = FastAPI(
@@ -20,8 +18,6 @@ app.add_middleware(
allow_headers=["*"],
)
-app.include_router(HelloRouter.router)
-app.include_router(StudentCrudRouter.router)
if __name__ == '__main__':
uvicorn.run(app, log_config=uvicorn_log_config, port=int(conf['app']['port']))