Exemple #1
0
def bonus(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request, '../login/')
    rdata, op, suser = Utils.get_request_basis(request)
    rdata['credit'] = request.GET.get('credit', 0)
    return render(request, 'bonus.html', rdata)
Exemple #2
0
def prize_store(request):
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if not suser.admin_all:
        return render(request, 'permission_denied.html', {})

    if op == 'change_nickname':
        SUser.objects.filter(id=int(request.POST.get('sid'))).update(
            nickname=request.POST.get('nickname'))
        return HttpResponse(json.dumps({}))

    if op == 'get_prize_list':
        sid = int(request.POST.get('sid'))
        prizes = Prize.objects.all()
        prize_list = []
        for prize in prizes:
            prize_list.append({
                'pid': prize.id,
                'title': prize.title,
                'in': sid in json.loads(prize.store)
            })
        return HttpResponse(json.dumps({'prize_list': prize_list}))

    if op == 'renew_prize_for_store':
        sid = int(request.POST.get('sid'))
        pid_list = [
            int(pid) for pid in json.loads(request.POST.get('pid_list'))
        ]
        manage_list = []
        for prize in Prize.objects.all():
            stores = json.loads(prize.store)
            exp_in = prize.id in pid_list
            pre_in = sid in stores
            if exp_in != pre_in:
                if exp_in:
                    stores.append(sid)
                else:
                    stores.remove(sid)
                prize.store = json.dumps(stores)
                prize.save()
        return HttpResponse(json.dumps({}))

    storepairs = []
    for store in SUser.objects.filter(is_store=True):
        d = {'store': store}
        prizes = []
        for prize in Prize.objects.all():
            prizestores = json.loads(prize.store)
            print(store, id, prizestores)
            if store.id in prizestores:
                prizes.append(prize)
        d['prizes'] = prizes
        storepairs.append(d)
    rdata['storepairs'] = storepairs
    rdata['prizes'] = Prize.objects.all()

    return render(request, 'prize_store.html', rdata)
Exemple #3
0
def index(request):
    # 检查身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)

    rq_list = []
    if not suser.is_store:
        anweraire_queries = {
            answeraire.qid: answeraire.submitted
            for answeraire in Answeraire.objects.filter(
                username=suser.username)
        }
        for questionaire in Questionaire.objects.all():
            rq = None
            # 高级管理员
            if suser.admin_all:
                rq = Utils.remakeq(suser, questionaire, True,
                                   anweraire_queries)
                rq['filled_number'] = Answeraire.objects.filter(
                    qid=questionaire.id).count()
                rq['submitted_number'] = Answeraire.objects.filter(
                    qid=questionaire.id, submitted=True).count()
            # 问卷管理员:自己发的问卷
            elif suser.admin_survey and questionaire.founder == suser.username:
                rq = Utils.remakeq(suser, questionaire, True,
                                   anweraire_queries)
            # 普通用户:被允许填的问卷,正在开放填写已经填写
            elif Utils.check_allow(suser, questionaire):
                if (questionaire.status
                        == 1) or (questionaire.status in [2, 3]
                                  and Utils.check_fill2(
                                      anweraire_queries, questionaire.id) > 1):
                    rq = Utils.remakeq(suser, questionaire, False,
                                       anweraire_queries)
            if rq == None: continue
            rq_list.append(rq)

    # 导入问卷
    f = request.FILES.get('upload', None)
    if not f is None:
        filepath = Utils.upload_file(f)
        qstring = load_survey(filepath)
        now = datetime.datetime.now()
        questionaire = Questionaire.objects.create(status=0,
                                                   create_time=now,
                                                   update_time=now,
                                                   founder=suser.username,
                                                   questions=qstring)
        return HttpResponseRedirect('/survey/' + str(questionaire.id) + '/')

    def cmp_by_time(x):
        return x['create_time']

    rq_list.sort(key=lambda x: x['create_time'], reverse=True)
    rdata['rq_list'] = rq_list
    rdata['editable'] = suser.admin_all or suser.admin_survey
    return render(request, 'index.html', rdata)
Exemple #4
0
def prize(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)

    # 商家重导向
    if suser.is_store:
        return HttpResponseRedirect('/prize_ticket/u/' + str(suser.id) + '/')

    if op == 'delete':
        pid = int(request.POST.get('pid'))
        Prize.objects.filter(id=pid).delete()
        return HttpResponse(json.dumps({}))

    if op == 'change_title':
        pid = int(request.POST.get('pid'))
        title = request.POST.get('title')
        Prize.objects.filter(id=pid).update(title=title)
        return HttpResponse(json.dumps({}))

    if op == 'change_credit':
        pid = int(request.POST.get('pid'))
        credit = int(request.POST.get('credit'))
        Prize.objects.filter(id=pid).update(credit=credit)
        return HttpResponse(json.dumps({}))

    if op == 'change_price':
        pid = int(request.POST.get('pid'))
        price = int(request.POST.get('price'))
        Prize.objects.filter(id=pid).update(price=price)
        return HttpResponse(json.dumps({}))

    if op == 'change_description':
        pid = int(request.POST.get('pid'))
        Prize.objects.filter(id=pid).update(
            description=request.POST.get('description'))
        return HttpResponse(json.dumps({}))

    if op == 'exchange':
        jdata = {'result': 'ok'}
        pid = int(request.POST.get('pid'))
        prize = Prize.objects.get(id=pid)
        if suser.credit < prize.credit:
            jdata['result'] = '没有足够积分'
            return HttpResponse(json.dumps(jdata))
        suser.credit -= prize.credit
        suser.save()
        PrizeTicket.objects.create(uid=suser.id,
                                   pid=pid,
                                   count=1,
                                   used=False,
                                   exchange_time=datetime.datetime.now())
        return HttpResponse(json.dumps(jdata))

    rdata['prizes'] = prizes = list(reversed(Prize.objects.all()))
    return render(request, 'prize.html', rdata)
Exemple #5
0
def upload_file(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)

    f = request.FILES.get('file', None)
    if not f is None:
        f_path = Utils.upload_file(f)
        return HttpResponse(json.dumps({'status': 'yes', 'url': f_path}))
    else:
        return HttpResponse(json.dumps({'status': 'no'}))
Exemple #6
0
def backend_admin(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if suser.username != 'root':
        return render(request, 'permission_denied.html', {})

    if op == 'export_multi':
        qids = json.loads(request.POST.get('qids'))
        excel_name = Analysis.export_multi(qids)
        return HttpResponse(
            json.dumps({
                'result': 'yes',
                'export_path': excel_name
            }))

    if op == 'del_ans':
        cnt_del_ans = 0
        for answeraire in Answeraire.objects.all():
            questionaires = Questionaire.objects.filter(id=answeraire.qid)
            if len(questionaires) == 0:
                answeraire.delete()
                cnt_del_ans += 1
        cnt_del_rep = 0
        for report in Report.objects.all():
            questionaires = Questionaire.objects.filter(id=report.qid)
            if len(questionaires) == 0:
                report.delete()
                cnt_del_rep += 1
        return HttpResponse(
            json.dumps({
                'cnt_del_ans': cnt_del_ans,
                'cnt_del_rep': cnt_del_rep
            }))

    if op == 'del_tsinghua':
        cnt_del_tsinghua = 0
        for suser in SUser.objects.all():
            username = suser.username
            if username.isdigit() and len(username) == 10:
                User.objects.filter(username=username).delete()
                suser.delete()
                cnt_del_tsinghua += 1
        for user in User.objects.all():
            username = user.username
            if username.isdigit() and len(username) == 10:
                SUser.objects.filter(username=username).delete()
                user.delete()
                cnt_del_tsinghua += 1
        return HttpResponse(json.dumps({'cnt_del_tsinghua': cnt_del_tsinghua}))

    return render(request, 'backend_admin.html', {})
Exemple #7
0
def help_center(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)

    if suser.admin_all:
        helps = reversed(Help.objects.all())
    else:
        helps = reversed(Help.objects.filter(released=True))

    rdata['helps'] = helps
    return render(request, 'helps.html', rdata)
Exemple #8
0
def search(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if not suser.admin_all:
        return render(request, 'permission_denied.html', {})

    def context(s, klen, pos):
        l = max(0, pos - 5)
        r = min(len(s), pos + klen + 5)
        context_left = s[l:pos]
        if l != 0:
            context_left = '...' + context_left
        context_right = s[pos + klen:r]
        if r != len(s):
            context_right = context_right + '...'
        return context_left, s[pos:pos + klen], context_right

    if op == 'search':
        keyword = request.POST.get('keyword')
        questionaire_list = Questionaire.objects.all()
        result = []
        for questionaire in questionaire_list:
            d = {}
            p = questionaire.title.find(keyword)
            if p != -1:
                d['id'] = questionaire.id
                d['title'] = questionaire.title
                d['update_time'] = str(questionaire.update_time)[:19]
                d['context_left'], d['context_mid'], d[
                    'context_right'] = context(questionaire.title,
                                               len(keyword), p)
                result.append(d)
                continue
            p = questionaire.questions.find(keyword)
            if p != -1:
                d['id'] = questionaire.id
                d['title'] = questionaire.title
                d['update_time'] = str(questionaire.update_time)[:19]
                d['context_left'], d['context_mid'], d[
                    'context_right'] = context(questionaire.questions,
                                               len(keyword), p)
                result.append(d)
        return HttpResponse(json.dumps({'result': result}))

    return render(request, 'search.html', rdata)
Exemple #9
0
def tip(request, hid):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)

    helps = Help.objects.filter(id=int(hid))
    if len(helps) == 0:
        rdata['info'] = '帮助不存在'
    else:
        help = helps[0]
        if not suser.admin_all and not help.released:
            return render(request, 'permission_denied.html', {})

    if op == 'create':
        help = Help.objects.create(founder=suser.id,
                                   create_time=datetime.datetime.now())
        return HttpResponse(json.dumps({'hid': help.id}))

    if op == 'load':
        return HttpResponse(
            json.dumps({
                'title': help.title,
                'content': help.content,
                'attachment': help.attachment,
                'released': help.released
            }))

    if op == 'save' or op == 'release':
        tip_string = json.loads(request.POST.get('tip'))
        title = tip_string['title']
        content = tip_string['html']
        attachment = tip_string['attachments']
        released = (op == 'release')
        help = Help.objects.filter(id=int(hid)).update(
            title=title,
            content=content,
            attachment=attachment,
            released=released,
            release_time=datetime.datetime.now())
        return HttpResponse(json.dumps({}))

    if op == 'delete':
        help.delete()
        return HttpResponse(json.dumps({}))

    return render(request, 'tip.html', rdata)
Exemple #10
0
def admin_list(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if not suser.admin_super:
        return render(request, 'permission_denied.html', {})

    def get_admin_list():
        admin_list = []
        for admin in SUser.objects.filter(Q(admin_all=1) | Q(
                admin_survey=1)).filter(~Q(username='******')):
            admin_list.append({
                'uid': admin.id,
                'username': admin.username,
                'name': admin.name,
                'admin_all': admin.admin_all,
                'admin_survey': admin.admin_survey
            })
        return admin_list

    # 加载
    if op == 'load':
        return HttpResponse(json.dumps({'admin_list': get_admin_list()}))

    # 修改管理员状态
    if op == 'add':
        username = request.POST.get('username')
        level = request.POST.get('level')
        value = int(request.POST.get('value'))
        if level == 'chief':
            susers = SUser.objects.filter(username=username)
            susers.update(admin_all=value)
            ulen = len(susers)
        elif level == 'survey':
            susers = SUser.objects.filter(username=username)
            susers.update(admin_survey=value)
            ulen = len(susers)
        return HttpResponse(
            json.dumps({
                'ulen': ulen,
                'admin_list': get_admin_list()
            }))

    rdata['admin_list'] = get_admin_list()
    return render(request, 'admin_list.html', rdata)
Exemple #11
0
def profile(request, uid):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if (not suser.admin_all) and (int(suser.id) != int(uid)):
        return render(request, 'permission_denied.html', {})
    rdata['psuser'] = psuser = SUser.objects.get(id=uid)
    puser = User.objects.get(id=psuser.uid)

    if op == 'change_nickname':
        psuser.nickname = request.POST.get('nickname')
        psuser.save()
        return HttpResponse(json.dumps({}))

    if op == 'change_password':
        old_password = Utils.uglyDecrypt(request.POST.get('old_password'))
        new_password = Utils.uglyDecrypt(request.POST.get('new_password'))
        puser2 = auth.authenticate(username=puser.username,
                                   password=old_password)
        jdata = {}
        if puser2 is not None and puser2 == puser and puser2.is_active:
            puser.set_password(new_password)
            puser.save()
            jdata['result'] = 'yes'
            return HttpResponse(json.dumps(jdata))
        else:
            jdata['result'] = 'no'
            return HttpResponse(json.dumps(jdata))

    rq_list = []
    anweraire_queries = {
        answeraire.qid: answeraire.submitted
        for answeraire in Answeraire.objects.filter(username=suser.username)
    }
    for questionaire in Questionaire.objects.all():
        if questionaire.status in [1, 2, 3] and Utils.check_fill2(
                anweraire_queries, questionaire.id) in [2, 3]:
            rq_list.append(
                Utils.remakeq(suser, questionaire, False, anweraire_queries))

    rq_list.sort(key=lambda x: x['create_time'], reverse=True)
    rdata['rq_list'] = rq_list

    return render(request, 'profile.html', rdata)
Exemple #12
0
def prize_exchange(request, tid):
    # 验证身份,只有特定商家和特定用户
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    rdata['ticket'] = ticket = PrizeTicket.objects.get(id=tid)
    rdata['prize'] = prize = Prize.objects.get(id=ticket.pid)

    if suser.is_store:
        store = json.loads(prize.store)
        if not suser.id in store:
            return render(request, 'permission_denied.html', {})
    else:
        if ticket.uid != suser.id:
            return render(request, 'permission_denied.html', {})
    op = request.POST.get("op")

    if op == "exchange":
        if suser.is_store:
            ticket.use_status = ticket.use_status | 2
            ticket.oid = suser.id
        else:
            ticket.use_status = ticket.use_status | 4
        if ticket.use_status == 7:
            ticket.used = True
            ticket.use_time = datetime.datetime.now()
        ticket.save()
        return HttpResponse(json.dumps({}))

    if op == "if_confirm":
        jdata = {'result': 'not confirmed'}
        if ticket.use_status == 7:
            jdata['result'] = 'confirmed'
        return HttpResponse(json.dumps(jdata))

    if ticket.used == True:
        return render(request, 'permission_denied.html', {})
    if suser.is_store:
        ticket.use_status = ticket.use_status | 1
        ticket.save()

    return render(request, 'prize_exchange.html', rdata)
Exemple #13
0
def prize_add(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if not suser.admin_all:
        return render(request, 'permission_denied.html', {})

    if op == 'add_prize':
        title = request.POST.get('title')
        description = request.POST.get('description')
        credit = int(request.POST.get('credit'))
        price = int(request.POST.get('price'))
        expire_time = request.POST.get('expire_time')
        prize = Prize.objects.create(title=title,
                                     description=description,
                                     credit=credit,
                                     price=price,
                                     expire_time=expire_time)
        return HttpResponse(json.dumps({}))

    return render(request, 'prize_add.html', rdata)
Exemple #14
0
def prize_add_store(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if not suser.admin_all:
        return render(request, 'permission_denied.html', {})

    if op == 'add_store':
        jdata = {'result': 'ok'}
        username = request.POST.get('username')
        if username.isdigit() and len(username) == 10:
            jdata['result'] = '请勿使用清华学号'
        elif len(SUser.objects.filter(username=username)) > 0:
            jdata['result'] = '用户名已存在'
        else:
            nickname = request.POST.get('nickname')
            password = Utils.uglyDecrypt(request.POST.get('password'))
            pid_list = json.loads(request.POST.get('pid_list'))
            user = User.objects.create_user(username=username,
                                            password=password)
            suser = SUser.objects.create(username=username,
                                         nickname=nickname,
                                         uid=user.id,
                                         is_sample=0,
                                         is_store=1)
            for pid in pid_list:
                prize = Prize.objects.get(id=int(pid))
                store = json.loads(prize.store)
                store.append(suser.id)
                prize.store = json.dumps(store)
                prize.save()
        return HttpResponse(json.dumps(jdata))

    rdata['prizes'] = prizes = list(reversed(Prize.objects.all()))

    return render(request, 'prize_add_store.html', rdata)
Exemple #15
0
def survey_status(request, qid):
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if not suser.admin_all:
        return render(request, 'permission_denied.html', {})
    rdata['qid'] = qid

    questionaires = Questionaire.objects.filter(id=qid)
    if len(questionaires) == 0:
        rdata['info'] = '问卷不存在'
        return render(request, 'survey_status.html', rdata)
    questionaire = questionaires[0]

    def add_column(d, filter0, suser, s):
        val = eval('suser.' + s)
        d[s] = val
        if not val in filter0[s]:
            filter0[s][val] = True

    if op == 'get_list':
        items = []
        filter0 = json.loads(request.POST.get('filter', {}))
        if len(filter0) == 0:
            filter0 = {
                'submitted': {
                    '是': True,
                    '否': True
                },
                'username': ['', ''],
                'submit_time': ['', ''],
                'student_type': {},
                'political_status': {},
                'department': {},
                'enrollment_mode': {}
            }
        answeraires = Answeraire.objects.filter(qid=qid)
        for answeraire in answeraires:
            d = {}
            d['submitted'] = '是' if answeraire.submitted else '否'
            d['username'] = answeraire.username
            d['submit_time'] = answeraire.submit_time.strftime(
                '%Y-%m-%d %H:%M:%S')
            susers = SUser.objects.filter(username=answeraire.username)
            if len(susers) > 0:
                suser = susers[0]
                d['uid'] = suser.id
                add_column(d, filter0, suser, 'student_type')
                add_column(d, filter0, suser, 'political_status')
                add_column(d, filter0, suser, 'department')
                add_column(d, filter0, suser, 'enrollment_mode')
            else:
                d['student_type'] = d['political_status'] = d[
                    'department'] = d['enrollment_mode'] = '已删除'

            addin = True
            addin &= filter0['submitted'][d['submitted']]
            if filter0['username'][0] != '':
                addin &= (filter0['username'][0] <= d['username'])
            if filter0['username'][1] != '':
                addin &= (filter0['username'][1] >= d['username'])
            if filter0['submit_time'][0] != '':
                addin &= (filter0['submit_time'][0] <= d['submit_time'])
            if filter0['submit_time'][1] != '':
                addin &= (filter0['submit_time'][1] >= d['submit_time'])
            addin &= filter0['student_type'][d['student_type']]
            addin &= filter0['political_status'][d['political_status']]
            addin &= filter0['department'][d['department']]
            addin &= filter0['enrollment_mode'][d['enrollment_mode']]
            if addin: items.append(d)

        order = request.POST.get('order', '')
        if_reversed = int(request.POST.get('reversed', 0))
        if order != '':
            items = sorted(items,
                           key=lambda item: item[order],
                           reverse=if_reversed)

        return HttpResponse(json.dumps({
            'item_list': items,
            'filter': filter0
        }))

    return render(request, 'survey_status.html', rdata)
Exemple #16
0
def prize_ticket(request, ptype, qid=-1):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    qid = int(qid)

    if op == 'clear_scaned':
        tid = int(request.POST.get('tid'))
        PrizeTicket.objects.filter(id=tid).update(use_status=0)
        return HttpResponse(json.dumps({}))

    if op == 'if_scan_qrcode':
        jdata = {'result': 'not scaned'}
        print(request.POST.get('tid'))
        tid = int(request.POST.get('tid'))
        if PrizeTicket.objects.get(id=tid).use_status > 0:
            jdata['result'] = 'scaned'
        return HttpResponse(json.dumps(jdata))

    if ptype == 'p':
        # 某商品交易记录
        rdata['personal'] = False
        prizes = Prize.objects.filter(id=qid)
        if len(prizes) == 0:
            return render(request, 'permission_denied.html', {})
        prize = prizes[0]
        if (not suser.admin_all) and (not suser.id in json.loads(prize.store)):
            return render(request, 'permission_denied.html', {})
        tickets = PrizeTicket.objects.filter(pid=qid)
    elif ptype == 'u':
        if (not suser.admin_all) and (suser.id != qid):
            return render(request, 'permission_denied.html', {})
        qsuser = SUser.objects.get(id=qid)
        if qsuser.is_store:
            # 某商家交易记录
            rdata['personal'] = False
            rdata['is_store'] = True
            tickets = PrizeTicket.objects.filter(oid=qid)
        else:
            # 某用户兑换记录
            rdata['personal'] = True
            tickets = PrizeTicket.objects.filter(uid=qid)
    else:
        return render(request, 'permission_denied.html', {})

    def remake_tickets(tickets, d):
        # 去掉不合法的
        ticket_list = []
        for ticket in tickets:
            prizes = Prize.objects.filter(id=ticket.pid)
            if len(prizes) == 0: continue
            susers = SUser.objects.filter(id=ticket.uid)
            if len(susers) == 0:
                nickname = '已删除'
            else:
                nickname = susers[0].nickname
            prize = prizes[0]
            ticket_list.append({
                'tid':
                ticket.id,
                'pid':
                prize.id,
                'title':
                prize.title,
                'nickname':
                nickname,
                'credit':
                prize.credit,
                'price':
                prize.price,
                'used':
                ticket.used,
                'cleared':
                ticket.cleared,
                'use_time':
                ticket.use_time.strftime('%Y-%m-%d %H:%M:%S'),
                'clear_time':
                ticket.clear_time.strftime('%Y-%m-%d %H:%M:%S'),
                'description':
                prize.description
            })
        d['tickets'] = list(reversed(ticket_list))
        return

    if op == 'refresh_prize_list':
        tp = request.POST.get('type')
        if tp == 'cleared':
            tickets = tickets.filter(cleared=True)
        elif tp == 'uncleared':
            tickets = tickets.filter(cleared=False).filter(used=True)
        elif tp == 'unused':
            tickets = tickets.filter(used=False)
        d = {}
        remake_tickets(tickets, d)
        return HttpResponse(json.dumps(d))

    remake_tickets(tickets, rdata)

    if op == 'clear_money':
        money = 0
        for t in rdata['tickets']:
            ticket = PrizeTicket.objects.get(id=t['tid'])
            prize = Prize.objects.get(id=t['pid'])
            money += (int(ticket.used) - int(ticket.cleared)) * prize.price
            ticket.cleared = True
            ticket.clear_time = datetime.datetime.now()
            ticket.save()
        return HttpResponse(json.dumps({'money': money}))

    # 计算金额
    if not rdata['personal']:
        used = 0
        cleared = 0
        money = 0
        for t in rdata['tickets']:
            used += int(t['used'])
            cleared += int(t['cleared'])
            money += (int(t['used']) - int(t['cleared'])) * int(t['price'])
        rdata['total'] = len(rdata['tickets'])
        rdata['cleared'] = cleared
        rdata['uncleared'] = used - cleared
        rdata['unused'] = rdata['total'] - used
        rdata['money'] = money

    return render(request, 'prize_ticket.html', rdata)
Exemple #17
0
def report(request, qid):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    return render(request, 'report.html', rdata)
Exemple #18
0
def survey(request, qid):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    rdata['viewable'] = 1
    rdata['qid'] = qid
    status = -1
    now = datetime.datetime.now()

    def update_questionaire(questionaire, title, qstring):
        questionaire.title = title
        questionaire.questions = qstring
        questionaire.update_time = datetime.datetime.now()

    def release_to_users(questionaire):
        sample_list_id = questionaire.sample_list_id
        if sample_list_id == -1:
            susers = SUser.objects.filter(is_sample=1)
        else:
            sample_list = SampleList.objects.filter(id=sample_list_id)
            susers = []
            if len(sample_list) > 0:
                sample_list = json.loads(sample_list[0].sample_list)
                for suser_id in sample_list:
                    suser = SUser.objects.filter(id=suser_id)
                    if len(suser) > 0:
                        susers.append(suser[0])
        questionaire.status = 1
        questionaire.save()

    # 添加新问卷
    if op == 'create':
        questionaire = Questionaire.objects.create(status=0,
                                                   create_time=now,
                                                   update_time=now,
                                                   founder=suser.username)
        questionaire.save()
        return HttpResponse(json.dumps({'qid': questionaire.id}))

    questionaires = Questionaire.objects.filter(id=qid)
    if len(questionaires) == 0:
        rdata['viewable'] = 0
        rdata['info'] = '问卷不存在'
    else:
        questionaire = questionaires[0]
        answered = len(
            Answeraire.objects.filter(qid=questionaire.id,
                                      username=suser.username,
                                      submitted=True)) > 0
        status = questionaire.status

        # 加载问卷请求
        if op == 'load':
            if status == 0 or status == 4 or status == 5:
                return HttpResponse(
                    json.dumps({
                        'status': status,
                        'title': questionaire.title,
                        'qstring': questionaire.questions
                    }))
            elif status == 1:
                answeraire = Answeraire.objects.filter(qid=qid,
                                                       username=suser.username)
                if len(answeraire):
                    astring = answeraire[0].answers
                else:
                    astring = '{}'
                return HttpResponse(
                    json.dumps({
                        'status': status,
                        'title': questionaire.title,
                        'qstring': questionaire.questions,
                        'astring': astring
                    }))
            elif status == 2 or status == 3:
                answeraire = Answeraire.objects.filter(qid=qid,
                                                       username=suser.username)
                if len(answeraire):
                    astring = answeraire[0].answers
                else:
                    astring = '{}'
                report = Analysis.get_report(qid)
                return HttpResponse(
                    json.dumps({
                        'status': status,
                        'title': questionaire.title,
                        'qstring': questionaire.questions,
                        'report': report,
                        'gender_code': suser.gender_code,
                        'student_type_code': suser.student_type_code,
                        'astring': astring,
                        'is_staff': suser.admin_all,
                        'report_template': questionaire.report_template
                    }))
            else:
                assert (False)

        # 删除问卷
        if op == 'delete':
            Answeraire.objects.filter(qid=questionaire.id).delete()
            Report.objects.filter(qid=questionaire.id).delete()
            questionaire.delete()
            return HttpResponse(json.dumps({}))

        # 复制问卷
        if op == 'copy':
            new_questionaire = Questionaire.objects.create(
                status=0,
                create_time=now,
                update_time=now,
                founder=suser.username,
                title=questionaire.title,
                questions=questionaire.questions)
            new_questionaire.save()
            return HttpResponse(json.dumps({}))

        # 导出问卷
        if op == 'export' or op == 'export_all':
            if status == 1 or status == 2 or status == 3:
                export_all = (True if op == 'export_all' else False)
                excel_name = Analysis.export(qid, export_all=export_all)
                if excel_name == None:
                    return HttpResponse(
                        json.dumps({
                            'result': 'no',
                            'info': '尚未有人填写问卷!'
                        }))
                else:
                    return HttpResponse(
                        json.dumps({
                            'result': 'yes',
                            'export_path': excel_name
                        }))
            else:
                return HttpResponse(
                    json.dumps({
                        'result': 'no',
                        'info': '问卷尚未发布!'
                    }))

        # 存储问卷模板
        if op == 'save_report_template':
            report_template = request.POST.get('report_template')
            questionaire.report_template = report_template
            questionaire.save()
            return HttpResponse(json.dumps({}))

        # 开放报告
        if op == 'release_report':
            questionaire.status = 3
            questionaire.save()
            return HttpResponse(json.dumps({}))

        # 撤回报告
        if op == 'withdraw_report':
            questionaire.status = 2
            questionaire.save()
            return HttpResponse(json.dumps({}))

        # 审核通过
        if op == 'verify_yes':
            questionaire.status = 1
            questionaire.save()
            return HttpResponse(json.dumps({}))

        # 审核不通过
        if op == 'verify_no':
            questionaire.status = 5
            questionaire.save()
            return HttpResponse(json.dumps({}))

        rdata['editable'] = editable = (suser.admin_all or questionaire.founder
                                        == suser.username)

        # 问卷修改状态
        if status == 0 or status == 5:
            # 添加可选样本列表
            rdata['sample_lists'] = SampleList.objects.all()

            # 修改中管理员可见
            if not editable:
                rdata['viewable'] = 0
                rdata['info'] = '非管理员不能修改'
            else:
                # 修改问卷请求
                if op == 'save':
                    update_questionaire(questionaire,
                                        request.POST.get('title'),
                                        request.POST.get('qstring'))
                    questionaire.save()
                    return HttpResponse(json.dumps({}))
                # 发布问卷请求
                elif op == 'release':
                    jdata = {}
                    questionaire.public = ifpublic = bool(
                        int(request.POST.get('ifpublic')))
                    questionaire.credit = credit = int(
                        request.POST.get('credit'))
                    if request.POST.get('sample_list_id') is not None:
                        questionaire.sample_list_id = sample_list_id = int(
                            request.POST.get('sample_list_id'))
                    if suser.admin_all or credit == 0:
                        release_to_users(questionaire)
                        jdata['result'] = '发布成功'
                    else:
                        questionaire.status = 4
                        jdata['result'] = '已提交审核'
                    questionaire.release_time = now
                    update_questionaire(questionaire,
                                        request.POST.get('title'),
                                        request.POST.get('qstring'))
                    questionaire.save()
                    return HttpResponse(json.dumps(jdata))

        # 问卷填写状态
        elif status == 1:
            # 检验是否可见、是否已经填写
            if Utils.check_allow(suser, questionaire) != 1:
                rdata['viewable'] = 0
                rdata['info'] = '没有权限访问'
            else:
                rdata['viewable'] = 1
                if Utils.check_fill(suser, questionaire) == 3:
                    rdata['info'] = '已经填写该问卷'
                    rdata['permission_submit'] = 0
                else:
                    rdata['permission_submit'] = 1

            # 提交问卷请求
            if op == 'submit':
                # 获取信息
                if 'HTTP_X_FORWARDED_FOR' in request.META:
                    ip = request.META['HTTP_X_FORWARDED_FOR']
                else:
                    ip = request.META['REMOTE_ADDR']
                agent = request.META.get('HTTP_USER_AGENT', 'unknown')
                os = request.META.get('OS', 'unknown')
                # 记录
                astring = request.POST.get('astring')
                complete = request.POST.get('complete', 'no')
                answeraire = Answeraire.objects.filter(qid=qid,
                                                       username=suser.username)
                if len(answeraire) > 0:
                    answeraire = answeraire[0]
                else:
                    answeraire = Answeraire.objects.create(
                        qid=qid, username=suser.username)
                answeraire.load_time = request.POST['load_time']
                answeraire.submit_time = request.POST['submit_time']
                answeraire.ip = ip
                answeraire.agent = agent
                answeraire.os = os
                answeraire.answers = astring
                answeraire.save()
                # 判断暂存还是提交
                if complete == 'yes':
                    answeraire.submitted = True
                    answeraire.save()
                    # 计算积分
                    suser.credit += questionaire.credit
                    suser.save()
                    return HttpResponse(
                        json.dumps({'credit': questionaire.credit}))
                else:
                    return HttpResponse(json.dumps({}))

            # 关闭问卷请求
            if op == 'closeup':
                questionaire.close_time = datetime.datetime.now()
                questionaire.status = 2
                questionaire.save()
                Answeraire.objects.filter(qid=questionaire.id).update(
                    submitted=True)
                return HttpResponse(json.dumps({}))

        # 问卷结束/报告编辑状态
        elif status == 2:
            if not editable:
                rdata['viewable'] = 0
                rdata['info'] = '没有权限访问'

        # 报告公开状态
        elif status == 3:
            if not editable and Utils.check_fill(suser, questionaire) != 3:
                rdata['viewable'] = 0
                rdata['info'] = '没有权限访问'

        # 问卷管理员发布,待审核状态
        elif status == 4:
            if not editable:
                rdata['viewable'] = 0
                rdata['info'] = '没有权限访问'
            else:
                if questionaire.public:
                    sample_list_name = '公共问卷'
                else:
                    sample_list_id = questionaire.sample_list_id
                    if sample_list_id != -1:
                        sample_lists = SampleList.objects.filter(
                            id=sample_list_id)
                        if len(sample_lists) > 0:
                            sample_list_name = sample_lists[0].name
                        else:
                            sample_list_name = '(未找到)'
                    else:
                        sample_list_name = '(全体样本)'
                rdata['sample_list_name'] = sample_list_name
                rdata['credit'] = questionaire.credit

        # 问卷出错状态
        else:
            rdata['viewable'] = 0
            rdata['info'] = '错误?没有该状态码'

    rdata['status'] = status
    return render(request, 'survey.html', rdata)
Exemple #19
0
def sample_list(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if not suser.admin_all and not suser.admin_survey:
        return render(request, 'permission_denied.html', {})

    sample_list_id = int(request.GET.get('samplelist', -1))
    page_n = int(request.GET.get('page', 1))

    global temp
    global l
    if not temp:
        if sample_list_id == -1:
            l = {}
        else:
            sample_list = SampleList.objects.get(id=sample_list_id)
            l = set(json.loads(sample_list.sample_list))

    print(temp, l)

    def get_suser_list():
        ITEM_PER_PAGE = 50
        susers = SUser.objects.order_by('id')
        n_susers = len(susers)
        page_s = (page_n - 1) * ITEM_PER_PAGE
        page_t = min(page_s + ITEM_PER_PAGE, n_susers)
        rdata['page_current'] = page_n
        rdata['page_max'] = (n_susers - 1) // ITEM_PER_PAGE + 1
        return [{
            'uid': suser.id,
            'username': suser.username,
            'name': suser.name,
            'is_sample': suser.username in l,
            'credit': suser.credit
        } for suser in susers[page_s:page_t]]

    # 加载
    if op == 'load':
        jdata = {}
        jdata['user_list'] = get_suser_list()
        jdata['sample_lists'] = sample_lists = [{
            'id': sample_list.id,
            'name': sample_list.name
        } for sample_list in SampleList.objects.all()]
        jdata['sample_list_id'] = sample_list_id
        jdata['sample_list_size'] = len(l)
        # gender, student_type, department, policical_status, enrollment_mode
        show_statistic_option_ids = [6, 4, 33, 13, 40]
        jdata['show_statistic_options'] = [[
            SUser.__var_name__[i], SUser.__var_chinese__[i]
        ] for i in show_statistic_option_ids]
        jdata['constraint_options'] = [[
            SUser.__var_name__[i], SUser.__var_chinese__[i]
        ] for i in range(len(SUser.__var_name__))]
        return HttpResponse(json.dumps(jdata))

    # 更改样本列表
    if op == 'change_sample_list':
        temp = False
        return HttpResponse({})

    # 新建用户列表
    if op == 'new_sample_list':
        name = request.POST.get('sample_list_name', '')
        if name == '': name = time.strftime('%Y%m%d%H%M%S')
        sample_list = SampleList.objects.create(name=name, sample_list='[]')
        return HttpResponse(
            json.dumps({
                'id': sample_list.id,
                'name': sample_list.name
            }))

    # 保存样本列表
    if op == 'save_sample_list':
        jdata = {}
        sample_lists = SampleList.objects.filter(id=sample_list_id)
        if len(sample_lists) == 0:
            jdata['info'] = '没有找到此样本列表'
        else:
            sample_list = sample_lists[0]
            sample_list.sample_list = json.dumps(list(l))
            sample_list.save()
            jdata['info'] = '保存成功'
        return HttpResponse(json.dumps(jdata))

    # 导出样本列表
    if op == 'export_sample_list':
        jdata = {}
        try:
            sample_list = SampleList.objects.get(id=sample_list_id)
            suser_usernames = json.loads(sample_list.sample_list)
            print(suser_usernames)
            susers = [
                SUser.objects.get(username=suser_username)
                for suser_username in suser_usernames
            ]
            excel_name = Utils.export_user_list(susers)
            jdata['info'] = '导出成功'
            jdata['export_path'] = excel_name
        except Exception as e:
            print(e)
            jdata['info'] = '导出错误'
        return HttpResponse(json.dumps(jdata))

    # 删除样本列表
    if op == 'delete_sample_list':
        SampleList.objects.filter(id=sample_list_id).delete()
        return HttpResponse(json.dumps({'info': '删除成功'}))

    # 设置为样本
    if op == 'sample_yes':
        temp = True
        usernames = json.loads(request.POST.get('usernames'))
        for username in usernames:
            l.add(username)
        return HttpResponse(json.dumps({'user_list': get_suser_list()}))

    # 设置为非样本
    if op == 'sample_no':
        temp = True
        usernames = json.loads(request.POST.get('usernames'))
        for username in usernames:
            if username in l:
                l.remove(username)
        return HttpResponse(json.dumps({'user_list': get_suser_list()}))

    # 显示样本统计
    if op == 'show_statistic':
        jdata = {}
        try:
            field = request.POST.get('field')
            susers = [SUser.objects.get(username=username) for username in l]
            cnt = {}
            for suser in susers:
                key = eval('suser.' + field)
                if not key in cnt: cnt[key] = 0
                cnt[key] += 1
            s = ''
            length = max(sum([cnt[key] for key in cnt]), 1)
            for key in cnt:
                value = cnt[key]
                s += key + ': ' + str(value) + ' (' + str(
                    int(value / length * 100)) + '%)\n'
            jdata['res'] = s
        except Exception as e:
            print(e)
            jdata['res'] = '错误'
        return HttpResponse(json.dumps(jdata))

    if op == 'autosampling':
        jdata = {}
        try:
            constraints = json.loads(request.POST.get('constraints'))
            ratio = int(request.POST.get('ratio')) / 100.0
            cmd = 'SUser.objects.filter(~Q(username="******") & Q(is_store=False)).filter( '
            for i in range(len(constraints)):
                c = constraints[i]
                if i > 0:
                    if c[0] == 'and': cmd += ' & '
                    if c[0] == 'or': cmd += ' | '
                if c[2] == 'gt':
                    cmd += 'Q(' + c[1] + '__gt="' + c[3] + '")'
                elif c[2] == 'lt':
                    cmd += 'Q(' + c[1] + '__lt="' + c[3] + '")'
                elif c[2] == 'eq':
                    cmd += 'Q(' + c[1] + '="' + c[3] + '")'
                elif c[2] == 'neq':
                    cmd += '~Q(' + c[1] + '="' + c[3] + '")'
            cmd += ' )'
            # print(cmd)
            susers = eval(cmd)
            n_sample = math.ceil(ratio * len(susers) - 1e-7)
            susers = list(susers)
            random.shuffle(susers)
            l = set([susers[i].username for i in range(n_sample)])
            temp = True
            jdata['n_sample'] = n_sample
            jdata['user_list'] = get_suser_list()
            jdata['res'] = 'yes'
        except Exception as e:
            print(e)
            jdata['res'] = '错误'
        return HttpResponse(json.dumps(jdata))
    '''# 自动样本生成
	if op == 'auto_sample':
		# 构造命令
		constraints = json.loads(request.POST.get('constraints'))
		upperbound = request.POST.get('upperbound')
		if upperbound == '': upperbound = 100
		upperbound = float(upperbound) / 100.0
		susers = SUser.objects.filter(~Q(username='******'))
		cnt = {}
		for i in range(len(susers)):
			suser = susers[i]
			suser.is_sample = False
			suser.save()
			tag = ''
			for constraint in constraints:
				tag += eval('suser.' + SUser.__var_name__[int(constraint)]) + '&'
			if not tag in cnt: cnt[tag] = []
			cnt[tag].append(i)
		# 采样
		sampled_susers = []
		for tag in cnt:
			arr = cnt[tag]
			nn = int(math.ceil(len(arr) * upperbound))
			sampled = random.sample(arr, nn)
			for sampled_idx in sampled:
				suser = susers[sampled_idx]
				suser.is_sample = True
				suser.save()
		return HttpResponse(json.dumps({}))'''

    get_suser_list()
    return render(request, 'sample_list.html', rdata)
Exemple #20
0
def user_list(request):
    # 验证身份
    if not request.user.is_authenticated:
        return Utils.redirect_login(request)
    rdata, op, suser = Utils.get_request_basis(request)
    if not suser.admin_all:
        return render(request, 'permission_denied.html', {})

    ITEM_PER_PAGE = 50
    lis = request.GET.get('list', 'all')
    page_n = int(request.GET.get('page', 1))

    def get_suser_list():
        susers = []
        if lis == 'all':
            susers = SUser.objects.order_by('id')
        elif lis == 'sample':
            susers = SUser.objects.filter(is_sample=True).order_by('id')
        elif lis[0] == 'q':
            susers = SUser.objects.filter(username=lis[1:])
        else:
            pass
        n_susers = len(susers)
        rdata['page_current'] = page_n
        rdata['page_max'] = (n_susers - 1) // ITEM_PER_PAGE + 1
        page_s = (page_n - 1) * ITEM_PER_PAGE
        page_t = min(page_s + ITEM_PER_PAGE, n_susers)
        return [{
            'uid': suser.uid,
            'username': suser.username,
            'name': suser.name,
            'department': suser.department,
            'credit': suser.credit
        } for suser in susers[page_s:page_t]]

    # 导入
    if op == 'load':
        return HttpResponse(json.dumps({'user_list': get_suser_list()}))

    # 删除用户
    if op == 'delete':
        username_list = json.loads(request.POST.get('username_list'))
        for username in username_list:
            if username == 'root': continue
            susers = SUser.objects.filter(username=username)
            if len(susers) > 0:
                suser = susers[0]
                uid = suser.uid
                users = User.objects.filter(id=uid)
                if len(users) > 0:
                    user = users[0]
                    user.delete()
                suser.delete()
        return HttpResponse(json.dumps({'user_list': get_suser_list()}))

    # 删除所有用户
    if op == 'delete_all':
        susers = SUser.objects.filter(~Q(username='******'))
        for suser in susers:
            uid = suser.uid
            users = User.objects.filter(id=uid)
            if len(users) > 0:
                user = users[0]
                user.delete()
            suser.delete()
        return HttpResponse(json.dumps({'user_list': get_suser_list()}))

    # 添加用户
    if op == 'add_new_user':
        username = request.POST.get('username')
        # 检查username
        susers = SUser.objects.filter(username=username)
        if len(susers) > 0:
            result = '用户名已存在'
        else:
            password = username
            # password = Utils.hash_md5(username)
            user = User.objects.create_user(username=username,
                                            password=password)
            suser = SUser.objects.create(uid=user.id,
                                         username=username,
                                         nickname=username)
            result = 'yes'
        return HttpResponse(
            json.dumps({
                'result': result,
                'user_list': get_suser_list()
            }))

    # 修改积分
    if op == 'change_credit':
        username = request.POST.get('username')
        credit = request.POST.get('credit')
        suser = SUser.objects.get(username=username)
        suser.credit = credit
        suser.save()
        return HttpResponse(json.dumps({}))

    # 导入用户名单
    f = request.FILES.get('upload', None)
    if not f is None:
        f_path = Utils.upload_file(f)
        # 读入每一行
        f = codecs.open(f_path, 'r', 'gbk')
        # f = open(f_path, 'r', encoding='gbk')
        line_no = -1
        while True:
            line_no += 1
            try:
                line = f.readline()
            except:
                print(line_no, 'ignore')
                continue
            if len(line) == 0: break
            if line_no == 0: continue
            if line[-2:] == '\r\n': line = line[:-2]
            # a = line.split(',')
            a = []
            s = ''
            inquote = False
            for i in range(len(line)):
                c = line[i]
                if c == '\"':
                    if i > 0 and line[i - 1] == '\"': s += '\"'
                    inquote = not inquote
                elif c == ',' and not inquote:
                    a.append(s)
                    s = ''
                else:
                    s += c
            a.append(s)
            print(line_no)
            username = a[0]
            users = User.objects.filter(username=username)
            if len(users) > 0:
                # 修改用户信息
                suser = SUser.objects.filter(username=username).update(
                    name=a[1],
                    name_english=a[2],
                    student_type_code=a[3],
                    student_type=a[4],
                    gender_code=a[5],
                    gender=a[6],
                    birthday=a[7],
                    ethnic_code=a[8],
                    ethnic=a[9],
                    nationality_code=a[10],
                    nationality=a[11],
                    political_status_code=a[12],
                    political_status=a[13],
                    certificate_type_code=a[14],
                    certificate_type=a[15],
                    certificate_number=a[16],
                    marital_status_code=a[17],
                    marital_status=a[18],
                    original_education_code=a[19],
                    original_education=a[20],
                    bachelor_school=a[21],
                    bachelor_school_code=a[22],
                    bachelor_major=a[23],
                    bachelor_major_code=a[24],
                    bachelor_graduate_time=a[25],
                    master_school=a[26],
                    master_school_code=a[27],
                    master_major=a[28],
                    master_major_code=a[29],
                    master_graduate_time=a[30],
                    master_degree_date=a[31],
                    department_number=a[32],
                    department=a[33],
                    secondary_subject_code=a[34],
                    secondary_subject=a[35],
                    advisor_certificate_number=a[36],
                    enrollment_time=a[37],
                    scheme_time=a[38],
                    enrollment_mode_code=a[39],
                    enrollment_mode=a[40],
                    admission_type_code=a[41],
                    admission_type=a[42],
                    targeted_area_type_code=a[43],
                    targeted_area_type=a[44],
                    student_source_code=a[45],
                    student_source=a[46],
                    examination_ticket_number=a[47],
                    bachelor_student_number=a[48],
                    master_student_number=a[49],
                    origin_place_code=a[50],
                    origin_place=a[51],
                    dormitory_address=a[52],
                    dormitory_telephone=a[53],
                    original_unit=a[54],
                    client_unit=a[55],
                    email=a[56],
                    if_bed=a[57],
                    if_socialized_madicine=a[58],
                    if_resident_migration=a[59],
                    if_internal_school_roll=a[60],
                    if_national_school_roll=a[61],
                    if_school_roll_abnormity=a[62],
                    if_international_student=a[63],
                    estimated_graduate_date=a[64],
                    defense_date=a[65],
                    completion_date=a[66],
                    if_graduate=a[67],
                    completion_mode_code=a[68],
                    completion_mode=a[69],
                    graduate_certificate_number=a[70],
                    degree_confer_date=a[71],
                    degree_confer_mode_code=a[72],
                    degree_confer_mode=a[73],
                    training_type_code=a[74],
                    training_type=a[75],
                    training_direction_code=a[76],
                    training_direction=a[77],
                    disciplines_field_code=a[78],
                    disciplines_field=a[79],
                    major_code=a[80],
                    major=a[81],
                    diploma_number=a[82],
                    school_roll_status_code=a[83],
                    campus_code=a[84],
                    campus=a[85],
                    remark=a[86],
                    advisor_name=a[87],
                    special_condition_code=a[88],
                    special_condition=a[89],
                    if_primary_subject=a[90],
                    origin_province_code=a[91],
                    origin_province=a[92],
                    origin_city_code=a[93],
                    origin_city=a[94],
                    address_province_code=a[95],
                    address_province=a[96],
                    client_unit_city_code=a[97],
                    client_unit_city=a[98],
                    original_student_number=a[99],
                    abnormity_type_code=a[100],
                    abnormity_type=a[101],
                    alteration_date=a[102])
            else:
                # 新建用户信息
                password = username
                user = User.objects.create_user(username=username,
                                                password=password)
                suser = SUser.objects.create(uid=user.id,
                                             username=a[0],
                                             nickname=a[0],
                                             name=a[1],
                                             name_english=a[2],
                                             student_type_code=a[3],
                                             student_type=a[4],
                                             gender_code=a[5],
                                             gender=a[6],
                                             birthday=a[7],
                                             ethnic_code=a[8],
                                             ethnic=a[9],
                                             nationality_code=a[10],
                                             nationality=a[11],
                                             political_status_code=a[12],
                                             political_status=a[13],
                                             certificate_type_code=a[14],
                                             certificate_type=a[15],
                                             certificate_number=a[16],
                                             marital_status_code=a[17],
                                             marital_status=a[18],
                                             original_education_code=a[19],
                                             original_education=a[20],
                                             bachelor_school=a[21],
                                             bachelor_school_code=a[22],
                                             bachelor_major=a[23],
                                             bachelor_major_code=a[24],
                                             bachelor_graduate_time=a[25],
                                             master_school=a[26],
                                             master_school_code=a[27],
                                             master_major=a[28],
                                             master_major_code=a[29],
                                             master_graduate_time=a[30],
                                             master_degree_date=a[31],
                                             department_number=a[32],
                                             department=a[33],
                                             secondary_subject_code=a[34],
                                             secondary_subject=a[35],
                                             advisor_certificate_number=a[36],
                                             enrollment_time=a[37],
                                             scheme_time=a[38],
                                             enrollment_mode_code=a[39],
                                             enrollment_mode=a[40],
                                             admission_type_code=a[41],
                                             admission_type=a[42],
                                             targeted_area_type_code=a[43],
                                             targeted_area_type=a[44],
                                             student_source_code=a[45],
                                             student_source=a[46],
                                             examination_ticket_number=a[47],
                                             bachelor_student_number=a[48],
                                             master_student_number=a[49],
                                             origin_place_code=a[50],
                                             origin_place=a[51],
                                             dormitory_address=a[52],
                                             dormitory_telephone=a[53],
                                             original_unit=a[54],
                                             client_unit=a[55],
                                             email=a[56],
                                             if_bed=a[57],
                                             if_socialized_madicine=a[58],
                                             if_resident_migration=a[59],
                                             if_internal_school_roll=a[60],
                                             if_national_school_roll=a[61],
                                             if_school_roll_abnormity=a[62],
                                             if_international_student=a[63],
                                             estimated_graduate_date=a[64],
                                             defense_date=a[65],
                                             completion_date=a[66],
                                             if_graduate=a[67],
                                             completion_mode_code=a[68],
                                             completion_mode=a[69],
                                             graduate_certificate_number=a[70],
                                             degree_confer_date=a[71],
                                             degree_confer_mode_code=a[72],
                                             degree_confer_mode=a[73],
                                             training_type_code=a[74],
                                             training_type=a[75],
                                             training_direction_code=a[76],
                                             training_direction=a[77],
                                             disciplines_field_code=a[78],
                                             disciplines_field=a[79],
                                             major_code=a[80],
                                             major=a[81],
                                             diploma_number=a[82],
                                             school_roll_status_code=a[83],
                                             campus_code=a[84],
                                             campus=a[85],
                                             remark=a[86],
                                             advisor_name=a[87],
                                             special_condition_code=a[88],
                                             special_condition=a[89],
                                             if_primary_subject=a[90],
                                             origin_province_code=a[91],
                                             origin_province=a[92],
                                             origin_city_code=a[93],
                                             origin_city=a[94],
                                             address_province_code=a[95],
                                             address_province=a[96],
                                             client_unit_city_code=a[97],
                                             client_unit_city=a[98],
                                             original_student_number=a[99],
                                             abnormity_type_code=a[100],
                                             abnormity_type=a[101],
                                             alteration_date=a[102])
        f.close()

    # 导出用户名单
    if op == 'export':
        size = request.POST.get('size')
        if size == 'all':
            susers = SUser.objects.all()
        elif size == 'sample':
            susers = SUser.objects.filter(is_sample=True)
        else:
            susers = []
        excel_name = Utils.export_user_list(susers)
        return HttpResponse(json.dumps({'export_path': excel_name}))

    get_suser_list()
    return render(request, 'user_list.html', rdata)