Files
material-api/web/commons/models/asphalt_imported.py
2024-05-29 10:21:31 +08:00

49 lines
1.5 KiB
Python

from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func
from commons.models.mixin.calculator import CalculatorMixin
from core.extensions import db
class AsphaltImported(db.Model, CalculatorMixin):
__tablename__ = 'ASPHALT_IMPORTED'
id = Column('ID', Integer, primary_key=True)
name = Column('NAME', String(128), default='', comment='名称')
price = Column('PRICE', Numeric(16, 4), default=0, comment='价格')
date = Column('DATE', Date, comment='日期')
__table_args__ = (
UniqueConstraint(name, date, name='Idx_key'),
{'comment': '进口沥青'},
)
@classmethod
def get_items(cls, year, month, name_in):
query = cls.query
query = cls.query_by_month(query, year, month)
query = query.filter(cls.name.in_(name_in))
query = query.with_entities(cls.name, func.avg(cls.price))
query = query.group_by(cls.name)
result = query.all()
return result
@classmethod
def get_by_key(cls, name, date):
query = cls.query
query = query.filter(
cls.name == name,
cls.date == date,
)
return query.one_or_none()
def upsert(self):
result = self.get_by_key(self.name, self.date)
if not result:
session = db.session
session.add(self)
session.commit()
else:
session = db.session
self.id = result.id
session.add(result)
session.commit()