Bläddra i källkod

添加处理人

zengjun 3 år sedan
förälder
incheckning
9630d83d0f

+ 2 - 0
app/Http/Controllers/LaborCompanyDispatchController.php

@@ -6,6 +6,7 @@ use App\Filters\LaborCompanyDispatchFilters;
 use App\LaborApply;
 use App\LaborCompany;
 use App\LaborCompanyDispatch;
+use App\Services\LaborCompanyDispatchDetailService;
 use App\User;
 use App\Warehouse;
 use Illuminate\Database\Eloquent\Builder;
@@ -69,6 +70,7 @@ class LaborCompanyDispatchController extends Controller
         $laborCompanyDispatch->laborCompanyDispatchDetails()->createMany(
             $request->input('users')
         );
+        app(LaborCompanyDispatchDetailService::class)->allocation($laborCompanyDispatch);
         return redirect(route('laborCompanyDispatch.index'))->with('success', '添加临时工详情成功!');
     }
 

+ 2 - 0
app/LaborCompanyDispatchDetail.php

@@ -15,6 +15,8 @@ class LaborCompanyDispatchDetail extends Model
         'gender',//性别
         'age',//年龄
         'card_id',//身份证
+        'apply_user_id',//申请人
+        'user_work_group_id',//工作组
     ];
 
     static public $enums = [

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -32,6 +32,7 @@ use App\Services\ForeignHaiRoboticsService;
 use App\Services\InventoryAccountMissionService;
 use App\Services\InventoryAccountService;
 use App\Services\InventoryCompareService;
+use App\Services\LaborCompanyDispatchDetailService;
 use App\Services\LaborReportsCountingRecordService;
 use App\Services\LogisticSFService;
 use App\Services\LogisticYTOService;
@@ -428,6 +429,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('WorkOrderProcessLogService',WorkOrderProcessLogService::class);
         app()->singleton('WorkOrderService',WorkOrderService::class);
         app()->singleton('WorkOrderTypeService',WorkOrderTypeService::class);
+        app()->singleton('LaborCompanyDispatchDetailService',LaborCompanyDispatchDetailService::class);
     }
 
     private function registerObserver()

+ 136 - 0
app/Services/LaborCompanyDispatchDetailService.php

@@ -0,0 +1,136 @@
+<?php
+
+namespace App\Services;
+
+use App\Http\Controllers\Controller;
+use App\LaborApply;
+use App\LaborCompanyDispatch;
+use App\LaborCompanyDispatchDetail;
+use Carbon\Carbon;
+
+class LaborCompanyDispatchDetailService extends Controller
+{
+    /**
+     * 给劳工指定领队人
+     *
+     * @param LaborCompanyDispatch $laborCompanyDispatch
+     */
+    public function allocation(LaborCompanyDispatch $laborCompanyDispatch)
+    {
+        $date = Carbon::parse($laborCompanyDispatch->created_at);
+        $startDay = $date->startOfDay()->toDateTimeString();
+        $endDay = $date->endOfDay()->toDateTimeString();
+
+        $isAllEnd = LaborCompanyDispatch::query()
+            ->whereBetween('created_at', [$startDay, $endDay])
+            ->where('man_num', '!=', 0)
+            ->where('woman_num', '!=', 0)
+            ->whereNotIn('status', [3, 4])->exists();
+        if ($isAllEnd) {
+            return;
+        }
+        $laborApplies = LaborApply::query()->whereBetween('created_at', [$startDay, $endDay])->get();
+        // [warehouse_id->[user_workgroup_id->[man_num,woman_num]]] requirements
+        $laborApplyMap = $this->getLaborApplyMap($laborApplies);
+
+        $laborCompanyDispatchItems = LaborCompanyDispatch::query()->with("laborCompanyDispatchDetails")->whereBetween('created_at', [$startDay, $endDay])->get();
+        // [warehouse_id->[manIds,womanIds]]  provision
+        $laborCompanyApplyMap = $this->getLaborCompanyApplyMap($laborCompanyDispatchItems);
+
+        $array = [];
+        foreach ($laborApplyMap as $warehouseId => $laborRequirements) {
+            if (!array_key_exists($warehouseId, $laborCompanyApplyMap))
+                continue;
+
+            // $laborRequirements -> [user_workgroup_id->[man_num,woman_num]]  [requirements]
+            // $laborCompanyProvision -> [manIds,womanIds]  [provision]
+            $laborCompanyProvision = $laborCompanyApplyMap[$warehouseId];
+            foreach ($laborRequirements as $applyUserId => $requirement) {
+                if (!array_key_exists($applyUserId, $array)) {
+                    $array[$applyUserId] = [];
+                }
+                while (count($laborCompanyProvision['manIds']) > 0 && $requirement['manAmount'] > 0) {
+                    array_push($array[$applyUserId], array_shift($laborCompanyProvision['manIds']));
+                    $requirement['manAmount']--;
+                }
+                while (count($laborCompanyProvision['womanIds']) > 0 && $requirement['womanAmount'] > 0) {
+                    array_push($array[$applyUserId], array_shift($laborCompanyProvision['womanIds']));
+                    $requirement['womanAmount']--;
+                }
+            }
+        }
+        foreach ($array as $key => $value) {
+            LaborCompanyDispatchDetail::query()->whereIn('id', $value)->update(['apply_user_id' => $key]);
+        }
+    }
+
+
+    /**
+     * @param $laborApplies
+     * @return mixed
+     */
+    public function getLaborApplyMap($laborApplies)
+    {
+        $laborApplyMap = [];
+        foreach ($laborApplies as $item) {
+            if (array_key_exists($item->warehouse_id, $laborApplyMap)) {
+                if (array_key_exists($item->user_workgroup_id, $laborApplyMap[$item->warehouse_id])) {
+                    $laborApplyMap[$item->warehouse_id][$item->apply_user_id]['manAmount'] += $item->man_num;
+                    $laborApplyMap[$item->warehouse_id][$item->apply_user_id]['womanAmount'] += $item->woman_num;
+                } else {
+                    $laborApplyMap[$item->warehouse_id][$item->apply_user_id] = ['manAmount' => $item->man_num, 'womanAmount' => $item->woman_num];
+                }
+            } else {
+                $laborApplyMap[$item->warehouse_id][$item->apply_user_id] = ['manAmount' => $item->man_num, 'womanAmount' => $item->woman_num];
+            }
+        }
+        return $laborApplyMap;
+    }
+
+    /**
+     * @param $laborCompanyDispatchItems
+     * @return mixed
+     */
+    public function getLaborCompanyApplyMap($laborCompanyDispatchItems)
+    {
+
+        $appliesItemsMap = [];
+        foreach ($laborCompanyDispatchItems as $item) {
+            $manIds = $this->manAmountFor($item->laborCompanyDispatchDetails);
+            $womanIds = $this->womanAmountFor($item->laborCompanyDispatchDetails);
+            if (array_key_exists($item->warehouse_id, $appliesItemsMap)) {
+                $appliesItemsMap[$item->warehouse_id]['manIds'] = array_merge($appliesItemsMap[$item->warehouse_id]['manIds'], $manIds);
+                $appliesItemsMap[$item->warehouse_id]['womanIds'] = array_merge($appliesItemsMap[$item->warehouse_id]['womanIds'], $womanIds);
+            } else {
+                $appliesItemsMap[$item->warehouse_id] = [
+                    'manIds' => $manIds,
+                    'womanIds' => $womanIds,
+                ];
+            }
+        }
+        return $appliesItemsMap;
+    }
+
+
+    private function manAmountFor($laborCompanyDispatchDetails)
+    {
+        $manIds = [];
+        foreach ($laborCompanyDispatchDetails as $item) {
+            if ($item->gender == '男') {
+                array_push($manIds, $item->id);
+            }
+        }
+        return $manIds;
+    }
+
+    private function womanAmountFor($laborCompanyDispatchDetails)
+    {
+        $womanIds = [];
+        foreach ($laborCompanyDispatchDetails as $item) {
+            if ($item->gender == '女') {
+                array_push($womanIds, $item->id);
+            }
+        }
+        return $womanIds;
+    }
+}

+ 1 - 26
resources/views/personnel/laborApply/dispatch/detail/create.blade.php

@@ -6,7 +6,7 @@
         <div class="card col-md-8 offset-md-2">
             <div class="card-body">
                 <form action="{{ route('laborCompanyDispatch.storeDetail', $laborCompanyDispatch->id) }}" method="post"
-                      style="display: inline-block;" id="create-form"
+                      style="display: inline-block;" id="storeDetail"
                       onsubmit="return check()">
                     {{ csrf_field() }}
                     <div class="form-group">
@@ -76,7 +76,6 @@
                     } else {
                         window.tempTip.show("不能超过最大人数限制!");
                     }
-                    console.log(this.items);
                 },
                 check() {
                     for (let i = 0; i < this.items.length; i++) {
@@ -159,30 +158,6 @@
                             'pass': false,
                             'msg': '身份证号地址编码错误'
                         };
-                    } else {
-                        //18位身份证需要验证最后一位校验位
-                        if (code.length === 18) {
-                            code = code.split('');
-                            //∑(ai×Wi)(mod 11)
-                            //加权因子
-                            let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
-                            //校验位
-                            let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
-                            let sum = 0;
-                            let ai = 0;
-                            let wi = 0;
-                            for (var i = 0; i < 17; i++) {
-                                ai = code[i];
-                                wi = factor[i];
-                                sum += ai * wi;
-                            }
-                            if (parity[sum % 11] !== code[17].toUpperCase()) {
-                                row = {
-                                    'pass': false,
-                                    'msg': '身份证号校验位错误'
-                                };
-                            }
-                        }
                     }
                     return row;
                 }

+ 0 - 24
resources/views/personnel/laborApply/dispatch/detail/edit.blade.php

@@ -165,30 +165,6 @@
                             'pass': false,
                             'msg': '身份证号地址编码错误'
                         };
-                    } else {
-                        //18位身份证需要验证最后一位校验位
-                        if (code.length === 18) {
-                            code = code.split('');
-                            //∑(ai×Wi)(mod 11)
-                            //加权因子
-                            let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
-                            //校验位
-                            let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
-                            let sum = 0;
-                            let ai = 0;
-                            let wi = 0;
-                            for (var i = 0; i < 17; i++) {
-                                ai = code[i];
-                                wi = factor[i];
-                                sum += ai * wi;
-                            }
-                            if (parity[sum % 11] !== code[17].toUpperCase()) {
-                                row = {
-                                    'pass': false,
-                                    'msg': '身份证号校验位错误'
-                                };
-                            }
-                        }
                     }
                     return row;
                 }