From 7019d0a62a9f7cc53d20d6a05a0780f5864ade9d Mon Sep 17 00:00:00 2001 From: aaron <> Date: Thu, 13 Mar 2025 08:51:14 +0800 Subject: [PATCH] update --- app/api/endpoints/partner.py | 152 +++++++++++++++++++++++++++++++++++ app/tasks/daily_tasks.py | 16 ++-- jobs.sqlite | Bin 24576 -> 24576 bytes 3 files changed, 160 insertions(+), 8 deletions(-) diff --git a/app/api/endpoints/partner.py b/app/api/endpoints/partner.py index 51a007d..e6b59f4 100644 --- a/app/api/endpoints/partner.py +++ b/app/api/endpoints/partner.py @@ -15,6 +15,8 @@ from app.models.community_set import CommunitySet from app.models.order import ShippingOrderDB, OrderStatus from app.models.community import CommunityDB from app.models.address import AddressDB +from app.models.user import UserRole +from app.core.response import error_response router = APIRouter() @router.get("/summary", response_model=ResponseModel) @@ -176,4 +178,154 @@ async def partner_community_list( return success_response(data={"items": results, "total": total_count}) +@router.get("/community/{community_id}", response_model=ResponseModel) +async def partner_community_detail( + community_id: int, + db: Session = Depends(get_db), + current_user: UserDB = Depends(get_current_user) +): + """获取合伙人小区详情""" + community = db.query(CommunityDB).filter(CommunityDB.id == community_id).first() + if not community: + return error_response(message="小区不存在") + community_sets = db.query(CommunitySet).filter( + CommunitySet.community_set_mappings.any( + CommunitySetMapping.community_id == community_id + ) + ).all() + + partner_ids = [sets.user_id for sets in community_sets] + # 获取Partner列表 + partner_list = db.query(UserDB).filter(UserDB.userid.in_(partner_ids)).all() + + partner_names = ",".join([partner.nickname for partner in partner_list]) + + # 小区用户数 + user_count = db.query(AddressDB).filter( + AddressDB.community_id == community_id, + AddressDB.is_default == True + ).count() + + # 小区订单总量 + total_order_count = db.query(ShippingOrderDB).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.status == OrderStatus.COMPLETED + ).count() + + + # 小区今日、昨日订单总量 + today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) + today_end = datetime.now().replace(hour=23, minute=59, second=59, microsecond=999999) + yesterday_start = today_start - timedelta(days=1) + yesterday_end = today_end - timedelta(days=1) + + today_order_count = db.query(ShippingOrderDB).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.create_time >= today_start, + ShippingOrderDB.create_time <= today_end, + ShippingOrderDB.status == OrderStatus.COMPLETED + ).count() + + yesterday_order_count = db.query(ShippingOrderDB).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.create_time >= yesterday_start, + ShippingOrderDB.create_time <= yesterday_end, + ShippingOrderDB.status == OrderStatus.COMPLETED + ).count() + + # 小区总营收 + total_income = db.query(func.sum(ShippingOrderDB.original_amount + ShippingOrderDB.additional_fee_amount)).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.status == OrderStatus.COMPLETED + ).scalar() + + # 小区今日、昨日收益 + today_income = db.query(func.sum(ShippingOrderDB.original_amount + ShippingOrderDB.additional_fee_amount)).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.create_time >= today_start, + ShippingOrderDB.create_time <= today_end, + ShippingOrderDB.status == OrderStatus.COMPLETED + ).scalar() + + yesterday_income = db.query(func.sum(ShippingOrderDB.original_amount + ShippingOrderDB.additional_fee_amount)).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.create_time >= yesterday_start, + ShippingOrderDB.create_time <= yesterday_end, + ShippingOrderDB.status == OrderStatus.COMPLETED + ).scalar() + + # 配送员列表, 只查询有配送员的小区 + delivery_list = db.query(UserDB).filter(UserDB.community_id == community_id, UserDB.roles.contains(UserRole.DELIVERYMAN)).all() + + delivery_data = [] + for delivery in delivery_list: + # 累计订单数,累计收益 + total_order_count = db.query(ShippingOrderDB).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.status == OrderStatus.COMPLETED, + ShippingOrderDB.deliveryman_user_id == delivery.userid + ).count() + + total_income = db.query(func.sum(ShippingOrderDB.original_amount + ShippingOrderDB.additional_fee_amount)).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.status == OrderStatus.COMPLETED, + ShippingOrderDB.deliveryman_user_id == delivery.userid + ).scalar() + + # 今日订单数,昨日订单数 + today_order_count = db.query(ShippingOrderDB).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.create_time >= today_start, + ShippingOrderDB.create_time <= today_end, + ShippingOrderDB.status == OrderStatus.COMPLETED, + ShippingOrderDB.deliveryman_user_id == delivery.userid + ).count() + + yesterday_order_count = db.query(ShippingOrderDB).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.create_time >= yesterday_start, + ShippingOrderDB.create_time <= yesterday_end, + ShippingOrderDB.status == OrderStatus.COMPLETED, + ShippingOrderDB.deliveryman_user_id == delivery.userid + ).count() + + # 今日收益,昨日收益 + today_income = db.query(func.sum(ShippingOrderDB.original_amount + ShippingOrderDB.additional_fee_amount)).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.create_time >= today_start, + ShippingOrderDB.create_time <= today_end, + ShippingOrderDB.status == OrderStatus.COMPLETED, + ShippingOrderDB.deliveryman_user_id == delivery.userid + ).scalar() + + yesterday_income = db.query(func.sum(ShippingOrderDB.original_amount + ShippingOrderDB.additional_fee_amount)).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.create_time >= yesterday_start, + ShippingOrderDB.create_time <= yesterday_end, + ShippingOrderDB.status == OrderStatus.COMPLETED, + ShippingOrderDB.deliveryman_user_id == delivery.userid + ).scalar() + + delivery_data.append({ + "delivery_id": delivery.userid, + "delivery_name": delivery.nickname, + "total_order_count": total_order_count, + "total_income": 0 if total_income is None else total_income, + "today_order_count": today_order_count, + "yesterday_order_count": yesterday_order_count, + "today_income": 0 if today_income is None else today_income, + "yesterday_income": 0 if yesterday_income is None else yesterday_income + }) + + return success_response(data={ + "community_name": community.name, + "partner_names": partner_names, + "user_count": user_count, + "total_order_count": total_order_count, + "yesterday_order_count": yesterday_order_count, + "total_income": 0 if total_income is None else total_income, + "today_income": 0 if today_income is None else today_income, + "yesterday_income": 0 if yesterday_income is None else yesterday_income, + "delivery_list": delivery_data + }) diff --git a/app/tasks/daily_tasks.py b/app/tasks/daily_tasks.py index f654db1..037a503 100644 --- a/app/tasks/daily_tasks.py +++ b/app/tasks/daily_tasks.py @@ -225,6 +225,7 @@ async def daily_partner_settlement(): try: # 获取昨日订单统计数据 yesterday = (datetime.now() - timedelta(days=1)).date() + print(yesterday) yesterday_stats = db.query(DailyCommunityOrderStats).filter( DailyCommunityOrderStats.stats_date == yesterday ).all() @@ -244,7 +245,7 @@ async def daily_partner_settlement(): total_final_amount = 0 for stat in yesterday_stats: - print(stat.community_name) + print(f"日期:{stat.stats_date} 小区: {stat.community_name} 订单数: {stat.order_count} 订单金额: {stat.total_original_amount} 支付金额: {stat.total_final_amount}") total_order_count += stat.order_count total_original_amount += stat.total_original_amount total_final_amount += stat.total_final_amount @@ -334,13 +335,12 @@ async def daily_partner_settlement(): """ # 发送企业微信消息 - if total_partner_profit + total_admin_profit + total_delivery_profit + total_platform_profit > 0 and settings.URL_WECOMBOT_DAILY_REPORT: - try: - wecom_bot = WecomBot(settings.URL_WECOMBOT_DAILY_REPORT) - await wecom_bot.send_markdown(message) - logger.info("每日合伙人结算报告已发送到企业微信") - except Exception as e: - logger.error(f"发送企业微信消息失败: {str(e)}") + try: + wecom_bot = WecomBot(settings.URL_WECOMBOT_DAILY_REPORT) + await wecom_bot.send_markdown(message) + logger.info("每日合伙人结算报告已发送到企业微信") + except Exception as e: + logger.error(f"发送企业微信消息失败: {str(e)}") except Exception as e: db.rollback() logger.error(f"运行每日合伙人结算任务失败: {str(e)}") diff --git a/jobs.sqlite b/jobs.sqlite index 9f16feeb45e5fc6cad95c0372cc73807f98b24fa..a4b31834883ba88907d778852cdf473406978be0 100644 GIT binary patch delta 76 zcmZoTz}Rqrae_2s`a~IL#`KK|C&kz=b8s}UPIa2>=q|I_M_iVLk#BOAv@!E#=7`M; cqyvE5%^&5N6nKEjm^qkP7}G%#|LqwS0F&<)d;kCd delta 76 zcmZoTz}Rqrae_3X`9v9KM)QpcC&kz=ZtG}Zo$55%(OqV~OY!k7+{_;1gs008=68p;3w