فهرست منبع

工单模型修改 控制器和 service 修改

ajun 4 سال پیش
والد
کامیت
db0f38c4c8
3فایلهای تغییر یافته به همراه87 افزوده شده و 17 حذف شده
  1. 28 10
      app/Http/Controllers/WorkOrderController.php
  2. 47 6
      app/Services/WorkOrderService.php
  3. 12 1
      app/WorkOrder.php

+ 28 - 10
app/Http/Controllers/WorkOrderController.php

@@ -10,6 +10,7 @@ use App\WorkOrder;
 use App\WorkOrderChildType;
 use App\WorkOrderType;
 use Carbon\Carbon;
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
@@ -18,15 +19,18 @@ class WorkOrderController extends Controller
 {
     public function index(Request $request, WorkOrderFilters $filters)
     {
-        if(!Gate::allows('订单管理-工单处理-查询'))return redirect('/');
+        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);
+        $workOrders = WorkOrder::query()->filter($filters)->with(['type', 'childType', 'creator','order'=>function($query){
+            /** @var $query Builder */
+            $query->with('packages','issue');
+        },'order.issue', '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('/');
+        if (!Gate::allows('订单管理-工单处理-创建')) return redirect('/');
         $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
         $grads = WorkOrder::$enums['grad'];
         array_shift($grads);
@@ -36,7 +40,7 @@ class WorkOrderController extends Controller
 
     public function store(Request $request, WorkOrderService $service)
     {
-        if(!Gate::allows('订单管理-工单处理-创建'))return redirect('/');
+        if (!Gate::allows('订单管理-工单处理-创建')) return redirect('/');
         $result = $service->createWordOrder($request->all());
         $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
         $grads = WorkOrder::$enums['grad'];
@@ -47,29 +51,30 @@ class WorkOrderController extends Controller
     // 创建
     public function storeApi(Request $request): array
     {
-        if(!Gate::allows('订单管理-订单-生成工单'))return ['success' => false,'message' => '没有对应的创建权限'];
+        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){
+        $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()) . '  已有对应的工单'];
+            return ['success' => false, 'message' => join(',', $exists_nos->toArray()) . '  已有对应的工单'];
 
         $inner_params = [];
 
         $creator_id = Auth::user()['id'];
 
-        $work_order_type = WorkOrderType::query()->firstOrCreate(['name'=> '订单']);
+        $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']);
+        $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[] = [
@@ -92,11 +97,24 @@ class WorkOrderController extends Controller
     // 审核
     public function reviewApi(Request $request, WorkOrderService $service): array
     {
-        if(!Gate::allows('订单管理-工单处理-审核'))return ['success' => false,'message' => '没有对应的编辑权限'];
+        if (!Gate::allows('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
         $workOrder = WorkOrder::query()->find($request['id']);
         return $service->reviewWordOrder($workOrder);
     }
 
+    /**
+     * 生成对应问题件
+     */
+    public function createOrderIssueApi(Request $request,WorkOrderService $service): array
+    {
+        if (!Gate::allows('订单管理-订单问题件生成'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
+        if (count($work_orders) == 0) return ['success' => false,'message' => '刷新当前页面重试'];
+        return $service->orderIssueByWorkOrder($work_orders);
+    }
+
+
     public function show(WorkOrder $workOrder)
     {
         //

+ 47 - 6
app/Services/WorkOrderService.php

@@ -2,37 +2,78 @@
 
 namespace App\Services;
 
+use App\Order;
+use App\OrderIssue;
+use App\OrderIssueType;
 use App\Traits\ServiceAppAop;
 use App\WorkOrder;
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Auth;
 
 class WorkOrderService
 {
     use ServiceAppAop;
-    protected $modelClass=WorkOrder::class;
+
+    protected $modelClass = WorkOrder::class;
 
     // 创建工单
     public function createWordOrder($params): array
     {
         $params['status'] = 1;
         $params['creator_id'] = Auth::user()['id'];
-        $params['grad']  ?? $params['grad'] = 1;
+        $params['grad'] ?? $params['grad'] = 1;
         $workOrder = WorkOrder::query()->create($params);
-        return ['success' => false,'data' => $workOrder];
+        return ['success' => false, 'data' => $workOrder];
     }
 
     // 审核工单
     public function reviewWordOrder($wordOrder): array
     {
         $wordOrder->update([
-            'reviewer_id' =>Auth::user()['id'],
+            'reviewer_id' => Auth::user()['id'],
             'review_at' => Carbon::now(),
             'status' => 2,
         ]);
-        $wordOrder = WorkOrder::query()->with('type', 'childType', 'creator', 'order.packages','reviewer')->find($wordOrder['id']);
-        return ['success' => true,'data' => $wordOrder];
+        $wordOrder = WorkOrder::query()->with('type', 'childType', 'creator', 'order.packages', 'reviewer')->find($wordOrder['id']);
+        return ['success' => true, 'data' => $wordOrder];
     }
 
+    /**
+     * 根据 订单拦截工单 生成问题件
+     * @param $work_orders
+     * @return array|bool[]
+     */
+    public function orderIssueByWorkOrder($work_orders): array
+    {
+        $order_ids = $work_orders->map(function ($item) {
+            return $item->outer_table_id;
+        });
+
+        $order_issues = OrderIssue::query()->with('order')->whereIn('order_id', $order_ids)->get();
+
+        $codes = $order_issues->map(function ($item) {
+            return $item->order->code;
+        });
+
+        if (count($codes) > 0)
+            return ['success' => false, 'message' => '对应【' . join(',', $codes) . '】订单已用问题件'];
 
+        $orders = Order::query()->select('code')->whereIn('id', $order_ids)->get();
+
+        $orderHeaders = app(OracleDOCOrderHeaderService::class)->getQuery()->whereIn('orderNo', $orders)->get();
+
+        $order_issue_type = OrderIssueType::query()->where('name', '拦截')->first();       // 订单类型
+
+        $result = app("OrderIssueService")->createOrderIssueByWmsOrder($orderHeaders, $order_issue_type->id, '拦截工单');
+
+        if (!$result) return ['success' => false, 'message' => '生成对应问题件失败'];
+        $work_orders = WorkOrder::query()->with(['type', 'childType', 'creator', 'order' => function ($query) {
+            /** @var $query Builder */
+            $query->with('packages', 'issue');
+        }, 'order.issue', 'reviewer'])
+            ->where('outer_table_name','orders')
+            ->whereIn('outer_table_id', $order_ids)->get();
+        return ['success' => true, 'data' => $work_orders];
+    }
 }

+ 12 - 1
app/WorkOrder.php

@@ -16,7 +16,18 @@ class WorkOrder extends Model
     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'];
+    protected $fillable = [
+        'status',           // 状态
+        'creator_id',       // 创建人
+        'reviewer_id',      // 审核人
+        'work_order_type_id',  // 工单类型
+        'work_order_child_type_id',  // 工单子类型
+        'grad',         // 紧急等级
+        'remark',       // 工单信息描述
+        'outer_table_name',   // 链接表名
+        'outer_table_id',     // 表id
+        'review_at',            // 审核时间
+    ];
 
     static public $enums = [
         'status' => [