修复了罚单履约与回退机制
This commit is contained in:
@@ -205,17 +205,33 @@ def fulfill_fakuan(dingdan_id, paid_amount_yuan=None):
|
|||||||
fadan = None
|
fadan = None
|
||||||
m = re.search(r'#fadan:(\d+)', order.shuoming or '')
|
m = re.search(r'#fadan:(\d+)', order.shuoming or '')
|
||||||
if m:
|
if m:
|
||||||
|
fadan_id_str = m.group(1)
|
||||||
fadan = Penalty.query.filter(
|
fadan = Penalty.query.filter(
|
||||||
id=int(m.group(1)),
|
id=int(fadan_id_str),
|
||||||
PenalizedUserID=order.yonghuid,
|
PenalizedUserID=order.yonghuid,
|
||||||
Status__in=[1, 3],
|
Status__in=[1, 3],
|
||||||
).first()
|
).first()
|
||||||
|
if not fadan:
|
||||||
|
logger.warning(
|
||||||
|
'罚款订单 %s shuoming 标记罚单 %s 未找到(被处罚者=%s, 状态需为1/3)',
|
||||||
|
dingdan_id, fadan_id_str, order.yonghuid,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
logger.warning(
|
||||||
|
'罚款订单 %s shuoming 无 #fadan:xxx 标记,回退金额匹配: %s',
|
||||||
|
dingdan_id, order.shuoming,
|
||||||
|
)
|
||||||
if not fadan:
|
if not fadan:
|
||||||
fadan = Penalty.query.filter(
|
fadan = Penalty.query.filter(
|
||||||
PenalizedUserID=order.yonghuid,
|
PenalizedUserID=order.yonghuid,
|
||||||
FineAmount=order.jine,
|
FineAmount=order.jine,
|
||||||
Status__in=[1, 3],
|
Status__in=[1, 3],
|
||||||
).order_by('-CreateTime').first()
|
).order_by('-CreateTime').first()
|
||||||
|
if fadan:
|
||||||
|
logger.warning(
|
||||||
|
'罚款订单 %s 回退金额匹配到罚单 %s(金额=%s)',
|
||||||
|
dingdan_id, fadan.id, order.jine,
|
||||||
|
)
|
||||||
if fadan:
|
if fadan:
|
||||||
fadan.Status = 2
|
fadan.Status = 2
|
||||||
fadan.save(update_fields=['Status'])
|
fadan.save(update_fields=['Status'])
|
||||||
@@ -224,6 +240,11 @@ def fulfill_fakuan(dingdan_id, paid_amount_yuan=None):
|
|||||||
logger.error('罚单 %s 分红处理失败: %s', fadan.id, msg)
|
logger.error('罚单 %s 分红处理失败: %s', fadan.id, msg)
|
||||||
else:
|
else:
|
||||||
logger.info('罚单 %s 分红处理完成: %s', fadan.id, msg)
|
logger.info('罚单 %s 分红处理完成: %s', fadan.id, msg)
|
||||||
|
else:
|
||||||
|
logger.error(
|
||||||
|
'罚款订单 %s 未找到对应罚单,罚单状态未更新(被处罚者=%s, 金额=%s)',
|
||||||
|
dingdan_id, order.yonghuid, order.jine,
|
||||||
|
)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.error('罚款罚单状态更新失败 dingdan=%s: %s', dingdan_id, exc, exc_info=True)
|
logger.error('罚款罚单状态更新失败 dingdan=%s: %s', dingdan_id, exc, exc_info=True)
|
||||||
|
|
||||||
|
|||||||
@@ -602,7 +602,24 @@ class ShangjiaChenggong(APIView):
|
|||||||
'message': '订单不存在或不属于当前用户'
|
'message': '订单不存在或不属于当前用户'
|
||||||
}, status=status.HTTP_400_BAD_REQUEST)
|
}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
# 3. 检查订单状态是否为已支付(3)
|
# 3. 订单未支付时,尝试补偿履约(回调延迟/失败时通过轮询兜底)
|
||||||
|
if order.zhuangtai == 9:
|
||||||
|
from jituan.services.czjilu_fulfill import confirm_czjilu_paid, CzjiluFulfillError
|
||||||
|
try:
|
||||||
|
confirm_czjilu_paid(dingdanid, request.user.UserUID, expected_leixing=4)
|
||||||
|
order = Czjilu.query.get(
|
||||||
|
dingdan_id=dingdanid,
|
||||||
|
yonghuid=request.user.UserUID,
|
||||||
|
leixing=4
|
||||||
|
)
|
||||||
|
except CzjiluFulfillError as exc:
|
||||||
|
logger.info(f"商家充值确认未就绪 {dingdanid}: {exc}")
|
||||||
|
return Response({
|
||||||
|
'code': 400,
|
||||||
|
'message': '订单尚未支付完成'
|
||||||
|
}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
# 4. 检查订单状态是否为已支付(3)
|
||||||
if order.zhuangtai != 3:
|
if order.zhuangtai != 3:
|
||||||
logger.info(f"商家订单{dingdanid}尚未支付完成,当前状态: {order.zhuangtai}")
|
logger.info(f"商家订单{dingdanid}尚未支付完成,当前状态: {order.zhuangtai}")
|
||||||
return Response({
|
return Response({
|
||||||
@@ -610,7 +627,7 @@ class ShangjiaChenggong(APIView):
|
|||||||
'message': '订单尚未支付完成'
|
'message': '订单尚未支付完成'
|
||||||
}, status=status.HTTP_400_BAD_REQUEST)
|
}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
# 4. 获取商家余额(通过反向查询)
|
# 5. 获取商家余额(通过反向查询)
|
||||||
try:
|
try:
|
||||||
shangjia = request.user.ShopProfile
|
shangjia = request.user.ShopProfile
|
||||||
yue = float(shangjia.yue) # 转为浮点数方便前端处理
|
yue = float(shangjia.yue) # 转为浮点数方便前端处理
|
||||||
|
|||||||
@@ -475,6 +475,16 @@ class FaKuanPayPollView(APIView):
|
|||||||
return Response({'code': 400, 'message': '订单ID不能为空'})
|
return Response({'code': 400, 'message': '订单ID不能为空'})
|
||||||
|
|
||||||
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID)
|
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID)
|
||||||
|
# 订单未支付时,尝试补偿履约(回调延迟/失败时通过轮询兜底)
|
||||||
|
if order.zhuangtai == 9:
|
||||||
|
from jituan.services.czjilu_fulfill import confirm_czjilu_paid, CzjiluFulfillError
|
||||||
|
try:
|
||||||
|
confirm_czjilu_paid(dingdanid, request.user.UserUID, expected_leixing=6)
|
||||||
|
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID)
|
||||||
|
except CzjiluFulfillError as exc:
|
||||||
|
logger.info(f"罚款确认未就绪 {dingdanid}: {exc}")
|
||||||
|
return Response({'code': 400, 'message': '订单尚未支付'})
|
||||||
|
|
||||||
if order.zhuangtai == 3:
|
if order.zhuangtai == 3:
|
||||||
return Response({'code': 200, 'message': '支付成功'})
|
return Response({'code': 200, 'message': '支付成功'})
|
||||||
else:
|
else:
|
||||||
@@ -998,6 +1008,16 @@ class KaohePayPollView(APIView):
|
|||||||
return Response({'code': 400, 'message': '订单ID不能为空'})
|
return Response({'code': 400, 'message': '订单ID不能为空'})
|
||||||
try:
|
try:
|
||||||
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID, leixing=5)
|
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID, leixing=5)
|
||||||
|
# 订单未支付时,尝试补偿履约(回调延迟/失败时通过轮询兜底)
|
||||||
|
if order.zhuangtai == 9:
|
||||||
|
from jituan.services.czjilu_fulfill import confirm_czjilu_paid, CzjiluFulfillError
|
||||||
|
try:
|
||||||
|
confirm_czjilu_paid(dingdanid, request.user.UserUID, expected_leixing=5)
|
||||||
|
order = Czjilu.query.get(dingdan_id=dingdanid, yonghuid=request.user.UserUID, leixing=5)
|
||||||
|
except CzjiluFulfillError as exc:
|
||||||
|
logger.info(f"考核确认未就绪 {dingdanid}: {exc}")
|
||||||
|
return Response({'code': 400, 'message': '订单尚未支付'})
|
||||||
|
|
||||||
if order.zhuangtai == 3:
|
if order.zhuangtai == 3:
|
||||||
return Response({'code': 200, 'message': '支付成功'})
|
return Response({'code': 200, 'message': '支付成功'})
|
||||||
return Response({'code': 400, 'message': '订单尚未支付'})
|
return Response({'code': 400, 'message': '订单尚未支付'})
|
||||||
|
|||||||
Reference in New Issue
Block a user