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