1、从企微拉去通讯录后,通过array_diff与数据库的数据进行比对,计算出新员工或离职员工;
2、在遍历中对数据库读写,速度有点慢,因为tp5的批量更新只能根据id批量更新,但是实际是根据userid更新,所以没有进一步优化程序;
// 获取部门员工
public function getStaff($departmentId = 1){
$staff = new \app\admin\model\wecom\Staff;
$contacts = Wecom::EasyWeChatApp('ffep');
// $res = $contacts->department->list();
$res = $contacts->user->getDetailedDepartmentUsers($departmentId, true);
// print_r(json_encode($res));exit;
// $userarr = [];
if($res['errmsg'] == 'ok'){
$userlist = $res['userlist'];
// dump($userlist);exit;
// 请求回来的员工 id
$userid1 = array_column($userlist, 'userid');
// print_r(count($getuserid));exit;
$row = $staff->select();
// 现在库里面的员工 id
$userid2 = array_column($row, 'userid');
// 新入职的staffid
$diff = array_diff($userid1, $userid2);
// 离职的staffid
$diff2 = array_diff($userid2, $userid1);
// print_r($diff2);exit;
if(empty($diff) && empty($diff2)){
// 更新员工的部门
// dump($userlist);exit;
$jls = 0;
foreach($userlist as $val){
$department = implode(',',$val['department']);
$user = new \app\admin\model\wecom\Staff;
$update = $user->where('userid', $val['userid'])
->update(['department' => $department]);
if($update) $jls ++;
}
if($jls>0){
$this->success("更新了".$jls."个部门信息",'wecom/staff','3');
}
$this->error('员工信息没有变化!');
}else{
// 入职、离职计数器
$ruzhi = $lizhi = 0;
if(!empty($diff)){
// 入职处理逻辑
foreach ($diff as $uid=>$id){
$val = $userlist[$uid];
$new = new \app\admin\model\wecom\Staff;
$new->name = $val['name'];
$new->department = implode(',',$val['department']);
$new->userid = $val['userid'];
$new->position = $val['position'];
$new->save();
$ruzhi ++;
}
}
if(!empty($diff2)){
// 离职处理逻辑
foreach ($diff2 as $uid=>$id){
$u = $staff->where('userid',$id)->find();
// 从员工信息表删除
$u->delete();
// 从会员信息表删除(所有平台都不能登录了)
User::where('mobile',$u->phone)->delete();
$lizhi ++;
}
}
}
$msg = "新入职人数:".$ruzhi.",离职人数:".$lizhi;
$this->success($msg,'wecom/staff','3');
}
}