liyuyi@c-top.com.cn 4 سال پیش
والد
کامیت
5c943654a3
6فایلهای تغییر یافته به همراه44 افزوده شده و 26 حذف شده
  1. 1 1
      BayesCombine.py
  2. 1 1
      ai_callback_handler.py
  3. 20 19
      ai_target_combine_handler.py
  4. 4 2
      config/url.py
  5. 13 0
      readme.txt
  6. 5 3
      utils/commonFunc.py

+ 1 - 1
BayesCombine.py

@@ -180,7 +180,7 @@ if __name__ == '__main__':
         config = yaml.load(f.read(), Loader=yaml.FullLoader)
 
     # 1-1 数据库连接引擎,依据开发环境/生产环境 进行切换
-    if os.getenv('environment', 'unknown') == 'dev':
+    if os.getenv('LYY_DEV', 'unknown') == 'dev':
         engine = get_db_engine(config['devDB'])
     else:
         engine = get_db_engine(config['productDB'])

+ 1 - 1
ai_callback_handler.py

@@ -19,7 +19,7 @@ logger.info("ai_callback_server started!")
 
 with open('config/config.yaml', mode='r', encoding='utf-8') as f:
     config = yaml.load(f.read(), Loader=yaml.FullLoader)
-if os.getenv('environment', 'unknown') == 'dev':
+if os.getenv('LYY_DEV', 'unknown') == 'dev':
     db_info = config['devDB']
 else:
     db_info = config['productDB']

+ 20 - 19
ai_target_combine_handler.py

@@ -47,8 +47,7 @@ class AiTargetCombine(tornado.web.RequestHandler):
                     and campaign_name like '%s'""" % (ins.account_id, '%%优质定向%%')
             df = pd.read_sql(sql, ins.engine)
             if df.empty:
-                # ins.add_campaign()
-                ins.campaign_id = 123123
+                ins.add_campaign()
             else:
                 ins.campaign_id = df['campaign_id'].values[0]
 
@@ -59,21 +58,20 @@ class AiTargetCombine(tornado.web.RequestHandler):
             ins.write_intelligence_strategy_table()
 
             # 5、发送创建组和创意的请求
-            # request = requests.post(create_group_and_creative_url,
-            #                         headers=headers,
-            #                         data=json.dumps(ins.request_data, cls=NpEncoder))
-            # response_data = json.loads(request.text)
+            request = requests.post(create_group_and_creative_url,
+                                    headers=headers,
+                                    data=json.dumps(ins.request_data, cls=NpEncoder))
+            response_data = json.loads(request.text)
 
             # 6、接口的返回信息更新到数据库表
-            # ins.update_intelligence_strategy_table(message=response_data)
-            ins.update_intelligence_strategy_table(message="异步执行")
+            ins.update_intelligence_strategy_table(message=response_data)
 
-            logger.info("account_id = %s, 策略uuid = %s 的请求返回信息:%s" % (ins.account_id, ins.ai_strategy_uuid, "异步执行"))
-            self.write(json.dumps({"account_id": account_id, "message": "异步执行", "code": 1}))
+            logger.info("account_id = %s, 策略uuid = %s 的请求返回信息:%s" % (ins.account_id, ins.ai_strategy_uuid, response_data))
+            self.write(json.dumps({"account_id": account_id, "message": str(response_data), "code": 1}))
             self.flush()
         except:
             logger.error("account_id = %s, traceback is %s" % (account_id, traceback.format_exc()))
-            self.write(json.dumps({"account_id": account_id, "message": traceback.format_exc(), "code": -1}))
+            self.write(json.dumps({"account_id": account_id, "message": str(traceback.format_exc()), "code": -1}))
             self.flush()
 
 
@@ -99,7 +97,7 @@ class GetTargetAndAssemblyParameters(object):
 
     def get_database_engine(self):
         # 数据库连接引擎,依据开发环境/生产环境 进行切换
-        if os.getenv('environment', 'unknown') == 'dev':
+        if os.getenv('LYY_DEV', 'unknown') == 'dev':
             self.engine = get_db_engine(config['devDB'])
             self.db_config = config['devDB']
         else:
@@ -111,7 +109,7 @@ class GetTargetAndAssemblyParameters(object):
 
     def get_advertiser_strategy_info(self):
         """
-        获取指定账户下客户的策略信息
+        获取指定账户下客户的策略信息(不管是开发环境还是生产环境,该表都读取生产数据库)
         为后续的写入库表,校验一致性做准备
         """
         sql = """
@@ -120,7 +118,7 @@ class GetTargetAndAssemblyParameters(object):
                 where account_id = %d
                 limit 1
                 """ % self.account_id
-        advertiser_strategy_df = pd.read_sql(sql, self.engine)
+        advertiser_strategy_df = pd.read_sql(sql, self.product_engine)
         self.advertiser_strategy_id = int(advertiser_strategy_df['id'].values[0])
         self.advertiser_strategy = advertiser_strategy_df.T.to_dict()[0]
 
@@ -137,8 +135,10 @@ class GetTargetAndAssemblyParameters(object):
             "message": "SUCCESS"}
         """
         # 1、请求创建广告计划的接口
-        self.advertiser_strategy['campaign_name'] = self.advertiser_strategy['campaign_name'].replace('{{自定义}}', '')
-        campaign_name = self.advertiser_strategy['campaign_name'] + '_优质定向'
+        campaign_name = self.advertiser_strategy['campaign_name']
+        campaign_name = campaign_name.replace('{{自定义}}', '')
+        campaign_name += '_优质定向_'
+        campaign_name += str(datetime.datetime.now().date())
         create_campaign_request_data = {'account_id': self.account_id,
                                         'campaign_name': campaign_name,
                                         'type': self.advertiser_strategy['campaign_type'],
@@ -149,7 +149,7 @@ class GetTargetAndAssemblyParameters(object):
 
         request = requests.post(url=create_campaign_url,
                                 headers=headers,
-                                data=json.JSONEncoder().encode(create_campaign_request_data))
+                                data=json.dumps(create_campaign_request_data, cls=NpEncoder))
         response_data = json.loads(request.text)
 
         # 2、对接口返回的结果处理
@@ -391,7 +391,8 @@ class GetTargetAndAssemblyParameters(object):
                         'deep_conversion_bid': self.advertiser_strategy.get('deep_conversion_bid'),
                         'scene_id': self.advertiser_strategy.get('scene_id'),
                         'unit_type': self.advertiser_strategy.get('unit_type'),
-                        'begin_time': self.advertiser_strategy.get('begin_time'),
+                        'begin_time': self.advertiser_strategy.get('begin_time') if self.advertiser_strategy.get('begin_time')
+                        else str(datetime.datetime.now().date()),
                         'end_time': self.advertiser_strategy.get('end_time'),
                         'schedule_time': self.advertiser_strategy.get('schedule_time'),
                         'day_budget': self.advertiser_strategy.get('unit_day_budget'),
@@ -490,7 +491,7 @@ class GetTargetAndAssemblyParameters(object):
             replace('{{广告位置}}', scene_id)
 
         # 3-5 日期, 在拼装广告组和创意层级函数中获取
-        now_date = str(datetime.datetime.now().date())
+        now_date = str(datetime.datetime.now())
         if '日期' in group_params['unit_name']:
             unit_name = unit_name.replace('{{日期}}', now_date)
         else:

+ 4 - 2
config/url.py

@@ -2,8 +2,8 @@ import os
 
 headers = {'Content-Type': 'application/json'}
 
-os_env = os.getenv('environment', 'unknown')
-debug_url = ""
+os_env = os.getenv('LYY_DEV', 'unknown')
+debug_url = "http://139.186.134.115:8806/jeecg-boot/"
 product_url = 'http://api.tjyourong.com.cn/jeecg-boot/'
 
 
@@ -11,6 +11,8 @@ dev_server_port = 'http://139.186.165.84:31012/'
 product_server_port = 'http://139.186.27.96:31012/'
 
 
+
+
 # 创建计划url
 create_campaign_url = (debug_url if os_env == 'dev' else product_url) + 'kuaishou/create/campaignCreate'
 

+ 13 - 0
readme.txt

@@ -7,7 +7,20 @@
 1、调用人群预估覆盖接口
 2、修改广告计划状态的接口
 
+{'account_id': 9774238, 'campaign_name': '机器户1-上下滑--剪辑-低价-低价包邮-活动-年龄18岁以上-单出价-_优质定向_2021-08-20', 'type': 2, 'day_budget': 0, 'day_budget_schedule': None}
 
+http://192.168.1.3:7001/jeecg-boot/kuaishou/create/campaignCreate
+hhttp://139.186.134.115:8806/jeecg-boot/jeecg-boot/kuaishou/create/createUnitAndCreative
+
+telnet 139.186.165.84 31012
+
+message":" scene_type 传参须是1、2、3、4,且不能重复
+
+修改region 字段类型
+
+上线的准备
+1、ctop_ai_kuaishou_unit_level_operation_record 表中 新增字段: `target_combine_id` int(11) DEFAULT NULL COMMENT '定向组合id'
+2、修改region 字段类型
 
 
 

+ 5 - 3
utils/commonFunc.py

@@ -4,8 +4,6 @@ import pandas as pd
 import yaml
 
 
-
-
 def update_dict(x, y):
     # 用字典y,来更新x
     # key 存在则更新,不存在则新增
@@ -24,7 +22,6 @@ def get_db_engine(db_info):
     return engine
 
 
-
 def is_contains_region(val1, val2):
     """
     level1
@@ -50,6 +47,11 @@ def is_contains_region(val1, val2):
 
     city_df = pd.read_sql(sql, get_db_engine(config['productDB']))
 
+    # 如果【吉林】在city_level里面的话,在ctop_kuaishou_region_list_parent会同时把 吉林省和吉林市过滤出来
+    # 按level进行降序排列后,按city_name进行去重,保留低等级的值
+    city_df = city_df.sort_values(by='level', ascending=False)
+    city_df.drop_duplicates(subset=['city_name'], keep='first', inplace=True)
+
     if not val2 or val2 == '不限' or val2 == '[]':
         return True, {'region': list(city_df['region_id'].values)}
     else: