|
@@ -9,6 +9,7 @@ use App\Model\DepartWithDHF;
|
|
|
use App\Model\Employee;
|
|
|
use App\Model\EmployeeDepartPermission;
|
|
|
use App\Model\EmployeeFile;
|
|
|
+use App\Model\EmployeeIndex;
|
|
|
use App\Model\EmployeeManagerDepart;
|
|
|
use App\Model\EmployeeMenuPermission;
|
|
|
use App\Model\EmployeeRole;
|
|
@@ -135,33 +136,15 @@ class EmployeeService extends Service
|
|
|
DB::beginTransaction();
|
|
|
$model = new Employee();
|
|
|
$model = $model->where('id',$data['id'])->first();
|
|
|
- $model->number = $data['number'];
|
|
|
- $model->emp_name = $data['emp_name'];
|
|
|
- $model->mobile = $data['mobile'] ?? '';
|
|
|
- $model->leave_time = $data['leave_time'] ?? '';
|
|
|
- $model->entry_time = $data['entry_time'] ?? '';
|
|
|
- $model->state = empty($data['leave_time']) ? Employee::USE : Employee::NOT_USE;
|
|
|
$model->is_admin = $data['is_admin'];
|
|
|
$model->account = $data['number'];
|
|
|
if($model->is_admin == 1){
|
|
|
if($data['password'] !== '******'){
|
|
|
- $model->password = Hash::make($data['password']);
|
|
|
+ $model->password = Hash::make($data['password']);
|
|
|
}
|
|
|
}
|
|
|
$model->save();
|
|
|
|
|
|
- EmployeeDepartPermission::where('employee_id',$data['id'])->delete();
|
|
|
- if(isset($data['depart'])){
|
|
|
- $insert = [];
|
|
|
- foreach ($data['depart'] as $value){
|
|
|
- $insert[] = [
|
|
|
- 'employee_id' => $model->id,
|
|
|
- 'depart_id' => $value,
|
|
|
- ];
|
|
|
- }
|
|
|
- EmployeeDepartPermission::insert($insert);
|
|
|
- }
|
|
|
-
|
|
|
EmployeeRole::where('employee_id',$data['id'])->update([
|
|
|
'del_time' => time()
|
|
|
]);
|
|
@@ -178,6 +161,10 @@ class EmployeeService extends Service
|
|
|
EmployeeRole::insert($insert);
|
|
|
}
|
|
|
|
|
|
+ if(! empty($data['index_array'])){
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
DB::commit();
|
|
|
}catch (\Exception $exception){
|
|
|
DB::rollBack();
|
|
@@ -375,32 +362,69 @@ class EmployeeService extends Service
|
|
|
* @return array
|
|
|
*/
|
|
|
public function employeeRule($data,$is_add = true){
|
|
|
- if($this->isEmpty($data,'number')) return [false,'工号不存在!'];
|
|
|
- if($this->isEmpty($data,'emp_name')) return [false,'姓名不存在!'];
|
|
|
- if(empty($data['depart'])) return [false,'部门不能为空'];
|
|
|
+ if(empty($data['id'])) return [false,'人员ID不能为空'];
|
|
|
+
|
|
|
+ if(! empty($data['index_array'])){
|
|
|
+ $typeIntervals = []; // 用于收集每个 type 的时间区间,用于后续不相交校验
|
|
|
+ foreach ($data['index_array'] as $key => $value){
|
|
|
+ if(empty($value['type'])) return [false, '人员指标类型不能为空'];
|
|
|
+ if(! isset(EmployeeIndex::$type_name[$value['type']])) return [false, '人员指标类型不存在'];
|
|
|
+ $name = EmployeeIndex::$type_name[$value['type']];
|
|
|
+ if(empty($value['crt_time']) || ! is_array($value['crt_time'])) return [false, $name . ":时间区间不能为空"];
|
|
|
+ list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($value['crt_time']);
|
|
|
+ $data['index_array'][$key]['start_time'] = $start_time;
|
|
|
+ $data['index_array'][$key]['end_time'] = $end_time;
|
|
|
+ if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, $name . ":时间区间无效"];
|
|
|
+ // 收集每个 type 的时间区间,用于后续不相交校验
|
|
|
+ $type = $value['type'];
|
|
|
+ $typeIntervals[$type][] = [
|
|
|
+ 'start' => $start_time,
|
|
|
+ 'end' => $end_time,
|
|
|
+ 'index' => $key, // 用于报错定位
|
|
|
+ ];
|
|
|
|
|
|
- $mobile = $data['mobile'] ?? "";
|
|
|
- $number = $data['number'] ?? "";
|
|
|
- if(! $is_add){
|
|
|
- if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
|
|
|
- $bool = Employee::where('del_time',0)
|
|
|
- ->where('id','<>',$data['id'])
|
|
|
- ->where(function ($query) use ($mobile, $number){
|
|
|
- $query->where('number', $number);
|
|
|
- $query->when(! empty($mobile), function ($query) use ($mobile) {
|
|
|
- return $query->orWhere('mobile', $mobile);
|
|
|
- });
|
|
|
- })->exists();
|
|
|
- }else{
|
|
|
- $bool = Employee::where('del_time',0)
|
|
|
- ->where(function ($query) use ($mobile, $number){
|
|
|
- $query->where('number', $number);
|
|
|
- $query->when(! empty($mobile), function ($query) use ($mobile) {
|
|
|
- return $query->orWhere('mobile', $mobile);
|
|
|
- });
|
|
|
- })->exists();
|
|
|
+ if(! isset($value['index'])) return [false, 'index不存在'];
|
|
|
+ if(isset(EmployeeIndex::$positive[$value['type']])){
|
|
|
+ $name_string = EmployeeIndex::$positive[$value['type']];
|
|
|
+ $res = $this->checkNumber($value['index'],2,'non-negative');
|
|
|
+ if(! $res['valid']) return [false, $name_string . ":" . $res['error']];
|
|
|
+ }elseif(isset(EmployeeIndex::$null[$value['type']])){
|
|
|
+ $name_string = EmployeeIndex::$positive[$value['type']];
|
|
|
+ $res = $this->checkNumber($value['index']);
|
|
|
+ if(! $res['valid']) return [false, $name_string . ":" . $res['error']];
|
|
|
+ }elseif(isset(EmployeeIndex::$positive_2[$value['type']])){
|
|
|
+ if(! isset($value['index_2'])) return [false, 'index_2不存在'];
|
|
|
+ if(! isset($value['index_3'])) return [false, 'index_3不存在'];
|
|
|
+ $name_string = EmployeeIndex::$positive[$value['type']];
|
|
|
+ $res = $this->checkNumber($value['index'],2,'positive');
|
|
|
+ if(! $res['valid']) return [false, $name_string . "基数:" . $res['error']];
|
|
|
+ $res = $this->checkNumber($value['index_2'],2,'positive');
|
|
|
+ if(! $res['valid']) return [false, $name_string . "比例:" . $res['error']];
|
|
|
+ $res = $this->checkNumber($value['index_3'],2,'positive');
|
|
|
+ if(! $res['valid']) return [false, $name_string . ":" . $res['error']];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //在校验循环之后
|
|
|
+ foreach ($typeIntervals as $type => $intervals) {
|
|
|
+ if (count($intervals) < 2) continue;
|
|
|
+
|
|
|
+ usort($intervals, function($a, $b) {
|
|
|
+ return $a['start'] <=> $b['start'];
|
|
|
+ });
|
|
|
+
|
|
|
+ for ($i = 1; $i < count($intervals); $i++) {
|
|
|
+ $prev = $intervals[$i - 1];
|
|
|
+ $curr = $intervals[$i];
|
|
|
+
|
|
|
+ // 方式1:闭区间 [start, end] —— 推荐大多数场景
|
|
|
+ if ($prev['end'] >= $curr['start']) {
|
|
|
+ $typeName = EmployeeIndex::$type_name[$type] ?? $type;
|
|
|
+ return [false, "{$typeName}的时间区间存在重叠,请检查"];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- if($bool) return [false,'工号或手机号码已存在!'];
|
|
|
|
|
|
return [true,''];
|
|
|
}
|
|
@@ -691,6 +715,7 @@ class EmployeeService extends Service
|
|
|
if(isset($data['parent_id'])) $model->where('parent_id', $data['parent_id']);
|
|
|
if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
|
|
|
if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
|
|
|
+ if(isset($data['is_use'])) $model->where('is_use', $data['is_use']);
|
|
|
|
|
|
$list = $model->get()->toArray();
|
|
|
$list = $this->fillDepartList($list, $user);
|