dataplatform/APPData/Crud/CompanyCrud.py

64 lines
1.9 KiB
Python

from sqlalchemy import or_
from sqlalchemy.orm import Session
from APPData.Model.CompanyModel import Company
def set_next_id(db: Session, num_len: int, prefix: str, model):
data = db.query(model).with_entities(model.id).order_by(model.id.desc()).first()
if data:
num = str(int({**data}.get("id").split(prefix)[-1]) + 1)
return prefix + "0" * (num_len - len(num)) + num
else:
return prefix + "0" * (num_len - 1) + "1"
def get_company_by_name(db: Session, name: str):
company_obj = db.query(Company).filter(Company.name.like('%' + name + '%')).first()
return company_obj
def get_company_by_id(db: Session, _id: str):
company_obj = db.query(Company).filter_by(id=_id).first()
return company_obj
def create_company_by_name(db: Session, name: str):
_id = set_next_id(db=db, num_len=8, prefix="CID", model=Company)
item = Company(id=_id, name=name)
db.add(item)
db.commit()
db.refresh(item)
return item
def get_company_total(db: Session, name, page: int = 0, pagesize: int = 10):
"""
:param db:
:param name:
:param category:
:param subcategory:
:param page:
:param pagesize:
:return:
"""
total = db.query(Company).filter(
or_(Company.name.like("%{}%".format("" if name is None else name)), name is None)).count()
detail = db.query(Company).filter(
or_(Company.name.like("%{}%".format("" if name is None else name)), name is None)).offset(
(page - 1) * pagesize).limit(pagesize).all()
return {
"total": total,
"detail": detail
}
def search_all_data(db, _id: str):
company_obj = db.query(Company).filter_by(id=_id).first()
return company_obj.dict()
def search_financial_data(db, _id: str, report_date: list):
company_obj = db.query(Company).filter_by(id=_id).first()
return company_obj.financial_dict(report_date)