萤火科技 hai 1 ano
pai
achega
1bb0e9fd76

+ 4 - 4
app/api/service/Notify.php

@@ -52,7 +52,7 @@ class Notify
                 throwError($Payment->getError() ?: '微信支付V2异步通知验证未通过');
             }
             // 订单支付成功事件
-            $this->orderPaySucces($tradeInfo, $Payment->getNotifyParams());
+            $this->orderPaySuccess($tradeInfo, $Payment->getNotifyParams());
         } catch (\Throwable $e) {
             // 记录错误日志
             Log::append('Notify-wechat', ['errMessage' => $e->getMessage()]);
@@ -74,7 +74,7 @@ class Notify
             // 获取第三方交易记录
             $tradeInfo = PaymentTradeModel::detailByOutTradeNo($notifyParams['outTradeNo']);
             // 订单支付成功事件
-            $this->orderPaySucces($tradeInfo, $notifyParams);
+            $this->orderPaySuccess($tradeInfo, $notifyParams);
         } catch (\Throwable $e) {
             // 记录错误日志
             Log::append('Notify-wechat', ['errMessage' => $e->getMessage()]);
@@ -152,7 +152,7 @@ class Notify
                 throwError($Payment->getError() ?: '支付宝异步通知验证未通过');
             }
             // 订单支付成功事件
-            $this->orderPaySucces($tradeInfo, $Payment->getNotifyParams());
+            $this->orderPaySuccess($tradeInfo, $Payment->getNotifyParams());
         } catch (\Throwable $e) {
             // 记录错误日志
             Log::append('Notify-alipay', ['errMessage' => $e->getMessage()]);
@@ -165,7 +165,7 @@ class Notify
      * @param PaymentTradeModel $tradeInfo
      * @param array $paymentData 第三方支付异步回调的
      */
-    private function orderPaySucces(PaymentTradeModel $tradeInfo, array $paymentData)
+    private function orderPaySuccess(PaymentTradeModel $tradeInfo, array $paymentData)
     {
         // 记录日志
         Log::append('Notify-orderPaySucces', [

+ 3 - 3
app/api/service/cashier/Payment.php

@@ -155,7 +155,7 @@ class Payment extends BaseService
             // 获取第三方交易记录信息
             $tradeInfo = PaymentTradeModel::detailByOutTradeNo($outTradeNo);
             // 订单支付成功事件
-            $this->orderPaySucces($tradeInfo['order_no'], $tradeInfo['trade_id'], $result);
+            $this->orderPaySuccess($tradeInfo['order_no'], $tradeInfo['trade_id'], $result);
         }
         // 返回订单状态
         return $result ? $result['paySuccess'] : false;
@@ -202,7 +202,7 @@ class Payment extends BaseService
         $this->checkOrderStatusOnPay();
         // 余额支付
         if ($this->method == PaymentMethodEnum::BALANCE) {
-            $this->orderPaySucces($this->orderInfo['order_no']);
+            $this->orderPaySuccess($this->orderInfo['order_no']);
         }
     }
 
@@ -312,7 +312,7 @@ class Payment extends BaseService
      * @return void
      * @throws BaseException
      */
-    private function orderPaySucces(string $orderNo, ?int $tradeId = null, array $paymentData = []): void
+    private function orderPaySuccess(string $orderNo, ?int $tradeId = null, array $paymentData = []): void
     {
         // 订单支付成功业务处理
         $service = new OrderPaySuccesService;

+ 2 - 2
app/api/service/recharge/Payment.php

@@ -135,7 +135,7 @@ class Payment extends BaseService
             // 获取第三方交易记录信息
             $tradeInfo = PaymentTradeModel::detailByOutTradeNo($outTradeNo);
             // 订单支付成功事件
-            $this->orderPaySucces($tradeInfo['order_no'], $tradeInfo['trade_id'], $result);
+            $this->orderPaySuccess($tradeInfo['order_no'], $tradeInfo['trade_id'], $result);
         }
         // 返回订单状态
         return $result ? $result['paySuccess'] : false;
@@ -266,7 +266,7 @@ class Payment extends BaseService
      * @return void
      * @throws BaseException
      */
-    private function orderPaySucces(string $orderNo, ?int $tradeId = null, array $paymentData = []): void
+    private function orderPaySuccess(string $orderNo, ?int $tradeId = null, array $paymentData = []): void
     {
         // 获取订单详情
         $service = new RechargePaySuccesService;

+ 2 - 4
app/common/model/Goods.php

@@ -58,7 +58,7 @@ class Goods extends BaseModel
     }
 
     /**
-     * 计算显示销量 (初始销量 + 实际销量)
+     * 获取器:用户端显示的商品销量 (实际销量+初始销量)
      * @param $value
      * @param $data
      * @return mixed
@@ -176,7 +176,7 @@ class Goods extends BaseModel
     {
         // 筛选条件
         $query = $this->getQueryFilter($param);
-        // 设置显示的销量 goods_sales
+        // 设置显示的销量goods_sales (此处无法省略因为需要根据goods_sales排序)
         $query->field(['(sales_initial + sales_actual) as goods_sales']);
         // 排序条件
         $sort = $this->setQuerySort($param);
@@ -287,8 +287,6 @@ class Goods extends BaseModel
         $goodsInfo['goods_images'] = helper::getArrayColumn($goodsInfo['images'], 'file');
         // 商品主图
         $goodsInfo['goods_image'] = current($goodsInfo['goods_images'])['preview_url'];
-        // 商品销量(实际显示=初始虚拟销量+实际销量)
-        $goodsInfo['goods_sales'] = $goodsInfo['sales_initial'] + $goodsInfo['sales_actual'];
         // 回调函数
         is_callable($callback) && call_user_func($callback, $goodsInfo);
         return $goodsInfo;

+ 1 - 1
app/common/model/Page.php

@@ -566,7 +566,7 @@ class Page extends BaseModel
      * @param array $array
      * @return array
      */
-    private function mergeDefaultData(array $array): array
+    public function mergeDefaultData(array $array): array
     {
         $array['page'] = \resetOptions($this->getDefaultPage(), $array['page']);
         $defaultItems = $this->getDefaultItems();

+ 2 - 2
app/common/service/Order.php

@@ -53,9 +53,9 @@ class Order extends BaseService
         FactoryStock::getFactory($order['order_source'])->backGoodsStock($order['goods'], $isPayOrder);
         // 回退用户优惠券
         $order['coupon_id'] > 0 && UserCouponModel::setIsUse($order['coupon_id'], false);
-        // 回退用户积分
+        // 回退用户积分 (积分抵扣)
         if ($order['points_num'] > 0) {
-            $describe = "订单取消:{$order['order_no']}";
+            $describe = "订单取消退回:{$order['order_no']}";
             UserModel::setIncPoints($order['user_id'], $order['points_num'], $describe, $order['store_id']);
         }
     }

+ 20 - 7
app/common/service/order/PaySuccess.php

@@ -342,13 +342,7 @@ class PaySuccess extends BaseService
         $orderInfo = $this->getOrderInfo();
         // 余额支付
         if ($this->method == PaymentMethodEnum::BALANCE) {
-            // 更新用户余额
-            UserModel::setDecBalance((int)$orderInfo['user_id'], (float)$orderInfo['pay_price']);
-            // 新增余额变动记录
-            BalanceLogModel::add(SceneEnum::CONSUME, [
-                'user_id' => (int)$orderInfo['user_id'],
-                'money' => -$orderInfo['pay_price'],
-            ], ['order_no' => $orderInfo['order_no']], $orderInfo['store_id']);
+            $this->updateBalanceRecord($orderInfo);
         }
         // 将第三方交易记录更新为已支付状态
         if (in_array($this->method, [PaymentMethodEnum::WECHAT, PaymentMethodEnum::ALIPAY])) {
@@ -356,6 +350,25 @@ class PaySuccess extends BaseService
         }
     }
 
+    /**
+     * 更新余额支付记录
+     * @param $orderInfo
+     * @return void
+     */
+    private function updateBalanceRecord($orderInfo)
+    {
+        if ($orderInfo['pay_price'] <= 0) {
+            return;
+        }
+        // 更新用户余额
+        UserModel::setDecBalance((int)$orderInfo['user_id'], (float)$orderInfo['pay_price']);
+        // 新增余额变动记录
+        BalanceLogModel::add(SceneEnum::CONSUME, [
+            'user_id' => (int)$orderInfo['user_id'],
+            'money' => -$orderInfo['pay_price'],
+        ], ['order_no' => $orderInfo['order_no']], $orderInfo['store_id']);
+    }
+
     /**
      * 将第三方交易记录更新为已支付状态
      */

+ 3 - 0
app/common/service/order/Refund.php

@@ -65,6 +65,9 @@ class Refund extends BaseService
      */
     private function balance($order, string $money): bool
     {
+        if ($money <= 0) {
+            return false;
+        }
         // 回退用户余额
         UserModel::setIncBalance((int)$order['user_id'], (float)$money);
         // 记录余额明细

+ 40 - 20
app/store/model/OrderRefund.php

@@ -150,30 +150,50 @@ class OrderRefund extends OrderRefundModel
         }
         // 事务处理
         $this->transaction(function () use ($order, $data) {
-            // 执行退款操作
-            if (!(new RefundService)->handle($order, (string)$data['refund_money'])) {
-                throwError('执行订单退款失败');
-            }
-            // 更新售后单状态
-            $this->save([
-                'refund_money' => $data['refund_money'],
-                'is_receipt' => 1,
-                'status' => RefundStatusEnum::COMPLETED
-            ]);
-            // 消减用户的实际消费金额
-            // 条件:判断订单是否已结算
-            if ($order['is_settled']) {
-                (new UserModel)->setDecUserExpend($order['user_id'], $data['refund_money']);
-            }
-            // 发送消息通知
-            MessageService::send('order.refund', [
-                'refund' => $this,                  // 售后单信息
-                'order_no' => $order['order_no'],   // 订单信息
-            ], $this['store_id']);
+            $this->receiptEvent($order, $data);
         });
         return true;
     }
 
+    /**
+     * 确认收货并退款事件
+     * @param $order
+     * @param $data
+     * @return void
+     * @throws \cores\exception\BaseException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    private function receiptEvent($order, $data)
+    {
+        // 执行退款操作
+        if (!(new RefundService)->handle($order, (string)$data['refund_money'])) {
+            throwError('执行订单退款失败');
+        }
+        // 回退用户积分 (积分商城兑换)
+        if ($order['pm_points_price'] > 0) {
+            $describe = "订单退款退回:{$order['order_no']}";
+            UserModel::setIncPoints($order['user_id'], $order['pm_points_price'], $describe, $order['store_id']);
+        }
+        // 更新售后单状态
+        $this->save([
+            'refund_money' => $data['refund_money'],
+            'is_receipt' => 1,
+            'status' => RefundStatusEnum::COMPLETED
+        ]);
+        // 消减用户的实际消费金额
+        // 条件:判断订单是否已结算
+        if ($order['is_settled']) {
+            (new UserModel)->setDecUserExpend($order['user_id'], $data['refund_money']);
+        }
+        // 发送消息通知
+        MessageService::send('order.refund', [
+            'refund' => $this,                  // 售后单信息
+            'order_no' => $order['order_no'],   // 订单信息
+        ], $this['store_id']);
+    }
+
     /**
      * 获取待处理售后单数量
      * @return int