|
|
@@ -3202,7 +3202,67 @@ class StoreOrderRepository extends BaseRepository
|
|
|
event('mini_order_shipping', ['product', $order, 7, '', '']);
|
|
|
// $this->confirmOil($order);
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 核验并核销部分订单。
|
|
|
+ *
|
|
|
+ * 本函数用于验证订单的存在性、支付状态,并对指定的订单进行核销操作。
|
|
|
+ * 核销操作包括分割订单、更新订单状态、记录订单变更,并触发相关的事件。
|
|
|
+ *
|
|
|
+ * @param int $id 订单ID
|
|
|
+ * @param int $merId 商家ID
|
|
|
+ * @param array $data 待核销商品数量的数据
|
|
|
+ * @param int $serviceId 服务人员ID,默认为0表示管理员操作
|
|
|
+ * @throws ValidateException 如果订单不存在、未支付或已全部核销,则抛出验证异常
|
|
|
+ */
|
|
|
+ public function verifyPartOrder($order, array $data, $serviceId = 0)
|
|
|
+ {
|
|
|
+ // 构建待核销商品的数量映射
|
|
|
+ foreach ($data['data'] as $v) {
|
|
|
+ $splitData[$v['id']] = $v['num'];
|
|
|
+ }
|
|
|
+ // 调用订单分割函数进行订单核销操作,并更新订单对象
|
|
|
+ $spl = app()->make(StoreOrderSplitRepository::class)->splitOrder($order, $splitData, $serviceId, 1);
|
|
|
+ if ($spl) $order = $spl;
|
|
|
+
|
|
|
+ // 更新订单状态为已核销,并设置核销时间和服务人员ID
|
|
|
+ $order->status = 2;
|
|
|
+ $order->verify_time = date('Y-m-d H:i:s');
|
|
|
+ $order->verify_service_id = $serviceId;
|
|
|
+
|
|
|
+ // 触发订单核销前的事件
|
|
|
+ event('order.verify.before', compact('order'));
|
|
|
|
|
|
+ // 实例化订单状态仓库,用于后续订单状态的变更记录
|
|
|
+ $storeOrderStatusRepository = app()->make(StoreOrderStatusRepository::class);
|
|
|
+ // 使用事务处理订单状态的更新和订单变更日志的记录
|
|
|
+ Db::transaction(function () use ($order, $storeOrderStatusRepository, $serviceId) {
|
|
|
+ // 执行订单核销后的处理逻辑
|
|
|
+ $this->takeAfter($order, $order->user);
|
|
|
+ // 保存更新后的订单信息
|
|
|
+ $order->save();
|
|
|
+ // 构建订单状态变更信息
|
|
|
+ $orderStatus = [
|
|
|
+ 'order_id' => $order->order_id,
|
|
|
+ 'order_sn' => $order->order_sn,
|
|
|
+ 'type' => $storeOrderStatusRepository::TYPE_ORDER,
|
|
|
+ 'change_message' => '订单已核销',
|
|
|
+ 'change_type' => $storeOrderStatusRepository::ORDER_STATUS_TAKE,
|
|
|
+ ];
|
|
|
+ // 根据服务人员ID是否存在,分别记录服务人员日志或管理员日志
|
|
|
+ if ($serviceId) {
|
|
|
+ $storeOrderStatusRepository->createServiceLog($serviceId, $orderStatus);
|
|
|
+ } else {
|
|
|
+ $storeOrderStatusRepository->createAdminLog($orderStatus);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 触发订单核销完成后的事件
|
|
|
+ event('order.verify', compact('order'));
|
|
|
+ // 触发小程序发货管理事件,用于后续的发货操作
|
|
|
+ // 小程序发货管理
|
|
|
+ event('mini_order_shipping', ['product', $order, 7, '', '']);
|
|
|
+// $this->confirmOil($order);
|
|
|
+ }
|
|
|
/**
|
|
|
* 生成微信二维码
|
|
|
*
|
|
|
@@ -3218,6 +3278,7 @@ class StoreOrderRepository extends BaseRepository
|
|
|
{
|
|
|
// 从订单对象中获取验证码和商家ID
|
|
|
$verify_code = $order->verify_code;
|
|
|
+ $order_sn = $order->order_sn;
|
|
|
$mer_id = $order->mer_id;
|
|
|
|
|
|
// 获取网站的根URL,用于构造二维码的链接
|
|
|
@@ -3241,7 +3302,8 @@ class StoreOrderRepository extends BaseRepository
|
|
|
// 如果没有找到有效的二维码图片,则生成新的二维码
|
|
|
if (!$imageInfo) {
|
|
|
// 构造二维码的链接,包含验证码和商家ID
|
|
|
- $codeUrl = set_http_type(rtrim($siteUrl, '/') . '/pages/admin/cancellate_result/index?cal_code=' . $verify_code . '&mer_id=' . $mer_id . '&is_jump=1', request()->isSsl() ? 0 : 1);
|
|
|
+// $codeUrl = set_http_type(rtrim($siteUrl, '/') . '/pages/admin/cancellate_result/index?cal_code=' . $verify_code . '&mer_id=' . $mer_id . '&is_jump=1', request()->isSsl() ? 0 : 1);
|
|
|
+ $codeUrl = set_http_type(rtrim($siteUrl, '/') . '/api/order/validate_verify?order_sn=' . $order_sn . '&is_jump=1', request()->isSsl() ? 0 : 1);
|
|
|
|
|
|
// 生成二维码图片并获取图片路径
|
|
|
$imageInfo = app()->make(QrcodeService::class)->getQRCodePath($codeUrl, $name);
|
|
|
@@ -3251,7 +3313,6 @@ class StoreOrderRepository extends BaseRepository
|
|
|
|
|
|
// 处理二维码图片的路径,确保路径是相对网站根目录的
|
|
|
$imageInfo['dir'] = tidy_url($imageInfo['dir'], null, $siteUrl);
|
|
|
- @file_put_contents('quanju.txt',json_encode($imageInfo)."-核销地址\r\n",8);
|
|
|
// 保存二维码图片信息到附件仓库
|
|
|
$attachmentRepository->create(systemConfig('upload_type') ?: 1, -2, $orderId, [
|
|
|
'attachment_category_id' => 0,
|