From 5a35ea60287c113d34e77a77e4c0d200066d99dc Mon Sep 17 00:00:00 2001 From: zty Date: Wed, 21 Aug 2024 08:59:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=87=BA=E5=8E=82?= =?UTF-8?q?=E6=B0=B4=E6=B3=A5=20=E5=92=8C=20=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0042_enstat2_out_cement_cost_unit.py | 18 ++++++ apps/enm/models.py | 1 + apps/enm/tasks.py | 57 ++++++++++++++----- 3 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 apps/enm/migrations/0042_enstat2_out_cement_cost_unit.py diff --git a/apps/enm/migrations/0042_enstat2_out_cement_cost_unit.py b/apps/enm/migrations/0042_enstat2_out_cement_cost_unit.py new file mode 100644 index 00000000..f9c8e9b8 --- /dev/null +++ b/apps/enm/migrations/0042_enstat2_out_cement_cost_unit.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2024-08-21 00:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('enm', '0041_mpoint_coefficient'), + ] + + operations = [ + migrations.AddField( + model_name='enstat2', + name='out_cement_cost_unit', + field=models.FloatField(default=0, verbose_name='出厂水泥单位成本'), + ), + ] diff --git a/apps/enm/models.py b/apps/enm/models.py index 1bf71efa..7c672f9f 100644 --- a/apps/enm/models.py +++ b/apps/enm/models.py @@ -173,6 +173,7 @@ class EnStat2(BaseModel): cement_val = models.FloatField("出磨水泥产量", default=0) cement_cost_unit = models.FloatField("出磨水泥单位成本", default=0) out_cement_val = models.FloatField("出厂水泥产量", default=0) + out_cement_cost_unit = models.FloatField("出厂水泥单位成本", default=0) en_consume = models.FloatField("能源消耗", default=0, help_text="tce") en_consume_unit = models.FloatField("单位工业总产值能耗", default=0) en_add_consume_unit = models.FloatField("单位工业增加值能耗", default=0) diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index cb820e3e..3e06733b 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -684,46 +684,75 @@ def cal_enstat2(type: str, year_s: int, month_s: int, day_s: int, cascade=True): elif type == "day_s": enstat2, _ = EnStat2.objects.get_or_create(type="day_s", year_s=year_s, month_s=month_s, day_s=day_s, defaults={"year_s": year_s, "month_s": month_s, "day_s": day_s, "type": "day_s"}) # enstat2 = EnStat2.objects.select_for_update().get(id=enstat2.id) # 加锁 - material_cement = Material.objects.get(code="cement") - material_clinker = Material.objects.get(code="clinker") - material_bulk_cement = Material.objects.get(code="bulk_cement") - material_bag_cement = Material.objects.get(code="bag_cement") + material_bulk_clinker = Material.objects.get(code="bulk_clinker") # 散装熟料 + material_bulk_cement = Material.objects.get(code="bulk_cement") # 散装水泥 + material_bag_cement = Material.objects.get(code="bag_cement") # 袋装水泥 + enstat2.bulk_cement_price = get_price_unit(material_bulk_cement, year_s, month_s) - enstat2.clinker_price = get_price_unit(material_clinker, year_s, month_s) + enstat2.bulk_clinker_price = get_price_unit(material_bulk_clinker, year_s, month_s) enstat2.bag_cement_price = get_price_unit(material_bag_cement, year_s, month_s) + if type == "month_s": enstat2.bulk_cement_val = MpointStat.objects.filter(type="month_s", mpoint__material=material_bulk_cement, year_s=year_s, month_s=month_s).aggregate(sum=Sum("val"))["sum"] elif type == "day_s": enstat2.bulk_cement_val = MpointStat.objects.filter(type="day_s", mpoint__material=material_bulk_cement, year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum("val"))["sum"] if enstat2.bulk_cement_val is None: enstat2.bulk_cement_val = 0 + if type == "month_s": enstat2.bag_cement_val = MpointStat.objects.filter(type="month_s", mpoint__material=material_bag_cement, year_s=year_s, month_s=month_s).aggregate(sum=Sum("val"))["sum"] elif type == "day_s": enstat2.bag_cement_val = MpointStat.objects.filter(type="day_s", mpoint__material=material_bag_cement, year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum("val"))["sum"] if enstat2.bag_cement_val is None: enstat2.bag_cement_val = 0 + + if type == "month_s": - enstat2.clinker_val = MpointStat.objects.filter(type="month_s", mpoint__material=material_cement, year_s=year_s, month_s=month_s).aggregate(sum=Sum("val"))["sum"] + enstat2.bulk_clinker_val = MpointStat.objects.filter(type="month_s", mpoint__material=material_bulk_clinker, year_s=year_s, month_s=month_s).aggregate(sum=Sum("val"))["sum"] elif type == "day_s": - enstat2.clinker_val = MpointStat.objects.filter(type="day_s", mpoint__material=material_cement, year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum("val"))["sum"] - if enstat2.clinker_val is None: - enstat2.clinker_val = 0 + enstat2.bulk_clinker_val = MpointStat.objects.filter(type="day_s", mpoint__material=material_bulk_clinker, year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum("val"))["sum"] + if enstat2.bulk_clinker_val is None: + enstat2.bulk_clinker_val = 0 - enstat2.industry_total_val = (enstat2.bulk_cement_val * enstat2.bulk_cement_price + enstat2.bag_cement_val * enstat2.bag_cement_price + enstat2.clinker_val * enstat2.clinker_price) / 10000 + enstat2.industry_total_val = ( + enstat2.bulk_cement_val * enstat2.bulk_cement_price + + enstat2.bag_cement_val * enstat2.bag_cement_price + + enstat2.bulk_clinker_val * enstat2.bulk_clinker_price) / 10000 + # 出磨水泥产量 if type == "month_s": res = EnStat.objects.filter(mgroup__product__code="cement", type="month_s", year_s=year_s, month_s=month_s).aggregate(sum=Sum("total_production"), avg=Avg("production_cost_unit")) elif type == "day_s": res = EnStat.objects.filter(mgroup__product__code="cement", type="day_s", year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum("total_production"), avg=Avg("production_cost_unit")) - + enstat2.cement_val = res["sum"] if res["sum"] else 0 - enstat2.cement_cost_unit = res["avg"] if res["avg"] else 0 - enstat2.industry_add_val = enstat2.industry_total_val - enstat2.cement_val * enstat2.cement_cost_unit / 10000 + + # 出窑熟料产量 + if type == "month_s": + res = EnStat.objects.filter(mgroup__product__code="clinker", type="month_s", year_s=year_s, month_s=month_s).aggregate(sum=Sum("total_production"), avg=Avg("production_cost_unit")) + elif type == "day_s": + res = EnStat.objects.filter(mgroup__product__code="clinker", type="day_s", year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum("total_production"), avg=Avg("production_cost_unit")) + + enstat2.clinker_val = res["sum"] if res["sum"] else 0 + + # 出厂水泥产量 + if type == "month_s": + res = EnStat.objects.filter(mgroup__product__code="out_cement", type="month_s", year_s=year_s, month_s=month_s).aggregate(sum=Sum("total_production"), avg=Avg("production_cost_unit")) + elif type == "day_s": + res = EnStat.objects.filter(mgroup__product__code="out_cement", type="day_s", year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum("total_production"), avg=Avg("production_cost_unit")) + + enstat2.out_cement_val = res["sum"] if res["sum"] else 0 + enstat2.out_cement_cost_unit = res["avg"] if res["avg"] else 0 + + + # enstat2.out_cement_val = enstat2.bag_cement_val + enstat2.bulk_cement_val + enstat2.bulk_clinker_val + + + enstat2.industry_add_val = enstat2.industry_total_val - enstat2.out_cement_val * enstat2.out_cement_cost_unit / 10000 # 全厂电量 - # 全厂的耗电量和水量都得单独处理 + # 全厂的耗电量得单独处理 use_mpoint_elec_val = False mp_elecs = Mpoint.objects.filter(material__code="elec", code__endswith='__all') if mp_elecs.exists(): #