123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- from typing import Optional, Awaitable
- import pandas as pd
- import numpy as np
- import datetime
- import pymysql
- from sqlalchemy import create_engine
- import simplejson
- import requests
- import tornado.web
- import pandas as pd
- import json
- import numpy as np
- import datetime
- from sqlalchemy import create_engine
- from db_config import *
- import traceback
- class AiStrategyRequestParse(tornado.web.RequestHandler):
- def initialize(self, logger):
- self.logger = logger
- def post(self):
- data = self.request.body
- data = str(data, 'utf8')
- self.logger.info("*************************************** NEW REQUEST ***************************************")
- self.logger.info("raw data from request is %s" % data)
- # 1、新增广告组操作
- if data["operation_type"] == "add":
- inst = ParseModifyRequest(data)
- class ParseAddRequest(object):
- def __init__(self, request_data):
- self.request_data = request_data
- self.account_id = 9556344
- self.advertiser_strategy_id = None
- self.ai_strategy_id = None
- self.advertiser_strategy = {}
- self.campaign_dict = {}
- self.res_data = {}
- def get_advertiser_strategy_info(self):
- """
- 获取指定账户下客户的策略信息
- 更新返回的拼接字典
- :return:
- """
- sql = """
- select *
- from ctop_ai_kuaishou_advertiser_strategy
- where account_id = %d
- and status = 1
- """ % self.account_id
- engine = create_engine(db_con_str, connect_args={'charset': 'utf8'})
- advertiser_strategy_df = pd.read_sql(sql, engine)
- self.advertiser_strategy_id = advertiser_strategy_df['id'].values[0]
- advertiser_strategy_drop_cols = ['id', 'status', 'create_time', 'effective_time', 'expiry_time']
- advertiser_strategy_df.drop(columns=advertiser_strategy_drop_cols, inplace=True)
- self.advertiser_strategy = advertiser_strategy_df.T.to_dict()[0]
- self.res_data['advertiser_strategy_info'] = self.advertiser_strategy
- def write_intelligence_strategy_table(self):
- """
- 请求信息写入 ctop_ai_kuaishou_intelligence_strategy 表中
- :return:
- """
- intelligence_strategy_dict = \
- {'advertiser_strategy_id': self.advertiser_strategy_id,
- 'account_id': self.account_id,
- 'ai_strategy_request_content': self.request_data,
- 'create_time': datetime.datetime.now()}
- df = pd.DataFrame.from_dict(intelligence_strategy_dict, orient='index').T
- engine = create_engine(db_con_str, connect_args={'charset': 'utf8'})
- df.to_sql(name="ctop_ai_kuaishou_intelligence_strategy", con=engine, if_exists='append', index=False)
- def get_campaign_dict(self):
- """
- 拼接计划层级的信息
- :return:
- """
- # 1、从客户策略信息中获取计划层级基本信息
- self.campaign_dict['account_id'] = self.advertiser_strategy['account_id']
- self.campaign_dict['campaign_id'] = ''
- self.campaign_dict['campaign_name'] = ''
- self.campaign_dict['day_budget'] = ''
- self.campaign_dict['day_budget_schedule'] = ''
- self.campaign_dict['operation_type'] = ''
- # 2、从请求的信息中更新计划层级信息
- if len(self.request_data['campaign']) > 0:
- for key, value in self.request_data['campaign'].items():
- self.campaign_dict.update({key: value})
- # 3、计划层级的信息写入到数据库中
- # 4、将计划层级的信息添加到 返回数据中
- self.res_data['campaign'] = self.campaign_dict
- def get_group_dict(self):
- """
- 拼接组和创意层级参数
- :return:
- """
- def update_intelligence_strategy_table(self):
- """
- 拼接完成的信息更新到 ctop_ai_kuaishou_intelligence_strategy 表中
- :return:
- """
- pass
- # TODO 修改操作
- class ParseModifyRequest(object):
- def __init__(self):
- pass
- # TODO 关停操作
- class ParseShutDownRequest(object):
- def __init__(self):
- pass
|