This commit is contained in:
shijing 2022-06-01 15:59:24 +08:00
commit 7e44c1fa16
8 changed files with 1955 additions and 24 deletions

View File

@ -121,6 +121,11 @@ class QActionQualiCreateSerializer(serializers.ModelSerializer):
validated_data['action'] = 'quali:create'
if validated_data['value2']['type'] in ['CMA', 'CNAS']:
validated_data['value2']['name'] = validated_data['value2']['type']
value2 = validated_data['value2']
if value2['province']:
value2['province'] = value2['province'].id
if value2['city']:
value2['city'] = value2['city'].id
return super().create(validated_data)
class QActionQualiUpdateSerializer(serializers.ModelSerializer):

View File

@ -24,8 +24,9 @@ class QualiViewSet(ListModelMixin, GenericViewSet):
perms_map = {'get': '*'}
queryset = Quali.objects.all()
serializer_class = QualiListSerializer
search_fields = ['name', 'type', 'grade']
ordering = ['org__sort']
search_fields = ['name', 'type', 'grade', 'scope', 'level', 'description']
ordering = ['org', 'org__sort', 'create_time']
filterset_fields = ['org', 'type', 'grade', 'province', 'city', 'citys']
@action(methods=['get'], detail=False, perms_map = {'get':'*'})
def my(self, request, *args, **kwargs):
@ -162,7 +163,7 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel
return Response()
@action(methods=['post'], detail=False,
perms_map = {'post':'qaction_update'}, serializer_class=QActionQualiUpdateSerializer)
perms_map = {'post':'qaction_create'}, serializer_class=QActionQualiUpdateSerializer)
@transaction.atomic
def quali_update(self, request, *args, **kwargs):
"""

View File

@ -0,0 +1,23 @@
# Generated by Django 3.0.5 on 2022-05-30 07:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('system', '0020_auto_20220513_0926'),
]
operations = [
migrations.AlterField(
model_name='city',
name='id',
field=models.CharField(max_length=20, primary_key=True, serialize=False, verbose_name='id'),
),
migrations.AlterField(
model_name='province',
name='id',
field=models.CharField(max_length=20, primary_key=True, serialize=False, verbose_name='id'),
),
]

View File

@ -7,11 +7,11 @@ from utils.model import SoftModel, BaseModel
from simple_history.models import HistoricalRecords
class Province(models.Model):
id = models.PositiveIntegerField('id', primary_key=True)
id = models.CharField('id', primary_key=True, max_length=20)
name = models.CharField(max_length=20)
class City(models.Model):
id = models.PositiveIntegerField('id', primary_key=True)
id = models.CharField('id', primary_key=True, max_length=20)
name = models.CharField(max_length=20)
parent = models.ForeignKey(Province, on_delete=models.CASCADE)

1839
server/apps/system/pcity.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
from django.urls import path, include
from .views import CityViewSet, ProviceViewSet, UserViewSet, OrganizationViewSet, PermissionViewSet, RoleViewSet, PositionViewSet, TestView, DictTypeViewSet, DictViewSet, sendMsg
from .views import CityViewSet, ProviceViewSet, UserViewSet, OrganizationViewSet, PermissionViewSet, RoleViewSet, PositionViewSet, TestView, DictTypeViewSet, DictViewSet, InitAreaView, sendMsg
from rest_framework import routers
@ -17,5 +17,6 @@ router.register('city', CityViewSet, basename="city")
urlpatterns = [
path('', include(router.urls)),
path('sendmsg/', sendMsg.as_view()),
path('test/', TestView.as_view())
path('test/', TestView.as_view()),
path('initdata/', InitAreaView.as_view())
]

View File

@ -36,9 +36,12 @@ from .serializers import (CitySerializer, DictSerializer, DictTypeSerializer, Fi
PositionSerializer, ProvinceSerializer, RoleSerializer,
UserCreateSerializer, UserListSerializer,
UserModifySerializer)
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
import requests
import json
from rest_framework.exceptions import AuthenticationFailed
from django.db import transaction
logger = logging.getLogger('log')
# logger.info('请求成功! response_code:{}response_headers:{}response_body:{}'.format(response_code, response_headers, response_body[:251]))
# logger.error('请求出错:{}'.format(error))
@ -208,6 +211,12 @@ class OrganizationViewSet(PageOrNot,ModelViewSet):
filterset_fields = ['pid','name', 'type','can_supervision']
ordering_fields = ['sort']
ordering = ['sort', 'pk']
def filter_queryset(self, queryset):
queryset = super().filter_queryset(queryset)
if self.request.query_params.get('service_ok', 1):
queryset = queryset.exclude(service__isnull=True)
return queryset
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
def sub(self, request, pk=None):
@ -360,6 +369,40 @@ class UserViewSet(PageOrNot, ModelViewSet):
UserThird.objects.filter(user=request.user, type='wx_mp').delete()
return Response()
@action(methods=['post'], detail=False, perms_map={'post':'user_daoru'})
@transaction.atomic
def daoru(self, request, pk=None):
from openpyxl import load_workbook
wb = load_workbook('./media/default/users.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
i = 3
role1 = Role.objects.get(name='能力查询')
role2 = Role.objects.get(name='资质能力报送')
role3 = Role.objects.get(name='资料分享和视频培训')
while sheet['b'+str(i)].value:
name = sheet['b'+str(i)].value
email = sheet['e'+str(i)].value
if not User.objects.filter(username=email).exists():
dept = Organization.objects.get(name=sheet['j'+str(i)].value)
user = User.objects.create(name=name,
username=email,
password=make_password(''.join(random.sample(string.ascii_letters + string.digits, 8))),
dept=dept)
if sheet['f'+str(i)].value:
user.roles.add(role1)
if sheet['g'+str(i)].value:
user.roles.add(role2)
if sheet['h'+str(i)].value:
user.roles.add(role3)
print(str(i)+name+'已导入')
else:
print(str(i)+name+'已存在')
i = i + 1
return Response()
class WXMPlogin(APIView):
authentication_classes=[]
@ -388,15 +431,24 @@ class WXMPlogin(APIView):
class ProviceViewSet(PageOrNot, ListModelMixin, GenericViewSet):
queryset = Province.objects.all()
serializer_class = ProvinceSerializer
search_fields = ['name']
ordering = 'id'
@method_decorator(cache_page(60*60*2))
def list(self, request, *args, **kwargs):
return super().list(request, *args, **kwargs)
class CityViewSet(PageOrNot, ListModelMixin, GenericViewSet):
queryset = City.objects.all()
serializer_class = CitySerializer
filterset_fields = ['parent']
search_fields = ['name']
ordeing = 'id'
@method_decorator(cache_page(60*60*2))
def list(self, request, *args, **kwargs):
return super().list(request, *args, **kwargs)
class FileViewSet(ModelViewSet):
"""
@ -452,5 +504,15 @@ def mediaauth(request):
return HttpResponseForbidden()
class InitAreaView(APIView):
def get(self, request):
from django.db import transaction
with transaction.atomic():
from apps.system.pcity import ps, cs
for i in ps:
Province.objects.create(id=i['code'], name=i['name'])
for i in cs:
City.objects.create(id=i['code'], name=i['name'], parent=Province.objects.get(id=i['provinceCode']))
return Response()

View File

@ -1,21 +1,21 @@
from .settings import *
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'cma',
'USER': 'postgres',
'PASSWORD': 'zctest1234',
'HOST': '47.95.0.242',
'PORT': '5432',
}
# 'default': {
# 'ENGINE': 'django.db.backends.postgresql',
# 'NAME': 'cma',
# 'USER': 'cma',
# 'PASSWORD': 'cma123',
# # 'HOST': '172.16.80.102',
# 'HOST': '1.203.161.102',
# 'PORT': '5432',
# }
# 'default': {
# 'ENGINE': 'django.db.backends.postgresql',
# 'NAME': 'cma',
# 'USER': 'postgres',
# 'PASSWORD': 'zctest1234',
# 'HOST': '47.95.0.242',
# 'PORT': '5432',
# }
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'cma',
'USER': 'cma',
'PASSWORD': 'cma123',
'HOST': '172.16.80.102',
# 'HOST': '1.203.161.102',
'PORT': '5432',
}
}