This commit is contained in:
Your Name
2026-06-03 14:42:48 +08:00
parent ec4e0b9f29
commit 37df208706
6 changed files with 917 additions and 15 deletions
@@ -2652,8 +2652,8 @@ class PrescriptionOrderLogic
return false;
}
$curFs = (int) $order->fulfillment_status;
if ($curFs !== 5 && $curFs !== 6) {
self::$error = '仅「已发货」「已签收」状态可退款';
if (!in_array($curFs, [3, 5, 6], true)) {
self::$error = '仅「已发货」「已签收」或「已完成」状态可退款';
return false;
}
@@ -2665,12 +2665,25 @@ class PrescriptionOrderLogic
$linkedPayOrderIds = self::linkedPayOrderIdList($id);
$refundedPayCount = 0;
$refundedAmount = 0.0;
try {
if ($linkedPayOrderIds !== []) {
$refundedPayCount = Order::whereIn('id', $linkedPayOrderIds)
$toRefundRows = Order::whereIn('id', $linkedPayOrderIds)
->whereNull('delete_time')
->update(['status' => 4]);
->whereIn('status', [2, 5])
->field(['id', 'amount'])
->select()
->toArray();
foreach ($toRefundRows as $pr) {
$refundedAmount += (float) ($pr['amount'] ?? 0);
}
$refundedAmount = round($refundedAmount, 2);
if ($toRefundRows !== []) {
$refundedPayCount = Order::whereIn('id', array_column($toRefundRows, 'id'))
->whereNull('delete_time')
->update(['status' => 4]);
}
}
$order->fulfillment_status = 10;
$order->paid = 0;
@@ -2684,7 +2697,12 @@ class PrescriptionOrderLogic
$unassignSummary = self::clearDiagnosisAssistantOnComplete((int) $order->diagnosis_id);
$logLine = '订单退款,状态变更为「退款」;原因:' . $reason;
if ($refundedPayCount > 0) {
$logLine .= ';关联支付单 ' . $refundedPayCount . ' 笔已标记为已退款';
$logLine .= ';关联收款单 ' . $refundedPayCount . ' 笔已标记为已退款';
if ($refundedAmount > 0) {
$logLine .= ',合计 ¥' . $refundedAmount;
}
} elseif ($linkedPayOrderIds !== []) {
$logLine .= ';关联收款单无待退款的已支付/待审核记录';
}
$logLine .= ';已付总额清零' . $unassignSummary;