#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)