diff --git a/doc/1.一般工业固废管理台账和日常记录表 (1).docx b/doc/1.一般工业固废管理台账和日常记录表 (1).docx new file mode 100644 index 00000000..26b87a8e Binary files /dev/null and b/doc/1.一般工业固废管理台账和日常记录表 (1).docx differ diff --git a/doc/2.危废相关台账(1).docx b/doc/2.危废相关台账(1).docx new file mode 100644 index 00000000..6424a479 Binary files /dev/null and b/doc/2.危废相关台账(1).docx differ diff --git a/doc/3.污染物排放台账(1).docx b/doc/3.污染物排放台账(1).docx new file mode 100644 index 00000000..92114c7e Binary files /dev/null and b/doc/3.污染物排放台账(1).docx differ diff --git a/enp/__init__.py b/enp/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/enp/admin.py b/enp/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/enp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/enp/apps.py b/enp/apps.py new file mode 100644 index 00000000..afadc1d7 --- /dev/null +++ b/enp/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class EnpConfig(AppConfig): + name = 'enp' diff --git a/enp/migrations/0001_initial.py b/enp/migrations/0001_initial.py new file mode 100644 index 00000000..1869f1b9 --- /dev/null +++ b/enp/migrations/0001_initial.py @@ -0,0 +1,56 @@ +# Generated by Django 2.2.8 on 2021-10-02 23:26 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ] + + operations = [ + migrations.CreateModel( + name='Waste', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('number', models.CharField(max_length=100, verbose_name='编号')), + ('name', models.CharField(max_length=100, verbose_name='名称')), + ('type', models.IntegerField(choices=[(1, '一般工业固废')], default=1, verbose_name='废物类型')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='waste_create_by', to='safesite.User', verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='waste_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='NormalWasterRecord', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('gen_date', models.DateField(verbose_name='产生日期')), + ('dis_date', models.DateField(verbose_name='处置日期')), + ('gen_count', models.FloatField(verbose_name='产生数量')), + ('dis_count', models.FloatField(verbose_name='委托处置量')), + ('inv_count', models.FloatField(verbose_name='库存量')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='normalwasterrecord_create_by', to='safesite.User', verbose_name='创建人')), + ('operator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.User', verbose_name='经办人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='normalwasterrecord_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/enp/migrations/0002_normalwasterrecord_waste.py b/enp/migrations/0002_normalwasterrecord_waste.py new file mode 100644 index 00000000..ff825556 --- /dev/null +++ b/enp/migrations/0002_normalwasterrecord_waste.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.8 on 2021-10-02 23:41 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('enp', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='normalwasterrecord', + name='waste', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='enp.Waste', verbose_name='关联废物'), + preserve_default=False, + ), + ] diff --git a/enp/migrations/0003_auto_20211003_2240.py b/enp/migrations/0003_auto_20211003_2240.py new file mode 100644 index 00000000..4057709c --- /dev/null +++ b/enp/migrations/0003_auto_20211003_2240.py @@ -0,0 +1,50 @@ +# Generated by Django 2.2.8 on 2021-10-03 22:40 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ('enp', '0002_normalwasterrecord_waste'), + ] + + operations = [ + migrations.CreateModel( + name='NormalWasteRecord', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('gen_date', models.DateField(verbose_name='产生日期')), + ('dis_date', models.DateField(verbose_name='处置日期')), + ('gen_count', models.FloatField(verbose_name='产生数量')), + ('dis_count', models.FloatField(verbose_name='委托处置量')), + ('inv_count', models.FloatField(verbose_name='库存量')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='normalwasterecord_create_by', to='safesite.User', verbose_name='创建人')), + ('operator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.User', verbose_name='经办人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='normalwasterecord_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AlterField( + model_name='waste', + name='type', + field=models.IntegerField(choices=[(1, '一般工业固废'), (2, '危废')], default=1, verbose_name='废物类型'), + ), + migrations.DeleteModel( + name='NormalWasterRecord', + ), + migrations.AddField( + model_name='normalwasterecord', + name='waste', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='enp.Waste', verbose_name='关联废物'), + ), + ] diff --git a/enp/migrations/0004_dwastemakelist.py b/enp/migrations/0004_dwastemakelist.py new file mode 100644 index 00000000..5dc394ae --- /dev/null +++ b/enp/migrations/0004_dwastemakelist.py @@ -0,0 +1,38 @@ +# Generated by Django 2.2.8 on 2021-10-03 23:49 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ('enp', '0003_auto_20211003_2240'), + ] + + operations = [ + migrations.CreateModel( + name='DWasteMakeList', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('process', models.CharField(max_length=100, verbose_name='产生工序')), + ('source', models.CharField(max_length=100, verbose_name='源/车间')), + ('goto', models.CharField(max_length=100, verbose_name='废物流向')), + ('companyname', models.CharField(max_length=100, verbose_name='处理企业名称')), + ('gen_count', models.FloatField(verbose_name='年度产生量(吨)')), + ('license', models.CharField(max_length=100, verbose_name='许可证编号')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dwastemakelist_create_by', to='safesite.User', verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dwastemakelist_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ('waste', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='enp.Waste', verbose_name='关联废物')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/enp/migrations/0005_dwastemakerecord.py b/enp/migrations/0005_dwastemakerecord.py new file mode 100644 index 00000000..976479d1 --- /dev/null +++ b/enp/migrations/0005_dwastemakerecord.py @@ -0,0 +1,38 @@ +# Generated by Django 2.2.8 on 2021-10-04 16:19 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ('enp', '0004_dwastemakelist'), + ] + + operations = [ + migrations.CreateModel( + name='DWasteMakeRecord', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('gen_time', models.DateTimeField(verbose_name='产生时间')), + ('gen_count', models.FloatField(verbose_name='产生数量')), + ('container', models.CharField(max_length=100, verbose_name='容器情况')), + ('container_count', models.IntegerField(verbose_name='容器个数')), + ('trans_time', models.DateTimeField(verbose_name='转移时间')), + ('trans_count', models.IntegerField(verbose_name='转移个数')), + ('goto', models.CharField(max_length=100, verbose_name='去向')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dwastemakerecord_create_by', to='safesite.User', verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dwastemakerecord_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('waste', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='enp.Waste', verbose_name='关联废物')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/enp/migrations/0006_dwastemakerecord_usecomp.py b/enp/migrations/0006_dwastemakerecord_usecomp.py new file mode 100644 index 00000000..0e99ccec --- /dev/null +++ b/enp/migrations/0006_dwastemakerecord_usecomp.py @@ -0,0 +1,21 @@ +# Generated by Django 2.2.8 on 2021-10-04 16:27 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ('enp', '0005_dwastemakerecord'), + ] + + operations = [ + migrations.AddField( + model_name='dwastemakerecord', + name='usecomp', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司'), + preserve_default=False, + ), + ] diff --git a/enp/migrations/0007_dwastekeeprecord.py b/enp/migrations/0007_dwastekeeprecord.py new file mode 100644 index 00000000..5faf5542 --- /dev/null +++ b/enp/migrations/0007_dwastekeeprecord.py @@ -0,0 +1,41 @@ +# Generated by Django 2.2.8 on 2021-10-04 20:42 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ('enp', '0006_dwastemakerecord_usecomp'), + ] + + operations = [ + migrations.CreateModel( + name='DWasteKeepRecord', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('in_time', models.DateTimeField(verbose_name='入库时间')), + ('in_count', models.FloatField(verbose_name='入库数量')), + ('source', models.CharField(max_length=100, verbose_name='废物来源')), + ('container', models.CharField(max_length=100, verbose_name='容器规格')), + ('container_count', models.IntegerField(verbose_name='容器个数')), + ('place', models.CharField(max_length=50, verbose_name='存放位置')), + ('out_time', models.DateTimeField(verbose_name='出库时间')), + ('out_count', models.IntegerField(verbose_name='出库数量')), + ('goto', models.CharField(max_length=100, verbose_name='去向')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dwastekeeprecord_create_by', to='safesite.User', verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dwastekeeprecord_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ('waste', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='enp.Waste', verbose_name='关联废物')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/enp/migrations/0008_dwastehandlerecord.py b/enp/migrations/0008_dwastehandlerecord.py new file mode 100644 index 00000000..44bbd044 --- /dev/null +++ b/enp/migrations/0008_dwastehandlerecord.py @@ -0,0 +1,39 @@ +# Generated by Django 2.2.8 on 2021-10-04 21:46 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ('enp', '0007_dwastekeeprecord'), + ] + + operations = [ + migrations.CreateModel( + name='DWasteHandleRecord', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('accept_time', models.DateTimeField(verbose_name='接收时间')), + ('accept_count', models.FloatField(verbose_name='接收数量')), + ('source', models.CharField(max_length=100, verbose_name='废物来源')), + ('container', models.CharField(max_length=100, verbose_name='容器规格')), + ('container_count', models.IntegerField(verbose_name='容器个数')), + ('handle_time', models.DateTimeField(verbose_name='处置时间')), + ('handle_method', models.CharField(max_length=100, verbose_name='处置方式')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dwastehandlerecord_create_by', to='safesite.User', verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dwastehandlerecord_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ('waste', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='enp.Waste', verbose_name='关联废物')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/enp/migrations/0009_drain.py b/enp/migrations/0009_drain.py new file mode 100644 index 00000000..515bb959 --- /dev/null +++ b/enp/migrations/0009_drain.py @@ -0,0 +1,33 @@ +# Generated by Django 2.2.8 on 2021-10-05 15:23 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ('enp', '0008_dwastehandlerecord'), + ] + + operations = [ + migrations.CreateModel( + name='Drain', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('number', models.CharField(max_length=100, verbose_name='编号')), + ('name', models.CharField(max_length=100, verbose_name='名称')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='drain_create_by', to='safesite.User', verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='drain_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/enp/migrations/0010_gasemit.py b/enp/migrations/0010_gasemit.py new file mode 100644 index 00000000..4f964598 --- /dev/null +++ b/enp/migrations/0010_gasemit.py @@ -0,0 +1,49 @@ +# Generated by Django 2.2.8 on 2021-10-05 17:02 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ('enp', '0009_drain'), + ] + + operations = [ + migrations.CreateModel( + name='GasEmit', + fields=[ + ('id', models.AutoField(auto_created=True, 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='删除标记')), + ('watch_time', models.DateTimeField(verbose_name='监测时间')), + ('out_smoke', models.FloatField(verbose_name='标态干烟气量')), + ('out_o2', models.FloatField(verbose_name='氧含量')), + ('out_so2', models.FloatField(verbose_name='二氧化硫')), + ('out_so2_s', models.FloatField(verbose_name='二氧化硫s')), + ('out_particle', models.FloatField(verbose_name='颗粒物')), + ('out_particle_s', models.FloatField(verbose_name='颗粒物s')), + ('out_nox', models.FloatField(verbose_name='氮氧化物')), + ('out_nox_s', models.FloatField(verbose_name='氮氧化物s')), + ('in_smoke', models.FloatField(verbose_name='标态干烟气量')), + ('in_o2', models.FloatField(verbose_name='氧含量')), + ('in_so2', models.FloatField(verbose_name='二氧化硫')), + ('in_so2_s', models.FloatField(verbose_name='二氧化硫s')), + ('in_particle', models.FloatField(verbose_name='颗粒物')), + ('in_particle_s', models.FloatField(verbose_name='颗粒物s')), + ('in_nox', models.FloatField(verbose_name='氮氧化物')), + ('in_nox_s', models.FloatField(verbose_name='氮氧化物s')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='gasemit_create_by', to='safesite.User', verbose_name='创建人')), + ('drain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='enp.Drain', verbose_name='关联排放口')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='gasemit_update_by', to='safesite.User', verbose_name='最后编辑人')), + ('usecomp', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='safesite.Partment', verbose_name='所属公司')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/enp/migrations/__init__.py b/enp/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/enp/models.py b/enp/models.py new file mode 100644 index 00000000..14a490e4 --- /dev/null +++ b/enp/models.py @@ -0,0 +1,119 @@ +from django.db import models +from safesite.models import User, Partment +from utils.models import CommonModel +# Create your models here. + +class Waste(CommonModel): + type_choices = ( + (1, '一般工业固废'), + (2, '危废') + ) + number = models.CharField('编号', max_length=100) + name = models.CharField('名称', max_length=100) + type = models.IntegerField('废物类型', choices=type_choices, default=1) + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司') + + +class NormalWasteRecord(CommonModel): + """ + 一般废物排放记录 + """ + gen_date = models.DateField('产生日期') + dis_date = models.DateField('处置日期') + gen_count = models.FloatField('产生数量') + dis_count = models.FloatField('委托处置量') + inv_count = models.FloatField('库存量') + waste = models.ForeignKey(Waste, on_delete=models.CASCADE, verbose_name='关联废物') + operator = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='经办人') + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司') + +class DWasteMakeList(CommonModel): + """ + 危废产生一览表 + """ + waste = models.ForeignKey(Waste, on_delete=models.CASCADE, verbose_name='关联废物') + process = models.CharField('产生工序', max_length=100) + source = models.CharField('源/车间', max_length=100) + goto = models.CharField('废物流向', max_length=100) + companyname = models.CharField('处理企业名称', max_length=100) + gen_count = models.FloatField('年度产生量(吨)') + license = models.CharField('许可证编号', max_length=100) + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司') + +class DWasteMakeRecord(CommonModel): + """ + 危废产生环节记录 + """ + waste = models.ForeignKey(Waste, on_delete=models.CASCADE, verbose_name='关联废物') + gen_time = models.DateTimeField('产生时间') + gen_count = models.FloatField('产生数量') + container = models.CharField('容器情况', max_length=100) + container_count = models.IntegerField('容器个数') + trans_time = models.DateTimeField('转移时间') + trans_count = models.IntegerField('转移个数') + goto = models.CharField('去向', max_length=100) + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司') + + +class DWasteKeepRecord(CommonModel): + """ + 危废贮存环节记录 + """ + waste = models.ForeignKey(Waste, on_delete=models.CASCADE, verbose_name='关联废物') + in_time = models.DateTimeField('入库时间') + in_count = models.FloatField('入库数量') + source = models.CharField('废物来源', max_length=100) + container = models.CharField('容器规格', max_length=100) + container_count = models.IntegerField('容器个数') + place = models.CharField('存放位置', max_length=50) + out_time = models.DateTimeField('出库时间') + out_count = models.IntegerField('出库数量') + goto = models.CharField('去向', max_length=100) + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司') + + +class DWasteHandleRecord(CommonModel): + """ + 危废处置环节记录 + """ + waste = models.ForeignKey(Waste, on_delete=models.CASCADE, verbose_name='关联废物') + accept_time = models.DateTimeField('接收时间') + accept_count = models.FloatField('接收数量') + source = models.CharField('废物来源', max_length=100) + container = models.CharField('容器规格', max_length=100) + container_count = models.IntegerField('容器个数') + handle_time = models.DateTimeField('处置时间') + handle_method = models.CharField('处置方式', max_length=100) + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司') + +class Drain(CommonModel): + """ + 排放口 + """ + number = models.CharField('编号', max_length=100) + name = models.CharField('名称', max_length=100) + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司') + +class GasEmit(CommonModel): + """ + 废气排放记录 + """ + drain = models.ForeignKey(Drain, verbose_name='关联排放口', on_delete=models.CASCADE) + watch_time = models.DateTimeField('监测时间') + out_smoke = models.FloatField('标态干烟气量') + out_o2 = models.FloatField("氧含量") + out_so2 = models.FloatField("二氧化硫") + out_so2_s = models.FloatField("二氧化硫s") + out_particle = models.FloatField("颗粒物") + out_particle_s = models.FloatField("颗粒物s") + out_nox = models.FloatField("氮氧化物") + out_nox_s = models.FloatField("氮氧化物s") + in_smoke = models.FloatField('标态干烟气量') + in_o2 = models.FloatField("氧含量") + in_so2 = models.FloatField("二氧化硫") + in_so2_s = models.FloatField("二氧化硫s") + in_particle = models.FloatField("颗粒物") + in_particle_s = models.FloatField("颗粒物s") + in_nox = models.FloatField("氮氧化物") + in_nox_s = models.FloatField("氮氧化物s") + usecomp = models.ForeignKey(Partment, on_delete=models.CASCADE, verbose_name='所属公司') \ No newline at end of file diff --git a/enp/predict.py b/enp/predict.py new file mode 100644 index 00000000..6abc1d4b --- /dev/null +++ b/enp/predict.py @@ -0,0 +1,54 @@ +import numpy as np + +def GM11(x,n): + ''' + 灰色预测 + x:序列,numpy对象 + n:需要往后预测的个数 + ''' + x1 = x.cumsum()#一次累加 + z1 = (x1[:len(x1) - 1] + x1[1:])/2.0#紧邻均值 + z1 = z1.reshape((len(z1),1)) + B = np.append(-z1,np.ones_like(z1),axis=1) + Y = x[1:].reshape((len(x) - 1,1)) + #a为发展系数 b为灰色作用量 + [[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)#计算参数 + result = (x[0]-b/a)*np.exp(-a*(n-1))-(x[0]-b/a)*np.exp(-a*(n-2)) + S1_2 = x.var()#原序列方差 + e = list()#残差序列 + for index in range(1,x.shape[0]+1): + predict = (x[0]-b/a)*np.exp(-a*(index-1))-(x[0]-b/a)*np.exp(-a*(index-2)) + e.append(x[index-1]-predict) + S2_2 = np.array(e).var()#残差方差 + C = S2_2/S1_2#后验差比 + if C<=0.35: + assess = '后验差比<=0.35,模型精度等级为好' + elif C<=0.5: + assess = '后验差比<=0.5,模型精度等级为合格' + elif C<=0.65: + assess = '后验差比<=0.65,模型精度等级为勉强' + else: + assess = '后验差比>0.65,模型精度等级为不合格' + #预测数据 + predict = list() + for index in range(x.shape[0]+1,x.shape[0]+n+1): + predict.append((x[0]-b/a)*np.exp(-a*(index-1))-(x[0]-b/a)*np.exp(-a*(index-2))) + predict = np.array(predict) + return { + 'a':{'value':a,'desc':'发展系数'}, + 'b':{'value':b,'desc':'灰色作用量'}, + 'predict':{'value':result,'desc':'第%d个预测值'%n}, + 'C':{'value':C,'desc':assess}, + 'predict':{'value':predict,'desc':'往后预测%d个的序列'%(n)}, + } + +if __name__ == "__main__": + data = np.array([1.2,2.2,3.1,4.5,5.6,6.7,7.1,8.2,9.6,10.6,11,12.4,13.5,14.7,15.2]) + x = data[0:5]#输入数据 + y = data[5:7]#需要预测的数据 + result = GM11(x,len(y)) + predict = result['predict']['value'] + predict = np.round(predict,1) + print('真实值:',y) + print('预测值:',predict) + print(result) \ No newline at end of file diff --git a/enp/templates/dangerousWaste.html b/enp/templates/dangerousWaste.html new file mode 100644 index 00000000..909b527f --- /dev/null +++ b/enp/templates/dangerousWaste.html @@ -0,0 +1,612 @@ +