feat: enstat2增加day_s统计及相应的tasks改动
This commit is contained in:
parent
11ced96400
commit
4cd2c0f85b
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.12 on 2023-08-22 09:58
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('enm', '0019_auto_20230818_1721'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='enstat2',
|
||||||
|
name='day_s',
|
||||||
|
field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='班日'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='enstat2',
|
||||||
|
name='type',
|
||||||
|
field=models.CharField(default='month_s', help_text='month_s/day_s', max_length=50, verbose_name='统计维度'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -98,8 +98,10 @@ class EnStat2(BaseModel):
|
||||||
"""
|
"""
|
||||||
能源数据统计表2
|
能源数据统计表2
|
||||||
"""
|
"""
|
||||||
|
type = models.CharField('统计维度', max_length=50, default='month_s', help_text='month_s/day_s')
|
||||||
year_s = models.PositiveSmallIntegerField('班年')
|
year_s = models.PositiveSmallIntegerField('班年')
|
||||||
month_s = models.PositiveSmallIntegerField('班月')
|
month_s = models.PositiveSmallIntegerField('班月')
|
||||||
|
day_s = models.PositiveSmallIntegerField('班日', null=True, blank=True)
|
||||||
industry_total_val = models.FloatField('工业总产值', default=0, help_text='万元')
|
industry_total_val = models.FloatField('工业总产值', default=0, help_text='万元')
|
||||||
industry_add_val = models.FloatField('工业增加值', default=0, help_text='万元')
|
industry_add_val = models.FloatField('工业增加值', default=0, help_text='万元')
|
||||||
elec_consume = models.FloatField('总电耗', default=0, help_text='kw·h')
|
elec_consume = models.FloatField('总电耗', default=0, help_text='kw·h')
|
||||||
|
|
|
@ -166,17 +166,20 @@ def cal_mpointstats(is_now=1, year=None, month=None, day=None, hour=None):
|
||||||
|
|
||||||
# 开始计算enstat
|
# 开始计算enstat
|
||||||
mgroups = Mgroup.objects.all().order_by('sort')
|
mgroups = Mgroup.objects.all().order_by('sort')
|
||||||
mgroups_group = []
|
# mgroups_group = []
|
||||||
|
year_s, month_s, day_s = 0, 0, 0
|
||||||
for mgroup in mgroups:
|
for mgroup in mgroups:
|
||||||
# mgroups_group.append(cal_enstat.s('hour_s', None, mgroup.id, year, month, day, hour, None, None, None, True, ['material', 'run_hour']))
|
# mgroups_group.append(cal_enstat.s('hour_s', None, mgroup.id, year, month, day, hour, None, None, None, True, ['material', 'run_hour']))
|
||||||
cal_enstat('hour_s', None, mgroup.id, year, month, day, hour, None, None, None, True)
|
year_s, month_s, day_s = cal_enstat('hour_s', None, mgroup.id, year, month, day, hour, None, None, None, True)
|
||||||
|
|
||||||
# mgroups_t = mgroups.filter(name__in=['回转窑', '水泥磨'])
|
# mgroups_t = mgroups.filter(name__in=['回转窑', '水泥磨'])
|
||||||
# mgroups_t_group = []
|
# mgroups_t_group = []
|
||||||
# for mgroup in mgroups_t:
|
# for mgroup in mgroups_t:
|
||||||
# mgroups_t_group.append(cal_enstat.s('hour_s', None, mgroup.id, year, month, day, hour, None, None, None, True, ['pcoal']))
|
# mgroups_t_group.append(cal_enstat.s('hour_s', None, mgroup.id, year, month, day, hour, None, None, None, True, ['pcoal']))
|
||||||
|
|
||||||
|
|
||||||
# 最后计算enstat2
|
# 最后计算enstat2
|
||||||
cal_enstat2(year_s=year, month_s=month)
|
cal_enstat2(type="day_s", year_s=year_s, month_s=month_s, day_s=day_s)
|
||||||
# task_chain = chain(group(mpoints_without_formula_group), group(mpoints_other_group), group(mgroups_group), group(mgroups_t_group), group([cal_enstat2.s(year_s=year, month_s=month)]))
|
# task_chain = chain(group(mpoints_without_formula_group), group(mpoints_other_group), group(mgroups_group), group(mgroups_t_group), group([cal_enstat2.s(year_s=year, month_s=month)]))
|
||||||
# task_chain.delay()
|
# task_chain.delay()
|
||||||
|
|
||||||
|
@ -225,8 +228,8 @@ def cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s,
|
||||||
start_index = types_list.index(type)
|
start_index = types_list.index(type)
|
||||||
new_types_list = types_list[start_index:]
|
new_types_list = types_list[start_index:]
|
||||||
for type in new_types_list:
|
for type in new_types_list:
|
||||||
cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s, day_s, False)
|
year_s, month_s, day_s = cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s, day_s, False)
|
||||||
return
|
return year_s, month_s, day_s
|
||||||
if not cal_attrs:
|
if not cal_attrs:
|
||||||
this_cal_attrs = ['material', 'pcoal', 'run_hour']
|
this_cal_attrs = ['material', 'pcoal', 'run_hour']
|
||||||
else:
|
else:
|
||||||
|
@ -414,6 +417,7 @@ def cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s,
|
||||||
pass
|
pass
|
||||||
enstat.save()
|
enstat.save()
|
||||||
enstat.save()
|
enstat.save()
|
||||||
|
return year_s, month_s, day_s # 返回这个值主要为了全厂数据计算而用
|
||||||
|
|
||||||
|
|
||||||
def get_total_hour_now_and_shut_hour(enstat: EnStat):
|
def get_total_hour_now_and_shut_hour(enstat: EnStat):
|
||||||
|
@ -464,8 +468,20 @@ def get_total_hour_now_and_shut_hour(enstat: EnStat):
|
||||||
return res['sum1'] if res['sum1'] else 0, res['sum2'] if res['sum2'] else 0
|
return res['sum1'] if res['sum1'] else 0, res['sum2'] if res['sum2'] else 0
|
||||||
|
|
||||||
@shared_task(base=CustomTask)
|
@shared_task(base=CustomTask)
|
||||||
def cal_enstat2(year_s: int, month_s: int):
|
def cal_enstat2(type: str, year_s: int, month_s: int, day_s: int, cascade=True):
|
||||||
enstat2, _ = EnStat2.objects.get_or_create(year_s=year_s, month_s=month_s, defaults={'year_s': year_s, 'month_s': month_s})
|
if type == 'day_s':
|
||||||
|
cal_enstat2('day_s', year_s, month_s, day_s)
|
||||||
|
if cascade:
|
||||||
|
cal_enstat2('month_s', year_s, month_s, day_s)
|
||||||
|
elif type == 'month_s':
|
||||||
|
cal_enstat2('month_s', year_s, month_s, day_s)
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
if type == 'month_s':
|
||||||
|
enstat2, _ = EnStat2.objects.get_or_create(type="month_s", year_s=year_s, month_s=month_s, defaults={'year_s': year_s, 'month_s': month_s, 'type': 'month_s'})
|
||||||
|
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_cement = Material.objects.get(code='cement')
|
||||||
material_clinker = Material.objects.get(code='clinker')
|
material_clinker = Material.objects.get(code='clinker')
|
||||||
material_bulk_cement = Material.objects.get(code='bulk_cement')
|
material_bulk_cement = Material.objects.get(code='bulk_cement')
|
||||||
|
@ -474,27 +490,41 @@ def cal_enstat2(year_s: int, month_s: int):
|
||||||
enstat2.bulk_cement_price = get_price_unit(material_bulk_cement, year_s, month_s)
|
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.clinker_price = get_price_unit(material_clinker, year_s, month_s)
|
||||||
enstat2.bag_cement_price = get_price_unit(material_bag_cement, year_s, month_s)
|
enstat2.bag_cement_price = get_price_unit(material_bag_cement, year_s, 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']
|
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:
|
if enstat2.bulk_cement_val is None:
|
||||||
enstat2.bulk_cement_val = 0
|
enstat2.bulk_cement_val = 0
|
||||||
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']
|
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:
|
if enstat2.bag_cement_val is None:
|
||||||
enstat2.bag_cement_val = 0
|
enstat2.bag_cement_val = 0
|
||||||
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']
|
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']
|
||||||
|
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:
|
if enstat2.clinker_val is None:
|
||||||
enstat2.clinker_val = 0
|
enstat2.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.clinker_val*enstat2.clinker_price)/10000
|
||||||
|
|
||||||
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'))
|
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_val = res['sum'] if res['sum'] else 0
|
||||||
enstat2.cement_cost_unit = res['avg'] if res['avg'] 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
|
enstat2.industry_add_val = enstat2.industry_total_val - enstat2.cement_val * enstat2.cement_cost_unit /10000
|
||||||
|
|
||||||
# 全厂电量
|
# 全厂电量
|
||||||
enstat_qs = EnStat.objects.filter(type='month_s', year_s=year_s, month_s=month_s)
|
if type == 'month_s':
|
||||||
|
enstat_qs = EnStat.objects.filter(type='month_s', year_s=year_s, month_s=month_s)
|
||||||
|
elif type == 'day_s':
|
||||||
|
enstat_qs = EnStat.objects.filter(type='day_s', year_s=year_s, month_s=month_s, day_s=day_s)
|
||||||
res_elec_pcoal = enstat_qs.aggregate(sum1=Sum('elec_consume'), sum2=Sum('elec_coal_consume'), sum3=Sum('pcoal_consume'), sum4=Sum('pcoal_coal_consume'),
|
res_elec_pcoal = enstat_qs.aggregate(sum1=Sum('elec_consume'), sum2=Sum('elec_coal_consume'), sum3=Sum('pcoal_consume'), sum4=Sum('pcoal_coal_consume'),
|
||||||
sum5=Sum('water_consume'), sum6=Sum('cair_consume'))
|
sum5=Sum('water_consume'), sum6=Sum('cair_consume'))
|
||||||
enstat2.elec_consume = res_elec_pcoal['sum1'] if res_elec_pcoal['sum1'] else 0
|
enstat2.elec_consume = res_elec_pcoal['sum1'] if res_elec_pcoal['sum1'] else 0
|
||||||
|
@ -544,5 +574,4 @@ def cal_enstat_pcoal_change(enstat, new_pcoal_heat):
|
||||||
next_enstat = EnStat.objects.filter(type=enstat.type, year_s=enstat.year_s, month_s=enstat.month_s, day_s=enstat.day_s, hour=enstat.hour, mgroup__name='水泥磨').first()
|
next_enstat = EnStat.objects.filter(type=enstat.type, year_s=enstat.year_s, month_s=enstat.month_s, day_s=enstat.day_s, hour=enstat.hour, mgroup__name='水泥磨').first()
|
||||||
if next_enstat:
|
if next_enstat:
|
||||||
next_enstat.cen_consume_unit = next_enstat.elec_consume_unit*0.1229 + 0.7*enstat.cen_consume_unit
|
next_enstat.cen_consume_unit = next_enstat.elec_consume_unit*0.1229 + 0.7*enstat.cen_consume_unit
|
||||||
next_enstat.save(update_fields=['cen_consume_unit'])
|
next_enstat.save(update_fields=['cen_consume_unit'])
|
||||||
|
|
|
@ -41,9 +41,13 @@ def cal_enstat_when_priceset_change(pricesetId):
|
||||||
enstat.imaterial_data = imaterial_data
|
enstat.imaterial_data = imaterial_data
|
||||||
enstat.production_cost_unit = enstat.production_cost_unit - old_cost_unit + new_cost_unit
|
enstat.production_cost_unit = enstat.production_cost_unit - old_cost_unit + new_cost_unit
|
||||||
enstat.save(update_fields=['imaterial_data', 'production_cost_unit'])
|
enstat.save(update_fields=['imaterial_data', 'production_cost_unit'])
|
||||||
if material.code in ['bulk_cement', 'bag_cement', 'clinker']: # 需要更新enstat2
|
if material.code in ['bulk_cement', 'bag_cement', 'clinker']: # 需要更新enstat2 袋装水泥/散装水泥/熟料价格变化
|
||||||
from apps.enm.tasks import cal_enstat2
|
from apps.enm.tasks import cal_enstat2
|
||||||
cal_enstat2(priceset.year, priceset.month)
|
from apps.enm.models import EnStat2
|
||||||
|
enstat2s = EnStat2.objects.filter(type='day_s', year_s=priceset.year, month_s=priceset.month)
|
||||||
|
for enstat2 in enstat2s:
|
||||||
|
cal_enstat2('day_s', enstat2.year_s, enstat2.month_s, enstat2.day_s, False)
|
||||||
|
cal_enstat2('month_s', priceset.year, priceset.month, None)
|
||||||
|
|
||||||
|
|
||||||
@shared_task(base=CustomTask)
|
@shared_task(base=CustomTask)
|
||||||
|
|
|
@ -114,7 +114,7 @@ def cal_enstat_when_pcoal_heat_change(sflogId):
|
||||||
for enstat in enstats_other:
|
for enstat in enstats_other:
|
||||||
cal_enstat_pcoal_change(enstat, pcoal_heat)
|
cal_enstat_pcoal_change(enstat, pcoal_heat)
|
||||||
|
|
||||||
cal_enstat2(year_s, month_s)
|
cal_enstat2('day_s', year_s, month_s, day_s)
|
||||||
|
|
||||||
|
|
||||||
@shared_task(base=CustomTask)
|
@shared_task(base=CustomTask)
|
||||||
|
|
Loading…
Reference in New Issue