From 925cf5fbd7db3505efbef52079cd644a64a0e29d Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 27 Jan 2021 14:28:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=85=E6=9C=9F=E6=9C=AA=E8=BF=87=E5=BB=B6?= =?UTF-8?q?=E9=95=BF=E6=9C=9F=E9=99=90=E4=B8=80=E4=B8=AA=E6=9C=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_server/analyse/views.py | 4 ++-- test_server/crm/models.py | 4 ++-- test_server/crm/permission.py | 15 +++++++++++++-- test_server/crm/spider.py | 27 +++++++++++++++++++++++++++ test_server/crm/views.py | 26 +++----------------------- 5 files changed, 47 insertions(+), 29 deletions(-) create mode 100644 test_server/crm/spider.py diff --git a/test_server/analyse/views.py b/test_server/analyse/views.py index a2e0b89..a209b63 100644 --- a/test_server/analyse/views.py +++ b/test_server/analyse/views.py @@ -100,7 +100,7 @@ class Companydis(APIView): 单位分布 """ def get(self, request, format=None): - ret = {'s':[], 't':'单位分布', 'max':300, 'min':0} + ret = {'s':[], 't':'单位分布', 'max':800, 'min':0} tmp = Company.objects.exclude(geo__pname__isnull=True).values('geo__pname').annotate(total=Count('geo__pname')) for i in tmp: if i['geo__pname'] in nameMap: @@ -112,7 +112,7 @@ class Consumerdis(APIView): 学员分布 """ def get(self, request, format=None): - ret = {'s':[], 't':'学员分布', 'max':600, 'min':0} + ret = {'s':[], 't':'学员分布', 'max':3000, 'min':0} tmp = Consumer.objects.exclude(company__geo__pname__isnull=True).values('company__geo__pname').annotate(total=Count('company__geo__pname')) for i in tmp: if i['company__geo__pname'] in nameMap: diff --git a/test_server/crm/models.py b/test_server/crm/models.py index 29c2336..fd7de7a 100644 --- a/test_server/crm/models.py +++ b/test_server/crm/models.py @@ -69,8 +69,8 @@ class Consumer(CommonModel): collects = models.ManyToManyField(Question, verbose_name='收藏试题') process = JSONField('练习进度', blank=True, default=dict) - ID_number = models.CharField('身份证号', max_length=100, null=True, blank=True) - realname = models.CharField('真实姓名', max_length=100, null=True, blank=True) + ID_number = models.CharField('查询身份证号', max_length=100, null=True, blank=True) + realname = models.CharField('查询真实姓名', max_length=100, null=True, blank=True) ID_number1 = models.CharField('身份证号', max_length=100, null=True, blank=True) create_admin = models.ForeignKey(UserProfile, on_delete=models.SET_NULL, null=True, blank=True, related_name='consumer_create_admin') diff --git a/test_server/crm/permission.py b/test_server/crm/permission.py index 54be22d..4a258c0 100644 --- a/test_server/crm/permission.py +++ b/test_server/crm/permission.py @@ -4,7 +4,7 @@ from crm.models import Consumer from rest_framework.permissions import IsAuthenticated from django.core.cache import cache from django.utils import timezone -from datetime import datetime +from datetime import datetime, timedelta # 学员接口列表 ConsumerPerms = [ 'paper_view', @@ -22,10 +22,21 @@ VistorPerms = [ 'questioncat_view', 'my_examtest', ] +from .spider import getZs def get_consumerperm_list(consumer): perms = list(consumer.role.perms.values_list('code', flat=True)) if consumer.exceed_date and (consumer.exceed_date < datetime.date(timezone.now())): - perms.append('account_exceed') + if consumer.name and consumer.ID_number1: + candidates = getZs(consumer.name, consumer.ID_number1) + if candidates: + perms.append('account_exceed') + else: + # 未通过考试增加30天期限 + newdate = datetime.date(timezone.now() + timedelta(days=30)) + consumer.exceed_date = newdate + consumer.save() + else: + perms.append('account_exceed') cache.get_or_set('cperms_'+str(consumer.id), perms) return perms diff --git a/test_server/crm/spider.py b/test_server/crm/spider.py new file mode 100644 index 0000000..01a5f8d --- /dev/null +++ b/test_server/crm/spider.py @@ -0,0 +1,27 @@ +import requests +from lxml import etree + +def getZs(realname, ID_number): + payload = {'IndexModel[name]': realname, 'IndexModel[identityNumber]': ID_number, 'IndexModel[certNumber]':'', 'IndexModel[candidateNumber]':''} + r = requests.post('https://fushe.chinansc.cn/open/candidate-list',data=payload) + html = etree.HTML(r.text) + results = html.xpath("//table[@class='cert-table']") + candidates = [] + try: + for i in results: + img = i.xpath('tr/td/a/@href') + name = i.xpath('tr[1]/td[1]/text()') + ID_number = i.xpath('tr[1]/td[2]/text()') + report_number = i.xpath('tr[2]/td[1]/text()') + issue_date = i.xpath('tr[2]/td[2]/text()') + jsondata = { + 'name':name[0], + 'ID_number':ID_number[0], + 'report_number':report_number[0], + 'issue_date':issue_date[0], + 'img':'https://fushe.chinansc.cn'+ img[0] + } + candidates.append(jsondata) + except: + pass + return candidates \ No newline at end of file diff --git a/test_server/crm/views.py b/test_server/crm/views.py index befb669..c8f5ace 100644 --- a/test_server/crm/views.py +++ b/test_server/crm/views.py @@ -33,6 +33,7 @@ from .serializers import CompanySerializer, ConsumerSerializer, ConsumerPermSeri from lxml import etree from rbac.models import UserProfile from django.http import Http404 +from .spider import getZs import time appid = 'wxf1e9471c93f05ad6' secret = '4bf7f9bd6c52634586bbe792a1f0a834' @@ -379,7 +380,7 @@ class ConsumerViewSet(ModelViewSet): url_path='realinfo', url_name='get_realinfo', perms_map=[{'*':'*'}]) def realinfo(self, request): ''' - 修改真实信息 + 修改查询信息 ''' if isinstance(request.user, Consumer): request.user.ID_number = request.data['ID_number'] @@ -394,28 +395,7 @@ class ConsumerViewSet(ModelViewSet): ''' 证书查询 ''' - payload = {'IndexModel[name]': request.query_params['realname'], 'IndexModel[identityNumber]': request.query_params['ID_number'], 'IndexModel[certNumber]':'', 'IndexModel[candidateNumber]':''} - r = requests.post('https://fushe.chinansc.cn/open/candidate-list',data=payload) - html = etree.HTML(r.text) - results = html.xpath("//table[@class='cert-table']") - candidates = [] - try: - for i in results: - img = i.xpath('tr/td/a/@href') - name = i.xpath('tr[1]/td[1]/text()') - ID_number = i.xpath('tr[1]/td[2]/text()') - report_number = i.xpath('tr[2]/td[1]/text()') - issue_date = i.xpath('tr[2]/td[2]/text()') - jsondata = { - 'name':name[0], - 'ID_number':ID_number[0], - 'report_number':report_number[0], - 'issue_date':issue_date[0], - 'img':'https://fushe.chinansc.cn'+ img[0] - } - candidates.append(jsondata) - except: - pass + candidates = getZs(request.query_params['realname'], request.query_params['ID_number']) return Response({'candidates':candidates}, status=status.HTTP_200_OK) @action(methods=['post'], detail=False,