Esempio n. 1
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getProductStocks()
 {
     return $this->hasMany(ProductStock::className(), ['warehouse_id' => 'id']);
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 /**
  * 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]);
 }
Esempio n. 4
0
 /**
  * 处理取消订单的库存
  * @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;
 }
Esempio n. 5
0
 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;
 }
Esempio n. 6
0
 /**
  * 获取商品的库存属性【暂时还未启用】
  * @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;
 }