Browse Source

增加OrderProductItem

develop
李可松 4 years ago
parent
commit
2b846e6a52
  1. 17
      MySQL_change.sql
  2. 24
      app/AdminSupplier/Controllers/OrderController.php
  3. 24
      app/Http/Controllers/Api/OrderController.php
  4. 6
      app/Http/Controllers/Api/TestController.php
  5. 5
      app/Models/Order.php
  6. 18
      app/Models/OrderProductItem.php

17
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;

24
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) {

24
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();

6
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']);
}
}

5
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);
}
}

18
app/Models/OrderProductItem.php

@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class OrderProductItem extends BaseModel
{
use HasFactory;
protected $guarded = ['id']; //不允许批量赋值的字段
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->timestamps = false;
}
}
Loading…
Cancel
Save