where([ 'goods_id' => $goodsId, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED, 'mall_id' => $this->mall_id ]) ->count(); } /** * 获取商品库存 * * @param array $goodsIds * * @return array */ public function getGoodsStock(array $goodsIds): array { return CloudStockAgentGoods::find() ->where([ 'goods_id' => $goodsIds, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED, 'mall_id' => $this->mall_id ]) ->select('num') ->indexBy('goods_id') ->column(); } /** * 验证给定商品id和数量,验证商品库存是否足够 * * @param array $goodsGoodsNumList * * @return bool */ public function checkGoodsStockByGoodsIds(array $goodsGoodsNumList): bool { $goodsIds = array_column($goodsGoodsNumList, 'goods_id'); $goodsStock = $this->getGoodsStock($goodsIds); foreach ($goodsGoodsNumList as $item) { $goodsId = $item['goods_id']; if (!isset($goodsStock[$goodsId])) { $this->setError(sprintf('未查询到商品,商品ID:%d', $goodsId)); return false; } if ($goodsStock[$goodsId] < $item['num']) { $this->setError(sprintf('商品ID:%d 库存不足,剩余%d件', $goodsId, $goodsStock[$goodsId])); return false; } } return true; } /** * @param array $goodsIds * * @return bool */ public function checkGoodsDataByGoodsIds(array $goodsIds): bool { $findGoodsIds = Goods::find() ->where([ 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $goodsIds, 'is_on_sale' => 1, 'is_attr' => 0 ]) ->select('id') ->column(); foreach ($goodsIds as $goodsId) { if (!in_array($goodsId, $findGoodsIds)) { $this->setError(sprintf('商品数据异常,商品ID:%d', $goodsId)); return false; } } return true; } /** * 获取单规格商品的attr id * * @return void */ public function getGoodsAttrMap(array $goodsIds): array { return GoodsAttr::find() ->where(['goods_id' => $goodsIds, 'status' => StatusEnum::ENABLED]) ->select('id') ->indexBy('goods_id') ->column(); } }