资质导入方法已完成

This commit is contained in:
caoqianming 2020-10-19 16:46:14 +08:00
parent 911e548e01
commit 9c999dcba6
5 changed files with 122 additions and 17 deletions

View File

@ -37,27 +37,35 @@
</el-row>
<div style="margin-top:10px">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd" v-if="checkPermission(['qualification_create'])">新增</el-button>
<!-- <el-popover
<el-popover
placement="top"
width="160"
v-if="checkPermission(['ability_import'])"
v-if="checkPermission(['qualification_import'])"
v-model="popovervisible"
>
<p>导入能力列表压缩包.</p>
<div style="text-align: left; margin: 0;">
<p>导入资质excel.</p>
<el-upload
:action="upUrl"
:on-success="handleUploadSuccess"
accept=".rar,.zip"
accept=".xlsx"
:headers="upHeaders"
:show-file-list ="false"
>
<div style="text-align: left; margin: 0;">
<el-link
href="/media/muban/qualification.xlsx"
target="_blank"
@click="popovervisible = false"
type="primary"
>下载模板</el-link>
<el-button size="small" type="primary" @click="popovervisible = false">上传导入</el-button>
</el-upload>
</div>
</el-upload>
<el-button slot="reference">导入资质</el-button>
</el-popover> -->
</el-popover>
</div>
<el-table
v-loading="listLoading"
@ -90,9 +98,9 @@
<span v-html="showlight(scope.row.cnas)"></span>
</template>
</el-table-column>
<el-table-column label="其它资质">
<el-table-column label="其它资质" show-overflow-tooltip>
<template slot-scope="scope">
<span v-html="showlight(scope.row.other)"></span>
<span v-html="showlight(scope.row.other)" ></span>
</template>
</el-table-column>
<el-table-column label="主要服务">
@ -165,7 +173,7 @@
}
</style>
<script>
import { getQualificationList, getQualificationGroup, createQualification, updateQualification, deleteQualification } from "@/api/qualification";
import { getQualificationList, getQualificationGroup, createQualification, updateQualification, deleteQualification, importQualification } from "@/api/qualification";
import checkPermission from "@/utils/permission"
import { upUrl, upHeaders } from "@/api/file"
import Pagination from "@/components/Pagination" // secondary package based on el-pagination

View File

@ -0,0 +1,30 @@
# Generated by Django 3.0.7 on 2020-10-19 07:31
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('ability', '0010_cma_glzz'),
]
operations = [
migrations.CreateModel(
name='Qualificationother',
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='删除标记')),
('name', models.TextField(blank=True, null=True, verbose_name='其他资质')),
('description', models.TextField(blank=True, null=True, verbose_name='资质范围')),
('qualification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ability.Qualification')),
],
options={
'abstract': False,
},
),
]

View File

@ -41,4 +41,9 @@ class Qualification(BaseModel):
cma = models.TextField('cma资质', null=True, blank=True)
cnas = models.TextField('cnas资质', null=True, blank=True)
other = models.TextField('检验检测相关其它资质', null=True, blank=True)
service = models.TextField('主要检验检测服务', null=True, blank=True)
service = models.TextField('主要检验检测服务', null=True, blank=True)
class Qualificationother(BaseModel):
qualification = models.ForeignKey(Qualification, on_delete=models.CASCADE, related_name='other_qualification')
name = models.TextField('其他资质', null=True, blank=True)
description = models.TextField('资质范围', null=True, blank=True)

View File

@ -17,10 +17,23 @@ class CNASSerializer(serializers.ModelSerializer):
model = CNAS
fields = '__all__'
class QualificationotherSerializer(serializers.ModelSerializer):
class Meta:
model = Qualificationother
fields = '__all__'
class QualificationSerializer(serializers.ModelSerializer):
"""
资质能力序列化
"""
otherqualification = QualificationotherSerializer(source='other_qualification', many=True)
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.prefetch_related('other_qualification',)
return queryset
class Meta:
model = Qualification
fields = '__all__'
fields = '__all__'

View File

@ -118,6 +118,7 @@ class CMAViewSet(ModelViewSet):
return Response('不支持非xlsx格式', status = status.HTTP_400_BAD_REQUEST)
return Response(status = status.HTTP_200_OK)
from django.db.models.query import QuerySet
class QualificationViewSet(ModelViewSet):
"""
资质能力增删改查
@ -127,10 +128,24 @@ class QualificationViewSet(ModelViewSet):
queryset = Qualification.objects.all()
serializer_class = QualificationSerializer
search_fields = ['cma', 'cnas', 'sszx', 'other', 'service']
# ordering_fields = ['sszx']
ordering = 'sszx'
ordering_fields = ['sszx']
ordering = ['sszx']
filterset_fields = ['sszx']
def get_queryset(self):
assert self.queryset is not None, (
"'%s' should either include a `queryset` attribute, "
"or override the `get_queryset()` method."
% self.__class__.__name__
)
queryset = self.queryset
if isinstance(queryset, QuerySet):
# Ensure queryset is re-evaluated on each request.
queryset = queryset.all()
if hasattr(self.get_serializer_class(), 'setup_eager_loading'):
queryset = self.get_serializer_class().setup_eager_loading(queryset)
return queryset
@action(methods=['get'], detail=False,url_name='qualification_group_by', perms_map = {'*':'*'})
def group(self, request, pk=None):
"""
@ -146,6 +161,15 @@ class QualificationViewSet(ModelViewSet):
ret.append({'text':i[group_by]+'('+ str(i['count']) +')','value':i[group_by]})
return Response(ret)
@action(methods=['post'], detail=False, url_path='import', url_name='qualification_import', perms_map = {'post':'qualification_import'})
def qualification_import(self, request, pk=None):
filepath = request.data['path']
fullpath = settings.BASE_DIR + filepath
if fullpath.endswith('.xlsx'):
import_qualification(fullpath)
return Response(status = status.HTTP_200_OK)
else:
return Response('不支持非xlsx格式', status = status.HTTP_400_BAD_REQUEST)
class CNASViewSet(ModelViewSet):
"""
CNAS检测能力增删改查
@ -194,6 +218,34 @@ class CNASViewSet(ModelViewSet):
import_cnas(f.encode('cp437').decode('gbk'), os.path.join(root,f))
return Response(status = status.HTTP_200_OK)
def import_qualification(path):
wb = load_workbook(path)
sheet = wb.worksheets[0]
i = 3
max_row = sheet.max_row
while i<max_row+1:
sszx = sheet['b'+str(i)].value
cma = sheet['c'+str(i)].value
cnas = sheet['d'+str(i)].value
service = sheet['g'+str(i)].value
name = sheet['g'+str(i)].value
description = sheet['f'+str(i)].value
if sszx:
if Qualification.objects.filter(sszx=sszx).exists():
qualification = Qualification.objects.get(sszx=sszx)
else:
qualification = Qualification.objects.create(sszx=sszx)
qualification.cma = cma
qualification.cnas = cnas
qualification.service = service
qualification.save()
Qualificationother.objects.create(qualification=qualification, name=name, description=description)
else:
Qualificationother.objects.create(qualification=qualification, name=name, description=description)
i = i + 1
def import_cma(filename, path):
wb = load_workbook(path)
sheet = wb.worksheets[0]
@ -214,7 +266,6 @@ def import_cma(filename, path):
data['bz'] = sheet['j'+str(i)].value
data['sszx'] = sszx
data['type'] = 'center'
# print(data)
datalist.append(CMA(**data))
i = i + 1
CMA.objects.bulk_create(datalist)
@ -249,7 +300,6 @@ def import_cnas(filename, path):
data['bzbh'] = sheet['n'+str(i)].value
data['bztk'] = sheet['p'+str(i)].value
data['sszx'] = sszx
# print(data)
datalist.append(CNAS(**data))
i = i + 1
CNAS.objects.bulk_create(datalist)
@ -263,7 +313,6 @@ def import_cma2(filename, path):
CMA.objects.filter(sszx=sszx, type='sub').delete()
i = 3
max_row = sheet.max_row
print(max_row)
while i<max_row+1:
data = {}
if sheet['a'+str(i)].value: