feat: 增加出厂水泥 和 计算
This commit is contained in:
parent
bc38196f68
commit
5a35ea6028
|
@ -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='出厂水泥单位成本'),
|
||||
),
|
||||
]
|
|
@ -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)
|
||||
|
|
|
@ -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(): #
|
||||
|
|
Loading…
Reference in New Issue