Files
material-api/web/commons/models/asphalt_modifier.py
2024-07-11 09:13:30 +08:00

47 lines
1.7 KiB
Python

import datetime
from dateutil.relativedelta import relativedelta
from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint
from commons.models.mixin.base import BaseModelMixin
from commons.models.model import Model
from core.extensions import db
class AsphaltModifier(db.Model, Model, BaseModelMixin):
__tablename__ = 'ASPHALT_MODIFIER'
id = Column('ID', Integer, primary_key=True)
name = Column('NAME', String(128), default='', comment='名称')
spec = Column('SPEC', String(128), default='', comment='规格')
price = Column('PRICE', Numeric(16, 4), default=0, comment='价格')
date = Column('DATE', Date, comment='日期')
__table_args__ = (
UniqueConstraint(name, spec, date, name='Idx_key'),
{'comment': '沥青改性剂'},
)
def find_by_key(self):
query = AsphaltModifier.query
query = query.filter(AsphaltModifier.name == self.name)
query = query.filter(AsphaltModifier.spec == self.spec)
query = query.filter(AsphaltModifier.date == self.date)
result = query.one_or_none()
return result
@classmethod
def get_query(cls, year=None, month=None, name=None, spec=None, name_in=None):
query = cls.query
if year and month:
start_date = datetime.date(year, month, 1)
end_date = start_date + relativedelta(months=1)
query = query.filter(cls.date >= start_date)
query = query.filter(cls.date < end_date)
if name:
query = query.filter(cls.name == name)
if name_in:
query = query.filter(cls.name.in_(name_in))
if spec:
query = query.filter(cls.spec == spec)
return query