64 lines
1.9 KiB
Python
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)
|