feat: 新增单独计算近半年均价的接口

This commit is contained in:
han0
2025-06-05 18:26:30 +08:00
parent d752fe17c8
commit 1402b1a1e3
4 changed files with 16 additions and 10 deletions

View File

@@ -38,6 +38,7 @@ def refresh_task(task_id):
class CalculateQuery(BaseModel):
year: int = Field(title='年份')
month: int = Field(title='月份')
only_avg: int = Field(title='是否只计算均值')
@data.route('/calculate', methods=['GET'])
@@ -51,6 +52,6 @@ def start_calculate(query: CalculateQuery):
@data.route('/collect', methods=['GET'])
@siwa.doc(tags=[""], summary='触发计算任务', query=CalculateQuery)
def start_collect(query: CalculateQuery):
collect(year=query.year, month=query.month)
collect(year=query.year, month=query.month, only_avg=query.only_avg)
return Response()

View File

@@ -12,7 +12,8 @@ from commons.models.material import Material
class Collector:
def __init__(self, year, month, force=True):
def __init__(self, year, month, force=True, only_avg=0):
self.only_avg = only_avg
self.year = year
self.month = month
self.force = True # todo-2 已发布的价格不在覆盖计算
@@ -120,9 +121,11 @@ class Collector:
def run(self):
# 当月价
# self.get_from_survey()
if not self.only_avg:
PricePublish.clean(self.year, self.month, type=1) # 清空当月价
self.get_from_result()
# 近半年平均价
PricePublish.clean(self.year, self.month, type=2) # 清空近半年平均价
self.get_avg()

View File

@@ -41,8 +41,11 @@ class PricePublish(db.Model, Model, OperationTrackMixin, BaseModelMixin):
)
@classmethod
def clean(cls, year, month):
cls.query.filter(cls.year == year, cls.month == month).delete()
def clean(cls, year, month, type=None):
query = cls.query.filter(cls.year == year, cls.month == month)
if type:
query.filter(cls.type == type)
query.delete()
@classmethod
def get_by_key(cls, name, year, month, type):

View File

@@ -2,12 +2,11 @@ from collectors import Collector
from commons.models.price_publish import PricePublish
def collect(year=2023, month=11):
def collect(year=2023, month=11, only_avg=0):
"""
整理发布价格
"""
PricePublish.clean(year, month) # 清空当月数据
collector = Collector(year, month)
collector = Collector(year, month, only_avg=only_avg)
collector.run()
@@ -15,7 +14,7 @@ if __name__ == '__main__':
from core.factory import ClientApp
with ClientApp().app_context():
collect(2025, 4)
collect(2025, 5)
# for i in range(4):
# collect(2025, i + 1)