|
|
<?php
namespace App\Service\v3\Implementations;
use App\Constants\v3\ErrorCode;use App\Exception\ErrorCodeException;use App\Service\v3\Interfaces\GoodsActivityServiceInterface;use App\Service\v3\Interfaces\GoodsServiceInterface;use App\Service\v3\Interfaces\ShopCartUpdateServiceInterface;use App\Model\v3\ShoppingCart;use App\Model\v3\Goods;use App\Model\v3\GoodsActivity;use App\Constants\v3\Goods as GoodsConstants;use App\Service\v3\Interfaces\StoreServiceInterface;use Hyperf\Di\Annotation\Inject;class ShopCartUpdateService implements ShopCartUpdateServiceInterface{ /** * @Inject * @var GoodsServiceInterface */ protected $goodsService;
/** * @Inject * @var GoodsActivityServiceInterface */ protected $goodsActivityService;
/** * @Inject * @var StoreServiceInterface */ protected $storeService;
public function do($userId,$goodsId,$num,$activityType) { $goodsType = ''; //判断是普通商品还是特价商品
if($activityType == GoodsConstants::IS_ACTIVITY){ $builder = GoodsActivity::query(); $goodsType = GoodsActivity::class; $goods = $builder->find($goodsId); if(empty($goods)){ throw new ErrorCodeException(ErrorCode::GOODS_NOT_EXISTS); } //特价商品限购
$goodsArr = ShoppingCart::query() ->where(['user_id' => $userId,'market_id' => $goods->market_id,'activity_type' => GoodsConstants::IS_ACTIVITY]) ->pluck('goods_id')->toArray(); array_push($goodsArr,$goodsId); $checkGoodsActivity = $this->goodsActivityService->checkOrderActivityCount($goodsArr); if(!$checkGoodsActivity){ throw new ErrorCodeException(ErrorCode::GOODS_ACTIVITY_RESTRICT_LIMIT); } $goodsCheck = $this->goodsActivityService->check($goods,$num,$userId); }else{ $builder = Goods::query(); $goodsType = Goods::class; $goods = $builder->find($goodsId); if(empty($goods)){ throw new ErrorCodeException(ErrorCode::GOODS_NOT_EXISTS); } $goodsCheck = $this->goodsService->check($goods,$num); } if(empty($goods)){ throw new ErrorCodeException(ErrorCode::GOODS_NOT_EXISTS); }
if($goodsCheck !== true) { if($goodsCheck === ErrorCode::GOODS_ACTIVITY_INVENTORY_ERROR){ $shopcartNum = ShoppingCart::query() ->where([ 'user_id' => $userId, 'goods_id' => $goodsId, 'activity_type' => $activityType ]) ->value('num'); if($num > $shopcartNum){ throw new ErrorCodeException($goodsCheck); } }else{ throw new ErrorCodeException($goodsCheck); } }
$shoppingCart = ShoppingCart::query()->lockForUpdate()->updateOrCreate( [ 'user_id' => $userId, 'goods_id' => $goodsId, 'activity_type' => $activityType ], [ 'market_id' => $goods->market_id, 'store_id' => $goods->store_id, 'num' => $num, 'goods_type' => $goodsType ] ); $storeCheck = $this->storeService->check($goods->store_id); $shoppingCart->check = $storeCheck; return $shoppingCart; }
public function check() { // TODO: Implement check() method.
}
public function undo($shopcartIds) { $shopcartIdsArr = explode(',',$shopcartIds); return ShoppingCart::destroy($shopcartIdsArr); }
/** * 清空购物车 * @param $userId * @param $marketId * @param array $shopcartIds * @return int|mixed */ public function doClear($userId, $marketId, $shopcartIds = []) { $builder = ShoppingCart::query()->where([ ['user_id','=',$userId], ['market_id','=',$marketId], ]); if (!empty($shopcartIds)) { $builder = $builder->whereIn('id', $shopcartIds); } return $builder->delete(); }}
|