ai_strategy_request_handler.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. from typing import Optional, Awaitable
  2. import pandas as pd
  3. import numpy as np
  4. import datetime
  5. import pymysql
  6. from sqlalchemy import create_engine
  7. import simplejson
  8. import requests
  9. import tornado.web
  10. import pandas as pd
  11. import json
  12. import numpy as np
  13. import datetime
  14. from sqlalchemy import create_engine
  15. from db_config import *
  16. import traceback
  17. class AiStrategyRequestParse(tornado.web.RequestHandler):
  18. def initialize(self, logger):
  19. self.logger = logger
  20. def post(self):
  21. data = self.request.body
  22. data = str(data, 'utf8')
  23. self.logger.info("*************************************** NEW REQUEST ***************************************")
  24. self.logger.info("raw data from request is %s" % data)
  25. # 1、新增广告组操作
  26. if data["operation_type"] == "add":
  27. inst = ParseModifyRequest(data)
  28. class ParseAddRequest(object):
  29. def __init__(self, request_data):
  30. self.request_data = request_data
  31. self.account_id = 9556344
  32. self.advertiser_strategy_id = None
  33. self.ai_strategy_id = None
  34. self.advertiser_strategy = {}
  35. self.campaign_dict = {}
  36. self.res_data = {}
  37. def get_advertiser_strategy_info(self):
  38. """
  39. 获取指定账户下客户的策略信息
  40. 更新返回的拼接字典
  41. :return:
  42. """
  43. sql = """
  44. select *
  45. from ctop_ai_kuaishou_advertiser_strategy
  46. where account_id = %d
  47. and status = 1
  48. """ % self.account_id
  49. engine = create_engine(db_con_str, connect_args={'charset': 'utf8'})
  50. advertiser_strategy_df = pd.read_sql(sql, engine)
  51. self.advertiser_strategy_id = advertiser_strategy_df['id'].values[0]
  52. advertiser_strategy_drop_cols = ['id', 'status', 'create_time', 'effective_time', 'expiry_time']
  53. advertiser_strategy_df.drop(columns=advertiser_strategy_drop_cols, inplace=True)
  54. self.advertiser_strategy = advertiser_strategy_df.T.to_dict()[0]
  55. self.res_data['advertiser_strategy_info'] = self.advertiser_strategy
  56. def write_intelligence_strategy_table(self):
  57. """
  58. 请求信息写入 ctop_ai_kuaishou_intelligence_strategy 表中
  59. :return:
  60. """
  61. intelligence_strategy_dict = \
  62. {'advertiser_strategy_id': self.advertiser_strategy_id,
  63. 'account_id': self.account_id,
  64. 'ai_strategy_request_content': self.request_data,
  65. 'create_time': datetime.datetime.now()}
  66. df = pd.DataFrame.from_dict(intelligence_strategy_dict, orient='index').T
  67. engine = create_engine(db_con_str, connect_args={'charset': 'utf8'})
  68. df.to_sql(name="ctop_ai_kuaishou_intelligence_strategy", con=engine, if_exists='append', index=False)
  69. def get_campaign_dict(self):
  70. """
  71. 拼接计划层级的信息
  72. :return:
  73. """
  74. # 1、从客户策略信息中获取计划层级基本信息
  75. self.campaign_dict['account_id'] = self.advertiser_strategy['account_id']
  76. self.campaign_dict['campaign_id'] = ''
  77. self.campaign_dict['campaign_name'] = ''
  78. self.campaign_dict['day_budget'] = ''
  79. self.campaign_dict['day_budget_schedule'] = ''
  80. self.campaign_dict['operation_type'] = ''
  81. # 2、从请求的信息中更新计划层级信息
  82. if len(self.request_data['campaign']) > 0:
  83. for key, value in self.request_data['campaign'].items():
  84. self.campaign_dict.update({key: value})
  85. # 3、计划层级的信息写入到数据库中
  86. # 4、将计划层级的信息添加到 返回数据中
  87. self.res_data['campaign'] = self.campaign_dict
  88. def get_group_dict(self):
  89. """
  90. 拼接组和创意层级参数
  91. :return:
  92. """
  93. def update_intelligence_strategy_table(self):
  94. """
  95. 拼接完成的信息更新到 ctop_ai_kuaishou_intelligence_strategy 表中
  96. :return:
  97. """
  98. pass
  99. # TODO 修改操作
  100. class ParseModifyRequest(object):
  101. def __init__(self):
  102. pass
  103. # TODO 关停操作
  104. class ParseShutDownRequest(object):
  105. def __init__(self):
  106. pass