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' validated_data['action'] = 'quali:create'
if validated_data['value2']['type'] in ['CMA', 'CNAS']: if validated_data['value2']['type'] in ['CMA', 'CNAS']:
validated_data['value2']['name'] = validated_data['value2']['type'] 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) return super().create(validated_data)
class QActionQualiUpdateSerializer(serializers.ModelSerializer): class QActionQualiUpdateSerializer(serializers.ModelSerializer):

View File

@ -24,8 +24,9 @@ class QualiViewSet(ListModelMixin, GenericViewSet):
perms_map = {'get': '*'} perms_map = {'get': '*'}
queryset = Quali.objects.all() queryset = Quali.objects.all()
serializer_class = QualiListSerializer serializer_class = QualiListSerializer
search_fields = ['name', 'type', 'grade'] search_fields = ['name', 'type', 'grade', 'scope', 'level', 'description']
ordering = ['org__sort'] ordering = ['org', 'org__sort', 'create_time']
filterset_fields = ['org', 'type', 'grade', 'province', 'city', 'citys']
@action(methods=['get'], detail=False, perms_map = {'get':'*'}) @action(methods=['get'], detail=False, perms_map = {'get':'*'})
def my(self, request, *args, **kwargs): def my(self, request, *args, **kwargs):
@ -162,7 +163,7 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel
return Response() return Response()
@action(methods=['post'], detail=False, @action(methods=['post'], detail=False,
perms_map = {'post':'qaction_update'}, serializer_class=QActionQualiUpdateSerializer) perms_map = {'post':'qaction_create'}, serializer_class=QActionQualiUpdateSerializer)
@transaction.atomic @transaction.atomic
def quali_update(self, request, *args, **kwargs): 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 from simple_history.models import HistoricalRecords
class Province(models.Model): 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) name = models.CharField(max_length=20)
class City(models.Model): 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) name = models.CharField(max_length=20)
parent = models.ForeignKey(Province, on_delete=models.CASCADE) 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 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 from rest_framework import routers
@ -17,5 +17,6 @@ router.register('city', CityViewSet, basename="city")
urlpatterns = [ urlpatterns = [
path('', include(router.urls)), path('', include(router.urls)),
path('sendmsg/', sendMsg.as_view()), 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, PositionSerializer, ProvinceSerializer, RoleSerializer,
UserCreateSerializer, UserListSerializer, UserCreateSerializer, UserListSerializer,
UserModifySerializer) UserModifySerializer)
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
import requests import requests
import json import json
from rest_framework.exceptions import AuthenticationFailed from rest_framework.exceptions import AuthenticationFailed
from django.db import transaction
logger = logging.getLogger('log') logger = logging.getLogger('log')
# logger.info('请求成功! response_code:{}response_headers:{}response_body:{}'.format(response_code, response_headers, response_body[:251])) # logger.info('请求成功! response_code:{}response_headers:{}response_body:{}'.format(response_code, response_headers, response_body[:251]))
# logger.error('请求出错:{}'.format(error)) # logger.error('请求出错:{}'.format(error))
@ -209,6 +212,12 @@ class OrganizationViewSet(PageOrNot,ModelViewSet):
ordering_fields = ['sort'] ordering_fields = ['sort']
ordering = ['sort', 'pk'] 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]) @action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
def sub(self, request, pk=None): def sub(self, request, pk=None):
""" """
@ -360,6 +369,40 @@ class UserViewSet(PageOrNot, ModelViewSet):
UserThird.objects.filter(user=request.user, type='wx_mp').delete() UserThird.objects.filter(user=request.user, type='wx_mp').delete()
return Response() 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): class WXMPlogin(APIView):
authentication_classes=[] authentication_classes=[]
@ -388,15 +431,24 @@ class WXMPlogin(APIView):
class ProviceViewSet(PageOrNot, ListModelMixin, GenericViewSet): class ProviceViewSet(PageOrNot, ListModelMixin, GenericViewSet):
queryset = Province.objects.all() queryset = Province.objects.all()
serializer_class = ProvinceSerializer serializer_class = ProvinceSerializer
search_fields = ['name']
ordering = 'id' 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): class CityViewSet(PageOrNot, ListModelMixin, GenericViewSet):
queryset = City.objects.all() queryset = City.objects.all()
serializer_class = CitySerializer serializer_class = CitySerializer
filterset_fields = ['parent']
search_fields = ['name']
ordeing = 'id' ordeing = 'id'
@method_decorator(cache_page(60*60*2))
def list(self, request, *args, **kwargs):
return super().list(request, *args, **kwargs)
class FileViewSet(ModelViewSet): class FileViewSet(ModelViewSet):
""" """
@ -452,5 +504,15 @@ def mediaauth(request):
return HttpResponseForbidden() 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 * from .settings import *
DEBUG = True DEBUG = True
DATABASES = { DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'cma',
'USER': 'postgres',
'PASSWORD': 'zctest1234',
'HOST': '47.95.0.242',
'PORT': '5432',
}
# 'default': { # 'default': {
# 'ENGINE': 'django.db.backends.postgresql', # 'ENGINE': 'django.db.backends.postgresql',
# 'NAME': 'cma', # 'NAME': 'cma',
# 'USER': 'cma', # 'USER': 'postgres',
# 'PASSWORD': 'cma123', # 'PASSWORD': 'zctest1234',
# # 'HOST': '172.16.80.102', # 'HOST': '47.95.0.242',
# 'HOST': '1.203.161.102',
# 'PORT': '5432', # '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',
}
} }