from django.shortcuts import render from requests.api import request from rest_framework.views import APIView from rest_framework.response import Response from crm.models import Consumer from examtest.models import ExamTest from question.models import Question import pickle import requests from lxml import etree from django.db.models import Count from rbac.models import UserProfile # Create your views here. class BasicCount(APIView): ''' 获取基本统计数据 ''' def get(self, request, format=None): ret={} ret['consumer1_count'] = Consumer.objects.filter(is_delete=False).count() ret['consumer2_count'] = Consumer.objects.filter(is_delete=False).exclude(create_admin=None).count() ret['test_count'] = ExamTest.objects.filter(is_delete=False).count() ret['question_count'] = Question.objects.filter(is_delete=False).count() return Response(ret) class Admindata1(APIView): """ 各管理员录入学员数-柱状图 """ def get(self, request, format=None): ret = {'x':{'name':'管理员', 'data':[]}, 's':[{'name':'学员数', 'data':[]}], 't':'各管理员录入学员数'} tmp = UserProfile.objects.filter(is_delete=False).annotate(total=Count('consumer_create_admin')).order_by('-total').values('username', 'total') for i in tmp: ret['x']['data'].append(i['username']) ret['s'][0]['data'].append(i['total']) return Response(ret) class Companydis(APIView): """ 单位分布 """ def get(self, request, format=None): ret = {'s':[{'name':'浙江', 'value':5000}], 't':'单位分布'} # tmp = UserProfile.objects.filter(is_delete=False).annotate(total=Count('consumer_create_admin')).order_by('-total').values('username', 'total') # for i in tmp: # ret['x']['data'].append(i['username']) # ret['s'][0]['data'].append(i['total']) return Response(ret) class Consumerdis(APIView): """ 学员分布 """ def get(self, request, format=None): ret = {'s':[{'name':'河北', 'value':5000}], 't':'学员分布'} # tmp = UserProfile.objects.filter(is_delete=False).annotate(total=Count('consumer_create_admin')).order_by('-total').values('username', 'total') # for i in tmp: # ret['x']['data'].append(i['username']) # ret['s'][0]['data'].append(i['total']) return Response(ret) class Quota(APIView): ''' 获取考试名额 ''' def get(self, request, format=None): with open('quota.dat','rb') as f: data = pickle.load(f) return Response(data) class SearchCandidates(APIView): perms_map = [ {'post': 'candidate_search'}] def post(self, request, *args, **kwargs): names = request.data['names'] numbers = request.data['numbers'] names_ = names.split('\n') numbers_ = numbers.split('\n') names_l = [i.replace(' ', '') for i in names_ if i!=''] numbers_l = [i.replace(' ', '') for i in numbers_ if i!=''] candidates = [] if len(names_l)>60: return Response({'error':'单次批量查询不允许超过60'}) if len(names_l) == len(numbers_l): for i in range(len(names_l)): payload = {'IndexModel[name]': names_l[i], 'IndexModel[identityNumber]': numbers_l[i], 'IndexModel[certNumber]':'', 'IndexModel[candidateNumber]':''} try: r = requests.post('https://fushe.chinansc.cn/open/candidate-list',data=payload, timeout=5) r.raise_for_status() r.close() html = etree.HTML(r.text) results = html.xpath("//table[@class='cert-table']") try: for i in results: url = 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], 'url':'https://fushe.chinansc.cn'+ url[0] } candidates.append(jsondata) except: pass except: pass return Response(candidates) else: return Response({'error':'姓名列和身份证列不匹配!'})