Selaa lähdekoodia

MOD:计划接口修改

cxyu 3 vuotta sitten
vanhempi
commit
b0fdc27095
3 muutettua tiedostoa jossa 102 lisäystä ja 7 poistoa
  1. 94 7
      web_module/tornado_api.py
  2. 5 0
      web_module/user_action.py
  3. 3 0
      wechat_action/sql_tools.py

+ 94 - 7
web_module/tornado_api.py

@@ -4,6 +4,7 @@ import tornado.log
 import tornado.ioloop
 import tornado.web
 import json
+import time
 from wechat_api.get_wechat_info import WechatApi
 from wechat_action.login_ad import LogIn
 from wechat_action import sql_tools
@@ -24,6 +25,8 @@ layout_typesetting_table = Table('layout_typesetting', db.metadata,
                                  autoload=True, autoload_with=db.engine)
 ad_plan_typesetting_table = Table('ad_plan_typesetting', db.metadata,
                                   autoload=True, autoload_with=db.engine)
+action_record_table = Table('action_record', db.metadata,
+                            autoload=True, autoload_with=db.engine)
 
 
 # 1.实现本机服务
@@ -44,6 +47,8 @@ class BaseHandler(tornado.web.RequestHandler):
 class create_ad_plan_remote(BaseHandler):
     # 1.批量创建计划
     # 返回创建计划是否已经开始
+    # TODO:落地页创建也在这个里面
+
     def post(self):
         user_id = self.get_argument("user_id", None)
         ad_plan_name = self.get_argument("ad_plan_name", None)
@@ -79,6 +84,58 @@ class create_ad_plan_local(BaseHandler):
         self.write({'status': {'msg': 'success', "RetCode": 200}})
 
 
+class create_ad_plan(BaseHandler):
+    # TODO:只要tornado开着就不允许修改数据库,------想好之后上线如何操作
+    def post(self):
+        request_dict = json.loads(self.request.body, encoding='utf-8')
+        print(request_dict)
+        user_id = request_dict['user_id']
+        #TODO:task_name设置全局唯一
+        ad_plan_list = request_dict['plan_list']
+
+        # 1.查看是否cookie可用
+        log_ad, cookie_canuse = ad_human_info.refresh_wechat_cookies(self, user_id=user_id)
+
+        # 2.数据存入数据库
+        print(user_id, ad_plan_list)
+        sql_session = db.DBSession()
+        if user_id is None or ad_plan_list is None:
+            self.write({'status': {'msg': 'url parameter error', "RetCode": 400}})
+            return
+        # 2.1存计划数据
+        for _ in ad_plan_list:
+            ad_plan_name = _['title']
+            ad_plan_typesetting_info = {'user_id': user_id, 'name': ad_plan_name,
+                                        'typesetting': json.dumps(_, ensure_ascii=False)}
+            ad_plan_typesetting_inserte = sql_tools.save_ad_plan_typesetting_info(
+                ad_plan_typesetting_info=ad_plan_typesetting_info,
+                table_ad_plan_typesetting=ad_plan_typesetting_table)
+            sql_session.execute(ad_plan_typesetting_inserte)
+
+        # 2.2存行为历史记录
+        task_name='{user_id}_{time_sign}'.format(user_id=user_id,time_sign=time.time())
+        for _ in ad_plan_list:
+            # 1.查看历史中有无对应落地页
+
+            # TODO:落地页直接存放到action_record,运行过程中进行不同公众号进行不同操作
+
+            # 2.历史记录
+            print(_)
+            for action_type in ['create_ad_plan', 'create_ad_layout']:
+                object_name = _['title'] if action_type == 'create_ad_plan' else _['idea']['jump_type_page_type']
+                action_info = {'user_id': user_id, 'service_name': _['service_name'], 'wechat_name': _['wechat_name'],
+                               'action_type': action_type, 'object_name': object_name, 'task_name': task_name,
+                               'status': 'todo'}
+                record_insert = sql_tools.save_action_record(action_record_info=action_info,
+                                                             table_action_record=action_record_table)
+                sql_session.execute(record_insert)
+        sql_session.commit()
+
+        # 4.开始运行
+        # threading.Thread(target=user_action.create_ad_plan,
+        #                  args=(user_id, ad_plan_name, wechat_json, log_ad, db, cookie_canuse)).start()
+
+
 class get_ad_plan_local(BaseHandler):
     def get(self):
         user_id = self.get_argument('user_id', None)
@@ -391,7 +448,35 @@ class get_plan_action_record(BaseHandler):
             _['ad_plan_name'] = name
             _['id'] = i
             _['create_time'] = create_time.strftime("%Y-%m-%d %H:%M:%S")
-            _['service_name'] =service_name
+            _['service_name'] = service_name
+            _['wechat_name'] = wechat_name
+            _['wechat_id_info'] = wechat_id_info
+            _['status'] = status
+            result_.append(_)
+        self.write({'statu': {'msg': 'success', "RetCode": 200},
+                    'local_ad_plan_info': result_})
+
+
+class get_task_list(BaseHandler):
+    def get(self):
+        user_id = self.get_argument('user_id', None)
+        sql_session = db.DBSession()
+        if user_id is None:
+            self.write({'status': {'msg': 'url parameter error', "RetCode": 400}})
+            return
+        # 落地页名字精确到毫秒,默认是全局唯一
+
+        result = sql_tools.get_plan_record(sql_session=sql_session, user_id=user_id)
+        result_ = []
+        for i in range(len(result)):
+            print(result[i])
+            user_id, name, service_name, wechat_name, create_time, status, typesetting, wechat_id_info = result[i]
+            _ = {}
+            _['typesetting'] = json.loads(typesetting)
+            _['ad_plan_name'] = name
+            _['id'] = i
+            _['create_time'] = create_time.strftime("%Y-%m-%d %H:%M:%S")
+            _['service_name'] = service_name
             _['wechat_name'] = wechat_name
             _['wechat_id_info'] = wechat_id_info
             _['status'] = status
@@ -402,18 +487,20 @@ class get_plan_action_record(BaseHandler):
 
 def make_app():
     return tornado.web.Application([
-        ("/create_ad_plan_local", create_ad_plan_local),
-        ("/create_ad_layout_local", create_ad_layout_local),
+        ("/create_ad_plan", create_ad_plan),
+        # ("/create_ad_plan_local", create_ad_plan_local),
+        # ("/create_ad_layout_local", create_ad_layout_local),
         ("/get_layout_local", get_ad_layout_local),
         ("/get_ad_plan_local", get_ad_plan_local),
         ("/delete_layout_local", delete_ad_layout),
         ("/delete_ad_plan_local", delete_ad_plan),
-        ("/create_ad_plan_remote", create_ad_plan_remote),
-        ("/create_ad_layout_remote", create_ad_layout_remote),
+        # ("/create_ad_plan_remote", create_ad_plan_remote),
+        # ("/create_ad_layout_remote", create_ad_layout_remote),
         ("/ad_human_info", ad_human_info),
         ("/ad_wechat_info", ad_wechat_info),
-        ("/ad_status", ad_status),
-        ("/get_plan_action_record", get_plan_action_record)
+        # ("/ad_status", ad_status),
+        ("/get_plan_action_record", get_plan_action_record),
+        ("/get_task_list", get_task_list)
     ], debug=True, autoreload=True)
 
 

+ 5 - 0
web_module/user_action.py

@@ -53,6 +53,9 @@ def cookie_acion(db, log_ad, cookie_canuse, user_id):
             sql_session.commit()
         print('update wechat cookies')
 
+def carry_plan():
+    #TODO:action_record涉及到的地方都需要改动
+    pass
 
 # TODO:这里都是线程调度的函数,设定线程生命周期最长60分钟
 
@@ -67,6 +70,8 @@ def get_human_info(user_id, log_ad, db, cookie_canuse):
     # TODO:log_ad 在这个线程结束之后并没有自动关闭,需要设置一下log_ad这个类删除,
     #   然后看一下多次请求之后,线程数量,
 
+    # TODO:需要添加公众号信息
+
     # 1.cookies保存
     cookie_acion(db, log_ad, cookie_canuse, user_id)
     # 2.刷新人群包

+ 3 - 0
wechat_action/sql_tools.py

@@ -68,8 +68,10 @@ def save_action_record(action_record_info, table_action_record):
         (service_name=action_record_info['service_name'],
          wechat_name=action_record_info['wechat_name'],
          user_id=action_record_info['user_id'],
+         object_name=action_record_info['object_name'],
          action_type=action_record_info['action_type'],
          status=action_record_info['status'],
+         task_name=action_record_info['task_name']
          )
     return insert_action_record
 
@@ -176,6 +178,7 @@ def get_plan_record(sql_session, user_id):
         action_record as record_list
         on object_name=name
         where typesetting_list.user_id ='{user_id}'
+        and record_list.status in ('done','error')
         ) as foo left join wechat_info 
         on foo.service_name =wechat_info.service_name and foo.wechat_name = wechat_info.wechat_name ;