添加舆情资讯表

This commit is contained in:
wcq 2023-03-20 14:33:41 +08:00
parent 0576acf91d
commit ff75e60285
7 changed files with 207 additions and 3 deletions

View File

@ -9,8 +9,8 @@ class CompanyBaseInfoInfo(BaseModel):
legal_person: Optional[str] legal_person: Optional[str]
reg_capital: Optional[str] reg_capital: Optional[str]
paid_capital: Optional[str] paid_capital: Optional[str]
establish_date: date establish_date: Optional[date]
approved_date: date approved_date: Optional[date]
license_duration: Optional[str] license_duration: Optional[str]
reg_status: Optional[str] reg_status: Optional[str]
reg_location: Optional[str] reg_location: Optional[str]

View File

@ -0,0 +1,57 @@
from sqlalchemy.orm import Session
from . import Schemas
from .Models import OpinionInformation
def opinion_information_add(db: Session, data: Schemas.OpinionInformationAddInfo):
item = OpinionInformation(**data.dict())
db.add(item)
db.commit()
db.refresh(item)
return item
def opinion_information_delete(db: Session, item_id: int):
db.query(OpinionInformation).filter_by(id=item_id).delete()
db.commit()
def opinion_information_update(db: Session, data: Schemas.OpinionInformationUpdateInfo):
db.query(OpinionInformation).filter_by(id=data.id).update({key: v for key, v in data.dict().items() if v is not None})
db.commit()
item = db.query(OpinionInformation).filter_by(id=data.id).first()
return item
def opinion_information_get(db: Session, item_id: int):
item = db.query(OpinionInformation).filter_by(id=item_id).first()
return item
def opinion_information_query(db: Session, params: Schemas.OpinionInformationQuery):
params_dict = params.dict()
query = db.query(OpinionInformation)
db_model = OpinionInformation
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']
# 页数不超过100
page_size = min(page_size, 100)
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
################

View File

@ -0,0 +1,22 @@
from sqlalchemy.orm import relationship
from Context.common import common_db
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, func, Date
class OpinionInformation(common_db.Base):
"""
舆情资讯表
"""
__tablename__ = "opinion_information"
id = Column(Integer)
type = Column(String(128), comment="主体类别")
item_id = Column(Integer, comment="资讯主体id")
title = Column(String(128), comment="标题")
url = Column(Text, comment="原文链接")
publish_date = Column(Date, comment="发布时间")
remark = Column(Text, comment="备注")
created_at = Column(DateTime, comment="创建时间")
def to_dict(self):
data = {c.name: getattr(self, c.name) for c in self.__table__.columns}
return data

View File

@ -0,0 +1,43 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from Context.common import common_db
from . import Schemas
from . import Crud
router = APIRouter(tags=["舆情资讯"])
@router.post("/opinion_information/add", summary="添加舆情资讯", response_model=Schemas.OpinionInformationAddRes)
def opinion_information_add(req: Schemas.OpinionInformationAddReq, db: Session = Depends(common_db.get_db)):
item = Crud.opinion_information_add(db, req)
return Schemas.OpinionInformationAddRes(**item.to_dict())
@router.post("/opinion_information/delete", summary="删除舆情资讯")
def opinion_information_delete(req: Schemas.OpinionInformationDeleteReq, db: Session = Depends(common_db.get_db)):
Crud.opinion_information_delete(db, req.id)
return "删除成功"
@router.post("/opinion_information/update", summary="更新舆情资讯", response_model=Schemas.OpinionInformationUpdateRes)
def opinion_information_update(req: Schemas.OpinionInformationUpdateReq, db: Session = Depends(common_db.get_db)):
item = Crud.opinion_information_update(db, req)
return Schemas.OpinionInformationUpdateRes(**item.to_dict())
@router.post("/opinion_information/get", summary="获取舆情资讯", response_model=Schemas.OpinionInformationGetRes)
def opinion_information_get(req: Schemas.OpinionInformationGetReq, db: Session = Depends(common_db.get_db)):
item = Crud.opinion_information_get(db, req.id)
if not item:
raise HTTPException(detail="未查询到信息", status_code=404)
return Schemas.OpinionInformationGetRes(**item.to_dict())
@router.post("/opinion_information/query", summary="查询舆情资讯", response_model=Schemas.OpinionInformationQueryRes)
def opinion_information_query(req: Schemas.OpinionInformationQueryReq, db: Session = Depends(common_db.get_db)):
count, query = Crud.opinion_information_query(db, req)
items = [Schemas.OpinionInformationInfo(**item.to_dict()) for item in query]
return Schemas.OpinionInformationQueryRes(count=count, items=items)
#########

View File

@ -0,0 +1,71 @@
from datetime import datetime, date
from pydantic import BaseModel
from typing import Optional, List
class OpinionInformationInfo(BaseModel):
id: Optional[int]
type: Optional[str]
item_id: Optional[int]
title: Optional[str]
url: Optional[str]
publish_date: Optional[date]
remark: Optional[str]
created_at: Optional[datetime]
class OpinionInformationAddInfo(BaseModel):
type: Optional[str]
item_id: Optional[int]
title: str
url: Optional[str]
publish_date: Optional[date]
remark: Optional[str]
class OpinionInformationAddReq(OpinionInformationAddInfo):
pass
class OpinionInformationAddRes(OpinionInformationInfo):
pass
class OpinionInformationUpdateInfo(OpinionInformationInfo):
pass
class OpinionInformationUpdateReq(OpinionInformationUpdateInfo):
pass
class OpinionInformationUpdateRes(OpinionInformationInfo):
pass
class OpinionInformationQuery(OpinionInformationInfo):
page_size: Optional[int]
page: Optional[int]
class OpinionInformationQueryReq(OpinionInformationQuery):
pass
class OpinionInformationGetReq(BaseModel):
id: int
class OpinionInformationGetRes(OpinionInformationInfo):
pass
class OpinionInformationQueryRes(BaseModel):
count: int
items: List[OpinionInformationInfo]
class OpinionInformationDeleteReq(BaseModel):
id: int
#######################

View File

@ -0,0 +1,9 @@
from fastapi import APIRouter, Depends
from .Mods.OpinionInformation import Router as OpinionInformationRouter
from Context.common import auth_util
router = APIRouter(
prefix="/api/common_information",
dependencies=[Depends(auth_util.token_data_depend)]
)
router.include_router(OpinionInformationRouter.router)

View File

@ -7,7 +7,9 @@ from Mods.EditRecord import Router as EditRecordRouter
from Mods.User import Router as UserRouter from Mods.User import Router as UserRouter
from Mods.BasicInformation import Router as BasicInformationRouter from Mods.BasicInformation import Router as BasicInformationRouter
from Mods.OtherInformation import Router as OtherInformationRouter from Mods.OtherInformation import Router as OtherInformationRouter
from Mods.CommonInformation import Router as CommonInformationRouter
from Utils.RecordUtils import record_middleware from Utils.RecordUtils import record_middleware
common_db.init_database() common_db.init_database()
app = FastAPI( app = FastAPI(
title="城投调研工具后端", title="城投调研工具后端",
@ -22,12 +24,12 @@ app.add_middleware(
allow_headers=["*"], allow_headers=["*"],
) )
app.middleware('http')(record_middleware) app.middleware('http')(record_middleware)
app.include_router(EditRecordRouter.router) app.include_router(EditRecordRouter.router)
app.include_router(UserRouter.router) app.include_router(UserRouter.router)
app.include_router(BasicInformationRouter.router) app.include_router(BasicInformationRouter.router)
app.include_router(OtherInformationRouter.router) app.include_router(OtherInformationRouter.router)
app.include_router(CommonInformationRouter.router)
if __name__ == '__main__': if __name__ == '__main__':
uvicorn.run(app, log_config=uvicorn_log_config, port=int(conf['app']['port'])) uvicorn.run(app, log_config=uvicorn_log_config, port=int(conf['app']['port']))