feat: 增加出厂水泥 和 计算

This commit is contained in:
zty 2024-08-21 08:59:24 +08:00
parent bc38196f68
commit 5a35ea6028
3 changed files with 62 additions and 14 deletions

View File

@ -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='出厂水泥单位成本'),
),
]

View File

@ -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)

View File

@ -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(): #