This commit is contained in:
aaron 2025-03-10 18:14:22 +08:00
parent b9455de0ff
commit fbe860a014
4 changed files with 16 additions and 43 deletions

View File

@ -46,6 +46,8 @@ from app.core.coupon_manager import CouponManager
from app.core.redis_client import redis_client from app.core.redis_client import redis_client
from app.models.timeperiod import TimePeriodDB from app.models.timeperiod import TimePeriodDB
from app.models.community_timeperiod import CommunityTimePeriodDB from app.models.community_timeperiod import CommunityTimePeriodDB
from app.models.community_profit_sharing import CommunityProfitSharing
router = APIRouter() router = APIRouter()
def calculate_price(price_request: OrderPriceCalculateRequest,user: UserDB,db: Session) -> OrderPriceResult: def calculate_price(price_request: OrderPriceCalculateRequest,user: UserDB,db: Session) -> OrderPriceResult:
@ -147,11 +149,13 @@ def calculate_price(price_request: OrderPriceCalculateRequest,user: UserDB,db: S
return result return result
def calculate_delivery_share(order: ShippingOrderDB, deliveryman: UserDB) -> float: def calculate_delivery_share(order: ShippingOrderDB, db: Session) -> float:
if deliveryman.delivery_commission_fixed > 0: # 获取对应小区的分润
return deliveryman.delivery_commission_fixed sharing = db.query(CommunityProfitSharing).filter(
elif deliveryman.delivery_commission_rate > 0: CommunityProfitSharing.community_id == order.address_community_id
return round(order.original_amount_with_additional_fee * (deliveryman.delivery_commission_rate / 100.0), 2) ).first()
if sharing:
return round(order.original_amount_with_additional_fee * (sharing.delivery_rate / 100.0), 2)
else: else:
return 0 return 0
@ -486,6 +490,9 @@ async def get_order_detail(
# 计算配送时间 # 计算配送时间
delivery_time = format_delivery_time(order.delivery_date, order.time_period_name) delivery_time = format_delivery_time(order.delivery_date, order.time_period_name)
# 计算配送员配送费用
deliveryman_share = order.delivery_share if order.delivery_share > 0 else calculate_delivery_share(order, db)
# 构建响应数据 # 构建响应数据
order_data = { order_data = {
"orderid": order.orderid, "orderid": order.orderid,
@ -500,7 +507,7 @@ async def get_order_detail(
"additional_fee_amount": order.additional_fee_amount, "additional_fee_amount": order.additional_fee_amount,
"coupon_id": order.coupon_id, "coupon_id": order.coupon_id,
"final_amount": order.final_amount, "final_amount": order.final_amount,
"deliveryman_share": order.delivery_share if order.delivery_share > 0 else calculate_delivery_share(order, current_user), "deliveryman_share": deliveryman_share,
"status": order.status, "status": order.status,
"complete_images": order.optimized_complete_images, "complete_images": order.optimized_complete_images,
"packages": package_list, "packages": package_list,
@ -1273,7 +1280,7 @@ async def deliveryman_receive_order(
order.received_time = datetime.now() order.received_time = datetime.now()
# 接单就确认收益 # 接单就确认收益
order.delivery_share = calculate_delivery_share(order, deliveryman) order.delivery_share = calculate_delivery_share(order, db)
db.commit() db.commit()

View File

@ -166,11 +166,7 @@ async def accept_additional_fee(
order.final_amount += float(fee_request.additional_fee_amount) order.final_amount += float(fee_request.additional_fee_amount)
# 重新计算配送员配送费用 # 重新计算配送员配送费用
deliveryman = db.query(UserDB).filter( order.delivery_share = calculate_delivery_share(order, db)
UserDB.userid == order.deliveryman_user_id
).first()
if deliveryman:
order.delivery_share = calculate_delivery_share(order, deliveryman)
try: try:
db.commit() db.commit()

View File

@ -23,7 +23,7 @@ from app.models.user_auth import UserAuthDB, UserAuthCreate, UserAuthInfo
from app.core.qcloud import qcloud_manager from app.core.qcloud import qcloud_manager
from app.models.merchant import MerchantDB from app.models.merchant import MerchantDB
from app.models.address import AddressDB, AddressInfo from app.models.address import AddressDB, AddressInfo
from app.models.user import UserUpdateRoles, UserUpdateDeliveryCommission from app.models.user import UserUpdateRoles
from app.models.order import ShippingOrderDB, OrderStatus from app.models.order import ShippingOrderDB, OrderStatus
from app.core.redis_client import redis_client from app.core.redis_client import redis_client
import logging import logging
@ -152,27 +152,6 @@ async def update_user_info(
db.rollback() db.rollback()
return error_response(code=500, message=f"更新失败: {str(e)}") return error_response(code=500, message=f"更新失败: {str(e)}")
@router.put("/delivery-commission", response_model=ResponseModel)
async def update_delivery_commission(
update_data: UserUpdateDeliveryCommission,
db: Session = Depends(get_db),
current_user: UserDB = Depends(get_admin_user)
):
"""更新配送佣金比例"""
user = db.query(UserDB).filter(UserDB.userid == update_data.user_id).first()
if not user:
return error_response(code=404, message="用户不存在")
if update_data.delivery_commission_rate:
user.delivery_commission_rate = update_data.delivery_commission_rate
if update_data.delivery_commission_fixed:
user.delivery_commission_fixed = update_data.delivery_commission_fixed
db.commit()
db.refresh(user)
return success_response(message="配送佣金比例更新成功")
@router.put("/roles", response_model=ResponseModel) @router.put("/roles", response_model=ResponseModel)
async def update_user_roles( async def update_user_roles(

View File

@ -52,8 +52,6 @@ class UserDB(Base):
update_time = Column(DateTime(timezone=True), onupdate=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now())
community_id = Column(Integer, ForeignKey("communities.id"), nullable=True) # 归属小区 community_id = Column(Integer, ForeignKey("communities.id"), nullable=True) # 归属小区
is_auth = Column(Boolean, nullable=False, default=False) is_auth = Column(Boolean, nullable=False, default=False)
delivery_commission_rate = Column(Integer, nullable=False, default=0) # 配送佣金比例
delivery_commission_fixed = Column(DECIMAL(10, 2), nullable=False, default=0) # 配送佣金固定金额
@property @property
def optimized_avatar(self): def optimized_avatar(self):
@ -86,8 +84,6 @@ class UserInfo(BaseModel):
community_id: Optional[int] = None community_id: Optional[int] = None
community_name: Optional[str] = None community_name: Optional[str] = None
is_auth: bool = False is_auth: bool = False
delivery_commission_rate: Optional[int] = None
delivery_commission_fixed: Optional[float] = None
class Config: class Config:
from_attributes = True from_attributes = True
@ -125,11 +121,6 @@ class UserUpdateRoles(BaseModel):
user_id: int user_id: int
roles: List[UserRole] roles: List[UserRole]
class UserUpdateDeliveryCommission(BaseModel):
user_id: int
delivery_commission_rate: Optional[int] = None
delivery_commission_fixed: Optional[float] = None
def generate_user_code(db=None) -> str: def generate_user_code(db=None) -> str:
"""生成6位大写字母+数字的用户编码""" """生成6位大写字母+数字的用户编码"""
chars = string.ascii_uppercase + string.digits chars = string.ascii_uppercase + string.digits