This commit is contained in:
aaron 2025-03-13 08:51:14 +08:00
parent a89ebecec3
commit 7019d0a62a
3 changed files with 160 additions and 8 deletions

View File

@ -15,6 +15,8 @@ from app.models.community_set import CommunitySet
from app.models.order import ShippingOrderDB, OrderStatus from app.models.order import ShippingOrderDB, OrderStatus
from app.models.community import CommunityDB from app.models.community import CommunityDB
from app.models.address import AddressDB from app.models.address import AddressDB
from app.models.user import UserRole
from app.core.response import error_response
router = APIRouter() router = APIRouter()
@router.get("/summary", response_model=ResponseModel) @router.get("/summary", response_model=ResponseModel)
@ -176,4 +178,154 @@ async def partner_community_list(
return success_response(data={"items": results, "total": total_count}) 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
})

View File

@ -225,6 +225,7 @@ async def daily_partner_settlement():
try: try:
# 获取昨日订单统计数据 # 获取昨日订单统计数据
yesterday = (datetime.now() - timedelta(days=1)).date() yesterday = (datetime.now() - timedelta(days=1)).date()
print(yesterday)
yesterday_stats = db.query(DailyCommunityOrderStats).filter( yesterday_stats = db.query(DailyCommunityOrderStats).filter(
DailyCommunityOrderStats.stats_date == yesterday DailyCommunityOrderStats.stats_date == yesterday
).all() ).all()
@ -244,7 +245,7 @@ async def daily_partner_settlement():
total_final_amount = 0 total_final_amount = 0
for stat in yesterday_stats: 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_order_count += stat.order_count
total_original_amount += stat.total_original_amount total_original_amount += stat.total_original_amount
total_final_amount += stat.total_final_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:
try: wecom_bot = WecomBot(settings.URL_WECOMBOT_DAILY_REPORT)
wecom_bot = WecomBot(settings.URL_WECOMBOT_DAILY_REPORT) await wecom_bot.send_markdown(message)
await wecom_bot.send_markdown(message) logger.info("每日合伙人结算报告已发送到企业微信")
logger.info("每日合伙人结算报告已发送到企业微信") except Exception as e:
except Exception as e: logger.error(f"发送企业微信消息失败: {str(e)}")
logger.error(f"发送企业微信消息失败: {str(e)}")
except Exception as e: except Exception as e:
db.rollback() db.rollback()
logger.error(f"运行每日合伙人结算任务失败: {str(e)}") logger.error(f"运行每日合伙人结算任务失败: {str(e)}")

Binary file not shown.