from sqlalchemy import func from calculators import Calculator, Helper from commons.models.asphalt_modifier import AsphaltModifier from commons.models.price_result import PriceResult class AsphaltDomesticModifierCalculator(Calculator): name = "国产改性沥青" material_id = "06.12.61.00" unit = "t" spec = "" def __init__(self, year, month): self.year = year self.month = month def _get_recommend_price(self): query = PriceResult.get_query(self.year, self.month, name='国产沥青') asphalt = query.first() fluctuating_1 = asphalt.fluctuating_recommend if asphalt else 0 if not asphalt.price_recommend: return 0, 0 query = PriceResult.get_query(self.year, self.month, name='改性剂') modifier = query.first() fluctuating_2 = int(modifier.fluctuating_recommend * 5 / 100) if modifier else 0 previous_price = int(getattr(self.previous_prices, 'price_recommend', 0)) if not previous_price: previous_price = asphalt.price_recommend + modifier.price_recommend * 5 / 100 price = previous_price + fluctuating_1 + fluctuating_2 price = round(price / 10) * 10 return price, fluctuating_1 + fluctuating_2 def save(self): result = self.result() PriceResult(**result).upsert() if __name__ == '__main__': from core.factory import ClientApp with ClientApp().app_context(): calculator = AsphaltDomesticModifierCalculator(year=2023, month=9) _result = calculator.run() calculator.save() print(_result)