diff --git a/MySQL_change.sql b/MySQL_change.sql index 5b00304..37b495d 100644 --- a/MySQL_change.sql +++ b/MySQL_change.sql @@ -249,3 +249,15 @@ ALTER TABLE `agent_products` ADD COLUMN `agent_cloud_pid` INT(10) NOT NULL DEFAULT '0' COMMENT '组团版旅行社的云产品ID' AFTER `is_cloud`, ADD INDEX `agent_cloud_pid` (`agent_cloud_pid`); UPDATE `agent_products` ap SET `is_cloud`=1 WHERE EXISTS(SELECT 1 FROM `agents` WHERE `id`=ap.`agent_id` AND `type`=3); + +# 18:15 2021/9/3 +ALTER TABLE `orders` + ADD COLUMN `agent_cloud_pid` INT NOT NULL DEFAULT 0 COMMENT '组团云产品ID' AFTER `verify_code`, + ADD COLUMN `agent_cloud_price` DECIMAL(20,2) NOT NULL DEFAULT '0' COMMENT '组团云产品销售价格' AFTER `agent_cloud_pid`, + ADD INDEX `agent_cloud_pid` (`agent_cloud_pid`); + +# 9:26 2021/9/6 +ALTER TABLE `user_money_logs` + ADD COLUMN `out_trade_no` CHAR(24) NOT NULL DEFAULT '' COMMENT '发起支付时传给微信的订单号(格式:order_no-status)' AFTER `transaction_id`; + + diff --git a/app/AdminAgent/Controllers/AgentProductController.php b/app/AdminAgent/Controllers/AgentProductController.php index 067d52d..17621d4 100644 --- a/app/AdminAgent/Controllers/AgentProductController.php +++ b/app/AdminAgent/Controllers/AgentProductController.php @@ -19,7 +19,6 @@ use Dcat\Admin\Form; use Dcat\Admin\Grid; use Dcat\Admin\Show; use Dcat\Admin\Http\Controllers\AdminController; -use Dcat\Admin\Widgets\Alert; class AgentProductController extends AdminController { @@ -75,7 +74,9 @@ class AgentProductController extends AdminController ->switch() ->else() ->using(ProductStatus::array()); - $grid->column('is_rec')->switch()->help('推荐后将在“我的”页面下方显示'); + if (Admin::user()->type != AgentType::CLUSTER) { + $grid->column('is_rec')->switch()->help('推荐后将在“我的”页面下方显示'); + } $grid->column('updated_at'); $grid->filter(function (Grid\Filter $filter) { @@ -102,7 +103,7 @@ class AgentProductController extends AdminController */ protected function detail($id) { - return Show::make($id, new AgentProduct(['agent:id,name', 'product.supplier:id,name', 'user:id,nickname', 'guide:id,name']), function (Show $show) { + return Show::make($id, new AgentProduct(['agent:id,name', 'category:id,name', 'product.supplier:id,name', 'guide:id,name']), function (Show $show) { //不允许查看非自己的数据 if ($show->model()->agent_id != Admin::user()->id) { Admin::exit('数据不存在'); @@ -115,26 +116,27 @@ class AgentProductController extends AdminController $show->field('original_price'); $show->field('sale'); $show->field('stock'); - $show->field('channel_id'); - $show->field('category_id'); + $show->field('category.name', '分类'); $show->field('status')->using(ProductStatus::array()); - $show->field('verifier.nickname', '核销人员'); if (Admin::user()->type == AgentType::CLUSTER) { $show->field('guide.name', '地接'); } - $show->field('is_rec')->using(['未推荐', '已推荐']); $show->field('title'); $show->field('pictures')->image('', 80, 80); $show->field('know')->unescape(); $show->field('content')->unescape(); - $show->field('earnest'); - $show->field('earnest_timeout'); - $show->field('deposit'); - $show->field('deposit_timeout'); + if (Admin::user()->type != AgentType::CLUSTER) { + $show->field('is_rec')->using(['未推荐', '已推荐']); + $show->field('channel_id'); + $show->field('earnest'); + $show->field('earnest_timeout'); + $show->field('deposit'); + $show->field('deposit_timeout'); + } $show->field('created_at'); $show->field('updated_at'); - $show->html(Alert::make(null, '供应商产品详情')->info()); + /*$show->html(Alert::make(null, '供应商产品详情')->info()); 因为可能是组合销售多个产品,这里暂时不显示 $show->field('product.id', '供应商产品ID'); $show->field('product.supplier.name'); @@ -145,7 +147,7 @@ class AgentProductController extends AdminController $show->field('product.sale'); $show->field('product.stock'); $show->field('product.created_at', '创建时间'); - $show->field('product.updated_at', '更新时间'); + $show->field('product.updated_at', '更新时间');*/ }); } @@ -166,55 +168,63 @@ class AgentProductController extends AdminController $form->display('id'); //组团版旅行社不允许选择组团云产品 - $options = Admin::user()->type == AgentType::CLUSTER ? [1 => '组合销售'] : ['单品销售', '组合销售', '组团云产品']; - $form->radio('type') - ->options($options) - ->default(Admin::user()->type == AgentType::CLUSTER ? 1 : 0)->required() - ->help('单品销售无需审核,组合销售需要审核才能上架') - ->when(0, function (Form $form) { - //组团版没有单品选择功能 - if (Admin::user()->type == AgentType::CLUSTER) return; - - /** 单品销售 **/ - $form->selectTable('product_id', '供应商产品') - ->help('产品列表显示的是该产品的标题和图片') - ->title('选择产品') - ->dialogWidth('80%;min-width:825px;') - ->from(SelectProduct::make()) - ->model(Product::class); - })->when(1, function (Form $form) { - /** 组合销售 **/ - $form->multipleSelectTable('product_ids', '供应商产品') - ->help('可单选或多选组合销售') - ->title('选择产品') - ->dialogWidth('80%;min-width:825px;') - ->from(SelectProduct::make()) - ->model(Product::class); - - /** 自定义内容 **/ - $form->text('title'); - $form->multipleImage('pictures')->removable(false)->uniqueName(); - $form->editor('know'); - $form->editor('content'); - })->when(2, function (Form $form) { - //组团版旅行社不允许选择组团云产品 - if (Admin::user()->type == AgentType::CLUSTER) return; - - /** 组团云产品 **/ - $form->selectTable('agent_cloud_pid', '组团云产品') - ->help('产品列表显示的是该产品的标题和图片') - ->title('选择产品') - ->dialogWidth('80%;min-width:825px;') - ->from(SelectAgentCloudProduct::make()) - ->model(Product::class); - }); - $form->text('price')->required(); - $form->text('original_price')->required(); - $form->text('sale')->default(0); - $form->text('stock')->default(8888)->required(); - - $options = Channel::selectOptions(fn($query) => $query->where('agent_id', $agent_id)); - $form->multipleSelect('channel_id')->options(array_slice($options, 1, null, true)); + if (Admin::user()->type == AgentType::CLUSTER) { + $form->hidden('product_id')->value(0)->default(0); + $form->hidden('type')->value(1)->default(1); + /** 组合销售 **/ + $form->multipleSelectTable('product_ids', '供应商产品') + ->help('请选择两个或两个以上的产品组合销售') + ->title('选择产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectProduct::make()) + ->model(Product::class); + + /** 自定义内容 **/ + $form->text('title'); + $form->multipleImage('pictures')->removable(false)->uniqueName(); + $form->editor('know'); + $form->editor('content'); + } else { + $form->radio('type') + ->options(['单品销售', '组合销售', '组团云产品']) + ->default(Admin::user()->type == AgentType::CLUSTER ? 1 : 0)->required() + ->help('单品销售无需审核,组合销售需要审核才能上架') + ->when(0, function (Form $form) { + /** 单品销售 **/ + $form->selectTable('product_id', '供应商产品') + ->help('产品列表显示的是该产品的标题和图片') + ->title('选择产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectProduct::make()) + ->model(Product::class); + })->when(1, function (Form $form) { + /** 组合销售 **/ + $form->multipleSelectTable('product_ids', '供应商产品') + ->help('可单选或多选组合销售') + ->title('选择产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectProduct::make()) + ->model(Product::class); + + /** 自定义内容 **/ + $form->text('title'); + $form->multipleImage('pictures')->removable(false)->uniqueName(); + $form->editor('know'); + $form->editor('content'); + })->when(2, function (Form $form) { + /** 组团云产品 **/ + $form->selectTable('agent_cloud_pid', '组团云产品') + ->help('产品列表显示的是该产品的标题和图片') + ->title('选择产品') + ->dialogWidth('80%;min-width:825px;') + ->from(SelectAgentCloudProduct::make()) + ->model(\App\Models\AgentProduct::class); + }); + } + $form->number('price')->min(0)->required(); + $form->number('original_price')->min(0)->required(); + $form->number('sale')->min(0)->default(0); + $form->number('stock')->min(0)->default(8888)->required(); $options = Category::selectOptions(fn($query) => $query->where('agent_id', $agent_id)); $form->select('category_id') @@ -232,7 +242,6 @@ class AgentProductController extends AdminController ]) ->required(); } - $form->switch('is_rec')->help('推荐后将在小程序“我的”页面下方显示'); //$form->selectTable('verifier') // ->title('选择核销人员') // ->dialogWidth('50%;min-width:600px;') //不起作用 @@ -248,16 +257,30 @@ class AgentProductController extends AdminController ->dialogWidth('50%;min-width:600px;') //不起作用 ->from(SelectGuide::make()) ->model(Guide::class, 'id', 'name'); + $form->confirm('提示', '如果修改了标题、价格、产品图片、旅游须知、产品详情需要重新审核,同时下架所有关联的代理商产品,是否继续?'); + } else { + $form->switch('is_rec')->help('推荐后将在小程序“我的”页面下方显示'); + + $options = Channel::selectOptions(fn($query) => $query->where('agent_id', $agent_id)); + $form->multipleSelect('channel_id')->options(array_slice($options, 1, null, true)); + + $form->number('earnest')->min(0) + ->default(0)->help('单位:元。不输入或输入 0 则不支持定金支付,必须和定金超时时间同时设置才会生效'); + $form->number('earnest_timeout')->min(0) + ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); + $form->number('deposit')->min(0) + ->default(0)->help('单位:元。不输入或输入 0 则不支持订金支付,必须和订金超时时间同时设置才会生效'); + $form->number('deposit_timeout')->min(0) + ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); + + /*$form->tree('channel_id', '所属频道') + ->expand(false) + ->nodes(Channel::where('agent_id', Admin::user()->id)->get()->toArray()) + ->setIdColumn('id') + ->setTitleColumn('name') + ->setParentColumn('pid');*/ + //->exceptParentNode(); //禁止过滤父节点的值 } - - $form->number('earnest')->min(0) - ->default(0)->help('单位:元。不输入或输入 0 则不支持定金支付,必须和定金超时时间同时设置才会生效'); - $form->number('earnest_timeout')->min(0) - ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); - $form->number('deposit')->min(0) - ->default(0)->help('单位:元。不输入或输入 0 则不支持订金支付,必须和订金超时时间同时设置才会生效'); - $form->number('deposit_timeout')->min(0) - ->default(0)->help('单位:分钟。超过这个时间未支付,订单将自动关闭'); })->saving(function (Form $form) { //不允许修改非自己的数据 if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { @@ -292,6 +315,15 @@ class AgentProductController extends AdminController if (in_array($form->model()->status, [ProductStatus::UNAUDITED, ProductStatus::REFUSE])) { return $form->response()->error('产品待审核或审核拒绝,不允许修改!'); } + + //组团云产品处理 + if ($form->type == 2) { + $cloud_product = AgentProduct::find($form->agent_cloud_pid); + if (!$cloud_product || $cloud_product->status != ProductStatus::ON_SALE) { + return $form->response()->error('你选择的组团云产品状态异常,上架失败!'); + } + } + $form->model()->status = $form->status == 1 ? ProductStatus::ON_SALE : ProductStatus::SOLD_OUT; $form->model()->save(); return $form->response()->success('更新成功!'); @@ -480,11 +512,10 @@ class AgentProductController extends AdminController } } - //如果是组团云产品,同步信息到其它产品 + //如果是组团云产品,且处于上架状态,同步信息到其它产品,否则下架所有关联的产品 if ($form->is_cloud) { - \App\Models\AgentProduct::query() - ->where(['agent_cloud_pid' => $form->getKey(), 'type' => 2]) - ->update([ + if ($form->status == ProductStatus::ON_SALE) { + $data = [ 'product_id' => $form->product_id, 'product_ids' => $form->product_ids, 'guide_id' => $form->guide_id, @@ -492,7 +523,13 @@ class AgentProductController extends AdminController 'pictures' => explode(',', $form->pictures), 'know' => $form->know, 'content' => $form->content, - ]); + ]; + } else { + $data = ['status' => ProductStatus::SOLD_OUT]; + } + \App\Models\AgentProduct::query() + ->where(['agent_cloud_pid' => $form->getKey(), 'type' => 2]) + ->update($data); } })->deleting(function (Form $form) { //不允许删除非自己的数据 diff --git a/app/AdminAgent/Controllers/ArticleController.php b/app/AdminAgent/Controllers/ArticleController.php index 2e9478d..024bc32 100644 --- a/app/AdminAgent/Controllers/ArticleController.php +++ b/app/AdminAgent/Controllers/ArticleController.php @@ -29,7 +29,7 @@ class ArticleController extends AdminController $grid->column('title'); $grid->column('image')->image('', 60, 60); $grid->column('sort')->editable()->width(120)->help('数字超小越靠前'); - $grid->column('type')->using(['普通列表', '大图显示']); + $grid->column('type')->switch()->help('开启将以大图方式显示,关闭以普通列表显示'); $grid->column('created_at'); $grid->column('updated_at')->sortable(); @@ -102,7 +102,12 @@ class ArticleController extends AdminController //特殊字段处理 $form->hidden(['agent_id']); $form->agent_id = Admin::user()->id; - $form->sort = $form->sort ?? 255; + if (array_key_exists('sort', $form->input())) { + $form->sort = $form->sort ?? 255; + } + if (array_key_exists('author', $form->input())) { + $form->author = $form->author ?? ''; + } //不允许编辑的字段 $form->ignore(['id', 'created_at', 'updated_at']); diff --git a/app/AdminAgent/Controllers/GroupOrderController.php b/app/AdminAgent/Controllers/GroupOrderController.php new file mode 100644 index 0000000..752ae70 --- /dev/null +++ b/app/AdminAgent/Controllers/GroupOrderController.php @@ -0,0 +1,121 @@ +disableDeleteButton(); + $grid->disableBatchDelete(); + $grid->disableCreateButton(); + $grid->disableRowSelector(); + $grid->disableEditButton(); + + $grid->model()->whereHas('agentCloud', function ($query) { + return $query->where('agent_id', Admin::user()->id); + }); + + $grid->column('id')->sortable(); + $grid->column('order_no')->limit(10); + $grid->column('name'); + $grid->column('mobile'); + $grid->column('title'); + $grid->column('picture')->image('', 60, 60); + $grid->column('agent_cloud_pid', '产品ID'); + $grid->column('agent_cloud_price', '售价'); + $grid->column('guide.name', '地接名称')->display(fn() => $this->guide->name); + $grid->column('guide.contact_phone', '地接电话')->display(fn() => $this->guide->contact_phone); + $grid->column('paid_at'); + $grid->column('paid_money'); + $grid->column('pay_type')->using(PayType::array()); + $grid->column('price'); + $grid->column('status')->using(OrderStatus::array()); + $grid->column('created_at'); + + $grid->filter(function (Grid\Filter $filter) { + $filter->panel(); + + $filter->equal('id')->width(2); + $filter->equal('mobile')->width(2); + $filter->equal('order_no')->width(3); + $filter->equal('status')->select(OrderStatus::array())->width(2); + + $option = Supplier::query()->pluck('name', 'id'); + $filter->equal('product.supplier_id', '供应商')->select($option)->width(3); + + $filter->between('created_at')->datetime()->width(4); + }); + }); + } + + /** + * Make a show builder. + * + * @param mixed $id + * + * @return Show + */ + protected function detail($id) + { + return Show::make($id, new Order(['guide:id,name']), function (Show $show) { + $show->disableDeleteButton(); + $show->disableEditButton(); + + $show->field('id'); + $show->field('order_no'); + $show->field('name'); + $show->field('mobile'); + $show->field('title'); + $show->field('picture')->image('', 80, 80); + $show->field('agent_cloud_pid'); + $show->field('agent_cloud_price'); + $show->field('guide.name', '地接名称')->as(fn() => $this->guide->name); + $show->field('guide.contact_phone', '地接电话')->as(fn() => $this->guide->contact_phone); + $show->field('paid_at'); + $show->field('paid_money'); + $show->field('pay_type')->using(PayType::array()); + $show->field('price'); + $show->field('status')->using(OrderStatus::array()); + $show->field('created_at'); + $show->field('updated_at'); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + return Form::make(new Order(), function (Form $form) { + $form->disableDeleteButton(); + + $form->display('id'); + })->saving(function (Form $form) { + return $form->response()->error('操作禁止'); + })->deleting(function (Form $form) { + return $form->response()->error('操作禁止'); + }); + } +} diff --git a/app/AdminAgent/Controllers/NoticeController.php b/app/AdminAgent/Controllers/NoticeController.php index ca7c1ce..080f5c7 100644 --- a/app/AdminAgent/Controllers/NoticeController.php +++ b/app/AdminAgent/Controllers/NoticeController.php @@ -91,11 +91,8 @@ class NoticeController extends AdminController $form->hidden(['agent_id']); $form->agent_id = Admin::user()->id; $form->sort = $form->sort ?? 255; - - foreach ($form->input() as $k => $v) { - if (is_null($v)) { - $form->$k = ''; - } + if (array_key_exists('author', $form->input())) { + $form->author = $form->author ?? ''; } //不允许编辑的字段 diff --git a/app/AdminAgent/Controllers/OrderController.php b/app/AdminAgent/Controllers/OrderController.php index 12771c5..ec0e50a 100644 --- a/app/AdminAgent/Controllers/OrderController.php +++ b/app/AdminAgent/Controllers/OrderController.php @@ -8,7 +8,6 @@ use App\AdminAgent\Repositories\Order; use App\Common\OrderStatus; use App\Common\PayType; use App\Models\OrderProductItem; -use App\Models\Product; use App\Models\Supplier; use Dcat\Admin\Admin; use Dcat\Admin\Form; @@ -27,13 +26,15 @@ class OrderController extends AdminController */ protected function grid() { - return Grid::make(new Order(['agent:id,name', 'product']), function (Grid $grid) { + return Grid::make(new Order(['product']), function (Grid $grid) { $grid->disableDeleteButton(); $grid->disableBatchDelete(); $grid->disableCreateButton(); $grid->disableRowSelector(); $grid->disableEditButton(); $grid->disableQuickEditButton(false); + $grid->quickSearch(['mobile', 'order_no', 'title']) + ->placeholder('搜索手机号、订单号、产品名称')->width(20); $grid->model()->where('agent_id', Admin::user()->id); @@ -112,11 +113,10 @@ class OrderController extends AdminController $grid->filter(function (Grid\Filter $filter) { $filter->panel(); - $filter->model()->where('agent_id', Admin::user()->id); - $filter->equal('id')->width(2); - $filter->equal('mobile')->width(2); - $filter->equal('order_no')->width(3); + $filter->like('mobile')->width(2); + $filter->like('order_no')->width(3); + $filter->like('title')->width(3); $filter->equal('status')->select(OrderStatus::array())->width(2); $option = Supplier::query()->pluck('name', 'id'); diff --git a/app/AdminAgent/Renderable/SelectProduct.php b/app/AdminAgent/Renderable/SelectProduct.php index e8194bb..ec52e5d 100644 --- a/app/AdminAgent/Renderable/SelectProduct.php +++ b/app/AdminAgent/Renderable/SelectProduct.php @@ -24,7 +24,7 @@ class SelectProduct extends LazyRenderable $grid->disableBatchDelete(); $grid->disableBatchActions(); - $grid->model()->where('status', ProductStatus::ON_SALE); + $grid->model()->where('status', ProductStatus::ON_SALE)->whereIn('agent_id', [0, Admin::user()->id]); $grid->quickSearch(['title', 'supplier.name'])->placeholder('搜索产品名称、供应商'); $grid->column('id'); diff --git a/app/AdminAgent/routes.php b/app/AdminAgent/routes.php index 1f98d86..c375c7d 100644 --- a/app/AdminAgent/routes.php +++ b/app/AdminAgent/routes.php @@ -36,5 +36,6 @@ Route::group([ $router->resource('article/list', 'ArticleController'); $router->resource('setting', 'SettingController'); $router->resource('channel/list', 'ChannelController'); + $router->resource('group_order/list', 'GroupOrderController'); $router->resource('finance_statistics', 'FinanceStatisticsController'); }); diff --git a/app/Http/Controllers/Api/AgentProductController.php b/app/Http/Controllers/Api/AgentProductController.php index f44b4de..34f3cc6 100644 --- a/app/Http/Controllers/Api/AgentProductController.php +++ b/app/Http/Controllers/Api/AgentProductController.php @@ -40,14 +40,16 @@ class AgentProductController extends Controller $agent_product = AgentProduct::query() ->with('coupon:tag,agent_product_id') ->with('fav:agent_product_id') - ->whereHas('product', function ($query) { - return $query->where('status', ProductStatus::ON_SALE)->where('stock', '>', 0); + ->whereDoesntHave('agentProductItem', function ($query) { + return $query->whereHas('product', function ($query) { + return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE); + }); }) ->where('stock', '>', 0) ->firstWhere(['id' => $id, 'agent_id' => $this->agent_id, 'status' => ProductStatus::ON_SALE]); if (!$agent_product) { - return $this->error('产品不存在或已下架'); + return $this->error('产品已下架或库存不足'); } $prefix = Storage::disk('public')->url(''); @@ -94,7 +96,8 @@ class AgentProductController extends Controller //人气爆款列表,销量排序 public function hotList() { - $list = AgentProduct::list($this->agent_id)->orderBy('id', 'DESC')->simplePaginate(); + $list = AgentProduct::list($this->agent_id) + ->orderBy('sale', 'DESC')->orderBy('id', 'DESC')->simplePaginate(); $list = $this->paginatePicAddHost($list); $list = $this->insertAd($list); diff --git a/app/Http/Controllers/Api/LoginController.php b/app/Http/Controllers/Api/LoginController.php index 17d3d69..3c80b7b 100644 --- a/app/Http/Controllers/Api/LoginController.php +++ b/app/Http/Controllers/Api/LoginController.php @@ -48,13 +48,12 @@ class LoginController extends Controller return $this->error($msg); } if (empty($res['session_key'])) { - $this->error('获取session_key失败'); + return $this->error('获取session_key失败'); } } catch (InvalidConfigException $e) { return $this->error($e->getMessage()); } - // TODO 登录部分待优化 $userModel = User::query()->firstOrCreate([ 'openid' => $res['openid'] ?? '', 'agent_id' => $agent->id, diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index 9df1145..483645c 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Api; use App\Common\PayType; +use App\Common\ProductStatus; use App\Http\Controllers\Controller; use App\Models\Agent; use App\Models\AgentProduct; @@ -29,8 +30,6 @@ use Illuminate\Support\Facades\Storage; */ class OrderController extends Controller { - private $earnest = 200; //定金和首款默认金额 TODO 定金支付和首款支付暂定为200 - //订单列表 public function index(Request $request) { @@ -80,10 +79,13 @@ class OrderController extends Controller if ($v['timeout'] !== null) { $second = strtotime($v['timeout']) - $time; - if ($second > 0 && $v['status'] == Status::UNPAID) { - $v['status_text'] = '请在' . ceil($second / 60) . "分钟内付款"; - } else if ($second > 0 && $v['status'] == Status::OFFLINE_UNPAID) { - $v['status_text'] = '请在' . ceil($second / 60) . "分钟内线下付款"; + if ($second > 0) { + $text_arr = [ + Status::UNPAID => '付款', + Status::OFFLINE_UNPAID => '线下付款', + Status::PAY_EARNEST => '付尾款', + ]; + $v['status_text'] = '请在' . ceil($second / 60) . "分钟内" . ($text_arr[$v['status']] ?? '付款'); } else if ($second < 0 && $v['status'] == Status::PAY_EARNEST) { $v['status_text'] = '尾款支付已超时'; } /*else { //此部分由定时处理 @@ -127,17 +129,13 @@ class OrderController extends Controller ]); $ap = AgentProduct::query() - ->where('id', $formData['id']) - ->with('coupon') - ->with('product') + ->where(['id' => $formData['id'], 'status' => ProductStatus::ON_SALE]) + ->where('stock', '>=', $formData['num']) + ->with(['coupon', 'product', 'agentCloudProduct:id,price']) ->has('product') ->first(); if (!$ap || !$ap->product) { - $this->error('产品不存在或已下架'); - } - //TODO 供应商产品需要判断组合产品库存 - if ($ap->stock < $formData['num'] || $ap->product->stock < $formData['num']) { - $this->error('对不起,库存不足'); + return $this->error('产品已下架或库存不足'); } $coupon_ids = []; @@ -150,7 +148,6 @@ class OrderController extends Controller DB::beginTransaction(); try { $price = $this->calc($ap->price, $formData['num'], $formData['pay_type'], $ap); - $title = $ap->title; //产品标题 //供应商产品表减库存 $product_ids = explode(',', $ap->product_ids); @@ -184,7 +181,7 @@ class OrderController extends Controller 'price' => $price, 'name' => $formData['name'], 'mobile' => $formData['mobile'], - 'title' => $title, + 'title' => $ap->title, 'picture' => $ap->picture, 'agent_product_id' => $ap->id, 'product_id' => $ap->product_id, @@ -194,6 +191,8 @@ class OrderController extends Controller 'coupon_id' => join(',', $coupon_ids), 'guide_id' => $ap->guide_id, 'timeout' => $timeout, + 'agent_cloud_pid' => $ap->agent_cloud_pid, + 'agent_cloud_price' => $ap->agentCloudProduct->price ?? 0, ]); //存入订单产品表 @@ -387,7 +386,7 @@ class OrderController extends Controller { $id = (int)request()->input('id'); - $fields = ['id', 'agent_id', 'order_no', 'agent_product_id', 'num', 'price', 'title', 'picture', 'status', + $fields = ['id', 'agent_id', 'order_no', 'agent_product_id', 'num', 'price', 'name', 'mobile', 'title', 'picture', 'status', 'pay_type', 'coupon_id', 'paid_money', 'paid_at', 'refund_info', 'verify_code', 'created_at']; $order = Order::with('agent:id,appid,appsecret') ->where('user_id', $this->user_id) diff --git a/app/Http/Controllers/Api/WxpayController.php b/app/Http/Controllers/Api/WxpayController.php index f292242..3ddf8ab 100644 --- a/app/Http/Controllers/Api/WxpayController.php +++ b/app/Http/Controllers/Api/WxpayController.php @@ -115,6 +115,7 @@ class WxpayController 'desc' => DB::raw("LEFT('购买产品:{$order->title}', 250)"), 'transaction_id' => $message['transaction_id'], //微信支付订单号 'created_at' => now(), //模型没有updated_at,无法自动写入时间 + 'out_trade_no' => $message['out_trade_no'] ?? '', ]); DB::commit(); diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index d2b2fd7..ae32b86 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -17,7 +17,6 @@ class Controller extends BaseController public function __construct() { - // TODO 登录部分待优化 $auth = request()->header('Authentication'); $appid = request()->header('appid'); diff --git a/app/Http/Middleware/ApiAuth.php b/app/Http/Middleware/ApiAuth.php index f3e8f26..b820dc7 100644 --- a/app/Http/Middleware/ApiAuth.php +++ b/app/Http/Middleware/ApiAuth.php @@ -29,7 +29,7 @@ class ApiAuth ]); } - //检查用户 TODO 登录部分待优化 + //检查用户 $user_id = Cache::get($auth); if (empty($user_id) || $user_id != User::query()->where(['id' => $user_id, 'status' => 1])->value('id')) { return response()->json([ diff --git a/app/Models/AgentProduct.php b/app/Models/AgentProduct.php index a8c4d7f..b35ab09 100644 --- a/app/Models/AgentProduct.php +++ b/app/Models/AgentProduct.php @@ -52,6 +52,11 @@ class AgentProduct extends BaseModel return $this->hasMany(AgentProductItem::class); } + public function agentCloudProduct() + { + return $this->belongsTo(self::class, 'agent_cloud_pid', 'id'); + } + public function setChannelIdAttribute($value) { $this->attributes['channel_id'] = is_array($value) ? join(',', array_filter($value)) : $value; @@ -84,12 +89,20 @@ class AgentProduct extends BaseModel } //列表查询统一查询条件 - public function scopeList($query, $agent_id) + public static function list($agent_id) { - return $query->whereHas('product', function ($query) { - return $query->where('status', ProductStatus::ON_SALE)->where('stock', '>', 0); + return static::withoutGlobalScope('orderById') + ->whereDoesntHave('agentProductItem', function ($query) { + return $query->whereHas('product', function ($query) { + return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE); + }); }) ->where(['agent_id' => $agent_id, 'status' => ProductStatus::ON_SALE])->where('stock', '>', 0) ->select('id', 'sale', 'product_id', 'price', 'original_price', 'title', 'pictures'); } + + public function agentProductItem() + { + return $this->hasOne(AgentProductItem::class); + } } diff --git a/app/Models/AgentProductItem.php b/app/Models/AgentProductItem.php index 24015db..6a6a049 100644 --- a/app/Models/AgentProductItem.php +++ b/app/Models/AgentProductItem.php @@ -15,4 +15,14 @@ class AgentProductItem extends BaseModel parent::__construct($attributes); $this->timestamps = false; } + + public function product() + { + return $this->belongsTo(Product::class); + } + + public function agentProduct() + { + return $this->belongsTo(AgentProduct::class); + } } diff --git a/app/Models/Order.php b/app/Models/Order.php index f4b13cf..d6ccb67 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Common\PayType; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\SoftDeletes; use App\Common\OrderStatus as Status; @@ -28,6 +29,17 @@ class Order extends BaseModel return Status::array()[$this->attributes['status']] ?? '未知'; } + public function getPayTypeAttribute($value) + { + $this->append('pay_type_text'); + return $value; + } + + public function getPayTypeTextAttribute() + { + return PayType::array()[$this->attributes['pay_type']] ?? '未知'; + } + //退款信息 public function getRefundInfoAttribute($value): array { @@ -94,4 +106,15 @@ class Order extends BaseModel { return $this->hasMany(OrderProductItem::class); } + + public function guide() + { + return $this->belongsTo(Guide::class); + } + + //关联的组团云产品 + public function agentCloud() + { + return $this->belongsTo(AgentProduct::class, 'agent_cloud_pid', 'id'); + } } diff --git a/dcat_admin_ide_helper.php b/dcat_admin_ide_helper.php index c44c581..5ab0935 100644 --- a/dcat_admin_ide_helper.php +++ b/dcat_admin_ide_helper.php @@ -11,490 +11,506 @@ namespace Dcat\Admin { use Illuminate\Support\Collection; /** - * @property Grid\Column|Collection id * @property Grid\Column|Collection agent_id - * @property Grid\Column|Collection picture + * @property Grid\Column|Collection created_at + * @property Grid\Column|Collection desc + * @property Grid\Column|Collection id * @property Grid\Column|Collection name + * @property Grid\Column|Collection picture * @property Grid\Column|Collection tag - * @property Grid\Column|Collection desc - * @property Grid\Column|Collection created_at * @property Grid\Column|Collection updated_at - * @property Grid\Column|Collection product_id - * @property Grid\Column|Collection know * @property Grid\Column|Collection content + * @property Grid\Column|Collection know + * @property Grid\Column|Collection product_id + * @property Grid\Column|Collection detail * @property Grid\Column|Collection type * @property Grid\Column|Collection version - * @property Grid\Column|Collection detail * @property Grid\Column|Collection is_enabled - * @property Grid\Column|Collection parent_id - * @property Grid\Column|Collection order + * @property Grid\Column|Collection extension * @property Grid\Column|Collection icon + * @property Grid\Column|Collection order + * @property Grid\Column|Collection parent_id * @property Grid\Column|Collection uri - * @property Grid\Column|Collection extension - * @property Grid\Column|Collection permission_id * @property Grid\Column|Collection menu_id - * @property Grid\Column|Collection slug + * @property Grid\Column|Collection permission_id * @property Grid\Column|Collection http_method * @property Grid\Column|Collection http_path + * @property Grid\Column|Collection slug * @property Grid\Column|Collection role_id * @property Grid\Column|Collection user_id * @property Grid\Column|Collection value - * @property Grid\Column|Collection username - * @property Grid\Column|Collection password * @property Grid\Column|Collection avatar + * @property Grid\Column|Collection password * @property Grid\Column|Collection remember_token - * @property Grid\Column|Collection status + * @property Grid\Column|Collection username + * @property Grid\Column|Collection display * @property Grid\Column|Collection sort + * @property Grid\Column|Collection status * @property Grid\Column|Collection url - * @property Grid\Column|Collection display * @property Grid\Column|Collection about - * @property Grid\Column|Collection reg_protocol * @property Grid\Column|Collection buy_protocol - * @property Grid\Column|Collection supplier_id + * @property Grid\Column|Collection reg_protocol * @property Grid\Column|Collection agent_product_id - * @property Grid\Column|Collection product_ids - * @property Grid\Column|Collection price - * @property Grid\Column|Collection original_price - * @property Grid\Column|Collection sale - * @property Grid\Column|Collection stock - * @property Grid\Column|Collection channel_id + * @property Grid\Column|Collection supplier_id + * @property Grid\Column|Collection agent_cloud_pid * @property Grid\Column|Collection category_id - * @property Grid\Column|Collection guide_id - * @property Grid\Column|Collection verifier - * @property Grid\Column|Collection is_rec - * @property Grid\Column|Collection pictures + * @property Grid\Column|Collection channel_id + * @property Grid\Column|Collection deleted_at * @property Grid\Column|Collection deposit * @property Grid\Column|Collection deposit_timeout * @property Grid\Column|Collection earnest * @property Grid\Column|Collection earnest_timeout - * @property Grid\Column|Collection deleted_at + * @property Grid\Column|Collection guide_id + * @property Grid\Column|Collection is_cloud + * @property Grid\Column|Collection is_rec + * @property Grid\Column|Collection original_price + * @property Grid\Column|Collection pictures + * @property Grid\Column|Collection price + * @property Grid\Column|Collection product_ids + * @property Grid\Column|Collection sale + * @property Grid\Column|Collection stock + * @property Grid\Column|Collection verifier * @property Grid\Column|Collection setting + * @property Grid\Column|Collection address * @property Grid\Column|Collection appid * @property Grid\Column|Collection appsecret - * @property Grid\Column|Collection mchid - * @property Grid\Column|Collection mchkey * @property Grid\Column|Collection company_name - * @property Grid\Column|Collection logo - * @property Grid\Column|Collection address - * @property Grid\Column|Collection license_pic - * @property Grid\Column|Collection director * @property Grid\Column|Collection contact_phone + * @property Grid\Column|Collection director + * @property Grid\Column|Collection license_pic + * @property Grid\Column|Collection logo + * @property Grid\Column|Collection mchid + * @property Grid\Column|Collection mchkey * @property Grid\Column|Collection rate + * @property Grid\Column|Collection agent_product_ids * @property Grid\Column|Collection author * @property Grid\Column|Collection image - * @property Grid\Column|Collection agent_product_ids * @property Grid\Column|Collection pid * @property Grid\Column|Collection template - * @property Grid\Column|Collection start_at * @property Grid\Column|Collection end_at + * @property Grid\Column|Collection start_at + * @property Grid\Column|Collection bidding_id + * @property Grid\Column|Collection bidding_user_id + * @property Grid\Column|Collection bidding_user_type * @property Grid\Column|Collection comment * @property Grid\Column|Collection deadline - * @property Grid\Column|Collection publisher_type + * @property Grid\Column|Collection demand_product_id + * @property Grid\Column|Collection images * @property Grid\Column|Collection publisher_id + * @property Grid\Column|Collection publisher_type * @property Grid\Column|Collection state - * @property Grid\Column|Collection bidding_user_type - * @property Grid\Column|Collection bidding_user_id - * @property Grid\Column|Collection bidding_id - * @property Grid\Column|Collection images * @property Grid\Column|Collection demand_id - * @property Grid\Column|Collection uuid * @property Grid\Column|Collection connection - * @property Grid\Column|Collection queue - * @property Grid\Column|Collection payload * @property Grid\Column|Collection exception * @property Grid\Column|Collection failed_at + * @property Grid\Column|Collection payload + * @property Grid\Column|Collection queue + * @property Grid\Column|Collection uuid * @property Grid\Column|Collection photo - * @property Grid\Column|Collection order_id - * @property Grid\Column|Collection order_no * @property Grid\Column|Collection num - * @property Grid\Column|Collection mobile - * @property Grid\Column|Collection pay_type + * @property Grid\Column|Collection order_id + * @property Grid\Column|Collection agent_cloud_price * @property Grid\Column|Collection coupon_id - * @property Grid\Column|Collection paid_money + * @property Grid\Column|Collection mobile + * @property Grid\Column|Collection order_no * @property Grid\Column|Collection paid_at + * @property Grid\Column|Collection paid_money + * @property Grid\Column|Collection pay_type * @property Grid\Column|Collection refund_info - * @property Grid\Column|Collection verify_code * @property Grid\Column|Collection timeout + * @property Grid\Column|Collection verify_code * @property Grid\Column|Collection email * @property Grid\Column|Collection token * @property Grid\Column|Collection verify_mobile * @property Grid\Column|Collection channels * @property Grid\Column|Collection money * @property Grid\Column|Collection transaction_id - * @property Grid\Column|Collection nickname - * @property Grid\Column|Collection openid - * @property Grid\Column|Collection unionid - * @property Grid\Column|Collection country - * @property Grid\Column|Collection province * @property Grid\Column|Collection city + * @property Grid\Column|Collection country * @property Grid\Column|Collection gender - * @property Grid\Column|Collection language * @property Grid\Column|Collection is_verify + * @property Grid\Column|Collection language + * @property Grid\Column|Collection nickname + * @property Grid\Column|Collection openid + * @property Grid\Column|Collection province + * @property Grid\Column|Collection unionid * - * @method Grid\Column|Collection id(string $label = null) * @method Grid\Column|Collection agent_id(string $label = null) - * @method Grid\Column|Collection picture(string $label = null) + * @method Grid\Column|Collection created_at(string $label = null) + * @method Grid\Column|Collection desc(string $label = null) + * @method Grid\Column|Collection id(string $label = null) * @method Grid\Column|Collection name(string $label = null) + * @method Grid\Column|Collection picture(string $label = null) * @method Grid\Column|Collection tag(string $label = null) - * @method Grid\Column|Collection desc(string $label = null) - * @method Grid\Column|Collection created_at(string $label = null) * @method Grid\Column|Collection updated_at(string $label = null) - * @method Grid\Column|Collection product_id(string $label = null) - * @method Grid\Column|Collection know(string $label = null) * @method Grid\Column|Collection content(string $label = null) + * @method Grid\Column|Collection know(string $label = null) + * @method Grid\Column|Collection product_id(string $label = null) + * @method Grid\Column|Collection detail(string $label = null) * @method Grid\Column|Collection type(string $label = null) * @method Grid\Column|Collection version(string $label = null) - * @method Grid\Column|Collection detail(string $label = null) * @method Grid\Column|Collection is_enabled(string $label = null) - * @method Grid\Column|Collection parent_id(string $label = null) - * @method Grid\Column|Collection order(string $label = null) + * @method Grid\Column|Collection extension(string $label = null) * @method Grid\Column|Collection icon(string $label = null) + * @method Grid\Column|Collection order(string $label = null) + * @method Grid\Column|Collection parent_id(string $label = null) * @method Grid\Column|Collection uri(string $label = null) - * @method Grid\Column|Collection extension(string $label = null) - * @method Grid\Column|Collection permission_id(string $label = null) * @method Grid\Column|Collection menu_id(string $label = null) - * @method Grid\Column|Collection slug(string $label = null) + * @method Grid\Column|Collection permission_id(string $label = null) * @method Grid\Column|Collection http_method(string $label = null) * @method Grid\Column|Collection http_path(string $label = null) + * @method Grid\Column|Collection slug(string $label = null) * @method Grid\Column|Collection role_id(string $label = null) * @method Grid\Column|Collection user_id(string $label = null) * @method Grid\Column|Collection value(string $label = null) - * @method Grid\Column|Collection username(string $label = null) - * @method Grid\Column|Collection password(string $label = null) * @method Grid\Column|Collection avatar(string $label = null) + * @method Grid\Column|Collection password(string $label = null) * @method Grid\Column|Collection remember_token(string $label = null) - * @method Grid\Column|Collection status(string $label = null) + * @method Grid\Column|Collection username(string $label = null) + * @method Grid\Column|Collection display(string $label = null) * @method Grid\Column|Collection sort(string $label = null) + * @method Grid\Column|Collection status(string $label = null) * @method Grid\Column|Collection url(string $label = null) - * @method Grid\Column|Collection display(string $label = null) * @method Grid\Column|Collection about(string $label = null) - * @method Grid\Column|Collection reg_protocol(string $label = null) * @method Grid\Column|Collection buy_protocol(string $label = null) - * @method Grid\Column|Collection supplier_id(string $label = null) + * @method Grid\Column|Collection reg_protocol(string $label = null) * @method Grid\Column|Collection agent_product_id(string $label = null) - * @method Grid\Column|Collection product_ids(string $label = null) - * @method Grid\Column|Collection price(string $label = null) - * @method Grid\Column|Collection original_price(string $label = null) - * @method Grid\Column|Collection sale(string $label = null) - * @method Grid\Column|Collection stock(string $label = null) - * @method Grid\Column|Collection channel_id(string $label = null) + * @method Grid\Column|Collection supplier_id(string $label = null) + * @method Grid\Column|Collection agent_cloud_pid(string $label = null) * @method Grid\Column|Collection category_id(string $label = null) - * @method Grid\Column|Collection guide_id(string $label = null) - * @method Grid\Column|Collection verifier(string $label = null) - * @method Grid\Column|Collection is_rec(string $label = null) - * @method Grid\Column|Collection pictures(string $label = null) + * @method Grid\Column|Collection channel_id(string $label = null) + * @method Grid\Column|Collection deleted_at(string $label = null) * @method Grid\Column|Collection deposit(string $label = null) * @method Grid\Column|Collection deposit_timeout(string $label = null) * @method Grid\Column|Collection earnest(string $label = null) * @method Grid\Column|Collection earnest_timeout(string $label = null) - * @method Grid\Column|Collection deleted_at(string $label = null) + * @method Grid\Column|Collection guide_id(string $label = null) + * @method Grid\Column|Collection is_cloud(string $label = null) + * @method Grid\Column|Collection is_rec(string $label = null) + * @method Grid\Column|Collection original_price(string $label = null) + * @method Grid\Column|Collection pictures(string $label = null) + * @method Grid\Column|Collection price(string $label = null) + * @method Grid\Column|Collection product_ids(string $label = null) + * @method Grid\Column|Collection sale(string $label = null) + * @method Grid\Column|Collection stock(string $label = null) + * @method Grid\Column|Collection verifier(string $label = null) * @method Grid\Column|Collection setting(string $label = null) + * @method Grid\Column|Collection address(string $label = null) * @method Grid\Column|Collection appid(string $label = null) * @method Grid\Column|Collection appsecret(string $label = null) - * @method Grid\Column|Collection mchid(string $label = null) - * @method Grid\Column|Collection mchkey(string $label = null) * @method Grid\Column|Collection company_name(string $label = null) - * @method Grid\Column|Collection logo(string $label = null) - * @method Grid\Column|Collection address(string $label = null) - * @method Grid\Column|Collection license_pic(string $label = null) - * @method Grid\Column|Collection director(string $label = null) * @method Grid\Column|Collection contact_phone(string $label = null) + * @method Grid\Column|Collection director(string $label = null) + * @method Grid\Column|Collection license_pic(string $label = null) + * @method Grid\Column|Collection logo(string $label = null) + * @method Grid\Column|Collection mchid(string $label = null) + * @method Grid\Column|Collection mchkey(string $label = null) * @method Grid\Column|Collection rate(string $label = null) + * @method Grid\Column|Collection agent_product_ids(string $label = null) * @method Grid\Column|Collection author(string $label = null) * @method Grid\Column|Collection image(string $label = null) - * @method Grid\Column|Collection agent_product_ids(string $label = null) * @method Grid\Column|Collection pid(string $label = null) * @method Grid\Column|Collection template(string $label = null) - * @method Grid\Column|Collection start_at(string $label = null) * @method Grid\Column|Collection end_at(string $label = null) + * @method Grid\Column|Collection start_at(string $label = null) + * @method Grid\Column|Collection bidding_id(string $label = null) + * @method Grid\Column|Collection bidding_user_id(string $label = null) + * @method Grid\Column|Collection bidding_user_type(string $label = null) * @method Grid\Column|Collection comment(string $label = null) * @method Grid\Column|Collection deadline(string $label = null) - * @method Grid\Column|Collection publisher_type(string $label = null) + * @method Grid\Column|Collection demand_product_id(string $label = null) + * @method Grid\Column|Collection images(string $label = null) * @method Grid\Column|Collection publisher_id(string $label = null) + * @method Grid\Column|Collection publisher_type(string $label = null) * @method Grid\Column|Collection state(string $label = null) - * @method Grid\Column|Collection bidding_user_type(string $label = null) - * @method Grid\Column|Collection bidding_user_id(string $label = null) - * @method Grid\Column|Collection bidding_id(string $label = null) - * @method Grid\Column|Collection images(string $label = null) * @method Grid\Column|Collection demand_id(string $label = null) - * @method Grid\Column|Collection uuid(string $label = null) * @method Grid\Column|Collection connection(string $label = null) - * @method Grid\Column|Collection queue(string $label = null) - * @method Grid\Column|Collection payload(string $label = null) * @method Grid\Column|Collection exception(string $label = null) * @method Grid\Column|Collection failed_at(string $label = null) + * @method Grid\Column|Collection payload(string $label = null) + * @method Grid\Column|Collection queue(string $label = null) + * @method Grid\Column|Collection uuid(string $label = null) * @method Grid\Column|Collection photo(string $label = null) - * @method Grid\Column|Collection order_id(string $label = null) - * @method Grid\Column|Collection order_no(string $label = null) * @method Grid\Column|Collection num(string $label = null) - * @method Grid\Column|Collection mobile(string $label = null) - * @method Grid\Column|Collection pay_type(string $label = null) + * @method Grid\Column|Collection order_id(string $label = null) + * @method Grid\Column|Collection agent_cloud_price(string $label = null) * @method Grid\Column|Collection coupon_id(string $label = null) - * @method Grid\Column|Collection paid_money(string $label = null) + * @method Grid\Column|Collection mobile(string $label = null) + * @method Grid\Column|Collection order_no(string $label = null) * @method Grid\Column|Collection paid_at(string $label = null) + * @method Grid\Column|Collection paid_money(string $label = null) + * @method Grid\Column|Collection pay_type(string $label = null) * @method Grid\Column|Collection refund_info(string $label = null) - * @method Grid\Column|Collection verify_code(string $label = null) * @method Grid\Column|Collection timeout(string $label = null) + * @method Grid\Column|Collection verify_code(string $label = null) * @method Grid\Column|Collection email(string $label = null) * @method Grid\Column|Collection token(string $label = null) * @method Grid\Column|Collection verify_mobile(string $label = null) * @method Grid\Column|Collection channels(string $label = null) * @method Grid\Column|Collection money(string $label = null) * @method Grid\Column|Collection transaction_id(string $label = null) - * @method Grid\Column|Collection nickname(string $label = null) - * @method Grid\Column|Collection openid(string $label = null) - * @method Grid\Column|Collection unionid(string $label = null) - * @method Grid\Column|Collection country(string $label = null) - * @method Grid\Column|Collection province(string $label = null) * @method Grid\Column|Collection city(string $label = null) + * @method Grid\Column|Collection country(string $label = null) * @method Grid\Column|Collection gender(string $label = null) - * @method Grid\Column|Collection language(string $label = null) * @method Grid\Column|Collection is_verify(string $label = null) + * @method Grid\Column|Collection language(string $label = null) + * @method Grid\Column|Collection nickname(string $label = null) + * @method Grid\Column|Collection openid(string $label = null) + * @method Grid\Column|Collection province(string $label = null) + * @method Grid\Column|Collection unionid(string $label = null) */ class Grid {} class MiniGrid extends Grid {} /** - * @property Show\Field|Collection id * @property Show\Field|Collection agent_id - * @property Show\Field|Collection picture + * @property Show\Field|Collection created_at + * @property Show\Field|Collection desc + * @property Show\Field|Collection id * @property Show\Field|Collection name + * @property Show\Field|Collection picture * @property Show\Field|Collection tag - * @property Show\Field|Collection desc - * @property Show\Field|Collection created_at * @property Show\Field|Collection updated_at - * @property Show\Field|Collection product_id - * @property Show\Field|Collection know * @property Show\Field|Collection content + * @property Show\Field|Collection know + * @property Show\Field|Collection product_id + * @property Show\Field|Collection detail * @property Show\Field|Collection type * @property Show\Field|Collection version - * @property Show\Field|Collection detail * @property Show\Field|Collection is_enabled - * @property Show\Field|Collection parent_id - * @property Show\Field|Collection order + * @property Show\Field|Collection extension * @property Show\Field|Collection icon + * @property Show\Field|Collection order + * @property Show\Field|Collection parent_id * @property Show\Field|Collection uri - * @property Show\Field|Collection extension - * @property Show\Field|Collection permission_id * @property Show\Field|Collection menu_id - * @property Show\Field|Collection slug + * @property Show\Field|Collection permission_id * @property Show\Field|Collection http_method * @property Show\Field|Collection http_path + * @property Show\Field|Collection slug * @property Show\Field|Collection role_id * @property Show\Field|Collection user_id * @property Show\Field|Collection value - * @property Show\Field|Collection username - * @property Show\Field|Collection password * @property Show\Field|Collection avatar + * @property Show\Field|Collection password * @property Show\Field|Collection remember_token - * @property Show\Field|Collection status + * @property Show\Field|Collection username + * @property Show\Field|Collection display * @property Show\Field|Collection sort + * @property Show\Field|Collection status * @property Show\Field|Collection url - * @property Show\Field|Collection display * @property Show\Field|Collection about - * @property Show\Field|Collection reg_protocol * @property Show\Field|Collection buy_protocol - * @property Show\Field|Collection supplier_id + * @property Show\Field|Collection reg_protocol * @property Show\Field|Collection agent_product_id - * @property Show\Field|Collection product_ids - * @property Show\Field|Collection price - * @property Show\Field|Collection original_price - * @property Show\Field|Collection sale - * @property Show\Field|Collection stock - * @property Show\Field|Collection channel_id + * @property Show\Field|Collection supplier_id + * @property Show\Field|Collection agent_cloud_pid * @property Show\Field|Collection category_id - * @property Show\Field|Collection guide_id - * @property Show\Field|Collection verifier - * @property Show\Field|Collection is_rec - * @property Show\Field|Collection pictures + * @property Show\Field|Collection channel_id + * @property Show\Field|Collection deleted_at * @property Show\Field|Collection deposit * @property Show\Field|Collection deposit_timeout * @property Show\Field|Collection earnest * @property Show\Field|Collection earnest_timeout - * @property Show\Field|Collection deleted_at + * @property Show\Field|Collection guide_id + * @property Show\Field|Collection is_cloud + * @property Show\Field|Collection is_rec + * @property Show\Field|Collection original_price + * @property Show\Field|Collection pictures + * @property Show\Field|Collection price + * @property Show\Field|Collection product_ids + * @property Show\Field|Collection sale + * @property Show\Field|Collection stock + * @property Show\Field|Collection verifier * @property Show\Field|Collection setting + * @property Show\Field|Collection address * @property Show\Field|Collection appid * @property Show\Field|Collection appsecret - * @property Show\Field|Collection mchid - * @property Show\Field|Collection mchkey * @property Show\Field|Collection company_name - * @property Show\Field|Collection logo - * @property Show\Field|Collection address - * @property Show\Field|Collection license_pic - * @property Show\Field|Collection director * @property Show\Field|Collection contact_phone + * @property Show\Field|Collection director + * @property Show\Field|Collection license_pic + * @property Show\Field|Collection logo + * @property Show\Field|Collection mchid + * @property Show\Field|Collection mchkey * @property Show\Field|Collection rate + * @property Show\Field|Collection agent_product_ids * @property Show\Field|Collection author * @property Show\Field|Collection image - * @property Show\Field|Collection agent_product_ids * @property Show\Field|Collection pid * @property Show\Field|Collection template - * @property Show\Field|Collection start_at * @property Show\Field|Collection end_at + * @property Show\Field|Collection start_at + * @property Show\Field|Collection bidding_id + * @property Show\Field|Collection bidding_user_id + * @property Show\Field|Collection bidding_user_type * @property Show\Field|Collection comment * @property Show\Field|Collection deadline - * @property Show\Field|Collection publisher_type + * @property Show\Field|Collection demand_product_id + * @property Show\Field|Collection images * @property Show\Field|Collection publisher_id + * @property Show\Field|Collection publisher_type * @property Show\Field|Collection state - * @property Show\Field|Collection bidding_user_type - * @property Show\Field|Collection bidding_user_id - * @property Show\Field|Collection bidding_id - * @property Show\Field|Collection images * @property Show\Field|Collection demand_id - * @property Show\Field|Collection uuid * @property Show\Field|Collection connection - * @property Show\Field|Collection queue - * @property Show\Field|Collection payload * @property Show\Field|Collection exception * @property Show\Field|Collection failed_at + * @property Show\Field|Collection payload + * @property Show\Field|Collection queue + * @property Show\Field|Collection uuid * @property Show\Field|Collection photo - * @property Show\Field|Collection order_id - * @property Show\Field|Collection order_no * @property Show\Field|Collection num - * @property Show\Field|Collection mobile - * @property Show\Field|Collection pay_type + * @property Show\Field|Collection order_id + * @property Show\Field|Collection agent_cloud_price * @property Show\Field|Collection coupon_id - * @property Show\Field|Collection paid_money + * @property Show\Field|Collection mobile + * @property Show\Field|Collection order_no * @property Show\Field|Collection paid_at + * @property Show\Field|Collection paid_money + * @property Show\Field|Collection pay_type * @property Show\Field|Collection refund_info - * @property Show\Field|Collection verify_code * @property Show\Field|Collection timeout + * @property Show\Field|Collection verify_code * @property Show\Field|Collection email * @property Show\Field|Collection token * @property Show\Field|Collection verify_mobile * @property Show\Field|Collection channels * @property Show\Field|Collection money * @property Show\Field|Collection transaction_id - * @property Show\Field|Collection nickname - * @property Show\Field|Collection openid - * @property Show\Field|Collection unionid - * @property Show\Field|Collection country - * @property Show\Field|Collection province * @property Show\Field|Collection city + * @property Show\Field|Collection country * @property Show\Field|Collection gender - * @property Show\Field|Collection language * @property Show\Field|Collection is_verify + * @property Show\Field|Collection language + * @property Show\Field|Collection nickname + * @property Show\Field|Collection openid + * @property Show\Field|Collection province + * @property Show\Field|Collection unionid * - * @method Show\Field|Collection id(string $label = null) * @method Show\Field|Collection agent_id(string $label = null) - * @method Show\Field|Collection picture(string $label = null) + * @method Show\Field|Collection created_at(string $label = null) + * @method Show\Field|Collection desc(string $label = null) + * @method Show\Field|Collection id(string $label = null) * @method Show\Field|Collection name(string $label = null) + * @method Show\Field|Collection picture(string $label = null) * @method Show\Field|Collection tag(string $label = null) - * @method Show\Field|Collection desc(string $label = null) - * @method Show\Field|Collection created_at(string $label = null) * @method Show\Field|Collection updated_at(string $label = null) - * @method Show\Field|Collection product_id(string $label = null) - * @method Show\Field|Collection know(string $label = null) * @method Show\Field|Collection content(string $label = null) + * @method Show\Field|Collection know(string $label = null) + * @method Show\Field|Collection product_id(string $label = null) + * @method Show\Field|Collection detail(string $label = null) * @method Show\Field|Collection type(string $label = null) * @method Show\Field|Collection version(string $label = null) - * @method Show\Field|Collection detail(string $label = null) * @method Show\Field|Collection is_enabled(string $label = null) - * @method Show\Field|Collection parent_id(string $label = null) - * @method Show\Field|Collection order(string $label = null) + * @method Show\Field|Collection extension(string $label = null) * @method Show\Field|Collection icon(string $label = null) + * @method Show\Field|Collection order(string $label = null) + * @method Show\Field|Collection parent_id(string $label = null) * @method Show\Field|Collection uri(string $label = null) - * @method Show\Field|Collection extension(string $label = null) - * @method Show\Field|Collection permission_id(string $label = null) * @method Show\Field|Collection menu_id(string $label = null) - * @method Show\Field|Collection slug(string $label = null) + * @method Show\Field|Collection permission_id(string $label = null) * @method Show\Field|Collection http_method(string $label = null) * @method Show\Field|Collection http_path(string $label = null) + * @method Show\Field|Collection slug(string $label = null) * @method Show\Field|Collection role_id(string $label = null) * @method Show\Field|Collection user_id(string $label = null) * @method Show\Field|Collection value(string $label = null) - * @method Show\Field|Collection username(string $label = null) - * @method Show\Field|Collection password(string $label = null) * @method Show\Field|Collection avatar(string $label = null) + * @method Show\Field|Collection password(string $label = null) * @method Show\Field|Collection remember_token(string $label = null) - * @method Show\Field|Collection status(string $label = null) + * @method Show\Field|Collection username(string $label = null) + * @method Show\Field|Collection display(string $label = null) * @method Show\Field|Collection sort(string $label = null) + * @method Show\Field|Collection status(string $label = null) * @method Show\Field|Collection url(string $label = null) - * @method Show\Field|Collection display(string $label = null) * @method Show\Field|Collection about(string $label = null) - * @method Show\Field|Collection reg_protocol(string $label = null) * @method Show\Field|Collection buy_protocol(string $label = null) - * @method Show\Field|Collection supplier_id(string $label = null) + * @method Show\Field|Collection reg_protocol(string $label = null) * @method Show\Field|Collection agent_product_id(string $label = null) - * @method Show\Field|Collection product_ids(string $label = null) - * @method Show\Field|Collection price(string $label = null) - * @method Show\Field|Collection original_price(string $label = null) - * @method Show\Field|Collection sale(string $label = null) - * @method Show\Field|Collection stock(string $label = null) - * @method Show\Field|Collection channel_id(string $label = null) + * @method Show\Field|Collection supplier_id(string $label = null) + * @method Show\Field|Collection agent_cloud_pid(string $label = null) * @method Show\Field|Collection category_id(string $label = null) - * @method Show\Field|Collection guide_id(string $label = null) - * @method Show\Field|Collection verifier(string $label = null) - * @method Show\Field|Collection is_rec(string $label = null) - * @method Show\Field|Collection pictures(string $label = null) + * @method Show\Field|Collection channel_id(string $label = null) + * @method Show\Field|Collection deleted_at(string $label = null) * @method Show\Field|Collection deposit(string $label = null) * @method Show\Field|Collection deposit_timeout(string $label = null) * @method Show\Field|Collection earnest(string $label = null) * @method Show\Field|Collection earnest_timeout(string $label = null) - * @method Show\Field|Collection deleted_at(string $label = null) + * @method Show\Field|Collection guide_id(string $label = null) + * @method Show\Field|Collection is_cloud(string $label = null) + * @method Show\Field|Collection is_rec(string $label = null) + * @method Show\Field|Collection original_price(string $label = null) + * @method Show\Field|Collection pictures(string $label = null) + * @method Show\Field|Collection price(string $label = null) + * @method Show\Field|Collection product_ids(string $label = null) + * @method Show\Field|Collection sale(string $label = null) + * @method Show\Field|Collection stock(string $label = null) + * @method Show\Field|Collection verifier(string $label = null) * @method Show\Field|Collection setting(string $label = null) + * @method Show\Field|Collection address(string $label = null) * @method Show\Field|Collection appid(string $label = null) * @method Show\Field|Collection appsecret(string $label = null) - * @method Show\Field|Collection mchid(string $label = null) - * @method Show\Field|Collection mchkey(string $label = null) * @method Show\Field|Collection company_name(string $label = null) - * @method Show\Field|Collection logo(string $label = null) - * @method Show\Field|Collection address(string $label = null) - * @method Show\Field|Collection license_pic(string $label = null) - * @method Show\Field|Collection director(string $label = null) * @method Show\Field|Collection contact_phone(string $label = null) + * @method Show\Field|Collection director(string $label = null) + * @method Show\Field|Collection license_pic(string $label = null) + * @method Show\Field|Collection logo(string $label = null) + * @method Show\Field|Collection mchid(string $label = null) + * @method Show\Field|Collection mchkey(string $label = null) * @method Show\Field|Collection rate(string $label = null) + * @method Show\Field|Collection agent_product_ids(string $label = null) * @method Show\Field|Collection author(string $label = null) * @method Show\Field|Collection image(string $label = null) - * @method Show\Field|Collection agent_product_ids(string $label = null) * @method Show\Field|Collection pid(string $label = null) * @method Show\Field|Collection template(string $label = null) - * @method Show\Field|Collection start_at(string $label = null) * @method Show\Field|Collection end_at(string $label = null) + * @method Show\Field|Collection start_at(string $label = null) + * @method Show\Field|Collection bidding_id(string $label = null) + * @method Show\Field|Collection bidding_user_id(string $label = null) + * @method Show\Field|Collection bidding_user_type(string $label = null) * @method Show\Field|Collection comment(string $label = null) * @method Show\Field|Collection deadline(string $label = null) - * @method Show\Field|Collection publisher_type(string $label = null) + * @method Show\Field|Collection demand_product_id(string $label = null) + * @method Show\Field|Collection images(string $label = null) * @method Show\Field|Collection publisher_id(string $label = null) + * @method Show\Field|Collection publisher_type(string $label = null) * @method Show\Field|Collection state(string $label = null) - * @method Show\Field|Collection bidding_user_type(string $label = null) - * @method Show\Field|Collection bidding_user_id(string $label = null) - * @method Show\Field|Collection bidding_id(string $label = null) - * @method Show\Field|Collection images(string $label = null) * @method Show\Field|Collection demand_id(string $label = null) - * @method Show\Field|Collection uuid(string $label = null) * @method Show\Field|Collection connection(string $label = null) - * @method Show\Field|Collection queue(string $label = null) - * @method Show\Field|Collection payload(string $label = null) * @method Show\Field|Collection exception(string $label = null) * @method Show\Field|Collection failed_at(string $label = null) + * @method Show\Field|Collection payload(string $label = null) + * @method Show\Field|Collection queue(string $label = null) + * @method Show\Field|Collection uuid(string $label = null) * @method Show\Field|Collection photo(string $label = null) - * @method Show\Field|Collection order_id(string $label = null) - * @method Show\Field|Collection order_no(string $label = null) * @method Show\Field|Collection num(string $label = null) - * @method Show\Field|Collection mobile(string $label = null) - * @method Show\Field|Collection pay_type(string $label = null) + * @method Show\Field|Collection order_id(string $label = null) + * @method Show\Field|Collection agent_cloud_price(string $label = null) * @method Show\Field|Collection coupon_id(string $label = null) - * @method Show\Field|Collection paid_money(string $label = null) + * @method Show\Field|Collection mobile(string $label = null) + * @method Show\Field|Collection order_no(string $label = null) * @method Show\Field|Collection paid_at(string $label = null) + * @method Show\Field|Collection paid_money(string $label = null) + * @method Show\Field|Collection pay_type(string $label = null) * @method Show\Field|Collection refund_info(string $label = null) - * @method Show\Field|Collection verify_code(string $label = null) * @method Show\Field|Collection timeout(string $label = null) + * @method Show\Field|Collection verify_code(string $label = null) * @method Show\Field|Collection email(string $label = null) * @method Show\Field|Collection token(string $label = null) * @method Show\Field|Collection verify_mobile(string $label = null) * @method Show\Field|Collection channels(string $label = null) * @method Show\Field|Collection money(string $label = null) * @method Show\Field|Collection transaction_id(string $label = null) - * @method Show\Field|Collection nickname(string $label = null) - * @method Show\Field|Collection openid(string $label = null) - * @method Show\Field|Collection unionid(string $label = null) - * @method Show\Field|Collection country(string $label = null) - * @method Show\Field|Collection province(string $label = null) * @method Show\Field|Collection city(string $label = null) + * @method Show\Field|Collection country(string $label = null) * @method Show\Field|Collection gender(string $label = null) - * @method Show\Field|Collection language(string $label = null) * @method Show\Field|Collection is_verify(string $label = null) + * @method Show\Field|Collection language(string $label = null) + * @method Show\Field|Collection nickname(string $label = null) + * @method Show\Field|Collection openid(string $label = null) + * @method Show\Field|Collection province(string $label = null) + * @method Show\Field|Collection unionid(string $label = null) */ class Show {} diff --git a/resources/lang/zh_CN/order.php b/resources/lang/zh_CN/order.php index 787770a..fac16ba 100644 --- a/resources/lang/zh_CN/order.php +++ b/resources/lang/zh_CN/order.php @@ -23,6 +23,8 @@ return [ 'status' => '订单状态', 'title' => '产品名称', 'user_id' => '用户ID', + 'agent_cloud_pid' => '组团云产品ID', + 'agent_cloud_price' => '组团云产品售价', 'created_at' => '下单时间', ], 'options' => [