feat: enp调整

This commit is contained in:
caoqianming 2024-01-22 08:27:27 +08:00
parent c88f33ad4d
commit ddd0d2a6df
6 changed files with 170 additions and 84 deletions

View File

@ -21,22 +21,36 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Drain',
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='删除标记')),
('type', models.PositiveSmallIntegerField(choices=[(10, '排放口'), (20, '污染源')], help_text="((10, '排放口'), (20, '污染源'))", verbose_name='类型')),
('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='删除标记')),
('type', models.PositiveSmallIntegerField(choices=[
(10, '排放口'), (20, '污染源')], help_text="((10, '排放口'), (20, '污染源'))", verbose_name='类型')),
('number', models.CharField(max_length=20, verbose_name='编号')),
('name', models.CharField(max_length=20, verbose_name='名称')),
('level', models.PositiveSmallIntegerField(choices=[(10, '主要排放口'), (20, '次要排放口')], default=20, help_text="((10, '主要排放口'), (20, '次要排放口'))", verbose_name='排口等级')),
('cate', models.CharField(blank=True, choices=[('product', '生产工艺'), ('mtrans', '物料输送'), ('mstore', '物料储存')], help_text="(('product', '生产工艺'), ('mtrans', '物料输送'), ('mstore', '物料储存'))", max_length=10, null=True, verbose_name='分类')),
('height', models.PositiveSmallIntegerField(default=0, verbose_name='排气筒高度')),
('treatment_capacity', models.CharField(default='', max_length=20, verbose_name='处理量')),
('pm_limit', models.FloatField(default=10, help_text='单位:mg/m³', verbose_name='PM超低排放限值')),
('measure', models.CharField(default='', max_length=20, verbose_name='治理措施')),
('coordinates', models.JSONField(default=dict, null=True, verbose_name='坐标')),
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='drain_belong_dept', to='system.dept', verbose_name='所属部门')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='drain_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('level', models.PositiveSmallIntegerField(choices=[
(10, '主要排放口'), (20, '次要排放口')], default=20, help_text="((10, '主要排放口'), (20, '次要排放口'))", verbose_name='排口等级')),
('cate', models.CharField(blank=True, choices=[('product', '生产工艺'), ('mtrans', '物料输送'), (
'mstore', '物料储存')], help_text="(('product', '生产工艺'), ('mtrans', '物料输送'), ('mstore', '物料储存'))", max_length=10, null=True, verbose_name='分类')),
('height', models.PositiveSmallIntegerField(
default=0, verbose_name='排气筒高度')),
('treatment_capacity', models.CharField(
default='', max_length=20, verbose_name='处理量')),
('pm_limit', models.FloatField(default=10,
help_text='单位:mg/m³', verbose_name='PM超低排放限值')),
('measure', models.CharField(default='',
max_length=20, verbose_name='治理措施')),
('coordinates', models.JSONField(
default=dict, null=True, verbose_name='坐标')),
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
related_name='drain_belong_dept', to='system.dept', verbose_name='所属部门')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
related_name='drain_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
],
options={
'abstract': False,
@ -45,13 +59,20 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='DrainEquip',
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='删除标记')),
('params_list', models.JSONField(default=list, null=True, verbose_name='监测参数列表')),
('drain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='enp.drain', verbose_name='排口')),
('equipment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='em.equipment', verbose_name='关联设备')),
('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='删除标记')),
('params_list', models.JSONField(
default=list, null=True, verbose_name='监测参数列表')),
('drain', models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to='enp.drain', verbose_name='排口')),
('equipment', models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to='em.equipment', verbose_name='关联设备')),
],
options={
'abstract': False,
@ -60,16 +81,19 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='drain',
name='equipments',
field=models.ManyToManyField(blank=True, related_name='drain_equipments', through='enp.DrainEquip', to='em.Equipment', verbose_name='关联设备'),
field=models.ManyToManyField(blank=True, related_name='drain_equipments',
through='enp.DrainEquip', to='em.Equipment', verbose_name='关联设备'),
),
migrations.AddField(
model_name='drain',
name='mgroup',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.mgroup', verbose_name='所属工段'),
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to='mtm.mgroup', verbose_name='所属工段'),
),
migrations.AddField(
model_name='drain',
name='update_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='drain_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
related_name='drain_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
),
]

View File

@ -0,0 +1,66 @@
# Generated by Django 3.2.12 on 2024-01-19 02:53
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('enp', '0001_initial'),
]
operations = [
migrations.RunSQL(
sql=[(
"""
CREATE TABLE public.enp_envdata (
"time" timestamp NOT NULL,
"equipment_id" text NOT NULL,
"is_online" INT DEFAULT 1,
"running_state" INT DEFAULT 10,
"dust_rtd" decimal,
"dust_zs" decimal,
"temperature" decimal,
"pressure" decimal,
"speed" decimal,
"humidity" decimal,
"flux" decimal,
"pm25" decimal,
"pm10" decimal,
"tsp" decimal,
"wind_direction" INT,
"wind_speed" decimal,
"so2_rtd" decimal,
"so2_zs" decimal,
"nox_rtd" decimal,
"nox_zs" decimal,
"o2" decimal,
CONSTRAINT enp_envdata_pkey PRIMARY KEY (time, equipment_id)
);
SELECT create_hypertable('enp_envdata', 'time');
"""
)],
reverse_sql=[
"DROP TABLE IF EXISTS public.enp_envdata;"
]
),
migrations.AddField(
model_name='drainequip',
name='dust_alarm',
field=models.DecimalField(
blank=True, decimal_places=4, max_digits=10, null=True, verbose_name='颗粒物报警值'),
),
migrations.AlterField(
model_name='drainequip',
name='drain',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
related_name='drainequip_drain', to='enp.drain', verbose_name='排口'),
),
migrations.AlterField(
model_name='drainequip',
name='equipment',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
related_name='drainequip_equipment', to='em.equipment', verbose_name='关联设备'),
),
]

View File

@ -1,48 +0,0 @@
# Generated by Django 3.2.12 on 2024-01-12 04:17
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('em', '0010_auto_20240110_1232'),
('enp', '0001_initial'),
]
operations = [
migrations.RunSQL(
sql=[(
"""
CREATE TABLE public.enp_envdata (
"time" timestamp NOT NULL,
"equipment_id" text NOT NULL,
"is_online" bool NOT NULL,
"is_runing" bool NOT NULL,
"dust_rtd" decimal,
"dust_zs" decimal,
"temperature" decimal,
"pressure" decimal,
"speed" decimal,
"humidity" decimal,
"flux" decimal,
"pm25" decimal,
"pm10" decimal,
"tsp" decimal,
"wind_speed" decimal,
"so2_rtd" decimal,
"so2_zs" decimal,
"nox_rtd" decimal,
"nox_zs" decimal,
"o2" decimal,
CONSTRAINT enp_envdata_pkey PRIMARY KEY (time, equipment_id)
);
SELECT create_hypertable('enp_envdata', 'time');
"""
)],
reverse_sql=[
"DROP TABLE IF EXISTS public.enp_envdata;"
]
)
]

View File

@ -0,0 +1,25 @@
# Generated by Django 3.2.12 on 2024-01-19 08:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('enp', '0002_auto_20240119_1053'),
]
operations = [
migrations.AddField(
model_name='drainequip',
name='pm10_alarm',
field=models.DecimalField(
blank=True, decimal_places=4, max_digits=10, null=True, verbose_name='PM10报警值'),
),
migrations.AddField(
model_name='drainequip',
name='pm25_alarm',
field=models.DecimalField(
blank=True, decimal_places=4, max_digits=10, null=True, verbose_name='PM2.5报警值'),
),
]

View File

@ -52,17 +52,30 @@ class DrainEquip(BaseModel):
equipment = models.ForeignKey(
Equipment, verbose_name='关联设备', related_name='drainequip_equipment', on_delete=models.CASCADE)
params_list = models.JSONField('监测参数列表', default=list, null=True)
dust_alarm = models.DecimalField(
'颗粒物报警值', max_digits=10, decimal_places=4, null=True, blank=True)
pm10_alarm = models.DecimalField(
'PM10报警值', max_digits=10, decimal_places=4, null=True, blank=True)
pm25_alarm = models.DecimalField(
'PM2.5报警值', max_digits=10, decimal_places=4, null=True, blank=True)
class EnvData(models.Model):
"""
环保监测数据
"""
RUNING_STATE_CHOICES = (
(10, '运行'),
(20, '待机'),
(30, '停机'),
(40, '故障'),
(50, '未知')
)
equipment = models.ForeignKey(
Equipment, verbose_name='关联设备', on_delete=models.CASCADE)
time = models.DateTimeField('采集时间', primary_key=True)
is_online = models.BooleanField('是否在线', default=True)
is_runing = models.BooleanField('是否运行', default=True)
is_online = models.PositiveSmallIntegerField('是否在线', default=1)
running_state = models.PositiveSmallIntegerField('运行状态', default=10)
dust_rtd = models.DecimalField(
'颗粒物实测(mg/m3)', max_digits=10, decimal_places=4, null=True, blank=True)
dust_zs = models.DecimalField(
@ -83,6 +96,8 @@ class EnvData(models.Model):
'PM10(ug/m3)', max_digits=10, decimal_places=4, null=True, blank=True)
tsp = models.DecimalField(
'TSP(ug/m3)', max_digits=10, decimal_places=4, null=True, blank=True)
wind_direction = models.PositiveSmallIntegerField(
'风向', null=True, blank=True)
wind_speed = models.DecimalField(
'风速(m/s)', max_digits=10, decimal_places=4, null=True, blank=True)
so2_rtd = models.DecimalField(

View File

@ -3,19 +3,23 @@ CONNECTION = "postgres://postgres:zcDsj2021@49.232.14.174:5432/ehs_develop"
with psycopg2.connect(CONNECTION) as conn:
cursor = conn.cursor()
query = """
SELECT generate_series(now() - interval '24 hour', now(), interval '5 minute') AS time,
'3491356310052896768' as equipment_id,
random()*100 AS temperature,
random() AS pressure;
SELECT generate_series(now() - interval '48 hour', now(), interval '20 second') AS time,
'3491356310052896768' as equipment_id,
random()*100 AS temperature,
random() AS pressure,
random()*10 AS dust_rtd,
random()*10 AS pm25,
random()*10 AS pm10
"""
cursor.execute(query)
values = cursor.fetchall()
for i in values:
try:
insert_values = [(str(row[0]), row[1], 1, 10, row[2],
row[3], row[4], row[5], row[6]) for row in values]
query_insert = """
INSERT INTO enp_envdata (time, equipment_id, is_online, is_runing, temperature, pressure) values (%s, %s, true, true, %s, %s)
INSERT INTO enp_envdata (time, equipment_id, is_online, running_state, temperature, pressure, dust_rtd, pm25, pm10) values (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
try:
cursor.execute(query_insert, (i[0], i[1], i[2], i[3]))
except (Exception, psycopg2.Error) as error:
print(error.pgerror)
cursor.executemany(query_insert, insert_values)
except (Exception, psycopg2.Error) as error:
print(error)
conn.commit()