Kaynağa Gözat

修复:购物车商品结算时二次计算会员价

Yahoo 4 yıl önce
ebeveyn
işleme
0ee12414e2
3 değiştirilmiş dosya ile 35 ekleme ve 17 silme
  1. 20 5
      app/api/model/Goods.php
  2. 4 4
      app/api/model/Order.php
  3. 11 8
      app/api/service/Cart.php

+ 20 - 5
app/api/model/Goods.php

@@ -43,6 +43,9 @@ class Goods extends GoodsModel
         'update_time'
     ];
 
+    // 是否设置会员折扣价
+    private $isGoodsGradeMoney = true;
+
     /**
      * 商品详情:HTML实体转换回普通字符
      * @param $value
@@ -53,6 +56,17 @@ class Goods extends GoodsModel
         return htmlspecialchars_decode((string)$value);
     }
 
+    /**
+     * 是否设置会员折扣价
+     * @param bool $value
+     * @return $this
+     */
+    public function isGoodsGradeMoney(bool $value): Goods
+    {
+        $this->isGoodsGradeMoney = $value;
+        return $this;
+    }
+
     /**
      * 获取商品列表
      * @param array $param 查询条件
@@ -116,15 +130,16 @@ class Goods extends GoodsModel
 
     /**
      * 获取商品指定的sku信息并且设置商品的会员价
-     * @param $goodsInfo
-     * @param string $goodsSkuId
+     * @param mixed $goodsInfo 商品信息
+     * @param string $goodsSkuId 商品SKUID
+     * @param bool $isGoodsGradeMoney 是否设置会员折扣价
      * @return \app\common\model\GoodsSku|array|null
      * @throws BaseException
      */
-    public static function getSkuInfo($goodsInfo, string $goodsSkuId)
+    public static function getSkuInfo($goodsInfo, string $goodsSkuId, bool $isGoodsGradeMoney = true)
     {
         $goodsInfo['skuInfo'] = GoodsService::getSkuInfo($goodsInfo['goods_id'], $goodsSkuId);
-        (new static)->setGoodsGradeMoney($goodsInfo);
+        $isGoodsGradeMoney && (new static)->setGoodsGradeMoney($goodsInfo);
         return $goodsInfo['skuInfo'];
     }
 
@@ -150,7 +165,7 @@ class Goods extends GoodsModel
     {
         return $this->setGoodsData($goodsInfo, function ($goods) {
             // 计算并设置商品会员价
-            $this->setGoodsGradeMoney($goods);
+            $this->isGoodsGradeMoney && $this->setGoodsGradeMoney($goods);
         });
     }
 

+ 4 - 4
app/api/model/Order.php

@@ -13,7 +13,7 @@ declare (strict_types=1);
 namespace app\api\model;
 
 use app\api\model\{Goods as GoodsModel, OrderRefund as OrderRefundModel, Setting as SettingModel};
-use app\api\service\{User as UserService, Goods as GoodsService, Payment as PaymentService};
+use app\api\service\{User as UserService, Payment as PaymentService};
 use app\api\service\order\{PaySuccess as OrderPaySuccesService, source\Factory as OrderSourceFactory};
 use app\common\model\Order as OrderModel;
 use app\common\service\{Order as OrderService, order\Complete as OrderCompleteService};
@@ -23,7 +23,7 @@ use app\common\enum\{
     order\PayType as OrderPayTypeEnum,
     order\PayStatus as PayStatusEnum,
     order\OrderStatus as OrderStatusEnum,
-    order\DeliveryType as DeliveryTypeEnum,
+//    order\DeliveryType as DeliveryTypeEnum,
     order\ReceiptStatus as ReceiptStatusEnum,
     order\DeliveryStatus as DeliveryStatusEnum
 };
@@ -128,7 +128,7 @@ class Order extends OrderModel
     {
         // 获取商品列表
         $model = new GoodsModel;
-        $goodsList = $model->getListByIdsFromApi([$goodsId]);
+        $goodsList = $model->isGoodsGradeMoney(false)->getListByIdsFromApi([$goodsId]);
         if ($goodsList->isEmpty()) {
             throwError('未找到商品信息');
         }
@@ -136,7 +136,7 @@ class Order extends OrderModel
         $goodsList->hidden(array_merge($model->hidden, ['content', 'goods_images', 'images']));
         foreach ($goodsList as &$item) {
             // 商品sku信息
-            $item['skuInfo'] = GoodsService::getSkuInfo($item['goods_id'], $goodsSkuId);
+            $goodsInfo['skuInfo'] = GoodsModel::getSkuInfo($item, $goodsSkuId, false);
             // 商品单价
             $item['goods_price'] = $item['skuInfo']['goods_price'];
             // 商品购买数量

+ 11 - 8
app/api/service/Cart.php

@@ -29,13 +29,14 @@ class Cart extends BaseService
     /**
      * 购物车商品列表(用于购物车页面)
      * @param array $cartIds 购物车记录ID集
+     * @param bool $isGoodsGradeMoney 是否设置商品会员价
      * @return array|\think\Collection
      * @throws BaseException
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
      */
-    public function getList(array $cartIds = [])
+    public function getList(array $cartIds = [], bool $isGoodsGradeMoney = true)
     {
         // 购物车列表
         $cartList = $this->getCartList($cartIds);
@@ -43,11 +44,11 @@ class Cart extends BaseService
         $goodsIds = helper::getArrayColumn($cartList, 'goods_id');
         if (empty($goodsIds)) return [];
         // 获取商品列表
-        $goodsList = $this->getGoodsListByIds($goodsIds);
+        $goodsList = $this->getGoodsListByIds($goodsIds, $isGoodsGradeMoney);
         // 整理购物车商品列表
         foreach ($cartList as $cartIdx => $item) {
             // 查找商品, 商品不存在则删除该购物车记录
-            $result = $this->findGoods($goodsList, $item);
+            $result = $this->findGoods($goodsList, $item, $isGoodsGradeMoney);
             if ($result !== false) {
                 $cartList[$cartIdx]['goods'] = $result;
             } else {
@@ -70,7 +71,7 @@ class Cart extends BaseService
     public function getOrderGoodsList(array $cartIds = []): array
     {
         // 购物车列表
-        $cartList = $this->getList($cartIds);
+        $cartList = $this->getList($cartIds, false);
         // 订单商品列表
         $goodsList = [];
         foreach ($cartList as $item) {
@@ -93,10 +94,11 @@ class Cart extends BaseService
      * 检索查询商品
      * @param mixed $goodsList 商品列表
      * @param CartModel $item 购物车记录
+     * @param bool $isGoodsGradeMoney 是否设置商品会员价
      * @return false|mixed
      * @throws BaseException
      */
-    private function findGoods($goodsList, CartModel $item)
+    private function findGoods($goodsList, CartModel $item, bool $isGoodsGradeMoney = true)
     {
         // 查找商品记录
         $goodsInfo = helper::getArrayItemByColumn($goodsList, 'goods_id', $item['goods_id']);
@@ -104,7 +106,7 @@ class Cart extends BaseService
             return false;
         }
         // 获取当前选择的商品SKU信息
-        $goodsInfo['skuInfo'] = GoodsModel::getSkuInfo($goodsInfo, $item['goods_sku_id']);
+        $goodsInfo['skuInfo'] = GoodsModel::getSkuInfo($goodsInfo, $item['goods_sku_id'], $isGoodsGradeMoney);
         // 这里需要用到clone, 因对象是引用传递 后面的值会覆盖前面的
         return clone $goodsInfo;
     }
@@ -124,12 +126,13 @@ class Cart extends BaseService
     /**
      * 根据商品ID集获取商品列表
      * @param array $goodsIds
+     * @param bool $isGoodsGradeMoney 是否设置会员折扣价
      * @return mixed
      */
-    private function getGoodsListByIds(array $goodsIds)
+    private function getGoodsListByIds(array $goodsIds, bool $isGoodsGradeMoney = true)
     {
         $model = new GoodsModel;
-        return $model->getListByIdsFromApi($goodsIds);
+        return $model->isGoodsGradeMoney($isGoodsGradeMoney)->getListByIdsFromApi($goodsIds);
     }
 
     /**