| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760 |
- #coding=utf-8
- '''
- '''
- import os,re
- import json,time,datetime
- import shutil
- import tempfile
- import zipfile
- from docxtpl import DocxTemplate,InlineImage
- from docx.shared import Mm
- from django.db import transaction
- from django.conf import settings
- import common.models as cm
- import common.error_info as ce
- import common.common_functions as ccf
- import common.common_control as ccc
- import account.password_handle as ph
- from utils.exceltool import ExcelTool
- from utils.exceltool import ExcelTool
- from django.db.models import Q
- from PIL import Image
- from PIL import Image,ImageDraw,ImageFont
- import xlrd
- import xlwt
- from xlutils.copy import copy
- from xltpl.writer import BookWriter
- def thumbnail_pic(fpath):
- """
- """
- im=Image.open(fpath)
- im.thumbnail((300,400))
- thumb_name = os.path.splitext(fpath)[0]+"_thumb"+os.path.splitext(fpath)[-1]
- im.save(thumb_name,'png')
- return thumb_name
- def render_xls_tpl(tpl,data,out):
- """
- """
- stime = time.time()
- writer = BookWriter(tpl)
- writer.jinja_env.globals.update(dir=dir, getattr=getattr)
- payloads = {"tpl_name":"Sheet1","sheet_name":"Sheet1","ctx":data}
- writer.render_book2(payloads=[payloads])
- #writer.render_book([payloads])
- writer.save(out)
- def get_index_data(request):
- """
- """
- qset = cm.Category.objects.all()
- qdata = list(qset.values())
- for i,qd in enumerate(qdata):
- if i<6:
- qd["type"] = "nav"
- else:
- qd["type"] = "article"
- qd["list"] = list(cm.Article.objects.filter(category__id=qd["id"]).values())
- if qd["name"]==u"头条通知":
- qd["type"] = "notice"
- qd["list"] = list(cm.Article.objects.filter(category__id=qd["id"]).values())
- if "{id}" in qd["path"]:
- artcs = list(cm.Article.objects.filter(category__id=qd["id"]).order_by("order").values())
- aid = artcs[0]["id"] if artcs else 0
- qd["path"] = qd["path"].replace("{id}",str(aid))
- return qdata
- def get_article_info(request):
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- data = list(cm.Article.objects.filter(id=id).values())
- data = data[0] if data else {}
- #data["imgs"] = ["https://www.scxjc.club/images/jgjj.png","https://www.scxjc.club/images/jgjj.png"]
- data["imgs"] = json.loads(data["imgs"]) if data["imgs"] else []
- data["phone"] = "0827-8589102"
- data["address"] = u"巴中市江北车站三楼(体检门诊第一个办公室)"
- data["point"] = "106.755094,31.866028"
- return data
- def get_intro_info(request):
- """考场和联系我们专用
- """
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- data = {"id":"1","title":"sfsfd","content":"","ctime":"2020-01-01 00:00:01"}
- data = {"id":1,"title":u"联系我们","phone":"0827-8589102","address":u"巴中市江北车站三楼(体检门诊第一个办公室)","imgs":["https://www.scxjc.club/images/jgjj.png","https://www.scxjc.club/images/jgjj.png"],"content":u"详情...."}
- return data
- def get_signup_list(request):
- """
- """
- data = [
- {"relaname":u"肖小肖",
- "phone":"15982456282",
- "class_name":u"一班",
- "class_id":1,
- "subject_item":u"安全生产管理|电工作业|高压电工",
- "class_hour":30,
- "class_hour_finished":10,
- "train_type":u"新办",
- "order_status":0,
- "ctime":"2020-05-05 22:11:12",
- "id":1
- }
- ]
- uid = request.user.id
- #qset = cm.SignupOrders.objects.filter(user_id=uid).order_by("-id")
- qset = cm.SignupOrders.objects.order_by("-id")
- qdata = list(qset.values())
- for qd in qdata:
- qd["subject_item"] = u"特种作业|电工|高压电工"
- qd["class_name"] = cm.Class.objects.filter(id=qd["class_id"]).first().name
- qd["class_hour"] = cm.Class.objects.filter(id=qd["class_id"]).first().class_hour
- return qdata
- def get_signup_info(request):
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- data = list(cm.SignupOrders.objects.filter(id=id).values())
- data = data[0] if data else {}
- if data.get("idnoimg_face"):
- data["idnoimg_face"] = data["idnoimg_face"] + "?t=" + str(time.time())
- if data.get("idnoimg_back"):
- data["idnoimg_back"] = data["idnoimg_back"] + "?t=" + str(time.time())
- if data.get("halfbody_img"):
- data["halfbody_img"] = data["halfbody_img"] + "?t=" + str(time.time())
- if data.get("oldcard_img"):
- data["oldcard_img"] = data["oldcard_img"] + "?t=" + str(time.time())
- return data
- def get_paper_info(request):
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- data = list(cm.Papers.objects.filter(id=id).values())
- data = data[0] if data else {}
- if data:
- questions = cm.Papers.objects.filter(id=id).first().questions.all()
- q_sel = list(questions.filter(qtype=1).values())
- q_msel = list(questions.filter(qtype=2).values())
- q_tf = list(questions.filter(qtype=3).values())
- qdata = [
- {"title":u"一、单选题(每题1分、共{}题)".format(len(q_sel)),"questions":q_sel},
- {"title":u"二、多选题(每题1分、共{}题)".format(len(q_msel)),"questions":q_msel},
- {"title":u"三、判断题(每题1分、共{}题)".format(len(q_tf)),"questions":q_tf}
- ]
- data["questions"] = qdata
-
- return data
- def get_class_list(request):
- """
- """
- qdata = request.json
- qset = cm.Class.objects.filter(status=1)
- if qdata.get("name"):
- qset = qset.filter(name__icontains=qdata.get("name"))
- if qdata.get("subject_item"):
- qset = qset.filter(subject_item__icontains=qdata.get("subject_item"))
- #分页
- page = qdata.get("page",1)
- page_size = qdata.get("page_size",20)
- total,qset = ccc.get_page_qset(qset,page,page_size)
- data = list(qset.values())
- for d in data:
- d["signuped_count"] = cm.SignupOrders.objects.filter(class_id=d["id"]).count()
- return total,data
- def get_category_list(request):
- """
- """
- qdata = request.json
- qset = cm.Category.objects.filter(status=1)
- #分页
- page = qdata.get("page",1)
- page_size = qdata.get("page_size",20)
- total,qset = ccc.get_page_qset(qset,page,page_size)
- data = list(qset.values())
- return total,data
- def get_article_list(request):
- """
- """
- qdata = request.json
- qset = cm.Article.objects.filter(status=1)
- if qdata.get("title"):
- qset = qset.filter(title__icontains=qdata.get("title"))
- #分页
- page = qdata.get("page",1)
- page_size = qdata.get("page_size",20)
- total,qset = ccc.get_page_qset(qset,page,page_size)
- data = list(qset.values())
- return total,data
- def get_account_list(request):
- """
- """
- qdata = request.json
- qset = cm.UserInfo.objects.filter(utype=1)
- #分页
- page = qdata.get("page",1)
- page_size = qdata.get("page_size",20)
- total,qset = ccc.get_page_qset(qset,page,page_size)
- data = list(qset.values())
- return total,data
- def get_user_list(request):
- """
- """
- qdata = request.json
- qset = cm.UserInfo.objects.filter(utype=2).order_by("-ctime")
- #分页
- page = qdata.get("page",1)
- page_size = qdata.get("page_size",20)
- total,qset = ccc.get_page_qset(qset,page,page_size)
- data = list(qset.values())
- return total,data
- def get_paper_list(request):
- """
- """
- qdata = request.json
- qset = cm.Papers.objects.all()
- #分页
- page = qdata.get("page",1)
- page_size = qdata.get("page_size",20)
- total,qset = ccc.get_page_qset(qset,page,page_size)
- data = list(qset.values())
- for item in data:
- id = item["id"]
- item["questions_count"] = cm.Papers.objects.filter(id=id).first().questions.all().count()
- return total,data
- def get_video_list(request):
- """
- """
- qdata = request.json
- qset = cm.Videos.objects.all()
- #分页
- page = qdata.get("page",1)
- page_size = qdata.get("page_size",20)
- total,qset = ccc.get_page_qset(qset,page,page_size)
- data = list(qset.values())
- return total,data
- def get_subject_item(subject_id):
- """
- """
- data = []
- for sid in subject_id:
- tmp = []
- for ssid in sid:
- tmp.append(cm.Subject.objects.filter(id=ssid).first().name)
- data.append("|".join(tmp))
- return ",".join(data)
- def add_class(request):
- uid = request.user.id
- qdata = request.json
- #need_params = ["name","subject_id","subject_item","signup_limit","remark"]
- #need_params = ["name","subject_id","subject_item","signup_limit","remark"]
- need_params = ["name","subject_id","signup_limit","remark"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.append("subject_id")
- need_params.append("remind")
- vals = ccf.get_need_params(*need_params,**qdata)
- subject_id = vals["subject_id"]
- vals["cid"] = uid
- vals["subject_id"] = json.dumps(vals["subject_id"])
- vals["subject_item"] = get_subject_item(subject_id)
- #vals["subject_name"] = vals["subject_item"].split("|")[0]
- obj = cm.Class.objects.create(**vals)
- return obj.id
- def get_docs_info(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Docs.objects.filter(id=id).values().first()
- return obj
- def get_docs_list(request):
- """
- """
- qdata = request.json
- qset = cm.Docs.objects.all()
- #分页
- page = qdata.get("page",1)
- page_size = qdata.get("page_size",20)
- total,qset = ccc.get_page_qset(qset,page,page_size)
- data = list(qset.values())
- return total,data
- def add_docs(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["name","url"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- vals = ccf.get_need_params(*need_params,**qdata)
- obj = cm.Docs.objects.create(**vals)
- return obj.id
- def update_docs(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["name","url"])
- vals = ccf.get_need_params(*need_params,**qdata)
- id = vals.pop("id")
- obj = cm.Docs.objects.filter(id=id).update(**vals)
- return id
- def delete_docs(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Docs.objects.filter(id=id).delete()
- return id
- def add_video(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["title","subject_id","subject_item","train_type","img","url"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- vals = ccf.get_need_params(*need_params,**qdata)
- obj = cm.Videos.objects.create(**vals)
- return obj.id
- def update_video(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["title","subject_id","subject_item","train_type","img","url"])
- vals = ccf.get_need_params(*need_params,**qdata)
- id = vals.pop("id")
- obj = cm.Videos.objects.filter(id=id).update(**vals)
- return id
- def delete_video(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Videos.objects.filter(id=id).delete()
- return id
- def delete_paper(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- paper = cm.Papers.objects.filter(id=id).first()
- paper.questions.all().delete()
- obj = cm.Papers.objects.filter(id=id).delete()
- return id
- def get_video_info(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Videos.objects.filter(id=id).values().first()
- return obj
- def add_category(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["name"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["order","desc"])
- vals = ccf.get_need_params(*need_params,**qdata)
- vals["cid"] = uid
- obj = cm.Category.objects.create(**vals)
- return obj.id
- def add_article(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["title","category_id","content"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["imgs","address","point"])
- vals = ccf.get_need_params(*need_params,**qdata)
- vals["imgs"] = json.dumps(vals["imgs"])
- vals["cid"] = uid
- obj = cm.Article.objects.create(**vals)
- return obj.id
- def add_article(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["title","category_id","content"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["imgs","address","point"])
- vals = ccf.get_need_params(*need_params,**qdata)
- vals["imgs"] = json.dumps(vals["imgs"])
- vals["cid"] = uid
- obj = cm.Article.objects.create(**vals)
- return obj.id
- def add_account(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["name","realname","password","repassword","phone"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.append("permissions")
- vals = ccf.get_need_params(*need_params,**qdata)
- vals.pop("repassword")
- vals["password"] = ph.make_password(vals["password"])
- vals["cid"] = uid
- vals["utype"] = 1
- obj = cm.UserInfo.objects.create(**vals)
- return obj.id
- def update_class(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["name","subject_id","subject_item","signup_limit","remark","remind"])
- vals = ccf.get_need_params(*need_params,**qdata)
- id = vals.pop("id")
- vals["cid"] = uid
- subject_id = vals["subject_id"]
- vals["subject_id"] = json.dumps(vals["subject_id"])
- vals["subject_item"] = get_subject_item(subject_id)
- #vals["subject_name"] = vals["subject_item"].split("|")[0]
- obj = cm.Class.objects.filter(id=id).update(**vals)
- return obj
- def update_account(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- #need_params.extend(["name","realname","password","repassword","phone","permissions"])
- need_params.extend(["name","realname","phone","permissions"])
- vals = ccf.get_need_params(*need_params,**qdata)
- id = vals.pop("id")
- #vals.pop("repassword")
- #vals["password"] = ph.make_password(vals["password"])
- vals["cid"] = uid
- obj = cm.UserInfo.objects.filter(id=id).update(**vals)
- return obj
- def update_article(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["title","category_id","content","imgs","address","point","phone"])
- vals = ccf.get_need_params(*need_params,**qdata)
- id = vals.pop("id")
- vals["imgs"] = json.dumps(vals["imgs"])
- vals["cid"] = uid
- obj = cm.Article.objects.filter(id=id).update(**vals)
- return obj
- def update_category(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["name","order","desc"])
- vals = ccf.get_need_params(*need_params,**qdata)
- id = vals.pop("id")
- vals["cid"] = uid
- obj = cm.Category.objects.filter(id=id).update(**vals)
- return obj
- def get_class_info(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Class.objects.filter(id=id).values().first()
- obj["subject_id"] = json.loads(obj["subject_id"])
- return obj
- def get_account_info(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.UserInfo.objects.filter(id=id).values().first()
- return obj
- def get_user_info(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.UserInfo.objects.filter(id=id).values().first()
- return obj
- def get_article_info(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Article.objects.filter(id=id).values().first()
- obj["imgs"] = json.loads(obj["imgs"]) if obj["imgs"] else []
- return obj
- def delete_class(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Class.objects.filter(id=id).delete()
- return id
- def delete_category(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Category.objects.filter(id=id).delete()
- return id
- def delete_account(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.UserInfo.objects.filter(id=id).delete()
- return id
- def delete_article(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Article.objects.filter(id=id).delete()
- return id
- def get_category_info(request):
- """
- """
- uid = request.user.id
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- obj = cm.Category.objects.filter(id=id).values().first()
- return obj
- def get_training_list(request):
- """
- """
- data = {
- "videos":[{
- "title":u"高压电工实操课程",
- "image":u"https://www.scxjc.club/images/jgjj.png",
- "url":u"https://www.scxjc.club/demo.mp4",
- "class_hour":20,
- "total_time":"45:32",
- "finished_time":"30:32",
- "status":1
- }],
- "papers":[{
- "id":1,
- "title":u"高压电工实操模拟试题",
- "class_hour":20,
- "full_mark":100,
- "time_limit":60,
- "mark":90,
- "status":1
- }]
- }
- return data
- def get_paper_info1(request):
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- data = {
- "id":1,
- "title":u"高压电工实操模拟试题",
- "class_hour":20,
- "full_mark":100,
- "time_limit":60,
- "mark":90,
- "status":1,
- "questions":[
- {
- "id":1,
- "type":1,
- "title":u"欧姆定律是什么",
- "options":[u"A、电阻",u"B、电流"],
- "stand_answer":"A",
- "myanswer":"A"
- },
- {
- "id":2,
- "type":2,
- "title":u"欧姆定律是什么",
- "options":[u"A、电阻",u"B、电流"],
- "stand_answer":["A","B"],
- "myanswer":["A","B"]
- },
- {
- "id":3,
- "type":3,
- "title":u"电流等于电压除电阻",
- "options":[u"对",u"错"],
- "stand_answer":[u"对"],
- "myanswer":[u"对"]
- }
- ]
- }
- return data
- def add_signup(request):
- """
- """
- uid = request.user.id
- #uid = 15
- qdata = request.json
- need_params = ["name","sex","idno","education","phone",
- "train_type","receive_card","price"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["company","class_id","remark","idnoimg_face","idnoimg_back","halfbody_img","education_img","oldcard_img","area","address","subject_id","subject_item"])
- vals = ccf.get_need_params(*need_params,**qdata)
- vals["cid"] = uid
- vals["user_id"] = uid
- vals["order_status"] = 0
- vals["subject_item"] = cm.Class.objects.filter(id=vals["class_id"]).first().subject_item
- obj = cm.SignupOrders.objects.create(**vals)
- return obj.id
- def update_signup(request):
- """
- """
- uid = request.user.id
- #uid = 15
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- _id = qdata.pop("id")
- ids = str(_id).split(",")
- need_params.extend(["name","sex","idno","education","phone","train_type",
- "receive_card","area","price","company","class_id","remark","idnoimg_face",
- "idnoimg_back","halfbody_img","education_img","oldcard_img","admin_remark",
- "subject_item","subject_id","address","exam_time","classhour_cert_status","health_img"])
- vals = ccf.get_need_params(*need_params,**qdata)
- if vals.get("idnoimg_face") and "?" in vals["idnoimg_face"]:
- vals["idnoimg_face"] = vals["idnoimg_face"].split("?")[0]
- if vals.get("idnoimg_back") and "?" in vals["idnoimg_back"]:
- vals["idnoimg_back"] = vals["idnoimg_back"].split("?")[0]
- if vals.get("halfbody_img") and "?" in vals["halfbody_img"]:
- vals["halfbody_img"] = vals["halfbody_img"].split("?")[0]
- if vals.get("education_img") and "?" in vals["education_img"]:
- vals["education_img"] = vals["education_img"].split("?")[0]
- if vals.get("oldcard_img") and "?" in vals["oldcard_img"]:
- vals["oldcard_img"] = vals["oldcard_img"].split("?")[0]
- if vals.get("health_img") and "?" in vals["health_img"]:
- vals["health_img"] = vals["health_img"].split("?")[0]
- if vals.get("classhour_cert_status"):
- vals["order_status"] = 7
- if qdata.get("train_time"):
- vals["train_time_start"] = qdata.get("train_time").split(",")[0]
- vals["train_time_end"] = qdata.get("train_time").split(",")[1]
- #发送培训通知
- from utils.aliyun_sms import send_training_notice,send_training_notice_special
- import common.common_notice as cn
- sorders = cm.SignupOrders.objects.filter(id__in=ids)
- for so in sorders:
- user_id = so.user_id
- phone = so.phone
- subject_item = so.subject_item.split("|")[-1]
- begin_time = vals["train_time_start"]
- end_time = vals["train_time_end"]
- if u"特种作业" in subject_item:
- send_training_notice_special(phone,subject_item,begin_time,end_time)
- cn.send_training_notice_special(user_id,subject_item,begin_time,end_time)
- else:
- send_training_notice(phone,subject_item,begin_time,end_time)
- cn.send_training_notice(user_id,subject_item,begin_time,end_time)
- #更新用户信息
- uid = cm.SignupOrders.objects.filter(id=_id).first().user_id
- userinfo = cm.UserInfo.objects.filter(id=uid).first().userinfo
- userinfo = json.loads(userinfo) if userinfo else {}
- #if userinfo:
- # vals.update(userinfo)
- userinfo.update(vals)
- cm.UserInfo.objects.filter(id=uid).update(userinfo=json.dumps(userinfo))
- vals["cid"] = uid
- vals["update_time"] = datetime.datetime.now()
- subject_id = vals.get("subject_id")
- train_type = vals.get("train_type")
- subject_item = cm.Subject.objects.filter(id=subject_id).first()
- if subject_item:
- if train_type == "新办":
- vals["price"] = subject_item.price_new
- if train_type == "复审":
- vals["price"] = subject_item.price_re
- if train_type == "换证":
- vals["price"] = subject_item.price_change
- obj = cm.SignupOrders.objects.filter(id__in=ids).update(**vals)
- if qdata.get("exam_time"):
- #发送培训通知
- from utils.aliyun_sms import send_exam_notice
- import common.common_notice as cn
- sorders = cm.SignupOrders.objects.filter(id__in=ids)
- for so in sorders:
- name = so.name
- user_id = so.user_id
- phone = so.phone
- subject_item = so.subject_item.split("|")[-1]
- exam_time = vals["exam_time"]
- send_exam_notice(phone,name,subject_item,exam_time)
- cn.send_exam_notice(user_id,name,subject_item,exam_time)
- return obj
- def delete_signup(request):
- """
- """
- uid = request.user.id
- #uid = 15
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- rst = cm.SignupOrders.objects.filter(id=id).delete()
- return id
- def get_yrxindex(request):
- """
- """
- recs = cm.ClassRoom.objects.all()
- recs = list(recs.values())
- teachers = [{
- "name":u"肖老师",
- "avatar":"肖老师",
- "lessons_count":2,
- "students":200
- }]
- data = {
- "rec":recs,
- "lessons":recs,
- "teachers":teachers
- }
- return data
- def get_yrxlist(request):
- """
- """
- recs = cm.ClassRoom.objects.all()
- recs = list(recs.values())
- teachers = [{
- "name":u"肖老师",
- "avatar":"肖老师",
- "lessons_count":2,
- "students":200
- }]
- data = {
- "rec":recs,
- "lessons":recs,
- "teachers":teachers
- }
- return recs
- def get_yrxdetail(request):
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- data = list(cm.ClassRoom.objects.filter(id=id).values())
- data = data[0] if data else {}
- if data:
- lessons = list(cm.Lessons.objects.filter(classroom_id=id).values())
- data["lessons"] = lessons
- return data
- def get_subject_tree(sub=None,data=None):
- """
- """
- if sub:
- roots = list(cm.Subject.objects.filter(pid=sub).values())
- for citem in roots:
- citem["device_cats"] = json.loads(citem["device_cats"]) if citem["device_cats"] else []
- else:
- roots = list(cm.Subject.objects.filter(Q(pid=0)|Q(pid__isnull=True)).values())
- for citem in roots:
- citem["device_cats"] = json.loads(citem["device_cats"]) if citem["device_cats"] else []
- for rn in roots:
- rn["label"] = rn["name"]
- rn["value"] = rn["id"]
- children = list(cm.Subject.objects.filter(pid=rn["id"]).values())
- for citem in children:
- citem["label"] = citem["name"]
- citem["value"] = citem["id"]
- citem["device_cats"] = json.loads(citem["device_cats"]) if citem["device_cats"] else []
- rn["children"] = children
- for rnn in rn["children"]:
- children = list(cm.Subject.objects.filter(pid=rnn["id"]).values())
- for citem in children:
- citem["label"] = citem["name"]
- citem["value"] = citem["id"]
- citem["device_cats"] = json.loads(citem["device_cats"]) if citem["device_cats"] else []
- rnn["children"] = children
- return roots
- def get_subjectitem_tree(request):
- """
- """
- qdata = request.json
- subject_id = qdata.get("subject_id")
- data = get_subject_tree(subject_id)
- return data
- def post_paper(request):
- qdata = request.json
- need_params = ["paper_id","questions"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- paper_id = qdata.get("paper_id")
- return True
- def save_video_time(request):
- qdata = request.json
- need_params = ["video_id","time"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- paper_id = qdata.get("paper_id")
- return True
- #def do_signup_pay(request):
- # qdata = request.json
- # need_params = ["signup_id","total_fee"]
- # mse = ccf.check_params(*need_params,**qdata)
- # if mse:
- # raise ce.TipException(mse)
- # signup_id = str(qdata.get("signup_id"))+str(int(time.time()))
- # total_fee = str(qdata.get("total_fee")*100)
- # #openid = "ow7pX46fM1xAVgCHH5eNcxkurRks"
- # openid = request.user.openid
- # prepayinfo = wxpay.get_wx_unifiedorder(signup_id,total_fee,openid)
- # prepayinfo["key"] = "kAHuCc2g4MINcLRk3o0lxT6J1Z04WuZq"
- # return prepayinfo
- def add_subject(request):
- """
- """
- qdata = request.json
- need_params = ["name","price_change","price_new","price_re"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- need_params.extend(["order","intro","pid","class_hour","update_class_hour","change_class_hour"])
- vals = ccf.get_need_params(*need_params,**qdata)
- vals["cid"] = request.user.id
- vals["cperson"] = request.user.name
- obj = cm.Subject.objects.create(**vals)
- return obj.id
- def update_subject(request):
- """
- """
- qdata = request.json
- need_params = ["id","name","price_change","price_new","price_re"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- need_params.extend(["order","pid","intro","class_hour","update_class_hour","change_class_hour","device_cats"])
- vals = ccf.get_need_params(*need_params,**qdata)
- vals["device_cats"] = json.dumps(vals["device_cats"])
- vals["cid"] = request.user.id
- vals["cperson"] = request.user.name
- rst = cm.Subject.objects.filter(id=id).update(**vals)
- return id
- def delete_subject(request):
- """
- """
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- rst = cm.Subject.objects.filter(id=id).delete()
- return id
- def get_subject_info(request):
- """
- """
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- id = qdata.get("id")
- rst = cm.Subject.objects.filter(id=id).values().first()
- return rst
- def get_subject_ids(subject_id,data=None):
- """
- """
- data = data if data else []
- data.append(int(subject_id))
- #subobj = cm.Subject.objects.filter(pid=subject_id).first()
- subobjs = cm.Subject.objects.filter(pid=subject_id)
- for subobj in subobjs:
- get_subject_ids(subobj.id,data)
- return data
- def get_signup_list(request):
- """
- """
- uid = request.user.id
- qdata = request.json
- qset = cm.SignupOrders.objects.filter(status=1).order_by("-update_time")
- if qdata.get("train_type"):
- qset = qset.filter(train_type=qdata.get("train_type"))
- if qdata.get("subject_item"):
- subject_item = qdata.get("subject_item").split("|")[-1]
- subject_id = cm.Subject.objects.filter(name=subject_item).first().id
- subject_ids = get_subject_ids(subject_id)
- #qset = qset.filter(subject_item__icontains=qdata.get("subject_item"))
- qset = qset.filter(subject_id__in=subject_ids)
- if qdata.get("name"):
- qset = qset.filter(name__icontains=qdata.get("name"))
- if qdata.get("idno"):
- qset = qset.filter(idno__icontains=qdata.get("idno"))
- if qdata.get("phone"):
- qset = qset.filter(phone__icontains=qdata.get("phone"))
- if qdata.get("signup_time"):
- stime = ccf.str_to_datetime(qdata.get("signup_time").split(",")[0],"%Y-%m-%d %H:%M:%S")
- etime = ccf.str_to_datetime(qdata.get("signup_time").split(",")[1],"%Y-%m-%d %H:%M%:%S")
- qset = qset.filter(ctime__gte=stime,ctime__lte=etime)
- if qdata.get("bill_type"):
- qset = qset.filter(bill_type=qdata.get("bill_type"))
- if qdata.get("receive_card"):
- qset = qset.filter(receive_card=qdata.get("receive_card"))
- if qdata.get("set_exam_time"):
- if qdata.get("set_exam_time") == 1:
- qset = qset.filter(exam_time__isnull=False)
- else:
- qset = qset.filter(exam_time__isnull=True)
- if qdata.get("exam_time"):
- qset = qset.filter(exam_time=qdata.get("exam_time"))
- if qdata.get("set_train_time"):
- if qdata.get("set_train_time") == 1:
- qset = qset.filter(train_time__isnull=False)
- else:
- qset = qset.filter(train_time__isnull=True)
- if qdata.get("train_time"):
- stime = ccf.str_to_datetime(qdata.get("train_time").split(",")[0],"%Y-%m-%d")
- etime = ccf.str_to_datetime(qdata.get("train_time").split(",")[1],"%Y-%m-%d")
- qset = qset.filter(train_time_start__gte=stime,train_time_end__lte=etime)
- if qdata.get("company"):
- qset = qset.filter(company__icontains=qdata.get("company"))
- if qdata.get("order_status"):
- qset = qset.filter(order_status=qdata.get("order_status"))
- if qdata.get("class_id"):
- qset = qset.filter(class_id=qdata.get("class_id"))
- qset1 = qset.filter(status=1).exclude(order_status=7).order_by("-update_time")
- qset2 = qset.filter(status=1,order_status=7).order_by("-update_time")
- data = list(qset1.values())+list(qset2.values())
- page = int(qdata.get("page",1))
- page_size = int(qdata.get("page_size",20))
- #total,qset = ccc.get_page_qset(qset,page,page_size)
- total,data = ccf.get_page_list(data,page,page_size)
- #data = list(qset.values("name","phone","order_status","remark","subject_item","train_type","ctime","id"))
- #data = list(qset.values())
- for d in data:
- if d["train_time_start"] and d["train_time_end"]:
- d["train_time"] = ccf.datetime_to_str(d["train_time_start"])+","+ccf.datetime_to_str(d["train_time_end"])
- else:
- d["train_time"] = ""
- try:
- d["subject_item0"] = d["subject_item"].split("|")[0]
- except:
- d["subject_item0"] = ""
- try:
- d["subject_item1"] = d["subject_item"].split("|")[1]
- except:
- d["subject_item1"] = ""
- try:
- d["subject_item2"] = d["subject_item"].split("|")[2]
- except:
- d["subject_item2"] = ""
- d["verify"] = cm.UserInfo.objects.filter(id=uid).first().verify
- d["signup_time"] = d["pay_time"]
- try:
- d["class_name"] = cm.Class.objects.filter(id=d["class_id"]).first().name
- except:
- d["class_name"] = ""
- return total,data
- #def get_subject_ids(subject_id,data=None):
- # """
- # """
- # data = data if data else []
- # data.append(int(subject_id))
- # subobj = cm.Subject.objects.filter(id=subject_id).first()
- # if subobj and int(subobj.pid):
- # get_subject_ids(subobj.pid,data)
- # return data
- #def get_signup_info(request):
- # """
- # """
- # qdata = request.json
- # need_params = ["id"]
- # mse = ccf.check_params(*need_params,**qdata)
- # if mse:
- # raise ce.TipException(mse)
- # id = qdata.get("id")
- # print id,888888888888888
- # rst = cm.SignupOrders.objects.filter(id=id).values().first()
- # print rst,99999999999999
- # print rst["subject_id"],777777777777777
- # subject_ids = get_subject_ids(rst["subject_id"])
- # subject_ids.sort()
- # rst["subject_ids"] = subject_ids
- # rst["order_no"] = "yf1212"
- # rst["order_time"] = "2020-05-19 11:22:22"
- # rst["pay_status"] = 1
- # rst["pay_status"] = 1
- # rst["total_fee"] = 1000
- # rst["get_card_time"] = "2020-05-19 11:22:22"
- # rst["review_card_time"] = "2020-05-19 11:22:22"
- # rst["change_card_time"] = "2020-05-19 11:22:22"
- # return rst
- def addText(img,orgpath,string,path,point=(100,100),size=32):
- draw = ImageDraw.Draw(img)
- fontpath = os.path.join(settings.BASE_DIR,"templates/font/simsun.ttc")
- #fontpath = os.path.join(settings.BASE_DIR,"templates/font/consola.ttf")
- font = ImageFont.truetype(fontpath, size,encoding="unic")
- draw.text(point,string,fill='black',font=font)
- img.save(path)
- def update_signup_state(request):
- uid = request.user.id
- qdata = request.json
- need_params = ["id","order_status"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- vals = ccf.get_need_params(*need_params,**qdata)
- ids = vals.pop("id").split(",")
- minx = cm.SignupOrders.objects.filter(id__in=ids).order_by("order_status").first().order_status
- if vals.get("order_status") < minx and vals.get("order_status")!=-2:
- raise ce.TipException(u"非法操作!")
- if vals.get("order_status"):
- if int(vals.get("order_status")) > 0:
- cm.UserInfo.objects.filter(id=uid).update(verify=1)
- #正向操作顺序验证
- sx_flag = False
- sx_status_dct = {-1:[0,-1],0:[1,-2,0],1:[2,1],2:[3,2],3:[7,3],7:[9,7]}
- sorders = cm.SignupOrders.objects.filter(id__in=ids)
- for so in sorders:
- cur_status = so.order_status
- if not vals.get("order_status") in sx_status_dct[cur_status]:
- sx_flag = True
- if sx_flag:
- raise ce.TipException(u"非法操作!")
- #审核通过发送支付通知
- vals["update_time"] = datetime.datetime.now()
- rst = cm.SignupOrders.objects.filter(id__in=ids).update(**vals)
- if int(vals.get("order_status")) == 1:
- from utils.aliyun_sms import send_audit_notice
- import common.common_notice as cn
- for item in cm.SignupOrders.objects.filter(id__in=ids):
- user_id = item.user_id
- phone = item.phone
- subject_item0 = item.subject_item.split("|")[-1]
- send_audit_notice(phone,subject_item0)
- cn.send_audit_notice(user_id,item.subject_item.split("|")[-1])
- if int(vals.get("order_status")) == -2:
- from utils.aliyun_sms import send_unauthed_notice
- import common.common_notice as cn
- for item in cm.SignupOrders.objects.filter(id__in=ids):
- user_id = item.user_id
- phone = item.phone
- send_unauthed_notice(phone)
- cn.send_unauthed_notice(user_id)
- if str(vals.get("order_status")) == "3":
- #root_target = os.path.join(settings.BASE_DIR,"../static/upload")
- root_target = os.path.join(settings.STATIC_ROOT,"upload")
- root = os.path.join(settings.BASE_DIR,"templates")
- class_hour_tpl = os.path.join(root,"classhour.png")
- signuporders = cm.SignupOrders.objects.filter(id__in=ids)
- for so in signuporders:
- subject_item = so.subject_item
- subject_item0 = subject_item.split("|")[0]
- subject_item1 = subject_item.split("|")[1]
- subject_item2 = subject_item.split("|")[2]
- train_type = so.train_type
- name = so.name
- subject = cm.Subject.objects.filter(id=so.subject_id).first()
- if train_type == u"新办":
- total_classhour = subject.class_hour
- elif train_type == u"复审":
- total_classhour = subject.update_class_hour
- else:
- total_classhour = subject.change_class_hour
- class_hour_file = os.path.join(root_target,"classhour{}.png".format(so.id))
- #
- img = Image.open(class_hour_tpl)
- addText(img,class_hour_tpl,unicode("巴中逸沣安全培训学时证明","utf-8"),class_hour_file,(160,65),24)
- addText(img,class_hour_tpl,unicode("姓名:{}".format(name),"utf-8"),class_hour_file,(80,100),20)
- addText(img,class_hour_tpl,unicode("工种:{}".format(subject_item0),"utf-8"),class_hour_file,(80,130),20)
- addText(img,class_hour_tpl,unicode("操作类型:{}".format(subject_item1),"utf-8"),class_hour_file,(80,160),20)
- addText(img,class_hour_tpl,unicode("准操项目:{}".format(subject_item2),"utf-8"),class_hour_file,(80,190),20)
- addText(img,class_hour_tpl,unicode("培训类型:{}".format(train_type),"utf-8"),class_hour_file,(80,220),20)
- addText(img,class_hour_tpl,unicode("总学时:{}".format(total_classhour),"utf-8"),class_hour_file,(80,250),20)
- addText(img,class_hour_tpl,unicode("已完成学时:{}".format(total_classhour),"utf-8"),class_hour_file,(80,280),20)
- url = "https://wxapi.yifeng2016.com/upload" + class_hour_file.replace(root_target,"")
- so.classhour_cert_url = url
- so.update_time = datetime.datetime.now()
- so.save()
- #考试完成记录复审和换证时间
- if str(vals.get("order_status")) == "7":
- now = datetime.datetime.now().date()
- signuporders = cm.SignupOrders.objects.filter(id__in=ids)
- for so in signuporders:
- subject_item = so.subject_item
- subject_item0 = subject_item.split("|")[0]
- #特种作业复审3年,换证6年
- if u"特种作业" in subject_item0:
- #so.update_time = now + datetime.timedelta(days=3*365)
- so.change_time = now + datetime.timedelta(days=6*365)
- #换证3年每年复审
- else:
- #so.update_time = now + datetime.timedelta(days=365)
- so.change_time = now + datetime.timedelta(days=3*365)
- so.update_time = datetime.datetime.now()
- so.save()
- return rst
- def download_signup(request):
- """
- """
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- header = [u"姓名",u"联系电话",u"状态",u"管理员备注",u"报名类型",u"作业类别",
- u"准操项目",u"培训类型",u"考试时间",u"支付状态",u"支付金额",u"更新时间",
- u"发票类型",u"领证方式",u"实名认证",u"报名时间",u"培训开始时间",u"培训结束时间",u"公司名称"]
- ids = qdata.get("id").split(",")
- qset = cm.SignupOrders.objects.filter(id__in=ids)
- data = []
- for o in qset:
- subject_item0 = o.subject_item.split("|")[0]
- subject_item1 = o.subject_item.split("|")[1]
- subject_item2 = o.subject_item.split("|")[2]
- row = [o.name,o.phone,o.order_status,o.remark,
- subject_item0,subject_item1,subject_item2,o.train_type,o.exam_time,
- o.order_status,o.price,o.ctime,o.bill_type,o.receive_card,o.order_status,
- o.ctime,o.train_time_start,o.train_time_end,o.company]
- data.append(row)
- exceltool = ExcelTool("/tmp/demo.xls")
- xlsdata = exceltool.save_data(u"学员报名数据表",header,data)
- return xlsdata
- def download_class_stu(request):
- """
- """
- qdata = request.json
- need_params = ["id"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- header = [u"姓名",u"联系电话",u"状态",u"管理员备注",u"报名类型",u"作业类别",
- u"准操项目",u"培训类型",u"考试时间",u"支付状态",u"支付金额",u"更新时间",
- u"发票类型",u"领证方式",u"实名认证",u"报名时间",u"培训开始时间",u"培训结束时间",u"公司名称"]
- ids = qdata.get("id").split(",")
- ids = [51,52,52,54]
- qset = cm.SignupOrders.objects.filter(id__in=ids)
- data = []
- for o in qset:
- subject_item0 = o.subject_item.split("|")[0]
- subject_item1 = o.subject_item.split("|")[1]
- subject_item2 = o.subject_item.split("|")[2]
- row = [o.name,o.phone,o.order_status,o.remark,
- subject_item0,subject_item1,subject_item2,o.train_type,o.exam_time,
- o.order_status,o.price,o.ctime,o.bill_type,o.receive_card,o.order_status,
- o.ctime,o.train_time_start,o.train_time_end,o.company]
- data.append(row)
- exceltool = ExcelTool("/tmp/demo.xls")
- xlsdata = exceltool.save_data(u"学员报名数据表",header,data)
- return xlsdata
- def get_zipfile(files):
- """
- """
- cur_path = os.getcwd()
- path = os.path.split(files[0])[0]
- os.chdir(path)
- temp = tempfile.TemporaryFile()
- archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
- for f in files:
- if os.path.exists(f):
- f = os.path.split(f)[-1]
- archive.write(f)
- os.remove(f)
- archive.close()
- os.chdir(cur_path)
- temp.seek(0)
- return temp
- def set_style(name,height,bold=False,left=True):
- style = xlwt.XFStyle() # 初始化样式
- font = xlwt.Font() # 为样式创建字体
- font.name = name # 'Times New Roman'
- font.bold = bold
- font.color_index = 4
- font.height = height
- #borders= xlwt.Borders()
- #borders.left= 6
- #borders.right= 6
- #borders.top= 6
- #borders.bottom= 6
- alignment = xlwt.Alignment()
- if left:
- alignment.horz = 0x01
- else:
- alignment.horz = 0x03
- alignment.vert = 0x01
- style.font = font
- style.alignment = alignment
- #style.borders = borders
- return style
- def copy_excel(src_file):
- """
- """
- # 首先用 xlrd 读取一张表格
- read_file = src_file
- workbook = xlrd.open_workbook(read_file, formatting_info=True)
- # 拷贝此表格
- new_book = copy(workbook)
- sheet = new_book.get_sheet(0)
- #return sheet
- #sheet.write_merge(8,8,0,8, u'考试时间: 年 月 日',set_style('Times New Roman',220,True))
- #sheet.write_merge(9,9,0,8, u'四川省安全生产监督管理局',set_style('Times New Roman',220,True,False))
- # 更多请见 xlwt_demo.py.
-
- #new_output_path = 'result2.xls'
- #new_book.save(new_output_path)
- return sheet,new_book
- def download_zip1(request):
- """
- """
- qdata = request.json
- need_params = ["id","type"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- ids = qdata.get("id").split(",")
- qset = cm.SignupOrders.objects.filter(id__in=ids)
- root = os.path.join(settings.BASE_DIR,"templates")
- type = qdata.get("type")
- if type == "apply":
- tpl = os.path.join(root,"apply_template.docx")
- files = []
- for o in qset:
- doc = DocxTemplate(tpl)
- fname = os.path.join(root,u"{}.docx".format(o.name)).decode('utf-8').encode('gbk')
- subject_item0 = o.subject_item.split("|")[0]
- subject_item1 = o.subject_item.split("|")[1]
- subject_item2 = o.subject_item.split("|")[2]
- context = {"name":o.name,"sex":o.sex,"education":o.education,"idno":o.idno,"class_id":o.class_id,
- "company":o.company,"phone":o.phone,"train_type":o.train_type,
- "train_time_start":o.train_time_start,"train_time_end":o.train_time_end}
- doc.render(context)
- doc.save(fname)
- files.append(fname)
- else:
- files = []
- tpl_1 = os.path.join(root,"pxqd.xls")
- tpl_2 = os.path.join(root,"szksqd.xls")
- tpl_3 = os.path.join(root,"xxkqqd.xls")
- target_1 = os.path.join(root,u"培训签到表.xls")
- target_2 = os.path.join(root,u"实作考试签到表.xls")
- target_3 = os.path.join(root,u"新训考勤签到表.xls")
- #培训签到表
- sheet1,book = copy_excel(tpl_1)
- for i,o in enumerate(qset):
- #培训签到表
- sheet1.write(i+2,0,i+1)
- sheet1.write(i+2,1,o.name)
- ##实作考试签到表
- #sheet2 = copy_excel(tpl_2)
- #sheet2.write(i+4,0,i+1)
- #sheet2.write(i+4,0,o.name)
- ##新训考勤签到表
- #sheet3 = copy_excel(tpl_2)
- #sheet3.write(i+4,0,i+1)
- #sheet3.write(i+4,0,o.name)
- book.save(target_1)
- files.append(target_1)
- #实作考试签到表
- if qset.count() == 1:
- sheet2,book = copy_excel(tpl_2)
- for i,o in enumerate(qset):
- sheet2.write(i+3,0,i+1,set_style('Times New Roman',220,False))
- sheet2.write(i+3,1,o.name,set_style('Times New Roman',220,False))
- sheet2.write_merge(qset.count()+3,qset.count()+3,0,8, u'考试时间: 年 月 日',set_style('Times New Roman',220,True))
- sheet2.write_merge(qset.count()+4,qset.count()+4,0,8, u'四川省安全生产监督管理局',set_style('Times New Roman',220,True,False))
- book.save(target_2)
- files.append(target_2)
- elif qset.count() == 2:
- sheet2,book = copy_excel(tpl_2)
- for i,o in enumerate(qset):
- sheet2.write(3,i*5+i,i+1,set_style('Times New Roman',220,False))
- sheet2.write(3,i*5+i+1,o.name,set_style('Times New Roman',220,False))
- sheet2.write_merge(4,4,0,8, u'考试时间: 年 月 日',set_style('Times New Roman',220,True))
- sheet2.write_merge(5,5,0,8, u'四川省安全生产监督管理局',set_style('Times New Roman',220,True,False))
- book.save(target_2)
- files.append(target_2)
- else:
- qdata = list(qset.values_list("name",flat=True))
- rows = ccf.list_split(qdata,2)
- sheet2,book = copy_excel(tpl_2)
- for i,item in enumerate(rows):
- sheet2.write(i+3,0,i+1,set_style('Times New Roman',220,False))
- sheet2.write(i+3,1,item[0],set_style('Times New Roman',220,False))
- if len(item) == 2:
- sheet2.write(i+3,5,i+3,set_style('Times New Roman',220,False))
- sheet2.write(i+3,6,item[1],set_style('Times New Roman',220,False))
- sheet2.write_merge(len(rows)+3,len(rows)+3,0,8, u'考试时间: 年 月 日',set_style('Times New Roman',220,True))
- sheet2.write_merge(len(rows)+4,len(rows)+4,0,8, u'四川省安全生产监督管理局',set_style('Times New Roman',220,True,False))
- book.save(target_2)
- files.append(target_2)
- if files:
- zipfile = get_zipfile(files)
- return zipfile
- def download_zip(request):
- """
- """
- qdata = request.json
- need_params = ["id","type"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- ids = qdata.get("id").split(",")
- qset = cm.SignupOrders.objects.filter(id__in=ids)
- root = os.path.join(settings.BASE_DIR,"templates")
- type = qdata.get("type")
- if type == "apply":
- tpl = os.path.join(root,"apply_template.docx")
- tpl_1 = os.path.join(root,"apply_template_tzzy.docx")
- tpl_2 = os.path.join(root,"apply_template_aqxy.docx")
- tpl_3 = os.path.join(root,"apply_template_cyry.docx")
- tpl_4 = os.path.join(root,"apply_template_tzsb.docx")
- files = []
- for o in qset:
- try:
- subject_item = o.subject_item
- if u"特种作业" in subject_item:
- doc = DocxTemplate(tpl_1)
- #elif u"负责人" in subject_item:
- elif u"安全生产知识和管理能力" in subject_item:
- doc = DocxTemplate(tpl_2)
- elif u"特种设备" in subject_item:
- doc = DocxTemplate(tpl_4)
- else:
- doc = DocxTemplate(tpl_3)
- subject_item0 = o.subject_item.split("|")[0]
- subject_item1 = o.subject_item.split("|")[1]
- subject_item2 = o.subject_item.split("|")[2]
- try:
- subject_item_code = re.search(r"\w+",subject_item2).group()
- except:
- subject_item_code = ""
- fname = u"{}_{}.docx".format(o.name,subject_item2)
- #fname = u"{}.docx".format(o.name)
- #fname = unicode(fname,"utf-8")
- fname = os.path.join(root,fname)
- birthday = "{}-{}-{}".format(o.idno[6:10],o.idno[10:12],o.idno[12:14])
- idnoimg_face = o.idnoimg_face.replace(settings.HOST,settings.STATIC_ROOT)
- idnoimg_back = o.idnoimg_back.replace(settings.HOST,settings.STATIC_ROOT)
- education_img = o.education_img.replace(settings.HOST,settings.STATIC_ROOT)
- oldcard_img = o.oldcard_img.replace(settings.HOST,settings.STATIC_ROOT) if o.oldcard_img else None
- classhour_cert_url = o.classhour_cert_url.replace(settings.HOST,settings.STATIC_ROOT) if o.classhour_cert_url else None
- halfbody_img = o.halfbody_img.replace(settings.HOST,settings.STATIC_ROOT) if o.halfbody_img else None
- idnoimg_face = thumbnail_pic(idnoimg_face) if idnoimg_face else None
- idnoimg_back = thumbnail_pic(idnoimg_back) if idnoimg_back else None
- education_img = thumbnail_pic(education_img) if education_img else None
- oldcard_img = thumbnail_pic(oldcard_img) if oldcard_img else None
- classhour_cert_url = thumbnail_pic(classhour_cert_url) if classhour_cert_url else None
- halfbody_img = thumbnail_pic(halfbody_img) if halfbody_img else None
- context = {"name":o.name,"sex":o.sex,"education":o.education,"idno":o.idno,"class_id":o.class_id,
- "company":o.company,"phone":o.phone,"train_type":o.train_type,"subject_item1":subject_item1,
- "subject_item2":subject_item2,"train_time_start":o.train_time_start,"subject_item_code":subject_item_code,
- "train_time_end":o.train_time_end,"birthday":birthday,
- "idnoimg_face":InlineImage(doc,idnoimg_face,height=Mm(82.5),width=Mm(140.66)),
- "idnoimg_back":InlineImage(doc,idnoimg_back,height=Mm(82.5),width=Mm(140.66)),
- "halfbody_img":InlineImage(doc,halfbody_img,height=Mm(30.97),width=Mm(28.91)),
- "education_img":InlineImage(doc,education_img,height=Mm(82.5),width=Mm(140.66))
- }
- if oldcard_img and o.train_type in [u"复审",u"换证"]:
- context.update({
- "oldcard_img":InlineImage(doc,oldcard_img,height=Mm(82.5),width=Mm(140.66))
- })
- if classhour_cert_url:
- context.update({
- "classhour_cert_url":InlineImage(doc,classhour_cert_url,height=Mm(82.5),width=Mm(140.66))
- })
- doc.render(context)
- doc.save(fname)
- files.append(fname)
- except Exception as e:
- import traceback
- traceback.print_exc()
- print e,8888888888888
- continue
- else:
- files = []
- data = {}
- tpl_1 = os.path.join(root,"pxqd.xls")
- tpl_2 = os.path.join(root,"szksqd.xls")
- tpl_3 = os.path.join(root,"xxkqqd.xls")
- tpl_4 = os.path.join(root,"qtcy.xls")
- tpl_5 = os.path.join(root,"tzzy.xls")
- target_1 = os.path.join(root,u"培训签到表.xls")
- target_2 = os.path.join(root,u"实作考试签到表.xls")
- target_3 = os.path.join(root,u"新训考勤签到表.xls")
- target_4 = os.path.join(root,u"安全考核合格证人员名册.xls")
- target_5 = os.path.join(root,u"大安全管理人员.xls")
- target_6 = os.path.join(root,u"考试申报表.xls")
- subject_item0 = qset.first().subject_item.split("|")[0]
- subject_item1 = qset.first().subject_item.split("|")[1]
- subject_item2 = qset.first().subject_item.split("|")[2]
- qdata = list(qset.values_list("name",flat=True))
- rows = ccf.list_split(qdata,2)
- items = []
- for i,item in enumerate(rows):
- if len(item) == 2:
- items.append([i+1,item[0],i+2,item[1]])
- else:
- items.append([i+1,item[0]])
- data["subject_item0"] = subject_item0
- data["subject_item1"] = subject_item1
- data["subject_item2"] = subject_item2
- data["items"] = items
- #考勤签到表
- tpl_1 = os.path.join(root,"kqqd.xls")
- target_1 = os.path.join(root,u"考勤签到表.xls")
- render_xls_tpl(tpl_1,data,target_1)
- files.append(target_1)
- #考试签到表
- tpl_2 = os.path.join(root,"ksqd.xls")
- target_2 = os.path.join(root,u"考试签到表.xls")
- render_xls_tpl(tpl_2,data,target_2)
- files.append(target_2)
- #申报考试表
- subject_item0 = qset.first().subject_item.split("|")[0]
- if subject_item0 == u"其他安全生产从业人员":
- items = []
- for i,o in enumerate(qset):
- subject_item1 = o.subject_item.split("|")[1]
- subject_item2 = o.subject_item.split("|")[2]
- items.append([i+1,o.name,o.sex,o.education,o.idno,o.company,
- subject_item1,subject_item2,o.phone])
- data["items"] = items
- render_xls_tpl(tpl_4,data,target_4)
- files.append(target_4)
- else:
- items = []
- for i,o in enumerate(qset):
- train_type = o.train_type
- train_day = 3
- subject_item1 = o.subject_item.split("|")[1]
- subject_item2 = o.subject_item.split("|")[2]
- birthday = "{}-{}-{}".format(o.idno[6:10],o.idno[10:12],o.idno[12:14])
- items.append([i+1,"",o.name,o.sex,birthday,o.idno,o.education,
- o.phone,subject_item1,subject_item2,train_type,u"巴中逸沣安全培训","",
- train_day,u"正常考试","",o.company,"","",u"巴中市"])
- #写xls文件
- tpl_3 = os.path.join(root,"tzzykssbb.xls")
- target_3 = os.path.join(root,u"特种作业考试申报表.xls")
- sheet2,book = copy_excel(tpl_5)
- for i,item in enumerate(items):
- for j in range(0,len(item)):
- sheet2.write(i+2,j,item[j],set_style('Times New Roman',220,False,True))
- book.save(target_3)
- files.append(target_3)
- if files:
- zipfile = get_zipfile(files)
- return zipfile
- def upload_paper_info(request):
- """
- """
- upload_file = request.FILES['file']
- if not upload_file:
- raise ce.TipException(u"缺少文件参数!")
- tmpxls = "/tmp/{}.xls".format(str(int(time.time())))
- with open(tmpxls,"wb+") as f:
- for chunk in upload_file.chunks():
- f.write(chunk)
- f.close()
- exceltool = ExcelTool(tmpxls)
- data = exceltool.get_data()
- total_score = 100
- total_time = 60
- score = 1
- for row in data:
- subject_item = u"{}|{}|{}".format(row[0].strip(),row[1].strip(),row[2].strip())
- train_type = row[3].strip()
- title = row[4].strip()
- subject_id = cm.Subject.objects.filter(name=row[2]).first().id
- #新增试卷
- obj,flag = cm.Papers.objects.get_or_create(**{
- "title":title,
- "subject_item":subject_item,
- "train_type":train_type,
- })
- obj.total_time = row[11]
- obj.subject_id = subject_id
- #新增题库
- qtype = {u"单选题":1,u"多选题":2,u"判断题":3}.get(row[5].strip())
- title = row[6].strip()
- options = row[7].strip()
- answer = row[8].strip()
- analysis = row[9].strip()
- qobj,flag = cm.Questions.objects.get_or_create(**{
- "title":title.encode("utf-8"),
- "qtype":qtype,
- "options":options.encode("utf-8"),
- "answer":answer.encode("utf-8"),
- "analysis":analysis.encode("utf-8")
- })
- qobj.score = row[10]
- qobj.save()
- obj.questions.add(qobj)
- total_score = obj.total_score if obj.total_score else 0
- total_score += row[10]
- obj.total_score = total_score
- obj.total_score = total_score
- obj.save()
- def get_permission_list(request):
-
- data = [u"概览",u"项目管理",u"培训计划",u"在线培训",u"用户管理",u"内容管理",u"系统管理"]
- roots = list(cm.Subject.objects.filter(Q(pid=0)|Q(pid__isnull=True)).values_list("name",flat=True))
- data.extend(roots)
- return data
- def rotate_image(request):
- """旋转图像
- """
- qdata = request.json
- need_params = ["url"]
- mse = ccf.check_params(*need_params,**qdata)
- if mse:
- raise ce.TipException(mse)
- url = qdata.get("url")
- if "?" in url:
- url = url.split("?")[0]
- _id = qdata.get("id")
- imgpath = url.replace(settings.HOST,settings.STATIC_ROOT)
- im = Image.open(imgpath)
- if im.mode == "P":
- im = im.convert('RGB')
- im_rotate = im.transpose(Image.ROTATE_90)
- #im_rotate = im.rotate(90)
- im_rotate.save(imgpath)
- url = imgpath.replace(settings.STATIC_ROOT,settings.HOST)
- return url
- def get_index_data(request):
- """
- """
- ret = {}
- user_count = cm.UserInfo.objects.filter(utype=2).count()
- signup_count = cm.SignupOrders.objects.all().count()
- paper_count = cm.Papers.objects.all().count()
- videos_count = cm.Videos.objects.all().count()
- waiting_pay_count = cm.SignupOrders.objects.filter(order_status=1).count()
- waiting_audit_count = cm.SignupOrders.objects.filter(order_status=0).count()
- waiting_exam_count = cm.SignupOrders.objects.filter(order_status=3).count()
- ret["user_count"] = user_count
- ret["signup_count"] = signup_count
- ret["paper_count"] = paper_count
- ret["videos_count"] = videos_count
- ret["waiting_pay_count"] = waiting_pay_count
- ret["waiting_audit_count"] = waiting_audit_count
- ret["waiting_exam_count"] = waiting_exam_count
- return ret
- def allocation_class(request):
- """
- """
- qdata = request.json
- ids = qdata.get("ids")
- class_id = qdata.get("class_id")
- cm.SignupOrders.objects.filter(id__in=ids).update(class_id=class_id)
|