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 @@ +
+ +
+
+ 新增 + 编辑 + 删除 +
+
+
+
+
+
+
+ 新增 + 删除 +
+
+
+
+
+ 新增 + 删除 +
+
+
+
+
+ 新增 + 删除 +
+
+
+
+
+ 新增 + 删除 +
+
+
+
+
+
+
+
+ + +
+ +
+
+ +
+
+ 保存 +
+
+
+
+
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ 保存 +
+
+
+
+
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ 保存 +
+
+
+
+
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ 保存 +
+
+
+
+
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ 保存 +
+
+
+ \ No newline at end of file diff --git a/enp/templates/gaspredict.html b/enp/templates/gaspredict.html new file mode 100644 index 00000000..39993417 --- /dev/null +++ b/enp/templates/gaspredict.html @@ -0,0 +1,139 @@ +
+
+ \ No newline at end of file diff --git a/enp/templates/waste.html b/enp/templates/waste.html new file mode 100644 index 00000000..f888db11 --- /dev/null +++ b/enp/templates/waste.html @@ -0,0 +1,215 @@ +
+ +
+
+ 新增 + 编辑 + 删除 +
+
+
+
+
+ 新增 + 删除 +
+
+
+
+
+
+ + +
+ +
+
+ +
+
+ 保存 +
+
+
+
+
+ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + 选择 +
+
+ 保存 +
+
+
+ \ No newline at end of file diff --git a/enp/templates/wgas.html b/enp/templates/wgas.html new file mode 100644 index 00000000..732cf6ce --- /dev/null +++ b/enp/templates/wgas.html @@ -0,0 +1,272 @@ +
+ +
+
+ 新增 + 编辑 + 删除 +
+
+
+
+
+ 新增 + 删除 +
+
+
+
+
+
+ +
+ +
+
+ +
+
+ 保存 +
+
+
+
+
+ + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ 保存 +
+
+
+ \ No newline at end of file diff --git a/enp/templates/wwater.html b/enp/templates/wwater.html new file mode 100644 index 00000000..89bfb15d --- /dev/null +++ b/enp/templates/wwater.html @@ -0,0 +1,215 @@ +
+ +
+
+ 新增 + 编辑 + 删除 +
+
+
+
+
+ 新增 + 删除 +
+
+
+
+
+
+ + +
+ +
+
+ +
+
+ 保存 +
+
+
+
+
+ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + 选择 +
+
+ 保存 +
+
+
+ \ No newline at end of file diff --git a/enp/tests.py b/enp/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/enp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/enp/urls.py b/enp/urls.py new file mode 100644 index 00000000..6ecc0ea7 --- /dev/null +++ b/enp/urls.py @@ -0,0 +1,9 @@ +from django.urls import path,include +from . import views +urlpatterns = [ + path('waste/', views.HtmlWaste), + path('dangerouswaste/', views.HtmlDangerousWaste), + path('wgas/', views.HtmlWgas), + path('wwater/', views.HtmlWwater), + path('gaspredict/', views.HtmlGasPredict), +] \ No newline at end of file diff --git a/enp/urls_api.py b/enp/urls_api.py new file mode 100644 index 00000000..4514d317 --- /dev/null +++ b/enp/urls_api.py @@ -0,0 +1,14 @@ +from django.urls import path,include +from . import views + +urlpatterns = [ + path('waste//', views.ApiWaste), + path('drain//', views.ApiDrain), + path('normalwasterecord//', views.ApiNormalWasteRecord), + path('dwastemakelist//', views.ApiDWasteMakeList), + path('dwastemakerecord//', views.ApiDWasteMakeRecord), + path('dwastekeeprecord//', views.ApiDWasteKeepRecord), + path('dwastehandlerecord//', views.ApiDWasteHandleRecord), + path('gasemit//', views.ApiGasEmit), + path('gaspredict///', views.ApiGasPredict) +] \ No newline at end of file diff --git a/enp/views.py b/enp/views.py new file mode 100644 index 00000000..b16b3635 --- /dev/null +++ b/enp/views.py @@ -0,0 +1,326 @@ +from django.shortcuts import render +from rest_framework.views import APIView +from rest_framework.authentication import BaseAuthentication +from safesite.models import User +from rest_framework.exceptions import AuthenticationFailed +from .models import DWasteHandleRecord, DWasteKeepRecord, DWasteMakeList, DWasteMakeRecord, Drain, GasEmit, NormalWasteRecord, Waste +from safesite.views import transjson, fenye, MyEncoder +from django.http import HttpResponse, JsonResponse +import json +# Create your views here. +def myAuthentication(BaseAuthentication): + def authenticate(self, request): + user = User.objects.get(userid=request.session['userid']) + if user: + return (user, None) + raise AuthenticationFailed() + + +def HtmlWaste(request): + return render(request, 'waste.html') + +def HtmlDangerousWaste(request): + return render(request, 'dangerousWaste.html') + +def HtmlWgas(request): + return render(request, 'wgas.html') + +def HtmlWwater(request): + return render(request, 'wwater.html') + +def HtmlGasPredict(request): + return render(request, 'gaspredict.html') + +def ApiWaste(request, action): + user = User.objects.get(userid=request.session['userid']) + if action == 'list': + objs = Waste.objects.filter(usecomp=user.usecomp, is_deleted=False) + objs = objs.filter(type=request.GET.get('type', 1)) + total = objs.count() + startnum, endnum = fenye(request) + objs = objs.order_by('id')[startnum:endnum].values('id', 'number', 'name', 'type') + return HttpResponse(transjson(total, objs), content_type="application/json") + elif action == 'combobox': + objs = Waste.objects.filter(usecomp=user.usecomp, is_deleted=False) + objs = objs.filter(type=request.GET.get('type', 1)).order_by('id') + data = objs.values('id', 'number', 'name') + return JsonResponse(list(data), safe=False) + elif action == 'create': + data = json.loads(request.body.decode('utf-8')) + obj= Waste() + obj.number = data['number'] + obj.name = data['name'] + obj.type = data['type'] + obj.create_by = user + obj.update_by = user + obj.usecomp = user.usecomp + obj.save() + return JsonResponse({"code":1}) + elif action == 'delete': + data = json.loads(request.body.decode('utf-8')) + obj = Waste.objects.get(id=data['id']) + obj.delete() + return JsonResponse({"code":1}) + elif action == 'update': + data = json.loads(request.body.decode('utf-8')) + obj = Waste.objects.get(id=data['id']) + obj.number = data['number'] + obj.name = data['name'] + obj.update_by=user + obj.save() + return JsonResponse({"code":1}) + +def ApiNormalWasteRecord(request, action): + user = User.objects.get(userid=request.session['userid']) + if action == 'list': + objs = NormalWasteRecord.objects.filter(usecomp=user.usecomp, is_deleted=False) + if request.GET.get('waste', None): + objs = objs.filter(waste=request.GET.get('waste')) + total = objs.count() + startnum, endnum = fenye(request) + objs = objs.order_by('-create_time')[startnum:endnum].values('id', 'gen_date', 'dis_date', 'gen_count', 'dis_count', 'operator__name', 'waste__name', 'waste', 'operator', 'inv_count') + return HttpResponse(transjson(total, objs), content_type="application/json") + elif action == 'create': + data = json.loads(request.body.decode('utf-8')) + obj = NormalWasteRecord() + obj.waste = Waste.objects.get(id=data['waste']) + obj.operator = User.objects.get(userid=data['operator']) + obj.create_by = user + obj.update_by = user + obj.usecomp = user.usecomp + obj.gen_date = data['gen_date'] + obj.dis_date = data['dis_date'] + obj.gen_count = data['gen_count'] + obj.dis_count = data['dis_count'] + obj.inv_count = data['inv_count'] + obj.save() + return JsonResponse({"code":1}) + elif action == 'delete': + data = json.loads(request.body.decode('utf-8')) + obj = NormalWasteRecord.objects.get(id=data['id']) + obj.delete() + return JsonResponse({"code":1}) + +def ApiDWasteMakeList(request,action): + user = User.objects.get(userid=request.session['userid']) + if action == 'list': + objs = DWasteMakeList.objects.filter(usecomp=user.usecomp, is_deleted=False) + if request.GET.get('waste', None): + objs = objs.filter(waste=request.GET.get('waste')) + total = objs.count() + startnum, endnum = fenye(request) + objs = objs.order_by('-create_time')[startnum:endnum].values('id', 'waste', 'process', 'source', 'goto', 'companyname', 'gen_count', 'license', 'waste__name', 'waste__number', 'create_time') + return HttpResponse(transjson(total, objs), content_type="application/json") + elif action == 'create': + data = json.loads(request.body.decode('utf-8')) + obj = DWasteMakeList() + obj.waste = Waste.objects.get(id=data['waste']) + obj.create_by = user + obj.update_by = user + obj.usecomp = user.usecomp + obj.process = data['process'] + obj.source = data['source'] + obj.goto = data['goto'] + obj.companyname = data['companyname'] + obj.gen_count = data['gen_count'] + obj.license = data['license'] + obj.save() + return JsonResponse({"code":1}) + elif action == 'delete': + data = json.loads(request.body.decode('utf-8')) + obj = DWasteMakeList.objects.get(id=data['id']) + obj.delete() + return JsonResponse({"code":1}) + +def ApiDWasteMakeRecord(request,action): + user = User.objects.get(userid=request.session['userid']) + if action == 'list': + objs = DWasteMakeRecord.objects.filter(usecomp=user.usecomp, is_deleted=False) + if request.GET.get('waste', None): + objs = objs.filter(waste=request.GET.get('waste')) + total = objs.count() + startnum, endnum = fenye(request) + objs = objs.order_by('-create_time')[startnum:endnum].values('id', 'waste', 'gen_time', 'gen_count', 'container', 'container_count', 'trans_time', 'trans_count', 'waste__name', 'waste__number', 'goto') + return HttpResponse(transjson(total, objs), content_type="application/json") + elif action == 'create': + data = json.loads(request.body.decode('utf-8')) + obj = DWasteMakeRecord() + obj.waste = Waste.objects.get(id=data['waste']) + obj.create_by = user + obj.update_by = user + obj.usecomp = user.usecomp + obj.gen_time = data['gen_time'] + obj.gen_count = data['gen_count'] + obj.goto = data['goto'] + obj.container = data['container'] + obj.container_count = data['container_count'] + obj.trans_time = data['trans_time'] + obj.trans_count = data['trans_count'] + obj.save() + return JsonResponse({"code":1}) + elif action == 'delete': + data = json.loads(request.body.decode('utf-8')) + obj = DWasteMakeRecord.objects.get(id=data['id']) + obj.delete() + return JsonResponse({"code":1}) + +def ApiDWasteKeepRecord(request,action): + user = User.objects.get(userid=request.session['userid']) + if action == 'list': + objs = DWasteKeepRecord.objects.filter(usecomp=user.usecomp, is_deleted=False) + if request.GET.get('waste', None): + objs = objs.filter(waste=request.GET.get('waste')) + total = objs.count() + startnum, endnum = fenye(request) + objs = objs.order_by('-create_time')[startnum:endnum].values('id', 'waste', 'in_time', 'in_count', 'source', 'container', 'container_count', 'place', 'out_time', 'out_count', 'waste__name', 'waste__number', 'goto') + return HttpResponse(transjson(total, objs), content_type="application/json") + elif action == 'create': + data = json.loads(request.body.decode('utf-8')) + obj = DWasteKeepRecord() + obj.waste = Waste.objects.get(id=data['waste']) + obj.create_by = user + obj.update_by = user + obj.usecomp = user.usecomp + obj.in_time = data['in_time'] + obj.in_count = data['in_count'] + obj.source = data['source'] + obj.place = data['place'] + obj.goto = data['goto'] + obj.container = data['container'] + obj.container_count = data['container_count'] + obj.out_time = data['out_time'] + obj.out_count = data['out_count'] + obj.save() + return JsonResponse({"code":1}) + elif action == 'delete': + data = json.loads(request.body.decode('utf-8')) + obj = DWasteKeepRecord.objects.get(id=data['id']) + obj.delete() + return JsonResponse({"code":1}) + +def ApiDWasteHandleRecord(request,action): + user = User.objects.get(userid=request.session['userid']) + if action == 'list': + objs = DWasteHandleRecord.objects.filter(usecomp=user.usecomp, is_deleted=False) + if request.GET.get('waste', None): + objs = objs.filter(waste=request.GET.get('waste')) + total = objs.count() + startnum, endnum = fenye(request) + objs = objs.order_by('-create_time')[startnum:endnum].values('id', 'waste', 'accept_time', 'accept_count', 'source', 'container', 'container_count', 'handle_time', 'handle_method', 'waste__name', 'waste__number') + return HttpResponse(transjson(total, objs), content_type="application/json") + elif action == 'create': + data = json.loads(request.body.decode('utf-8')) + obj = DWasteHandleRecord() + obj.waste = Waste.objects.get(id=data['waste']) + obj.create_by = user + obj.update_by = user + obj.usecomp = user.usecomp + obj.accept_time = data['accept_time'] + obj.accept_count = data['accept_count'] + obj.source = data['source'] + obj.container = data['container'] + obj.container_count = data['container_count'] + obj.handle_time = data['handle_time'] + obj.handle_method = data['handle_method'] + obj.save() + return JsonResponse({"code":1}) + elif action == 'delete': + data = json.loads(request.body.decode('utf-8')) + obj = DWasteHandleRecord.objects.get(id=data['id']) + obj.delete() + return JsonResponse({"code":1}) + +def ApiDrain(request, action): + user = User.objects.get(userid=request.session['userid']) + if action == 'list': + objs = Drain.objects.filter(usecomp=user.usecomp, is_deleted=False) + total = objs.count() + startnum, endnum = fenye(request) + objs = objs.order_by('id')[startnum:endnum].values('id', 'number', 'name') + return HttpResponse(transjson(total, objs), content_type="application/json") + elif action == 'combobox': + objs = Drain.objects.filter(usecomp=user.usecomp, is_deleted=False).order_by('id') + data = objs.values('id', 'number', 'name') + return JsonResponse(list(data), safe=False) + elif action == 'create': + data = json.loads(request.body.decode('utf-8')) + obj= Drain() + obj.number = data['number'] + obj.name = data['name'] + obj.create_by = user + obj.update_by = user + obj.usecomp = user.usecomp + obj.save() + return JsonResponse({"code":1}) + elif action == 'delete': + data = json.loads(request.body.decode('utf-8')) + obj = Drain.objects.get(id=data['id']) + obj.delete() + return JsonResponse({"code":1}) + elif action == 'update': + data = json.loads(request.body.decode('utf-8')) + obj = Drain.objects.get(id=data['id']) + obj.number = data['number'] + obj.name = data['name'] + obj.update_by=user + obj.save() + return JsonResponse({"code":1}) + +def ApiGasEmit(request,action): + user = User.objects.get(userid=request.session['userid']) + if action == 'list': + objs = GasEmit.objects.filter(usecomp=user.usecomp, is_deleted=False) + if request.GET.get('drain', None): + objs = objs.filter(drain=request.GET.get('drain')) + total = objs.count() + startnum, endnum = fenye(request) + objs = objs.order_by('-create_time')[startnum:endnum].values('id', 'drain', 'watch_time', 'out_smoke', 'out_o2', 'out_so2', 'out_so2_s', 'out_particle', 'out_particle_s', 'drain__name', 'drain__number' + , 'out_nox', 'out_nox_s', 'in_smoke', 'in_o2', 'in_so2', 'in_so2_s', 'in_particle', 'in_particle_s' + , 'in_nox', 'in_nox_s') + return HttpResponse(transjson(total, objs), content_type="application/json") + elif action == 'create': + data = json.loads(request.body.decode('utf-8')) + obj = GasEmit() + obj.drain = Drain.objects.get(id=data['drain']) + obj.create_by = user + obj.update_by = user + obj.usecomp = user.usecomp + obj.watch_time = data['watch_time'] + obj.out_smoke = data['out_smoke'] + obj.out_o2 = data['out_o2'] + obj.out_so2 = data['out_so2'] + obj.out_so2_s = data['out_so2_s'] + obj.out_particle = data['out_particle'] + obj.out_particle_s = data['out_particle_s'] + obj.out_nox = data['out_nox'] + obj.out_nox_s = data['out_nox_s'] + obj.in_smoke = data['in_smoke'] + obj.in_o2 = data['in_o2'] + obj.in_so2 = data['in_so2'] + obj.in_so2_s = data['in_so2_s'] + obj.in_particle = data['in_particle'] + obj.in_particle_s = data['in_particle_s'] + obj.in_nox = data['in_nox'] + obj.in_nox_s = data['in_nox_s'] + obj.save() + return JsonResponse({"code":1}) + elif action == 'delete': + data = json.loads(request.body.decode('utf-8')) + obj = GasEmit.objects.get(id=data['id']) + obj.delete() + return JsonResponse({"code":1}) + +import numpy as np +from .predict import GM11 +def ApiGasPredict(request, element, drainId): + element_list = list(GasEmit.objects.filter(is_deleted=False, drain__id=drainId)\ + .order_by('-create_time')[0:5].values_list(element, flat=True)) + element_list.reverse() + if len(element_list)>=3: + result = GM11(np.array(element_list), 3) + element_list.extend(result['predict']['value']) + ret = {"code":1, "data":[round(i,2) for i in element_list]} + return JsonResponse(ret) + else: + return JsonResponse({"code":0, "msg":'至少需要三条记录'}) + \ No newline at end of file diff --git a/mysite/urls.py b/mysite/urls.py index cd8b9dde..7d7c55f4 100644 --- a/mysite/urls.py +++ b/mysite/urls.py @@ -22,6 +22,8 @@ from django.urls import include, path urlpatterns = [ path('django/', admin.site.urls), path('groups/', include('groups.urls')), + path('html/enp/', include('enp.urls')), + path('api/enp/', include('enp.urls_api')), path('',include('safesite.urls')), diff --git a/safesite/forms.py b/safesite/forms.py index 499b0ea8..ee1b3fe5 100644 --- a/safesite/forms.py +++ b/safesite/forms.py @@ -21,5 +21,7 @@ class CompanyInfoForm(forms.Form): legalperson_phone = forms.CharField(max_length=24, label='法人电话', widget=forms.TextInput(attrs={'size': '50'})) liaison = forms.CharField(max_length=24, label='联系人', widget=forms.TextInput(attrs={'size': '50'})) liaison_phone = forms.CharField(max_length=24, label='联系人电话', widget=forms.TextInput(attrs={'size': '50'})) + enp_number = forms.CharField(max_length=24, label='环评批复文号', widget=forms.TextInput(attrs={'size': '50'}), required=False) + waste_number = forms.CharField(max_length=24, label='排污许可证编号', widget=forms.TextInput(attrs={'size': '50'}), required=False) introduce = forms.CharField(label='公司概况', widget=forms.Textarea) diff --git a/safesite/migrations/0390_auto_20211006_1819.py b/safesite/migrations/0390_auto_20211006_1819.py new file mode 100644 index 00000000..e722bf77 --- /dev/null +++ b/safesite/migrations/0390_auto_20211006_1819.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.8 on 2021-10-06 18:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0389_auto_20210905_1612'), + ] + + operations = [ + migrations.AddField( + model_name='companyinfo', + name='enp_number', + field=models.CharField(blank=True, max_length=50, null=True, verbose_name='环评批复文号'), + ), + migrations.AddField( + model_name='companyinfo', + name='waste_number', + field=models.CharField(blank=True, max_length=50, null=True, verbose_name='排污许可证编号'), + ), + ] diff --git a/safesite/models.py b/safesite/models.py index 7a61c4ed..a208f7c8 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -1233,6 +1233,8 @@ class CompanyInfo(models.Model): liaison = models.CharField(max_length=24, verbose_name='联系人') liaison_phone = models.CharField(max_length=24, verbose_name='联系人电话') introduce = models.TextField(null=True, blank=True, verbose_name='公司概况') + enp_number = models.CharField(max_length=50, verbose_name='环评批复文号', null=True, blank=True) + waste_number = models.CharField(max_length=50, verbose_name='排污许可证编号', null=True, blank=True) createtime = models.DateTimeField(auto_now_add=True) modifytime = models.DateTimeField(auto_now=True) # 法律法规分类表 diff --git a/safesite/views.py b/safesite/views.py index 905f5f93..b2993633 100644 --- a/safesite/views.py +++ b/safesite/views.py @@ -8312,6 +8312,8 @@ def companyinfo(req): companyinfo.peoplenum = companyinfo_form.cleaned_data.get( 'peoplenum') companyinfo.website = companyinfo_form.cleaned_data.get('website') + companyinfo.enp_number = companyinfo_form.cleaned_data.get('enp_number', None) + companyinfo.waste_number = companyinfo_form.cleaned_data.get('waste_number', None) companyinfo.save() #html = 'companyinfo.html' # return redirect('/withmenu/', html="companyinfo.html") diff --git a/utils/models.py b/utils/models.py new file mode 100644 index 00000000..33ee8e95 --- /dev/null +++ b/utils/models.py @@ -0,0 +1,29 @@ +from django.db import models +from django.utils import timezone +from safesite.models import User + +class BaseModel(models.Model): + """ + 基本表 + """ + create_time = models.DateTimeField( + default=timezone.now, verbose_name='创建时间', help_text='创建时间') + update_time = models.DateTimeField( + auto_now=True, verbose_name='修改时间', help_text='修改时间') + is_deleted = models.BooleanField( + default=False, verbose_name='删除标记', help_text='删除标记') + + class Meta: + abstract = True + +class CommonModel(BaseModel): + """ + 业务用基本表A,包含create_by, update_by字段 + """ + create_by = models.ForeignKey( + User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name= '%(class)s_create_by') + update_by = models.ForeignKey( + User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name= '%(class)s_update_by') + + class Meta: + abstract = True \ No newline at end of file