feat: mpoint增加material字段
This commit is contained in:
parent
f620dc0bcb
commit
f6a15be31d
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2023-06-20 09:05
|
||||
# Generated by Django 3.2.12 on 2023-06-30 02:28
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -11,28 +11,14 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('em', '0001_initial'),
|
||||
('mtm', '0002_auto_20230626_1559'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('wpm', '0003_auto_20230628_0859'),
|
||||
('system', '0002_myschedule'),
|
||||
('em', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='MpLog',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('tag_id', models.BigIntegerField(db_index=True, verbose_name='记录ID')),
|
||||
('tag_code', models.CharField(max_length=50, verbose_name='测点编号')),
|
||||
('tag_update', models.DateTimeField(verbose_name='更新时间')),
|
||||
('tag_val', models.FloatField(verbose_name='当前值')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Mpoint',
|
||||
fields=[
|
||||
|
@ -48,6 +34,8 @@ class Migration(migrations.Migration):
|
|||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mpoint_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('ep_belong', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mp_ep_belong', to='em.equipment', verbose_name='属于哪个设备')),
|
||||
('ep_monitored', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mp_ep_monitored', to='em.equipment', verbose_name='监测哪个设备')),
|
||||
('mgroup', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='mtm.mgroup', verbose_name='所在集合')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mpoint_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
@ -60,13 +48,34 @@ class Migration(migrations.Migration):
|
|||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('type', models.CharField(default='hour', help_text='year/month/day/hour', max_length=50, verbose_name='统计维度')),
|
||||
('year', models.PositiveSmallIntegerField(verbose_name='年')),
|
||||
('type', models.CharField(default='hour', help_text='year/month/day/year_s/month_s/day_s/sflog/hour', max_length=50, verbose_name='统计维度')),
|
||||
('year', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='年')),
|
||||
('month', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='月')),
|
||||
('day', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='日')),
|
||||
('year_s', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='班年')),
|
||||
('month_s', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='班月')),
|
||||
('day_s', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='班日')),
|
||||
('hour', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='时')),
|
||||
('val', models.FloatField(default=0, verbose_name='统计值')),
|
||||
('mpoint', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='enm.mpoint', verbose_name='关联测点')),
|
||||
('sflog', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wpm.sflog', verbose_name='关联值班记录')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='MpLog',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('tag_id', models.BigIntegerField(db_index=True, verbose_name='记录ID')),
|
||||
('tag_code', models.CharField(max_length=50, verbose_name='测点编号')),
|
||||
('tag_update', models.DateTimeField(verbose_name='更新时间')),
|
||||
('tag_val', models.FloatField(verbose_name='当前值')),
|
||||
('mpoint', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='enm.mpoint', verbose_name='关联测点')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# Generated by Django 3.2.12 on 2023-06-30 04:08
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('mtm', '0002_auto_20230626_1559'),
|
||||
('enm', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='mpoint',
|
||||
name='material',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='计量某种物料'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='mpoint',
|
||||
name='cate',
|
||||
field=models.CharField(default='material', max_length=50, verbose_name='分类'),
|
||||
),
|
||||
]
|
|
@ -1,34 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2023-06-20 09:05
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('enm', '0001_initial'),
|
||||
('mtm', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='mpoint',
|
||||
name='mgroup',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='mtm.mgroup', verbose_name='所在集合'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mpoint',
|
||||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mpoint_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mplog',
|
||||
name='mpoint',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='enm.mpoint', verbose_name='关联测点'),
|
||||
),
|
||||
]
|
|
@ -1,45 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2023-06-30 02:20
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wpm', '0003_auto_20230628_0859'),
|
||||
('enm', '0002_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='mpointstat',
|
||||
name='day_s',
|
||||
field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='班日'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mpointstat',
|
||||
name='month_s',
|
||||
field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='班月'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mpointstat',
|
||||
name='sflog',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wpm.sflog', verbose_name='关联值班记录'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mpointstat',
|
||||
name='year_s',
|
||||
field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='班年'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='mpointstat',
|
||||
name='type',
|
||||
field=models.CharField(default='hour', help_text='year/month/day/year_s/month_s/day_s/sflog/hour', max_length=50, verbose_name='统计维度'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='mpointstat',
|
||||
name='year',
|
||||
field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='年'),
|
||||
),
|
||||
]
|
|
@ -1,6 +1,7 @@
|
|||
from django.db import models
|
||||
from apps.utils.models import BaseModel, CommonBModel
|
||||
from apps.wpm.models import SfLog
|
||||
from apps.mtm.models import Material
|
||||
|
||||
|
||||
class Mpoint(CommonBModel):
|
||||
|
@ -9,7 +10,8 @@ class Mpoint(CommonBModel):
|
|||
name = models.CharField('测点名称', max_length=50)
|
||||
code = models.CharField('测点编号', max_length=50, unique=True)
|
||||
unit = models.CharField('单位', max_length=50)
|
||||
cate = models.CharField('分类', max_length=50, default='elec')
|
||||
cate = models.CharField('分类', max_length=50, default='material')
|
||||
material = models.ForeignKey(Material, verbose_name='计量某种物料', on_delete=models.CASCADE, null=True, blank=True)
|
||||
ep_monitored = models.ForeignKey('em.equipment', verbose_name='监测哪个设备', related_name='mp_ep_monitored', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
ep_belong = models.ForeignKey('em.equipment', verbose_name='属于哪个设备', related_name='mp_ep_belong', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
mgroup = models.ForeignKey('mtm.mgroup', verbose_name='所在集合', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
|
|
@ -14,9 +14,11 @@ class MpointSerializer(CustomModelSerializer):
|
|||
class Meta:
|
||||
model = Mpoint
|
||||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS + ['belong_dept']
|
||||
read_only_fields = EXCLUDE_FIELDS + ['belong_dept', 'cate']
|
||||
|
||||
def validate(self, attrs):
|
||||
if 'material' in attrs and attrs['material']:
|
||||
attrs['cate'] = 'material'
|
||||
attrs['belong_dept'] = attrs['mgroup'].belong_dept
|
||||
return attrs
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
|
|||
mpoint = Mpoint.objects.get(id=mpointId)
|
||||
mytz = tz.gettz(settings.TIME_ZONE)
|
||||
dt = datetime.datetime(year=year, month=month, day=day, hour=hour, tzinfo=mytz)
|
||||
if mpoint.cate == 'elec': # 是否是电能
|
||||
if mpoint.material: # 如果计量的是物料
|
||||
params = {'mpoint': mpoint, 'type': 'hour'}
|
||||
params['year'], params['month'], params['day'], params['hour'] = year, month, day, hour
|
||||
mrs = MpLog.objects.filter(
|
||||
|
@ -63,19 +63,6 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
|
|||
ms, _ = MpointStat.objects.get_or_create(**params, defaults=params)
|
||||
ms.val = val
|
||||
ms.save()
|
||||
# 绑定值班记录
|
||||
sflog = SfLog.objects.filter(strat_time__lte=dt, end_time__gt=dt, mgroup=mpoint.mgroup).first()
|
||||
year_s, month_s, day_s = 0, 0, 0
|
||||
if sflog:
|
||||
ms.sflog = sflog
|
||||
end_time_local = localtime(sflog.end_time)
|
||||
year_s, month_s, day_s = end_time_local.year, end_time_local.month, end_time_local.day
|
||||
ms.year_s = year_s
|
||||
ms.month_s = month_s
|
||||
ms.day_s = day_s
|
||||
ms.save()
|
||||
else:
|
||||
raise Exception('未找到值班记录')
|
||||
# 更新更高级别的值
|
||||
sum_dict_day = MpointStat.objects.filter(type='hour', mpoint=mpoint, year=year, month=month, day=day).aggregate(sum=Sum('val'))
|
||||
params_day = {'type':'day', 'mpoint': mpoint, 'year': year, 'month': month, 'day': day}
|
||||
|
@ -95,6 +82,19 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
|
|||
ms_year.val = sum_dict_year['sum']
|
||||
ms_year.save()
|
||||
|
||||
# 绑定值班记录
|
||||
sflog = SfLog.objects.filter(start_time__lte=dt, end_time__gt=dt, mgroup=mpoint.mgroup).first()
|
||||
year_s, month_s, day_s = 0, 0, 0
|
||||
if sflog:
|
||||
ms.sflog = sflog
|
||||
end_time_local = localtime(sflog.end_time)
|
||||
year_s, month_s, day_s = end_time_local.year, end_time_local.month, end_time_local.day
|
||||
ms.year_s = year_s
|
||||
ms.month_s = month_s
|
||||
ms.day_s = day_s
|
||||
ms.save()
|
||||
else:
|
||||
raise Exception('未找到值班记录')
|
||||
if year_s and month_s and day_s:
|
||||
# 这种是距离点相减
|
||||
# params_s = {'mpoint': mpoint, 'type': 'sflog'}
|
||||
|
@ -148,38 +148,4 @@ def cal_mpointstats(is_now=1):
|
|||
cal_mpointstat_hour.delay(mpoint.id, pre.year, pre.month, pre.day, pre.hour)
|
||||
|
||||
|
||||
def cal_sflog_en_val(sflogId: str):
|
||||
"""
|
||||
计算某值班记录相应能耗
|
||||
"""
|
||||
sflog = SfLog.objects.get(id=sflogId)
|
||||
mpoints = Mpoint.objects.filter(mgroup=sflog.mgroup)
|
||||
# 统计电耗
|
||||
mpoints_elec = mpoints.filter(cate='elec')
|
||||
elec_val = 0
|
||||
params = {'mpoint': mpoint, 'tag_update__gte': sflog.create_time, 'tag_update__lt': sflog.end_time}
|
||||
for mpoint in mpoints_elec:
|
||||
mrs = MpLog.objects.filter(**params).order_by('tag_update')
|
||||
if mrs.exists():
|
||||
elec_val += mrs.last().tag_val - mrs.first().tag_val
|
||||
SfLog.objects.filter(id=sflog).update(elec_val=elec_val, cal_time=datetime.datetime.now())
|
||||
|
||||
|
||||
@shared_task(base=CustomTask)
|
||||
def cal_sflogs_en_val(is_today=1):
|
||||
"""
|
||||
计算班组能耗值, 默认开始时间是当天的
|
||||
"""
|
||||
now = datetime.datetime.now()
|
||||
if is_today:
|
||||
sflogs = SfLog.objects.filter(start_time__year=now.year, start_time__month=now.month, start_time__day=now.day)
|
||||
for i in sflogs:
|
||||
cal_sflog_en_val(i.id)
|
||||
else:
|
||||
pre = now - datetime.timedelta(days=1)
|
||||
sflogs = SfLog.objects.filter(start_time__year=pre.year, start_time__month=pre.month, start_time__day=pre.day)
|
||||
for i in sflogs:
|
||||
cal_sflog_en_val(i.id)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -41,4 +41,4 @@ class MpointStatViewSet(ListModelMixin, CustomGenericViewSet):
|
|||
queryset = MpointStat.objects.all()
|
||||
serializer_class = MpointStatSerializer
|
||||
select_related_fields = ['mpoint']
|
||||
filterset_fields = ['mpoint']
|
||||
filterset_fields = ['mpoint', 'mpoint__mgroup', 'mpoint__mgroup__belong_dept', 'sflog', 'hour', 'day', 'month', 'year', 'day_s', 'month_s', 'year_s']
|
Loading…
Reference in New Issue