|
@@ -486,6 +486,52 @@ class OrderClass extends BaseClass
|
|
|
PurchaseClass::rollbackProductStock($oldStocks, $shop, $adminId, $mainId, '系统');
|
|
PurchaseClass::rollbackProductStock($oldStocks, $shop, $adminId, $mainId, '系统');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 售后提交前确保订单已完成:未完成则走确认送达/完成(与 actionConfirmReach 同口径)
|
|
|
|
|
+ * 前端发起售后可直接进页,不再预调确认送达;真正提交时由本方法兜底。
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param object $order 已加锁的销售单
|
|
|
|
|
+ * @param array $params staffId/staffName 或 shopAdminId/shopAdminName
|
|
|
|
|
+ * @return object 完成后的订单(重新加锁)
|
|
|
|
|
+ */
|
|
|
|
|
+ public static function ensureCompletedForRefund($order, $params = [])
|
|
|
|
|
+ {
|
|
|
|
|
+ if (empty($order)) {
|
|
|
|
|
+ util::fail('没有找到订单');
|
|
|
|
|
+ }
|
|
|
|
|
+ $status = intval($order->status ?? 0);
|
|
|
|
|
+ if ($status === self::ORDER_STATUS_COMPLETE) {
|
|
|
|
|
+ return $order;
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($status === self::ORDER_STATUS_UN_PAY) {
|
|
|
|
|
+ util::fail('订单待付款,不能售后');
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($status === self::ORDER_STATUS_CANCEL) {
|
|
|
|
|
+ util::fail('订单已取消,不能售后');
|
|
|
|
|
+ }
|
|
|
|
|
+ // 跑腿进行中不可强制完成,与确认送达接口一致
|
|
|
|
|
+ $sendStatus = intval($order->sendStatus ?? 0);
|
|
|
|
|
+ if (!in_array($sendStatus, [-1, -4, -2], true)) {
|
|
|
|
|
+ util::fail('已经叫跑腿了,等跑腿送完再售后');
|
|
|
|
|
+ }
|
|
|
|
|
+ $staffParams = [
|
|
|
|
|
+ 'staffId' => $params['staffId'] ?? ($params['shopAdminId'] ?? 0),
|
|
|
|
|
+ 'staffName' => $params['staffName'] ?? ($params['shopAdminName'] ?? ''),
|
|
|
|
|
+ // 售后自动完成:不额外推送发货通知
|
|
|
|
|
+ 'notice' => false,
|
|
|
|
|
+ ];
|
|
|
|
|
+ self::confirmReach($order, $staffParams);
|
|
|
|
|
+ $orderId = intval($order->id ?? 0);
|
|
|
|
|
+ $fresh = self::getLockById($orderId);
|
|
|
|
|
+ if (empty($fresh)) {
|
|
|
|
|
+ util::fail('确认完成后未找到订单');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (intval($fresh->status ?? 0) !== self::ORDER_STATUS_COMPLETE) {
|
|
|
|
|
+ util::fail('订单未能完成,请先确认送达后再售后');
|
|
|
|
|
+ }
|
|
|
|
|
+ return $fresh;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
//订单发货主方法 ssh 20231119
|
|
//订单发货主方法 ssh 20231119
|
|
|
public static function orderSend($order, $params, $allowRepeat = false)
|
|
public static function orderSend($order, $params, $allowRepeat = false)
|
|
|
{
|
|
{
|