xjc 11 месяцев назад
Родитель
Сommit
81bc40ebaa

+ 6 - 1
src/common/core_views.py

@@ -212,8 +212,13 @@ def api_wapper(handler, request, is_vauth, *args, **kwargs):
     openid = request.META.get("HTTP_OPENID")
     user = UserInfo.objects.filter(openid=openid).first()
     #if is_vauth and not request.user.is_authenticated():
+    print(req_path)
     if is_vauth and not user:
-        return HttpResponse(status=403)
+        if req_path == "/api/wx/signup/list":
+            return JsonResponse({"code":0,"msg":"success","data":[]})
+            #return HttpResponse(status=200)
+        else:
+            return HttpResponse(status=403)
 
     body = request.body if hasattr(request, "body") else ""
     if "x-www-form-urlencoded" in request.content_type:

+ 3 - 0
src/common/models.py

@@ -75,6 +75,8 @@ class SignupOrders(models.Model):
     health_img = models.CharField(u"体检报告",max_length=256,blank=True,null=True)
     remark = models.CharField(u"备注",max_length=256,blank=True,null=True)
     admin_remark = models.CharField(u"后台备注",max_length=256,blank=True,null=True)
+    title_file = models.CharField(u"任职文件",max_length=256,blank=True,null=True)
+    job_exp = models.CharField(u"从业经验",max_length=256,blank=True,null=True)
 
     price = models.FloatField(u"价格信息",blank=True,null=True)
     out_trade_no = models.CharField(u"订单号",max_length=256,blank=True,null=True)
@@ -117,6 +119,7 @@ class Category(models.Model):
     order = models.IntegerField(u"排序",default=1)
     is_show = models.SmallIntegerField(u"是否展示",default=1)
     status = models.SmallIntegerField(u"状态(0删除)",default=1)
+    desc = models.TextField(u"描述说明",max_length=1000,blank=True,null=True)
 
     cid = models.IntegerField(u"创建人ID",blank=True)
     cperson = models.CharField(u"创建人",max_length=255,blank=True)

+ 29 - 5
src/manage/controls.py

@@ -32,7 +32,7 @@ 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,'JPEG')                                                     
+    im.save(thumb_name,'png')                                                     
     return thumb_name
 
 def render_xls_tpl(tpl,data,out):
@@ -420,6 +420,7 @@ def add_category(request):
     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)
@@ -528,7 +529,7 @@ def update_category(request):
     mse = ccf.check_params(*need_params,**qdata)
     if mse:
         raise ce.TipException(mse)
-    need_params.extend(["name","order"])
+    need_params.extend(["name","order","desc"])
     vals = ccf.get_need_params(*need_params,**qdata)
     id = vals.pop("id")
     vals["cid"] = uid
@@ -1097,11 +1098,24 @@ def get_signup_list(request):
             d["train_time"] = ccf.datetime_to_str(d["train_time_start"])+","+ccf.datetime_to_str(d["train_time_end"])
         else:
             d["train_time"] = ""
-        d["subject_item0"] = d["subject_item"].split("|")[0]
-        d["subject_item1"] = d["subject_item"].split("|")[1]
-        d["subject_item2"] = d["subject_item"].split("|")[2]
+        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):
@@ -1733,3 +1747,13 @@ def get_index_data(request):
     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)
+
+
+

+ 2 - 0
src/manage/urls_backstage.py

@@ -35,5 +35,7 @@ urlpatterns = [
     url(r'^docs/list$', views.DocsListView.as_view()),
     url(r'^img/rotate$', views.ImageRotateView.as_view()),
     url(r'^index$', views.IndexView.as_view()),
+    url(r'^genclasshour$', views.GenClassHourView.as_view()),
+    url(r'^signup/allocation$', views.SignupAllocation.as_view()),
 ]
 

+ 31 - 0
src/manage/views.py

@@ -1066,3 +1066,34 @@ class IndexView(cv.AdminView):
         except Exception as e:
             cv.tracefail()
             return cv.to_fail(e)
+
+
+class GenClassHourView(cv.BaseView):
+    def post(self, request):
+        """
+        #文件上传
+        @file:"",文件对象
+        """
+        import time
+        upload_file = request.FILES['file']
+        dest = settings.STATIC_ROOT + "/upload/"+str(int(time.time())) + upload_file.name
+        with open(dest,"wb+") as f:
+            for chunk in upload_file.chunks():
+                f.write(chunk)
+        f.close()
+        url = dest.replace(settings.STATIC_ROOT,"https://wxapi.yifeng2016.com")
+        return cv.to_suc({"url":url})
+
+
+class SignupAllocation(cv.AdminView):
+    def put(self, request):
+        """#学员分班
+        @ids:1
+        @class_id:12,#班级id
+        """
+        try:
+            rst = ctl.allocation_class(request)
+            return cv.to_suc(rst)
+        except Exception as e:
+            cv.tracefail()
+            return cv.to_fail(e)

BIN
src/templates/apply_template.docx.bk20220816


BIN
src/templates/apply_template_aqxy.docx


BIN
src/templates/apply_template_aqxy.docx.bk20220829


BIN
src/templates/apply_template_tzzy.docx


BIN
src/templates/apply_template_tzzy.docx.bk20210119


BIN
src/templates/stand_templates.docx


+ 42 - 0
src/utils/batch_gen_classhour.py

@@ -0,0 +1,42 @@
+#-*-coding:utf-8 -*-
+import os
+from PIL import Image
+from PIL import Image,ImageDraw,ImageFont
+from exceltool import ExcelTool
+
+def addText(img,orgpath,string,path,point=(100,100),size=32):
+    draw = ImageDraw.Draw(img)
+    fontpath = "/root/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)
+
+class_hour_tpl = "classhour.png"
+
+
+
+exceltool = ExcelTool("test.xls")
+data = exceltool.get_data()
+
+print(len(data))
+for item in data[2:]:
+    name = item[2].encode("utf-8")
+    subject_item0 = item[7].encode("utf-8") 
+    subject_item1 = item[7].encode("utf-8")
+    subject_item2 = item[8].encode("utf-8")
+    train_type = item[6].encode("utf-8")
+    total_classhour = 100
+    print(name)
+
+    class_hour_file = os.path.join("/root/classhour","classhour{}.png".format(name))
+
+    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)

+ 1 - 0
src/weixin/control_auth.py

@@ -32,6 +32,7 @@ def get_wxauth_info(request):
     #
     uid = request.user.id
     user = cm.UserInfo.objects.filter(id=uid).values().first()
+    
     user = json.loads(user["userinfo"])
     return user
 

+ 12 - 2
src/weixin/controls.py

@@ -198,7 +198,7 @@ def add_signup(request):
     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","device_cats"])
+        "halfbody_img","education_img","oldcard_img","area","address","subject_id","subject_item","device_cats","title_file","job_exp"])
     vals = ccf.get_need_params(*need_params,**qdata)
     if vals.get("device_cats"):
         vals["device_cats"] = json.dumps(vals["device_cats"])
@@ -242,7 +242,7 @@ def update_signup(request):
     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",
-        "subject_item","subject_id","address","device_cats","health_img"])
+        "subject_item","subject_id","address","device_cats","health_img","title_file","job_exp"])
     vals = ccf.get_need_params(*need_params,**qdata)
     if vals.get("device_cats"):
         vals["device_cats"] = json.dumps(vals["device_cats"])
@@ -519,3 +519,13 @@ def get_notice_list(request):
     return data
 
 
+def get_article_list(request):
+    """
+    """
+    qdata = request.json
+    category_id = qdata.get("category_id")
+    qset = cm.Article.objects.all()
+    if category_id:
+        qset = qset.filter(category_id=category_id)
+    data = list(qset.values())
+    return data

+ 1 - 0
src/weixin/urls_backstage.py

@@ -31,5 +31,6 @@ urlpatterns = [
     url(r'^yrxindex$', views.YuanrenxueIndexView.as_view()),
     url(r'^yrxlist$', views.YuanrenxueListView.as_view()),
     url(r'^yrxdetail$', views.YuanrenxueDetailView.as_view()),
+    url(r'^article/list$', views.ArticleListView.as_view()),
 ]
 

+ 18 - 0
src/weixin/views.py

@@ -266,6 +266,8 @@ class SignUpView(cv.AuthView):
         @halfbody_img:"",半身照
         @education_img:"",学历照
         @price:1800.00,价格
+        @title_file:"",任职文件
+        @job_exp:"",从业经验
         """
         try:
             rst = ctl.add_signup(request)
@@ -296,6 +298,8 @@ class SignUpView(cv.AuthView):
         @halfbody_img:"",半身照
         @education_img:"",学历照
         @price:1800.00,价格
+        @title_file:"",任职文件
+        @job_exp:"",从业经验
         """
         try:
             rst = ctl.update_signup(request)
@@ -380,6 +384,7 @@ class OpenidView(cv.BaseView):
             get_token_url = 'https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code' .format(wzf.WxPayConf_pub.APPID,wzf.WxPayConf_pub.APPSECRET,code)
 
             res = requests.get(get_token_url).json()                                   
+            print(res,333333333333333)
             if res.has_key('openid'):                                                 
                 open_id = res['openid']                                               
                 cache.set(code,open_id,24*3600)
@@ -406,3 +411,16 @@ class UploadFileView(cv.BaseView):
         f.close()
         url = dest.replace(settings.STATIC_ROOT,"https://wxapi.yifeng2016.com")
         return cv.to_suc({"url":url})
+
+
+class ArticleListView(cv.BaseView):
+    def get(self, request):
+        """#文章列表(小程序)
+        @category_id:1,分类id
+        """
+        try:
+            rst = ctl.get_article_list(request)
+            return cv.to_suc(rst)
+        except Exception as e:
+            cv.tracefail()
+            return cv.to_fail(e)