64 lines
2.6 KiB
Python
64 lines
2.6 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 DataFujian(db.Model, Model, BaseModelMixin):
|
|
__tablename__ = 'DATA_FUJIAN'
|
|
|
|
id = Column('ID', Integer, primary_key=True)
|
|
number = Column('NUMBER', String(128), default='', comment='编码')
|
|
name = Column('NAME', String(128), default='', comment='名称')
|
|
spec = Column('SPEC', String(128), default='', comment='规格')
|
|
unit = Column('UNIT', String(128), default='', comment='单位')
|
|
price_without_tax = Column('PRICE_WITHOUT_TAX', Numeric(16, 4), default=0, comment='除价格')
|
|
price = Column('PRICE', Numeric(16, 4), default=0, comment='含税价')
|
|
category = Column('CATEGORY', String(128), default='', comment='分类')
|
|
year = Column('YEAR', Integer, default=0, comment='年份')
|
|
month = Column('MONTH', Integer, default=0, comment='月份')
|
|
city = Column('CITY', String(128), default='', comment='地市')
|
|
date = Column('DATE', Date, comment='日期')
|
|
|
|
__table_args__ = (
|
|
UniqueConstraint(year, month, city, name, spec, name='Idx_key'),
|
|
{'comment': '福建数据'},
|
|
)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def find_by_key(self):
|
|
query = DataFujian.query
|
|
query = query.filter(DataFujian.year == self.year)
|
|
query = query.filter(DataFujian.month == self.month)
|
|
query = query.filter(DataFujian.city == self.city)
|
|
query = query.filter(DataFujian.name == self.name)
|
|
query = query.filter(DataFujian.spec == self.spec)
|
|
result = query.one_or_none()
|
|
return result
|
|
|
|
@classmethod
|
|
def get_query(cls, year=None, month=None, name=None, spec=None, name_in=None, region='福州', number=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 number:
|
|
query = query.filter(cls.number == number)
|
|
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.like(f'%{spec}%'))
|
|
if region:
|
|
query = query.filter(cls.city.like(f'%{region}%'))
|
|
return query
|