Selaa lähdekoodia

优化数据库读数据方式,确保每次读取的内容一致

杨泽宇 13 tuntia sitten
vanhempi
commit
55531378a7
4 muutettua tiedostoa jossa 5 lisäystä ja 5 poistoa
  1. 0 1
      api/recommend.py
  2. 2 1
      database/dao/mysql_dao.py
  3. 1 1
      models/item2vec/inference.py
  4. 2 2
      models/recommend.py

+ 0 - 1
api/recommend.py

@@ -25,7 +25,6 @@ async def recommend(request: RecommendRequest, backgroundTasks: BackgroundTasks)
     if request.product_code in products_in_oreder:
         recommend_list = recommend_model.get_recommend_list_by_gbdtlr(request.product_code, recall_count=request.recall_cust_count)
     else:
-        print("走这了")
         recommend_list = recommend_model.get_recommend_list_by_item2vec(request.product_code, recall_count=request.recall_cust_count)
     recommend_data = recommend_model.get_recommend_and_delivery(recommend_list, delivery_count=request.delivery_count)
     request_data = []

+ 2 - 1
database/dao/mysql_dao.py

@@ -168,6 +168,7 @@ class MySqlDao:
         FROM {self._order_tablename}
         WHERE city_uuid = :city_uuid
         AND product_code IN :ids
+        ORDER BY cust_code, product_code
     """).bindparams(bindparam("ids", expanding=True))
         params = {"city_uuid": city_uuid, "ids": list(product_ids)}
         data = pd.DataFrame(self.db_helper.fetch_all(query, params))
@@ -261,7 +262,7 @@ class MySqlDao:
         return data
 
     def get_cust_list(self, city_uuid):
-        query = f"SELECT DISTINCT cust_code FROM {self._cust_tablename} WHERE corp_uuid = :city_uuid"
+        query = f"SELECT DISTINCT cust_code FROM {self._cust_tablename} WHERE corp_uuid = :city_uuid ORDER BY cust_code"
         params = {"city_uuid": city_uuid}
         
         data = self.db_helper.load_data_with_page(query, params)

+ 1 - 1
models/item2vec/inference.py

@@ -42,7 +42,7 @@ class Item2VecModel:
         # 按照卷烟分组,取每款卷烟售卖最好的前50个商户
         order_data = (
             order_data
-            .sort_values(["product_code", "sale_qty"], ascending=[True, False])
+            .sort_values(["product_code", "sale_qty", "cust_code"], ascending=[True, False, True])
             .groupby("product_code")
             .head(top)
         )

+ 2 - 2
models/recommend.py

@@ -103,14 +103,14 @@ class Recommend:
 
         # 3. 计算余数并排序
         recommend_data["remainder"] = recommend_data["delivery_float"] - recommend_data["delivery_count"]
-        recommend_data = recommend_data.sort_values("remainder", ascending=False)
+        recommend_data = recommend_data.sort_values(["remainder", "cust_code"], ascending=[False, True])
 
         # 4. 将剩余配额按余数从大到小分配
         remaining = delivery_count - recommend_data["delivery_count"].sum()
         recommend_data.iloc[:remaining, recommend_data.columns.get_loc("delivery_count")] += 1
         
         recommend_data = recommend_data.drop(columns=["delivery_float", "remainder"])
-        recommend_data = recommend_data.sort_values("recommend_score", ascending=False)
+        recommend_data = recommend_data.sort_values(["recommend_score", "cust_code"], ascending=[False, True])
         
         recommend_data = recommend_data.to_dict(orient='records')
         return recommend_data