fix: 商家分红利率预览回退全局配置;撤销罚单记录处理人;防重复分红

This commit is contained in:
XingQue
2026-06-27 07:55:06 +08:00
parent fdecf2fe3c
commit 93bf2193d2
2 changed files with 49 additions and 23 deletions

View File

@@ -57,7 +57,7 @@ from orders.notice_tasks import dingdan_guangbo
from .models import (
Order, MerchantOrderExt, PlatformOrderExt, PlayerDeliveryImage,
PenaltyRecord, PenaltyEvidenceImage, Penalty, PenaltyAppealImage, PenaltyBonus,
PenaltyRecord, PenaltyEvidenceImage, Penalty, PenaltyAppealImage, PenaltyBonus, PenaltyBonusRate,
CommissionRate, PlayerRating, RefundRecord,
)
from jituan.services.club_config import get_commission_rate, get_commission_rate_object
@@ -2299,16 +2299,19 @@ class ShangjiaDingdanXiangqingView(APIView):
'update_time': ut,
}
# 7. 商家自己的分红利率(用于罚款分红计算)
# 7. 商家分红利率(申请页预览):个人记录优先,否则全局 fadan_fenhong_lilv shenfen=5
fenhong_lilv = 0.0
try:
# 查找商家作为分红者的最新记录,取应得利率
last_fenhong = PenaltyBonus.query.filter(
BeneficiaryID=yonghuid,
Identity=1 # 1=商家
Identity=1, # fadan_fenhong 表:1=商家
).order_by('-CreateTime').first()
if last_fenhong:
fenhong_lilv = float(last_fenhong.IndividualRate or 0)
if last_fenhong and last_fenhong.IndividualRate:
fenhong_lilv = float(last_fenhong.IndividualRate)
else:
global_rate = PenaltyBonusRate.query.filter(Identity=5).first()
if global_rate and global_rate.Rate:
fenhong_lilv = float(global_rate.Rate)
except Exception as e:
logger.warning(f'获取分红利率失败: {e}')
@@ -6593,9 +6596,9 @@ class ShangjiaFakuaiXiugaiView(APIView):
return Response({'code': 403, 'msg': '罚单与订单不匹配'}, status=status.HTTP_403_FORBIDDEN)
if operation == 'modify_penalty':
return self._modify_penalty(fadan, request.data.get('liyou', ''), request.data.get('jine'))
return self._modify_penalty(fadan, request.data.get('liyou', ''), request.data.get('jine'), user.UserUID)
elif operation == 'cancel_penalty':
return self._cancel_penalty(fadan, request.data.get('liyou', ''))
return self._cancel_penalty(fadan, request.data.get('liyou', ''), user.UserUID)
elif operation == 'resubmit_penalty':
return self._resubmit_penalty(fadan, request.data.get('liyou', ''), request.data.get('jine'))
elif operation == 'manage_penalty_evidence':
@@ -6625,7 +6628,7 @@ class ShangjiaFakuaiXiugaiView(APIView):
dingdan.save()
return Response({'code': 0, 'msg': '退款理由修改成功'})
def _modify_penalty(self, fadan, liyou, jine_str):
def _modify_penalty(self, fadan, liyou, jine_str, processor_id=None):
"""修改罚款仅状态1待缴纳 或 3申诉中"""
if fadan.Status not in (1, 3):
return Response({'code': 400, 'msg': '当前罚单状态不可修改'})
@@ -6640,15 +6643,16 @@ class ShangjiaFakuaiXiugaiView(APIView):
with transaction.atomic():
fadan.Reason = liyou[:500]
fadan.FineAmount = jine
# 如果之前是驳回状态修改,需要重置状态为待缴纳?不,修改不应改变状态
if processor_id:
fadan.ProcessorID = processor_id
fadan.save()
logger.info(
f"商家修改罚单{fadan.id}:理由={liyou[:50]},金额={jine}"
f"操作人={fadan.ApplicantID}"
f"操作人={processor_id or fadan.ApplicantID}"
)
return Response({'code': 0, 'msg': '罚款修改成功'})
def _cancel_penalty(self, fadan, liyou):
def _cancel_penalty(self, fadan, liyou, processor_id=None):
"""撤销罚款状态1或3 → 状态4 已驳回)"""
if fadan.Status not in (1, 3):
return Response({'code': 400, 'msg': '当前罚单状态不可撤销'})
@@ -6657,8 +6661,13 @@ class ShangjiaFakuaiXiugaiView(APIView):
with transaction.atomic():
fadan.Status = 4 # 已驳回
fadan.RejectReason = liyou[:500]
if processor_id:
fadan.ProcessorID = processor_id
fadan.save()
logger.info(f"商家撤销罚单{fadan.id},驳回理由={liyou[:50]}")
logger.info(
f"商家撤销罚单{fadan.id},驳回理由={liyou[:50]}"
f"操作人={processor_id or fadan.ApplicantID}"
)
return Response({'code': 0, 'msg': '罚款已撤销(驳回)'})
def _resubmit_penalty(self, fadan, liyou, jine_str):