Merge branch 'master' of https://e.coding.net/ctcdevteam/cma_search
This commit is contained in:
		
						commit
						7e44c1fa16
					
				| 
						 | 
					@ -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):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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'),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
					@ -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())
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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': 'postgres',
 | 
					        'USER': 'cma',
 | 
				
			||||||
         'PASSWORD': 'zctest1234',
 | 
					        'PASSWORD': 'cma123',
 | 
				
			||||||
         'HOST': '47.95.0.242',
 | 
					        'HOST': '172.16.80.102',
 | 
				
			||||||
 | 
					        # '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',
 | 
					 | 
				
			||||||
#     }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue