第二轮:客服额度资金闭环与收回额度

- 划额度扣商家余额,客服派单/链接只扣个人额度
- 新增 wallet/revoke 收回未使用额度,权限 wallet_revoke
- 客服额度单撤销/退款只释放额度,不再误退商家余额
- 链接待填单(13)可撤销;总管/财务可划收额度
This commit is contained in:
XingQue
2026-06-20 04:59:29 +08:00
parent b2520726dc
commit d68a1da2c2
10 changed files with 234 additions and 50 deletions

View File

@@ -2585,8 +2585,8 @@ class ShangjiaChexiaoView(APIView):
'data': None
}, status=status.HTTP_404_NOT_FOUND)
# 6. 验证订单状态
if dingdan.Status not in [1, 7]:
# 6. 验证订单状态13=链接待填单,可撤销释放额度)
if dingdan.Status not in [1, 7, 13]:
return Response({
'code': 6,
'msg': '当前订单状态不可撤销',
@@ -2620,16 +2620,19 @@ class ShangjiaChexiaoView(APIView):
)
# 9. 更新商家扩展表数据使用F表达式原子操作
UserShangjia.query.filter(id=shangjia.id).update(
yue=F('yue') + dingdan.Amount,
tuikuan=F('tuikuan') + 1,
jinridingdan=F('jinridingdan') - 1,
jinyuedingdan=F('jinyuedingdan') - 1,
jinriliushui=F('jinriliushui') - dingdan.Amount,
jinyueliushui=F('jinyueliushui') - dingdan.Amount,
)
# 9. 更新商家扩展表(客服额度单不退商家余额,只释放额度
from merchant_ops.services.wallet import is_staff_quota_order
staff_quota_order = is_staff_quota_order(dingdan_id)
shangjia_updates = {
'tuikuan': F('tuikuan') + 1,
'jinridingdan': F('jinridingdan') - 1,
'jinyuedingdan': F('jinyuedingdan') - 1,
'jinriliushui': F('jinriliushui') - dingdan.Amount,
'jinyueliushui': F('jinyueliushui') - dingdan.Amount,
}
if not staff_quota_order:
shangjia_updates['yue'] = F('yue') + dingdan.Amount
UserShangjia.query.filter(id=shangjia.id).update(**shangjia_updates)
# 10. 更新订单状态为5已退款
dingdan.Status = 5
@@ -5351,8 +5354,9 @@ class AdTongYiTuiKuanShangJia(APIView):
# ✅ 确认字段tuikuan 退款订单总量
shangjia_profile.tuikuan += 1
# ✅ 确认字段yue 商家余额(加上订单金额)
shangjia_profile.yue += jine
from merchant_ops.services.wallet import is_staff_quota_order
if not is_staff_quota_order(dingdan_id):
shangjia_profile.yue += jine
shangjia_profile.save()
logger.info(f"同意退款成功,商家{shangjia_id}退款订单+1余额增加{jine}")