Эх сурвалжийг харах

新增:已完成订单自动结算

萤火科技 5 жил өмнө
parent
commit
5de6d1e984

+ 1 - 1
app/common/service/order/Complete.php

@@ -8,7 +8,7 @@
 // +----------------------------------------------------------------------
 // | Author: 萤火科技 <admin@yiovo.com>
 // +----------------------------------------------------------------------
-declare (strict_types = 1);
+declare (strict_types=1);
 
 namespace app\common\service\order;
 

+ 25 - 5
app/console/model/Order.php

@@ -80,7 +80,7 @@ class Order extends OrderModel
     }
 
     /**
-     * 查询截止时间未支付的订单列表
+     * 查询截止时间已完成的订单列表
      * @param int $storeId 商城ID
      * @param array $orderIds 订单ID集
      * @return \think\Collection
@@ -88,7 +88,7 @@ class Order extends OrderModel
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
      */
-    public function getListByCompleted(int $storeId, array $orderIds)
+    public function getListByOrderIds(int $storeId, array $orderIds)
     {
         // 查询条件
         $filter = [['order_id', 'in', $orderIds]];
@@ -97,9 +97,9 @@ class Order extends OrderModel
     }
 
     /**
-     * 查询截止时间未支付的订单ID集
+     * 查询截止时间未确认收货的订单ID集
      * @param int $storeId 商城ID
-     * @param int $deadlineTime
+     * @param int $deadlineTime 截止时间
      * @return array
      */
     public function getOrderIdsByReceive(int $storeId, int $deadlineTime)
@@ -115,6 +115,27 @@ class Order extends OrderModel
         return $this->getOrderIds($storeId, $filter);
     }
 
+    /**
+     * 查询截止时间确认收货的订单列表
+     * @param int $storeId 商城ID
+     * @param int $deadlineTime 截止时间
+     * @return \think\Collection
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function getOrderListBySettled(int $storeId, int $deadlineTime)
+    {
+        // 查询条件
+        $filter = [
+            ['order_status', '=', OrderStatusEnum::COMPLETED],
+            ['receipt_time', '<=', $deadlineTime],
+            ['is_settled', '=', 0]
+        ];
+        // 查询列表记录
+        return $this->getList($storeId, $filter, ['goods.refund']);
+    }
+
     /**
      * 批量更新订单状态为已收货
      * @param array $orderIds
@@ -128,5 +149,4 @@ class Order extends OrderModel
             'order_status' => OrderStatusEnum::COMPLETED
         ]);
     }
-
 }

+ 38 - 7
app/console/service/Order.php

@@ -8,17 +8,17 @@
 // +----------------------------------------------------------------------
 // | Author: 萤火科技 <admin@yiovo.com>
 // +----------------------------------------------------------------------
-declare (strict_types = 1);
+declare (strict_types=1);
 
 namespace app\console\service;
 
-use app\console\library\Tools;
 use app\console\model\Order as OrderModel;
 use app\common\service\BaseService;
-use app\common\service\order\Complete as OrderCompleteService;
 use app\common\service\Order as OrderService;
+use app\common\service\order\Complete as OrderCompleteService;
 use app\common\enum\order\OrderStatus as OrderStatusEnum;
 use app\common\library\helper;
+use app\console\library\Tools;
 
 /**
  * 服务类:订单模块
@@ -30,7 +30,7 @@ class Order extends BaseService
     /**
      * 未支付订单自动关闭
      * @param int $storeId
-     * @param int $closeDays
+     * @param int $closeDays 自定关闭订单天数
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
@@ -64,7 +64,7 @@ class Order extends BaseService
     /**
      * 已发货订单自动确认收货
      * @param int $storeId
-     * @param int $receiveDays
+     * @param int $receiveDays 自动收货天数
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
@@ -73,7 +73,7 @@ class Order extends BaseService
     {
         // 截止时间
         $deadlineTime = time() - ((int)$receiveDays * 86400);
-        // 查询截止时间未支付的订单ID集
+        // 查询截止时间未确认收货的订单ID集
         $model = new OrderModel;
         $orderIds = $model->getOrderIdsByReceive($storeId, $deadlineTime);
         // 更新订单收货状态
@@ -92,6 +92,37 @@ class Order extends BaseService
         ]);
     }
 
+    /**
+     * 已完成订单自动结算
+     * @param int $storeId
+     * @param int $refundDays 售后期限天数
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function settledEvent(int $storeId, int $refundDays)
+    {
+        // 截止时间
+        $deadlineTime = time() - ((int)$refundDays * 86400);
+        // 查询截止时间确认收货的订单ID集
+        $model = new OrderModel;
+        $list = $model->getOrderListBySettled($storeId, $deadlineTime);
+        // 订单ID集
+        $orderIds = helper::getArrayColumn($list, 'order_id');
+        // 订单结算服务
+        if (!empty($orderIds)) {
+            $OrderCompleteService = new OrderCompleteService();
+            $OrderCompleteService->settled($list);
+        }
+        // 记录日志
+        Tools::taskLogs('Order', 'settledEvent', [
+            'storeId' => $storeId,
+            'refundDays' => $refundDays,
+            'deadlineTime' => $deadlineTime,
+            'orderIds' => helper::jsonEncode($orderIds)
+        ]);
+    }
+
     /**
      * 批量处理已完成的订单
      * @param int $storeId 商城ID
@@ -105,7 +136,7 @@ class Order extends BaseService
     {
         // 获取已完成的订单列表
         $model = new OrderModel;
-        $list = $model->getListByCompleted($storeId, $orderIds);
+        $list = $model->getListByOrderIds($storeId, $orderIds);
         // 执行订单完成后的操作
         if (!$list->isEmpty()) {
             $OrderCompleteService = new OrderCompleteService();

+ 19 - 1
app/console/task/Order.php

@@ -48,6 +48,8 @@ class Order extends Task
             $this->closeEvent();
             // 已发货订单自动确认收货
             $this->receiveEvent();
+            // 已完成订单结算
+            $this->settledEvent();
         });
     }
 
@@ -86,6 +88,23 @@ class Order extends Task
         }
     }
 
+    /**
+     * 已完成订单自动结算
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    private function settledEvent()
+    {
+        // 取消n天以前的的未付款订单
+        $refundDays = (int)$this->getTradeSetting()['refund_days'];
+        // 执行自动确认收货
+        if ($refundDays > 0) {
+            $service = new OrderService;
+            $service->settledEvent($this->storeId, $refundDays);
+        }
+    }
+
     /**
      * 获取商城交易设置
      * @return array|mixed
@@ -97,5 +116,4 @@ class Order extends Task
     {
         return SettingModel::getItem('trade', $this->storeId)['order'];
     }
-
 }