Sfoglia il codice sorgente

修改eval_report接口参数,将limit_circle_name拆分成start_time和end_time用于查找对应投放周期的销售数据

yangzeyu 4 mesi fa
parent
commit
2c968856a3

+ 2 - 54
api/eval_report.py

@@ -38,7 +38,7 @@ async def eval_report(request: EvalReportRequest):
         return {"code": 405, "msg": "下载推荐数据出错,生成验证报告失败!", "data": {"reportInfo": "下载推荐数据出错,生成验证报告失败!"}}
     
     # 生成验证报告
-    report_util.generate_eval_data(request.limit_cycle_name, recommend_data)
+    report_util.generate_eval_data(request.start_time, request.end_time, recommend_data)
     
     # 上传报告
     eval_report = ['投放验证报告']
@@ -53,56 +53,4 @@ async def eval_report(request: EvalReportRequest):
             "file_id": file_id_map.get('投放验证报告')
         }
     ]
-    return {"code": 200, "msg": "success", "data": {"evalReportInfo": content}}
-
-@router.post('/eval_report')
-async def eval_report(request: EvalReportRequest):
-    """获取验证报告"""
-    reports_dir = os.path.join('./data/reports', request.city_uuid, request.product_code)
-    # 首先生成验证报告
-    report_util = ReportUtils(request.city_uuid, request.product_code)
-    report_util.generate_eval_data(request.start_time, request.end_time)
-    
-    # 其次上传验证报告到阿里云
-    base_url = cfgs["aliyun"]["upload_url"]
-    
-    headers = {
-        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
-        "Accept": "*/*",
-    }
-    
-    cookies = {
-        "expires_in": "10800000",
-        "ecp_token": "ZXlKamIyUmxJam9pT1dZNFltRTNOVGhrTW1WbVpUYzRaR05oWkRZME5ERTRPREU1TkRObU9EY2lMQ0p6WTI5d1pTSTZJbkJ5YjNSbFkzUmxaQ0lzSW1Oc2FXVnVkQ0k2SW1Oc2FXVnVkRjlzYjI1bmFta2lmUT09",
-        "acw_tc": "0a067c4317466919842786603e2653311180a2a4fa0fd05acb99cf0458b890",
-        "isg": "BDAwNyXyI9cQD__-0PkIodjTAfiCeRTD-vUtYyqmIw3d5bGP0Y0nUayWOe2F3syb",
-        "dd-ztna-token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIwNTAwMzQzMDM4MjYxNDMwOTQiLCJjb3JwSWQiOiJkaW5nYzc2YTJhMzdiMjRhODYwYTRhYzVkNjk4MDg2NGQzMzUiLCJkZXB0SWRzIjoiW1s4Mzk0NzIxNjAsODM2MjQ1MTUzLDFdXSIsInJvbGVJZHMiOiJbMjEwNDk3MDY1OF0iLCJ1bmlvbklkIjoiVXFyYTB4U0VQcWNxdFNhQTFqSzRzZ2lFaUUiLCJleHAiOjE3NDcxODQ3MjksImlhdCI6MTc0NjU3OTkyOX0.dfv612-LwnIdoKL2G73gg7LYy8SBmvr3Zaan97Q5wGUbEFdWw0JUqOQQ1jdeom_Nd9FNCHlkZM32DvwyUrNnvbg1QQy2JeYEpAgysG4h0MT_OghE6-xGVQBIkg72GPTo_cvdMYG9SMfaCo5H-73zFfwMFASFoXCDoIPha6NioIskOJMmvQVsDkHtRXYh_gv0XaJxSWirDWhKC9vxPGaIwDff8doHwPdi9uO-tO9LFy9RXdyIsBXWem31rBSD3D6FmqZLZjOOZhCKMym1VenfIKC10Oa1zm8-Y8bGyMHG0LO_68AJstKYT4alJoBVDHXpMp3zvSXXQB6da_fIthQD4A"
-    }
-    
-    eval_file_path = os.path.join(reports_dir, "投放验证报告.xlsx")
-    try:
-        with open(eval_file_path, 'rb') as f:
-            files = {'file': (os.path.basename(eval_file_path), f)}
-                
-            response = requests.post(
-                base_url,
-                headers=headers,
-                files=files,
-                verify=True
-            )
-                
-            if response.json()["success"]:
-                file_id = response.json()["data"]["file_info"]["fileid"]
-                return {"code": 200, "msg": "success", "data": {"reportInfo": {"id": 1, "filename": "投放验证报告", "file_id": file_id}}}
-            
-            else:
-                raise HTTPException(
-                    status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
-                    detail="reports upload failed"
-                )
-                
-    except requests.exceptions.RequestException as e:
-        print("请求出错:", e)
-    except Exception as e:
-        print("发生错误:", e)
-    # 最后将file_id返回给前端
+    return {"code": 200, "msg": "success", "data": {"evalReportInfo": content}}

+ 3 - 1
api/request_body.py

@@ -16,4 +16,6 @@ class EvalReportRequest(BaseModel):
     city_uuid: str              # 城市id
     product_code: str           # 卷烟编码
     cultivacation_id: str       # 投放策略id
-    limit_cycle_name: str       # 投放周期名称
+    # limit_cycle_name: str       # 投放周期名称
+    start_time: str              # 投放开始时间
+    end_time: str               # 投放结束时间

+ 6 - 4
api_test.py

@@ -7,8 +7,8 @@ import json
 #     "product_code": "440298",
 #     "recall_cust_count": 1000,
 #     "delivery_count": 2000,
-#     "cultivacation_id": "10000002",
-#     "limit_cycle_name": "202505W2(05.012-05.18)"
+#     "cultivacation_id": "10000001",
+#     "limit_cycle_name": "202502W2(02.10-02.16)"
 # }
 # headers = {'Content-Type': 'application/json'}
 
@@ -29,8 +29,10 @@ url = "http://127.0.0.1:7960/brandcultivation/api/v1/eval_report"
 payload = {
     "city_uuid": "00000000000000000000000011445301",
     "product_code": "440298",
-    "cultivacation_id": "10000002",
-    "limit_cycle_name": "202502W2(02.10-02.16)"
+    "cultivacation_id": "10000001",
+    # "limit_cycle_name": "202502W2(02.10-02.16)"
+    "start_time": "2025/2/10",
+    "end_time": "2025/2/16"
 }
 headers = {'Content-Type': 'application/json'}
 

+ 6 - 5
config/service_config.yaml

@@ -5,13 +5,14 @@ aliyun:
 
   # 开发环境
   # upload_url: "https://10-79-117-86-8p1kxyomtjwgt3.ztna-dingtalk.com/screen/mapi/file/fileUpload"
-  # download_url: "https://10-79-117-86-8p1kxyomtjwgt3.ztna-dingtalk.com/screen/mapi/file/fileDownload/11C1AC088863421C9BC32A5E722F5147"
+  # download_url: "https://10-79-117-86-8p1kxyomtjwgt3.ztna-dingtalk.com/screen/mapi/file/fileDownload"
 
 
 
   # cookies:
   #   "expires_in": "10800000"
-  #   "ecp_token": "ZXlKamIyUmxJam9pTVRKbU16bGxNMlV6TkdVeE1USmpNVFkwTVdVd09HUmpOVEV4TTJSaE5tRWlMQ0p6WTI5d1pTSTZJbkJ5YjNSbFkzUmxaQ0lzSW1Oc2FXVnVkQ0k2SW1Oc2FXVnVkRjlzYjI1bmFta2lmUT09"
-  #   "acw_tc": "0a031e1717502370539856352e2b3bd4c277ffe39d26a06bff018dff60ea99"
-  #   "isg": "BDAwNyXyI9cQD__-0PkIodjTAfiCeRTD-vUtYyqmIw3d5bGP0Y0nUayWOe2F3syb"
-  #   "dd-ztna-token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIwNTAwMzQzMDM4MjYxNDMwOTQiLCJjb3JwSWQiOiJkaW5nYzc2YTJhMzdiMjRhODYwYTRhYzVkNjk4MDg2NGQzMzUiLCJkZXB0SWRzIjoiW1s4Mzk0NzIxNjAsODM2MjQ1MTUzLDFdXSIsInJvbGVJZHMiOiJbMjEwNDk3MDY1OF0iLCJ1bmlvbklkIjoiVXFyYTB4U0VQcWNxdFNhQTFqSzRzZ2lFaUUiLCJleHAiOjE3NTA4Mjg3ODksImlhdCI6MTc1MDIyMzk4OX0.ZR8MMaqiIszgBN5-evfpRXdy2Gmcn6Wk_U_1SQirGCek4m82cM1x8NzUqyBnIT9ApB5MJk_-aD5Q1e1LM74-3GkHNRDH9GxX4mN9flLdrjL0YzJDdOWAktZBatWPW7sW4rmq_yNC0fDJZ4j8N6ZObzo4Hvj08f7wCxqWrawrttgGoEYIBcKbMJBWyj0RBSOQdCfK3NS_-6AuTdc6reAircpd9l7SgJ-ln1lcOFImjr1x4NQz7yOy3GcvY3DGtkG6ZRz5kwsajLlxOr0At_xWHFxqdV8V_WIJNV1y725cd8WGoqyZPA9xTQnPvRtyCbud8DDZ3oojohNeV9sNW5BFtA"
+  #   "ecp_token": "ZXlKamIyUmxJam9pWVRFeE1HUmhZak5rWkdRME1EZGxabVJrTURObU5UUXlPRFJtT1RNMFpUTWlMQ0p6WTI5d1pTSTZJbkJ5YjNSbFkzUmxaQ0lzSW1Oc2FXVnVkQ0k2SW1Oc2FXVnVkRjlzYjI1bmFta2lmUT09"
+  #   "acw_tc": "0a067c6c17618962448864081e434c2ab511a5f7124932c92af2849b9b7607"
+  #   "cna": 09T8H5zH8SoCASeqHG9RyLbu
+  #   "isg": "BCEhEQGQ7W0X307N-S4pgiGcMOs7zpXAtOco_YP1Uiix6ku8yhsCkUxpSB7sIi34"
+  #   "dd-ztna-token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIwNTAwMzQzMDM4MjYxNDMwOTQiLCJjb3JwSWQiOiJkaW5nYzc2YTJhMzdiMjRhODYwYTRhYzVkNjk4MDg2NGQzMzUiLCJkZXB0SWRzIjoiW1s4Mzk0NzIxNjAsODM2MjQ1MTUzLDFdXSIsInJvbGVJZHMiOiJbMjEwNDk3MDY1OF0iLCJ1bmlvbklkIjoiVXFyYTB4U0VQcWNxdFNhQTFqSzRzZ2lFaUUiLCJleHAiOjE3NjI3NDQwNTksImlhdCI6MTc2MjEzOTI1OX0.aujJsivdZLn24u9BK6fFXwgJ3xYQnA7ilTrNZTdbyRA9HRkctUkIXGPBURcTNJPpFzSJ8o3Z1xiFbj39YjHTYLc5ZTc37u-F7axl8jZBA2tdBvKuzCK8r0l3oqYx6QrQtHG9y3DqOYYju8kXno4yCkm9GJdJjGAGaBIi6FwUsA95tSpTgergIzkdt8vNhBIdABHhH8W2rkpGNMjPNIc2drNL-KHTcLZICesaPen7XUlyvGzK9gjJ7aEc0HpOaQ2u1qks69AYMseS5ex0Y8E9yUgpXk0FOYHbPRfn58Scz-Hn3fJGZQSi-2OG2MQSijymrFXoYsupgXrxIOArwlGZvg"

+ 5 - 3
database/dao/mysql_dao.py

@@ -203,19 +203,21 @@ class MySqlDao:
         
         return data
     
-    def get_delivery_data_by_product(self, city_uuid, product_id, limit_cycle_name):
+    def get_delivery_data_by_product(self, city_uuid, product_id, start_time, end_time):
         """通过品规获取验证数据"""
         query = f"""
             SELECT *
             FROM {self._eval_order_name}
             WHERE city_uuid = :city_uuid
             AND goods_code = :product_id
-            AND limit_cycle_name = :limit_cycle_name
+            AND cycle_begin_date = :start_time
+            AND cycle_end_date = :end_time
         """
         params = {
             "city_uuid": city_uuid,
             "product_id": product_id,
-            "limit_cycle_name": limit_cycle_name,
+            "start_time": start_time,
+            "end_time": end_time,
         }
         data = self.db_helper.load_data_with_page(query, params)
         

+ 7 - 10
utils/file_stream.py

@@ -48,24 +48,22 @@ class FileStreamUtils:
     def download_file(file_id, file_type='xlsx'):
         """通过file_id从阿里云文件数据库下载文件"""
         try:
-            params = {
-                'fileid': file_id,
-                'action': 'download'
-            }
-            
+            # params = {
+            #     'fileid': file_id,
+            #     'action': 'download'
+            # }
             response = requests.get(
-                FileStreamUtils.download_url,
+                f"{FileStreamUtils.download_url}/{file_id}",
                 headers=FileStreamUtils.headers,
                 # cookies=FileStreamUtils.cookies,
-                params=params,
+                # params=params,
                 verify=True
             )
             
             if response.status_code == 200:
                 file_content = BytesIO(response.content)
-                print('请求成功了')
                 if file_type == 'xlsx':
-                    data = pd.read_excel(file_content)
+                    data = pd.read_excel(file_content, engine='openpyxl')
                 elif file_type == 'csv':
                     data = pd.read_csv(file_content)
                 else:
@@ -73,7 +71,6 @@ class FileStreamUtils:
                 
                 return data
             else:
-                print(f'请求失败了{response.status_code}')
                 return None
         except requests.exceptions.RequestException as e:
             print("Request Error: ", e)

+ 2 - 2
utils/report_utils.py

@@ -127,13 +127,13 @@ class ReportUtils:
         
         report.to_excel(os.path.join(self._save_dir, "效果验证表.xlsx"), index=False)
         
-    def generate_eval_data(self, check_cycle_name, recommend_data):
+    def generate_eval_data(self, start_time, end_time, recommend_data):
         """根据推荐列表生成验证报告"""
         if self._product_id == '350139':
             eval_product_id = "350355"
         else:
             eval_product_id = self._product_id
-        delivery_data = self._dao.get_delivery_data_by_product(self._city_uuid, eval_product_id, check_cycle_name)
+        delivery_data = self._dao.get_delivery_data_by_product(self._city_uuid, eval_product_id, start_time, end_time)
         delivery_data = delivery_data[DeliveryConfig.FEATURE_COLUMNS]
         delivery_data = sample_data_clear(delivery_data, DeliveryConfig)