Bladeren bron

添加生成校验

loustwo 4 jaren geleden
bovenliggende
commit
b369c6f351

+ 35 - 0
app/Http/Controllers/OracleDOCAsnHeaderController.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Services\OracleDocAsnHerderService;
+use App\Services\OwnerService;
+use Illuminate\Http\Request;
+
+class OracleDOCAsnHeaderController extends Controller
+{
+
+    /**
+     * @var OracleDocAsnHerderService $service
+     * @var OwnerService $ownerService
+     */
+    private $service;
+    private $ownerService;
+
+    public function __construct()
+    {
+        $this->service = app(OracleDocAsnHerderService::class);
+        $this->ownerService = app(OwnerService::class);
+    }
+
+    public function getToBeProcessAsnHeaderDetailsApi(Request $request): array
+    {
+        $customer_id = $request->input('customer_id',null);
+        if (!$customer_id){
+            return ['success'=> false,'message' => '参数错误'];
+        }
+        $data = $this->service->getToBeProcessAsnDetailsByCustomId($customer_id);
+        return ['success' => true,'data' => $data];
+    }
+
+}

+ 31 - 59
app/Http/Controllers/ReceivingTaskController.php

@@ -2,84 +2,56 @@
 
 namespace App\Http\Controllers;
 
+use App\DeliveryAppointment;
+use App\Http\Requests\Api\ReceivingTaskRequest;
 use App\ReceivingTask;
+use App\Services\OwnerService;
+use App\Services\ReceivingTaskService;
+use App\Warehouse;
 use Illuminate\Http\Request;
 
 class ReceivingTaskController extends Controller
 {
     /**
-     * Display a listing of the resource.
-     *
-     * @return \Illuminate\Http\Response
+     * @var ReceivingTaskService $service
+     * @var OwnerService $ownerService
      */
-    public function index()
-    {
-        //
-    }
+    private $service;
+    private $ownerService;
 
-    /**
-     * Show the form for creating a new resource.
-     *
-     * @return \Illuminate\Http\Response
-     */
-    public function create()
+    public function __construct()
     {
-        //
+        $this->service = app(ReceivingTaskService::class);
+        $this->ownerService = app(OwnerService::class);
     }
 
-    /**
-     * Store a newly created resource in storage.
-     *
-     * @param  \Illuminate\Http\Request  $request
-     * @return \Illuminate\Http\Response
-     */
-    public function store(Request $request)
+    public function index()
     {
-        //
+        $wareHouse = Warehouse::query()->get();
+        $owners = $this->ownerService->getQuery()->select("id","code","name")->get();
+        return view("store.receivingTasks.create",compact('wareHouse','owners'));
     }
 
-    /**
-     * Display the specified resource.
-     *
-     * @param  \App\ReceivingTask  $receivingTask
-     * @return \Illuminate\Http\Response
-     */
-    public function show(ReceivingTask $receivingTask)
-    {
-        //
-    }
 
-    /**
-     * Show the form for editing the specified resource.
-     *
-     * @param  \App\ReceivingTask  $receivingTask
-     * @return \Illuminate\Http\Response
-     */
-    public function edit(ReceivingTask $receivingTask)
+    public function create()
     {
-        //
-    }
 
-    /**
-     * Update the specified resource in storage.
-     *
-     * @param  \Illuminate\Http\Request  $request
-     * @param  \App\ReceivingTask  $receivingTask
-     * @return \Illuminate\Http\Response
-     */
-    public function update(Request $request, ReceivingTask $receivingTask)
-    {
-        //
     }
 
-    /**
-     * Remove the specified resource from storage.
-     *
-     * @param  \App\ReceivingTask  $receivingTask
-     * @return \Illuminate\Http\Response
-     */
-    public function destroy(ReceivingTask $receivingTask)
+
+    public function storeApi(ReceivingTaskRequest $request): array
     {
-        //
+        $delivery_appointment_number = $request->input('delivery_appointment_number',null);
+        $delivery_appointment = DeliveryAppointment::query()->where('procurement_number',$delivery_appointment_number)->first();
+        if (!$delivery_appointment) return ['success' => false, 'message' => '预约号未找到'];
+        if (ReceivingTask::query()->where('delivery_appointment_id',$delivery_appointment->id)->exists())
+            return ['success' => false, 'message' => '预约号已有对应的任务'];
+        try {
+            $receiving_task = $this->service->createReceivingTask($delivery_appointment, $request->all());
+            $receiving_task->loadMissing("deliveryAppointment");
+            return ['success' => true, 'data' => $receiving_task];
+        } catch (\Exception $e) {
+            return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试'];
+        }
     }
 }

+ 22 - 0
app/Http/Controllers/TestController.php

@@ -96,6 +96,7 @@ use App\Services\OwnerPriceOperationService;
 use App\Services\OwnerService;
 use App\Services\OwnerStoreFeeReportService;
 use App\Services\OwnerStoreOutFeeReportService;
+use App\Services\ReceivingTaskService;
 use App\Services\ReplenishmentService;
 use App\Services\ReviewService;
 use App\Services\StationService;
@@ -324,6 +325,11 @@ class TestController extends Controller
 
     }
 
+    public function testOrder(){
+        $controller = new ReceivingTaskController();
+        return $controller->index();
+    }
+
     public function testZC()
     {
 //        $batches=Batch::query()->where('id',1)->get();
@@ -337,6 +343,22 @@ class TestController extends Controller
         dd($inventoryAccountMission->stockInventoryPersons);
     }
 
+    public function testTable(){
+        return view('httpTest');
+    }
+
+    public function testForm(){
+        $date = \Illuminate\Support\Carbon::now();
+//        'Y-m-d H:i:s'
+        $item = $date->format(Carbon::DEFAULT_TO_STRING_FORMAT);
+        $item = $date->format("Ymd");
+        dd($item);
+    }
+
+    public function testCount(){
+        $service = new ReceivingTaskService();
+        dd($service->buildTaskNumber());
+    }
 
 
 }

+ 61 - 0
app/Http/Requests/Api/ReceivingTaskRequest.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace App\Http\Requests\Api;
+
+use App\Traits\RequestApiFormValidation;
+use Illuminate\Foundation\Http\FormRequest;
+
+class ReceivingTaskRequest extends FormRequest
+{
+    use RequestApiFormValidation;
+
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'warehouse_id' => 'required',
+            'owner_id' => 'required',
+            'delivery_appointment_number' => 'required',
+            'driver_name' => 'required',
+            'driver_phone' => 'required',
+            'for_single_member' => 'required',
+            'provide_list' => 'required',
+            'receiving_type' => 'required',
+            'driving_license_image' => 'required|image',
+            'asn_nos' => 'required|array'
+        ];
+    }
+
+    public function messages(): array
+    {
+        return [
+            'warehouse_id.required' => "仓库为必选项",
+            'owner_id.required' => "货主为必选",
+            'delivery_appointment_number.exists' => "预约单号不存在",
+            'delivery_appointment_number.required' => "预约单号不能为空",
+            'driver_name.required' => "司机不能为空",
+            'driver_phone.required' => "司机联系号码不能为空",
+            'for_single_member.required' => "投单员不能为空",
+            'provide_list.required' => "选择是否提供清单",
+            'receiving_type.required' => "收货类型为必选项",
+            'driving_license_image.required' => "驾驶证扫描件不能为空",
+            'driving_license_image.image' => "驾驶证扫描件格式错误",
+            'asn_nos.required' => "勾选入库单",
+            'asn_nos.array' => "入库单号参数类型错误"
+        ];
+    }
+}

+ 1 - 1
app/OracleDOCASNDetail.php

@@ -33,7 +33,7 @@ class OracleDOCASNDetail extends Model
     public function basSku()
     {
         return $this->hasOne(OracleBasSKU::class,['customerid','sku'],['customerid','sku'])
-            ->select('customerid','sku','lotid','alternate_sku1','alternate_sku2','alternate_sku3');
+            ->select('customerid','sku','lotid','alternate_sku1','alternate_sku2','alternate_sku3','descr_c','alternate_sku1','alternate_sku2','alternate_sku3');
 
     }
 }

+ 11 - 3
app/OracleDOCASNHeader.php

@@ -5,6 +5,8 @@ namespace App;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelLogChanging;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Database\Eloquent\Relations\HasOne;
 
 class OracleDOCASNHeader extends Model
 {
@@ -14,19 +16,25 @@ class OracleDOCASNHeader extends Model
     protected $connection="oracle";
     protected $table="Doc_ASN_Header";
 
-    public function asnType()
+    public function asnType(): HasOne
     {
         return $this->hasOne(OracleBasCode::class,'code','asntype')
             ->where('codeid','ASN_TYP');
     }
 
-    public function asnStatus()
+    public function asnStatus(): HasOne
     {
         return $this->hasOne(OracleBasCode::class,'code','asnstatus')
             ->where('codeid','ASN_STS');
     }
 
-    public function asnDetails()
+    public function basCustomer(): HasOne
+    {
+        return $this->hasOne(OracleBasCustomer::class,'customerid','customerid')
+            ->where('customer_type','OW');
+    }
+
+    public function asnDetails(): HasMany
     {
         return $this->hasMany(OracleDOCASNDetail::class,'asnno','asnno')
             ->select('asnno','asnlineno','customerid','sku','skudescrc','linestatus','lotatt08','lotatt05','receivedqty','receivedqty_each','expectedqty','addtime','edittime');

+ 14 - 0
app/ReceivingTask.php

@@ -5,7 +5,9 @@ namespace App;
 use Illuminate\Database\Eloquent\Model;
 
 use App\Traits\ModelLogChanging;
+use Illuminate\Database\Eloquent\Relations\HasMany;
 use Illuminate\Database\Eloquent\Relations\HasOne;
+use Ramsey\Uuid\Uuid;
 
 class ReceivingTask extends Model
 {
@@ -41,4 +43,16 @@ class ReceivingTask extends Model
     {
         return $this->hasOne(DeliveryAppointment::class);
     }
+
+    public function items(): HasMany
+    {
+        return $this->hasMany(ReceivingTaskItem::class);
+    }
+
+    public function file(): HasOne
+    {
+        return $this->hasOne(UploadFile::class,'table_id','id')->where('table_name','receiving_tasks');
+    }
+
+
 }

+ 4 - 0
app/Services/OracleDocAsnDetailService.php

@@ -3,7 +3,9 @@
 namespace App\Services;
 
 use App\OracleDOCASNDetail;
+use App\OracleDOCASNHeader;
 use App\Traits\ServiceAppAop;
+use Illuminate\Database\Eloquent\Builder;
 
 
 class OracleDocAsnDetailService
@@ -40,4 +42,6 @@ class OracleDocAsnDetailService
         }
         return $query->get();
     }
+
+
 }

+ 13 - 2
app/Services/OracleDocAsnHerderService.php

@@ -9,6 +9,7 @@ use App\Traits\ServiceAppAop;
 class OracleDocAsnHerderService
 {
     use ServiceAppAop;
+
 //    protected $modelClass=OracleDocAsnHerder::class;
 
     public function getWmsAsnOnStartDateCreate($startDate)
@@ -16,7 +17,7 @@ class OracleDocAsnHerderService
         if (!$startDate) return null;
         return OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus'])
-            ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3','asnreference2')
+            ->select('asnno', 'asnstatus', 'asntype', 'addtime', 'edittime', 'customerid', 'notes', 'warehouseid', 'asnreference3', 'asnreference2')
             ->where('addTime', '>=', $startDate)
             ->whereColumn('edittime', '=', 'addTime')
             ->orderByDesc('addtime')
@@ -28,11 +29,21 @@ class OracleDocAsnHerderService
         if (!$startDate) return null;
         return OracleDOCASNHeader::query()
             ->with(['asnType', 'asnStatus'])
-            ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3','asnreference2')
+            ->select('asnno', 'asnstatus', 'asntype', 'addtime', 'edittime', 'customerid', 'notes', 'warehouseid', 'asnreference3', 'asnreference2')
             ->where('EditTime', '>=', $startDate)
             ->whereColumn('EditTime', '<>', 'addTime')
             ->orderByDesc('EditTime')
             ->get();
     }
 
+    public function getToBeProcessAsnDetailsByCustomId($customId)
+    {
+        return OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus', 'basCustomer','asnDetails' => function ($query) {
+                $query->with(['lineStatus', 'qualityStatus', 'basSku']);
+            }])
+            ->whereIn("AsnStatus", ['00', '30'])
+            ->where('CustomerId', $customId)->get();
+    }
+
 }

+ 83 - 2
app/Services/ReceivingTaskService.php

@@ -1,13 +1,94 @@
-<?php 
+<?php
 
 namespace App\Services;
 
+use App\DeliveryAppointment;
 use App\Traits\ServiceAppAop;
 use App\ReceivingTask;
+use Illuminate\Support\Carbon;
+use Ramsey\Uuid\Uuid;
 
 class ReceivingTaskService
 {
     use ServiceAppAop;
     protected $modelClass=ReceivingTask::class;
 
-}
+    public function endTask($receivingTaskNumber)
+    {
+        ReceivingTask::query()->where('number',$receivingTaskNumber)->update(['status' => '完成']);
+    }
+
+    public function executionTask($receivingTaskNumber){
+        ReceivingTask::query()->where('number',$receivingTaskNumber)->update(['status' => '进行中']);
+    }
+
+    public function createReceivingTask($params,DeliveryAppointment $deliveryAppointment): ReceivingTask
+    {
+        // 生成入库任务号
+        $task_number = $this->buildTaskNumber();
+        $params['number'] = $task_number;
+        $params['delivery_appointment_id'] = $deliveryAppointment;         // 预约号
+
+        /** @var ReceivingTask $receivingTask */
+        $receivingTask = ReceivingTask::query()->create($params);
+
+        $asn_nos = $params['asn_nos'];
+
+        $receivingTask->items()->insert( array_map(function($item){
+            return ['asn_no' => $item];
+        },$asn_nos));
+        $this->saveImage($receivingTask,$params['file']);
+        return $receivingTask;
+    }
+
+    public function saveImage(ReceivingTask $receivingTask,$image): bool
+    {
+        if (!$this->checkImage($image)) return false;
+        $tmpFile = $image->getRealPath();
+        $fileSuffix = $image->getClientOriginalExtension();
+        $dirPath = $this->getStorageDirPath();
+        $fileName = date('ymd') . '-' . Uuid::uuid1();
+        $pathName = $dirPath . $fileName .'.' . $fileSuffix;
+        $result = move_uploaded_file($tmpFile, $pathName);
+        if(!$result) return false;
+        $receivingTask->file()->create(
+            [ 'url' => '/files/receivingTask/'.$fileName, 'type' => $fileSuffix,'table_name'=>$receivingTask->getTable()]
+        );
+        return true;
+    }
+
+    public function checkImage($image): bool
+    {
+        $tmpFile = $image->getRealPath();
+        $fileSuffix = $image->getClientOriginalExtension();
+        if (!is_uploaded_file($tmpFile)) return false;
+        if ($image->getSize() > 5 * 1024 * 1024) return false;
+        if (!in_array($fileSuffix,[ 'gif','image','jpeg','jpg','png','svg'])) return false;
+        return true;
+    }
+
+
+    public function getStorageDirPath(): string
+    {
+        $path = ['app','public','files','receivingTask'];
+        $path = join(DIRECTORY_SEPARATOR,$path);
+        $dirPath = storage_path($path);
+        if (!file_exists($dirPath)) {
+            mkdir($dirPath);
+        }
+        return $dirPath.DIRECTORY_SEPARATOR;
+    }
+
+    public function buildTaskNumber():string
+    {
+        $year_month_day = Carbon::now()->format("Ymd");
+        $current = Carbon::now()->format("Y-m-d");
+        $count = ReceivingTask::query()
+            ->where('created_at','>=' ,$current.' 00:00:00')
+            ->where('created_at','<=' ,$current.' 23.59.59')
+            ->count();
+        $count++;
+        $count =  sprintf('%03s', $count);
+        return "SH$year_month_day".$count;
+    }
+}

+ 0 - 1
app/WorkOrder.php

@@ -180,7 +180,6 @@ class WorkOrder extends Model
         return $this->belongsTo(User::class, 'reviewer_id');
     }
 
-
     // 生成问题件类型
     public function issueType(): BelongsTo
     {

+ 2 - 2
database/migrations/2021_12_22_153152_create_receiving_tasks_table.php

@@ -15,11 +15,11 @@ class CreateReceivingTasksTable extends Migration
     {
         Schema::create('receiving_tasks', function (Blueprint $table) {
             $table->id();
-            $table->String('number')->index()->comment('收货任务清单');
+            $table->String('number')->unique()->comment('收货任务清单');
             $table->integer('warehouse_id')->index()->comment('仓库');
             $table->integer('owner_id')->index()->comment('货主');
             $table->String("for_single_member")->comment('投单员');
-            $table->integer('delivery_appointment_id')->index()->comment('预约号');
+            $table->integer('delivery_appointment_id')->unique()->comment('预约号');
 
             $table->String('driver_name')->comment('司机姓名');
             $table->String('driver_phone')->comment('司机号码');

+ 55 - 0
resources/views/store/receivingTasks/_receiving_task_print.blade.php

@@ -0,0 +1,55 @@
+<div id="print-receiving-task" class="container"
+     style="min-height: 450px;min-width: 750px;max-height: 450px;max-width: 750px">
+    <div id="receiving-task-print" class="d-none">
+        <table class="table table-sm table-bordered text-center">
+            <tr>
+                <td rowspan="2" colspan="4" class="">
+                    <div style="width: 700px;height:120px">
+                        <svg id="receiving-task-print-code" style="width: 100%;height: 100%" preserveAspectRatio="none">
+                        </svg>
+                    </div>
+
+                </td>
+            </tr>
+            <tr></tr>
+            <tr>
+                <td>收货任务号</td>
+                <td colspan="3" rowspan="1" v-text="receiving_task_print.number"></td>
+            </tr>
+
+            <tr>
+                <td>仓库</td>
+                <td v-text="receiving_task_print.warehouse"></td>
+                <td>投单员</td>
+                <td v-text="receiving_task_print.for_single_member"></td>
+            </tr>
+            <tr>
+                <td>司机姓名</td>
+                <td v-text="receiving_task_print.driver_name"></td>
+                <td>司机电话</td>
+                <td v-text="receiving_task_print.driver_phone"></td>
+            </tr>
+            <tr>
+                <td>车号牌</td>
+                <td v-text="receiving_task_print.plate_number"></td>
+                <td>驾驶证号</td>
+                <td v-text="receiving_task_print.driving_license_no"></td>
+            </tr>
+            <tr>
+                <td>是否提供清单</td>
+                <td v-text="receiving_task_print.provide_list"></td>
+                <td>收货类型</td>
+                <td v-text="receiving_task_print.receiving_type"></td>
+            </tr>
+            <tr>
+                <td>货主</td>
+                <td v-text="receiving_task_print.owner"></td>
+                <td>预约号</td>
+                <td v-text="receiving_task_print.delivery_appointment_number"></td>
+            </tr>
+        </table>
+    </div>
+    <div style="width: 100%;height: 100%;" class="d-none" id="receiving-task-print-image">
+        <img src="" alt="">
+    </div>
+</div>

+ 553 - 100
resources/views/store/receivingTasks/create.blade.php

@@ -1,137 +1,335 @@
 @extends('layouts.app')
 @section('title')开单入库-查询@endsection
+@section('head')
+    <link href="{{ mix('css/element-ui.css') }}" rel="stylesheet">
+    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
+
+@endsection
 
 @section('content')
     <div id="list" class="d-none">
-        <div class="container-fluid">
-            <div class="card row">
+        <div class="container-fluid ">
+            <div class="card">
                 <div class="card-body">
                     <form name="receiving-task-form" id="receiving-task-form">
                         <div class="form-group row">
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right"  for="warehouse">仓库</label>
+                                <label class="col-4 col-form-label text-right text-primary" for="warehouse_id">
+                                    <span class="text-danger">*</span>
+                                    仓库
+                                </label>
                                 <div class="form-inline col-8">
-                                    <select class="form-control form-control-sm" name="warehouse" id="warehouse">
-                                        <option value=""></option>
+                                    <select class="form-control form-control-sm col-12" name="warehouse_id" @change="clearError('warehouse_id')"
+                                            id="warehouse_id"
+                                            :class="{'is-invalid':errors.warehouse_id}"
+                                            v-model="receiving_task.warehouse_id">
+                                        <option v-for="item in ware_house"
+                                                :value="item.value"
+                                                v-text="item.name"></option>
                                     </select>
+                                    <div id="validation-warehouse" class="invalid-feedback" v-show="errors.warehouse_id">
+                                        <span v-text="errors.warehouse_id"></span>
+                                    </div>
                                 </div>
                             </div>
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right" for="for_single_member">投单员</label>
+                                <label class="col-4 col-form-label text-right text-primary" for="for_single_member">
+                                    <span class="text-danger">*</span>
+                                    投单员</label>
                                 <div class="form-inline col-8">
-                                    <input type="text" class="form-control" placeholder="" id="for_single_member">
+                                    <input type="text" class="form-control form-control-sm col-12" placeholder=""
+                                           id="for_single_member" name="for_single_member"
+                                           :class="{'is-invalid':errors.for_single_member}"
+                                           @change="clearError('for_single_member')"
+
+                                           v-model="receiving_task.for_single_member">
+                                    <div id="validation-for-single-member" class="invalid-feedback" v-show="errors.for_single_member">
+                                        <span v-text="errors.for_single_member"></span>
+                                    </div>
                                 </div>
                             </div>
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right" for="owner">货主</label>
+                                <label class="col-4 col-form-label text-right text-primary" for="owner_id">
+                                    <span class="text-danger">*</span>
+                                    货主</label>
                                 <div class="form-inline col-8">
-                                    <select class="form-control form-control-sm" name="owner" id="owner">
-                                        <option value=""></option>
+                                    <select class="form-control form-control-sm col-12" name="owner_id" id="owner_id"
+                                            :class="{'is-invalid':errors.owner_id}"
+                                            @change="getASNDetails" v-model="receiving_task.owner_id">
+                                        <option v-for="item in owners" :value="item.id" v-text="item.name"></option>
                                     </select>
+                                    <div id="validation-owner-id" class="invalid-feedback" v-show="errors.for_single_member">
+                                        <span v-text="errors.for_single_member"></span>
+                                    </div>
                                 </div>
                             </div>
                         </div>
 
                         <div class="form-group row">
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right" for="driver_name">司机姓名</label>
+                                <label class="col-4 col-form-label text-right text-primary" for="driver_name">
+                                    <span class="text-danger">*</span>
+                                    司机姓名</label>
                                 <div class="form-inline col-8">
-                                    <input type="text" class="form-control" placeholder="" name="driver_name" id="driver_name">
+                                    <input type="text" class="form-control form-control-sm col-12" placeholder=""
+                                           name="driver_name" id="driver_name"
+                                           :class="{'is-invalid':errors.driver_name}"
+                                           @change="clearError('driver_name')"
+                                           v-model="receiving_task.driver_name">
+                                    <div id="validation-driver-name" class="invalid-feedback" v-show="errors.driver_name">
+                                        <span v-text="errors.driver_name"></span>
+                                    </div>
                                 </div>
                             </div>
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right" for="driver-phone">司机电话</label>
+                                <label class="col-4 col-form-label text-right text-primary" for="driver-phone">
+                                    <span class="text-danger">*</span>
+                                    司机电话</label>
                                 <div class="form-inline col-8">
-                                    <input type="text" class="form-control" placeholder="" name="driver-phone" id="driver-phone">
+                                    <input type="text" class="form-control form-control-sm col-12" placeholder=""
+                                           name="driver_phone" id="driver-phone"
+                                           :class="{'is-invalid':errors.driver_phone}"
+                                           @change="clearError('driver_phone')"
+                                           v-model="receiving_task.driver_phone">
+                                    <div id="validation-driver-phone" class="invalid-feedback" v-show="errors.driver_name">
+                                        <span v-text="errors.driver_phone"></span>
+                                    </div>
                                 </div>
                             </div>
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right" for="delivery_appointment_number">预约单号</label>
+                                <label class="col-4 col-form-label text-right text-primary"
+                                       for="delivery_appointment_number">
+                                    <span class="text-danger">*</span>
+                                    预约单号</label>
                                 <div class="form-inline col-8">
-                                    <input type="text" class="form-control" placeholder="" name="delivery_appointment_number" id="delivery_appointment_number">
+                                    <input type="text" class="form-control form-control-sm col-12" placeholder=""
+                                           name="delivery_appointment_number" id="delivery_appointment_number"
+                                           :class="{'is-invalid':errors.delivery_appointment_number}"
+                                           @change="clearError('delivery_appointment_number')"
+                                           v-model="receiving_task.delivery_appointment_number">
+                                    <div id="validation-delivery-appointment-number" class="invalid-feedback" v-show="errors.delivery_appointment_number">
+                                        <span v-text="errors.delivery_appointment_number"></span>
+                                    </div>
                                 </div>
                             </div>
                         </div>
 
                         <div class="form-group row">
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right" for="plate_number">车牌号</label>
+                                <label class="col-4 col-form-label text-right" for="plate_number">
+                                    <span class="text-danger">*</span>
+                                    车牌号</label>
                                 <div class="form-inline col-8">
-                                    <input type="text" class="form-control" placeholder="" name="plate_number" id="plate_number">
+                                    <input type="text" class="form-control form-control-sm col-12" placeholder=""
+                                           name="plate_number" id="plate_number"
+                                           :class="{'is-invalid':errors.plate_number}"
+                                           @change="clearError('plate_number')"
+                                           :disabled="receiving_task.logistics_single_number"
+                                           v-model="receiving_task.plate_number">
+                                    <div id="validation-plate-number" class="invalid-feedback" v-show="errors.plate_number">
+                                        <span v-text="errors.plate_number"></span>
+                                    </div>
                                 </div>
                             </div>
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right" for="driving_license_no">驾驶证号</label>
+                                <label class="col-4 col-form-label text-right" for="driving_license_no">
+                                    <span class="text-danger">*</span>
+                                    驾驶证号</label>
                                 <div class="form-inline col-8">
-                                    <input type="text" class="form-control" placeholder="" name="driving_license_no" id="driving_license_no">
+                                    <input type="text" class="form-control form-control-sm col-12" placeholder=""
+                                           name="driving_license_no" id="driving_license_no"
+                                           :class="{'is-invalid':errors.driving_license_no}"
+                                           @change="clearError('driving_license_no')"
+                                           :disabled="receiving_task.logistics_single_number"
+                                           v-model="receiving_task.driving_license_no">
+                                    <div id="validation-driving-license-no" class="invalid-feedback" v-show="errors.driving_license_no">
+                                        <span v-text="errors.driving_license_no"></span>
+                                    </div>
                                 </div>
                             </div>
                             <div class="form-inline col-4 row">
-                                <label class="col-4 col-form-label text-right" for="logistics_single_number">物流单号</label>
+                                <label class="col-4 col-form-label text-right" for="logistics_single_number">
+                                    <span class="text-danger">*</span>
+                                    物流单号</label>
                                 <div class="form-inline col-8">
-                                    <input type="text" class="form-control" placeholder="" name="logistics_single_number" id="logistics_single_number">
+                                    <input type="text" class="form-control form-control-sm col-12" placeholder=""
+                                           name="logistics_single_number" id="logistics_single_number"
+                                           :class="{'is-invalid':errors.logistics_single_number}"
+                                           @change="clearError('logistics_single_number')"
+                                           :disabled="checkLogisticsSingleIsWrite()"
+                                           v-model="receiving_task.logistics_single_number">
+                                    <div id="validation-driving-license-no" class="invalid-feedback" v-show="errors.logistics_single_number">
+                                        <span v-text="errors.logistics_single_number"></span>
+                                    </div>
                                 </div>
                             </div>
                         </div>
 
-                        <div class="card-body">
-                            <div class="card">
 
+                        <div class="form-group row">
+                            <div class="form-inline col-4 row">
+                                <label class="col-4 col-form-label text-right" for="plate_number">
+                                    <span class="text-danger">*</span>
+                                    是否提供清单</label>
+                                <div class="form-inline col-8">
+                                    <select name="provide_list" id="provide_list"
+                                            class="form-control form-control-sm col-12"
+                                            :class="{'is-invalid':errors.provide_list}"
+                                            @change="clearError('provide_list')"
+                                            v-model="receiving_task.provide_list">
+                                        <option v-for="item in provide_lists" :value="item" v-text="item"></option>
+                                    </select>
+                                    <div id="validation-provide_list" class="invalid-feedback" v-show="errors.provide_list">
+                                        <span v-text="errors.provide_list"></span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="form-inline col-4 row">
+                                <label class="col-4 col-form-label text-right" for="receiving_type">
+                                    <span class="text-danger">*</span>
+                                    收货类型</label>
+                                <div class="form-inline col-8">
+                                    <select name="receiving_type" id="receiving_type"
+                                            class="form-control form-control-sm col-12"
+                                            :class="{'is-invalid':errors.receiving_type}"
+                                            @change="clearError('provide_list')"
+                                            v-model="receiving_task.receiving_type">
+                                        <option v-for="item in receiving_types" :value="item" v-text="item"></option>
+                                    </select>
+                                    <div id="validation-receiving-type" class="invalid-feedback" v-show="errors.receiving_type">
+                                        <span v-text="errors.receiving_type"></span>
+                                    </div>
+                                </div>
                             </div>
                         </div>
 
+                        <div class="form-group row">
+                            <div class="form-inline col-4 row">
+                                <label class="col-4 col-form-label text-right text-primary" for="driving_license_scan">
+                                    <span class="text-danger">*</span>
+                                    驾驶证扫描件</label>
+                                <div class="form-inline col-8">
+                                    <input type="file" class="form-control form-control-file col-12" placeholder=""
+                                           name="driving_license_scan" id="driving_license_scan">
+                                </div>
+                            </div>
+                        </div>
                     </form>
                 </div>
 
-                <div class="card-body">
-                    <table class="table table-hover text-center table-bordered" id="asn-header">
-                        <thead>
-                        <tr>
-                            <td></td>
-                            <td>货主</td>
-                            <td>ANS号</td>
-                            <td>ANS类型</td>
-                            <td>订单状态</td>
-                            <td>上游单号</td>
-                            <td>预期总数</td>
-                            <td>参考编号1</td>
-                            <td>参考编号2</td>
-                            <td>参考编号3</td>
-                            <td>接口接受时间</td>
-                        </tr>
-                        </thead>
-                        <tbody>
-                        <tr>
-                            <td><input type="radio" class="form-control radio"></td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                        </tr>
-                        </tbody>
-                    </table>
+                <div class="card-body mb-0 pt-0 pm-0">
+                    <el-table
+                        :key="asn_headers_table_key"
+                        size="small"
+                        highlight-current-row
+                        ref="asn_headers_table"
+                        :data="asn_headers"
+                        height="350"
+                        border
+                        @row-dblclick="showAsnDetails"
+                        row-key="asn_no"
+                        @selection-change="handleSelectionChange"
+                        style="width: 100%">
+
+                        <el-table-column
+                            type="selection"
+                            width="55">
+                        </el-table-column>
+
+                        <el-table-column
+                             prop="customer_id" label="货主">
+                        </el-table-column>
+
+                        <el-table-column
+                            prop="asn_no" label="ASN号">
+                        </el-table-column>
+
+                        <el-table-column
+                            prop="asn_type" label="ASN类型">
+                        </el-table-column>
+
+                        <el-table-column
+                            prop="asn_status" label="订单状态">
+                        </el-table-column>
+
+                        <el-table-column
+                            prop="up_stream_number"
+                            label="上游单号">
+                        </el-table-column>
+                        <el-table-column
+                            prop="anticipated_sum_number"
+                            label="预期总数">
+                        </el-table-column>
+                        <el-table-column
+                            prop="number1"
+                            label="参考编号1"
+                        >
+                        </el-table-column>
+                        <el-table-column
+                            prop="number2"
+                            label="参考编号2">
+                        </el-table-column>
+                        <el-table-column
+                            prop="number3"
+                            label="参考编号3">
+                        </el-table-column>
+                        <el-table-column
+                            prop="receiving_time"
+                            label="接收时间">
+                        </el-table-column>
+                    </el-table>
+                </div>
+                <div class="card-body mt-0 pt-0 pm-0">
+                    <el-table
+                        ref="asn_details_table"
+                        size="small"
+                        border
+                        :data="asn_details"
+                        style="width: 100%"
+                        height="300">
+
+                        <el-table-column
+                            prop="line_status"
+                            label="行状态"
+                            width="180">
+                        </el-table-column>
+                        <el-table-column
+                            prop="name"
+                            label="产品名称">
+                        </el-table-column>
+                        <el-table-column
+                            prop="code1"
+                            label="条码1"
+                            width="180">
+                        </el-table-column>
+                        <el-table-column
+                            prop="code2"
+                            label="条码2"
+                            width="180">
+                        </el-table-column>
+                        <el-table-column
+                            prop="code3"
+                            label="条码3">
+                        </el-table-column>
+                        <el-table-column
+                            prop="anticipated_number"
+                            label="预期数量"
+                            width="180">
+                        </el-table-column>
+                        <el-table-column
+                            prop="number"
+                            label="已收取"
+                            width="180">
+                        </el-table-column>
+                    </el-table>
                 </div>
-                <div class="form-group row">
-                    <table class="table table-bordered table-hover" id="asn-details">
-                        <thead>
-                        <tr>
-                            <td>行状态</td>
-                            <td>产品名称</td>
-                            <td>条码1</td>
-                            <td>条码2</td>
-                            <td>条码3</td>
-                            <td>预期数量</td>
-                            <td>已收数量</td>
-                        </tr>
-                        </thead>
-                    </table>
+                <div class="form-group ">
+                    <el-button type="primary" class="col-12" @click="submit">生成任务</el-button>
                 </div>
+                <div class="form-group ">
+                    <el-button type="primary" class="col-12" @click="print">打印</el-button>
+                </div>
+                @include("store.receivingTasks._receiving_task_print")
             </div>
         </div>
 
@@ -139,45 +337,300 @@
 @endsection
 @section('lastScript')
     <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
-    <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>
+    <script type="text/javascript" src="{{ mix('js/element-ui.js') }}"></script>
+    <script type="text/javascript" src="{{ mix('js/utilities/barcode.js') }}"></script>
+    <script type="text/javascript" src="{{mix('js/utilities/html2canvas.js')}}"></script>
+    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
     <script>
         let vue = new Vue({
-            data:{
-                receiving_task:{
-                    warehouse_id:null,
-                    owner_id:null,
-                    delivery_appointment_id:null,
-                    driver_name:null,
-                    driver_phone:null,
-                    for_single_member:null,
-                    plate_number:null,
-                    driving_license_no:null,
-                    logistics_single_number:null,
-                    provide_list:null,
-                    receiving_type:null,
-                    status:null,
-                },
-                driving_license_image:null,
-                asn_header:[],
-                asn_details:[],
+            el: "#list",
+            data: {
+                receiving_task: {
+                    warehouse_id: null,
+                    owner_id: null,
+                    delivery_appointment_number:null,
+                    driver_name: null,
+                    driver_phone: null,
+                    for_single_member: null,
+                    plate_number: null,
+                    driving_license_no: null,
+                    logistics_single_number: null,
+                    provide_list: null,
+                    receiving_type: null,
+                },
+                provide_lists:['是','否'],
+                receiving_types:['正常','盲收'],
+                owners: [
+                        @foreach($owners as $owner)
+                    {
+                        name: '{{$owner->name}}', value: '{{$owner->code}}', id: '{{$owner->id}}'
+                    },
+                    @endforeach
+                ],
+                ware_house: [
+                        @foreach($wareHouse as $item)
+                    {
+                        name: '{{$item->name}}', value: '{{$item->id}}'
+                    },
+                    @endforeach
+                ],
+                driving_license_image: null,
+                asn_headers: [],
+                asn_details: [],
+                asn_detail: [],
+                loading_tag: false,
+                not_found_tag: false,
+                asn_headers_table_key: 1,
+                errors:{
+                    warehouse_id:'',
+                    owner_id:'',
+                    delivery_appointment_id:'',
+                    delivery_appointment_number:'',
+                    driver_name:'',
+                    driver_phone:'',
+                    for_single_member:'',
+                    plate_number:'',
+                    driving_license_no:'',
+                    logistics_single_number:'',
+                    provide_list:'',
+                    receiving_type:'',
+                },
+                error_message:null,
+                selected_asn_nos:[],
+                receiving_task_print: {
+                    number: null,               // 收货任务号
+                    warehouse:null,             // 仓库
+                    for_single_member: null,    // 投单员
+                    driver_name: null,          // 司机姓名
+                    driver_phone: null,         // 司机电话
+                    plate_number:null,          // 车号牌
+                    driving_license_no:null,    // 驾驶证号
+                    provide_list: null,         // 是否提供清单
+                    receiving_type: null,       // 收货类型
+                    owner: null,                // 货主
+                    delivery_appointment_number: null, // 预约号
+                },
+            },
+            mounted() {
+                $("#list").removeClass('d-none');
             },
-            methods:{
-                submit(){
+            methods: {
+                waitingTempTip(message) {
+                    window.tempTip.setIndex(2005);
+                    window.tempTip.waitingTip(message);
+                },
+                successTempTip(message) {
+                    window.tempTip.setDuration(1500);
+                    window.tempTip.setIndex(2005);
+                    window.tempTip.showSuccess(message);
+                },
+                errorTempTip(message) {
+                    window.tempTip.setDuration(2000);
+                    window.tempTip.setIndex(2005);
+                    window.tempTip.show(message);
+                },
+                submit() {
+                    let result = this.checkSubmitData();
+                    if (!result.success){
+                        this.error_message =result.message;
+                        this.errors[result.field] = result.message;
+                        return ;
+                    }
                     let url = "{{route("store.receivingMask.storeApi")}}";
                     let form = document.getElementById("receiving-task-form");
                     let formData = new FormData(form);
-                    this.asn_header.forEach(e=>{
-                        if (e.selected)formData.append('asn_nodes',e.asn_no);
+                    this.selected_asn_nos.forEach(e => {
+                        if (e) formData.append('asn_nos[]', e);
                     });
-                    window.axios.post(url,formData,{
-                        'Content-Type':'multipart/form-data'
-                    }).then(res=>{
-                        if (res.data.success){
+                    window.axios.post(url, formData, {
+                        'Content-Type': 'multipart/form-data'
+                    }).then(res => {
+                        if (res.data.success) {
                         }
-                    }).catch(err=>{
+                    }).catch(err => {
                     })
-                }
+                },
+                getASNDetails() {
+                    let {owner_id} = this.receiving_task;
+                    let owner = this.owners.filter(e => e.id === owner_id).find(e => e);
+                    if (!owner) return;
+                    let url = '{{route('oracle.asn.getToBeProcessApi')}}';
+                    let data = {customer_id: owner.value};
+                    window.axios.post(url, data).then(res => {
+                        if (res.data.success) {
+                            this.asn_headers = this.formatAsnHeaderDetails(res.data.data);
+                        }
+                    }).catch(err => {
+                        this.errorTempTip(err);
+                    });
+                    this.clearError('owner_id');
+                },
+                formatAsnHeaderDetails(asnHeaderDetails) {
+                    return asnHeaderDetails.map(e => this.formatAsnHeaderDetail(e));
+                },
+                formatAsnHeaderDetail(asnHeaderDetail) {
+                    let asn_details = asnHeaderDetail.asn_details ? asnHeaderDetail.asn_details : [];
+                    let anticipated_sum_number = this.getAnticipatedSumNumber(asn_details);
+                    return {
+                        customer_id: asnHeaderDetail.bas_customer ? asnHeaderDetail.bas_customer.descr_c : '',
+                        asn_no: asnHeaderDetail.asnno ? asnHeaderDetail.asnno : '',
+                        asn_type: asnHeaderDetail.asn_type ? asnHeaderDetail.asn_type.codename_c : '',
+                        asn_status: asnHeaderDetail.asn_status ? asnHeaderDetail.asn_status.codename_c : '',
+                        up_stream_number: asnHeaderDetail.asnreference1 ? asnHeaderDetail.asncreationtime :'',
+                        anticipated_sum_number:  anticipated_sum_number,
+                        number1: asnHeaderDetail.asnreference1 ? asnHeaderDetail.asnreference1 : '',
+                        number2: asnHeaderDetail.asnreference2 ? asnHeaderDetail.asnreference2 : '',
+                        number3: asnHeaderDetail.asnreference3 ? asnHeaderDetail.asnreference3 : '',
+                        receiving_time: asnHeaderDetail.asncreationtime ? asnHeaderDetail.asncreationtime :'',
+                        details: this.formatAsnDetails(asn_details),
+                    };
+                },
+                formatAsnDetails(asnDetails) {
+                    return asnDetails.map(e => this.formatAsnDetail(e));
+                },
+                formatAsnDetail(asnDetail) {
+                    return {
+                        line_status: asnDetail.line_status ? asnDetail.line_status.codename_c : '',
+                        name: asnDetail.bas_sku ? asnDetail.bas_sku.descr_c : '',
+                        code1: asnDetail.bas_sku ? asnDetail.bas_sku.alternate_sku1 : '',
+                        code2: asnDetail.bas_sku ? asnDetail.bas_sku.alternate_sku2 : '',
+                        code3: asnDetail.bas_sku ? asnDetail.bas_sku.alternate_sku3 : '',
+                        anticipated_number: asnDetail.receivedqty_each ? asnDetail.receivedqty_each : '',
+                        number: asnDetail.receivedqty ? asnDetail.receivedqty : '',
+                    }
+                },
+                getAnticipatedSumNumber(asnDetails) {
+                    if (asnDetails.length === 0) return 0;
+                    let sum = asnDetails.reduce((total, e) => {
+                        return total + Number(e.receivedqty_each);
+                    },0);
+                    return sum ? sum : 0;
+                },
+                rowClick(){
+                    console.log("rowClick");
+                },
+                showAsnDetails(row, column, event){
+                    this.$refs.asn_headers_table.setCurrentRow(row);
+                    this.asn_details = row.details;
+                    console.log(this.asn_details);
+                },
+                handleSelectionChange(val) {
+                    this.selected_asn_nos = val.map(e=>e.asn_no);
+                },
+                checkSubmitData(){
+                    let result = {success:true,message:'',field:'',};
+                    let {
+                        warehouse_id,owner_id,
+                        driver_name,driver_phone,for_single_member,
+                        plate_number,driving_license_no,logistics_single_number,
+                        provide_list,receiving_type,delivery_appointment_number
+                    } = this.receiving_task;
 
+                    if (!warehouse_id){
+                        result = {success:false,message:"仓库为必选项",field:'warehouse_id'};
+                    } else if (!owner_id){
+                        result = {success:false,message:"货主为必选项",field:'owner_id'};
+                    } else if(!driver_name){
+                        result = {success:false,message:"司机姓名不能为空",field:'driver_name'};
+                    }else if(!driver_phone){
+                        result = {success:false,message:"司机电话不能为空",field:'driver_phone'};
+                    }else if(!for_single_member){
+                        result = {success:false,message:"投单员不能为空",field:'for_single_member'};
+                    } else if(!provide_list){
+                        result = {success:false,message:"是否提供清单为必填项",field:'provide_list'};
+                    } else if (!receiving_type){
+                        result = {success:false,message:"收货类型不能为空",field:'provide_list'};
+                    }else if (!delivery_appointment_number){
+                        result = {success:false,message:"预约单号不能为空",field:'delivery_appointment_number'};
+                    }
+                    if (!result.success) return result;
+                    if (!logistics_single_number){
+                        if (!plate_number){
+                            result = {success:false,message:"车牌号不能为空",field:'plate_number'};
+                        } else if(!driving_license_no) {
+                            result = {success:false,message:"驾驶证号",field:'driving_license_no'};
+                        }
+                    }
+                    return result;
+                },
+                clearError(field){
+                    this.errors[field] ? this.errors[field] = '' : null;
+                },
+                checkLogisticsSingleIsWrite(){
+                    if (this.receiving_task.plate_number)return true;
+                    else if (this.receiving_task.driving_license_no)return true;
+                    return false;
+                },
+                checkLogisticsSingleNumber(){
+                    if (this.receiving_task.plate_number)return true;
+                    else if (this.receiving_task.driving_license_no)return true;
+                    return false;
+                },
+                setBarcode(){
+                    window.setBarcode("123123","#receiving-task-print-code", 2, 50, true);
+                    $("#receiving-task-print-code").width("600px").height("120px");
+                },
+                printReceivingTask(task){
+                    this.receiving_task_print = task;
+                    this.setBarcode();
+                    setTimeout(()=>{
+                        this.formPrint();
+                        this.transformCode();
+                    },2000);
+                },
+                formPrint(){
+                    let iframe=document.getElementById("print-iframe");
+                    this.infoShow=true;
+                    if(!iframe){
+                        iframe = document.createElement('IFRAME');
+                        iframe.setAttribute("id", "print-iframe");
+                        iframe.setAttribute('style', 'position:absolute;width:0;height:0;left:-500px;top:-500px;');
+                        document.body.appendChild(iframe);
+                    }else iframe.contentWindow.document.getElementById("iframe-content").remove();
+                    let doc = iframe.contentWindow.document;
+                    let el = document.getElementById("print-receiving-task");
+                    doc.write('<LINK rel="stylesheet" type="text/css" href="{{ asset(mix("css/app.css")) }}">');
+                    doc.write('<div id="iframe-content">' + el.innerHTML + '</div>');
+                    doc.close();
+                    iframe.contentWindow.focus();
+                    this.infoShow=false;
+                    setTimeout(function () {
+                        iframe.contentWindow.print();
+                        if (navigator.userAgent.indexOf("MSIE") > 0){
+                            document.body.removeChild(iframe);
+                        }
+                    },200);
+                },
+                print(){
+                    $("#receiving-task-print").removeClass("d-none");
+                    this.printReceivingTask({
+                        number:123123123,
+                        warehouse:123123123,
+                        for_single_member:123123123,
+                        driver_name:123123123,
+                        driver_phone:123123123,
+                        plate_number:123123123,
+                        driving_license_no:123123123,
+                        provide_list:123123123,
+                        receiving_type:123123123,
+                        owner:123123123,
+                        delivery_appointment_number:123123123,
+                    });
+                },
+                transformCode(){
+                    let item = document.getElementById('receiving-task-print-code');
+                    let scale = item.scale;
+                    let height = item.offsetHeight;
+                    let width = item.offsetWidth;
+                    console.log(height);
+                    console.log(width);
+                    style.transform =  `scale(${scale},${scale})`;
+                },
+                htmlToImage(){
+                    window.html2canvas("#print-receiving-task").then((canvas)=>{
+                        let imagUri = canvas.toDataURL();
+                    });
+                },
             }
         })
     </script>

+ 7 - 1
routes/apiLocal.php

@@ -65,7 +65,13 @@ Route::group(['prefix' => 'personnel'], function () {
 // 开单入库
 Route::prefix('store')->group(function(){
     Route::prefix('receivingMask')->group(function(){
-        Route::get("/createApi","ReceivingTaskController@storeApi")->name("store.receivingMask.storeApi");
+        Route::post("/createApi","ReceivingTaskController@storeApi")->name("store.receivingMask.storeApi");
+    });
+});
+Route::prefix('oracle')->group(function(){
+    Route::prefix('asn')->group(function(){
+        Route::post("/toBeProcess/CustomerId","OracleDOCAsnHeaderController@getToBeProcessAsnHeaderDetailsApi")
+            ->name("oracle.asn.getToBeProcessApi");
     });
 });