This commit is contained in:
Your Name
2026-09-01 17:49:29 +08:00
parent 486acc465d
commit 58ffde808f
344 changed files with 520 additions and 319 deletions
@@ -341,7 +341,7 @@ class OrderController extends BaseAdminController
}
/**
* @notes 编辑订单(关联患者、订单类型)
* @notes 编辑订单(关联患者、订单类型、支付时间、创建时间
* 权限:超管或指定角色组可修改任意订单;其他用户只能修改自己创建的订单
* @return \think\response\Json
*/
@@ -361,7 +361,7 @@ class OrderController extends BaseAdminController
if (!$result) {
return $this->fail(OrderLogic::getError());
}
$this->logOrderAction($orderId, 'edit', '编辑患者/订单类型等');
$this->logOrderAction($orderId, 'edit', '编辑患者/订单类型/支付时间/创建时间等');
return $this->success('编辑成功');
}
@@ -379,6 +379,26 @@ class OrderLogic
if (isset($params['order_type'])) {
$order->order_type = (int)$params['order_type'];
}
// 支付时间参与营业额等统计,仅已支付/已退款订单允许修正且不可清空
if (array_key_exists('payment_time', $params)) {
$paymentTime = trim((string)$params['payment_time']);
if (!in_array((int)$order->status, [2, 4], true)) {
self::setError('仅已支付或已退款订单可修改支付时间');
return false;
}
if ($paymentTime === '') {
self::setError('已支付或已退款订单的支付时间不能为空');
return false;
}
$order->payment_time = $paymentTime;
}
if (isset($params['create_time'])) {
$createTime = (string)$params['create_time'];
$order->create_time = self::normalizeEditedCreateTime(
$order->getData('create_time'),
$createTime
);
}
$order->save();
return true;
@@ -388,6 +408,18 @@ class OrderLogic
}
}
/**
* 兼容历史库中 create_time 为 INT 时间戳的表结构
*/
private static function normalizeEditedCreateTime(mixed $storedValue, string $dateTime): int|string
{
if (is_int($storedValue) || (is_string($storedValue) && ctype_digit($storedValue))) {
return (int)strtotime($dateTime);
}
return $dateTime;
}
/**
* @notes 支付订单
* @param int $id
@@ -28,6 +28,8 @@ class OrderValidate extends BaseValidate
'assistant_id' => 'require|integer|gt:0',
'amounts' => 'require|array',
'order_types' => 'require|array',
'payment_time' => 'dateFormat:Y-m-d H:i:s',
'create_time' => 'require|dateFormat:Y-m-d H:i:s',
];
protected $message = [
@@ -38,11 +40,14 @@ class OrderValidate extends BaseValidate
'status.require' => '订单状态必填',
'status.in' => '订单状态不正确',
'payment_method.in' => '支付方式不正确',
'payment_time.dateFormat' => '支付时间格式不正确',
'create_time.require' => '创建时间必填',
'create_time.dateFormat' => '创建时间格式不正确',
];
protected $scene = [
'create' => ['patient_id', 'order_type', 'amount'],
'edit' => ['id'],
'edit' => ['id', 'patient_id', 'order_type', 'remark', 'payment_time', 'create_time'],
'detail' => ['id'],
'pay' => ['payment_method'],
'cancel' => ['id'],