feat: 新增发布价计算按上月发布加浮动

This commit is contained in:
han0
2025-04-11 11:28:58 +08:00
parent da31327d55
commit cba5738557
3 changed files with 37 additions and 54 deletions

View File

@@ -2,6 +2,7 @@ import datetime
from sqlalchemy import func from sqlalchemy import func
from calculators import Helper
from commons.models.fujian_survey import FujianSurvey from commons.models.fujian_survey import FujianSurvey
from commons.models.price_publish import PricePublish from commons.models.price_publish import PricePublish
from commons.models.price_result import PriceResult from commons.models.price_result import PriceResult
@@ -80,62 +81,42 @@ class Collector:
display_digit=display_digit, display_digit=display_digit,
).upsert() ).upsert()
def get_from_survey(self):
query = FujianSurvey.get_query(self.year, self.month, material_id_in=self.material_codes)
data = query.all()
for item in data:
PricePublish(
year=self.year,
month=self.month,
material_id=item.material_id,
name=item.name,
spec=item.spec,
price=item.price,
price_fuzhou=item.price,
price_xiamen=item.price,
price_putian=item.price,
price_sanming=item.price,
price_quanzhou=item.price,
price_zhangzhou=item.price,
price_nanpin=item.price,
price_longyan=item.price,
price_ningde=item.price,
price_pintan=item.price,
price_zhangzhoukfq=item.price,
tax=self.tax_map.get(item.material_id, item.tax), # 从材料表获取税率
type=1,
unit=item.unit
).upsert()
def get_from_result(self): def get_from_result(self):
# 获取当月趋势表数据
query = PriceResult.get_query(self.year, self.month, material_id_in=self.material_codes) query = PriceResult.get_query(self.year, self.month, material_id_in=self.material_codes)
data = query.all() data = query.all()
self.digit_map = {i.material_id:i.display_digit for i in data} self.digit_map = {i.material_id: i.display_digit for i in data}
# 获取上月发布价数据
previous = PricePublish.get_query(*Helper.get_last_month(self.year, self.month), type=1)
previous_prices_map = {i.material_id: i for i in previous}
for item in data: for item in data:
# 从材料表获取税率 fluctuating = item.fluctuating_recommend
PricePublish( previous_prices = previous_prices_map.get(item.material_id, PricePublish())
year=self.year, result = {
month=self.month, 'year': self.year,
material_id=item.material_id, 'month': self.month,
name=item.name, 'material_id': item.material_id,
spec=item.spec, 'name': item.name,
price=item.price_recommend, 'spec': item.spec,
price_fuzhou=item.price_recommend, 'price': item.price_recommend,
price_xiamen=item.price_recommend, 'price_fuzhou': item.price_recommend,
price_putian=item.price_recommend, 'price_xiamen': previous_prices.price_xiamen + fluctuating if previous_prices.price_xiamen else item.price_recommend,
price_sanming=item.price_recommend, 'price_putian': previous_prices.price_putian + fluctuating if previous_prices.price_putian else item.price_recommend,
price_quanzhou=item.price_recommend, 'price_sanming': previous_prices.price_sanming + fluctuating if previous_prices.price_sanming else item.price_recommend,
price_zhangzhou=item.price_recommend, 'price_quanzhou': previous_prices.price_quanzhou + fluctuating if previous_prices.price_quanzhou else item.price_recommend,
price_nanpin=item.price_recommend, 'price_zhangzhou': previous_prices.price_zhangzhou + fluctuating if previous_prices.price_zhangzhou else item.price_recommend,
price_longyan=item.price_recommend, 'price_nanpin': previous_prices.price_nanpin + fluctuating if previous_prices.price_nanpin else item.price_recommend,
price_ningde=item.price_recommend, 'price_longyan': previous_prices.price_longyan + fluctuating if previous_prices.price_longyan else item.price_recommend,
price_pintan=item.price_recommend, 'price_ningde': previous_prices.price_ningde + fluctuating if previous_prices.price_ningde else item.price_recommend,
price_zhangzhoukfq=item.price_recommend, 'price_pintan': previous_prices.price_pintan + fluctuating if previous_prices.price_pintan else item.price_recommend,
tax=self.tax_map.get(item.material_id), 'price_zhangzhoukfq': previous_prices.price_zhangzhoukfq + fluctuating if previous_prices.price_zhangzhoukfq else item.price_recommend,
type=1, 'tax': self.tax_map.get(item.material_id), # 从材料表获取税率
unit=item.unit, 'type': 1,
display_digit=item.display_digit, 'unit': item.unit,
).upsert() 'display_digit': item.display_digit,
}
PricePublish(**result).upsert()
def run(self): def run(self):
# 当月价 # 当月价

View File

@@ -78,7 +78,7 @@ class PricePublish(db.Model, Model, OperationTrackMixin, BaseModelMixin):
return query return query
@classmethod @classmethod
def get_query(cls, year=None, month=None, name_in=None, material_id_in=None): def get_query(cls, year=None, month=None, name_in=None, material_id_in=None, type=None):
query = cls.query query = cls.query
if year: if year:
query = query.filter(cls.year == year) query = query.filter(cls.year == year)
@@ -88,4 +88,6 @@ class PricePublish(db.Model, Model, OperationTrackMixin, BaseModelMixin):
query = query.filter(cls.name.in_(name_in)) query = query.filter(cls.name.in_(name_in))
if material_id_in: if material_id_in:
query = query.filter(cls.material_id.in_(material_id_in)) query = query.filter(cls.material_id.in_(material_id_in))
if type:
query = query.filter(cls.type == type)
return query return query

View File

@@ -15,7 +15,7 @@ if __name__ == '__main__':
from core.factory import ClientApp from core.factory import ClientApp
with ClientApp().app_context(): with ClientApp().app_context():
collect(2024, 8) collect(2023, 3)
# for i in range(2, 12): # for i in range(2, 12):
# collect(2022, i + 1) # collect(2022, i + 1)