fix: 商家分红利率预览回退全局配置;撤销罚单记录处理人;防重复分红
This commit is contained in:
@@ -37,6 +37,13 @@ def process_fadan_fenhong(fadan_id):
|
||||
logger.error(f"罚单 {fadan_id} 不存在或状态不是已缴纳")
|
||||
return False, "罚单不存在或状态异常"
|
||||
|
||||
# 防重复分红(微信回调重试时不可二次加钱)
|
||||
if fadan.ApplicantBonusAmount and Decimal(str(fadan.ApplicantBonusAmount)) > 0:
|
||||
logger.info(
|
||||
f"罚单 {fadan_id} 已分红 {fadan.ApplicantBonusAmount} 元,跳过重复处理"
|
||||
)
|
||||
return True, "已分红"
|
||||
|
||||
# 2. 获取申请处罚者ID和身份(源身份数字)
|
||||
shenqing_chufa = fadan.ApplicantID
|
||||
src_shenfen = fadan.ApplicantIdentity
|
||||
@@ -84,8 +91,17 @@ def process_fadan_fenhong(fadan_id):
|
||||
# 7. 根据申请处罚者身份执行不同的分红逻辑
|
||||
# src_shenfen == 5 代表商家(源身份)
|
||||
if src_shenfen == 5:
|
||||
# 商家特殊处理:只记录总额,可提现分红永远为0,直接加到商家余额
|
||||
# 商家:分红统计累加 + 余额入账(可提现分红字段保持0,钱进商家余额)
|
||||
with transaction.atomic():
|
||||
fadan = Penalty.objects.select_for_update().get(id=fadan_id, Status=2)
|
||||
if fadan.ApplicantBonusAmount and Decimal(str(fadan.ApplicantBonusAmount)) > 0:
|
||||
logger.info(f"罚单 {fadan_id} 事务内检测到已分红,跳过")
|
||||
return True, "已分红"
|
||||
|
||||
if not UserShangjia.objects.filter(user__UserUID=shenqing_chufa).exists():
|
||||
logger.error(f"商家 {shenqing_chufa} 扩展表不存在,无法分红入账")
|
||||
return False, "商家资料不存在,无法分红"
|
||||
|
||||
fenhong_record, created = PenaltyBonus.objects.get_or_create(
|
||||
BeneficiaryID=shenqing_chufa,
|
||||
Identity=fenhong_shenfen,
|
||||
@@ -104,22 +120,23 @@ def process_fadan_fenhong(fadan_id):
|
||||
fenhong_record.save()
|
||||
|
||||
# 直接增加商家余额(UserShangjia.yue)
|
||||
try:
|
||||
shangjia = UserShangjia.objects.get(user__UserUID=shenqing_chufa)
|
||||
shangjia.yue += fenhong_jine
|
||||
shangjia.save(update_fields=['yue'])
|
||||
logger.info(f"商家 {shenqing_chufa} 余额增加 {fenhong_jine} 元")
|
||||
except UserShangjia.DoesNotExist:
|
||||
logger.error(f"商家 {shenqing_chufa} 扩展表不存在,无法增加余额")
|
||||
raise Exception(f"商家 {shenqing_chufa} 扩展表不存在,无法增加余额")
|
||||
shangjia = UserShangjia.objects.select_for_update().get(user__UserUID=shenqing_chufa)
|
||||
shangjia.yue += fenhong_jine
|
||||
shangjia.save(update_fields=['yue'])
|
||||
logger.info(f"商家 {shenqing_chufa} 余额增加 {fenhong_jine} 元")
|
||||
|
||||
# 更新罚单中的申请人分红金额
|
||||
fadan.ApplicantBonusAmount = fenhong_jine
|
||||
fadan.save(update_fields=['ApplicantBonusAmount'])
|
||||
|
||||
else:
|
||||
# 其他身份(客服、售后、管理员、店铺):同时增加总额和可提现分红
|
||||
# 其他身份(客服、售后、管理员、店铺):累加可提现分红
|
||||
with transaction.atomic():
|
||||
fadan = Penalty.objects.select_for_update().get(id=fadan_id, Status=2)
|
||||
if fadan.ApplicantBonusAmount and Decimal(str(fadan.ApplicantBonusAmount)) > 0:
|
||||
logger.info(f"罚单 {fadan_id} 事务内检测到已分红,跳过")
|
||||
return True, "已分红"
|
||||
|
||||
fenhong_record, created = PenaltyBonus.objects.get_or_create(
|
||||
BeneficiaryID=shenqing_chufa,
|
||||
Identity=fenhong_shenfen,
|
||||
|
||||
Reference in New Issue
Block a user