Explorar o código

修改部分方法

loustwo %!s(int64=4) %!d(string=hai) anos
pai
achega
927413d0b9

+ 20 - 14
app/Http/Controllers/ReceivingTaskController.php

@@ -2,13 +2,14 @@
 
 namespace App\Http\Controllers;
 
-use App\DeliveryAppointment;
+use App\DeliveryAppointmentCar;
+use App\Filters\ReceivingTaskFilters;
 use App\Http\Requests\Api\ReceivingTaskRequest;
 use App\ReceivingTask;
 use App\Services\OwnerService;
 use App\Services\ReceivingTaskService;
 use App\Warehouse;
-use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Request;
 
 class ReceivingTaskController extends Controller
 {
@@ -25,32 +26,37 @@ class ReceivingTaskController extends Controller
         $this->ownerService = app(OwnerService::class);
     }
 
-    public function index()
+    public function index(Request $request,ReceivingTaskFilters $filter)
     {
-        $wareHouse = Warehouse::query()->get();
-        $owners = $this->ownerService->getQuery()->select("id","code","name")->get();
-        return view("store.receivingTasks.create",compact('wareHouse','owners'));
+        $receivingTasks = ReceivingTask::query()->with(['items','owner','warehouse','file'])->filter($filter)->orderByDesc('created_at')->paginate(50);
+        $owners = $this->ownerService->getQuery()->select('id','name')->get();
+        $warehouses  = Warehouse::query()->get();
+        return view("store.receivingTasks.index",compact('receivingTasks','owners','warehouses'));
     }
 
 
     public function create()
     {
-
+        $wareHouse = Warehouse::query()->get();
+        $owners = $this->ownerService->getQuery()->select("id","code","name")->get();
+        return view("store.receivingTasks.create",compact('wareHouse','owners'));
     }
 
 
     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' => '预约号已有对应的任务'];
+        $appointment_number = $request->input('appointment_number',null);
+        $delivery_appointment_car = DeliveryAppointmentCar::query()->where('appointment_number',$appointment_number)->first();
+        if (!$delivery_appointment_car) return ['success' => false,'errors' =>['appointment_number' => ['对应预约号未找到']]];
+        if (ReceivingTask::query()->where('delivery_appointment_car_id',$delivery_appointment_car->id)->exists())
+            return ['success' => false, 'errors' =>['appointment_number' => ['预约号已有对应的任务']]];
         try {
-            $receiving_task = $this->service->createReceivingTask($delivery_appointment, $request->all());
-            $receiving_task->loadMissing("deliveryAppointment");
+            $receiving_task = $this->service->createReceivingTask($delivery_appointment_car, $request->all());
+            if (!$receiving_task->id) return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试'];
+            $receiving_task->loadMissing(['wareHouse','owner','deliveryAppointmentCar']);
             return ['success' => true, 'data' => $receiving_task];
         } catch (\Exception $e) {
+            dd($e->getMessage());
             return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试'];
         }
     }

+ 3 - 2
app/Http/Controllers/TestController.php

@@ -10,6 +10,7 @@ use App\CommodityMaterialBoxModel;
 use App\Components\AsyncResponse;
 use App\Components\Database;
 use App\Components\ErrorPush;
+use App\DeliveryAppointmentCar;
 use App\ErrorTemp;
 use App\Feature;
 use App\Http\ApiControllers\LoginController;
@@ -356,8 +357,8 @@ class TestController extends Controller
     }
 
     public function testCount(){
-        $service = new ReceivingTaskService();
-        dd($service->buildTaskNumber());
+        dd(DeliveryAppointmentCar::query()->where('appointment_number','admin123546')->first());
+
     }
 
 

+ 3 - 3
app/Http/Requests/Api/ReceivingTaskRequest.php

@@ -29,7 +29,7 @@ class ReceivingTaskRequest extends FormRequest
         return [
             'warehouse_id' => 'required',
             'owner_id' => 'required',
-            'delivery_appointment_number' => 'required',
+            'appointment_number' => ['required'],
             'driver_name' => 'required',
             'driver_phone' => 'required',
             'for_single_member' => 'required',
@@ -45,8 +45,8 @@ class ReceivingTaskRequest extends FormRequest
         return [
             'warehouse_id.required' => "仓库为必选项",
             'owner_id.required' => "货主为必选",
-            'delivery_appointment_number.exists' => "预约单号不存在",
-            'delivery_appointment_number.required' => "预约单号不能为空",
+            'appointment_number.exists' => "预约单号不存在",
+            'appointment_number.required' => "预约单号不能为空",
             'driver_name.required' => "司机不能为空",
             'driver_phone.required' => "司机联系号码不能为空",
             'for_single_member.required' => "投单员不能为空",

+ 15 - 10
app/ReceivingTask.php

@@ -2,22 +2,22 @@
 
 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\Relations\HasMany;
 use Illuminate\Database\Eloquent\Relations\HasOne;
-use Ramsey\Uuid\Uuid;
 
 class ReceivingTask extends Model
 {
-    use ModelLogChanging;
+    use ModelTimeFormat;
 
     protected $fillable = [
         'number',
         'warehouse_id',
         'owner_id',
-        'delivery_appointment_id',
+        'delivery_appointment_car_id',
         'driver_name',
         'driver_phone',
         "for_single_member",
@@ -29,19 +29,24 @@ class ReceivingTask extends Model
         'status',
     ];
 
-    public function wareHouse(): HasOne
+    public function scopeFilter($query, $filters)
     {
-        return $this->hasOne(Warehouse::class);
+        return $filters->apply($query);
     }
 
-    public function owner(): HasOne
+    public function wareHouse(): BelongsTo
     {
-        return $this->hasOne(Owner::class);
+        return $this->belongsTo(Warehouse::class);
     }
 
-    public function deliveryAppointment(): HasOne
+    public function owner(): BelongsTo
     {
-        return $this->hasOne(DeliveryAppointment::class);
+        return $this->belongsTo(Owner::class);
+    }
+
+    public function deliveryAppointmentCar(): BelongsTo
+    {
+        return $this->belongsTo(DeliveryAppointmentCar::class);
     }
 
     public function items(): HasMany

+ 3 - 2
app/ReceivingTaskItem.php

@@ -4,6 +4,7 @@ namespace App;
 
 use Illuminate\Database\Eloquent\Model;
 
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\HasOne;
 
 class ReceivingTaskItem extends Model
@@ -13,9 +14,9 @@ class ReceivingTaskItem extends Model
         'receiving_task_id','asn_no',
     ];
 
-    public function receivingTask(): HasOne
+    public function receivingTask(): BelongsTo
     {
-        return $this->hasOne(ReceivingTask::class);
+        return $this->belongsTo(ReceivingTask::class);
     }
 
     public function docASNHeader(): HasOne

+ 17 - 3
app/Services/ReceivingTaskItemService.php

@@ -1,13 +1,27 @@
-<?php 
+<?php
 
 namespace App\Services;
 
+use App\ReceivingTask;
 use App\Traits\ServiceAppAop;
 use App\ReceivingTaskItem;
 
 class ReceivingTaskItemService
 {
     use ServiceAppAop;
-    protected $modelClass=ReceivingTaskItem::class;
 
-}
+    protected $modelClass = ReceivingTaskItem::class;
+
+    public function createItems($task, $asn_nos)
+    {
+        if (is_array($asn_nos)) {
+            foreach ($asn_nos as $no) {
+                $task->items()->create(['asn_no' => $no]);
+            }
+        } else if (is_string($asn_nos)){
+            $task->items()->create(['asn_no' => $asn_nos]);
+        }
+
+    }
+
+}

+ 56 - 29
app/Services/ReceivingTaskService.php

@@ -3,56 +3,71 @@
 namespace App\Services;
 
 use App\DeliveryAppointment;
+use App\DeliveryAppointmentCar;
 use App\Traits\ServiceAppAop;
 use App\ReceivingTask;
 use Illuminate\Support\Carbon;
+use Illuminate\Support\Facades\DB;
 use Ramsey\Uuid\Uuid;
 
 class ReceivingTaskService
 {
     use ServiceAppAop;
-    protected $modelClass=ReceivingTask::class;
+
+    protected $modelClass = ReceivingTask::class;
+
+    private $itemService;
+
+    public function __construct()
+    {
+        $this->itemService =app(ReceivingTaskItemService::class);
+    }
+
 
     public function endTask($receivingTaskNumber)
     {
-        ReceivingTask::query()->where('number',$receivingTaskNumber)->update(['status' => '完成']);
+        ReceivingTask::query()->where('number', $receivingTaskNumber)->update(['status' => '完成']);
     }
 
-    public function executionTask($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
+    public function createReceivingTask(DeliveryAppointmentCar $delivery_appointment_car, $params): 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']);
+        $params['delivery_appointment_car_id'] = $delivery_appointment_car->id;         // 预约号
+        $receivingTask = new ReceivingTask($params);
+        DB::transaction(function () use ($delivery_appointment_car, $params, &$receivingTask) {
+            $receivingTask->save();
+            if ($receivingTask->id) {
+                try {
+                    $this->itemService->createItems($receivingTask,$params['asn_nos'] ?? []);
+                    $this->saveImage($receivingTask, $params['driving_license_image']);
+                    DB::commit();
+                } catch (\Exception $e) {
+                    DB::rollBack();
+                }
+            }
+        });
         return $receivingTask;
     }
 
-    public function saveImage(ReceivingTask $receivingTask,$image): bool
+    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;
+        $pathName = $dirPath . $fileName . '.' . $fileSuffix;
         $result = move_uploaded_file($tmpFile, $pathName);
-        if(!$result) return false;
+        if (!$result) return false;
         $receivingTask->file()->create(
-            [ 'url' => '/files/receivingTask/'.$fileName, 'type' => $fileSuffix,'table_name'=>$receivingTask->getTable()]
+            ['url' => '/files/receivingTask/' . $fileName, 'type' => $fileSuffix, 'table_name' => $receivingTask->getTable()]
         );
         return true;
     }
@@ -63,32 +78,44 @@ class ReceivingTaskService
         $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;
+        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);
+        $path = ['app', 'public', 'files', 'receivingTask'];
+        $path = join(DIRECTORY_SEPARATOR, $path);
         $dirPath = storage_path($path);
         if (!file_exists($dirPath)) {
             mkdir($dirPath);
         }
-        return $dirPath.DIRECTORY_SEPARATOR;
+        return $dirPath . DIRECTORY_SEPARATOR;
     }
 
-    public function buildTaskNumber():string
+    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')
+            ->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;
+        $count = sprintf('%03s', $count);
+        return "SH$year_month_day" . $count;
+    }
+
+    /**
+     * 完结昨天未完成的工单
+     */
+    public function endReceivingTask(){
+        $yesterday = Carbon::now()->subDays(1)->format("Y-m-d");
+        ReceivingTask::query()
+            ->where('created_at', '>=', $yesterday . ' 00:00:00')
+            ->where('created_at', '<=', $yesterday . ' 23.59.59')
+            ->update(['status'=>'完成']);
+
     }
 }