Переглянути джерело

工单 model factory seeder controller service 生成

ajun 4 роки тому
батько
коміт
2f7b2b92d1

+ 9 - 0
app/Http/Controllers/WorkOrderChildTypeController.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace App\Http\Controllers;
+
+
+class WorkOrderChildTypeController extends Controller
+{
+
+}

+ 121 - 0
app/Http/Controllers/WorkOrderController.php

@@ -0,0 +1,121 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Filters\WorkOrderFilters;
+use App\Order;
+use App\Services\OrderService;
+use App\Services\WorkOrderService;
+use App\WorkOrder;
+use App\WorkOrderChildType;
+use App\WorkOrderType;
+use Carbon\Carbon;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Gate;
+
+class WorkOrderController extends Controller
+{
+    public function index(Request $request, WorkOrderFilters $filters)
+    {
+        if(!Gate::allows('订单管理-工单处理-查询'))return redirect('/');
+        $workOrders = WorkOrder::query()->filter($filters)->with('type', 'childType', 'creator', 'order.packages','reviewer')->orderByDesc('created_at','grad','status')->paginate($request['paginate'] ?? 50);
+        return view('order.workOrder.index', compact('workOrders'));
+    }
+
+    public function create()
+    {
+        if(!Gate::allows('订单管理-工单处理-创建'))return redirect('/');
+        $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
+        $grads = WorkOrder::$enums['grad'];
+        array_shift($grads);
+        return view('order.workOrder.create', compact('workOrderTypes', 'grads'));
+    }
+
+
+    public function store(Request $request, WorkOrderService $service)
+    {
+        if(!Gate::allows('订单管理-工单处理-创建'))return redirect('/');
+        $result = $service->createWordOrder($request->all());
+        $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
+        $grads = WorkOrder::$enums['grad'];
+        array_shift($grads);
+        return view('order.workOrder.create', compact('workOrderTypes', 'result', 'grads'));
+    }
+
+    // 创建
+    public function storeApi(Request $request): array
+    {
+        if(!Gate::allows('订单管理-订单-生成工单'))return ['success' => false,'message' => '没有对应的创建权限'];
+        $order_nos = $request['order_nos'];
+
+        app(OrderService::class)->syncOrderInfoByWmsOrderNos($order_nos);
+
+        $orders = Order::query()->whereIn('code', $order_nos)->get();
+
+        $work_orders = WorkOrder::query()->with('order')->where('outer_table_name', 'orders')->whereIn('outer_table_id', $orders->map(function($item){
+            return $item['id'];
+        }))->get();
+        $exists_nos = $work_orders->map(function ($item) {
+            return $item->order->code;
+        });
+        if (count($exists_nos) > 0)
+            return ['success' => false, 'message' => join(',',$exists_nos->toArray()) . '  已有对应的工单'];
+
+        $inner_params = [];
+
+        $creator_id = Auth::user()['id'];
+
+        $work_order_type = WorkOrderType::query()->firstOrCreate(['name'=> '订单']);
+
+        $work_order_child_type= WorkOrderChildType::query()->firstOrCreate(['name' => '拦截','work_order_type_id' => $work_order_type['id'],'table_name' => 'orders']);
+        $datetime = Carbon::now();
+        foreach ($orders as $order) {
+            $inner_params[] = [
+                'work_order_type_id' => $work_order_type['id'],
+                'work_order_child_type_id' => $work_order_child_type['id'],
+                'outer_table_name' => $work_order_child_type['table_name'],
+                'outer_table_id' => $order['id'],
+                'remark' => "拦截订单:{$order['code']}",
+                'creator_id' => $creator_id,
+                'grad' => $request['grad'] ?? 1,
+                'status' => 1,
+                'updated_at' => $datetime,
+                'created_at' => $datetime,
+            ];
+        }
+        WorkOrder::query()->insert($inner_params);
+        return ['success' => true];
+    }
+
+    // 审核
+    public function reviewApi(Request $request, WorkOrderService $service): array
+    {
+        if(!Gate::allows('订单管理-工单处理-编辑'))return ['success' => false,'message' => '没有对应的编辑权限'];
+        $workOrder = WorkOrder::query()->find($request['id']);
+        return $service->reviewWordOrder($workOrder);
+    }
+
+    public function show(WorkOrder $workOrder)
+    {
+        //
+    }
+
+
+    public function edit(WorkOrder $workOrder)
+    {
+        //
+    }
+
+
+    public function update(Request $request, WorkOrder $workOrder)
+    {
+        //
+    }
+
+
+    public function destroy(WorkOrder $workOrder)
+    {
+        //
+    }
+}

+ 9 - 0
app/Http/Controllers/WorkOrderTypeController.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace App\Http\Controllers;
+
+
+class WorkOrderTypeController extends Controller
+{
+
+}

+ 13 - 0
app/Services/WorkOrderChildTypeService.php

@@ -0,0 +1,13 @@
+<?php 
+
+namespace App\Services;
+
+use App\Traits\ServiceAppAop;
+use App\WorkOrderChildType;
+
+class WorkOrderChildTypeService
+{
+    use ServiceAppAop;
+    protected $modelClass=WorkOrderChildType::class;
+
+}

+ 38 - 0
app/Services/WorkOrderService.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Services;
+
+use App\Traits\ServiceAppAop;
+use App\WorkOrder;
+use Illuminate\Support\Carbon;
+use Illuminate\Support\Facades\Auth;
+
+class WorkOrderService
+{
+    use ServiceAppAop;
+    protected $modelClass=WorkOrder::class;
+
+    // 创建工单
+    public function createWordOrder($params): array
+    {
+        $params['status'] = 1;
+        $params['creator_id'] = Auth::user()['id'];
+        $params['grad']  ?? $params['grad'] = 1;
+        $workOrder = WorkOrder::query()->create($params);
+        return ['success' => false,'data' => $workOrder];
+    }
+
+    // 审核工单
+    public function reviewWordOrder($wordOrder): array
+    {
+        $wordOrder->update([
+            'reviewer_id' =>Auth::user()['id'],
+            'review_at' => Carbon::now(),
+            'status' => 2,
+        ]);
+        $wordOrder->loadMissing('order');
+        return ['success' => true,'data' => $wordOrder];
+    }
+
+
+}

+ 14 - 0
app/Services/WorkOrderTypeService.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Services;
+
+use App\Traits\ServiceAppAop;
+use App\WorkOrderType;
+
+class WorkOrderTypeService
+{
+    use ServiceAppAop;
+    protected $modelClass=WorkOrderType::class;
+
+
+}

+ 111 - 0
app/WorkOrder.php

@@ -0,0 +1,111 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+
+use App\Traits\ModelLogChanging;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class WorkOrder extends Model
+{
+    use ModelLogChanging;
+    use ModelTimeFormat;
+    use SoftDeletes;
+
+    // 工单 信息
+    protected $fillable = ['status', 'creator_id', 'reviewer_id', 'work_order_type_id', 'work_order_child_type_id', 'grad', 'remark', 'outer_table_name', 'outer_table_id', 'review_at'];
+
+    static public $enums = [
+        'status' => [
+            '' => 0,
+            '待审核' => 1,
+            '已处理' => 2,
+        ],
+        'grad' => [
+            '' => 0,
+            '一般' => 1,
+            '重要' => 2,
+            '紧急' => 3,
+            '重要且紧急' => 4,
+        ],
+    ];
+
+    function __construct(array $attributes = [])
+    {
+        foreach (self::$enums as &$enum) {
+            $enum = $enum + array_flip($enum);
+        }
+        parent::__construct($attributes);
+    }
+
+    public function getStatusAttribute($value)
+    {
+        if (!$value) return '';
+        return self::$enums['status'][$value];
+    }
+
+    public function setStatusAttribute($value)
+    {
+        if (!$value) return 0;
+        if (is_numeric($value)) {
+            $this->attributes['status'] = $value;
+        } else {
+            $this->attributes['status'] = self::$enums['status'][$value];
+        }
+    }
+
+    public function getGradAttribute($value)
+    {
+        if (!$value) return '';
+        return self::$enums['grad'][$value];
+    }
+
+    public function setGradAttribute($value)
+    {
+        if (!$value) return 0;
+        if (is_numeric($value)) {
+            $this->attributes['grad'] = $value;
+        } else {
+            $this->attributes['grad'] = self::$enums['grad'][$value];
+        }
+    }
+
+    // 创建人
+    public function creator(): BelongsTo
+    {
+        return $this->belongsTo(User::class, 'creator_id');
+    }
+
+    // 审核人
+    public function reviewer(): BelongsTo
+    {
+        return $this->belongsTo(User::class, 'reviewer_id');
+    }
+
+    // 关联订单
+    public function order(): BelongsTo
+    {
+        return $this->belongsTo(Order::class, 'outer_table_id');
+    }
+
+    // 类型
+    public function type(): BelongsTo
+    {
+        return $this->belongsTo(WorkOrderType::class, 'work_order_type_id', 'id');
+    }
+
+    // 子类型
+    public function childType(): BelongsTo
+    {
+        return $this->belongsTo(WorkOrderChildType::class, 'work_order_child_type_id', 'id');
+    }
+
+    public function scopeFilter($query, $filters)
+    {
+        return $filters->apply($query);
+    }
+
+}

+ 16 - 0
app/WorkOrderChildType.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+use App\Traits\ModelLogChanging;
+
+class WorkOrderChildType extends Model
+{
+    use ModelLogChanging;
+
+    // 工单类型 子 类型
+    protected $fillable = ['work_order_type_id','name','table_name'];
+
+}

+ 21 - 0
app/WorkOrderType.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+use App\Traits\ModelLogChanging;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+
+class WorkOrderType extends Model
+{
+    use ModelLogChanging;
+
+    // 工单 类型
+    protected $fillable = ['name'];
+
+    public function childTypes(): HasMany
+    {
+        return $this->hasMany(WorkOrderChildType::class);
+    }
+}

+ 14 - 0
database/factories/WorkOrderChildTypeFactory.php

@@ -0,0 +1,14 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\WorkOrderChildType;
+use Faker\Generator as Faker;
+
+$factory->define(WorkOrderChildType::class, function (Faker $faker) {
+    return [
+        'work_order_type_id' =>rand(1,10),
+        'name' => $faker->name(),
+        'table_name' => $faker->name(),
+    ];
+});

+ 11 - 0
database/factories/WorkOrderFactory.php

@@ -0,0 +1,11 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\WorkOrder;
+use Faker\Generator as Faker;
+
+$factory->define(WorkOrder::class, function (Faker $faker) {
+    return [
+    ];
+});

+ 12 - 0
database/factories/WorkOrderTypeFactory.php

@@ -0,0 +1,12 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\WorkOrderType;
+use Faker\Generator as Faker;
+
+$factory->define(WorkOrderType::class, function (Faker $faker) {
+    return [
+        'name' => $faker->name
+    ];
+});

+ 18 - 0
database/seeds/WorkOrderChildTypeSeeder.php

@@ -0,0 +1,18 @@
+<?php
+
+use App\WorkOrderChildType;
+use Illuminate\Database\Seeder;
+
+class WorkOrderChildTypeSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        $params = factory(WorkOrderChildType::class)->times(30)->make()->toArray();
+        WorkOrderChildType::query()->insert($params);
+    }
+}

+ 16 - 0
database/seeds/WorkOrderSeeder.php

@@ -0,0 +1,16 @@
+<?php
+
+use Illuminate\Database\Seeder;
+
+class WorkOrderSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        //
+    }
+}

+ 18 - 0
database/seeds/WorkOrderTypeSeeder.php

@@ -0,0 +1,18 @@
+<?php
+
+use App\WorkOrderType;
+use Illuminate\Database\Seeder;
+
+class WorkOrderTypeSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        $params = factory(WorkOrderType::class)->times(10)->make()->toArray();
+        WorkOrderType::query()->insert($params);
+    }
+}