|
|
@@ -74,6 +74,8 @@ class EmployeeService extends Service
|
|
|
DB::beginTransaction();
|
|
|
$model = new Employee();
|
|
|
$model = $model->where('id',$data['id'])->first();
|
|
|
+ $model->emp_name = $data['emp_name'];
|
|
|
+ $model->mobile = $data['mobile'] ?? '';
|
|
|
$model->is_admin = $data['is_admin'];
|
|
|
$model->account = $data['number'];
|
|
|
if($model->is_admin == 1){
|
|
|
@@ -86,11 +88,22 @@ class EmployeeService extends Service
|
|
|
$model->save();
|
|
|
|
|
|
$time = time();
|
|
|
+ EmployeeDepartPermission::where('employee_id',$data['id'])->delete();
|
|
|
+ if(! empty($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
|
|
|
]);
|
|
|
- if(isset($data['role'])){
|
|
|
+ if(! empty($data['role'])){
|
|
|
$insert = [];
|
|
|
foreach ($data['role'] as $value){
|
|
|
$insert[] = [
|
|
|
@@ -103,13 +116,6 @@ class EmployeeService extends Service
|
|
|
EmployeeRole::insert($insert);
|
|
|
}
|
|
|
|
|
|
- if(! empty($data['index_array'])){
|
|
|
- EmployeeIndex::where('del_time',0)
|
|
|
- ->where('employee_id', $data['id'])
|
|
|
- ->update(['del_time' => $time]);
|
|
|
- EmployeeIndex::insert($data['index_array']);
|
|
|
- }
|
|
|
-
|
|
|
DB::commit();
|
|
|
}catch (\Exception $exception){
|
|
|
DB::rollBack();
|
|
|
@@ -131,16 +137,14 @@ class EmployeeService extends Service
|
|
|
|
|
|
try{
|
|
|
DB::beginTransaction();
|
|
|
- $model = new Employee();
|
|
|
|
|
|
+ $model = new Employee();
|
|
|
$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->crt_id = $user['id'];
|
|
|
$model->is_admin = $data['is_admin'];
|
|
|
+ $model->is_wx_admin = $data['is_wx_admin'];
|
|
|
$model->account = $data['number'];
|
|
|
if($model->is_admin == 1){
|
|
|
if($data['password'] !== '******'){
|
|
|
@@ -149,7 +153,7 @@ class EmployeeService extends Service
|
|
|
}
|
|
|
$model->save();
|
|
|
|
|
|
- if(isset($data['depart'])){
|
|
|
+ if(! empty($data['depart'])){
|
|
|
$insert = [];
|
|
|
foreach ($data['depart'] as $value){
|
|
|
$insert[] = [
|
|
|
@@ -160,7 +164,7 @@ class EmployeeService extends Service
|
|
|
EmployeeDepartPermission::insert($insert);
|
|
|
}
|
|
|
|
|
|
- if(isset($data['role'])){
|
|
|
+ if(! empty($data['role'])){
|
|
|
$insert = [];
|
|
|
foreach ($data['role'] as $value){
|
|
|
$insert[] = [
|
|
|
@@ -210,40 +214,10 @@ class EmployeeService extends Service
|
|
|
return [true,'删除成功'];
|
|
|
}
|
|
|
|
|
|
- public function employeeDetail($data){
|
|
|
- if($this->isEmpty($data,'id')) return [false,'人员id不能为空'];
|
|
|
- $user = Employee::where('id', $data['id'])->where('del_time',0)->first();
|
|
|
- if(empty($user)) return [false, '人员不存在或已被删除'];
|
|
|
- $user = $user->toArray();
|
|
|
- if($user['is_admin']){
|
|
|
- $user['password'] = "******";
|
|
|
- }else{
|
|
|
- $user['password'] = "";
|
|
|
- }
|
|
|
- $detail = EmployeeIndex::where('del_time',0)
|
|
|
- ->where('employee_id',$user['id'])
|
|
|
- ->select('employee_id','index','index_2','index_3','type','start_time','end_time')
|
|
|
- ->get()->toArray();
|
|
|
- $user['index_array'] = $detail;
|
|
|
- $res = DB::table('employee_role as a')
|
|
|
- ->leftJoin('role as b','a.role_id','=','b.id')
|
|
|
- ->where('a.del_time',0)
|
|
|
- ->where('b.del_time',0)
|
|
|
- ->where("a.employee_id",$user['id'])
|
|
|
- ->select('a.employee_id','b.title','b.id')
|
|
|
- ->get()->toArray();
|
|
|
- $role_name = "";
|
|
|
- $role = [];
|
|
|
- foreach ($res as $value){
|
|
|
- if(empty($role_name)){
|
|
|
- $role_name = $value->title;
|
|
|
- }else{
|
|
|
- $role_name .= ',' . $value->title;
|
|
|
- }
|
|
|
- $role[] = $value->id;
|
|
|
- }
|
|
|
- $user['role'] = $role;
|
|
|
- $user['role_name'] = $role_name;
|
|
|
+ public function employeeDetail($data, $user){
|
|
|
+ if(empty($data['id'])) return [false,'人员id不能为空'];
|
|
|
+ list($status, $return) = $this->employeeList(['id' => $data['id']], $user);
|
|
|
+ $user = $return['data'][0] ?? [];
|
|
|
|
|
|
return [true, $user];
|
|
|
}
|
|
|
@@ -254,25 +228,24 @@ class EmployeeService extends Service
|
|
|
* @param $user
|
|
|
* @return array
|
|
|
*/
|
|
|
- public function employeeList($data,$user){
|
|
|
+ public function employeeList($data, $user){
|
|
|
$model = Employee::where('del_time',0)
|
|
|
- ->select('number','mobile','emp_name','id','is_admin','state')
|
|
|
- ->orderBy('state','asc');
|
|
|
+ ->select('number','mobile','emp_name','id','is_admin','is_wx_admin','crt_time')
|
|
|
+ ->orderBy('id','desc');
|
|
|
|
|
|
+ if(! empty($data['id'])) $model->where('id', $data['id']);
|
|
|
if(! empty($data['number'])) $model->where('number', 'LIKE', '%'.$data['number'].'%');
|
|
|
if(! empty($data['emp_name'])) $model->where('emp_name', 'LIKE', '%'.$data['emp_name'].'%');
|
|
|
- if(! empty($data['state'])) $model->where('state',$data['state']);
|
|
|
if(! empty($data['mobile'])) $model->where('mobile', 'LIKE', '%'.$data['mobile'].'%');
|
|
|
if(! isset($data['all_emp'])) $model->where('id','<>',Employee::SPECIAL_ADMIN);
|
|
|
if(isset($data['is_admin'])) $model->where('is_admin', $data['is_admin']);
|
|
|
+ if(isset($data['is_wx_admin'])) $model->where('is_wx_admin', $data['is_wx_admin']);
|
|
|
if(! empty($data['role'])) {
|
|
|
$emp = EmployeeRole::where('role_id',$data['role'])
|
|
|
->where('del_time',0)
|
|
|
->select('employee_id')->get()->toArray();
|
|
|
$model->whereIn('id',array_column($emp,'employee_id'));
|
|
|
}
|
|
|
- if($user['id'] != Employee::SPECIAL_ADMIN) $model->where('is_manager',0);
|
|
|
-
|
|
|
$list = $this->limit($model,'',$data);
|
|
|
|
|
|
//组织数据
|
|
|
@@ -289,11 +262,33 @@ class EmployeeService extends Service
|
|
|
public function organizationEmployeeData($data) {
|
|
|
if (empty($data['data'])) return $data;
|
|
|
|
|
|
+ //获取部门 角色
|
|
|
+ list($status, $return) = $this->getEmployee(array_column($data['data'],'id'));
|
|
|
+ if($status) list($role, $role2, $depart_title, $depart_id) = $return;
|
|
|
+
|
|
|
+ foreach ($data['data'] as $key => $value){
|
|
|
+ $data['data'][$key]['role'] = $role2[$value['id']] ?? [];
|
|
|
+ $data['data'][$key]['role_name'] = $role[$value['id']] ?? '';
|
|
|
+ $data['data'][$key]['depart'] = $depart_id[$value['id']] ?? [];
|
|
|
+ $data['data'][$key]['depart_title'] = $depart_title[$value['id']] ?? '';
|
|
|
+ $data['data'][$key]['is_wx_admin_title'] = Employee::IS_WX_ADMIN_PC[$value['is_wx_admin']] ?? "";
|
|
|
+ $data['data'][$key]['is_admin_title'] = Employee::IS_ADMIN_PC[$value['is_admin']] ?? "";
|
|
|
+ $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']) : "";
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getEmployee($employee_ids){
|
|
|
+ if(empty($employee_ids)) return [false, ''];
|
|
|
+ if(! is_array($employee_ids)) $employee_ids = [$employee_ids];
|
|
|
+
|
|
|
+ //角色
|
|
|
$res = DB::table('employee_role as a')
|
|
|
->leftJoin('role as b','a.role_id','=','b.id')
|
|
|
->where('a.del_time',0)
|
|
|
->where('b.del_time',0)
|
|
|
- ->whereIn("a.employee_id",array_column($data['data'],'id'))
|
|
|
+ ->whereIn("a.employee_id", $employee_ids)
|
|
|
->select('a.employee_id','b.title','b.id')
|
|
|
->get()->toArray();
|
|
|
$role = $role2 = [];
|
|
|
@@ -306,10 +301,11 @@ class EmployeeService extends Service
|
|
|
$role2[$value->employee_id][] = $value->id;
|
|
|
}
|
|
|
|
|
|
+ //部门
|
|
|
$res = DB::table('employee_depart_permission as a')
|
|
|
->select('a.employee_id','b.title','b.id')
|
|
|
->join('depart as b','a.depart_id','=','b.id')
|
|
|
- ->whereIn("a.employee_id",array_column($data['data'],'id'))
|
|
|
+ ->whereIn("a.employee_id",$employee_ids)
|
|
|
->orderBy('b.id')
|
|
|
->get()->toArray();
|
|
|
$depart_title = $depart_id = [];
|
|
|
@@ -322,16 +318,16 @@ class EmployeeService extends Service
|
|
|
$depart_id[$value->employee_id][] = $value->id;
|
|
|
}
|
|
|
|
|
|
- foreach ($data['data'] as $key => $value){
|
|
|
- $data['data'][$key]['role'] = $role2[$value['id']] ?? [];
|
|
|
- $data['data'][$key]['role_name'] = $role[$value['id']] ?? '';
|
|
|
- $data['data'][$key]['depart'] = $depart_id[$value['id']] ?? [];
|
|
|
- $data['data'][$key]['depart_title'] = $depart_title[$value['id']] ?? '';
|
|
|
- $data['data'][$key]['state_title'] = $value['state'] == Employee::USE ? "启用" : "停用";
|
|
|
- $data['data'][$key]['is_admin_title'] = $value['is_admin'] ? "是" : "否";
|
|
|
- }
|
|
|
+ return [true, [$role, $role2, $depart_title, $depart_id]];
|
|
|
+ }
|
|
|
|
|
|
- return $data;
|
|
|
+ public function getEmployeeMap($employee_ids){
|
|
|
+ if(empty($employee_ids)) return [];
|
|
|
+ if(! is_array($employee_ids)) $employee_ids = [$employee_ids];
|
|
|
+
|
|
|
+ return Employee::whereIn('id', $employee_ids)
|
|
|
+ ->pluck('emp_name', 'id')
|
|
|
+ ->toArray();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -341,79 +337,32 @@ class EmployeeService extends Service
|
|
|
* @return array
|
|
|
*/
|
|
|
public function employeeRule(&$data, $is_add = true){
|
|
|
- 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'][0]) || empty($value['crt_time'][1]) || ! 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;
|
|
|
- $data['index_array'][$key]['employee_id'] = $data['id'];
|
|
|
- $data['index_array'][$key]['mark'] = $value['mark'] ?? "";
|
|
|
- unset($data['index_array'][$key]['crt_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, // 用于报错定位
|
|
|
- ];
|
|
|
-
|
|
|
- if(! isset($value['index'])) return [false, 'index不存在'];
|
|
|
- if(! isset($value['index_2'])) return [false, 'index_2不存在'];
|
|
|
- if(! isset($value['index_3'])) return [false, 'index_3不存在'];
|
|
|
- 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::$null[$value['type']];
|
|
|
- $res = $this->checkNumber($value['index']);
|
|
|
- if(! $res['valid']) return [false, $name_string . ":" . $res['error']];
|
|
|
- }elseif(isset(EmployeeIndex::$positive_2[$value['type']])){
|
|
|
- $name_string = EmployeeIndex::$positive_2[$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(empty($data['number'])) return [false,'工号不能为空'];
|
|
|
+ if(empty($data['emp_name'])) return [false,'姓名不能为空'];
|
|
|
+ if(empty($data['mobile'])) return [false,'手机号不能为空'];
|
|
|
|
|
|
+ $mobile = $data['mobile'];
|
|
|
+ $number = $data['number'] ?? "";
|
|
|
if(! $is_add){
|
|
|
- if(empty($data['id'])) return [false,'人员ID不能为空'];
|
|
|
-
|
|
|
+ if(empty($data['id'])) return [false,'ID不能为空!'];
|
|
|
$bool = Employee::where('del_time',0)
|
|
|
- ->where('id', $data['id'])
|
|
|
- ->exists();
|
|
|
- if(! $bool) return [false, '人员不存在或已被删除'];
|
|
|
+ ->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($bool) return [false,'工号或手机号码已存在'];
|
|
|
|
|
|
return [true,''];
|
|
|
}
|
|
|
@@ -1052,8 +1001,7 @@ class EmployeeService extends Service
|
|
|
|
|
|
$res = reset($res);
|
|
|
if(! Hash::check($data['password'], $res['password'])) return [false,'密码错误'];
|
|
|
- if($res['is_admin'] != Employee::IS_ADMIN) return [false,'账号限制登录'];
|
|
|
- if($res['state'] == Employee::NOT_USE) return [false,'账号已停用'];
|
|
|
+ if($res['is_admin'] != Employee::IS_ADMIN) return [false,'账号限制登录PC端'];
|
|
|
|
|
|
return [true, ['id'=>$res['id'],'name'=>$res['emp_name'], 'number' => $res['number']]];
|
|
|
}
|
|
|
@@ -1067,8 +1015,9 @@ class EmployeeService extends Service
|
|
|
$res = Employee::where('id', $userId)
|
|
|
->where('del_time',0)
|
|
|
->where('is_admin',Employee::IS_ADMIN)
|
|
|
- ->where('state',Employee::USE)->get()->first();
|
|
|
- if(empty($res)) return [false, '该账号无法登录,请联系管理员!'];
|
|
|
+ ->first();
|
|
|
+ if(empty($res)) return [false, '账号限制登录PC端后台'];
|
|
|
+ $res = $res->toArray();
|
|
|
|
|
|
return [true, $res];
|
|
|
}
|