WIN-2308041133\Administrator 3 months ago
parent
commit
3fd18894c4

+ 63 - 2
app/common/repositories/store/order/StoreOrderRepository.php

@@ -3202,7 +3202,67 @@ class StoreOrderRepository extends BaseRepository
         event('mini_order_shipping', ['product', $order, 7, '', '']);
         event('mini_order_shipping', ['product', $order, 7, '', '']);
 //        $this->confirmOil($order);
 //        $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
         // 从订单对象中获取验证码和商家ID
         $verify_code = $order->verify_code;
         $verify_code = $order->verify_code;
+        $order_sn = $order->order_sn;
         $mer_id = $order->mer_id;
         $mer_id = $order->mer_id;
 
 
         // 获取网站的根URL,用于构造二维码的链接
         // 获取网站的根URL,用于构造二维码的链接
@@ -3241,7 +3302,8 @@ class StoreOrderRepository extends BaseRepository
         // 如果没有找到有效的二维码图片,则生成新的二维码
         // 如果没有找到有效的二维码图片,则生成新的二维码
         if (!$imageInfo) {
         if (!$imageInfo) {
             // 构造二维码的链接,包含验证码和商家ID
             // 构造二维码的链接,包含验证码和商家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);
             $imageInfo = app()->make(QrcodeService::class)->getQRCodePath($codeUrl, $name);
@@ -3251,7 +3313,6 @@ class StoreOrderRepository extends BaseRepository
 
 
             // 处理二维码图片的路径,确保路径是相对网站根目录的
             // 处理二维码图片的路径,确保路径是相对网站根目录的
             $imageInfo['dir'] = tidy_url($imageInfo['dir'], null, $siteUrl);
             $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, [
             $attachmentRepository->create(systemConfig('upload_type') ?: 1, -2, $orderId, [
                 'attachment_category_id' => 0,
                 'attachment_category_id' => 0,

+ 55 - 0
app/controller/api/store/order/StoreOrder.php

@@ -14,6 +14,7 @@
 namespace app\controller\api\store\order;
 namespace app\controller\api\store\order;
 
 
 
 
+use app\controller\admin\user\OilLevel;
 use think\App;
 use think\App;
 use crmeb\basic\BaseController;
 use crmeb\basic\BaseController;
 use crmeb\services\LockService;
 use crmeb\services\LockService;
@@ -363,4 +364,58 @@ class StoreOrder extends BaseController
         $this->repository->cancelOrder($order);
         $this->repository->cancelOrder($order);
         return app('json')->success('订单已取消');
         return app('json')->success('订单已取消');
     }
     }
+    /**
+     * 核销
+     * @param $code
+     * @author xaboy
+     * @day 2020/8/15
+     */
+    public function verify($order_id,$num)
+    {
+        $data = $this->request->params(['data']);
+        $order_id = $this->request->params(['order_id']);
+//        $num = $this->request->params(['num']);
+//        $merId = $this->request->merId();
+        // 根据订单ID、商家ID、验证码和订单类型查询订单,并连带查询订单产品信息
+        $order = $this->repository->getWhere(['order_id' => $order_id, 'order_type' => 1], '*', ['orderProduct']);
+        // 如果订单不存在,则抛出验证异常
+        if (!$order)  return app('json')->fail('订单不存在');
+        // 如果订单未支付,则抛出验证异常
+        if (!$order->paid)  return app('json')->fail('订单未支付');
+        // 如果订单已全部核销,则抛出验证异常
+        if ($order['status'])  return app('json')->fail('订单已全部核销,请勿重复操作');
+        $this->repository->verifyPartOrder($order, $data);
+        return app('json')->success('订单核销成功');
+    }
+    /**
+     * 验证核销并返回商品内容
+     * @param $code
+     * @author xaboy
+     * @day 2020/8/15
+     */
+    public function validateVerify($order_sn)
+    {
+        $order_id = $this->request->params(['order_sn']);
+//        $num = $this->request->params(['num']);
+//        $merId = $this->request->merId();
+        // 根据订单ID、商家ID、验证码和订单类型查询订单,并连带查询订单产品信息
+        $order = $this->repository->getWhere(['order_sn' => $order_id], '*', ['orderProduct']);
+        // 如果订单不存在,则抛出验证异常
+        if (!$order)  return app('json')->fail('订单不存在');
+        // 如果订单未支付,则抛出验证异常
+        if (!$order->paid)  return app('json')->fail('订单未支付');
+        // 如果订单已全部核销,则抛出验证异常
+        if ($order['status'])  return app('json')->fail('订单已全部核销,请勿重复操作');
+        $user = $this->request->userInfo();
+        if ($user['level']>0){
+            $name = \app\common\model\user\OilLevel::where('id',$user['level'])->value('name');
+            if ($name!=='服务中心'){
+                return app('json')->fail('不是服务中心不能进行核销');
+            }
+        }else{
+            return app('json')->fail('不是服务中心不能进行核销');
+        }
+//        $this->repository->verifyPartOrder($order, $data);
+        return app('json')->success($order);
+    }
 }
 }

+ 1 - 0
route/api.php

@@ -74,6 +74,7 @@ Route::group('api/', function () {
             Route::get('delivery/:id', '/getOrderDelivery');
             Route::get('delivery/:id', '/getOrderDelivery');
             Route::get('cashier_order/:id', '/getCashierOrder');
             Route::get('cashier_order/:id', '/getCashierOrder');
             Route::post('self/cancel/:id', '/cancelOrder');
             Route::post('self/cancel/:id', '/cancelOrder');
+            Route::get('validate_erify', '/validateVerify');
         })->prefix('api.store.order.StoreOrder');
         })->prefix('api.store.order.StoreOrder');
 
 
         // 预售
         // 预售