/** * @return \yii\db\ActiveQuery */ public function getProductStocks() { return $this->hasMany(ProductStock::className(), ['warehouse_id' => 'id']); }
protected function updateProductStock($pInfo, $cartInfo) { if (empty($pInfo)) { throw new Exception("商品信息不能为空!", 1); } //谱子的库存检查及操作 if ($cartInfo['type'] == 1) { if ($pInfo['quantity'] < $cartInfo['quantity']) { throw new Exception("谱子【{$pInfo['tabname']}】库存不足!", 1); } $pInfo->quantity -= $cartInfo['quantity']; $flag = $pInfo->save(); if (empty($flag)) { throw new exception('谱子库存更新失败!'); } return true; } elseif ($cartInfo['type'] == 2) { if ($pInfo < $cartInfo['quantity']) { throw new Exception("杂志【{$pInfo['name']}】库存不足!", 1); } $pInfo->quantity -= $cartInfo['quantity']; $flag = $pInfo->save(); if (empty($flag)) { throw new exception('杂志库存更新失败!'); } return true; } //商品库存检查 if (empty($pInfo['is_multiple'])) { $stockInfo = ProductStock::model()->findByAttributes(array('product_id' => $pInfo['id'], 'attr_id' => 0)); if (empty($stockInfo)) { throw new exception('库存异常'); } if ($stockInfo['quantity'] < $cartInfo['quantity']) { throw new Exception("商品【{$pInfo['product_name']}】库存不足!", 1); } $stockInfo->quantity -= $cartInfo['quantity']; $flag = $stockInfo->save(); if (empty($flag)) { throw new exception('商品库存更新失败!'); } } else { $stockInfo = ProductStock::model()->findByAttributes(array('product_id' => $pInfo['id'], 'attr_id' => $cartInfo['size_id'])); if (empty($stockInfo)) { throw new Exception("商品【{$pInfo['product_name']}】库存错误!", 1); } elseif ($stockInfo['quantity'] < $cartInfo['quantity']) { throw new Exception("商品【{$pInfo['product_name']}】库存不足!", 1); } $stockInfo->quantity -= $cartInfo['quantity']; $flag = $stockInfo->save(); if (empty($flag)) { throw new exception('商品库存更新失败!'); } } //更新商品总的库存 $pInfo->quantity -= $cartInfo['quantity']; $flag = $pInfo->save(); if (empty($flag)) { throw new exception('商品库存更新失败!'); } return true; }
/** * Updates an individual stock entry. */ public function postProductStock($id) { $size_id = Input::get('size_id'); $colour_id = Input::get('colour_id'); $quantity = Input::get('quantity'); $stock = ProductStock::firstOrCreate(['product_id' => $id, 'size_id' => $size_id, 'colour_id' => $colour_id, 'quantity' => $quantity]); return Response::json(['status_code' => 200]); }
/** * 处理取消订单的库存 * @param $orderId */ public function dealWithCancelOrderProductStock($orderId) { if (!$orderId) { throw new exception('订单的id不能为空!'); } $list = OrderProduct::model()->findAllByAttributes(array('order_id' => $orderId)); if (empty($list)) { throw new exception('订单商品为空!'); } foreach ($list as $row) { if ($row['type'] == 1) { $pInfo = Tab::model()->findByPk($row['product_id']); } elseif ($row['type'] == 2) { $pInfo = Zine::model()->findByPk($row['product_id']); } else { $pInfo = Product::model()->findByPk($row['product_id']); } if (empty($pInfo)) { throw new exception('商品【' . $row['product_name'] . '】不存在!'); } $pInfo->quantity += $row['quantity']; $flag = $pInfo->save(); if (empty($flag)) { throw new exception('商品【' . $row['product_name'] . '】库存恢复失败!'); } if (!$row['type']) { $stockInfo = ProductStock::model()->findByAttributes(array('product_id' => $row['product_id'], 'attr_id' => $row['size_id'])); if (empty($stockInfo)) { throw new exception('商品【' . $row['product_name'] . '】库存不存在!'); } $stockInfo->quantity += $row['quantity']; $flag = $stockInfo->save(); if (empty($flag)) { throw new exception('订单【' . $row['product_name'] . '】库存恢复失败!'); } } } return true; }
protected function saveProductStock($productId) { //多属性库存保存 if ($_REQUEST['is_multiple'] == 1) { if ($_REQUEST['attr_stock']) { $temp_ids = array(); foreach ($_REQUEST['attr_stock'] as $attr_id => $row) { if (empty($row)) { continue; } $model = ProductStock::model()->findByAttributes(array('product_id' => $productId, 'attr_id' => $attr_id)); if (empty($model)) { $model = new ProductStock(); } $model->product_id = $productId; $model->attr_id = $attr_id; $model->quantity = $row; $model->add_time = time(); $model->update_time = time(); $flag = $model->save(); array_push($temp_ids, $attr_id); } //todo 删除出了这次保存外的其他数据,防止错误数据存在 $criteria = new CDbCriteria(); $criteria->addCondition('product_id=' . $productId); $criteria->addNotInCondition('attr_id', $temp_ids); ProductStock::model()->deleteAll($criteria); } } else { $model = ProductStock::model()->findByAttributes(array('product_id' => $productId)); if (empty($model)) { $model = new ProductStock(); } $model->product_id = $productId; $model->attr_id = 0; $model->quantity = $_REQUEST['quantity']; $model->add_time = time(); $model->update_time = time(); $flag = $model->save(); //todo 删除出了这次保存外的其他数据,防止错误数据存在; $criteria = new CDbCriteria(); $criteria->addCondition('id != ' . $model->id); $criteria->addCondition('product_id =' . $productId); ProductStock::model()->deleteAll($criteria); } return true; }
/** * 获取商品的库存属性【暂时还未启用】 * @param $product_id * @param bool|false $stock_type * @return array|string */ public function getProductStockInfo($product_id, $stock_type = false) { if (empty($product_id)) { return ''; } if ($stock_type === false) { $pInfo = Product::model()->findByPk($product_id); if (empty($pInfo)) { return ''; } $stock_type = $pInfo->is_multiple; } $data = array(); $data['stock_type'] = $stock_type; $quantity = 0; if ($stock_type) { $list = ProductStock::model()->findAllByAttributes(array('product_id' => $product_id)); $temp = array(); if ($list) { foreach ($list as $row) { $temp[$row->attr_id] = $row->getAttributes(); $quantity += $row->quantity; } } $data['list'] = $temp; } else { $stockInfo = ProductStock::model()->findByAttributes(array('product_id' => $product_id)); $quantity = $stockInfo->quantity; //$quantity = $pInfo['quantity']; } $data['quantity'] = $quantity; return $data; }