cma_search/server/apps/ability/views.py

963 lines
38 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.shortcuts import render
from rest_framework.mixins import ListModelMixin
from rest_framework.permissions import IsAuthenticated
from rest_framework.viewsets import GenericViewSet, ModelViewSet
from .models import *
from .serializers import *
from rest_framework.decorators import action
from django.conf import settings
from rest_framework import status
from rest_framework.response import Response
import zipfile
import rarfile
from apps.system.models import Organization
from openpyxl import Workbook, load_workbook
from django.db.models import Count
from utils.pagination import PageOrNot
from rest_framework.views import APIView
from apps.supervision.models import Content, Record
from apps.supervision.serializers import ContentSerializer, RecordCreateSerializer, RecordSerializer
from apps.system.mixins import CreateUpdateCustomMixin
from utils.queryset import get_child_queryset2
from django.utils import timezone
from apps.supervision.permission import RecordPermission
# Create your views here.
import json
class RecordMixin():
def perform_authentication(self, request):
"""
Perform authentication on the incoming request.
Note that if you override this and simply 'pass', then authentication
will instead be performed lazily, the first time either
`request.user` or `request.auth` is accessed.
"""
if request.user and request.method == 'GET' and request.user.username != 'admin':
QueryRecord.objects.create(user=request.user,path=request.path,ip=request.META.get('HTTP_X_FORWARDED_FOR'),method=\
request.method,search=request.query_params.get('search',None),query=request.query_params)
class AbilityContentViewSet(CreateUpdateCustomMixin, ModelViewSet):
"""
资质能力报送清单:增删改查
"""
perms_map = {'get': '*', 'post': 'content',
'put': 'content', 'delete': 'content'}
queryset = Content.objects.filter(cate=2)
serializer_class = ContentSerializer
pagination_class = None
search_fields = ['name', 'desc']
filterset_fields = ['type','cate']
ordering = ['sortnum', 'create_time']
def perform_create(self, serializer):
if hasattr(self.queryset.model, 'belong_dept'):
serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept, cate=2)
else:
serializer.save(create_by = self.request.user, cate=2)
def perform_update(self, serializer):
serializer.save(update_by = self.request.user)
class AbilityRecordViewSet(PageOrNot, CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post': '*',
'put': '*', 'delete': '*'}
queryset = Record.objects.filter(content__cate=2)
serializer_class = RecordSerializer
search_fields = ['content__name']
ordering_fields = ['content__sortnum', 'belong_dept__sort']
ordering = ['-task', 'content__sortnum', '-create_time']
filterset_fields = ['content','content__cate', 'belong_dept', 'state']
def get_queryset(self):
queryset = self.queryset
if hasattr(self.get_serializer_class(), 'setup_eager_loading'):
queryset = self.get_serializer_class().setup_eager_loading(queryset)
if self.request.user.is_superuser:
pass
if hasattr(queryset.model, 'belong_dept'):
user = self.request.user
roles = user.roles
data_range = roles.values_list('datas', flat=True)
if '全部' in data_range:
pass
elif '本级及以下' in data_range:
belong_depts = get_child_queryset2(user.dept)
queryset = queryset.filter(belong_dept__in = belong_depts)
elif '本级' in data_range:
queryset = queryset.filter(belong_dept = user.dept)
return queryset
def filter_queryset(self, queryset):
if not self.request.query_params.get('pageoff', None):
queryset = queryset.exclude(state='待发布')
return super().filter_queryset(queryset)
def get_serializer_class(self):
if self.action == 'create':
return RecordCreateSerializer
return super().get_serializer_class()
@action(methods=['put'], detail=True, perms_map = {'put':'record_up'})
def up(self, request, *args, **kwargs):
"""
报送
"""
obj = self.get_object()
if obj.state in ['待整改','待报送', '已报送']:
obj.files.clear()
obj.files.add(*request.data['files'])
obj.noteb = request.data['noteb']
obj.state = '已报送'
obj.up_user = request.user
obj.up_date = timezone.now()
obj.save()
return Response(status=status.HTTP_200_OK)
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
def create(self, request, *args, **kwargs):
"""
主动报送
"""
data = request.data
if data.get('files', None):
serializer = RecordCreateSerializer(data=data)
serializer.is_valid(raise_exception=True)
content = Content.objects.get(pk=data['content'])
if content.cate==2:
sdata = {'belong_dept':request.user.dept,
'is_self':True,
'content_name':content.name,
'content_desc':content.desc,
'state':'已报送',
'up_user':request.user,
'up_date':timezone.now()}
serializer.save(**sdata)
return Response(status=status.HTTP_201_CREATED)
return Response('该材料不是资质能力!', status=status.HTTP_400_BAD_REQUEST)
return Response('未上传文件', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=True, perms_map = {'put':'record_reject'}, permission_classes=[RecordPermission])
def reject(self, request, *args, **kwargs):
"""
驳回
"""
obj = self.get_object()
if obj.state == '已报送':
if request.data.get('opinion', None):
obj.opinion = request.data['opinion']
obj.state = '待整改'
obj.save()
return Response(status=status.HTTP_200_OK)
else:
return Response('请填写修改意见', status=status.HTTP_400_BAD_REQUEST)
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=True, perms_map = {'put':'record_confirm'})
def confirm(self, request, *args, **kwargs):
"""
确认
"""
obj = self.get_object()
if obj.state in ['已报送', '待报送']:
obj.state = '已确认'
obj.save()
return Response(status=status.HTTP_200_OK)
return Response('记录状态错误', status=status.HTTP_400_BAD_REQUEST)
class QueryRecordListViewSet(ListModelMixin, GenericViewSet):
perms_map = {'get': 'queryrecord_view'}
queryset = QueryRecord.objects.all()
serializer_class = QueryRecordSerializer
search_fields = ['user__name', 'user__dept__name']
ordering = ['-create_time']
class CMAViewSet(RecordMixin, ModelViewSet):
"""
CMA检测能力增删改查
"""
perms_map = {'get': 'cma_view', 'post': 'cma_create',
'put': 'cma_update', 'delete': 'cma_delete'}
queryset = CMA.objects.all()
serializer_class = CMASerializer
search_fields = ['bzbh', 'bzmc', 'sszx', 'xmmc', 'glzz', 'dlmc']
filterset_fields = ['sszx', 'type', 'glzz']
ordering_fields = ['sszx', 'dlxh', 'lbxh', 'xmxh']
ordering = ['create_time', 'xmxh']
@action(methods=['get'], detail=False,url_name='cma_group_by', perms_map = {'*':'*'})
def group(self, request, pk=None):
"""
聚合查询列
"""
queryset = self.filter_queryset(self.get_queryset())
ret = []
if request.query_params.get('group_by', None):
group_by = request.query_params.get('group_by')
group_by_data = list(queryset.values(group_by).annotate(count=Count(group_by)).order_by(group_by))
for i in group_by_data:
if i[group_by] and i['count']:
ret.append({'text':i[group_by]+'('+ str(i['count']) +')','value':i[group_by]})
return Response(ret)
@action(methods=['post'], detail=False, url_path='deletes', url_name='cma_deletes', perms_map = {'post':'cma_deletes'})
def deletes(self, request):
array = request.data['ids']
CMA.objects.filter(pk__in=array).delete()
return Response(status = status.HTTP_200_OK)
@action(methods=['post'], detail=False, url_path='import', url_name='cma_import', perms_map = {'post':'cma_import'})
def cma_import(self, request, pk=None):
"""
导入能力
"""
filepath = request.data['path']
fullpath = settings.BASE_DIR + filepath
import os
if fullpath.endswith('.rar'):
rar = rarfile.RarFile(fullpath)
fulldir = fullpath.replace('.rar','')
os.mkdir(fulldir)
os.chdir(fulldir)
rar.extractall()
rar.close()
CMA.objects.filter(type='center').delete()
for root, dirs, files in os.walk(fulldir):
for f in files:
if f.endswith('.xlsx'):
import_cma(f, os.path.join(root,f))
else:
return Response('不支持非xlsx格式', status = status.HTTP_400_BAD_REQUEST)
elif fullpath.endswith('.zip'):
fulldir = fullpath.replace('.zip','')
os.mkdir(fulldir)
os.chdir(fulldir)
CMA.objects.filter(type='center').delete()
with zipfile.ZipFile(fullpath,'r') as zzz:
zzz.extractall(fulldir)
for root, dirs, files in os.walk(fulldir):
for f in files:
if f.endswith('.xlsx'):
import_cma(f.encode('cp437').decode('gbk'), os.path.join(root,f))
else:
return Response('不支持非xlsx格式', status = status.HTTP_400_BAD_REQUEST)
return Response(status = status.HTTP_200_OK)
@action(methods=['post'], detail=False, url_path='import2', url_name='cma_import2', perms_map = {'post':'cma_import2'})
def cma_import2(self, request, pk=None):
"""
导入能力2
"""
filepath = request.data['path']
fullpath = settings.BASE_DIR + filepath
import os
if fullpath.endswith('.rar'):
rar = rarfile.RarFile(fullpath)
fulldir = fullpath.replace('.rar','')
os.mkdir(fulldir)
os.chdir(fulldir)
rar.extractall()
rar.close()
# CMA.objects.filter(type='sub').delete()
for root, dirs, files in os.walk(fulldir):
for f in files:
if f.endswith('.xlsx'):
import_cma2(f, os.path.join(root,f))
else:
return Response('不支持非xlsx格式', status = status.HTTP_400_BAD_REQUEST)
elif fullpath.endswith('.zip'):
fulldir = fullpath.replace('.zip','')
os.mkdir(fulldir)
os.chdir(fulldir)
# CMA.objects.filter(type='sub').delete()
with zipfile.ZipFile(fullpath,'r') as zzz:
zzz.extractall(fulldir)
for root, dirs, files in os.walk(fulldir):
for f in files:
if f.endswith('.xlsx'):
import_cma2(f.encode('cp437').decode('gbk'), os.path.join(root,f))
else:
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(RecordMixin, ModelViewSet):
"""
资质能力:增删改查
"""
perms_map = {'get': 'qualification_view', 'post': 'qualificaiton_create',
'put': 'qualification_update', 'delete': 'qualification_delete'}
queryset = Qualification.objects.all()
serializer_class = QualificationSerializer
search_fields = ['cma', 'cnas', 'sszx', 'other', 'service']
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):
"""
聚合查询列
"""
queryset = self.filter_queryset(self.get_queryset())
ret = []
if request.query_params.get('group_by', None):
group_by = request.query_params.get('group_by')
group_by_data = list(queryset.values(group_by).annotate(count=Count(group_by)).order_by(group_by))
for i in group_by_data:
if i[group_by] and i['count']:
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 QualificationotherViewSet(RecordMixin, PageOrNot,ModelViewSet):
"""
资质能力:增删改查
"""
perms_map = {'get': 'qualification_view', 'post': 'qualificationother_create',
'put': 'qualificationother_update', 'delete': 'qualificationother_delete'}
queryset = Qualificationother.objects.all()
serializer_class = QualificationotherSerializer
search_fields = ['qualification__cma', 'name','description','qualification__cnas', 'qualification__ssbm__id', 'qualification__service']
filterset_fields = ['qualification__ssbm__name']
ordering_fields = ['qualification__ssbm__name']
ordering = ['create_time']
@action(methods=['post'], detail=False, url_path='deletes', url_name='qualificationother_deletes', perms_map = {'post':'qualificationother_deletes'})
def deletes(self, request):
array = request.data['ids']
Qualificationother.objects.filter(pk__in=array).delete()
return Response(status = status.HTTP_200_OK)
@action(methods=['get'], detail=False,url_name='qualification_group_by', perms_map = {'*':'*'})
def group(self, request, pk=None):
"""
聚合查询列
"""
queryset = self.filter_queryset(self.get_queryset())
ret = []
if request.query_params.get('group_by', None):
group_by = request.query_params.get('group_by')
group_by_data = list(queryset.values(group_by).annotate(count=Count(group_by)).order_by('qualification__ssbm__sort', group_by))
for i in group_by_data:
if i[group_by] and i['count']:
ret.append({'text':i[group_by]+'('+ str(i['count']) +')','value':i[group_by]})
return Response(ret)
class InspectionViewSet(RecordMixin, ModelViewSet):
"""
检验能力:增删改查
"""
perms_map = {'get': 'inspection_view', 'post': 'inspection_create',
'put': 'inspection_update', 'delete': 'inspection_delete'}
queryset = Inspection.objects.all()
serializer_class = InspectionSerializer
search_fields = ['dlmc', 'jydx', 'dxxh','jyxmmc','jybz','sszx','sm']
ordering_fields = ['dlmc']
ordering = ['create_time', 'jyxmxh']
filterset_fields = ['sszx']
@action(methods=['post'], detail=False, url_path='deletes', url_name='inspection_deletes', perms_map = {'post':'inspection_deletes'})
def deletes(self, request):
array = request.data['ids']
Inspection.objects.filter(pk__in=array).delete()
return Response(status = status.HTTP_200_OK)
@action(methods=['get'], detail=False,url_name='inspection_group_by', perms_map = {'*':'*'})
def group(self, request, pk=None):
"""
聚合查询列
"""
queryset = self.filter_queryset(self.get_queryset())
ret = []
if request.query_params.get('group_by', None):
group_by = request.query_params.get('group_by')
group_by_data = list(queryset.values(group_by).annotate(count=Count(group_by)).order_by(group_by))
for i in group_by_data:
if i[group_by] and i['count']:
ret.append({'text':i[group_by]+'('+ str(i['count']) +')','value':i[group_by]})
return Response(ret)
@action(methods=['post'], detail=False, url_path='inspection2', url_name='inspection_inspection2', perms_map = {'post':'inspection_inspection2'})
def inspection_import2(self, request, pk=None):
"""
导入能力2
"""
filepath = request.data['path']
fullpath = settings.BASE_DIR + filepath
import os
if fullpath.endswith('.rar'):
rar = rarfile.RarFile(fullpath)
fulldir = fullpath.replace('.rar','')
os.mkdir(fulldir)
os.chdir(fulldir)
rar.extractall()
rar.close()
# CMA.objects.filter(type='sub').delete()
for root, dirs, files in os.walk(fulldir):
for f in files:
if f.endswith('.xlsx'):
import_inspection(f, os.path.join(root,f))
else:
return Response('不支持非xlsx格式', status = status.HTTP_400_BAD_REQUEST)
elif fullpath.endswith('.zip'):
fulldir = fullpath.replace('.zip','')
os.mkdir(fulldir)
os.chdir(fulldir)
# CMA.objects.filter(type='sub').delete()
with zipfile.ZipFile(fullpath,'r') as zzz:
zzz.extractall(fulldir)
for root, dirs, files in os.walk(fulldir):
for f in files:
if f.endswith('.xlsx'):
import_inspection(f.encode('cp437').decode('gbk'), os.path.join(root,f))
else:
return Response('不支持非xlsx格式', status = status.HTTP_400_BAD_REQUEST)
return Response(status = status.HTTP_200_OK)
class CNASViewSet(RecordMixin, ModelViewSet):
"""
CNAS检测能力增删改查
"""
perms_map = {'get': 'cma_view', 'post': 'cnas_create',
'put': 'cnas_update', 'delete': 'cnas_delete'}
queryset = CNAS.objects.all()
serializer_class = CNASSerializer
search_fields = ['bzbh', 'bzmc', 'sszx', 'xmmc', 'bztk']
ordering_fields = ['bzmc']
filterset_fields = ['sszx']
ordering = ['create_time']
@action(methods=['get'], detail=False,url_name='cnas_group_by', perms_map = {'*':'*'})
def group(self, request, pk=None):
"""
聚合查询列
"""
queryset = self.filter_queryset(self.get_queryset())
ret = []
if request.query_params.get('group_by', None):
group_by = request.query_params.get('group_by')
group_by_data = list(queryset.values(group_by).annotate(count=Count(group_by)).order_by(group_by))
for i in group_by_data:
if i[group_by] and i['count']:
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='cnas_import', perms_map = {'post':'cnas_import'})
def cnas_import(self, request, pk=None):
"""
导入能力
"""
filepath = request.data['path']
fullpath = settings.BASE_DIR + filepath
import os
if fullpath.endswith('.rar'):
rar = rarfile.RarFile(fullpath)
fulldir = fullpath.replace('.rar','')
os.mkdir(fulldir)
os.chdir(fulldir)
rar.extractall()
rar.close()
CNAS.objects.all().delete()
for root, dirs, files in os.walk(fulldir):
for f in files:
if f.endswith('.xls'):
return Response('不支持旧xls格式', status = status.HTTP_400_BAD_REQUEST)
import_cnas(f, os.path.join(root,f))
elif fullpath.endswith('.zip'):
fulldir = fullpath.replace('.zip','')
os.mkdir(fulldir)
os.chdir(fulldir)
CNAS.objects.all().delete()
with zipfile.ZipFile(fullpath,'r') as zzz:
zzz.extractall(fulldir)
for root, dirs, files in os.walk(fulldir):
for f in files:
import_cnas(f.encode('cp437').decode('gbk'), os.path.join(root,f))
return Response(status = status.HTTP_200_OK)
class CorrectViewSet(RecordMixin, ModelViewSet):
"""
校验能力:增删改查
"""
perms_map = {'get': 'correct_view', 'post': 'correct_create',
'put': 'correct_update', 'delete': 'correct_delete'}
queryset = Correct.objects.all()
serializer_class = CorrectSerializer
search_fields = ['dlmc', 'lbmc', 'bclmc','jzgc']
ordering_fields = ['dlmc']
ordering = ['create_time', 'dlmc']
filterset_fields = ['ssbm', 'ssgs']
@action(methods=['post'], detail=False, perms_map = {'post':'correct_delete'})
def deletes(self, request):
array = request.data['ids']
Correct.objects.filter(pk__in=array).delete()
return Response(status = status.HTTP_200_OK)
@action(methods=['get'], detail=False, perms_map = {'*':'*'})
def group(self, request, pk=None):
"""
聚合查询列
"""
queryset = self.filter_queryset(self.get_queryset())
ret = []
if request.query_params.get('group_by', None):
group_by = request.query_params.get('group_by')
group_by_data = list(queryset.values(group_by).annotate(count=Count(group_by)).order_by(group_by))
for i in group_by_data:
if i[group_by] and i['count']:
ret.append({'text':i[group_by]+'('+ str(i['count']) +')','value':i[group_by]})
return Response(ret)
@action(methods=['post'], detail=False, url_path="import")
def correct_import(self, request, pk=None):
"""
导入校验能力
"""
filepath = request.data['path']
fullpath = settings.BASE_DIR + filepath
if fullpath.endswith('.xlsx'):
ret = import_correct(fullpath)
if ret[0]:
return Response()
return Response(ret[1], status=status.HTTP_400_BAD_REQUEST)
else:
return Response('不支持非xlsx格式', status = status.HTTP_400_BAD_REQUEST)
def import_qualification(path):
wb = load_workbook(path)
sheet = wb.worksheets[0]
i = 3
max_row = sheet.max_row
obj = {}
Qualificationother.objects.all().delete()
Qualification.objects.all().delete()
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['e'+str(i)].value
description = sheet['f'+str(i)].value
if sszx:
if Organization.objects.filter(name=sszx).exists():
ssbm=Organization.objects.get(name=sszx)
if Qualification.objects.filter(ssbm=ssbm).exists():
qualification = Qualification.objects.get(ssbm=ssbm)
Qualificationother.objects.create(qualification=qualification, name=name, description=description)
else:
qualification = Qualification.objects.create(ssbm=ssbm)
qualification.cma = cma
qualification.cnas = cnas
qualification.service = service
qualification.save()
obj = qualification
Qualificationother.objects.create(qualification=qualification, name=name, description=description)
else:
Qualificationother.objects.create(qualification=obj, name=name, description=description)
i = i + 1
def import_cma(filename, path):
wb = load_workbook(path)
sheet = wb.worksheets[0]
datalist = []
sszx = filename.replace('.xlsx','').replace('14检验检测能力申请表-','')
i = 4
while sheet['b'+str(i)].value:
data = {}
data['dlxh'] = sheet['a'+str(i)].value
data['dlmc'] = sheet['b'+str(i)].value
data['lbxh'] = sheet['c'+str(i)].value
data['lbmc'] = sheet['d'+str(i)].value
data['xmxh'] = sheet['e'+str(i)].value
data['xmmc'] = sheet['f'+str(i)].value
data['bzmc'] = sheet['g'+str(i)].value
data['bzbh'] = sheet['h'+str(i)].value
data['xzfw'] = sheet['i'+str(i)].value
data['bz'] = sheet['j'+str(i)].value
data['sszx'] = sszx
data['type'] = 'center'
datalist.append(CMA(**data))
i = i + 1
CMA.objects.bulk_create(datalist)
import xlrd
def import_cnas(filename, path):
sheet = xlrd.open_workbook(path).sheet_by_name('检测能力范围')
datalist = []
sszx = filename.replace('.xlsx','').replace('.xls', '').replace('检测能力范围(含能源之星)-','')
i = 2
lbmc = ''
xmmc = ''
while i < sheet.nrows:
data = {}
data_list = sheet.row_values(i)
if data_list[1]:
lbmc = data_list[1]
if data_list[6]:
xmmc = data_list[6]
data['lbmc'] = lbmc
data['xmmc'] = xmmc
data['bzmc'] = data_list[11]
data['bzbh'] = data_list[13]
data['bztk'] = data_list[15]
data['sszx'] = sszx
datalist.append(CNAS(**data))
i = i + 1
CNAS.objects.bulk_create(datalist)
def import_cma2(filename, path):
wb = load_workbook(path,data_only=True)
sheet = wb.worksheets[0]
datalist = []
sszx = filename.split('-')[0]
if CMA.objects.filter(sszx=sszx, type='sub').exists():
CMA.objects.filter(sszx=sszx, type='sub').delete()
i = 3
max_row = sheet.max_row
defaultv = {}
while i<max_row+1:
data = {}
if sheet['a'+str(i)].value:
data['dlxh'] = sheet['a'+str(i)].value
defaultv['dlxh'] = data['dlxh']
else:
data['dlxh'] = defaultv['dlxh']
if sheet['b'+str(i)].value:
data['dlmc'] = sheet['b'+str(i)].value
defaultv['dlmc'] = data['dlmc']
else:
data['dlmc'] = defaultv['dlmc']
if sheet['c'+str(i)].value:
data['lbxh'] = sheet['c'+str(i)].value
defaultv['lbxh'] = data['lbxh']
else:
data['lbxh'] = defaultv['lbxh']
if sheet['d'+str(i)].value:
data['lbmc'] = sheet['d'+str(i)].value
defaultv['lbmc'] = data['lbmc']
else:
data['lbmc'] = defaultv['lbmc']
if sheet['e'+str(i)].value:
data['xmxh'] = sheet['e'+str(i)].value
defaultv['xmxh'] = data['xmxh']
else:
data['xmxh'] = defaultv.get('xmxh', None)
if sheet['f'+str(i)].value:
data['xmmc'] = sheet['f'+str(i)].value
defaultv['xmmc'] = data['xmmc']
else:
data['xmmc'] = defaultv['xmmc']
if sheet['g'+str(i)].value:
data['bzmc'] = sheet['g'+str(i)].value
defaultv['bzmc'] = data['bzmc']
else:
data['bzmc'] = defaultv['bzmc']
if sheet['h'+str(i)].value:
data['bzbh'] = sheet['h'+str(i)].value
defaultv['bzbh'] = data['bzbh']
else:
data['bzbh'] = defaultv['bzbh']
data['xzfw'] = sheet['i'+str(i)].value if (sheet['i'+str(i)].value and sheet['i'+str(i)].value !='') else None
data['bz'] = sheet['j'+str(i)].value if (sheet['j'+str(i)].value and sheet['j'+str(i)].value !='') else None
data['glzz'] = sheet['k'+str(i)].value if (sheet['k'+str(i)].value and sheet['k'+str(i)].value !='') else None
data['sszx'] = sszx
data['type'] = 'sub'
datalist.append(CMA(**data))
i = i + 1
CMA.objects.bulk_create(datalist)
def import_inspection(filename, path):
wb = load_workbook(path,data_only=True)
sheet = wb.worksheets[0]
datalist = []
sszx = filename.split('-')[0]
if Inspection.objects.filter(sszx=sszx).exists():
Inspection.objects.filter(sszx=sszx).delete()
i = 3
max_row = sheet.max_row
defaultv = {}
while i<max_row+1:
data = {}
if sheet['a'+str(i)].value:
data['dlxh'] = sheet['a'+str(i)].value
defaultv['dlxh'] = data['dlxh']
else:
data['dlxh'] = defaultv['dlxh']
if sheet['b'+str(i)].value:
data['dlmc'] = sheet['b'+str(i)].value
defaultv['dlmc'] = data['dlmc']
else:
data['dlmc'] = defaultv['dlmc']
if sheet['c'+str(i)].value:
data['dxxh'] = sheet['c'+str(i)].value
defaultv['dxxh'] = data['dxxh']
else:
data['dxxh'] = defaultv['dxxh']
if sheet['d'+str(i)].value:
data['jydx'] = sheet['d'+str(i)].value
defaultv['jydx'] = data['jydx']
else:
data['jydx'] = defaultv['jydx']
if sheet['e'+str(i)].value:
data['jyxmxh'] = sheet['e'+str(i)].value
elif sheet['e3'].value: # 该表存在项目序号
m = i - 1
while True:
if sheet['e'+str(m)].value:
data['jyxmxh'] = sheet['e'+str(m)].value
break
m = m - 1
else: #该表没有项目序号,自己定
pass
if sheet['f'+str(i)].value:
data['jyxmmc'] = sheet['f'+str(i)].value
else:
m = i - 1
while True:
if sheet['f'+str(m)].value:
data['jyxmmc'] = sheet['f'+str(m)].value
break
m = m - 1
if sheet['g'+str(i)].value:
data['jybz'] = sheet['g'+str(i)].value
elif sheet['g3'].value:
m = i - 1
while True:
if sheet['g'+str(m)].value:
data['jybz'] = sheet['g'+str(m)].value
break
m = m - 1
if sheet['h'+str(i)].value:
data['sm'] = sheet['h'+str(i)].value
elif sheet['h3'].value:
m = i - 1
while True:
if sheet['h'+str(m)].value:
data['sm'] = sheet['h'+str(m)].value
break
m = m - 1
if sheet['i'+str(i)].value:
data['sxrq'] = sheet['i'+str(i)].value
elif sheet['i3'].value:
m = i - 1
while True:
if sheet['i'+str(m)].value:
data['sxrq'] = sheet['i'+str(m)].value
break
m = m - 1
data['sszx'] = sszx
datalist.append(Inspection(**data))
i = i + 1
Inspection.objects.bulk_create(datalist)
def import_correct(path):
wb = load_workbook(path,data_only=True)
sheet = wb.worksheets[0]
datalist = []
ssgs = sheet['k3'].value
try:
ssbm = Organization.objects.get(name=ssgs)
except:
return False , ssgs+'不存在'
if Correct.objects.filter(ssbm=ssbm).exists():
Correct.objects.filter(ssbm=ssbm).delete()
i = 3
max_row = sheet.max_row
defaultv = {}
while i<max_row+1:
data = {}
if sheet['a'+str(i)].value:
data['dlxh'] = sheet['a'+str(i)].value
defaultv['dlxh'] = data['dlxh']
else:
data['dlxh'] = defaultv['dlxh']
if sheet['b'+str(i)].value:
data['dlmc'] = sheet['b'+str(i)].value
defaultv['dlmc'] = data['dlmc']
else:
data['dlmc'] = defaultv['dlmc']
if sheet['c'+str(i)].value:
data['lbxh'] = sheet['c'+str(i)].value
defaultv['lbxh'] = data['lbxh']
else:
data['lbxh'] = defaultv['lbxh']
if sheet['d'+str(i)].value:
data['lbmc'] = sheet['d'+str(i)].value
defaultv['lbmc'] = data['lbmc']
else:
data['lbmc'] = defaultv['lbmc']
if sheet['e'+str(i)].value:
data['bclxh'] = sheet['e'+str(i)].value
defaultv['bclxh'] = data['bclxh']
else:
data['bclxh'] = defaultv['bclxh'] if 'bclxh' in defaultv else None
if sheet['f'+str(i)].value:
data['bclmc'] = sheet['f'+str(i)].value
defaultv['bclmc'] = data['bclmc']
else:
data['bclmc'] = defaultv['bclmc']
if sheet['g'+str(i)].value:
data['jzgc'] = sheet['g'+str(i)].value
defaultv['jzgc'] = data['jzgc']
else:
data['jzgc'] = defaultv['jzgc']
if sheet['h'+str(i)].value:
data['clfw'] = sheet['h'+str(i)].value
defaultv['clfw'] = data['clfw']
else:
data['clfw'] = defaultv['clfw']
data['zqddj'] = sheet['i'+str(i)].value if (sheet['i'+str(i)].value and sheet['i'+str(i)].value !='') else None
data['note'] = sheet['j'+str(i)].value if (sheet['j'+str(i)].value and sheet['j'+str(i)].value !='') else None
data['ssgs'] = ssgs
data['ssbm'] = ssbm
datalist.append(Correct(**data))
i = i + 1
Correct.objects.bulk_create(datalist)
return True, ''
from django.db.models.functions import Cast
def merge_cnas(request):
for i in CNAS.objects.all():
objs = Ability.objects.filter(lbmc=i.lbmc,xmmc=i.xmmc, bzbh=i.bzbh, bztk=i.bztk, bzmc=i.bzmc)
if objs.exists():
obj = objs[0]
obj.cnas_ok = True
if obj.cnas:
obj.cnas = obj.cnas + ',' + i.sszx
obj.save()
else:
obj.cnas = i.sszx
obj.save()
print('已修改--'+obj.xmmc+ '-' + obj.cnas)
else:
obj = Ability()
obj.lbmc = i.lbmc
obj.xmmc = i.xmmc
obj.bzmc = i.bzmc
obj.bzbh = i.bzbh
obj.bztk = i.bztk
obj.cnas = i.sszx
obj.cnas_ok = True
obj.save()
print('已添加--'+obj.xmmc+obj.bzmc)
return Response({})
def merge_cma(request):
for i in CMA.objects.filter(type='center'):
bztk = i.bzbh.split(' ')[-1]
bzbh = i.bzbh.rstrip(bztk).strip()
xmxh = i.xmxh.strip()
if len(bzbh)<8:
bzbh = i.bzbh
bztk = ''
objs = Ability.objects.filter(lbmc=i.lbmc, xmmc=i.xmmc, bzbh = bzbh, bztk=bztk, xmxh=xmxh, bzmc = i.bzmc)
if objs.exists():
obj = objs[0]
obj.cma = obj.cma + ',' + i.sszx
obj.save()
print('已修改--'+obj.xmmc+ '-' + obj.cma)
else:
obj = Ability()
obj.dlxh = i.dlxh
obj.dlmc = i.dlmc
obj.lbxh = i.lbxh
obj.lbmc = i.lbmc
obj.xmxh = i.xmxh
obj.xmmc = i.xmmc
obj.bzmc = i.bzmc
obj.bzbh = bzbh
obj.bztk = bztk
obj.xzfw = i.xzfw
obj.bz = i.bz
obj.cma = i.sszx
obj.cma_ok = True
obj.save()
print('已添加--'+obj.xmmc+obj.bzmc)
return Response({})
def correct_ability(request):
zxdict = {
"测试中心":"B",
"玻璃中心":"E",
"腐蚀中心":"P",
"光伏中心":"L",
"耐火中心":"Q",
"石材中心":"R",
"水泥中心":"D",
"质检中心":"C"
}
placedict = {
"玻璃中心-管庄": "E",
"玻璃中心-密云": "E",
"玻璃中心-永顺": "E",
"测试中心-管庄": "B",
"测试中心-光华路": "B",
"测试中心-国检三层": "B",
"测试中心-密云": "B",
"测试中心-顺义种植园": "B",
"测试中心-宋庄": "B",
"测试中心-通州种植园": "B",
"测试中心-永顺": "B",
"腐蚀中心": "P",
"光伏中心-管庄": "L",
"光伏中心-密云": "L",
"耐火中心": "Q",
"石材中心": "R",
"水泥中心": "D",
"质检中心-管庄": "C",
"质检中心-光华路": "C",
"质检中心-国检三层": "c",
"质检中心-密云": "C",
"质检中心-顺义种植园": "C",
"质检中心-宋庄": "C",
"质检中心-通州种植园": "C",
"质检中心-永顺": "C"
}
for i in Ability.objects.all():
# i.cma_o = i.cma
i.cma = i.cma_o
i.cma_oplace = i.cma_o
for key in zxdict:
if key in i.cma_o:
i.cma = i.cma.replace(key, zxdict[key])
for key in placedict:
if key in i.cma_o:
i.cma_oplace = i.cma_oplace.replace(key, placedict[key])
i.save()
print('已修改' + i.cma)
def correct_cma(request):
for i in CMA.objects.all():
i.sszx = i.sszx.replace('14检验检测能力申请表-','')
i.save()
return Response()