更新
This commit is contained in:
@@ -1904,21 +1904,72 @@ class PrescriptionOrderLogic
|
||||
}
|
||||
|
||||
/**
|
||||
* 甘草已提交后仅更新物流字段(tracking_number、express_company),忽略金额/地址等其它请求参数。
|
||||
* 仅修改承运商与快递单号。物流信息不属于药房下单快照,因此允许在所有履约状态下修正。
|
||||
*
|
||||
* @param array<string,mixed> $params
|
||||
* @return array<string,mixed>|false
|
||||
*/
|
||||
private static function editGancaoLogisticsOnly(
|
||||
PrescriptionOrder $order,
|
||||
array $params,
|
||||
public static function ddcode(
|
||||
int $id,
|
||||
string $expressCompany,
|
||||
string $trackingNumber,
|
||||
int $adminId,
|
||||
array $adminInfo
|
||||
) {
|
||||
$order->tracking_number = mb_substr(trim((string) ($params['tracking_number'] ?? '')), 0, 80);
|
||||
if (array_key_exists('express_company', $params)) {
|
||||
$order->express_company = self::normalizeExpressCompany($params['express_company']);
|
||||
self::setError('');
|
||||
try {
|
||||
return LockedPharmacySnapshotMutation::execute(
|
||||
$id,
|
||||
static fn () => self::ddcodeLocked(
|
||||
$id,
|
||||
$expressCompany,
|
||||
$trackingNumber,
|
||||
$adminId,
|
||||
$adminInfo
|
||||
),
|
||||
false
|
||||
);
|
||||
} catch (\Throwable $exception) {
|
||||
if (self::getError() === '') {
|
||||
self::setError($exception->getMessage());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/** @return array<string,mixed>|false */
|
||||
private static function ddcodeLocked(
|
||||
int $id,
|
||||
string $expressCompany,
|
||||
string $trackingNumber,
|
||||
int $adminId,
|
||||
array $adminInfo
|
||||
) {
|
||||
self::$error = '';
|
||||
$trackingNumber = mb_substr(trim($trackingNumber), 0, 80);
|
||||
if ($trackingNumber === '') {
|
||||
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;
|
||||
}
|
||||
|
||||
$oldTrackingNumber = trim((string) ($order->tracking_number ?? ''));
|
||||
$oldExpressCompany = self::normalizeExpressCompany((string) ($order->express_company ?? 'auto'));
|
||||
$newExpressCompany = self::normalizeExpressCompany($expressCompany);
|
||||
|
||||
$order->tracking_number = $trackingNumber;
|
||||
$order->express_company = $newExpressCompany;
|
||||
|
||||
try {
|
||||
$order->save();
|
||||
@@ -1932,8 +1983,15 @@ class PrescriptionOrderLogic
|
||||
(int) $order->id,
|
||||
$adminId,
|
||||
$adminInfo,
|
||||
'edit',
|
||||
'甘草订单已提交,仅更新快递信息(单号/承运商)'
|
||||
'fill_tracking',
|
||||
sprintf(
|
||||
'修改快递信息:单号「%s」→「%s」,承运商「%s」→「%s」',
|
||||
$oldTrackingNumber !== '' ? $oldTrackingNumber : '空',
|
||||
$trackingNumber,
|
||||
$oldExpressCompany,
|
||||
$newExpressCompany
|
||||
),
|
||||
true
|
||||
);
|
||||
|
||||
$out = $order->toArray();
|
||||
@@ -5370,7 +5428,14 @@ class PrescriptionOrderLogic
|
||||
];
|
||||
}
|
||||
|
||||
private static function writeLog(int $orderId, int $adminId, array $adminInfo, string $action, string $summary): void
|
||||
private static function writeLog(
|
||||
int $orderId,
|
||||
int $adminId,
|
||||
array $adminInfo,
|
||||
string $action,
|
||||
string $summary,
|
||||
bool $strict = false
|
||||
): void
|
||||
{
|
||||
$adminName = $adminInfo['name'] ?? '';
|
||||
if ($adminName === '' && $adminId > 0) {
|
||||
@@ -5388,7 +5453,10 @@ class PrescriptionOrderLogic
|
||||
try {
|
||||
$log->save();
|
||||
} catch (\Throwable $e) {
|
||||
// 忽略日志写入错误
|
||||
if ($strict) {
|
||||
throw new \RuntimeException('操作日志写入失败,快递信息未保存', 0, $e);
|
||||
}
|
||||
// 非关键日志沿用历史容错行为
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user