generated from liutk/owl-admin-base
55 lines
2.0 KiB
PHP
55 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Services;
|
|
|
|
use App\Admin\Filters\OfficalBusinessFilter;
|
|
use App\Models\{OfficalBusiness, Employee};
|
|
use Illuminate\Validation\Rule;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Carbon\Carbon;
|
|
|
|
class OfficalBusinessService extends BaseService
|
|
{
|
|
protected array $withRelationships = ['store', 'employee'];
|
|
|
|
protected string $modelName = OfficalBusiness::class;
|
|
|
|
protected string $modelFilterName = OfficalBusinessFilter::class;
|
|
|
|
public function resloveData($data, $model = null)
|
|
{
|
|
// 获取员工所在的门店
|
|
if (!isset($data['store_id']) && isset($data['employee_id'])) {
|
|
$data['store_id'] = Employee::where('id', $data['employee_id'])->value('store_id');
|
|
}
|
|
if (isset($data['date_range'])) {
|
|
$time = explode(',', $data['date_range']);
|
|
$start = Carbon::createFromTimestamp(data_get($time, 0))->startOfDay();
|
|
$end = Carbon::createFromTimestamp(data_get($time, 1))->endOfDay();
|
|
$data['start_at'] = $start;
|
|
$data['end_at'] = $end;
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
public function validate($data, $model = null)
|
|
{
|
|
// 验证申请时间是否重叠
|
|
if (OfficalBusiness::where('employee_id', data_get($data, 'employee_id', $model?->employee_id))->where(fn($q) => $q->whereBetween('start_at', [$data['start_at'], $data['end_at']])->orWhereBetween('end_at', [$data['start_at'], $data['end_at']]))->exists()) {
|
|
return '该时间段已经申请过了';
|
|
}
|
|
$createRules = [
|
|
'employee_id' => ['required'],
|
|
'start_at' => ['required'],
|
|
'end_at' => ['required'],
|
|
'address' => ['required'],
|
|
];
|
|
$updateRules = [];
|
|
$validator = Validator::make($data, $model ? $updateRules : $createRules, []);
|
|
if ($validator->fails()) {
|
|
return $validator->errors()->first();
|
|
}
|
|
return true;
|
|
}
|
|
} |