|
@@ -15,7 +15,7 @@ router = APIRouter()
|
|
|
@router.post("/recommend")
|
|
@router.post("/recommend")
|
|
|
async def recommend(request: RecommendRequest, backgroundTasks: BackgroundTasks):
|
|
async def recommend(request: RecommendRequest, backgroundTasks: BackgroundTasks):
|
|
|
"""推荐接口"""
|
|
"""推荐接口"""
|
|
|
- logger.info(f"Recommend request: city={request.city_uuid}, product={request.product_code}, recall={request.recall_cust_count}")
|
|
|
|
|
|
|
+ logger.info(f"Recommend request: city={request.city_uuid}, product={request.product_code}, core_custs={len(request.cust_code_list)}")
|
|
|
|
|
|
|
|
gbdtlr_model_path = os.path.join("./models/rank/weights", request.city_uuid, "gbdtlr_model.pkl")
|
|
gbdtlr_model_path = os.path.join("./models/rank/weights", request.city_uuid, "gbdtlr_model.pkl")
|
|
|
if not os.path.exists(gbdtlr_model_path):
|
|
if not os.path.exists(gbdtlr_model_path):
|
|
@@ -30,20 +30,22 @@ async def recommend(request: RecommendRequest, backgroundTasks: BackgroundTasks)
|
|
|
products_in_order = dao.get_product_from_order(request.city_uuid)["product_code"].unique().tolist()
|
|
products_in_order = dao.get_product_from_order(request.city_uuid)["product_code"].unique().tolist()
|
|
|
if request.product_code in products_in_order:
|
|
if request.product_code in products_in_order:
|
|
|
logger.info(f"Using GBDT-LR model for existing product {request.product_code}")
|
|
logger.info(f"Using GBDT-LR model for existing product {request.product_code}")
|
|
|
- recommend_list = recommend_model.get_recommend_list_by_gbdtlr(request.product_code, recall_count=request.recall_cust_count)
|
|
|
|
|
|
|
+ recommend_list = recommend_model.get_recommend_list_by_gbdtlr(
|
|
|
|
|
+ request.product_code, cust_code_list=request.cust_code_list
|
|
|
|
|
+ )
|
|
|
else:
|
|
else:
|
|
|
logger.info(f"Using Item2Vec model for new product {request.product_code}")
|
|
logger.info(f"Using Item2Vec model for new product {request.product_code}")
|
|
|
- recommend_list = recommend_model.get_recommend_list_by_item2vec(request.product_code, recall_count=request.recall_cust_count)
|
|
|
|
|
|
|
+ recommend_list = recommend_model.get_recommend_list_by_item2vec(
|
|
|
|
|
+ request.product_code, cust_code_list=request.cust_code_list
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
- recommend_data = recommend_model.get_recommend_and_delivery(recommend_list, delivery_count=request.delivery_count)
|
|
|
|
|
request_data = []
|
|
request_data = []
|
|
|
- for index, data in enumerate(recommend_data):
|
|
|
|
|
|
|
+ for index, data in enumerate(recommend_list):
|
|
|
request_data.append(
|
|
request_data.append(
|
|
|
{
|
|
{
|
|
|
"id": index + 1,
|
|
"id": index + 1,
|
|
|
"cust_code": data["cust_code"],
|
|
"cust_code": data["cust_code"],
|
|
|
"recommend_score": data["recommend_score"],
|
|
"recommend_score": data["recommend_score"],
|
|
|
- "delivery_count": data["delivery_count"],
|
|
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -59,7 +61,7 @@ def generate_and_upload_report(request: RecommendRequest):
|
|
|
logger.info(f"Background task started: generating report for {request.city_uuid}/{request.product_code}")
|
|
logger.info(f"Background task started: generating report for {request.city_uuid}/{request.product_code}")
|
|
|
try:
|
|
try:
|
|
|
report_util = ReportUtils(request.city_uuid, request.product_code)
|
|
report_util = ReportUtils(request.city_uuid, request.product_code)
|
|
|
- report_util.generate_all_data(request.recall_cust_count, request.delivery_count)
|
|
|
|
|
|
|
+ report_util.generate_all_data(request.cust_code_list)
|
|
|
|
|
|
|
|
reports_dir = os.path.join("./data/reports", request.city_uuid, request.product_code)
|
|
reports_dir = os.path.join("./data/reports", request.city_uuid, request.product_code)
|
|
|
report_files = ["卷烟信息表", "品规商户特征关系表", "相似卷烟表", "商户售卖推荐表"]
|
|
report_files = ["卷烟信息表", "品规商户特征关系表", "相似卷烟表", "商户售卖推荐表"]
|