request->isGet) { return $this->error('请求方式错误'); } $page = \Yii::$app->request->get('page', 1); $limit = \Yii::$app->request->get('limit', $this->pageSize); $wheres[] = ['mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED]; $params = [ 'select' => 'id,mall_id,user_id,goods_id,num,address,express_no,express_code,send_status,mobile,name,created_at', 'where' => $wheres, 'order' => 'created_at desc', 'page' => $page, 'limit' => $limit, ]; $orders = CloudStockTwoAgentOrder::listPage($params); if (empty($orders['list'])) { if (is_array($orders['list'])) { return $this->success('success', $orders); } else { return $this->error('获取自提订单失败:' . CloudStockTwoAgentOrder::getStaticError()); } } $good_ids = array_column($orders['list'], 'goods_id'); $goods = Goods::find() ->select('id,goods_name,price,cover_pic') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $good_ids]) ->asArray() ->indexBy('id') ->all(); foreach ($orders['list'] as &$order) { $good = $goods[$order['goods_id']] ?? []; unset($good['id']); $order = array_merge($order, $good); } $send_status_map = CloudStockTwoEnum::getAgentOrdetStatusMap(); $orders['send_status_map'] = $send_status_map; return $this->success('success', $orders); } /** * @name: * @msg: 订单详情 * @param {*} * @return {*} */ public function actionDetail() { if (!\Yii::$app->request->isGet) { return $this->error('请求方式错误'); } $order_id = \Yii::$app->request->get('order_id'); if (empty($order_id)) return $this->error('参数错误'); $order = CloudStockTwoAgentOrder::find() ->select('id,mall_id,user_id,num,address,express_code,express_no,goods_id,mobile,name,created_at,send_status') ->where(['mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED, 'id' => $order_id]) ->asArray() ->one(); if (empty($order)) return $this->error('订单不存在'); $good = Goods::find() ->select('id,goods_name,price,cover_pic') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $order['goods_id']]) ->asArray() ->one(); unset($good['id']); $order = array_merge($order, $good); $send_status_map = CloudStockTwoEnum::getAgentOrdetStatusMap(); return $this->success('success', ['order' => $order, 'send_status_map' => $send_status_map]); } /** * @name: * @msg: 确认收货 * @param {integer} order_id 订单id * @return {*} */ public function actionConfirm() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $order_id = \Yii::$app->request->post('order_id'); if (empty($order_id)) return $this->error('参数错误'); $agent_order = CloudStockTwoAgentOrder::findOne([ 'id' => $order_id, 'mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED, 'send_status' => CloudStockTwoEnum::PICK_ORDER_STATUS1, ]); if (empty($agent_order)) return $this->error('订单不存在或者未发货'); $params = [ 'id' => $order_id, 'send_status' => CloudStockTwoEnum::PICK_ORDER_STATUS2, ]; $res = CloudStockTwoAgentOrder::setData($this->mall_id, $params); if (false === $res) return $this->error(CloudStockTwoAgentOrder::getStaticError()); // 自提订单确认收货事件 $event = new FillOrderConfirmEvent($this->mall_id); $data = ['id' => $order_id]; \Yii::$app->services->events->dispatch($event, $data, $event->listeners); return $this->success('操作成功'); } /** * @name: * @msg: 创建订单 * @param {integer} goods_id:商品 id * @param {integer} number:补货数量 * @param {float} pay_money:支付金额 * @param {string} pay_type:支付方式 * @param {string} transaction_password:交易密码 * @return {*} */ public function actionCreate() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $post = \Yii::$app->request->post(); $rules = [ [['goods_id', 'number', 'pay_money'], 'required'], [['goods_id', 'number'], 'integer'], ['pay_money', 'number'], ]; $res = \Yii::$app->services->validate->validate($post, $rules); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); // 当前会员是否可以补货当前商品 $rr = CloudStockTwoGoods::canFillGood($this->mall_id, $post['goods_id'], $this->stock_agent->level, $this->user_id); if (false === $rr) { return $this->error('暂不能补货当前商品'); } $agent_level = $this->stock_agent->level; $level_model = CloudStockTwoLevel::findOne(['mall_id'=>$this->mall_id,'level'=>$agent_level,'status'=>StatusEnum::ENABLED]); if(!empty($level_model['is_open_fill_min'])&&!empty($level_model['fill_min'])&&$post['number']<$level_model['fill_min']){ return $this->error('每次补货的最低数量为'.$level_model['fill_min']); } $all_stocks = CloudStockTwoGoods::allPerantAgentGoodStocks($post['goods_id'], $this->user_id, $this->mall_id); if (false === $all_stocks) { return $this->error(CloudStockTwoGoods::getStaticError()); } elseif ($post['number'] > $all_stocks) { return $this->error('补货数量超过了商品库存'); } $stock_good = CloudStockTwoGoods::findOne(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'goods_id' => $post['goods_id']]); if (empty($stock_good)) return $this->error('商品数据异常'); $agent_price = json_decode($stock_good['agent_price'],true); $agent_price = array_column($agent_price,null,'level'); $unit_price = 0; if(!empty($agent_price[$this->stock_agent->level])){ $unit_price = $agent_price[$this->stock_agent->level]['price']; } $pay_money = bcmul($unit_price, $post['number'], 2); if ($pay_money != $post['pay_money']) return $this->error('支付金额错误'); $order_no = StringHelper::generateOrderNo('CSF'); //生成支付流水 $order_trade_info[] = [ 'order_no' => $order_no, 'amount' => $pay_money, 'title' => '云库存补货订单', 'notify_class' => PayNotify::class, 'order_type' => AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO, ]; $res_trade = \Yii::$app->services->pay->createTrade($this->mall_id, $this->user_id, $order_trade_info); if ($res_trade == false) return $this->error('生成支付流水失败'); $params = [ 'user_id' => $this->user_id, 'trade_id' => $res_trade['trade_id'], 'pay_money' => $pay_money, 'order_no' => $order_no, 'trade_no' => $res_trade['trade_no'], 'is_pay' => CloudStockTwoEnum::FILL_STATUS_NOT_PAY, 'goods_id' => $post['goods_id'], 'num' => $post['number'], ]; $res_fill_order = CloudStockTwoFillOrder::setData($this->mall_id, $params); if (false === $res) return $this->error(CloudStockTwoFillOrder::getStaticError()); return $this->success('订单创建成功', ['trade_no' => $res_trade['trade_no'], 'trade_id' => $res_trade['trade_id'], 'order_ids' => $res_fill_order->id]); } }