From 2b846e6a52d723c71b9a12345d9157b4235363ba Mon Sep 17 00:00:00 2001 From: liapples Date: Wed, 1 Sep 2021 00:38:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0OrderProductItem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MySQL_change.sql | 17 ++++++++++++- .../Controllers/OrderController.php | 24 ++++++++----------- app/Http/Controllers/Api/OrderController.php | 24 ++++++++++++++++++- app/Http/Controllers/Api/TestController.php | 6 ++--- app/Models/Order.php | 5 ++++ app/Models/OrderProductItem.php | 18 ++++++++++++++ 6 files changed, 74 insertions(+), 20 deletions(-) create mode 100644 app/Models/OrderProductItem.php diff --git a/MySQL_change.sql b/MySQL_change.sql index 887a3de..0175fdf 100644 --- a/MySQL_change.sql +++ b/MySQL_change.sql @@ -202,7 +202,6 @@ COMMENT='代理商设置配置' COLLATE='utf8_general_ci' ENGINE=InnoDB; -################################################################# # 15:19 2021/8/27 ALTER TABLE `messages` ADD COLUMN `author` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '作者' COLLATE 'utf8_general_ci' AFTER `content`; @@ -221,3 +220,19 @@ ALTER TABLE `agent_products` # 10:58 2021/8/30 ALTER TABLE `orders` ADD COLUMN `timeout` TIMESTAMP NULL DEFAULT NULL COMMENT '订单超时时间,超过这个时间,订单将变为“已取消”' AFTER `verify_code`; + +################################################################# +# 23:53 ‎2021/‎08/‎31 +CREATE TABLE `order_product_items` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `order_id` INT(11) NOT NULL COMMENT '订单ID', + `agent_id` INT(11) NOT NULL COMMENT '代理商ID', + `agent_product_id` INT(11) NOT NULL COMMENT '代理商产品ID', + `supplier_id` INT(11) NOT NULL COMMENT '供应商ID', + `product_id` INT(11) NOT NULL COMMENT '供应商产品ID', + PRIMARY KEY (`id`) USING BTREE, + INDEX `order_id_supplier_id` (`order_id`, `supplier_id`) USING BTREE +) +COMMENT='订单对应产品表' +COLLATE='utf8_general_ci' +ENGINE=InnoDB; diff --git a/app/AdminSupplier/Controllers/OrderController.php b/app/AdminSupplier/Controllers/OrderController.php index 46d607a..611a1b6 100644 --- a/app/AdminSupplier/Controllers/OrderController.php +++ b/app/AdminSupplier/Controllers/OrderController.php @@ -33,7 +33,7 @@ class OrderController extends AdminController $grid->disableEditButton(); $grid->model()->where(function ($query) { - return $query->whereHas('agentProductItem', function($query) { + return $query->whereHas('orderProductItem', function($query) { return $query->where('supplier_id', Admin::user()->id); }); }); @@ -90,16 +90,15 @@ class OrderController extends AdminController */ protected function detail($id) { - return Show::make($id, new Order(['agent:id,name', 'agentProductItem']), function (Show $show) { + return Show::make($id, new Order(['agent:id,name', 'orderProductItem']), function (Show $show) { $show->disableDeleteButton(); $show->disableQuickEdit(); $show->disableEditButton(); - //不允许查看非自己的数据 - $item_supplier_id = $show->model()->agentProductItem[0]->supplier_id ?? 0; - if ($item_supplier_id != Admin::user()->id) { - Admin::exit('数据不存在'); - } + //不允许查看非自己的数据 TODO 待筛选 + $show->model()->whereHas('orderProductItem', function ($query) { + return $query->where('supplier_id', Admin::user()->id); + }); $show->field('id'); $show->field('agent.name'); @@ -129,18 +128,15 @@ class OrderController extends AdminController */ protected function form() { - return Form::make(new Order('agentProductItem'), function (Form $form) { - //不允许查看非自己的数据 - $item_supplier_id = $form->model()->agentProductItem[0]->supplier_id ?? 0; - if ($form->isEditing() && $item_supplier_id != Admin::user()->id) { - return $form->response()->error('数据不存在'); - } - + return Form::make(new Order('orderProductItem'), function (Form $form) { $form->disableDeleteButton(); $form->disableFooter(); $form->disableHeader(); $form->display('id')->width(2); + + //订单不允许新增或编辑 + return $form->response()->error('操作禁止'); })->saving(function (Form $form) { return $form->response()->error('操作禁止'); })->deleting(function (Form $form) { diff --git a/app/Http/Controllers/Api/OrderController.php b/app/Http/Controllers/Api/OrderController.php index d4191ef..b3e9cc8 100644 --- a/app/Http/Controllers/Api/OrderController.php +++ b/app/Http/Controllers/Api/OrderController.php @@ -8,6 +8,8 @@ use App\Models\Agent; use App\Models\AgentProduct; use App\Models\AgentSetting; use App\Models\Coupon; +use App\Models\OrderProductItem; +use App\Models\Product; use App\Models\User; use App\Models\Order; use EasyWeChat\Factory; @@ -91,7 +93,9 @@ class OrderController extends Controller } //超时订单设置为已取消 TODO 测试阶段暂时注释 - Order::query()->whereIn('id', $timeout_ids)->update(['status' => Status::CANCEL]); + if ($timeout_ids) { + Order::query()->whereIn('id', $timeout_ids)->update(['status' => Status::CANCEL]); + } return $this->success($order_list); } @@ -132,6 +136,7 @@ class OrderController extends Controller if (!$ap || !$ap->product) { $this->error('产品不存在或已下架'); } + //TODO 供应商产品需要判断组合产品库存 if ($ap->stock < $formData['num'] || $ap->product->stock < $formData['num']) { $this->error('对不起,库存不足'); } @@ -184,6 +189,23 @@ class OrderController extends Controller 'timeout' => $timeout, ]); + //存入订单产品表 + $product_ids = explode(',', $ap->product_ids); + $supplier_product_info = Product::whereIn('id', $product_ids) + ->orderBy('id')->get(['id AS product_id', 'supplier_id'])->toArray(); + + $order_id = $order->id; + $agent_id = $this->agent_id; + $agent_product_id = $ap->id; + + $supplier_product_info = array_map(function ($v) use($order_id, $agent_id, $agent_product_id) { + $v['order_id'] = $order_id; + $v['agent_id'] = $agent_id; + $v['agent_product_id'] = $agent_product_id; + return $v; + }, $supplier_product_info); + OrderProductItem::insert($supplier_product_info); + DB::commit(); } catch (\Exception $e) { DB::rollBack(); diff --git a/app/Http/Controllers/Api/TestController.php b/app/Http/Controllers/Api/TestController.php index 337df8d..f2e17b1 100644 --- a/app/Http/Controllers/Api/TestController.php +++ b/app/Http/Controllers/Api/TestController.php @@ -2,9 +2,7 @@ namespace App\Http\Controllers\Api; -use App\Models\Agent; -use App\Models\AgentSetting; -use Illuminate\Support\Facades\DB; +use App\Models\Product; /** * 仅用于测试 @@ -16,6 +14,6 @@ class TestController public function index() { //test - return AgentSetting::val(11, 'order_timeout') ?? 188; + return Product::query()->whereIn('id', explode(',', '1,2,3,4,5,6'))->get(['id AS product_id', 'supplier_id']); } } diff --git a/app/Models/Order.php b/app/Models/Order.php index 6d62275..f4b13cf 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -89,4 +89,9 @@ class Order extends BaseModel { return $this->hasMany(AgentProductItem::class, 'agent_product_id', 'agent_product_id'); } + + public function orderProductItem() + { + return $this->hasMany(OrderProductItem::class); + } } diff --git a/app/Models/OrderProductItem.php b/app/Models/OrderProductItem.php new file mode 100644 index 0000000..758504f --- /dev/null +++ b/app/Models/OrderProductItem.php @@ -0,0 +1,18 @@ +timestamps = false; + } +}