fix: 罚单申请时锁定分红利率与应得金额,缴纳按锁定值入账
This commit is contained in:
31
orders/migrations/0009_penalty_bonus_lock_fields.py
Normal file
31
orders/migrations/0009_penalty_bonus_lock_fields.py
Normal file
@@ -0,0 +1,31 @@
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0008_order_waibu_penalty_staff'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='penalty',
|
||||
name='ApplicantBonusRate',
|
||||
field=models.DecimalField(
|
||||
db_column='shenqingren_fenhong_lilv',
|
||||
decimal_places=4,
|
||||
default=0.0,
|
||||
max_digits=5,
|
||||
verbose_name='申请人分红锁定利率',
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='penalty',
|
||||
name='BonusCredited',
|
||||
field=models.BooleanField(
|
||||
db_column='fenhong_yiruzhang',
|
||||
default=False,
|
||||
verbose_name='分红是否已入账',
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -510,6 +510,14 @@ class Penalty(QModel):
|
||||
max_digits=12, decimal_places=2, default=0.00,
|
||||
db_column='shenqingren_fenhong_jine', verbose_name='申请人分红金额',
|
||||
)
|
||||
ApplicantBonusRate = models.DecimalField(
|
||||
max_digits=5, decimal_places=4, default=0.0000,
|
||||
db_column='shenqingren_fenhong_lilv', verbose_name='申请人分红锁定利率',
|
||||
)
|
||||
BonusCredited = models.BooleanField(
|
||||
default=False,
|
||||
db_column='fenhong_yiruzhang', verbose_name='分红是否已入账',
|
||||
)
|
||||
ClubID = models.CharField(
|
||||
max_length=16, default='xq', db_index=True,
|
||||
db_column='club_id', verbose_name='所属俱乐部',
|
||||
|
||||
@@ -64,6 +64,8 @@ from jituan.services.club_config import get_commission_rate, get_commission_rate
|
||||
from jituan.services.club_context import resolve_club_id_from_request
|
||||
from jituan.services.club_user import get_payment_openid
|
||||
from jituan.services.club_penalty import resolve_penalty_club_id
|
||||
from users.fadan_fenhong_utils import lock_penalty_bonus
|
||||
from users.fadan_fenhong_utils import lock_penalty_bonus
|
||||
from products.models import Shangpin, ShangpinLeixing, Huiyuangoumai
|
||||
from users.models import UserDashou, UserShangjia, UserBoss
|
||||
from users.business_models import User
|
||||
@@ -2293,25 +2295,21 @@ class ShangjiaDingdanXiangqingView(APIView):
|
||||
'shensuliyou': fadan_obj.AppealReason or '',
|
||||
'tongyi_chufaliyou': fadan_obj.ApproveReason or '',
|
||||
'bohuiliyou': fadan_obj.RejectReason or '',
|
||||
'yingde_fenhong': float(fadan_obj.ApplicantBonusAmount or 0),
|
||||
'fenhong_lilv': float(fadan_obj.ApplicantBonusRate or 0),
|
||||
'fenhong_yiruzhang': bool(fadan_obj.BonusCredited),
|
||||
'CreateTime': ct,
|
||||
'create_time': ct,
|
||||
'UpdateTime': ut,
|
||||
'update_time': ut,
|
||||
}
|
||||
|
||||
# 7. 商家分红利率(申请页预览):个人记录优先,否则全局 fadan_fenhong_lilv shenfen=5
|
||||
# 7. 商家分红利率(申请页预览):与缴纳后分红同一套规则
|
||||
fenhong_lilv = 0.0
|
||||
try:
|
||||
last_fenhong = PenaltyBonus.query.filter(
|
||||
BeneficiaryID=yonghuid,
|
||||
Identity=1, # fadan_fenhong 表:1=商家
|
||||
).order_by('-CreateTime').first()
|
||||
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)
|
||||
from users.fadan_fenhong_utils import get_merchant_fenhong_lilv
|
||||
order_club_id = getattr(order, 'ClubID', None) or 'xq'
|
||||
fenhong_lilv = get_merchant_fenhong_lilv(yonghuid, club_id=order_club_id)
|
||||
except Exception as e:
|
||||
logger.warning(f'获取分红利率失败: {e}')
|
||||
|
||||
@@ -6531,7 +6529,7 @@ class ShangjiaFakuanApplyView(APIView):
|
||||
staff_kefu_id = getattr(staff_member, 'staff_user_id', None) or None
|
||||
|
||||
with transaction.atomic():
|
||||
Penalty.query.create(
|
||||
fadan = Penalty.query.create(
|
||||
PenalizedUserID=dashou_id,
|
||||
ApplicantID=shangjia_id, # 申请人为当前商家
|
||||
Identity=1, # 被打者身份:1=打手
|
||||
@@ -6544,6 +6542,7 @@ class ShangjiaFakuanApplyView(APIView):
|
||||
ClubID=resolve_penalty_club_id(order=order, penalized_user_id=dashou_id),
|
||||
ShopStaffUserID=staff_kefu_id,
|
||||
)
|
||||
lock_penalty_bonus(fadan)
|
||||
logger.info(f"商家{shangjia_id}对订单{dingdan_id}打手{dashou_id}罚款成功,金额{fakuanjine}")
|
||||
return Response({'code': 0, 'msg': '罚款申请已提交'})
|
||||
|
||||
@@ -6647,6 +6646,7 @@ class ShangjiaFakuaiXiugaiView(APIView):
|
||||
fadan.ProcessorID = processor_id
|
||||
fadan.ProcessorIdentity = 5 # 小程序商家自行处理
|
||||
fadan.save()
|
||||
lock_penalty_bonus(fadan)
|
||||
return Response({'code': 0, 'msg': '罚款修改成功'})
|
||||
|
||||
def _cancel_penalty(self, fadan, liyou, processor_id=None):
|
||||
@@ -6685,6 +6685,7 @@ class ShangjiaFakuaiXiugaiView(APIView):
|
||||
fadan.ProcessorID = processor_id
|
||||
fadan.ProcessorIdentity = 5
|
||||
fadan.save()
|
||||
lock_penalty_bonus(fadan)
|
||||
logger.info(f"商家重新申请罚单{fadan.id},金额={jine}")
|
||||
return Response({'code': 0, 'msg': '已重新申请罚款'})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user