更新
This commit is contained in:
@@ -124,6 +124,25 @@ class PrescriptionOrderController extends BaseAdminController
|
||||
return $this->success('修改成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置发货类型(甘草 / 洛阳)
|
||||
*/
|
||||
public function setShipMode()
|
||||
{
|
||||
$params = (new PrescriptionOrderValidate())->post()->goCheck('setShipMode');
|
||||
$result = PrescriptionOrderLogic::setShipMode(
|
||||
(int) $params['id'],
|
||||
(string) ($params['ship_mode'] ?? 'gancao'),
|
||||
$this->adminId,
|
||||
$this->adminInfo
|
||||
);
|
||||
if ($result === false) {
|
||||
return $this->fail(PrescriptionOrderLogic::getError());
|
||||
}
|
||||
|
||||
return $this->success('已保存', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改关联处方的患者姓名与手机号(订单详情场景)
|
||||
*/
|
||||
|
||||
@@ -677,9 +677,10 @@ class PrescriptionOrderLogic
|
||||
$rows = Order::whereIn('id', $ids)->whereNull('delete_time')
|
||||
->field(['id', 'order_no', 'order_type', 'amount', 'status', 'create_time', 'creator_id', 'remark', 'is_exempt'])
|
||||
->order('id', 'asc')
|
||||
->where('status', 2)
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
|
||||
$creatorIds = array_values(array_unique(array_filter(array_map('intval', array_column($rows, 'creator_id')))));
|
||||
$creatorNames = [];
|
||||
if ($creatorIds !== []) {
|
||||
@@ -1664,6 +1665,7 @@ class PrescriptionOrderLogic
|
||||
|
||||
$order->express_company = self::normalizeExpressCompany($expressCompany);
|
||||
$order->tracking_number = $trackingNumber;
|
||||
$order->ship_mode = $shipMode;
|
||||
// 仅履约中(2)时才推进到已发货(5),已发货(5)则只更新快递信息保持状态
|
||||
$isFirstShip = false;
|
||||
if ((int) $order->fulfillment_status === 2) {
|
||||
@@ -2425,7 +2427,7 @@ class PrescriptionOrderLogic
|
||||
$linkedPayPaidTotal += (float) ($o['amount'] ?? 0);
|
||||
}
|
||||
$linkedPayPaidTotal = round($linkedPayPaidTotal, 2);
|
||||
|
||||
|
||||
if ($targetFulfillmentStatus === 3) {
|
||||
$order->fulfillment_status = 3;
|
||||
$order->paid = $linkedPayPaidTotal;
|
||||
@@ -3267,6 +3269,72 @@ class PrescriptionOrderLogic
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置发货类型(甘草 / 洛阳),与确认发货选项一致
|
||||
*
|
||||
* @return array<string,mixed>|false
|
||||
*/
|
||||
public static function setShipMode(int $id, string $shipMode, int $adminId, array $adminInfo)
|
||||
{
|
||||
self::$error = '';
|
||||
|
||||
$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;
|
||||
}
|
||||
$fs = (int) $order->fulfillment_status;
|
||||
if ($fs === 3 || $fs === 4) {
|
||||
self::$error = '已完成或已取消的订单不可修改发货类型';
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$shipMode = self::normalizeShipMode($shipMode);
|
||||
if ($shipMode === 'direct' && trim((string) $order->gancao_reciperl_order_no) !== '') {
|
||||
self::$error = '已上传甘草药方,发货类型须为甘草药房';
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$oldMode = self::normalizeShipMode((string) ($order->ship_mode ?? 'gancao'));
|
||||
if ($oldMode === $shipMode) {
|
||||
$out = $order->toArray();
|
||||
self::maskInternalCostIfNeeded($out, $adminInfo);
|
||||
self::maskRemarkExtraIfNeeded($out, $adminInfo);
|
||||
self::attachLinkedPayOrders($out);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
$order->ship_mode = $shipMode;
|
||||
|
||||
try {
|
||||
$order->save();
|
||||
} catch (\Throwable $e) {
|
||||
self::$error = $e->getMessage();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$oldText = $oldMode === 'direct' ? '洛阳药房' : '甘草药房';
|
||||
$newText = $shipMode === 'direct' ? '洛阳药房' : '甘草药房';
|
||||
self::writeLog($id, $adminId, $adminInfo, 'set_ship_mode', '发货类型:' . $oldText . ' → ' . $newText);
|
||||
|
||||
$out = $order->toArray();
|
||||
self::maskInternalCostIfNeeded($out, $adminInfo);
|
||||
self::maskRemarkExtraIfNeeded($out, $adminInfo);
|
||||
self::attachLinkedPayOrders($out);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改订单金额
|
||||
*/
|
||||
|
||||
@@ -78,6 +78,7 @@ class PrescriptionOrderValidate extends BaseValidate
|
||||
'previewGancaoRecipel' => ['id'],
|
||||
'patchPrescriptionPatient' => ['id', 'patient_name', 'phone'],
|
||||
'updateAmount' => ['id', 'amount'],
|
||||
'setShipMode' => ['id', 'ship_mode'],
|
||||
];
|
||||
|
||||
public function updateAmount(): PrescriptionOrderValidate
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
-- 处方业务订单:设置发货类型(甘草 / 洛阳)
|
||||
-- 执行前确认表前缀为 zyt_;若已有相同 perms 则跳过。
|
||||
|
||||
SET @po_menu_id := (SELECT id FROM zyt_system_menu WHERE perms = 'tcm.prescriptionOrder/lists' LIMIT 1);
|
||||
|
||||
INSERT INTO zyt_system_menu (
|
||||
pid, type, name, icon, sort, perms, paths, component,
|
||||
selected, params, is_cache, is_show, is_disable, create_time, update_time
|
||||
)
|
||||
SELECT
|
||||
@po_menu_id, 'A', '设置发货类型', '', 61,
|
||||
'tcm.prescriptionOrder/setShipMode', '', '',
|
||||
'', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM DUAL
|
||||
WHERE @po_menu_id IS NOT NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM zyt_system_menu WHERE perms = 'tcm.prescriptionOrder/setShipMode');
|
||||
@@ -0,0 +1,7 @@
|
||||
-- 业务订单:发货药方(甘草 / 洛阳),与确认发货 ship_mode 一致
|
||||
-- 执行前确认表前缀为 zyt_;若列已存在可跳过。
|
||||
|
||||
ALTER TABLE `zyt_tcm_prescription_order`
|
||||
ADD COLUMN `ship_mode` varchar(16) NOT NULL DEFAULT 'gancao'
|
||||
COMMENT '发货药方:gancao=甘草药房 direct=洛阳药房'
|
||||
AFTER `express_company`;
|
||||
Reference in New Issue
Block a user