controls.py 64 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760
  1. #coding=utf-8
  2. '''
  3. '''
  4. import os,re
  5. import json,time,datetime
  6. import shutil
  7. import tempfile
  8. import zipfile
  9. from docxtpl import DocxTemplate,InlineImage
  10. from docx.shared import Mm
  11. from django.db import transaction
  12. from django.conf import settings
  13. import common.models as cm
  14. import common.error_info as ce
  15. import common.common_functions as ccf
  16. import common.common_control as ccc
  17. import account.password_handle as ph
  18. from utils.exceltool import ExcelTool
  19. from utils.exceltool import ExcelTool
  20. from django.db.models import Q
  21. from PIL import Image
  22. from PIL import Image,ImageDraw,ImageFont
  23. import xlrd
  24. import xlwt
  25. from xlutils.copy import copy
  26. from xltpl.writer import BookWriter
  27. def thumbnail_pic(fpath):
  28. """
  29. """
  30. im=Image.open(fpath)
  31. im.thumbnail((300,400))
  32. thumb_name = os.path.splitext(fpath)[0]+"_thumb"+os.path.splitext(fpath)[-1]
  33. im.save(thumb_name,'png')
  34. return thumb_name
  35. def render_xls_tpl(tpl,data,out):
  36. """
  37. """
  38. stime = time.time()
  39. writer = BookWriter(tpl)
  40. writer.jinja_env.globals.update(dir=dir, getattr=getattr)
  41. payloads = {"tpl_name":"Sheet1","sheet_name":"Sheet1","ctx":data}
  42. writer.render_book2(payloads=[payloads])
  43. #writer.render_book([payloads])
  44. writer.save(out)
  45. def get_index_data(request):
  46. """
  47. """
  48. qset = cm.Category.objects.all()
  49. qdata = list(qset.values())
  50. for i,qd in enumerate(qdata):
  51. if i<6:
  52. qd["type"] = "nav"
  53. else:
  54. qd["type"] = "article"
  55. qd["list"] = list(cm.Article.objects.filter(category__id=qd["id"]).values())
  56. if qd["name"]==u"头条通知":
  57. qd["type"] = "notice"
  58. qd["list"] = list(cm.Article.objects.filter(category__id=qd["id"]).values())
  59. if "{id}" in qd["path"]:
  60. artcs = list(cm.Article.objects.filter(category__id=qd["id"]).order_by("order").values())
  61. aid = artcs[0]["id"] if artcs else 0
  62. qd["path"] = qd["path"].replace("{id}",str(aid))
  63. return qdata
  64. def get_article_info(request):
  65. qdata = request.json
  66. need_params = ["id"]
  67. mse = ccf.check_params(*need_params,**qdata)
  68. if mse:
  69. raise ce.TipException(mse)
  70. id = qdata.get("id")
  71. data = list(cm.Article.objects.filter(id=id).values())
  72. data = data[0] if data else {}
  73. #data["imgs"] = ["https://www.scxjc.club/images/jgjj.png","https://www.scxjc.club/images/jgjj.png"]
  74. data["imgs"] = json.loads(data["imgs"]) if data["imgs"] else []
  75. data["phone"] = "0827-8589102"
  76. data["address"] = u"巴中市江北车站三楼(体检门诊第一个办公室)"
  77. data["point"] = "106.755094,31.866028"
  78. return data
  79. def get_intro_info(request):
  80. """考场和联系我们专用
  81. """
  82. qdata = request.json
  83. need_params = ["id"]
  84. mse = ccf.check_params(*need_params,**qdata)
  85. if mse:
  86. raise ce.TipException(mse)
  87. id = qdata.get("id")
  88. data = {"id":"1","title":"sfsfd","content":"","ctime":"2020-01-01 00:00:01"}
  89. 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"详情...."}
  90. return data
  91. def get_signup_list(request):
  92. """
  93. """
  94. data = [
  95. {"relaname":u"肖小肖",
  96. "phone":"15982456282",
  97. "class_name":u"一班",
  98. "class_id":1,
  99. "subject_item":u"安全生产管理|电工作业|高压电工",
  100. "class_hour":30,
  101. "class_hour_finished":10,
  102. "train_type":u"新办",
  103. "order_status":0,
  104. "ctime":"2020-05-05 22:11:12",
  105. "id":1
  106. }
  107. ]
  108. uid = request.user.id
  109. #qset = cm.SignupOrders.objects.filter(user_id=uid).order_by("-id")
  110. qset = cm.SignupOrders.objects.order_by("-id")
  111. qdata = list(qset.values())
  112. for qd in qdata:
  113. qd["subject_item"] = u"特种作业|电工|高压电工"
  114. qd["class_name"] = cm.Class.objects.filter(id=qd["class_id"]).first().name
  115. qd["class_hour"] = cm.Class.objects.filter(id=qd["class_id"]).first().class_hour
  116. return qdata
  117. def get_signup_info(request):
  118. qdata = request.json
  119. need_params = ["id"]
  120. mse = ccf.check_params(*need_params,**qdata)
  121. if mse:
  122. raise ce.TipException(mse)
  123. id = qdata.get("id")
  124. data = list(cm.SignupOrders.objects.filter(id=id).values())
  125. data = data[0] if data else {}
  126. if data.get("idnoimg_face"):
  127. data["idnoimg_face"] = data["idnoimg_face"] + "?t=" + str(time.time())
  128. if data.get("idnoimg_back"):
  129. data["idnoimg_back"] = data["idnoimg_back"] + "?t=" + str(time.time())
  130. if data.get("halfbody_img"):
  131. data["halfbody_img"] = data["halfbody_img"] + "?t=" + str(time.time())
  132. if data.get("oldcard_img"):
  133. data["oldcard_img"] = data["oldcard_img"] + "?t=" + str(time.time())
  134. return data
  135. def get_paper_info(request):
  136. qdata = request.json
  137. need_params = ["id"]
  138. mse = ccf.check_params(*need_params,**qdata)
  139. if mse:
  140. raise ce.TipException(mse)
  141. id = qdata.get("id")
  142. data = list(cm.Papers.objects.filter(id=id).values())
  143. data = data[0] if data else {}
  144. if data:
  145. questions = cm.Papers.objects.filter(id=id).first().questions.all()
  146. q_sel = list(questions.filter(qtype=1).values())
  147. q_msel = list(questions.filter(qtype=2).values())
  148. q_tf = list(questions.filter(qtype=3).values())
  149. qdata = [
  150. {"title":u"一、单选题(每题1分、共{}题)".format(len(q_sel)),"questions":q_sel},
  151. {"title":u"二、多选题(每题1分、共{}题)".format(len(q_msel)),"questions":q_msel},
  152. {"title":u"三、判断题(每题1分、共{}题)".format(len(q_tf)),"questions":q_tf}
  153. ]
  154. data["questions"] = qdata
  155. return data
  156. def get_class_list(request):
  157. """
  158. """
  159. qdata = request.json
  160. qset = cm.Class.objects.filter(status=1)
  161. if qdata.get("name"):
  162. qset = qset.filter(name__icontains=qdata.get("name"))
  163. if qdata.get("subject_item"):
  164. qset = qset.filter(subject_item__icontains=qdata.get("subject_item"))
  165. #分页
  166. page = qdata.get("page",1)
  167. page_size = qdata.get("page_size",20)
  168. total,qset = ccc.get_page_qset(qset,page,page_size)
  169. data = list(qset.values())
  170. for d in data:
  171. d["signuped_count"] = cm.SignupOrders.objects.filter(class_id=d["id"]).count()
  172. return total,data
  173. def get_category_list(request):
  174. """
  175. """
  176. qdata = request.json
  177. qset = cm.Category.objects.filter(status=1)
  178. #分页
  179. page = qdata.get("page",1)
  180. page_size = qdata.get("page_size",20)
  181. total,qset = ccc.get_page_qset(qset,page,page_size)
  182. data = list(qset.values())
  183. return total,data
  184. def get_article_list(request):
  185. """
  186. """
  187. qdata = request.json
  188. qset = cm.Article.objects.filter(status=1)
  189. if qdata.get("title"):
  190. qset = qset.filter(title__icontains=qdata.get("title"))
  191. #分页
  192. page = qdata.get("page",1)
  193. page_size = qdata.get("page_size",20)
  194. total,qset = ccc.get_page_qset(qset,page,page_size)
  195. data = list(qset.values())
  196. return total,data
  197. def get_account_list(request):
  198. """
  199. """
  200. qdata = request.json
  201. qset = cm.UserInfo.objects.filter(utype=1)
  202. #分页
  203. page = qdata.get("page",1)
  204. page_size = qdata.get("page_size",20)
  205. total,qset = ccc.get_page_qset(qset,page,page_size)
  206. data = list(qset.values())
  207. return total,data
  208. def get_user_list(request):
  209. """
  210. """
  211. qdata = request.json
  212. qset = cm.UserInfo.objects.filter(utype=2).order_by("-ctime")
  213. #分页
  214. page = qdata.get("page",1)
  215. page_size = qdata.get("page_size",20)
  216. total,qset = ccc.get_page_qset(qset,page,page_size)
  217. data = list(qset.values())
  218. return total,data
  219. def get_paper_list(request):
  220. """
  221. """
  222. qdata = request.json
  223. qset = cm.Papers.objects.all()
  224. #分页
  225. page = qdata.get("page",1)
  226. page_size = qdata.get("page_size",20)
  227. total,qset = ccc.get_page_qset(qset,page,page_size)
  228. data = list(qset.values())
  229. for item in data:
  230. id = item["id"]
  231. item["questions_count"] = cm.Papers.objects.filter(id=id).first().questions.all().count()
  232. return total,data
  233. def get_video_list(request):
  234. """
  235. """
  236. qdata = request.json
  237. qset = cm.Videos.objects.all()
  238. #分页
  239. page = qdata.get("page",1)
  240. page_size = qdata.get("page_size",20)
  241. total,qset = ccc.get_page_qset(qset,page,page_size)
  242. data = list(qset.values())
  243. return total,data
  244. def get_subject_item(subject_id):
  245. """
  246. """
  247. data = []
  248. for sid in subject_id:
  249. tmp = []
  250. for ssid in sid:
  251. tmp.append(cm.Subject.objects.filter(id=ssid).first().name)
  252. data.append("|".join(tmp))
  253. return ",".join(data)
  254. def add_class(request):
  255. uid = request.user.id
  256. qdata = request.json
  257. #need_params = ["name","subject_id","subject_item","signup_limit","remark"]
  258. #need_params = ["name","subject_id","subject_item","signup_limit","remark"]
  259. need_params = ["name","subject_id","signup_limit","remark"]
  260. mse = ccf.check_params(*need_params,**qdata)
  261. if mse:
  262. raise ce.TipException(mse)
  263. need_params.append("subject_id")
  264. need_params.append("remind")
  265. vals = ccf.get_need_params(*need_params,**qdata)
  266. subject_id = vals["subject_id"]
  267. vals["cid"] = uid
  268. vals["subject_id"] = json.dumps(vals["subject_id"])
  269. vals["subject_item"] = get_subject_item(subject_id)
  270. #vals["subject_name"] = vals["subject_item"].split("|")[0]
  271. obj = cm.Class.objects.create(**vals)
  272. return obj.id
  273. def get_docs_info(request):
  274. uid = request.user.id
  275. qdata = request.json
  276. need_params = ["id"]
  277. mse = ccf.check_params(*need_params,**qdata)
  278. if mse:
  279. raise ce.TipException(mse)
  280. id = qdata.get("id")
  281. obj = cm.Docs.objects.filter(id=id).values().first()
  282. return obj
  283. def get_docs_list(request):
  284. """
  285. """
  286. qdata = request.json
  287. qset = cm.Docs.objects.all()
  288. #分页
  289. page = qdata.get("page",1)
  290. page_size = qdata.get("page_size",20)
  291. total,qset = ccc.get_page_qset(qset,page,page_size)
  292. data = list(qset.values())
  293. return total,data
  294. def add_docs(request):
  295. uid = request.user.id
  296. qdata = request.json
  297. need_params = ["name","url"]
  298. mse = ccf.check_params(*need_params,**qdata)
  299. if mse:
  300. raise ce.TipException(mse)
  301. vals = ccf.get_need_params(*need_params,**qdata)
  302. obj = cm.Docs.objects.create(**vals)
  303. return obj.id
  304. def update_docs(request):
  305. uid = request.user.id
  306. qdata = request.json
  307. need_params = ["id"]
  308. mse = ccf.check_params(*need_params,**qdata)
  309. if mse:
  310. raise ce.TipException(mse)
  311. need_params.extend(["name","url"])
  312. vals = ccf.get_need_params(*need_params,**qdata)
  313. id = vals.pop("id")
  314. obj = cm.Docs.objects.filter(id=id).update(**vals)
  315. return id
  316. def delete_docs(request):
  317. uid = request.user.id
  318. qdata = request.json
  319. need_params = ["id"]
  320. mse = ccf.check_params(*need_params,**qdata)
  321. if mse:
  322. raise ce.TipException(mse)
  323. id = qdata.get("id")
  324. obj = cm.Docs.objects.filter(id=id).delete()
  325. return id
  326. def add_video(request):
  327. uid = request.user.id
  328. qdata = request.json
  329. need_params = ["title","subject_id","subject_item","train_type","img","url"]
  330. mse = ccf.check_params(*need_params,**qdata)
  331. if mse:
  332. raise ce.TipException(mse)
  333. vals = ccf.get_need_params(*need_params,**qdata)
  334. obj = cm.Videos.objects.create(**vals)
  335. return obj.id
  336. def update_video(request):
  337. uid = request.user.id
  338. qdata = request.json
  339. need_params = ["id"]
  340. mse = ccf.check_params(*need_params,**qdata)
  341. if mse:
  342. raise ce.TipException(mse)
  343. need_params.extend(["title","subject_id","subject_item","train_type","img","url"])
  344. vals = ccf.get_need_params(*need_params,**qdata)
  345. id = vals.pop("id")
  346. obj = cm.Videos.objects.filter(id=id).update(**vals)
  347. return id
  348. def delete_video(request):
  349. uid = request.user.id
  350. qdata = request.json
  351. need_params = ["id"]
  352. mse = ccf.check_params(*need_params,**qdata)
  353. if mse:
  354. raise ce.TipException(mse)
  355. id = qdata.get("id")
  356. obj = cm.Videos.objects.filter(id=id).delete()
  357. return id
  358. def delete_paper(request):
  359. uid = request.user.id
  360. qdata = request.json
  361. need_params = ["id"]
  362. mse = ccf.check_params(*need_params,**qdata)
  363. if mse:
  364. raise ce.TipException(mse)
  365. id = qdata.get("id")
  366. paper = cm.Papers.objects.filter(id=id).first()
  367. paper.questions.all().delete()
  368. obj = cm.Papers.objects.filter(id=id).delete()
  369. return id
  370. def get_video_info(request):
  371. uid = request.user.id
  372. qdata = request.json
  373. need_params = ["id"]
  374. mse = ccf.check_params(*need_params,**qdata)
  375. if mse:
  376. raise ce.TipException(mse)
  377. id = qdata.get("id")
  378. obj = cm.Videos.objects.filter(id=id).values().first()
  379. return obj
  380. def add_category(request):
  381. uid = request.user.id
  382. qdata = request.json
  383. need_params = ["name"]
  384. mse = ccf.check_params(*need_params,**qdata)
  385. if mse:
  386. raise ce.TipException(mse)
  387. need_params.extend(["order","desc"])
  388. vals = ccf.get_need_params(*need_params,**qdata)
  389. vals["cid"] = uid
  390. obj = cm.Category.objects.create(**vals)
  391. return obj.id
  392. def add_article(request):
  393. uid = request.user.id
  394. qdata = request.json
  395. need_params = ["title","category_id","content"]
  396. mse = ccf.check_params(*need_params,**qdata)
  397. if mse:
  398. raise ce.TipException(mse)
  399. need_params.extend(["imgs","address","point"])
  400. vals = ccf.get_need_params(*need_params,**qdata)
  401. vals["imgs"] = json.dumps(vals["imgs"])
  402. vals["cid"] = uid
  403. obj = cm.Article.objects.create(**vals)
  404. return obj.id
  405. def add_article(request):
  406. uid = request.user.id
  407. qdata = request.json
  408. need_params = ["title","category_id","content"]
  409. mse = ccf.check_params(*need_params,**qdata)
  410. if mse:
  411. raise ce.TipException(mse)
  412. need_params.extend(["imgs","address","point"])
  413. vals = ccf.get_need_params(*need_params,**qdata)
  414. vals["imgs"] = json.dumps(vals["imgs"])
  415. vals["cid"] = uid
  416. obj = cm.Article.objects.create(**vals)
  417. return obj.id
  418. def add_account(request):
  419. uid = request.user.id
  420. qdata = request.json
  421. need_params = ["name","realname","password","repassword","phone"]
  422. mse = ccf.check_params(*need_params,**qdata)
  423. if mse:
  424. raise ce.TipException(mse)
  425. need_params.append("permissions")
  426. vals = ccf.get_need_params(*need_params,**qdata)
  427. vals.pop("repassword")
  428. vals["password"] = ph.make_password(vals["password"])
  429. vals["cid"] = uid
  430. vals["utype"] = 1
  431. obj = cm.UserInfo.objects.create(**vals)
  432. return obj.id
  433. def update_class(request):
  434. uid = request.user.id
  435. qdata = request.json
  436. need_params = ["id"]
  437. mse = ccf.check_params(*need_params,**qdata)
  438. if mse:
  439. raise ce.TipException(mse)
  440. need_params.extend(["name","subject_id","subject_item","signup_limit","remark","remind"])
  441. vals = ccf.get_need_params(*need_params,**qdata)
  442. id = vals.pop("id")
  443. vals["cid"] = uid
  444. subject_id = vals["subject_id"]
  445. vals["subject_id"] = json.dumps(vals["subject_id"])
  446. vals["subject_item"] = get_subject_item(subject_id)
  447. #vals["subject_name"] = vals["subject_item"].split("|")[0]
  448. obj = cm.Class.objects.filter(id=id).update(**vals)
  449. return obj
  450. def update_account(request):
  451. uid = request.user.id
  452. qdata = request.json
  453. need_params = ["id"]
  454. mse = ccf.check_params(*need_params,**qdata)
  455. if mse:
  456. raise ce.TipException(mse)
  457. #need_params.extend(["name","realname","password","repassword","phone","permissions"])
  458. need_params.extend(["name","realname","phone","permissions"])
  459. vals = ccf.get_need_params(*need_params,**qdata)
  460. id = vals.pop("id")
  461. #vals.pop("repassword")
  462. #vals["password"] = ph.make_password(vals["password"])
  463. vals["cid"] = uid
  464. obj = cm.UserInfo.objects.filter(id=id).update(**vals)
  465. return obj
  466. def update_article(request):
  467. uid = request.user.id
  468. qdata = request.json
  469. need_params = ["id"]
  470. mse = ccf.check_params(*need_params,**qdata)
  471. if mse:
  472. raise ce.TipException(mse)
  473. need_params.extend(["title","category_id","content","imgs","address","point","phone"])
  474. vals = ccf.get_need_params(*need_params,**qdata)
  475. id = vals.pop("id")
  476. vals["imgs"] = json.dumps(vals["imgs"])
  477. vals["cid"] = uid
  478. obj = cm.Article.objects.filter(id=id).update(**vals)
  479. return obj
  480. def update_category(request):
  481. uid = request.user.id
  482. qdata = request.json
  483. need_params = ["id"]
  484. mse = ccf.check_params(*need_params,**qdata)
  485. if mse:
  486. raise ce.TipException(mse)
  487. need_params.extend(["name","order","desc"])
  488. vals = ccf.get_need_params(*need_params,**qdata)
  489. id = vals.pop("id")
  490. vals["cid"] = uid
  491. obj = cm.Category.objects.filter(id=id).update(**vals)
  492. return obj
  493. def get_class_info(request):
  494. uid = request.user.id
  495. qdata = request.json
  496. need_params = ["id"]
  497. mse = ccf.check_params(*need_params,**qdata)
  498. if mse:
  499. raise ce.TipException(mse)
  500. id = qdata.get("id")
  501. obj = cm.Class.objects.filter(id=id).values().first()
  502. obj["subject_id"] = json.loads(obj["subject_id"])
  503. return obj
  504. def get_account_info(request):
  505. uid = request.user.id
  506. qdata = request.json
  507. need_params = ["id"]
  508. mse = ccf.check_params(*need_params,**qdata)
  509. if mse:
  510. raise ce.TipException(mse)
  511. id = qdata.get("id")
  512. obj = cm.UserInfo.objects.filter(id=id).values().first()
  513. return obj
  514. def get_user_info(request):
  515. uid = request.user.id
  516. qdata = request.json
  517. need_params = ["id"]
  518. mse = ccf.check_params(*need_params,**qdata)
  519. if mse:
  520. raise ce.TipException(mse)
  521. id = qdata.get("id")
  522. obj = cm.UserInfo.objects.filter(id=id).values().first()
  523. return obj
  524. def get_article_info(request):
  525. uid = request.user.id
  526. qdata = request.json
  527. need_params = ["id"]
  528. mse = ccf.check_params(*need_params,**qdata)
  529. if mse:
  530. raise ce.TipException(mse)
  531. id = qdata.get("id")
  532. obj = cm.Article.objects.filter(id=id).values().first()
  533. obj["imgs"] = json.loads(obj["imgs"]) if obj["imgs"] else []
  534. return obj
  535. def delete_class(request):
  536. uid = request.user.id
  537. qdata = request.json
  538. need_params = ["id"]
  539. mse = ccf.check_params(*need_params,**qdata)
  540. if mse:
  541. raise ce.TipException(mse)
  542. id = qdata.get("id")
  543. obj = cm.Class.objects.filter(id=id).delete()
  544. return id
  545. def delete_category(request):
  546. uid = request.user.id
  547. qdata = request.json
  548. need_params = ["id"]
  549. mse = ccf.check_params(*need_params,**qdata)
  550. if mse:
  551. raise ce.TipException(mse)
  552. id = qdata.get("id")
  553. obj = cm.Category.objects.filter(id=id).delete()
  554. return id
  555. def delete_account(request):
  556. uid = request.user.id
  557. qdata = request.json
  558. need_params = ["id"]
  559. mse = ccf.check_params(*need_params,**qdata)
  560. if mse:
  561. raise ce.TipException(mse)
  562. id = qdata.get("id")
  563. obj = cm.UserInfo.objects.filter(id=id).delete()
  564. return id
  565. def delete_article(request):
  566. uid = request.user.id
  567. qdata = request.json
  568. need_params = ["id"]
  569. mse = ccf.check_params(*need_params,**qdata)
  570. if mse:
  571. raise ce.TipException(mse)
  572. id = qdata.get("id")
  573. obj = cm.Article.objects.filter(id=id).delete()
  574. return id
  575. def get_category_info(request):
  576. """
  577. """
  578. uid = request.user.id
  579. qdata = request.json
  580. need_params = ["id"]
  581. mse = ccf.check_params(*need_params,**qdata)
  582. if mse:
  583. raise ce.TipException(mse)
  584. id = qdata.get("id")
  585. obj = cm.Category.objects.filter(id=id).values().first()
  586. return obj
  587. def get_training_list(request):
  588. """
  589. """
  590. data = {
  591. "videos":[{
  592. "title":u"高压电工实操课程",
  593. "image":u"https://www.scxjc.club/images/jgjj.png",
  594. "url":u"https://www.scxjc.club/demo.mp4",
  595. "class_hour":20,
  596. "total_time":"45:32",
  597. "finished_time":"30:32",
  598. "status":1
  599. }],
  600. "papers":[{
  601. "id":1,
  602. "title":u"高压电工实操模拟试题",
  603. "class_hour":20,
  604. "full_mark":100,
  605. "time_limit":60,
  606. "mark":90,
  607. "status":1
  608. }]
  609. }
  610. return data
  611. def get_paper_info1(request):
  612. qdata = request.json
  613. need_params = ["id"]
  614. mse = ccf.check_params(*need_params,**qdata)
  615. if mse:
  616. raise ce.TipException(mse)
  617. id = qdata.get("id")
  618. data = {
  619. "id":1,
  620. "title":u"高压电工实操模拟试题",
  621. "class_hour":20,
  622. "full_mark":100,
  623. "time_limit":60,
  624. "mark":90,
  625. "status":1,
  626. "questions":[
  627. {
  628. "id":1,
  629. "type":1,
  630. "title":u"欧姆定律是什么",
  631. "options":[u"A、电阻",u"B、电流"],
  632. "stand_answer":"A",
  633. "myanswer":"A"
  634. },
  635. {
  636. "id":2,
  637. "type":2,
  638. "title":u"欧姆定律是什么",
  639. "options":[u"A、电阻",u"B、电流"],
  640. "stand_answer":["A","B"],
  641. "myanswer":["A","B"]
  642. },
  643. {
  644. "id":3,
  645. "type":3,
  646. "title":u"电流等于电压除电阻",
  647. "options":[u"对",u"错"],
  648. "stand_answer":[u"对"],
  649. "myanswer":[u"对"]
  650. }
  651. ]
  652. }
  653. return data
  654. def add_signup(request):
  655. """
  656. """
  657. uid = request.user.id
  658. #uid = 15
  659. qdata = request.json
  660. need_params = ["name","sex","idno","education","phone",
  661. "train_type","receive_card","price"]
  662. mse = ccf.check_params(*need_params,**qdata)
  663. if mse:
  664. raise ce.TipException(mse)
  665. need_params.extend(["company","class_id","remark","idnoimg_face","idnoimg_back","halfbody_img","education_img","oldcard_img","area","address","subject_id","subject_item"])
  666. vals = ccf.get_need_params(*need_params,**qdata)
  667. vals["cid"] = uid
  668. vals["user_id"] = uid
  669. vals["order_status"] = 0
  670. vals["subject_item"] = cm.Class.objects.filter(id=vals["class_id"]).first().subject_item
  671. obj = cm.SignupOrders.objects.create(**vals)
  672. return obj.id
  673. def update_signup(request):
  674. """
  675. """
  676. uid = request.user.id
  677. #uid = 15
  678. qdata = request.json
  679. need_params = ["id"]
  680. mse = ccf.check_params(*need_params,**qdata)
  681. if mse:
  682. raise ce.TipException(mse)
  683. _id = qdata.pop("id")
  684. ids = str(_id).split(",")
  685. need_params.extend(["name","sex","idno","education","phone","train_type",
  686. "receive_card","area","price","company","class_id","remark","idnoimg_face",
  687. "idnoimg_back","halfbody_img","education_img","oldcard_img","admin_remark",
  688. "subject_item","subject_id","address","exam_time","classhour_cert_status","health_img"])
  689. vals = ccf.get_need_params(*need_params,**qdata)
  690. if vals.get("idnoimg_face") and "?" in vals["idnoimg_face"]:
  691. vals["idnoimg_face"] = vals["idnoimg_face"].split("?")[0]
  692. if vals.get("idnoimg_back") and "?" in vals["idnoimg_back"]:
  693. vals["idnoimg_back"] = vals["idnoimg_back"].split("?")[0]
  694. if vals.get("halfbody_img") and "?" in vals["halfbody_img"]:
  695. vals["halfbody_img"] = vals["halfbody_img"].split("?")[0]
  696. if vals.get("education_img") and "?" in vals["education_img"]:
  697. vals["education_img"] = vals["education_img"].split("?")[0]
  698. if vals.get("oldcard_img") and "?" in vals["oldcard_img"]:
  699. vals["oldcard_img"] = vals["oldcard_img"].split("?")[0]
  700. if vals.get("health_img") and "?" in vals["health_img"]:
  701. vals["health_img"] = vals["health_img"].split("?")[0]
  702. if vals.get("classhour_cert_status"):
  703. vals["order_status"] = 7
  704. if qdata.get("train_time"):
  705. vals["train_time_start"] = qdata.get("train_time").split(",")[0]
  706. vals["train_time_end"] = qdata.get("train_time").split(",")[1]
  707. #发送培训通知
  708. from utils.aliyun_sms import send_training_notice,send_training_notice_special
  709. import common.common_notice as cn
  710. sorders = cm.SignupOrders.objects.filter(id__in=ids)
  711. for so in sorders:
  712. user_id = so.user_id
  713. phone = so.phone
  714. subject_item = so.subject_item.split("|")[-1]
  715. begin_time = vals["train_time_start"]
  716. end_time = vals["train_time_end"]
  717. if u"特种作业" in subject_item:
  718. send_training_notice_special(phone,subject_item,begin_time,end_time)
  719. cn.send_training_notice_special(user_id,subject_item,begin_time,end_time)
  720. else:
  721. send_training_notice(phone,subject_item,begin_time,end_time)
  722. cn.send_training_notice(user_id,subject_item,begin_time,end_time)
  723. #更新用户信息
  724. uid = cm.SignupOrders.objects.filter(id=_id).first().user_id
  725. userinfo = cm.UserInfo.objects.filter(id=uid).first().userinfo
  726. userinfo = json.loads(userinfo) if userinfo else {}
  727. #if userinfo:
  728. # vals.update(userinfo)
  729. userinfo.update(vals)
  730. cm.UserInfo.objects.filter(id=uid).update(userinfo=json.dumps(userinfo))
  731. vals["cid"] = uid
  732. vals["update_time"] = datetime.datetime.now()
  733. subject_id = vals.get("subject_id")
  734. train_type = vals.get("train_type")
  735. subject_item = cm.Subject.objects.filter(id=subject_id).first()
  736. if subject_item:
  737. if train_type == "新办":
  738. vals["price"] = subject_item.price_new
  739. if train_type == "复审":
  740. vals["price"] = subject_item.price_re
  741. if train_type == "换证":
  742. vals["price"] = subject_item.price_change
  743. obj = cm.SignupOrders.objects.filter(id__in=ids).update(**vals)
  744. if qdata.get("exam_time"):
  745. #发送培训通知
  746. from utils.aliyun_sms import send_exam_notice
  747. import common.common_notice as cn
  748. sorders = cm.SignupOrders.objects.filter(id__in=ids)
  749. for so in sorders:
  750. name = so.name
  751. user_id = so.user_id
  752. phone = so.phone
  753. subject_item = so.subject_item.split("|")[-1]
  754. exam_time = vals["exam_time"]
  755. send_exam_notice(phone,name,subject_item,exam_time)
  756. cn.send_exam_notice(user_id,name,subject_item,exam_time)
  757. return obj
  758. def delete_signup(request):
  759. """
  760. """
  761. uid = request.user.id
  762. #uid = 15
  763. qdata = request.json
  764. need_params = ["id"]
  765. mse = ccf.check_params(*need_params,**qdata)
  766. if mse:
  767. raise ce.TipException(mse)
  768. id = qdata.get("id")
  769. rst = cm.SignupOrders.objects.filter(id=id).delete()
  770. return id
  771. def get_yrxindex(request):
  772. """
  773. """
  774. recs = cm.ClassRoom.objects.all()
  775. recs = list(recs.values())
  776. teachers = [{
  777. "name":u"肖老师",
  778. "avatar":"肖老师",
  779. "lessons_count":2,
  780. "students":200
  781. }]
  782. data = {
  783. "rec":recs,
  784. "lessons":recs,
  785. "teachers":teachers
  786. }
  787. return data
  788. def get_yrxlist(request):
  789. """
  790. """
  791. recs = cm.ClassRoom.objects.all()
  792. recs = list(recs.values())
  793. teachers = [{
  794. "name":u"肖老师",
  795. "avatar":"肖老师",
  796. "lessons_count":2,
  797. "students":200
  798. }]
  799. data = {
  800. "rec":recs,
  801. "lessons":recs,
  802. "teachers":teachers
  803. }
  804. return recs
  805. def get_yrxdetail(request):
  806. qdata = request.json
  807. need_params = ["id"]
  808. mse = ccf.check_params(*need_params,**qdata)
  809. if mse:
  810. raise ce.TipException(mse)
  811. id = qdata.get("id")
  812. data = list(cm.ClassRoom.objects.filter(id=id).values())
  813. data = data[0] if data else {}
  814. if data:
  815. lessons = list(cm.Lessons.objects.filter(classroom_id=id).values())
  816. data["lessons"] = lessons
  817. return data
  818. def get_subject_tree(sub=None,data=None):
  819. """
  820. """
  821. if sub:
  822. roots = list(cm.Subject.objects.filter(pid=sub).values())
  823. for citem in roots:
  824. citem["device_cats"] = json.loads(citem["device_cats"]) if citem["device_cats"] else []
  825. else:
  826. roots = list(cm.Subject.objects.filter(Q(pid=0)|Q(pid__isnull=True)).values())
  827. for citem in roots:
  828. citem["device_cats"] = json.loads(citem["device_cats"]) if citem["device_cats"] else []
  829. for rn in roots:
  830. rn["label"] = rn["name"]
  831. rn["value"] = rn["id"]
  832. children = list(cm.Subject.objects.filter(pid=rn["id"]).values())
  833. for citem in children:
  834. citem["label"] = citem["name"]
  835. citem["value"] = citem["id"]
  836. citem["device_cats"] = json.loads(citem["device_cats"]) if citem["device_cats"] else []
  837. rn["children"] = children
  838. for rnn in rn["children"]:
  839. children = list(cm.Subject.objects.filter(pid=rnn["id"]).values())
  840. for citem in children:
  841. citem["label"] = citem["name"]
  842. citem["value"] = citem["id"]
  843. citem["device_cats"] = json.loads(citem["device_cats"]) if citem["device_cats"] else []
  844. rnn["children"] = children
  845. return roots
  846. def get_subjectitem_tree(request):
  847. """
  848. """
  849. qdata = request.json
  850. subject_id = qdata.get("subject_id")
  851. data = get_subject_tree(subject_id)
  852. return data
  853. def post_paper(request):
  854. qdata = request.json
  855. need_params = ["paper_id","questions"]
  856. mse = ccf.check_params(*need_params,**qdata)
  857. if mse:
  858. raise ce.TipException(mse)
  859. paper_id = qdata.get("paper_id")
  860. return True
  861. def save_video_time(request):
  862. qdata = request.json
  863. need_params = ["video_id","time"]
  864. mse = ccf.check_params(*need_params,**qdata)
  865. if mse:
  866. raise ce.TipException(mse)
  867. paper_id = qdata.get("paper_id")
  868. return True
  869. #def do_signup_pay(request):
  870. # qdata = request.json
  871. # need_params = ["signup_id","total_fee"]
  872. # mse = ccf.check_params(*need_params,**qdata)
  873. # if mse:
  874. # raise ce.TipException(mse)
  875. # signup_id = str(qdata.get("signup_id"))+str(int(time.time()))
  876. # total_fee = str(qdata.get("total_fee")*100)
  877. # #openid = "ow7pX46fM1xAVgCHH5eNcxkurRks"
  878. # openid = request.user.openid
  879. # prepayinfo = wxpay.get_wx_unifiedorder(signup_id,total_fee,openid)
  880. # prepayinfo["key"] = "kAHuCc2g4MINcLRk3o0lxT6J1Z04WuZq"
  881. # return prepayinfo
  882. def add_subject(request):
  883. """
  884. """
  885. qdata = request.json
  886. need_params = ["name","price_change","price_new","price_re"]
  887. mse = ccf.check_params(*need_params,**qdata)
  888. if mse:
  889. raise ce.TipException(mse)
  890. need_params.extend(["order","intro","pid","class_hour","update_class_hour","change_class_hour"])
  891. vals = ccf.get_need_params(*need_params,**qdata)
  892. vals["cid"] = request.user.id
  893. vals["cperson"] = request.user.name
  894. obj = cm.Subject.objects.create(**vals)
  895. return obj.id
  896. def update_subject(request):
  897. """
  898. """
  899. qdata = request.json
  900. need_params = ["id","name","price_change","price_new","price_re"]
  901. mse = ccf.check_params(*need_params,**qdata)
  902. if mse:
  903. raise ce.TipException(mse)
  904. id = qdata.get("id")
  905. need_params.extend(["order","pid","intro","class_hour","update_class_hour","change_class_hour","device_cats"])
  906. vals = ccf.get_need_params(*need_params,**qdata)
  907. vals["device_cats"] = json.dumps(vals["device_cats"])
  908. vals["cid"] = request.user.id
  909. vals["cperson"] = request.user.name
  910. rst = cm.Subject.objects.filter(id=id).update(**vals)
  911. return id
  912. def delete_subject(request):
  913. """
  914. """
  915. qdata = request.json
  916. need_params = ["id"]
  917. mse = ccf.check_params(*need_params,**qdata)
  918. if mse:
  919. raise ce.TipException(mse)
  920. id = qdata.get("id")
  921. rst = cm.Subject.objects.filter(id=id).delete()
  922. return id
  923. def get_subject_info(request):
  924. """
  925. """
  926. qdata = request.json
  927. need_params = ["id"]
  928. mse = ccf.check_params(*need_params,**qdata)
  929. if mse:
  930. raise ce.TipException(mse)
  931. id = qdata.get("id")
  932. rst = cm.Subject.objects.filter(id=id).values().first()
  933. return rst
  934. def get_subject_ids(subject_id,data=None):
  935. """
  936. """
  937. data = data if data else []
  938. data.append(int(subject_id))
  939. #subobj = cm.Subject.objects.filter(pid=subject_id).first()
  940. subobjs = cm.Subject.objects.filter(pid=subject_id)
  941. for subobj in subobjs:
  942. get_subject_ids(subobj.id,data)
  943. return data
  944. def get_signup_list(request):
  945. """
  946. """
  947. uid = request.user.id
  948. qdata = request.json
  949. qset = cm.SignupOrders.objects.filter(status=1).order_by("-update_time")
  950. if qdata.get("train_type"):
  951. qset = qset.filter(train_type=qdata.get("train_type"))
  952. if qdata.get("subject_item"):
  953. subject_item = qdata.get("subject_item").split("|")[-1]
  954. subject_id = cm.Subject.objects.filter(name=subject_item).first().id
  955. subject_ids = get_subject_ids(subject_id)
  956. #qset = qset.filter(subject_item__icontains=qdata.get("subject_item"))
  957. qset = qset.filter(subject_id__in=subject_ids)
  958. if qdata.get("name"):
  959. qset = qset.filter(name__icontains=qdata.get("name"))
  960. if qdata.get("idno"):
  961. qset = qset.filter(idno__icontains=qdata.get("idno"))
  962. if qdata.get("phone"):
  963. qset = qset.filter(phone__icontains=qdata.get("phone"))
  964. if qdata.get("signup_time"):
  965. stime = ccf.str_to_datetime(qdata.get("signup_time").split(",")[0],"%Y-%m-%d %H:%M:%S")
  966. etime = ccf.str_to_datetime(qdata.get("signup_time").split(",")[1],"%Y-%m-%d %H:%M%:%S")
  967. qset = qset.filter(ctime__gte=stime,ctime__lte=etime)
  968. if qdata.get("bill_type"):
  969. qset = qset.filter(bill_type=qdata.get("bill_type"))
  970. if qdata.get("receive_card"):
  971. qset = qset.filter(receive_card=qdata.get("receive_card"))
  972. if qdata.get("set_exam_time"):
  973. if qdata.get("set_exam_time") == 1:
  974. qset = qset.filter(exam_time__isnull=False)
  975. else:
  976. qset = qset.filter(exam_time__isnull=True)
  977. if qdata.get("exam_time"):
  978. qset = qset.filter(exam_time=qdata.get("exam_time"))
  979. if qdata.get("set_train_time"):
  980. if qdata.get("set_train_time") == 1:
  981. qset = qset.filter(train_time__isnull=False)
  982. else:
  983. qset = qset.filter(train_time__isnull=True)
  984. if qdata.get("train_time"):
  985. stime = ccf.str_to_datetime(qdata.get("train_time").split(",")[0],"%Y-%m-%d")
  986. etime = ccf.str_to_datetime(qdata.get("train_time").split(",")[1],"%Y-%m-%d")
  987. qset = qset.filter(train_time_start__gte=stime,train_time_end__lte=etime)
  988. if qdata.get("company"):
  989. qset = qset.filter(company__icontains=qdata.get("company"))
  990. if qdata.get("order_status"):
  991. qset = qset.filter(order_status=qdata.get("order_status"))
  992. if qdata.get("class_id"):
  993. qset = qset.filter(class_id=qdata.get("class_id"))
  994. qset1 = qset.filter(status=1).exclude(order_status=7).order_by("-update_time")
  995. qset2 = qset.filter(status=1,order_status=7).order_by("-update_time")
  996. data = list(qset1.values())+list(qset2.values())
  997. page = int(qdata.get("page",1))
  998. page_size = int(qdata.get("page_size",20))
  999. #total,qset = ccc.get_page_qset(qset,page,page_size)
  1000. total,data = ccf.get_page_list(data,page,page_size)
  1001. #data = list(qset.values("name","phone","order_status","remark","subject_item","train_type","ctime","id"))
  1002. #data = list(qset.values())
  1003. for d in data:
  1004. if d["train_time_start"] and d["train_time_end"]:
  1005. d["train_time"] = ccf.datetime_to_str(d["train_time_start"])+","+ccf.datetime_to_str(d["train_time_end"])
  1006. else:
  1007. d["train_time"] = ""
  1008. try:
  1009. d["subject_item0"] = d["subject_item"].split("|")[0]
  1010. except:
  1011. d["subject_item0"] = ""
  1012. try:
  1013. d["subject_item1"] = d["subject_item"].split("|")[1]
  1014. except:
  1015. d["subject_item1"] = ""
  1016. try:
  1017. d["subject_item2"] = d["subject_item"].split("|")[2]
  1018. except:
  1019. d["subject_item2"] = ""
  1020. d["verify"] = cm.UserInfo.objects.filter(id=uid).first().verify
  1021. d["signup_time"] = d["pay_time"]
  1022. try:
  1023. d["class_name"] = cm.Class.objects.filter(id=d["class_id"]).first().name
  1024. except:
  1025. d["class_name"] = ""
  1026. return total,data
  1027. #def get_subject_ids(subject_id,data=None):
  1028. # """
  1029. # """
  1030. # data = data if data else []
  1031. # data.append(int(subject_id))
  1032. # subobj = cm.Subject.objects.filter(id=subject_id).first()
  1033. # if subobj and int(subobj.pid):
  1034. # get_subject_ids(subobj.pid,data)
  1035. # return data
  1036. #def get_signup_info(request):
  1037. # """
  1038. # """
  1039. # qdata = request.json
  1040. # need_params = ["id"]
  1041. # mse = ccf.check_params(*need_params,**qdata)
  1042. # if mse:
  1043. # raise ce.TipException(mse)
  1044. # id = qdata.get("id")
  1045. # print id,888888888888888
  1046. # rst = cm.SignupOrders.objects.filter(id=id).values().first()
  1047. # print rst,99999999999999
  1048. # print rst["subject_id"],777777777777777
  1049. # subject_ids = get_subject_ids(rst["subject_id"])
  1050. # subject_ids.sort()
  1051. # rst["subject_ids"] = subject_ids
  1052. # rst["order_no"] = "yf1212"
  1053. # rst["order_time"] = "2020-05-19 11:22:22"
  1054. # rst["pay_status"] = 1
  1055. # rst["pay_status"] = 1
  1056. # rst["total_fee"] = 1000
  1057. # rst["get_card_time"] = "2020-05-19 11:22:22"
  1058. # rst["review_card_time"] = "2020-05-19 11:22:22"
  1059. # rst["change_card_time"] = "2020-05-19 11:22:22"
  1060. # return rst
  1061. def addText(img,orgpath,string,path,point=(100,100),size=32):
  1062. draw = ImageDraw.Draw(img)
  1063. fontpath = os.path.join(settings.BASE_DIR,"templates/font/simsun.ttc")
  1064. #fontpath = os.path.join(settings.BASE_DIR,"templates/font/consola.ttf")
  1065. font = ImageFont.truetype(fontpath, size,encoding="unic")
  1066. draw.text(point,string,fill='black',font=font)
  1067. img.save(path)
  1068. def update_signup_state(request):
  1069. uid = request.user.id
  1070. qdata = request.json
  1071. need_params = ["id","order_status"]
  1072. mse = ccf.check_params(*need_params,**qdata)
  1073. if mse:
  1074. raise ce.TipException(mse)
  1075. vals = ccf.get_need_params(*need_params,**qdata)
  1076. ids = vals.pop("id").split(",")
  1077. minx = cm.SignupOrders.objects.filter(id__in=ids).order_by("order_status").first().order_status
  1078. if vals.get("order_status") < minx and vals.get("order_status")!=-2:
  1079. raise ce.TipException(u"非法操作!")
  1080. if vals.get("order_status"):
  1081. if int(vals.get("order_status")) > 0:
  1082. cm.UserInfo.objects.filter(id=uid).update(verify=1)
  1083. #正向操作顺序验证
  1084. sx_flag = False
  1085. sx_status_dct = {-1:[0,-1],0:[1,-2,0],1:[2,1],2:[3,2],3:[7,3],7:[9,7]}
  1086. sorders = cm.SignupOrders.objects.filter(id__in=ids)
  1087. for so in sorders:
  1088. cur_status = so.order_status
  1089. if not vals.get("order_status") in sx_status_dct[cur_status]:
  1090. sx_flag = True
  1091. if sx_flag:
  1092. raise ce.TipException(u"非法操作!")
  1093. #审核通过发送支付通知
  1094. vals["update_time"] = datetime.datetime.now()
  1095. rst = cm.SignupOrders.objects.filter(id__in=ids).update(**vals)
  1096. if int(vals.get("order_status")) == 1:
  1097. from utils.aliyun_sms import send_audit_notice
  1098. import common.common_notice as cn
  1099. for item in cm.SignupOrders.objects.filter(id__in=ids):
  1100. user_id = item.user_id
  1101. phone = item.phone
  1102. subject_item0 = item.subject_item.split("|")[-1]
  1103. send_audit_notice(phone,subject_item0)
  1104. cn.send_audit_notice(user_id,item.subject_item.split("|")[-1])
  1105. if int(vals.get("order_status")) == -2:
  1106. from utils.aliyun_sms import send_unauthed_notice
  1107. import common.common_notice as cn
  1108. for item in cm.SignupOrders.objects.filter(id__in=ids):
  1109. user_id = item.user_id
  1110. phone = item.phone
  1111. send_unauthed_notice(phone)
  1112. cn.send_unauthed_notice(user_id)
  1113. if str(vals.get("order_status")) == "3":
  1114. #root_target = os.path.join(settings.BASE_DIR,"../static/upload")
  1115. root_target = os.path.join(settings.STATIC_ROOT,"upload")
  1116. root = os.path.join(settings.BASE_DIR,"templates")
  1117. class_hour_tpl = os.path.join(root,"classhour.png")
  1118. signuporders = cm.SignupOrders.objects.filter(id__in=ids)
  1119. for so in signuporders:
  1120. subject_item = so.subject_item
  1121. subject_item0 = subject_item.split("|")[0]
  1122. subject_item1 = subject_item.split("|")[1]
  1123. subject_item2 = subject_item.split("|")[2]
  1124. train_type = so.train_type
  1125. name = so.name
  1126. subject = cm.Subject.objects.filter(id=so.subject_id).first()
  1127. if train_type == u"新办":
  1128. total_classhour = subject.class_hour
  1129. elif train_type == u"复审":
  1130. total_classhour = subject.update_class_hour
  1131. else:
  1132. total_classhour = subject.change_class_hour
  1133. class_hour_file = os.path.join(root_target,"classhour{}.png".format(so.id))
  1134. #
  1135. img = Image.open(class_hour_tpl)
  1136. addText(img,class_hour_tpl,unicode("巴中逸沣安全培训学时证明","utf-8"),class_hour_file,(160,65),24)
  1137. addText(img,class_hour_tpl,unicode("姓名:{}".format(name),"utf-8"),class_hour_file,(80,100),20)
  1138. addText(img,class_hour_tpl,unicode("工种:{}".format(subject_item0),"utf-8"),class_hour_file,(80,130),20)
  1139. addText(img,class_hour_tpl,unicode("操作类型:{}".format(subject_item1),"utf-8"),class_hour_file,(80,160),20)
  1140. addText(img,class_hour_tpl,unicode("准操项目:{}".format(subject_item2),"utf-8"),class_hour_file,(80,190),20)
  1141. addText(img,class_hour_tpl,unicode("培训类型:{}".format(train_type),"utf-8"),class_hour_file,(80,220),20)
  1142. addText(img,class_hour_tpl,unicode("总学时:{}".format(total_classhour),"utf-8"),class_hour_file,(80,250),20)
  1143. addText(img,class_hour_tpl,unicode("已完成学时:{}".format(total_classhour),"utf-8"),class_hour_file,(80,280),20)
  1144. url = "https://wxapi.yifeng2016.com/upload" + class_hour_file.replace(root_target,"")
  1145. so.classhour_cert_url = url
  1146. so.update_time = datetime.datetime.now()
  1147. so.save()
  1148. #考试完成记录复审和换证时间
  1149. if str(vals.get("order_status")) == "7":
  1150. now = datetime.datetime.now().date()
  1151. signuporders = cm.SignupOrders.objects.filter(id__in=ids)
  1152. for so in signuporders:
  1153. subject_item = so.subject_item
  1154. subject_item0 = subject_item.split("|")[0]
  1155. #特种作业复审3年,换证6年
  1156. if u"特种作业" in subject_item0:
  1157. #so.update_time = now + datetime.timedelta(days=3*365)
  1158. so.change_time = now + datetime.timedelta(days=6*365)
  1159. #换证3年每年复审
  1160. else:
  1161. #so.update_time = now + datetime.timedelta(days=365)
  1162. so.change_time = now + datetime.timedelta(days=3*365)
  1163. so.update_time = datetime.datetime.now()
  1164. so.save()
  1165. return rst
  1166. def download_signup(request):
  1167. """
  1168. """
  1169. qdata = request.json
  1170. need_params = ["id"]
  1171. mse = ccf.check_params(*need_params,**qdata)
  1172. if mse:
  1173. raise ce.TipException(mse)
  1174. header = [u"姓名",u"联系电话",u"状态",u"管理员备注",u"报名类型",u"作业类别",
  1175. u"准操项目",u"培训类型",u"考试时间",u"支付状态",u"支付金额",u"更新时间",
  1176. u"发票类型",u"领证方式",u"实名认证",u"报名时间",u"培训开始时间",u"培训结束时间",u"公司名称"]
  1177. ids = qdata.get("id").split(",")
  1178. qset = cm.SignupOrders.objects.filter(id__in=ids)
  1179. data = []
  1180. for o in qset:
  1181. subject_item0 = o.subject_item.split("|")[0]
  1182. subject_item1 = o.subject_item.split("|")[1]
  1183. subject_item2 = o.subject_item.split("|")[2]
  1184. row = [o.name,o.phone,o.order_status,o.remark,
  1185. subject_item0,subject_item1,subject_item2,o.train_type,o.exam_time,
  1186. o.order_status,o.price,o.ctime,o.bill_type,o.receive_card,o.order_status,
  1187. o.ctime,o.train_time_start,o.train_time_end,o.company]
  1188. data.append(row)
  1189. exceltool = ExcelTool("/tmp/demo.xls")
  1190. xlsdata = exceltool.save_data(u"学员报名数据表",header,data)
  1191. return xlsdata
  1192. def download_class_stu(request):
  1193. """
  1194. """
  1195. qdata = request.json
  1196. need_params = ["id"]
  1197. mse = ccf.check_params(*need_params,**qdata)
  1198. if mse:
  1199. raise ce.TipException(mse)
  1200. header = [u"姓名",u"联系电话",u"状态",u"管理员备注",u"报名类型",u"作业类别",
  1201. u"准操项目",u"培训类型",u"考试时间",u"支付状态",u"支付金额",u"更新时间",
  1202. u"发票类型",u"领证方式",u"实名认证",u"报名时间",u"培训开始时间",u"培训结束时间",u"公司名称"]
  1203. ids = qdata.get("id").split(",")
  1204. ids = [51,52,52,54]
  1205. qset = cm.SignupOrders.objects.filter(id__in=ids)
  1206. data = []
  1207. for o in qset:
  1208. subject_item0 = o.subject_item.split("|")[0]
  1209. subject_item1 = o.subject_item.split("|")[1]
  1210. subject_item2 = o.subject_item.split("|")[2]
  1211. row = [o.name,o.phone,o.order_status,o.remark,
  1212. subject_item0,subject_item1,subject_item2,o.train_type,o.exam_time,
  1213. o.order_status,o.price,o.ctime,o.bill_type,o.receive_card,o.order_status,
  1214. o.ctime,o.train_time_start,o.train_time_end,o.company]
  1215. data.append(row)
  1216. exceltool = ExcelTool("/tmp/demo.xls")
  1217. xlsdata = exceltool.save_data(u"学员报名数据表",header,data)
  1218. return xlsdata
  1219. def get_zipfile(files):
  1220. """
  1221. """
  1222. cur_path = os.getcwd()
  1223. path = os.path.split(files[0])[0]
  1224. os.chdir(path)
  1225. temp = tempfile.TemporaryFile()
  1226. archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
  1227. for f in files:
  1228. if os.path.exists(f):
  1229. f = os.path.split(f)[-1]
  1230. archive.write(f)
  1231. os.remove(f)
  1232. archive.close()
  1233. os.chdir(cur_path)
  1234. temp.seek(0)
  1235. return temp
  1236. def set_style(name,height,bold=False,left=True):
  1237. style = xlwt.XFStyle() # 初始化样式
  1238. font = xlwt.Font() # 为样式创建字体
  1239. font.name = name # 'Times New Roman'
  1240. font.bold = bold
  1241. font.color_index = 4
  1242. font.height = height
  1243. #borders= xlwt.Borders()
  1244. #borders.left= 6
  1245. #borders.right= 6
  1246. #borders.top= 6
  1247. #borders.bottom= 6
  1248. alignment = xlwt.Alignment()
  1249. if left:
  1250. alignment.horz = 0x01
  1251. else:
  1252. alignment.horz = 0x03
  1253. alignment.vert = 0x01
  1254. style.font = font
  1255. style.alignment = alignment
  1256. #style.borders = borders
  1257. return style
  1258. def copy_excel(src_file):
  1259. """
  1260. """
  1261. # 首先用 xlrd 读取一张表格
  1262. read_file = src_file
  1263. workbook = xlrd.open_workbook(read_file, formatting_info=True)
  1264. # 拷贝此表格
  1265. new_book = copy(workbook)
  1266. sheet = new_book.get_sheet(0)
  1267. #return sheet
  1268. #sheet.write_merge(8,8,0,8, u'考试时间: 年 月 日',set_style('Times New Roman',220,True))
  1269. #sheet.write_merge(9,9,0,8, u'四川省安全生产监督管理局',set_style('Times New Roman',220,True,False))
  1270. # 更多请见 xlwt_demo.py.
  1271. #new_output_path = 'result2.xls'
  1272. #new_book.save(new_output_path)
  1273. return sheet,new_book
  1274. def download_zip1(request):
  1275. """
  1276. """
  1277. qdata = request.json
  1278. need_params = ["id","type"]
  1279. mse = ccf.check_params(*need_params,**qdata)
  1280. if mse:
  1281. raise ce.TipException(mse)
  1282. ids = qdata.get("id").split(",")
  1283. qset = cm.SignupOrders.objects.filter(id__in=ids)
  1284. root = os.path.join(settings.BASE_DIR,"templates")
  1285. type = qdata.get("type")
  1286. if type == "apply":
  1287. tpl = os.path.join(root,"apply_template.docx")
  1288. files = []
  1289. for o in qset:
  1290. doc = DocxTemplate(tpl)
  1291. fname = os.path.join(root,u"{}.docx".format(o.name)).decode('utf-8').encode('gbk')
  1292. subject_item0 = o.subject_item.split("|")[0]
  1293. subject_item1 = o.subject_item.split("|")[1]
  1294. subject_item2 = o.subject_item.split("|")[2]
  1295. context = {"name":o.name,"sex":o.sex,"education":o.education,"idno":o.idno,"class_id":o.class_id,
  1296. "company":o.company,"phone":o.phone,"train_type":o.train_type,
  1297. "train_time_start":o.train_time_start,"train_time_end":o.train_time_end}
  1298. doc.render(context)
  1299. doc.save(fname)
  1300. files.append(fname)
  1301. else:
  1302. files = []
  1303. tpl_1 = os.path.join(root,"pxqd.xls")
  1304. tpl_2 = os.path.join(root,"szksqd.xls")
  1305. tpl_3 = os.path.join(root,"xxkqqd.xls")
  1306. target_1 = os.path.join(root,u"培训签到表.xls")
  1307. target_2 = os.path.join(root,u"实作考试签到表.xls")
  1308. target_3 = os.path.join(root,u"新训考勤签到表.xls")
  1309. #培训签到表
  1310. sheet1,book = copy_excel(tpl_1)
  1311. for i,o in enumerate(qset):
  1312. #培训签到表
  1313. sheet1.write(i+2,0,i+1)
  1314. sheet1.write(i+2,1,o.name)
  1315. ##实作考试签到表
  1316. #sheet2 = copy_excel(tpl_2)
  1317. #sheet2.write(i+4,0,i+1)
  1318. #sheet2.write(i+4,0,o.name)
  1319. ##新训考勤签到表
  1320. #sheet3 = copy_excel(tpl_2)
  1321. #sheet3.write(i+4,0,i+1)
  1322. #sheet3.write(i+4,0,o.name)
  1323. book.save(target_1)
  1324. files.append(target_1)
  1325. #实作考试签到表
  1326. if qset.count() == 1:
  1327. sheet2,book = copy_excel(tpl_2)
  1328. for i,o in enumerate(qset):
  1329. sheet2.write(i+3,0,i+1,set_style('Times New Roman',220,False))
  1330. sheet2.write(i+3,1,o.name,set_style('Times New Roman',220,False))
  1331. sheet2.write_merge(qset.count()+3,qset.count()+3,0,8, u'考试时间: 年 月 日',set_style('Times New Roman',220,True))
  1332. sheet2.write_merge(qset.count()+4,qset.count()+4,0,8, u'四川省安全生产监督管理局',set_style('Times New Roman',220,True,False))
  1333. book.save(target_2)
  1334. files.append(target_2)
  1335. elif qset.count() == 2:
  1336. sheet2,book = copy_excel(tpl_2)
  1337. for i,o in enumerate(qset):
  1338. sheet2.write(3,i*5+i,i+1,set_style('Times New Roman',220,False))
  1339. sheet2.write(3,i*5+i+1,o.name,set_style('Times New Roman',220,False))
  1340. sheet2.write_merge(4,4,0,8, u'考试时间: 年 月 日',set_style('Times New Roman',220,True))
  1341. sheet2.write_merge(5,5,0,8, u'四川省安全生产监督管理局',set_style('Times New Roman',220,True,False))
  1342. book.save(target_2)
  1343. files.append(target_2)
  1344. else:
  1345. qdata = list(qset.values_list("name",flat=True))
  1346. rows = ccf.list_split(qdata,2)
  1347. sheet2,book = copy_excel(tpl_2)
  1348. for i,item in enumerate(rows):
  1349. sheet2.write(i+3,0,i+1,set_style('Times New Roman',220,False))
  1350. sheet2.write(i+3,1,item[0],set_style('Times New Roman',220,False))
  1351. if len(item) == 2:
  1352. sheet2.write(i+3,5,i+3,set_style('Times New Roman',220,False))
  1353. sheet2.write(i+3,6,item[1],set_style('Times New Roman',220,False))
  1354. sheet2.write_merge(len(rows)+3,len(rows)+3,0,8, u'考试时间: 年 月 日',set_style('Times New Roman',220,True))
  1355. sheet2.write_merge(len(rows)+4,len(rows)+4,0,8, u'四川省安全生产监督管理局',set_style('Times New Roman',220,True,False))
  1356. book.save(target_2)
  1357. files.append(target_2)
  1358. if files:
  1359. zipfile = get_zipfile(files)
  1360. return zipfile
  1361. def download_zip(request):
  1362. """
  1363. """
  1364. qdata = request.json
  1365. need_params = ["id","type"]
  1366. mse = ccf.check_params(*need_params,**qdata)
  1367. if mse:
  1368. raise ce.TipException(mse)
  1369. ids = qdata.get("id").split(",")
  1370. qset = cm.SignupOrders.objects.filter(id__in=ids)
  1371. root = os.path.join(settings.BASE_DIR,"templates")
  1372. type = qdata.get("type")
  1373. if type == "apply":
  1374. tpl = os.path.join(root,"apply_template.docx")
  1375. tpl_1 = os.path.join(root,"apply_template_tzzy.docx")
  1376. tpl_2 = os.path.join(root,"apply_template_aqxy.docx")
  1377. tpl_3 = os.path.join(root,"apply_template_cyry.docx")
  1378. tpl_4 = os.path.join(root,"apply_template_tzsb.docx")
  1379. files = []
  1380. for o in qset:
  1381. try:
  1382. subject_item = o.subject_item
  1383. if u"特种作业" in subject_item:
  1384. doc = DocxTemplate(tpl_1)
  1385. #elif u"负责人" in subject_item:
  1386. elif u"安全生产知识和管理能力" in subject_item:
  1387. doc = DocxTemplate(tpl_2)
  1388. elif u"特种设备" in subject_item:
  1389. doc = DocxTemplate(tpl_4)
  1390. else:
  1391. doc = DocxTemplate(tpl_3)
  1392. subject_item0 = o.subject_item.split("|")[0]
  1393. subject_item1 = o.subject_item.split("|")[1]
  1394. subject_item2 = o.subject_item.split("|")[2]
  1395. try:
  1396. subject_item_code = re.search(r"\w+",subject_item2).group()
  1397. except:
  1398. subject_item_code = ""
  1399. fname = u"{}_{}.docx".format(o.name,subject_item2)
  1400. #fname = u"{}.docx".format(o.name)
  1401. #fname = unicode(fname,"utf-8")
  1402. fname = os.path.join(root,fname)
  1403. birthday = "{}-{}-{}".format(o.idno[6:10],o.idno[10:12],o.idno[12:14])
  1404. idnoimg_face = o.idnoimg_face.replace(settings.HOST,settings.STATIC_ROOT)
  1405. idnoimg_back = o.idnoimg_back.replace(settings.HOST,settings.STATIC_ROOT)
  1406. education_img = o.education_img.replace(settings.HOST,settings.STATIC_ROOT)
  1407. oldcard_img = o.oldcard_img.replace(settings.HOST,settings.STATIC_ROOT) if o.oldcard_img else None
  1408. classhour_cert_url = o.classhour_cert_url.replace(settings.HOST,settings.STATIC_ROOT) if o.classhour_cert_url else None
  1409. halfbody_img = o.halfbody_img.replace(settings.HOST,settings.STATIC_ROOT) if o.halfbody_img else None
  1410. idnoimg_face = thumbnail_pic(idnoimg_face) if idnoimg_face else None
  1411. idnoimg_back = thumbnail_pic(idnoimg_back) if idnoimg_back else None
  1412. education_img = thumbnail_pic(education_img) if education_img else None
  1413. oldcard_img = thumbnail_pic(oldcard_img) if oldcard_img else None
  1414. classhour_cert_url = thumbnail_pic(classhour_cert_url) if classhour_cert_url else None
  1415. halfbody_img = thumbnail_pic(halfbody_img) if halfbody_img else None
  1416. context = {"name":o.name,"sex":o.sex,"education":o.education,"idno":o.idno,"class_id":o.class_id,
  1417. "company":o.company,"phone":o.phone,"train_type":o.train_type,"subject_item1":subject_item1,
  1418. "subject_item2":subject_item2,"train_time_start":o.train_time_start,"subject_item_code":subject_item_code,
  1419. "train_time_end":o.train_time_end,"birthday":birthday,
  1420. "idnoimg_face":InlineImage(doc,idnoimg_face,height=Mm(82.5),width=Mm(140.66)),
  1421. "idnoimg_back":InlineImage(doc,idnoimg_back,height=Mm(82.5),width=Mm(140.66)),
  1422. "halfbody_img":InlineImage(doc,halfbody_img,height=Mm(30.97),width=Mm(28.91)),
  1423. "education_img":InlineImage(doc,education_img,height=Mm(82.5),width=Mm(140.66))
  1424. }
  1425. if oldcard_img and o.train_type in [u"复审",u"换证"]:
  1426. context.update({
  1427. "oldcard_img":InlineImage(doc,oldcard_img,height=Mm(82.5),width=Mm(140.66))
  1428. })
  1429. if classhour_cert_url:
  1430. context.update({
  1431. "classhour_cert_url":InlineImage(doc,classhour_cert_url,height=Mm(82.5),width=Mm(140.66))
  1432. })
  1433. doc.render(context)
  1434. doc.save(fname)
  1435. files.append(fname)
  1436. except Exception as e:
  1437. import traceback
  1438. traceback.print_exc()
  1439. print e,8888888888888
  1440. continue
  1441. else:
  1442. files = []
  1443. data = {}
  1444. tpl_1 = os.path.join(root,"pxqd.xls")
  1445. tpl_2 = os.path.join(root,"szksqd.xls")
  1446. tpl_3 = os.path.join(root,"xxkqqd.xls")
  1447. tpl_4 = os.path.join(root,"qtcy.xls")
  1448. tpl_5 = os.path.join(root,"tzzy.xls")
  1449. target_1 = os.path.join(root,u"培训签到表.xls")
  1450. target_2 = os.path.join(root,u"实作考试签到表.xls")
  1451. target_3 = os.path.join(root,u"新训考勤签到表.xls")
  1452. target_4 = os.path.join(root,u"安全考核合格证人员名册.xls")
  1453. target_5 = os.path.join(root,u"大安全管理人员.xls")
  1454. target_6 = os.path.join(root,u"考试申报表.xls")
  1455. subject_item0 = qset.first().subject_item.split("|")[0]
  1456. subject_item1 = qset.first().subject_item.split("|")[1]
  1457. subject_item2 = qset.first().subject_item.split("|")[2]
  1458. qdata = list(qset.values_list("name",flat=True))
  1459. rows = ccf.list_split(qdata,2)
  1460. items = []
  1461. for i,item in enumerate(rows):
  1462. if len(item) == 2:
  1463. items.append([i+1,item[0],i+2,item[1]])
  1464. else:
  1465. items.append([i+1,item[0]])
  1466. data["subject_item0"] = subject_item0
  1467. data["subject_item1"] = subject_item1
  1468. data["subject_item2"] = subject_item2
  1469. data["items"] = items
  1470. #考勤签到表
  1471. tpl_1 = os.path.join(root,"kqqd.xls")
  1472. target_1 = os.path.join(root,u"考勤签到表.xls")
  1473. render_xls_tpl(tpl_1,data,target_1)
  1474. files.append(target_1)
  1475. #考试签到表
  1476. tpl_2 = os.path.join(root,"ksqd.xls")
  1477. target_2 = os.path.join(root,u"考试签到表.xls")
  1478. render_xls_tpl(tpl_2,data,target_2)
  1479. files.append(target_2)
  1480. #申报考试表
  1481. subject_item0 = qset.first().subject_item.split("|")[0]
  1482. if subject_item0 == u"其他安全生产从业人员":
  1483. items = []
  1484. for i,o in enumerate(qset):
  1485. subject_item1 = o.subject_item.split("|")[1]
  1486. subject_item2 = o.subject_item.split("|")[2]
  1487. items.append([i+1,o.name,o.sex,o.education,o.idno,o.company,
  1488. subject_item1,subject_item2,o.phone])
  1489. data["items"] = items
  1490. render_xls_tpl(tpl_4,data,target_4)
  1491. files.append(target_4)
  1492. else:
  1493. items = []
  1494. for i,o in enumerate(qset):
  1495. train_type = o.train_type
  1496. train_day = 3
  1497. subject_item1 = o.subject_item.split("|")[1]
  1498. subject_item2 = o.subject_item.split("|")[2]
  1499. birthday = "{}-{}-{}".format(o.idno[6:10],o.idno[10:12],o.idno[12:14])
  1500. items.append([i+1,"",o.name,o.sex,birthday,o.idno,o.education,
  1501. o.phone,subject_item1,subject_item2,train_type,u"巴中逸沣安全培训","",
  1502. train_day,u"正常考试","",o.company,"","",u"巴中市"])
  1503. #写xls文件
  1504. tpl_3 = os.path.join(root,"tzzykssbb.xls")
  1505. target_3 = os.path.join(root,u"特种作业考试申报表.xls")
  1506. sheet2,book = copy_excel(tpl_5)
  1507. for i,item in enumerate(items):
  1508. for j in range(0,len(item)):
  1509. sheet2.write(i+2,j,item[j],set_style('Times New Roman',220,False,True))
  1510. book.save(target_3)
  1511. files.append(target_3)
  1512. if files:
  1513. zipfile = get_zipfile(files)
  1514. return zipfile
  1515. def upload_paper_info(request):
  1516. """
  1517. """
  1518. upload_file = request.FILES['file']
  1519. if not upload_file:
  1520. raise ce.TipException(u"缺少文件参数!")
  1521. tmpxls = "/tmp/{}.xls".format(str(int(time.time())))
  1522. with open(tmpxls,"wb+") as f:
  1523. for chunk in upload_file.chunks():
  1524. f.write(chunk)
  1525. f.close()
  1526. exceltool = ExcelTool(tmpxls)
  1527. data = exceltool.get_data()
  1528. total_score = 100
  1529. total_time = 60
  1530. score = 1
  1531. for row in data:
  1532. subject_item = u"{}|{}|{}".format(row[0].strip(),row[1].strip(),row[2].strip())
  1533. train_type = row[3].strip()
  1534. title = row[4].strip()
  1535. subject_id = cm.Subject.objects.filter(name=row[2]).first().id
  1536. #新增试卷
  1537. obj,flag = cm.Papers.objects.get_or_create(**{
  1538. "title":title,
  1539. "subject_item":subject_item,
  1540. "train_type":train_type,
  1541. })
  1542. obj.total_time = row[11]
  1543. obj.subject_id = subject_id
  1544. #新增题库
  1545. qtype = {u"单选题":1,u"多选题":2,u"判断题":3}.get(row[5].strip())
  1546. title = row[6].strip()
  1547. options = row[7].strip()
  1548. answer = row[8].strip()
  1549. analysis = row[9].strip()
  1550. qobj,flag = cm.Questions.objects.get_or_create(**{
  1551. "title":title.encode("utf-8"),
  1552. "qtype":qtype,
  1553. "options":options.encode("utf-8"),
  1554. "answer":answer.encode("utf-8"),
  1555. "analysis":analysis.encode("utf-8")
  1556. })
  1557. qobj.score = row[10]
  1558. qobj.save()
  1559. obj.questions.add(qobj)
  1560. total_score = obj.total_score if obj.total_score else 0
  1561. total_score += row[10]
  1562. obj.total_score = total_score
  1563. obj.total_score = total_score
  1564. obj.save()
  1565. def get_permission_list(request):
  1566. data = [u"概览",u"项目管理",u"培训计划",u"在线培训",u"用户管理",u"内容管理",u"系统管理"]
  1567. roots = list(cm.Subject.objects.filter(Q(pid=0)|Q(pid__isnull=True)).values_list("name",flat=True))
  1568. data.extend(roots)
  1569. return data
  1570. def rotate_image(request):
  1571. """旋转图像
  1572. """
  1573. qdata = request.json
  1574. need_params = ["url"]
  1575. mse = ccf.check_params(*need_params,**qdata)
  1576. if mse:
  1577. raise ce.TipException(mse)
  1578. url = qdata.get("url")
  1579. if "?" in url:
  1580. url = url.split("?")[0]
  1581. _id = qdata.get("id")
  1582. imgpath = url.replace(settings.HOST,settings.STATIC_ROOT)
  1583. im = Image.open(imgpath)
  1584. if im.mode == "P":
  1585. im = im.convert('RGB')
  1586. im_rotate = im.transpose(Image.ROTATE_90)
  1587. #im_rotate = im.rotate(90)
  1588. im_rotate.save(imgpath)
  1589. url = imgpath.replace(settings.STATIC_ROOT,settings.HOST)
  1590. return url
  1591. def get_index_data(request):
  1592. """
  1593. """
  1594. ret = {}
  1595. user_count = cm.UserInfo.objects.filter(utype=2).count()
  1596. signup_count = cm.SignupOrders.objects.all().count()
  1597. paper_count = cm.Papers.objects.all().count()
  1598. videos_count = cm.Videos.objects.all().count()
  1599. waiting_pay_count = cm.SignupOrders.objects.filter(order_status=1).count()
  1600. waiting_audit_count = cm.SignupOrders.objects.filter(order_status=0).count()
  1601. waiting_exam_count = cm.SignupOrders.objects.filter(order_status=3).count()
  1602. ret["user_count"] = user_count
  1603. ret["signup_count"] = signup_count
  1604. ret["paper_count"] = paper_count
  1605. ret["videos_count"] = videos_count
  1606. ret["waiting_pay_count"] = waiting_pay_count
  1607. ret["waiting_audit_count"] = waiting_audit_count
  1608. ret["waiting_exam_count"] = waiting_exam_count
  1609. return ret
  1610. def allocation_class(request):
  1611. """
  1612. """
  1613. qdata = request.json
  1614. ids = qdata.get("ids")
  1615. class_id = qdata.get("class_id")
  1616. cm.SignupOrders.objects.filter(id__in=ids).update(class_id=class_id)