public function actionValiderOrder() { $data = Yii::$app->request->get(); if (isset($data['order_id'])) { $order_id = $data['order_id']; $connection = \Yii::$app->db; $command = $connection->createCommand('SELECT * FROM orders WHERE order_id=' . $order_id); $order = $command->queryOne(); $user = $connection->createCommand('SELECT * FROM customer WHERE id =' . $order['action_user'])->queryOne(); $ordergoods = $connection->createCommand('SELECT * FROM order_goods WHERE order_id =' . $order_id)->queryAll(); return $this->render('orderlist', ['order' => $order, 'ordergoods' => $ordergoods, 'user' => $user]); } else { $datapost = Yii::$app->request->post(); $count = $datapost['goods_count']; $type = $datapost['type']; $order_id = $datapost['order_id']; $remise = $datapost['remise']; $str = ''; $goods_nums_arr = $goods_price_arr = array(); for ($i = 0; $i < $count; $i++) { $good_id = $datapost['good_id'][$i]; $good_num = $datapost['number'][$i]; $good_price = $datapost['pprice'][$i]; $str = empty($str) ? $str . $good_id : $str . "," . $good_id; $goods_nums_arr[$good_id] = $good_num; $goods_price_arr[$good_id] = $good_price; } $session = new Sitesession(); $user_id = $session->getUserId(); $connection = \Yii::$app->db; $transaction = $connection->beginTransaction(); try { if ($order_id != 0) { $insert_order_id = $order_id; //删除order_id原来对应的goods OrderGoods::deleteAll('order_id = :order_id', [':order_id' => $order_id]); } else { //添加orders $insert_order_id = 0; $orders = new Orders(); $orders->action_user = $user_id; $orders->type = $type; if ($orders->save()) { $insert_order_id = $orders->order_id; } } // 所有的查询都在主服务器上执行 $goods = $connection->createCommand('SELECT * FROM goods WHERE goods_id in (' . $str . ')')->queryAll(); //$connection->createCommand("UPDATE user SET username='******' WHERE id=1")->execute(); $total = 0; //添加goods foreach ($goods as $i => $good) { //处理商品数量,1.包含'|',前面是数量,后面是赠送。。 2.不包含'|',就是数量 $num_str = $goods_nums_arr[$good['goods_id']]; $num_buy = 1; $num_free = 0; if (strstr($num_str, "|")) { $num_arr = explode("|", $num_str); $num_buy = isset($num_arr[0]) && is_numeric($num_arr[0]) && intval($num_arr[0]) >= 0 ? intval($num_arr[0]) : 1; $num_free = isset($num_arr[1]) && is_numeric($num_arr[1]) && intval($num_arr[1]) >= 0 ? intval($num_arr[1]) : 0; } else { $num_buy = is_numeric($num_str) && intval($num_str) > 0 ? intval($num_str) : 1; } if ($num_buy) { $price = is_numeric($goods_price_arr[$good['goods_id']]) && $goods_price_arr[$good['goods_id']] != 0.0 ? $goods_price_arr[$good['goods_id']] : $good['shop_price']; $order_goods = new OrderGoods(); $order_goods->order_id = $insert_order_id; $order_goods->goods_id = $good['goods_id']; $order_goods->goods_name = $good['goods_name']; $order_goods->goods_sn = $good['goods_sn']; $order_goods->goods_number = $num_buy; $order_goods->market_price = $price; $sum = $price * $num_buy; $order_goods->sum_price = $sum; $total += $sum; $order_goods->save(); } if ($num_free) { $order_free_goods = new OrderGoods(); $order_free_goods->order_id = $insert_order_id; $order_free_goods->goods_id = $good['goods_id']; $order_free_goods->goods_name = $good['goods_name']; $order_free_goods->goods_sn = $good['goods_sn']; $order_free_goods->goods_number = $num_free; $order_free_goods->market_price = 0; $order_free_goods->sum_price = 0; $order_free_goods->save(); } } $connection->createCommand()->update('orders', ['sum_price' => $total, 'remise' => $remise], 'order_id = ' . $insert_order_id)->execute(); $transaction->commit(); //情况session:一定要先清空goods再清空user $session->clearGoodsSession(); $session->clearUserSession(); $session->clearOrderSession(); $this->redirect(array('/order/valider-order', 'order_id' => $insert_order_id)); } catch (\Exception $e) { $transaction->rollBack(); throw $e; } } }
public function getOrdergoods() { return $this->hasMany(OrderGoods::className(), ['order_id' => 'order_id']); }