Ver código fonte

Merge branch 'yang'

# Conflicts:
#	app/Http/Controllers/TestController.php
zhouzhendong 4 anos atrás
pai
commit
ef6d81a5a6

+ 15 - 8
app/Http/Controllers/LaborApplyController.php

@@ -17,7 +17,7 @@ use Illuminate\Support\Facades\Gate;
 
 class LaborApplyController extends Controller
 {
-    public function index(Request $request,\App\Filters\LaborApplyFilters $filters)
+    public function index(Request $request, \App\Filters\LaborApplyFilters $filters)
     {
         $builder = LaborApply::query()
             ->filter($filters)
@@ -44,6 +44,14 @@ class LaborApplyController extends Controller
 
     public function store(LaborApplyRequest $request, LaborApply $laborApply)
     {
+
+        $user_workgroup_applied = LaborApply::query()
+            ->whereDate('created_at', now()->toDateString())
+            ->where('user_workgroup_id', $request->user_workgroup_id)
+            ->exists();
+        if ($user_workgroup_applied) {
+            return redirect()->back()->with('warning', '该仓库小组今日已申请过,请修改申请人数,不要重复申请!');
+        }
         $laborApply->fill($request->all());
         $laborApply->apply_user_id = Auth::id();
         $laborApply->status = '创建';
@@ -72,10 +80,8 @@ class LaborApplyController extends Controller
 
     public function update(Request $request, LaborApply $laborApply)
     {
-        $laborApply->actual_num = $request->input('actual_num');
-        $laborApply->status = '任务完结';
-        $laborApply->save();
-        return redirect(route('laborApply.index'))->with('success', '填写实到人数成功!');
+        $laborApply->update($request->all());
+        return redirect(route('laborApply.index'))->with('success', '申请更新成功!');
     }
 
     public function destroy(LaborApply $laborApply)
@@ -107,10 +113,11 @@ class LaborApplyController extends Controller
         /** @var LaborApplyService $laborApplyService */
         $laborApplyService = app('LaborApplyService');
         $response = $laborApplyService->allocationLaborToLaborCompany();
+        $route = 'laborCompanyDispatch.index';
         if ($response['success']) {
-            return redirect(route('laborApplyDispatch.index'))->with('success', '重新生成劳务派遣数据成功!');
-        }else{
-            return redirect(route('laborApplyDispatch.index'))->with('danger', $response['error_message']);
+            return redirect(route('' . $route . ''))->with('success', '重新生成劳务派遣数据成功!');
+        } else {
+            return redirect(route($route))->with('danger', $response['error_message']);
         }
     }
 }

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

@@ -36,6 +36,17 @@ class LaborCompanyDispatchController extends Controller
         return view('personnel.laborApply.dispatch.index', compact('labor_company_dispatches'));
     }
 
+    public function edit(LaborCompanyDispatch $laborCompanyDispatch)
+    {
+        return view('personnel.laborApply.dispatch.edit', compact('laborCompanyDispatch'));
+    }
+
+    public function update(LaborCompanyDispatch $laborCompanyDispatch, Request $request)
+    {
+        $laborCompanyDispatch->update($request->all());
+        return redirect(route('laborCompanyDispatch.index'))->with('success', '更新成功!');
+    }
+
     public function createDetail(Request $request, LaborCompanyDispatch $laborCompanyDispatch)
     {
         return view('personnel.laborApply.dispatch.detail.create', compact('laborCompanyDispatch'));
@@ -53,6 +64,17 @@ class LaborCompanyDispatchController extends Controller
         $laborCompanyDispatch->laborCompanyDispatchDetails()->createMany(
             $request->input('users')
         );
+        return redirect(route('laborCompanyDispatch.index'))->with('success', '添加临时工详情成功!');
+    }
+
+    /**
+     * 劳务接单
+     * @param LaborCompanyDispatch $laborCompanyDispatch
+     * @param Request $request
+     * @return \Illuminate\Http\RedirectResponse
+     */
+    public function laborCompanyReceivingOrder(LaborCompanyDispatch $laborCompanyDispatch, Request $request)
+    {
         /** @var Carbon $dispatch_date */
         $dispatch_date = $laborCompanyDispatch->dispatch_date;
         //更新创建日期为 分配日期前一天的全部申请状态为 劳务接单
@@ -60,8 +82,19 @@ class LaborCompanyDispatchController extends Controller
             ->whereDate('created_at', $dispatch_date->subDay()->toDateString())
             ->where('warehouse_id', $laborCompanyDispatch->laborCompany->warehouse_id)
             ->update([
-                'status' => 3, //劳务接单
+                'status' => $request->status, //劳务接单
             ]);
-        return redirect(route('laborApplyDispatch.index'))->with('success', '添加临时工详情成功!');
+        $laborCompanyDispatch->status = '劳务接单';
+        $laborCompanyDispatch->save();
+        return redirect()->back()->with('success', '接单成功!');
     }
+
+    public function personnelCheck(LaborCompanyDispatch $laborCompanyDispatch, Request $request)
+    {
+        $laborCompanyDispatch->status = $request->status;
+        $laborCompanyDispatch->save();
+        return redirect()->back()->with('success', '人事确认成功!');
+
+    }
+
 }

+ 44 - 0
app/Jobs/CalculationArrivedManNumJob.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Jobs;
+
+use App\Services\LaborApplyService;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Support\Carbon;
+
+/**
+ * 按照给定的申请日期计算到岗人数
+ */
+class CalculationArrivedManNumJob implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+    /** @var $service LaborApplyService */
+    private $service;
+
+    /** @var $apply_date Carbon */
+    private $apply_date;
+
+    /**
+     * @param Carbon $apply_date
+     */
+    public function __construct(Carbon $apply_date)
+    {
+        $this->service = app('LaborApplyService');
+        $this->apply_date = $apply_date;
+    }
+
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+       $this->service->calculationArrivedManNum($this->apply_date);
+    }
+}

+ 1 - 1
app/LaborApply.php

@@ -79,7 +79,7 @@ class LaborApply extends Model
     public function getArriveRateAttribute()
     {
         if (0 === $this->actual_num) {
-            return '';
+            return '0'.'%';
         }
         $apply_num = $this->man_num + $this->woman_num;
         $arrive_rate = $this->actual_num / $apply_num * 100;

+ 35 - 2
app/LaborCompanyDispatch.php

@@ -17,18 +17,51 @@ class LaborCompanyDispatch extends Model
 
     use ModelTimeFormat;
 
-    public $fillable = [
+    protected $fillable = [
         'labor_company_id',//劳务公司ID
         'man_num',//男工数量
         'woman_num',//女工数量
         'dispatch_date',//分配日期
         'exceed_max_labor_num_status',//是否超过最大允许值 1 未超过 2 超过
+        'status',//状态
     ];
 
-    public $dates = [
+
+    protected $dates = [
         'dispatch_date'
     ];
 
+    static public $enums = [
+        'status' => [
+            '' => 0,
+            '创建' => 1,
+            '人事确认' => 2,
+            '劳务接单' => 3,
+            '任务完结' => 4,
+        ],
+    ];
+
+    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];
+    }
+
     public function laborCompany(): BelongsTo
     {
         return $this->belongsTo(LaborCompany::class);

+ 57 - 0
app/Services/LaborApplyService.php

@@ -9,8 +9,10 @@ use App\LaborApply;
 use App\Warehouse;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
+use function DeepCopy\deep_copy;
 
 class LaborApplyService
 {
@@ -18,6 +20,10 @@ class LaborApplyService
     const TIME_OUT_HOUR = 19;
     const LABOR_APPLY_STATUS = 'LABOR_APPLY_STATUS';
     const LABOR_APPLY_STATUS_TTL = 60 * 30;
+    //到岗日期是申请日期的前一天 为保证数据正确 计算实际人数的时间为到岗日期的后一天 故时间为2
+    const CALCULATION_ARRIVED_MAN_NUM_DEFAULT_SUB_DAYS = 2;
+    //临时工工作时长最小值 低于这个时间的不计入
+    const CALCULATION_ARRIVED_MAN_NUM_MIN_ONLINE_DURATION = 1;
     use ServiceAppAop;
 
     protected $modelClass = LaborApply::class;
@@ -140,6 +146,7 @@ class LaborApplyService
                     'woman_num' => $dispatch_woman_num,
                     'dispatch_date' => $dispatch_date,
                     'exceed_max_labor_num_status' => LaborCompanyDispatch::NOT_EXCEED_MAX_LABOR_NUM,//没有超限额
+                    'status' => 1,//创建
                 ];
             }
 
@@ -168,4 +175,54 @@ class LaborApplyService
         }
         return $builder->get();
     }
+
+    /**
+     * 按照给定的申请日期计算到岗人数
+     *
+     * 查询指定日期的 每个小组的申请人数
+     * 遍历申请数据
+     *      根据申请数据的仓库小组id,日期(申请日期后一天)查询打卡数据,计算人数之和 更新申请表actual_num
+     * @param Carbon|null $apply_date
+     */
+    public function calculationArrivedManNum(Carbon $apply_date = null)
+    {
+        //查询的申请日期
+        if (empty($apply_date)) {
+            $apply_date = now()->subDays(self::CALCULATION_ARRIVED_MAN_NUM_DEFAULT_SUB_DAYS);
+        }
+        //查询指定日期的 每个小组的申请人数
+        $laborApplies = DB::table('labor_applies')
+            ->selectRaw('user_workgroup_id as user_workgroup_id , sum(man_num + woman_num) as apply_num , warehouse_id')
+            ->whereDate('created_at', $apply_date->toDateString())
+            ->groupBy('user_workgroup_id','warehouse_id')
+            ->get();
+        //根据申请数据的仓库小组id,日期(申请日期后一天)
+        $check_in_at = deep_copy($apply_date)->addDay()->toDateString();
+        //遍历申请数据
+        foreach ($laborApplies as $laborApply) {
+            //查询打卡数据,计算人数之和
+            $arrived_num =
+                DB::table('labor_reports')
+                    ->selectRaw("count( DISTINCT 'identity_number',identity_number) as num")//根据身份证号去重防止重复入组
+
+                    ->where('user_workgroup_id', $laborApply->user_workgroup_id)
+                    ->whereDate('check_in_at', $check_in_at)
+                    ->where('online_duration', '>=', self::CALCULATION_ARRIVED_MAN_NUM_MIN_ONLINE_DURATION)
+                    ->first()->num;
+            //更新申请表actual_num
+            LaborApply::query()
+                ->whereDate('created_at', deep_copy($apply_date)->toDateString())
+                ->where('user_workgroup_id', $laborApply->user_workgroup_id)
+                ->update([
+                    'actual_num' => $arrived_num,
+                    'status' => 4,//任务完结
+                ]);
+        }
+        //根据分配时间完结任务  $check_in_at:实际入场日期 就是 dispatch_date
+        LaborCompanyDispatch::query()
+            ->whereDate('dispatch_date', $check_in_at)
+            ->update([
+                'status' => 3//任务完结
+            ]);
+    }
 }

+ 5 - 5
app/Services/OrderPackageReceivedSyncService.php

@@ -148,22 +148,22 @@ class OrderPackageReceivedSyncService
         foreach ($logisticResponses as $logisticResponse) {
             if (empty($logisticResponse)) continue;
             $orderPackage = OrderPackage::query()->where('logistic_number', $logisticResponse['logistic_number'])->first();
-            if(empty($orderPackage)) continue;
+            if (empty($orderPackage)) continue;
             //如果已经收货,状态改为已签收
             if ($logisticResponse['received_at'] ?? false) {
                 $logisticResponse['status'] = '已签收';
             }
+            //设置异常信息
+            $logisticResponse = $this->setExceptionStatus($logisticResponse);
             //标记为手动更新的 status不更新
             if ($orderPackage->is_manual_update) {
                 //异常状态不更新
-                unset($logisticResponse['exception_status']);
+                if (isset($logisticResponse['exception_status'])) unset($logisticResponse['exception_status']);
                 //状态允许向后更新
                 if (OrderPackage::switchStatus($orderPackage->status) > OrderPackage::switchStatus($logisticResponse['status'] ?? '生成订单')) {
                     unset($logisticResponse['status']);
                 }
             }
-            //设置异常信息
-            $logisticResponse = $this->setExceptionStatus($logisticResponse);
             //标记为单号异常
             if (Str::contains($orderPackage->logistic_number, ['SO', '#', '-'])) {
                 $logisticResponse['exception_status'] = '单号异常';
@@ -183,7 +183,7 @@ class OrderPackageReceivedSyncService
             if (isset($logisticResponse['exception_status'])) $logisticResponse['exception_status'] = OrderPackage::switchExceptionStatus($logisticResponse['exception_status']);
             if (isset($logisticResponse['status'])) $logisticResponse['status'] = OrderPackage::switchStatus($logisticResponse['status']);
             if (isset($logisticResponse['routes_length'])) unset($logisticResponse['routes_length']);
-            if(empty($logisticResponse['transfer_status'])) unset($logisticResponse['transfer_status']);
+            if (empty($logisticResponse['transfer_status'])) unset($logisticResponse['transfer_status']);
             OrderPackage::query()->where('logistic_number', $logisticResponse['logistic_number'])
                 ->update($logisticResponse);
         }

+ 3 - 1
app/Services/OwnerFeeTotalService.php

@@ -355,7 +355,9 @@ class OwnerFeeTotalService
             ->selectRaw("sum(baoshi_indemnity_money) as fee,owner_id,order_id")
             ->leftJoin('orders', 'order_issues.order_id', '=', 'orders.id')
             ->where('owner_id', $owner->id)
-            ->whereBetween('order_issues.created_at', [$start, $end])->first();
+            ->whereBetween('order_issues.created_at', [$start, $end])
+            ->whereBetween('orders.created_at', [$start, $end])
+            ->first();
         $ownerFeeTotal ['indemnityFee'] = [
             'fee' => $indemnityFee->fee ?? 0,
         ];

+ 42 - 10
app/Services/OwnerStoreFeeReportService.php

@@ -2,8 +2,10 @@
 
 namespace App\Services;
 
+use App\Owner;
 use App\OwnerBillReport;
 use App\OwnerBillReportArchive;
+use App\OwnerPriceOperation;
 use App\Traits\ServiceAppAop;
 use App\OwnerStoreFeeReport;
 use Carbon\Carbon;
@@ -31,7 +33,7 @@ class OwnerStoreFeeReportService implements \App\Interfaces\SettlementBillReport
      * 如果参数$counting_month为2021-01-01 则统计2021-01-01 -- 2021-01-31之间的数据
      * @param null $counting_month 统计月份,默认统计上个月的 2021-05-01
      */
-    public function recordReport($counting_month = null,array $ownerIds = [])
+    public function recordReport($counting_month = null, array $ownerIds = [])
     {
         $this->detailService = app('OwnerStoreFeeDetailService');
         if (is_null($counting_month)) {
@@ -56,18 +58,18 @@ class OwnerStoreFeeReportService implements \App\Interfaces\SettlementBillReport
             ->whereBetween('owner_fee_operations.worked_at', [$start, $end])
             ->whereNotNull('owner_fee_operation_details.price')
             ->whereNotNull('owner_fee_operation_details.amount')
-            ->whereIn('model_id', \App\OwnerPriceOperation::query()->select('id')->where('operation_type', '入库'));
+            ->whereIn('model_id', OwnerPriceOperation::query()->select('id')->where('operation_type', '入库'));
         if (!empty($ownerIds)) {
             $builder->whereIn('owner_fee_operations.owner_id', $ownerIds);
         }
         $details = $builder->groupBy(
-                    'counting_month',
-                    'owner_id',
-                    'unit_id',
-                    'price',
-                    'model_id'
-                )
-                ->get();
+            'counting_month',
+            'owner_id',
+            'unit_id',
+            'price',
+            'model_id'
+        )
+            ->get();
         $reports = [];
         foreach ($details as $detail) {
             $counting_month = Carbon::parse($detail->counting_month)->startOfMonth()->toDateString();
@@ -76,7 +78,7 @@ class OwnerStoreFeeReportService implements \App\Interfaces\SettlementBillReport
                 ->where('owner_id', $detail->owner_id)
                 ->where('counting_month', $counting_month)->first();
             $reports[] = [
-                'owner_bill_report_id' => $ownerBillReport->id ?? null,
+                'owner_bill_report_id' => $ownerBillReport->id ?? 1,
                 'owner_id' => $detail->owner_id,
                 'counting_month' => $counting_month,
                 'unit_id' => $detail->unit_id,
@@ -95,6 +97,36 @@ class OwnerStoreFeeReportService implements \App\Interfaces\SettlementBillReport
         foreach ($reports_chunked as $items) {
             OwnerStoreFeeReport::query()->insertOrIgnore($items);
         }
+
+        //没有数量的计费模型填充0数据
+        //查询到全部的货主
+        $owners = Owner::query()->with('ownerPriceOperations.items')->get();
+        foreach ($owners as $owner) {
+            $owner_id = $owner->id;
+            foreach ($owner->ownerPriceOperations as $ownerPriceOperation) {
+                $ownerPriceOperation_id = $ownerPriceOperation->id;
+                $has_report = OwnerStoreFeeReport::query()
+                    ->where('owner_id', $owner_id)
+                    ->where('model_id', $ownerPriceOperation_id)
+                    ->where('counting_month', $counting_month)
+                    ->exists();
+                if ($has_report) continue;
+
+//                foreach ($ownerPriceOperation->items as $ownerPriceOperationItem) {
+                OwnerStoreFeeReport::query()->insert([
+                    'owner_bill_report_id' => 1,
+                    'owner_id' => $owner_id,
+                    'counting_month' => $counting_month, //统计月份
+                    'unit_id' => 4, //件
+                    'unit_price' => $ownerPriceOperation->items[0]->unit_price ?? 0, //单价
+                    'amount' => 0, //数量
+                    'fee' => 0,//费用
+                    'work_name' => $ownerPriceOperation->name,//作业名称
+                    'model_id' => $ownerPriceOperation_id,//计费模型
+                    'tax_fee' => 0,//税费
+                ]);
+            }
+        }
     }
 
     public function get(array $kvPairs): array

+ 32 - 0
database/migrations/2021_10_09_164021_drop_current_timestamp_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 DropCurrentTimestampToLaborCompanyDispatchesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('labor_company_dispatches', function (Blueprint $table) {
+            $table->dateTime('dispatch_date')->nullable()->change();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('labor_company_dispatches', function (Blueprint $table) {
+            $table->timestamp('dispatch_date')->change();
+        });
+    }
+}

+ 32 - 0
database/migrations/2021_10_11_104946_add_column_status_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 AddColumnStatusToLaborCompanyDispatchesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('labor_company_dispatches', function (Blueprint $table) {
+            $table->integer('status')->default(0)->comment('状态');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('labor_company_dispatches', function (Blueprint $table) {
+            $table->dropColumn('status');
+        });
+    }
+}

+ 13 - 3
resources/views/finance/settlementBills/totalFee/index.blade.php

@@ -56,7 +56,10 @@
                 </tr>
              <template v-if="feeTotal['information']??false">
                  <tr>
-                     <td>仓储费</td>
+                     <td>
+                         <a target="_blank"
+                            href="{{ route('settlementBills.storageFee.index',['owner_id' => $request['owner_id'],'year' => $request['year'],'month' => $request['month']]) }}">仓储费</a>
+                     </td>
                      <td class="m-0 p-0">
                          <table class="table  m-0 p-0">
                              <tr v-for="item in feeTotal['information']['storageFee']">
@@ -96,7 +99,10 @@
                      </td>
                  </tr>
                  <tr>
-                     <td>入库费</td>
+                     <td>
+                         <a target="_blank"
+                            href="{{ route('settlementBills.storeFee.report',['owner_id' => $request['owner_id'],'year' => $request['year'],'month' => $request['month']]) }}">入库费</a>
+                     </td>
                      <td class="m-0 p-0">
                          <table class="table  m-0 p-0">
                              <tr v-for="item in feeTotal['information']['storeFee']">
@@ -139,7 +145,11 @@
                      </td>
                  </tr>
                  <tr>
-                     <td>出库费</td>
+                     <td>
+                         <a target="_blank"
+                            href="{{ route('settlementBills.storeOutFee.report',['owner_id' => $request['owner_id'],'year' => $request['year'],'month' => $request['month']]) }}">出库费</a>
+
+                     </td>
                      <td class="m-0 p-0">
                          <table class="table   m-0 p-0">
                              <tr v-for="item in feeTotal['information']['storeOutFee']">

+ 3 - 1
resources/views/personnel/laborApply/create.blade.php

@@ -3,6 +3,8 @@
 
 @section('content')
     <div class="container-fluid d-none" id="list">
+        @include('shared._messages')
+
         <div class="card col-md-8 offset-md-2">
             <div class="card-body">
                 <!--
@@ -75,7 +77,7 @@
                         <label for="remark" class="col-2 col-form-label text-right">用工要求</label>
                         <div class="col-8">
                             <textarea class="form-control" rows="3"
-                                      placeholder required
+                                      placeholder
                                       name="remark" id="remark"></textarea>
                         </div>
                     </div>

+ 3 - 2
resources/views/personnel/laborApply/dispatch/detail/create.blade.php

@@ -5,7 +5,7 @@
     <div class="container-fluid" id="list">
         <div class="card col-md-8 offset-md-2">
             <div class="card-body">
-                <form action="{{ route('laborApplyDispatch.storeDetail', $laborCompanyDispatch->id) }}" method="post"
+                <form action="{{ route('laborCompanyDispatch.storeDetail', $laborCompanyDispatch->id) }}" method="post"
                       style="display: inline-block;"
                       onsubmit="return confirm('您确定要提交吗?');">
                     {{ csrf_field() }}
@@ -67,7 +67,8 @@
 
             methods: {
                 addItem() {
-                    if (this.items.length <= this.labor_company_dispatch.labor_worker_num -1 ) {
+                    let sum_man_num = this.labor_company_dispatch.man_num + this.labor_company_dispatch.woman_num;
+                    if (this.items.length <= sum_man_num - 1) {
                         this.items.push({});
                     } else {
                         window.tempTip.show("不能超过最大人数限制!");

+ 3 - 2
resources/views/personnel/laborApply/dispatch/detail/edit.blade.php

@@ -5,7 +5,7 @@
     <div class="container-fluid" id="list">
         <div class="card col-md-8 offset-md-2">
             <div class="card-body">
-                <form action="{{ route('laborApplyDispatch.storeDetail', $laborCompanyDispatch->id) }}" method="post"
+                <form action="{{ route('laborCompanyDispatch.storeDetail', $laborCompanyDispatch->id) }}" method="post"
                       style="display: inline-block;"
                       onsubmit="return confirm('您确定要提交吗?');">
                     {{ csrf_field() }}
@@ -68,7 +68,8 @@
 
             methods: {
                 addItem() {
-                    if (this.items.length <= this.labor_company_dispatch.labor_worker_num - 1) {
+                    let sum_man_num = this.labor_company_dispatch.man_num + this.labor_company_dispatch.woman_num;
+                    if (this.items.length <= sum_man_num - 1) {
                         this.items.push({});
                     } else {
                         window.tempTip.show("不能超过最大人数限制!");

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

@@ -0,0 +1,52 @@
+@extends('layouts.app')
+@section('title')修改-劳务派遣明细@endsection
+
+@section('content')
+    <div class="container-fluid" id="list">
+        <div class="card col-md-8 offset-md-2">
+            <div class="card-body">
+                <form action="{{ route('laborCompanyDispatch.update',$laborCompanyDispatch->id) }}" method="POST" accept-charset="UTF-8">
+                    @csrf
+                    @method('PUT')
+                    @include('shared._error')
+                    {{--男工人数--}}
+                    <div class="from-group row mt-3">
+                        <label for="man_num" class="col-2 col-form-label text-right">男工人数</label>
+                        <div class="col-8">
+                            <input type="number" class="form-control" id="man_num" name="man_num" value="{{ $laborCompanyDispatch->man_num }}" required>
+                        </div>
+                    </div>
+
+                    {{--女工人数--}}
+                    <div class="from-group row mt-3">
+                        <label for="woman_num" class="col-2 col-form-label text-right">女工人数</label>
+                        <div class="col-8">
+                            <input type="number" class="form-control" id="woman_num" name="woman_num" value="{{ $laborCompanyDispatch->woman_num }}" required>
+                        </div>
+                    </div>
+                    {{--提交--}}
+                    <div class="form-group row mt-5">
+                        <div class="col-8 offset-2">
+                            <input type="submit" class="btn btn-success form-control">
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        new Vue({
+            el: "#list",
+            data: {
+            },
+            mounted() {
+
+            },
+
+            methods: {}
+        });
+    </script>
+@endsection

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

@@ -16,11 +16,55 @@
                     <td>
                         <div>
                             @{{ i+1 }}
-                            <span v-if="labor_company_dispatch.exceed_max_labor_num_status==2"><i class="fa fa-thermometer-full" style="color: red" aria-hidden="true"></i></span>
+                            <span v-if="labor_company_dispatch.exceed_max_labor_num_status==2"><i
+                                    class="fa fa-thermometer-full" style="color: red" aria-hidden="true"></i></span>
                         </div>
+                    </td>
+                    <td class="">
+                        @can('劳务所')
+                            <div class="float-left ml-3" v-if="labor_company_dispatch.status==='人事确认'">
+                                <form :action="getBaseUrl(labor_company_dispatch) + '/laborCompanyReceivingOrder'"
+                                      method="post"
+                                      accept-charset="UTF-8" onsubmit="return confirm('是否确认接单!')">
+                                    @csrf
+                                    @method('PATCH')
+                                    <input type="number" name="status" hidden value="3">
+                                    <button type="submit" class="btn btn-outline-primary btn-sm" role="button">劳务接单
+                                    </button>
+                                </form>
+                            </div>
+                            <div class="float-left ml-3" v-if="labor_company_dispatch.status==='劳务接单'">
+                                <a :href="getCreateOrEditDetailUrl(labor_company_dispatch)"
+                                   class="btn btn-outline-secondary btn-sm" role="button">
+                                    @{{
+                                    labor_company_dispatch.labor_company_dispatch_details.length>0?'修改明细':'录入明细'
+                                    }}
+                                </a>
+                            </div>
+                        @endcan()
+                        @can('人事管理')
+                            <div class="float-left ml-3" v-if="labor_company_dispatch.status==='创建'">
+                                <form :action="getBaseUrl(labor_company_dispatch) + '/personnelCheck'" method="post"
+                                      accept-charset="UTF-8" onsubmit="return confirm('是否确认!')">
+                                    @csrf
+                                    @method('PATCH')
+                                    <input type="text" name="status" hidden value="人事确认">
+                                    <button type="submit" class="btn btn-outline-primary btn-sm" role="button">人事确认
+                                    </button>
+                                </form>
+                            </div>
 
+                            <div class="float-left ml-3" v-if="labor_company_dispatch.status==='创建'">
+                                <a :href="getEditlLaborCompanyDispatchUrl(labor_company_dispatch)"
+                                   class="btn btn-outline-secondary btn-sm" role="button">
+                                    修改派遣人数
+                                </a>
+                            </div>
+                        @endcan()
                     </td>
+
                     <td>@{{ labor_company_dispatch.labor_company.name }}</td>
+                    <td>@{{ labor_company_dispatch.status }}</td>
                     <td>@{{ labor_company_dispatch.man_num }}</td>
                     <td>@{{ labor_company_dispatch.woman_num }}</td>
                     <td>
@@ -47,12 +91,6 @@
                         </div>
                     </td>
                     <td>@{{ labor_company_dispatch.dispatch_date }}</td>
-                    <td>
-                        <a :href="getCreateOrEditDetailUrl(labor_company_dispatch)"
-                           class="btn btn-outline-secondary btn-sm" role="button">
-                            @{{ labor_company_dispatch.labor_company_dispatch_details.length>0?'修改临时工明细':'录入临时工明细' }}
-                        </a>
-                    </td>
 
                 </tr>
             </table>
@@ -94,12 +132,13 @@
                 _this.form.init();
                 let column = [
                     {name: 'index', value: '序号', neglect: true},
+                    {name: 'do', value: '操作'},
                     {name: 'name', value: '劳务公司'},
+                    {name: 'status', value: '状态 '},
                     {name: 'man_num', value: '男工人数'},
                     {name: 'woman_num', value: '女工人数'},
                     {name: 'details', value: '派遣详情'},
                     {name: 'dispatch_date', value: '分配日期'},
-                    {name: 'do', value: '操作'},
                 ];
                 new Header({
                     el: "table",
@@ -112,25 +151,28 @@
             },
 
             methods: {
+                /*临时工信息详情*/
                 getCreateOrEditDetailUrl(labor_company_dispatch) {
                     let url = "";
                     if (labor_company_dispatch.labor_company_dispatch_details.length > 0) {
-                        url = "{{ url('personnel/laborApply/dispatch') }}/" + labor_company_dispatch.id + '/detail/edit';
+                        url = "{{ url('personnel/laborApply/laborCompanyDispatch') }}/" + labor_company_dispatch.id + '/detail/edit';
                     } else {
-                        url = "{{ url('personnel/laborApply/dispatch') }}/" + labor_company_dispatch.id + '/detail/create';
+                        url = "{{ url('personnel/laborApply/laborCompanyDispatch') }}/" + labor_company_dispatch.id + '/detail/create';
                     }
                     return url;
                 },
-                exceed_max_labor_num_color(obj) {
-                    let result = {};
-                    if (obj.exceed_max_labor_num_status == 2) {
-                        result = {
-                            color: 'red',
-                        };
-
-                    }
-                    return result;
-                }
+                /*分配详情编辑*/
+                getEditlLaborCompanyDispatchUrl(labor_company_dispatch) {
+                    let url = "";
+                    url = "{{ url('personnel/laborApply/laborCompanyDispatch') }}/" + labor_company_dispatch.id + '/edit';
+                    return url;
+                },
+                /*劳务接单*/
+                getBaseUrl(labor_company_dispatch) {
+                    let url = "";
+                    url = "{{ url('personnel/laborApply/laborCompanyDispatch') }}/" + labor_company_dispatch.id;
+                    return url;
+                },
             },
         });
     </script>

+ 4 - 3
resources/views/personnel/laborApply/edit.blade.php

@@ -5,8 +5,9 @@
     <div class="container-fluid" id="list">
         <div class="card col-md-8 offset-md-2">
             <div class="card-body">
-                <form action="{{ route('laborApply.store') }}" method="POST" accept-charset="UTF-8">
+                <form action="{{ route('laborApply.update',$laborApply->id) }}" method="POST" accept-charset="UTF-8">
                     @csrf
+                    @method( 'PATCH' )
                     @include('shared._error')
                     {{--仓库--}}
                     <div class="from-group row mt-3">
@@ -15,7 +16,7 @@
                             <select class="form-control" id="warehouse_id" name="warehouse_id" required>
                                 <option value="" hidden disabled selected>请选择仓库</option>
                                 @foreach($warehouses as $warehouse)
-                                    <option {{ $warehouse->id == $laborApply->warehouse_id ? 'selected':''}}>{{ $warehouse->name }}</option>
+                                    <option value="{{ $warehouse->id }}" {{ $warehouse->id == $laborApply->warehouse_id ? 'selected':''}}>{{ $warehouse->name }}</option>
                                 @endforeach
                             </select>
                         </div>
@@ -27,7 +28,7 @@
                             <select class="form-control" id="user_workgroup_id" name="user_workgroup_id" required>
                                 <option value="" hidden disabled selected>请选择所属组别</option>
                                 @foreach($userWorkGroups as $userWorkGroup)
-                                    <option {{ $userWorkGroup->id == $laborApply->user_workgroup_id ? 'selected':''}}>{{ $userWorkGroup->name }}</option>
+                                    <option value="{{ $userWorkGroup->id }}" {{ $userWorkGroup->id == $laborApply->user_workgroup_id ? 'selected':''}}>{{ $userWorkGroup->name }}</option>
                                 @endforeach
                             </select>
                         </div>

+ 0 - 35
resources/views/personnel/laborApply/index.blade.php

@@ -43,41 +43,6 @@
                                 <i class="far fa-trash-alt"></i> 删除
                             </button>
                         </form>
-                        <form v-if="labor_apply.status === '劳务接单'" :action="getBaseUrl(labor_apply)" method="post"
-                              style="display: inline-block;">
-                        {{ csrf_field() }}
-                        {{ method_field('PATCH') }}
-                        <!-- Button trigger modal -->
-                            <button type="button" class="btn btn-primary" data-toggle="modal"
-                                    data-target="#actualNumModal">
-                                实到人数
-                            </button>
-
-                            <!-- Modal -->
-                            <div class="modal fade" id="actualNumModal" tabindex="-1"
-                                 aria-labelledby="actualNumModalLabel" aria-hidden="true">
-                                <div class="modal-dialog">
-                                    <div class="modal-content">
-                                        <div class="modal-header">
-                                            <h5 class="modal-title" id="actualNumModalLabel">实到人数</h5>
-                                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                                                <span aria-hidden="true">&times;</span>
-                                            </button>
-                                        </div>
-                                        <div class="modal-body">
-                                            <div class="form-group">
-                                                <input type="number" class="form-control" name="actual_num">
-                                            </div>
-                                        </div>
-                                        <div class="modal-footer">
-                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">取消
-                                            </button>
-                                            <button type="submit" class="btn btn-primary">确认</button>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </form>
                     </td>
                 </tr>
             </table>

+ 12 - 8
routes/web.php

@@ -51,15 +51,19 @@ Route::post('personnel/checking-in/refreshQRCode','QRCodeController@refreshQRCod
 
 //人事管理
 Route::group(['prefix'=>'personnel','middleware'=>'auth'],function() {
+
     //临时开放录入
     Route::put('laborApply/temporaryOpen','LaborApplyController@temporaryOpen')->name('laborApply.temporaryOpen');
     Route::get('laborApply/createDispatch','LaborApplyController@createDispatch')->name('laborApply.createDispatch');
     //劳务派遣查看
-    Route::get('laborApply/dispatch','LaborCompanyDispatchController@index')->name('laborApplyDispatch.index');
-    Route::get('laborApply/dispatch/{laborCompanyDispatch}/detail/create','LaborCompanyDispatchController@createDetail')->name('laborApplyDispatch.createDetail');
-    Route::get('laborApply/dispatch/{laborCompanyDispatch}/detail/edit','LaborCompanyDispatchController@editDetail')->name('laborApplyDispatch.editDetail');
-    Route::post('laborApply/dispatch/{laborCompanyDispatch}/detail','LaborCompanyDispatchController@storeDetail')->name('laborApplyDispatch.storeDetail');
-
+    Route::group(['prefix' => 'laborApply'], function () {
+        Route::patch('laborCompanyDispatch/{laborCompanyDispatch}/laborCompanyReceivingOrder', 'LaborCompanyDispatchController@laborCompanyReceivingOrder')->name('laborCompanyDispatch.laborCompanyReceivingOrder');
+        Route::patch('laborCompanyDispatch/{laborCompanyDispatch}/personnelCheck', 'LaborCompanyDispatchController@personnelCheck')->name('laborCompanyDispatch.personnelCheck');
+        Route::resource('laborCompanyDispatch','LaborCompanyDispatchController')->only(['index','edit','update']);
+        Route::get('laborCompanyDispatch/{laborCompanyDispatch}/detail/create','LaborCompanyDispatchController@createDetail')->name('laborCompanyDispatch.createDetail');
+        Route::get('laborCompanyDispatch/{laborCompanyDispatch}/detail/edit','LaborCompanyDispatchController@editDetail')->name('laborCompanyDispatch.editDetail');
+        Route::post('laborCompanyDispatch/{laborCompanyDispatch}/detail','LaborCompanyDispatchController@storeDetail')->name('laborCompanyDispatch.storeDetail');
+    });
     Route::resource('laborApply', 'LaborApplyController');
 
 });
@@ -849,7 +853,7 @@ Route::group(['prefix'=>'package'],function(){
             });
             //仓储费
             Route::group(['prefix' => 'storageFee'], function () {
-                Route::get('','SettlementBillStorageFeeController@index');
+                Route::get('','SettlementBillStorageFeeController@index')->name('settlementBills.storageFee.index');
                 Route::post('confirmBill','SettlementBillStorageFeeController@confirmBill');
                 Route::any('export','SettlementBillStorageFeeController@export');
             });
@@ -860,7 +864,7 @@ Route::group(['prefix'=>'package'],function(){
                 Route::any('detail/export', 'SettlementBillStoreFeeDetailController@export');
                 Route::any('report/export', 'SettlementBillStoreFeeReportController@export');
                 Route::get('detail', 'SettlementBillStoreFeeDetailController@index');
-                Route::get('report', 'SettlementBillStoreFeeReportController@index');
+                Route::get('report', 'SettlementBillStoreFeeReportController@index')->name('settlementBills.storeFee.report');
             });
             //出库费
             Route::group(['prefix' => 'storeOutFee'], function () {
@@ -869,7 +873,7 @@ Route::group(['prefix'=>'package'],function(){
                 Route::any('detail/export', 'SettlementBillStoreOutFeeDetailController@export');
                 Route::any('report/export', 'SettlementBillStoreOutFeeReportController@export');
                 Route::get('detail', 'SettlementBillStoreOutFeeDetailController@index');
-                Route::get('report', 'SettlementBillStoreOutFeeReportController@index');
+                Route::get('report', 'SettlementBillStoreOutFeeReportController@index')->name('settlementBills.storeOutFee.report');
             });
             //杂项费
             Route::group(['prefix' => 'sundryFee'], function () {

+ 31 - 3
tests/Services/OrderPackageReceivedSyncService/TestUpdate.php

@@ -69,23 +69,51 @@ class TestUpdate extends TestCase
         ];
 
         $this->service->update($data);
-        $this->assertDatabaseHas('order_packages',[
+        $this->assertDatabaseHas('order_packages', [
             'logistic_number' => 'SF1038651915891',
             'status' => '派送中',
             'received_at' => Carbon::now()->toDateTimeString(),
             'exception' => '否',
         ]);
-        $this->assertDatabaseHas('order_packages',[
+        $this->assertDatabaseHas('order_packages', [
             'logistic_number' => 'SF1038651413847',
             'status' => '派送中',
             'received_at' => Carbon::now()->toDateTimeString(),
             'exception' => '否',
         ]);
-        $this->assertDatabaseHas('order_packages',[
+        $this->assertDatabaseHas('order_packages', [
             'logistic_number' => 'SF1038611050071',
             'status' => '派送中',
             'received_at' => Carbon::now()->toDateTimeString(),
             'exception' => '否',
         ]);
     }
+
+    public function test_111()
+    {
+
+        $logistic_number = 'SF1038651915811';
+        OrderPackage::query()->where('logistic_number', $logistic_number)->delete();
+        $orderPackage = factory(OrderPackage::class)->create([
+            'logistic_number' => $logistic_number,
+            'is_manual_update' => true,
+            'exception_status' => '单号异常',
+            'status' => 2,
+        ]);
+
+        $data = [
+            [
+                'logistic_number' => $logistic_number,
+                'exception_status' => '延迟发货',
+            ],
+        ];
+        $this->service->update($data);
+//        OrderPackage::query()->where('logistic_number', $logistic_number)->update([
+//            'status' => 5,
+////            'exception_status' => 3,
+//        ]);
+
+        dump(OrderPackage::query()->where('logistic_number', $logistic_number)->get()->toArray());
+
+    }
 }