1], [['limit',], 'default', 'value' => 1000], ]; } public function search($params = []) { $food_flag = FoodFlag::findOne($this->flag_id); if (empty($food_flag) && !empty($this->table_num)) { $table_num = $this->table_num; $food_flag = FoodFlag::findOne(['store_id' => get_store_id(), 'mch_id' => intval($params['mch_id']), 'md_id' => get_md_id(), 'table_num' => $table_num, 'status' => 0, 'type' => 1]); } $flag_id = $food_flag->id; if (get_md_id() > 0) { $md_name = Md::findOne(get_md_id())->name; } else { $md_name = Store::findOne(get_store_id())->name; } if($params['mch']) { $md_name = Mch::findOne($params['mch_id'])->name; } if ($food_flag->status == 1) { return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'total_price' => 0, 'num' => 0, 'list' => [], 'user_id' => FoodFlag::findOne($flag_id)->user_id, 'md_name' => $md_name ], ]; } $query = FoodCart::find()->where(['flag_id' => $flag_id, 'is_delete' => 0]); $query->andWhere([ 'or', [ 'status' => 1 ] ]); $count = $query->count(); $pagination = new Pagination(['totalCount' => $count, 'page' => $this->page - 1, 'pageSize' => 10000,]); /* @var FoodCart[] $list */ $list = $query->orderBy('goods_id DESC')->limit($pagination->limit)->offset($pagination->offset)->all(); $total_price = 0; $user_list = []; $num = 0; if (!empty($list)) { $user_ids = array_unique(array_column($list, 'user_id')); foreach ($user_ids as $user_id) { $goods_list = []; foreach ($list as $item) { if ($item->user_id == $user_id) { $goods = Goods::findOne([ 'id' => $item->goods_id, 'is_delete' => 0, 'status' => 1, ]); if (!$goods) { continue; } $num += $item->num; $attr_list = Attr::find()->alias('a') ->select('ag.attr_group_name,a.attr_name,a.attr_group_id,a.id') ->leftJoin(['ag' => AttrGroup::tableName()], 'a.attr_group_id=ag.id') ->where(['a.id' => json_decode($item->attr, true)]) ->asArray()->all(); $attr = $goods->attr; $price = $goods->price; $status = $goods->status; $goodsData = [ 'attr' => $attr, 'price' => $price, 'is_level' => $goods->is_level, ]; $goods_attr_info = CommonGoods::currentGoodsAttr($goodsData, (array) json_decode($item->attr, true)); $attr_num = intval(empty($goods_attr_info['num']) ? 0 : $goods_attr_info['num']); $goods_pic = isset($goods_attr_info['pic']) && !empty($goods_attr_info['pic']) ? $goods->getGoodsPic(0)->pic_url : $goods->cover_pic; $price = round(empty($goods_attr_info['price']) ? $goods->price : $goods_attr_info['price'], 2); $food_ext_goods_price = 0; if($item->food_ext_goods){ foreach(json_decode($item->food_ext_goods, true) as $egitem){ $food_ext_goods_price += $egitem['price'] * $egitem['num']; } } $price += $food_ext_goods_price; $goods_price = $price * $item->num; $total_price += $goods_price; $goods_list[] = [ 'attr_group_list' => $goods->getAttrGroupList(), 'attr' => $goods->attr, 'use_attr' => $goods->use_attr, 'num' => $item->num, 'food_ext_goods' => (array)json_decode($item->food_ext_goods, true), 'goods_num' => $goods->getNum(), 'user_id' => $item->user_id, 'cart_id' => $item->id, 'goods_id' => $goods->id, 'goods_name' => $goods->name, 'goods_pic' => $goods_pic, 'attr_list' => $attr_list, 'price' => $price, 'unitPrice' => doubleval($goods_attr_info['price']), 'max_num' => $attr_num, 'disabled' => ($item->num > $attr_num) ? true : false, 'status' => $status ]; } } $saas_user = SaasUser::findOne(['mobile' => User::findOne($user_id)->binding]); $user_list[] = [ 'name' => $saas_user->name, 'avatar' => $saas_user->avatar, 'user_id' => $user_id, 'goods_list' => $goods_list ]; } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'num' => $num, 'total_price' => $total_price, 'list' => $user_list, 'user_id' => FoodFlag::findOne($flag_id)->user_id, 'md_name' => $md_name, 'flag_id' => $flag_id ], ]; } // if (!empty($list) && $food_flag->type == 1) { // $goods_list = []; // foreach ($list as $item) { // $goods = Goods::findOne([ // 'id' => $item->goods_id, // 'is_delete' => 0, // 'status' => 1, // ]); // if (!$goods) { // continue; // } // $num += $item->num; // $attr_list = Attr::find()->alias('a') // ->select('ag.attr_group_name,a.attr_name,a.attr_group_id,a.id') // ->leftJoin(['ag' => AttrGroup::tableName()], 'a.attr_group_id=ag.id') // ->where(['a.id' => json_decode($item->attr, true)]) // ->asArray()->all(); // // $attr = $goods->attr; // $price = $goods->price; // $status = $goods->status; // $goodsData = [ // 'attr' => $attr, // 'price' => $price, // 'is_level' => $goods->is_level, // ]; // $goods_attr_info = CommonGoods::currentGoodsAttr($goodsData, (array) json_decode($item->attr, true)); // $attr_num = intval(empty($goods_attr_info['num']) ? 0 : $goods_attr_info['num']); // $goods_pic = isset($goods_attr_info['pic']) && !empty($goods_attr_info['pic']) ? $goods->getGoodsPic(0)->pic_url : $goods->cover_pic; // $price = round(empty($goods_attr_info['price']) ? $goods->price : $goods_attr_info['price'], 2); // $goods_price = $price * $item->num; // $total_price += $goods_price; // $goods_list['goods_list'][] = [ // 'attr_group_list' => $goods->getAttrGroupList(), // 'attr' => $goods->attr, // 'use_attr' => $goods->use_attr, // 'num' => $item->num, // 'goods_num' => $goods->getNum(), // 'user_id' => $item->user_id, // 'cart_id' => $item->id, // 'goods_id' => $goods->id, // 'goods_name' => $goods->name, // 'goods_pic' => $goods_pic, // 'attr_list' => $attr_list, // 'price' => $price, // 'unitPrice' => doubleval($goods_attr_info['price']), // 'max_num' => $attr_num, // 'disabled' => ($item->num > $attr_num) ? true : false, // 'status' => $status // ]; // } // if (!empty($goods_list)) { // $user_list[] = $goods_list; // } // return [ // 'code' => 0, // 'msg' => 'success', // 'data' => [ // 'num' => $num, // 'total_price' => $total_price, // 'list' => $user_list, // 'user_id' => FoodFlag::findOne($this->flag_id)->user_id, // 'md_name' => Md::findOne(get_md_id())->name // ], // ]; // } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'num' => 0, 'total_price' => 0, 'list' => [], 'user_id' => FoodFlag::findOne($this->flag_id)->user_id, 'md_name' => $md_name ], ]; } }