更新bug
This commit is contained in:
@@ -2534,8 +2534,8 @@ class PrescriptionOrderLogic
|
||||
return $out;
|
||||
}
|
||||
|
||||
/** 完成订单时可选的履约终态:3=已完成,7-12=业务结案类状态 */
|
||||
private const COMPLETE_FULFILLMENT_TARGETS = [3, 7, 8, 9, 10, 11, 12];
|
||||
/** 完成订单时可选的履约终态:3=已完成,7-12 业务结案类状态(退款 10 走独立 refund 接口) */
|
||||
private const COMPLETE_FULFILLMENT_TARGETS = [3, 7, 8, 9, 11, 12];
|
||||
|
||||
/** 完成时是否按「实付=关联支付单金额」重算并清空诊单医助(与 clearDiagnosisAssistantOnComplete 的终态判断一致) */
|
||||
private const COMPLETE_FULFILLMENT_TERMINAL = [3, 8, 9, 10, 11, 12];
|
||||
@@ -2592,13 +2592,7 @@ class PrescriptionOrderLogic
|
||||
$order->fulfillment_status = $targetFulfillmentStatus;
|
||||
}
|
||||
|
||||
$refundedPayCount = 0;
|
||||
try {
|
||||
if ($targetFulfillmentStatus === 10 && $linkedPayOrderIds !== []) {
|
||||
$refundedPayCount = Order::whereIn('id', $linkedPayOrderIds)
|
||||
->whereNull('delete_time')
|
||||
->update(['status' => 4]);
|
||||
}
|
||||
$order->save();
|
||||
} catch (\Throwable $e) {
|
||||
self::$error = $e->getMessage();
|
||||
@@ -2614,9 +2608,6 @@ class PrescriptionOrderLogic
|
||||
$logLine = '订单完成,状态变更为「' . $label . '」,实付金额更新为 ¥' . $linkedPayPaidTotal . $unassignSummary;
|
||||
} else {
|
||||
$logLine = '订单处理完成,状态变更为「' . $label . '」' . $unassignSummary;
|
||||
if ($targetFulfillmentStatus === 10 && $refundedPayCount > 0) {
|
||||
$logLine .= ',关联支付单 ' . $refundedPayCount . ' 笔已标记为已退款';
|
||||
}
|
||||
}
|
||||
self::writeLog(
|
||||
$id,
|
||||
@@ -2634,6 +2625,79 @@ class PrescriptionOrderLogic
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* 业务订单退款:须填写原因;关联收款单标记为已退款,实付清零。
|
||||
*
|
||||
* @return array<string,mixed>|false
|
||||
*/
|
||||
public static function refund(int $id, string $reason, int $adminId, array $adminInfo)
|
||||
{
|
||||
self::$error = '';
|
||||
$reason = trim($reason);
|
||||
if ($reason === '') {
|
||||
self::$error = '请填写退款原因';
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$order = PrescriptionOrder::where('id', $id)->whereNull('delete_time')->find();
|
||||
if (!$order) {
|
||||
self::$error = '订单不存在';
|
||||
|
||||
return false;
|
||||
}
|
||||
if (!self::canAccessOrder($order, $adminId, $adminInfo)) {
|
||||
self::$error = '无权限操作';
|
||||
|
||||
return false;
|
||||
}
|
||||
$curFs = (int) $order->fulfillment_status;
|
||||
if ($curFs !== 5 && $curFs !== 6) {
|
||||
self::$error = '仅「已发货」或「已签收」状态可退款';
|
||||
|
||||
return false;
|
||||
}
|
||||
if ((int) $order->payment_slip_audit_status !== 1) {
|
||||
self::$error = '支付单审核尚未通过,不可退款';
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$linkedPayOrderIds = self::linkedPayOrderIdList($id);
|
||||
$refundedPayCount = 0;
|
||||
|
||||
try {
|
||||
if ($linkedPayOrderIds !== []) {
|
||||
$refundedPayCount = Order::whereIn('id', $linkedPayOrderIds)
|
||||
->whereNull('delete_time')
|
||||
->update(['status' => 4]);
|
||||
}
|
||||
$order->fulfillment_status = 10;
|
||||
$order->paid = 0;
|
||||
$order->save();
|
||||
} catch (\Throwable $e) {
|
||||
self::$error = $e->getMessage();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$unassignSummary = self::clearDiagnosisAssistantOnComplete((int) $order->diagnosis_id);
|
||||
$logLine = '订单退款,状态变更为「退款」;原因:' . $reason;
|
||||
if ($refundedPayCount > 0) {
|
||||
$logLine .= ';关联支付单 ' . $refundedPayCount . ' 笔已标记为已退款';
|
||||
}
|
||||
$logLine .= ';已付总额清零' . $unassignSummary;
|
||||
|
||||
self::writeLog($id, $adminId, $adminInfo, 'refund', $logLine);
|
||||
|
||||
$out = $order->toArray();
|
||||
self::maskInternalCostIfNeeded($out, $adminInfo);
|
||||
self::maskRemarkExtraIfNeeded($out, $adminInfo);
|
||||
self::attachLinkedPayOrders($out);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
public static function fulfillmentStatusLabel(int $fs): string
|
||||
{
|
||||
$m = [
|
||||
|
||||
Reference in New Issue
Block a user