Bläddra i källkod

Merge branch 'yang'

# Conflicts:
#	app/Http/Controllers/TestController.php
zhouzhendong 4 år sedan
förälder
incheckning
89f4109105

+ 53 - 27
app/Http/Controllers/LaborCompanyController.php

@@ -4,55 +4,68 @@ namespace App\Http\Controllers;
 
 use App\LaborCompany;
 use App\Warehouse;
+use Illuminate\Contracts\Foundation\Application;
+use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
+use Illuminate\Routing\Redirector;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
+use Illuminate\Validation\ValidationException;
 
 class LaborCompanyController extends Controller
 {
 
     public function index()
     {
-        if(!Gate::allows('劳务所-查询')){ return redirect(url('/'));  }
-        $laborCompanys=LaborCompany::query()
+        if (!Gate::allows('劳务所-查询')) {
+            return redirect(url('/'));
+        }
+        $laborCompanys = LaborCompany::query()
             ->with(['warehouse'])
-            ->orderBy('id','desc')
+            ->orderBy('id', 'desc')
             ->paginate(35);
-        return view('maintenance.laborCompany.index',['laborCompanys'=>$laborCompanys]);
+        return view('maintenance.laborCompany.index', ['laborCompanys' => $laborCompanys]);
     }
 
 
     public function create()
     {
-        if(!Gate::allows('劳务所-录入')){ return redirect(url('/'));  }
+        if (!Gate::allows('劳务所-录入')) {
+            return redirect(url('/'));
+        }
         $warehouses = Warehouse::all();
-        return view('maintenance.laborCompany.create',compact('warehouses'));
+        return view('maintenance.laborCompany.create', compact('warehouses'));
     }
 
 
     public function store(Request $request)
     {
-        if(!Gate::allows('劳务所-录入')){ return redirect(url('/'));  }
+        if (!Gate::allows('劳务所-录入')) {
+            return redirect(url('/'));
+        }
         $this->validatorCreate($request->all())->validate();
-        $laborCompany=new LaborCompany($request->all());
+        $laborCompany = new LaborCompany($request->all());
         $laborCompany->save();
         app('LaborCompanyService')->createRole($laborCompany);
-        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
-        return redirect('maintenance/laborCompany/create')->with('successTip',"成功录入劳务所“{$request->input('name')}”");
+        app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
+        return redirect('maintenance/laborCompany/create')->with('successTip', "成功录入劳务所“{$request->input('name')}”");
     }
+
     protected function validatorCreate(array $data)
     {
         return Validator::make($data, [
             'name' => ['required', 'string', 'max:50', 'unique:labor_companies'],
         ]);
     }
+
     protected function validatorUpdate(array $data)
     {
         return Validator::make($data, [
             'name' => ['required', 'string', 'max:50'],
         ]);
     }
+
     /**
      * Display the specified resource.
      *
@@ -72,27 +85,38 @@ class LaborCompanyController extends Controller
      */
     public function edit(LaborCompany $laborCompany)
     {
-        if(!Gate::allows('劳务所-编辑')){ return redirect(url('/'));  }
+        if (!Gate::allows('劳务所-编辑')) {
+            return redirect(url('/'));
+        }
         $warehouses = Warehouse::all();
-        return view('maintenance.laborCompany.edit',compact('laborCompany','warehouses'));
+        return view('maintenance.laborCompany.edit', compact('laborCompany', 'warehouses'));
     }
 
     /**
-     * Update the specified resource in storage.
-     *
      * @param Request $request
-     * @param  $laborCompany
-     * @return
+     * @param LaborCompany $laborCompany
+     * @return array|Application|RedirectResponse|Redirector|void
+     * @throws ValidationException
      */
     public function update(Request $request, LaborCompany $laborCompany)
     {
-        if(!Gate::allows('劳务所-编辑')){ return redirect(url('/'));  }
-        $this->validatorUpdate($request->all())->validate();
-        $laborCompany->fill($request->all());
-        $laborCompany->update();
-        app('LaborCompanyService')->updateRole($laborCompany);
-        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
-        return redirect('maintenance/laborCompany/')->with('successTip',"成功修改劳务所“{$laborCompany['name']}”!");
+        if (!Gate::allows('劳务所-编辑')) {
+            return redirect(url('/'));
+        }
+        if (!empty($request->input('name'))) {
+            $this->validatorUpdate($request->all())->validate();
+            $laborCompany->fill($request->all());
+            $laborCompany->update();
+            app('LaborCompanyService')->updateRole($laborCompany);
+            app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->toArray()), Auth::user()['id']);
+            return redirect('maintenance/laborCompany/')->with('successTip', "成功修改劳务所“{$laborCompany['name']}”!");
+        } else if (!empty($request->input('status'))) {
+            $laborCompany = LaborCompany::query()->find($request->input('id'));
+            $laborCompany->status = $request->input('status');
+            $laborCompany->save();
+            return ['success' => true, 'data' => ['status' => $request->input('status')]];
+        }
+
     }
 
     /**
@@ -104,9 +128,11 @@ class LaborCompanyController extends Controller
      */
     public function destroy(LaborCompany $laborCompany)
     {
-        if(!Gate::allows('劳务所-删除')){ return redirect(url('/'));  }
-        app('LogService')->log(__METHOD__,__FUNCTION__,$laborCompany->toJson(),Auth::user()['id']);
-        $re=$laborCompany->delete();
-        return ['success'=>$re];
+        if (!Gate::allows('劳务所-删除')) {
+            return redirect(url('/'));
+        }
+        app('LogService')->log(__METHOD__, __FUNCTION__, $laborCompany->toJson(), Auth::user()['id']);
+        $re = $laborCompany->delete();
+        return ['success' => $re];
     }
 }

+ 1 - 1
app/Http/Controllers/LaborCompanyDispatchController.php

@@ -21,7 +21,7 @@ class LaborCompanyDispatchController extends Controller
         /** @var Builder $builder */
         $builder = LaborCompanyDispatch::query()
             ->filter($filters)
-            ->with(['laborCompany.warehouse', 'laborCompanyDispatchDetails']);
+            ->with(['laborCompany', 'laborCompanyDispatchDetails','warehouse']);
 
         /** @var User $user */
         $user = auth()->user();

+ 29 - 0
app/LaborCompany.php

@@ -24,6 +24,35 @@ class LaborCompany extends Model
         'woman_num',//女工人数
     ];
 
+    static public $enums = [
+        'status' => [
+            '' => 0,
+            '启用' => 1,
+            '禁用' => 2,
+        ],
+    ];
+
+    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;
+        $this->attributes['status'] = self::$enums['status'][$value];
+    }
+
     /**
      * @return BelongsTo
      */

+ 6 - 0
app/LaborCompanyDispatch.php

@@ -24,6 +24,7 @@ class LaborCompanyDispatch extends Model
         'dispatch_date',//分配日期
         'exceed_max_labor_num_status',//是否超过最大允许值 1 未超过 2 超过
         'status',//状态
+        'warehouse_id',//仓库ID
     ];
 
 
@@ -72,6 +73,11 @@ class LaborCompanyDispatch extends Model
         return $this->hasMany(LaborCompanyDispatchDetail::class);
     }
 
+    public function warehouse(): BelongsTo
+    {
+        return $this->belongsTo(Warehouse::class);
+    }
+
     public function scopeFilter($query, $filters)
     {
         return $filters->apply($query);

+ 49 - 40
app/Services/LaborApplyService.php

@@ -108,15 +108,17 @@ class LaborApplyService
             if (empty($apply_man_nums)) continue;
             //按照仓库查询对应的劳务所
             $companies = $this->getCompanies($warehouse);
+            //没有找到劳务所直接跳出
+            if ($companies->isEmpty()) continue;
             //需要的男工人数
             $man_num = $apply_man_nums->man_num;
             //需要的女工人数
             $woman_num = $apply_man_nums->woman_num;
             //插入的分配数据
-            $laborCompanyDispatchInsertArray = $this->buildLaborCompanyDispatchInsertArray($companies, $man_num, $woman_num, $dispatch_date);
+            $laborCompanyDispatchInsertArray = $this->buildLaborCompanyDispatchInsertArray($companies, $man_num, $woman_num, $dispatch_date, $warehouse->id);
             //插入分配数据
             LaborCompanyDispatch::query()->insert($laborCompanyDispatchInsertArray);
-
+            //更新申请状态
             LaborApply::query()
                 ->whereBetween('created_at', [now()->startOfDay(), now()->endOfDay()])
                 ->where('warehouse_id', $warehouse->id)
@@ -135,9 +137,10 @@ class LaborApplyService
      * @param $man_num
      * @param $woman_num
      * @param string $dispatch_date
+     * @param int $warehouse_id
      * @return array
      */
-    private function buildLaborCompanyDispatchInsertArray(Collection $companies, $man_num, $woman_num, string $dispatch_date): array
+    private function buildLaborCompanyDispatchInsertArray(Collection $companies, $man_num, $woman_num, string $dispatch_date, int $warehouse_id): array
     {
         //分配数组
         $laborCompanyDispatchInsertArray = [];
@@ -150,45 +153,17 @@ class LaborApplyService
                 'woman_num' => 0,
                 'exceed_max_labor_num_status' => LaborCompanyDispatch::NOT_EXCEED_MAX_LABOR_NUM,//没有超限额
                 'status' => 1,//创建
+                'warehouse_id' => $warehouse_id,
             ];
         }
         //分配男工
-        //将需要的工人 依次分配给劳务公司 不管劳务公司能否承担这个人 假设都分配给他(-1)    不能的标记一下不分配 能的就真分配
-        while ($man_num > 0) {
-            foreach ($laborCompanyDispatchInsertArray as &$laborCompanyDispatchInsertItem) {
-                //当前 要分配到该劳务的男工数量
-                $current_man_num = ($laborCompanyDispatchInsertItem['man_num'] ?? 0) + 1;
-                //该劳务公司最大的分配人数
-                $company_can_apply_man_num = $companies->find($laborCompanyDispatchInsertItem['labor_company_id'])->man_num;
-                //超了
-                if ($current_man_num > $company_can_apply_man_num) {
-                    //设置状态为超量
-                    $laborCompanyDispatchInsertItem['exceed_max_labor_num_status'] = LaborCompanyDispatch::EXCEED_MAX_LABOR_NUM;
-                } else {
-                    //赋值给插入的数组
-                    $laborCompanyDispatchInsertItem['man_num'] = $current_man_num;
-                }
-                //需要分配的人数 -1
-                //不管人数超了还是没超 都要-1
-                $man_num--;
-            }
-            unset($laborCompanyDispatchInsertItem);
-        }
-
-        while ($woman_num > 0) {
-            foreach ($laborCompanyDispatchInsertArray as &$laborCompanyDispatchInsertItem) {
-                $current_woman_num = ($laborCompanyDispatchInsertItem['woman_num'] ?? 0) + 1;
-                $company_can_apply_woman_num = $companies->find($laborCompanyDispatchInsertItem['labor_company_id'])->woman_num;
-                if ($current_woman_num > $company_can_apply_woman_num) {
-                    $laborCompanyDispatchInsertItem['exceed_max_labor_num_status'] = LaborCompanyDispatch::EXCEED_MAX_LABOR_NUM;
-                } else {
-                    $laborCompanyDispatchInsertItem['woman_num'] = $current_woman_num;
-                }
-                $woman_num--;
-            }
-            unset($laborCompanyDispatchInsertItem);
-        }
-        return $laborCompanyDispatchInsertArray;
+        $this->dispatchWorker($man_num, $laborCompanyDispatchInsertArray, $companies, 'man_num');
+        //分配女工
+        $this->dispatchWorker($woman_num, $laborCompanyDispatchInsertArray, $companies, 'woman_num');
+        //保留 man_num || woman_num 不为0的
+        return array_filter($laborCompanyDispatchInsertArray, function ($item) {
+            return $item['man_num'] > 0 || $item['woman_num'] > 0;
+        });
     }
 
     /**
@@ -199,7 +174,9 @@ class LaborApplyService
     private function getCompanies($warehouse): Collection
     {
         return LaborCompany::query()
-            ->where('warehouse_id', $warehouse->id)->get();
+            ->where('warehouse_id', $warehouse->id)
+            ->where('status', 1)//状态为启用
+            ->get();
     }
 
     /**
@@ -250,4 +227,36 @@ class LaborApplyService
                 'status' => 4//任务完结
             ]);
     }
+
+    /**
+     * 将需要的工人 依次分配给劳务公司 不管劳务公司能否承担这个人 假设都分配给他(-1)    不能的标记一下不分配 能的就真分配
+     * @param $need_workers int 需要的人数
+     * @param array $laborCompanyDispatchInsertArray 插入的分配数据
+     * @param Collection $companies 劳务公司
+     * @param string $key 性别 man | woman
+     */
+    private function dispatchWorker(int $need_workers, array &$laborCompanyDispatchInsertArray, Collection $companies, string $key)
+    {
+        while ($need_workers > 0) {
+            foreach ($laborCompanyDispatchInsertArray as &$laborCompanyDispatchInsertItem) {
+                if ($need_workers <= 0) continue;
+                //当前 要分配到该劳务的男工数量
+                $current_worker_num = ($laborCompanyDispatchInsertItem[$key] ?? 0) + 1;
+                //该劳务公司最大的分配人数
+                $company_can_apply_worker_num = $companies->find($laborCompanyDispatchInsertItem['labor_company_id'])[$key];
+                //超了
+                if ($current_worker_num > $company_can_apply_worker_num) {
+                    //设置状态为超量
+                    $laborCompanyDispatchInsertItem['exceed_max_labor_num_status'] = LaborCompanyDispatch::EXCEED_MAX_LABOR_NUM;
+                } else {
+                    //赋值给插入的数组
+                    $laborCompanyDispatchInsertItem[$key] = $current_worker_num;
+                }
+                //需要分配的人数 -1
+                //不管人数超了还是没超 都要-1
+                $need_workers--;
+            }
+            unset($laborCompanyDispatchInsertItem);
+        }
+    }
 }

+ 32 - 0
database/migrations/2021_10_28_101509_add_status_to_labor_companies_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddStatusToLaborCompaniesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('labor_companies', function (Blueprint $table) {
+            $table->tinyInteger('status')->default(1)->comment('状态');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('labor_companies', function (Blueprint $table) {
+            $table->dropColumn('status');
+        });
+    }
+}

+ 32 - 0
database/migrations/2021_10_28_110839_add_warehouse_id_to_labor_company_dispatches_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddWarehouseIdToLaborCompanyDispatchesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('labor_company_dispatches', function (Blueprint $table) {
+            $table->unsignedInteger('warehouse_id')->nullable()->comment('仓库ID');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('labor_company_dispatches', function (Blueprint $table) {
+            $table->dropColumn('warehouse_id');
+        });
+    }
+}

+ 57 - 23
resources/views/maintenance/laborCompany/index.blade.php

@@ -19,7 +19,8 @@
                         <th>女工人数</th>
                         <th>操作</th>
                     </tr>
-                    <tr v-for="(laborCompany,i) in laborCompanys"  @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
+                    <tr v-for="(laborCompany,i) in laborCompanys" @click="selectTr===i+1?selectTr=0:selectTr=i+1"
+                        :class="{ focusing:selectTr===i+1 ,'text-muted': laborCompany.status==='禁用'}">
                         <td class="text-muted">@{{laborCompany.id}}</td>
                         <td>@{{laborCompany.name}}</td>
                         <td>@{{laborCompany.warehouse && laborCompany.warehouse.name}}</td>
@@ -30,9 +31,17 @@
                         <td class="text-muted">@{{laborCompany.created_at}}</td>
                         <td>
                             @can('劳务所-编辑')
-                            <button class="btn btn-sm btn-outline-primary" @click="edit(laborCompany.id)">改</button> @endcan
+                                <button class="btn btn-sm btn-outline-primary" @click="edit(laborCompany.id)">改
+                                </button> @endcan
                             @can('劳务所-删除')
-                            <button class="btn btn-sm btn-outline-dark" @click="destroy(laborCompany)">删</button> @endcan
+                                <button class="btn btn-sm btn-outline-dark" @click="destroy(laborCompany)">删
+                                </button> @endcan
+                            @can('劳务所-启用禁用')
+                                <button class="btn btn-sm"
+                                        :class="laborCompany.status==='启用'?'btn btn-outline-danger':'btn btn-outline-success'"
+                                        @click="openOrClose(laborCompany)">@{{ laborCompany.status==='启用'?'禁用':'启用' }}
+                                </button>
+                            @endcan
                         </td>
                     </tr>
                 </table>
@@ -45,44 +54,69 @@
 @section('lastScript')
     <script>
         new Vue({
-            el:"#list",
-            data:{
-                laborCompanys:[
+            el: "#list",
+            data: {
+                laborCompanys: [
                     @foreach( $laborCompanys as $laborCompany )
-                    {!! $laborCompany !!},
+                        {!! $laborCompany !!},
                     @endforeach
                 ],
-                selectTr:0
+                selectTr: 0
             },
-            methods:{
-                edit:function(id){
-                    location.href = "{{url('maintenance/laborCompany')}}/"+id+"/edit";
+            methods: {
+                edit: function (id) {
+                    location.href = "{{url('maintenance/laborCompany')}}/" + id + "/edit";
                 },
-                destroy:function(laborCompany){
-                    if(!confirm('确定要删除劳务所“' + laborCompany.name + '”吗?')){return};
-                    let data=this;
-                    let url = "{{url('maintenance/laborCompany')}}/"+laborCompany.id;
-                    axios.delete(url,{id:laborCompany.id})
+                destroy: function (laborCompany) {
+                    if (!confirm('确定要删除劳务所“' + laborCompany.name + '”吗?')) {
+                        return
+                    }
+                    ;
+                    let data = this;
+                    let url = "{{url('maintenance/laborCompany')}}/" + laborCompany.id;
+                    axios.delete(url, {id: laborCompany.id})
                         .then(function (response) {
-                            if(response.data.success){
+                            if (response.data.success) {
                                 for (let i = 0; i < data.laborCompanys.length; i++) {
-                                    if (data.laborCompanys[i].id===laborCompany.id){
-                                        data.laborCompanys.splice(i,1);
+                                    if (data.laborCompanys[i].id === laborCompany.id) {
+                                        data.laborCompanys.splice(i, 1);
                                         break;
                                     }
                                 }
                                 tempTip.setDuration(1000);
-                                tempTip.showSuccess('删除劳务所"'+laborCompany.name+'"成功!')
-                            }else{
+                                tempTip.showSuccess('删除劳务所"' + laborCompany.name + '"成功!')
+                            } else {
                                 tempTip.setDuration(1000);
-                                tempTip.show('删除劳务所"'+laborCompany.name+'"失败!')
+                                tempTip.show('删除劳务所"' + laborCompany.name + '"失败!')
                             }
                         })
                         .catch(function (err) {
                             tempTip.setDuration(3000);
-                            tempTip.show('删除物流公司失败!'+'网络错误:' + err)
+                            tempTip.show('删除物流公司失败!' + '网络错误:' + err)
                         });
                 },
+                openOrClose(laborCompany) {
+                    let status = laborCompany.status === '启用' ? '禁用' : '启用';
+                    if (!confirm("确定要" + status + "劳务所" + laborCompany.name + '”吗?')) {
+                        return
+                    }
+                    let url = "{{url('maintenance/laborCompany')}}/";
+                    axios.put(url + laborCompany.id, {id: laborCompany.id, status: status})
+                        .then(response => {
+                            if (response.data.success) {
+                                laborCompany.status = response.data.data.status;
+                                tempTip.setDuration(1000);
+                                tempTip.showSuccess('更新劳务所"' + laborCompany.name + '"成功!')
+                            } else {
+                                tempTip.setDuration(1000);
+                                tempTip.show('更新劳务所"' + laborCompany.name + '"失败!')
+                            }
+                        })
+                        .catch(function (err) {
+                            tempTip.setDuration(3000);
+                            tempTip.show('更新劳务所失败!' + '网络错误:' + err)
+                        });
+                }
             }
         });
     </script>

+ 1 - 1
resources/views/personnel/laborApply/dispatch/index.blade.php

@@ -63,7 +63,7 @@
                         @endcan()
                     </td>
                     <td>@{{ labor_company_dispatch.labor_company.name }}</td>
-                    <td>@{{ labor_company_dispatch.labor_company.warehouse.name }}</td>
+                    <td>@{{ labor_company_dispatch.warehouse ?labor_company_dispatch.warehouse.name:''}}</td>
                     <td><span :class="getStatusClass(labor_company_dispatch.status)">@{{ labor_company_dispatch.status }}</span>
                     </td>
                     <td>@{{ labor_company_dispatch.man_num }}</td>