employee['root_id'];
//不同开放平台小程序判断
$mini = appletConfiguration();
//薛鹊开放平台web应用 先不推,所以先使用旧的 这1行以后要注释
// if ($mini['name']=='装修宝mini') {
if (false) {
$employee_qr = Setting::where([['root_id','=',$id],['state','=',1],['name','=','employeeQrcode']])->findOrEmpty();
$manager_qr = Setting::where([['root_id','=',$id],['state','=',1],['name','=','managerQrcode']])->findOrEmpty();
$employee_qr = $employee_qr->isEmpty() ? $this->createQrcode('employee') : $employee_qr->content;
$manager_qr = $manager_qr->isEmpty() ? $this->createQrcode('manager') : $manager_qr->content;
if($employee_qr===false || $manager_qr===false) return View::display('');
$employee_qr = 'https://' . config('app.ali_oss_bindurl') . '/' . $employee_qr;
$manager_qr = 'https://' . config('app.ali_oss_bindurl') . '/' . $manager_qr;
}else{
$miniprogram = Miniprogram::where('root_id', $id)->findOrEmpty();
if ($miniprogram->isEmpty()) {
return View::display('');
}
$employee_qr = $miniprogram->employee_qr;
$manager_qr = $miniprogram->manager_qr;
}
View::assign('managerQr', $manager_qr);
View::assign('employeeQr', $employee_qr);
return View::fetch();
}
/**
* 生成员工店面邀请码
*/
private function createQrcode($type)
{
$id = request()->employee['root_id'];
$mini = appletConfiguration();
$info = Wechat::where('appid',$mini['mini']['appid'])->find();
// 邀请二维码生成
$miniQr = new Qrcode();
// 1)管理员二维码
$qr = $miniQr->getUnlimited($info->accesstoken, [
'scene' => $type.'=' . $id,
'page' => 'mycustomer/pages/invite/invite',
'width' => '280px',
'check_path' => false
]);
$rs = json_decode($qr, true);
if (!is_null($rs)) {
trace($rs, 'error');
return false;
}
$managerQr = 'invite' . DIRECTORY_SEPARATOR . uniqid() . '.jpeg';
ossContentUpload($managerQr, $qr);
Setting::insertGetId([
'root_id'=>$id,
'state'=>1,
'name'=>$type.'Qrcode',
'content'=>$managerQr
]);
return $managerQr;
}
public function list()
{
$request = request();
$param = $request->param();
$orgid = $request->get('orgid', $request->employee['root_id']);
$condition = [];
if (isset($param['verified']) && $param['verified'] == 0) {
$condition[] = ['state', '=', '待审核'];
$state = '待审核';
} else {
$state = '在职';
$condition[] = ['state', '=', '在职'];
}
$keyword = null;
if (!empty($param['keyword'])) {
$keyword = trim($param['keyword'], ' ');
$condition[] = ['name', 'like', '%' . $keyword . '%'];
}
if (isset($param['disable']) && $param['disable'] !== '') {
$condition[] = ['disable', '=', $param['disable']];
}
// $list = EmployeeLogic::employeelist($orgid, $condition, $param['page'], $param['limit']);
$org = Org::find($orgid);
$orgIds = Org::where([['path', 'like', $org->path . '%']])->column('id');
$condition[] = ['org_id', 'in', $orgIds];
$condition[] = ['uid', '<>', 0];
$empObjList = EmployeeModel::where($condition)->with(['org', 'grant', 'user'])->order('org_id asc, is_manager desc')->page($param['page'], $param['limit'])->select();
$list = $empObjList->visible([
'id','user.headimgurl', 'name','org.info','disable', 'is_manager', 'last_login_time', 'state', 'empcrm_disable', 'community_disable', 'clue_disable'
// ,'empcrm_disable', 'community_disable', 'clue_disable', 'weworksingle_uid', 'grant.name'
])->toArray();
foreach ($list as $k => $v) {
$list[$k]['user']['headimgurl'] = $v['user'] ?$v['user']['headimgurl']: 'https://thirdwx.qlogo.cn/mmopen/vi_32/4cjgCtJ67wtIU56FIgcwQkcYIjvwBEEichSbRVIMqo9FEuHXwTibYkGnJ0VqQW2esdLJwXo4Bad4Gp2czGPVZWCw/132';
}
$count = EmployeeModel::where($condition)->count();
return json(['code' => 0, 'data' => $list, 'count' => $count]);
}
public function grant()
{
$employeeid = input('employeeid');
View::assign('employeeid', $employeeid);
$grantlist = GrantLogic::grantselectorlist();
View::assign('grantlist', $grantlist);
return View::fetch();
}
public function grantlink()
{
$param = input();
$employeeid = $param['employeeid'];
$grantid = $param['grantid'];
if (EmployeeLogic::linkgrant($employeeid, $grantid)) {
return ['code' => 0, 'msg' => '权限关联成功'];
} else {
return ['code' => 1, 'msg' => '权限关联失败'];
}
}
public function delete()
{
$employee_id = input('empid');
if (EmployeeLogic::delete($employee_id)) {
return json(['code' => 0, 'msg' => '删除成功']);
} else {
return json(['code' => 1, 'msg' => '删除失败']);
}
}
public function details()
{
$employeeid = input('employeeid');
View::assign('employeeid', $employeeid);
$data = EmployeeModel::where('id', $employeeid)->with(['org', 'grant', 'user'])->find();
$data['phone'] = substr_replace($data['phone'], '******', 3, 6);
View::assign('data', $data);
$employee_card = EmployeeCard::where('employee_id', '=', $employeeid)->find();
View::assign('employee_card', $employee_card);
return View::fetch();
}
/**
* 更新员工手机号
*/
public function set_phone()
{
$param = Request::only(['employee_id', 'phone']);
if (!preg_match("/^1[3456789]\d{9}$/", $param['phone'])) {
return ['code' => 1, 'msg' => '手机号码格式不正确'];
}
$find = EmployeeModel::where(['id' => $param['employee_id'], 'root_id' => request()->employee->root_id])->find();
if (empty($find)) {
return ['code' => 1, 'msg' => '未查询到员工信息'];
}
$aec = new Aec(config('app.aec_key'), config('app.aec_iv'));
$phone = $aec->encrypt($param['phone']);
$empCount = EmployeeModel::whereOr([
[['phone', '=', $phone], ['root_id', '=', request()->employee->root_id], ['uid', '<>', 0], ['state', 'in', ['在职']]],
[['phone', '=', $phone], ['root_id', '=', request()->employee->root_id], ['grant_id', '>', 0]]
])->count();
if ($empCount > 0) {
return json(['code' => 1, 'msg' => '手机号已存在']);
}
$result = $find->save(['phone' => $param['phone']]);
if ($result) {
return ['code' => 0, 'msg' => '操作成功', 'data' => substr_replace($param['phone'], '******', 3, 6)];
} else {
return ['code' => 1, 'msg' => '操作失败'];
}
}
/**
* 保存形象照和微信
*/
public function save_card()
{
$employee_id = input('employee_id', '', 'intval');
$param = Request::only(['wx', 'image_photo', 'position']);
$find = EmployeeModel::where('id', '=', $employee_id)->find();
$result = $find->save($param);
if (!empty($param['image_photo'])) {
Designer::where('employee_id', '=', $employee_id)->save(['headimgurl' => $param['image_photo']]);
}
if ($result) {
return ['code' => 0, 'msg' => '操作成功'];
} else {
return ['code' => 1, 'msg' => '操作失败'];
}
}
public function hr()
{
/** 部门跳转 */
$employeeid = input('employeeid');
View::assign('employeeid', $employeeid);
$data = EmployeeModel::where(['id' => $employeeid, 'root_id' => request()->employee->root_id])->with(['org'])->find();
if (empty($data)) throw new HttpException(404, '数据不存在');
View::assign('data', $data);
View::assign('currentEmpOrg', $data->org);
$org = Org::where([['path', 'like', request()->employee->root_id . '-%']])->field('id,name,level,org_type')->order('path')->select();
View::assign('depart', $org);
/** 离职交接 */
// 同部门人员查找
$orgEmployee = EmployeeModel::field('id,name')->where([['org_id', '=', $data->org_id], ['state', '=', '在职'], ['id', '<>', $employeeid], ['root_id', '=', request()->employee->root_id], ['uid', '<>', 0]])->select();
View::assign('employeelist', $orgEmployee);
// 该部门以上部门获取
$orgPath = Org::where('id', $data->org_id)->value('path');
$prevOrg = Org::field('id,name')->where([['id', 'in', explode('-', $orgPath)]])->select();
View::assign('prevOrg', $prevOrg);
return View::fetch();
}
/**
* 2022-10-28 判断是否存在重复客户
* $id 要转移/离职 的业务员
* $eid 接受的业务员
* 该员工名下客户“客户名称”为重复客户,是否继续交接不重复客户(3个)
*/
private function checkRepeat($id,$eid){
//判断客户重复
$phone = Customer::where('employee_id',$eid)->column('phone,phone1,phone2');
$phones = [];
foreach ($phone as $v) {
$phones = array_merge($phones,$v);
}
$phones = array_filter($phones);
$cid = Customer::where('employee_id',$id)->column('id,name,phone,phone1,phone2');
$repeat = $no_repeat = [];
foreach ($cid as $v2) {
$l_phone = array_filter([$v2['phone'],$v2['phone1'],$v2['phone2']]);
array_intersect($phones,$l_phone) ? $repeat[] = $v2['name'] : $no_repeat[] = $v2['id'];
}
$data['repeat_count'] = count($repeat);
$data['repeat'] = $repeat ? implode(',',$repeat) : '';
$data['no_repeat'] = count($no_repeat);
return json(['code' => 0, 'data'=>$data]);
}
public function apiChangeDepartment()
{
$request = request();
$params = $request->param();
if (!isset($params['empid']) || !isset($params['orgid'])) return json(['code' => 1, 'msg' => '异常请求']);
if ($params['way'] == 2) {
if (empty($params['recipient'])) {
return json(['code' => 1, 'msg' => '请选择部门接收人']);
}
if (empty($params['assign_emp'])) {
return json(['code' => 1, 'msg' => '请选择指派客户接收人']);
}
}
//检测是否重复
if(!empty($params['repeat']) && !empty($params['recipient'])) return $this->checkRepeat($params['empid'],$params['recipient']);
$newdata = [];
$newdata['org_id'] = $params['orgid'];
if (isset($params['therole'])) {
$newdata['role'] = $params['therole'];
}
$newdata['is_manager'] = isset($params['is_manager']) && $params['is_manager'] == 1 ? 1 : 0;
$employee = EmployeeModel::where([['id', '=', $params['empid']], ['root_id', '=', $request->employee->root_id]])->find();
if (empty($employee)) return json(['code' => 1, 'msg' => '数据不存在']);
// 部门跨属性部门进行转移
// $orgTypes = Org::where([['id', 'in', [$employee->org_id, $newdata['org_id']]]])->group('org_type')->column('org_type');
// if (count($orgTypes) > 1 && in_array(2, $orgTypes)) return json(['code' => 1, 'msg' => '只能调整到相同属性的部门']);
Db::startTrans();
try {
//更新是否管理层
$employee->save(['is_manager'=>$newdata['is_manager']]);
// 客户交接方式
if ($params['way'] == 1 && $newdata['org_id'] != $employee->org_id) {
// 更新业务员下级推广员关联的部门
AgentUser::where(['root_id' => $request->employee->root_id, 'agent_employee_id' => $employee->id])->update(['org_id' => $newdata['org_id']]);
// 更新客户所属部门
Customer::where(['employee_id' => $employee->id])->update(['org_id' => $newdata['org_id']]);
// 更新属于这个员工的跟踪记录
CustomerVisitLog::where('employee_id', '=', $employee->id)->update(['org_id' => $newdata['org_id'],'customer_org_id'=>$newdata['org_id']]);
//更新属于这个员工的线索量(带走)
CustomerClue::where('employee_id', '=', $employee->id)->update(['org_id' => $newdata['org_id']]);
$employee->save($newdata);
//更新飞鱼线索
FishData::where(['employee_id' => $employee->id])->update(['org_id' => $newdata['org_id']]);
} elseif ($params['way'] == 2) {
$cids = Customer::where(['employee_id' => $employee->id])->column('id,phone,phone1,phone2');
$orgids = orgSubIds($request->employee->root_id);
$assign_list = Customer::where([['assigned_personnel', 'find in set', $employee->id], ['org_id', 'in', $orgids]])->select()->toArray();
$designer_have = Customer::where([['designer_id', '=', $employee->id], ['org_id', 'in', $orgids]])->count();
// 留客户在原部门中
if (empty($params['recipient']) && !empty($cids)) {
return json(['code' => 1, 'msg' => '请选择部门接收人']);
}
if (!empty($params['recipient'])) {
$recipient = EmployeeModel::where(['id' => $params['recipient'], 'org_id' => $employee->org_id])->find();
if (empty($recipient) && !empty($cids)) return json(['code' => 1, 'msg' => '请选择部门接收人']);
}
if (empty($params['assign_emp']) && (!empty($assign_list) || !empty($designer_have))) {
return json(['code' => 1, 'msg' => '请选择指派客户接收人']);
}
if (!empty($params['assign_emp'])) {
$assign = EmployeeModel::where(['id' => $params['assign_emp'], 'org_id' => $employee->org_id])->find();
if (empty($assign) && (!empty($assign_list) || !empty($designer_have))) return json(['code' => 1, 'msg' => '请选择指派客户接收人']);
}
// 更新业务员的经纪人为新交接员工
AgentUser::where(['root_id' => $request->employee->root_id, 'agent_employee_id' => $employee->id])->update(['agent_employee_id' => $recipient->id]);
//判断客户重复
$phone = Customer::where('employee_id',$recipient->id)->column('phone,phone1,phone2');
$phones = [];
foreach ($phone as $v) {
$phones = array_merge($phones,$v);
}
$phones = array_filter($phones);
$repeat = $no_repeat = [];
foreach ($cids as $v2) {
$l_phone = array_filter([$v2['phone'],$v2['phone1'],$v2['phone2']]);
array_intersect($phones,$l_phone) ? $repeat[] = $v2['id'] : $no_repeat[] = $v2['id'];
}
//不重复的可以迁移
if ($no_repeat) {
Customer::where([['id','in',$no_repeat]])->update(['employee_id' => $recipient->id,'employee_time' => date('Y-m-d H:i:s', time())]);
//更新属于这个员工的线索量(带走)
CustomerClue::where('employee_id', '=', $employee->id)->update(['org_id' => $employee->org_id]);
//交接跟进记录中的customer_employee_id为新员工的id
CustomerVisitLog::where([['customer_id','in',$no_repeat]])->update(['customer_employee_id'=>$recipient->id]);
//处理无效的客户的员工id为新员工的id
CustomerInvalidLog::where([['employee_id','=',$employee->id],['root_id','=',$employee->root_id]])->update(['employee_id'=>$recipient->id]);
}
// 指派的客户处理
foreach ($assign_list as $k => $v) {
$assign_personal = explode(',', $v['assigned_personnel']);
$assign_personal = array_diff($assign_personal, [$employee->id]);
$assign_personal[] = $params['assign_emp'];
$assign_personal = array_unique($assign_personal);
Customer::where('id', $v['id'])->save(['assigned_personnel'=> implode(',', $assign_personal)]);
}
// 设计师变更
Customer::where([['designer_id', '=', $employee->id], ['org_id', 'in', $orgids]])->save(['designer_id'=> $params['assign_emp']]);
//如果没有重复才能变更部门
$res = true;
if(empty($repeat)){
$res = false;
$employee->save($newdata);
}
// 更新交接客户
// Customer::where(['employee_id' => $employee->id])->update(['org_id' => $recipient->org_id, 'employee_id' => $recipient->id, 'employee_time' => date('Y-m-d H:i:s', time())]);
//更新飞鱼线索
$targetName = EmployeeModel::where(['id' => $recipient->id])->value('name');
FishData::where(['employee_id' => $employee->id])->update(['org_id' => $recipient->org_id,'employee_id' => $recipient->id, 'clue_owner_name' => $targetName]);
}
Db::commit();
} catch (\Exception $e) {
trace($e->getMessage(), 'error');
// 回滚事务
Db::rollback();
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
if($params['way'] == 2 && $res==true) {
return json(['code' => 0, 'msg' => '已交接' . count($no_repeat) . '个客户,' . count($assign_list) . '个被指派客户,剩余' . count($repeat) . '个客户。请选择其他人员交接']);
}
if ($request->employee->id == $params['empid']) session('employee', $employee);
event(new Msg($params['empid'], '您的部门岗位发生变动,请知晓!', 'apiChangeDepartment'));
return json(['code' => 0, 'msg' => '部门调整成功']);
}
public function apiQuitHandling()
{
$request = request();
$params = $request->param();
if (!isset($params['empid'])) return false;
if (!isset($params['target_employee_id']) || $params['target_employee_id'] == 0) return json(['code' => 1, 'msg' => '必须选择交接人']);
//检测重复客户
if(!empty($params['repeat']) && !empty($params['target_employee_id'])) return $this->checkRepeat($params['empid'],$params['target_employee_id']);
// 检测接收人和离职人是否再同一企业
$check = EmployeeModel::where([['id', 'in', [$params['target_employee_id'], $params['empid']]], ['root_id', '=', $request->employee->root_id], ['state', '=', '在职']])->count();
if ($check != 2) return json(['code' => 1, 'msg' => '交接失败']);
$info = EmployeeModel::where('id', $params['empid'])->value('state');
if($info=='离职') return json(['code' => 1, 'msg' => '人员已离职']);
Db::startTrans();
try {
//
//$targetArr = EmployeeModel::find($params['target_employee_id'])->toArray();
//handle customers
//接收人 和 接受人的客户
$targetOrg = EmployeeModel::where(['id' => $params['target_employee_id']])->value('org_id');
$phone = Customer::where('employee_id',$params['target_employee_id'])->column('phone,phone1,phone2');
$phones = [];
foreach ($phone as $v) {
$phones = array_merge($phones,$v);
}
$phones = array_filter($phones);
//离职人员的客户
$cids = Customer::where(['employee_id' => $params['empid']])->column('id,phone,phone1,phone2');
$repeat = $no_repeat = [];
foreach ($cids as $v2) {
$l_phone = array_filter([$v2['phone'],$v2['phone1'],$v2['phone2']]);
array_intersect($phones,$l_phone) ? $repeat[] = $v2['id'] : $no_repeat[] = $v2['id'];
}
//不重复的可以迁移
if ($no_repeat) {
$ori_info_arr = [
//'uid' => $item->uid,
'employee_id' => $params['empid']
];
Customer::where([['id','in',$no_repeat]])->update([
'employee_id' => $params['target_employee_id'],
'org_id' => $targetOrg,
//'uid' => (isset($targetArr['uid'])) ? $targetArr['uid'] : NULL,
'changed_ori_info' => json($ori_info_arr),
'employee_time' => date('Y-m-d H:i:s', time())
]);
//交接线索
}
//交接跟进记录中的customer_employee_id为新员工的id
CustomerVisitLog::where([['customer_id', 'not in', $repeat], ['customer_employee_id', '=', $params['empid']]])->update(['customer_employee_id'=> $params['target_employee_id'], 'customer_org_id'=> $targetOrg]);
//如果没有重复才能变更部门
if(empty($repeat)){
if (!EmployeeModel::where('id', $params['empid'])->update(['state' => '离职', 'left_to_empid' => $params['target_employee_id'], 'is_manager' => 0, 'verified' => 0])) {
return json(['code' => 1, 'msg' => '人员不存在,或离职状态未更改']);
}
//交接人的客户
$old_data = Customer::where(['employee_id' => $params['empid']])->select();
foreach ($old_data as $item) {
$ori_info_arr = [
//'uid' => $item->uid,
'employee_id' => $item->employee_id
];
Customer::where(['id' => $item->id])->update([
'employee_id' => $params['target_employee_id'],
'org_id' => $targetOrg,
//'uid' => (isset($targetArr['uid'])) ? $targetArr['uid'] : NULL,
'changed_ori_info' => json($ori_info_arr),
'employee_time' => date('Y-m-d H:i:s', time())
]);
}
//handle customer clue
// 指派给设计师的客户交接
$designer_data = Customer::where(['designer_id' => $params['empid']])->select();
foreach ($designer_data as $item) {
Customer::where(['id' => $item->id])->update([
'designer_id' => $params['target_employee_id']
]);
}
// 共享指派客户交接
$assigned_personnel_data = Customer::where([['assigned_personnel', 'find in set', $params['empid']]])->select();
foreach ($assigned_personnel_data as $item) {
$arr = explode(',',$item['assigned_personnel']);
$arr = str_replace($params['empid'], $params['target_employee_id'], $arr);
Customer::where(['id' => $item->id])->update([
'assigned_personnel' => implode(',',$arr)
]);
}
//删除签到记录
$info = EmployeeModel::where('id', $params['empid'])->find()->toarray();
$d_where[] = ['user_id', '=', $info['uid']];
$d_where[] = ['root_id', '=', $info['root_id']];
UserSignLog::where($d_where)->delete();
// 1、我的话术清空(我提问的、我回答的、我共享的),不交接给交接人
// 2、之前回答的问题,回答的记录不清除,回答人的名称改为“匿名用
// 3、我的收藏清空
$d_where2[] = ['user_id', '=', $info['uid']];
UserCollect::where($d_where2)->delete();
// 4、系统消息清空
// $d_where1[] = ['type','=','system_msg_'.$info['root_id']];
$d_where1[] = ['employee_id', '=', $params['empid']];
EmployeeMsg::where($d_where1)->delete();
//5贡献值积分清空
$d_where3[] = ['root_id', '=', $info['root_id']];
$d_where3[] = ['employee_id', '=', $params['empid']];
Credits::where($d_where3)->delete();
CreditsLog::where($d_where3)->delete();
// 设计师离职,关联装修案例清空
$employee = EmployeeModel::where('id', $params['empid'])->find();
$org_type = Org::where('id', $employee['org_id'])->value('org_type');
if ($org_type == 2) {
MaterialCase::where([['root_id', '=', $employee['root_id']], ['designer_id', '=', $params['empid']]])->save(['designer_id' => 0]);
}
//楼盘离职交接
$building = Building::where('employee_id', $params['empid'])->column('id');
Building::where([['id', 'in', $building]])->update(['employee_id' => $params['target_employee_id'], 'handover_employee_id' => $params['empid']]);
//交接拓客案例
$matcase_list = MaterialCase::where(['employee_id' => $params['empid'], 'root_id' => $request->employee->root_id])->column('id');
MaterialCase::where([['id', 'in', $matcase_list]])->update(array('employee_id' => $params['target_employee_id'], 'handover_empid' => $params['empid']));
//交接话术(我共享的,我回答的,我提问的)
$talk_list = Talkskill::where([['employee_id', '=', $params['empid']], ['root_id', '=', $request->employee->root_id], ['type', 'in', ['share', 'submit']]])->column('id');
Talkskill::where([['id', 'in', $talk_list]])->update(array('employee_id' => $params['target_employee_id'], 'handover_empid' => $params['empid']));
$lzemp = EmployeeModel::where([['id', 'in', [$params['empid'], $params['target_employee_id']]]])->column('uid', 'id');
$answer_list = TalkskillComment::where([['uid', '=', $lzemp[$params['empid']]], ['root_id', '=', $request->employee->root_id]])->column('id');
TalkskillComment::where([['id', 'in', $answer_list]])->update(array('uid' => $lzemp[$params['target_employee_id']]));
dataStatistics($request->employee->root_id,'emp_count',1,'dec');//manage应用首页统计数据
if(Org::where('id',$info['org_id'])->value('org_type') == 2) dataStatistics($request->employee->root_id,'designer_count',1,'dec');//manage应用首页统计数据
//处理无效的客户的员工id为新员工的id
CustomerInvalidLog::where([['employee_id','=',$params['empid']],['root_id','=',$request->employee->root_id]])->update(['employee_id'=>$params['target_employee_id']]);
//更新飞鱼线索
$targetName = EmployeeModel::where(['id' => $params['target_employee_id']])->value('name');
FishData::where(['employee_id' => $params['empid']])->update(['org_id' => $targetOrg, 'employee_id' => $params['target_employee_id'],'clue_owner_name' => $targetName]);
}
Db::commit();
} catch (\Exception $e) {
trace($e->getMessage(), 'error');
// 回滚事务
Db::rollback();
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
if($repeat) return json(['code' => 1, 'msg' => '剩余重复客户请选择其他人员继续交接']);
return json(['code' => 0, 'msg' => '处理离职完成']);
}
public function info()
{
$request = request();
if (!$request->isAjax()) {
$empid = $request->employee->id;
$empobj = EmployeeModel::where('id', $empid)->with('user')->find();
$workwx = EmployeeWorkWx::where('employee_id', $empid)->field('name')->find();
$empobj['workwxname'] = !empty($workwx['name']) ? $workwx['name'] : '';
View::assign('data', $empobj);
// 微信登陆验证
$state = rand(1000, 9999);
session('login_state', $state);
View::assign('state', $state);
View::assign('domain', request()->domain());
View::assign('appid', config('app.kfweb_appid'));
//企业微信绑定参数
View::assign('qywx_agentid', config('app.ays_agentid'));
View::assign('qywx_state', $state);
View::assign('qywx_appid', config('app.corpid'));
return View::fetch();
}
}
// /**
// * 微信扫码换绑
// */
// public function wechat()
// {
// $request = request();
// $code = $request->param('code');
// View::assign('code', $code);
// return View::display("");
// }
// public function wxBind($code)
// {
// // 授权获取accesstoken
// $tokendata = (new Oplatform())->getAccessToken(config('app.kfweb_appid'), config('app.kfweb_secret'), $code);
// if (!$tokendata) {
// trace('授权获取用户信息', 'error');
// trace($tokendata, 'error');
// return json(['code' => 1, 'msg' => '请求失败,请刷新页面后重试!']);
// }
// if (isset($tokendata['errcode'])) { // code已经被使用
// if (in_array($tokendata['errcode'], [40029, 40163, 41008, 42003])) {
// return json(['code' => 1, 'msg' => '请求失败,请刷新页面后重试!']);
// } else {
// trace('授权获取用户信息', 'error');
// trace($tokendata, 'error');
// return json(['code' => 1, 'msg' => $tokendata['errmsg']]);
// }
// }
// // 拉取用户信息
// $getUserInfoUrl = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $tokendata['access_token'] . '&openid=' . $tokendata['openid'] . '&lang=zh_CN';
// $data = curl($getUserInfoUrl);
// $data = json_decode($data, true);
// if (isset($data['errcode']) || empty($data['openid'])) {
// trace('拉取用户信息', 'error');
// trace($data, 'error');
// return json(['code' => 1, 'msg' => '请求失败']);
// }
// // 更新用户数据
// $bindUser = User::where(['unionid' => $tokendata['unionid']])->findOrEmpty();
// $updatedata = [
// 'nickname' => $data['nickname'],
// 'sex' => $data['sex'],
// 'headimgurl' => $data['headimgurl'],
// 'province' => $data['province'],
// 'city' => $data['city'],
// 'country' => $data['country'],
// 'openid' => $data['openid'],
// 'unionid' => $data['unionid'] ?? '',
// ];
// $bindUser->save($updatedata);
// $empid = request()->employee->id;
// $empobj = EmployeeModel::where('id', $empid)->find();
// $user_id = $empobj->uid;
// // 同一微信,换绑失败
// if ($bindUser->id == $user_id) {
// return json(['code' => 1, 'msg' => '换绑微信不能与已绑定微信相同!']);
// }
// // 换绑的微信已经绑定
// $bind = EmployeeModel::where('uid', $bindUser->id)->count();
// if ($bind) {
// return json(['code' => 1, 'msg' => '该微信已绑定员工,换绑失败!']);
// }
// EmployeeModel::where('id', $empid)->save(['uid' => $bindUser->id]);
// return json(['code' => 0, 'msg' => '绑定成功!']);
// }
public function changephone()
{
$request = request();
$phone = $request->param('phone');
$empid = $request->employee->id;
if (EmployeeModel::where('id', $empid)->update(['phone' => $phone])) {
return json(['code' => 0, 'msg' => '手机号更换成功']);
} else {
return json(['code' => 1, 'msg' => '换绑微信不能与已绑定微信相同']);
}
}
/*
* 企业微信扫码绑定
*/
public function qywechat()
{
$request = request();
$code = $request->param('code');
$state = $request->param('state');
if (session('login_state') == $state) {
// 授权获取accesstoken
$getUserId = (new Work(config('app.corpid'), config('app.ays_scorpsecret')))->getUserId($code);
if (!$getUserId) {
trace('扫码获取企业微信UserId失败', 'error');
echo "";
exit;
}
$userInfo = (new Work(config('app.corpid'), config('app.ays_scorpsecret')))->getUserInfo($getUserId);
if (!$userInfo) {
trace('扫码获取企业微信信息失败', 'error');
echo "";
exit;
}
$employee_id = $request->employee->id;
$data = [
'employee_id' => $employee_id,
'userid' => $userInfo['userid'],
'name' => $userInfo['name'],
'mobile' => $userInfo['mobile'],
'department' => $userInfo['department'],
'order' => $userInfo['order'],
'position' => $userInfo['position'],
'gender' => $userInfo['gender'],
'email' => $userInfo['email'],
'is_leader_in_dept' => $userInfo['is_leader_in_dept'],
'direct_leader' => $userInfo['direct_leader'],
'avatar' => $userInfo['avatar'],
'thumb_avatar' => $userInfo['thumb_avatar'],
'telephone' => $userInfo['telephone'],
'alias' => $userInfo['alias'],
'extattr' => $userInfo['extattr'],
'status' => $userInfo['status'],
'qr_code' => $userInfo['qr_code'],
'external_profile' => isset($userInfo['external_profile']) ? $userInfo['external_profile'] : null,
'external_position' => isset($userInfo['external_position']) ? $userInfo['external_position'] : '',
'address' => isset($userInfo['address']) ? $userInfo['address'] : '',
'open_userid' => isset($userInfo['open_userid']) ? $userInfo['open_userid'] : '',
'main_department' => isset($userInfo['main_department']) ? $userInfo['main_department'] : 0,
];
$workwx = EmployeeWorkWx::where('employee_id', $employee_id)->find();
if (empty($workwx)) {
$add = EmployeeWorkWx::create(['userid' => 'fengjixuchui']);
} else {
$workwx->save($data);
}
return redirect(url('index/index'));
} else {
return redirect(url('login/index'));
}
}
public function setleader()
{
$request = request();
$empid = $request->param('empid');
$single_leader = 0;
if ($single_leader) {
//一个部门只能有一个领导
$org_id = EmployeeModel::where('id', $empid)->value('org_id');
$samelevelemps = EmployeeModel::where(['org_id' => $org_id, 'is_manager' => 1, 'role' => '领导'])->select();
if (!empty($samelevelemps)) {
foreach ($samelevelemps as $item) {
EmployeeModel::where('id', $item['id'])->update(['is_manager' => 0]);
}
}
}
///
$leader = EmployeeModel::where(['id' => $empid, 'root_id' => $request->employee->root_id])->find();
if (empty($leader)) return json(['code' => 1, 'msg' => '人员不存在']);
if ($leader->save(['is_manager' => 1])) {
if ($request->employee->id == $empid) {
session('employee', $leader);
}
$orgName = Org::where(['id' => $leader->org_id])->value('name');
event(new Msg($empid, '您被' . $request->employee->name . '添加为' . $orgName . '负责人身份,请知晓!', 'setleader'));
return json(['code' => 0, 'msg' => '设置领导成功']);
} else {
return json(['code' => 1, 'msg' => '设置领导失败']);
}
}
public function removeleader()
{
$request = request();
$empid = $request->param('empid');
///
if (EmployeeModel::where('id', $empid)->update(['is_manager' => 0, 'role' => '员工'])) {
if ($request->employee->id == $empid) {
$employee = EmployeeModel::where('id', $empid)->find();
session('employee', $employee);
}
event(new Msg($empid, '您的负责人身份被' . $request->employee->name . '移除了,请知晓!', 'removeleader'));
return json(['code' => 0, 'msg' => '取消领导成功']);
} else {
return json(['code' => 1, 'msg' => '取消领导失败']);
}
}
public function verifypass()
{
$request = request();
$empid = $request->param('empid');
// 手机端操作,pc端未刷新的情况
$thisApplyer = EmployeeModel::find($empid);
if ($thisApplyer->verified == 1) {
return json(['code' => 1, 'msg' => '已经处理,请刷新页面']);
}
//
$where[] = ['root_id', '=', $request->employee->root_id];
$where[] = ['id', '=', $empid];
if (EmployeeModel::where($where)->update(['state' => '在职', 'left_to_empid' => NULL, 'verified' => 1])) {
$companyName = Company::where(['root_id' => $request->employee->root_id])->value('company_name');
event(new Msg($empid, '您的申请已经通过,欢迎来到' . $companyName . '大家庭', 'verifypass'));
//审核通过短信通知
$clientType = Miniprogram::where('root_id', $request->employee->root_id)->value('notify');
$urldata = [
'content' => json_encode([
'client_type' => $clientType,
'path' => "/pages/index/index",
'query' => "ctp=" . $clientType,
'employee_id' => $empid
]),
'type' => 'join_company'
];
$shortUrl = new ShortUrl();
$shortUrl->save($urldata);
// 将ID进行
$query = dec52($shortUrl->id);
$shortUrl->uri = $query;
$shortUrl->save();
sendSms($thisApplyer['phone'], $thisApplyer['name'] . "您已成功加入" . $companyName . ",请点击链接访问数字化系统https://wzh.nczyzs.com/open/" . $query);
dataStatistics(request()->employee->root_id,'emp_count',1,'inc');//manage应用首页统计数据
if(Org::where('id',$thisApplyer->org_id)->value('org_type') == 2) dataStatistics(request()->employee->root_id,'designer_count',1,'inc');//设计师数量
return json(['code' => 0, 'msg' => '通过申请成功']);
} else {
return json(['code' => 1, 'msg' => '通过申请失败']);
}
}
public function verifypass_all()
{
$request = request();
$companyName = Company::where(['root_id' => $request->employee->root_id])->value('company_name');
$where[] = ['root_id', '=', $request->employee->root_id];
$where[] = ['state', '=', '待审核'];
$where[] = ['verified', '=', 0];
$where[] = ['uid', '>', 0];
$all = EmployeeModel::where($where)->field('id,name,phone,org_id')->select();
if (empty($all)) return json(['code' => 1, 'msg' => '没有待审核人员']);
$i = 0;
//企业notify
$clientType = Miniprogram::where('root_id', $request->employee->root_id)->value('notify');
$orgs = [];
foreach ($all as $k => $v) {
if (EmployeeModel::where([['id', '=', $v['id']]])->update(['state' => '在职', 'left_to_empid' => NULL, 'verified' => 1])) {
event(new Msg($v['id'], '您的申请已经通过,欢迎来到' . $companyName . '大家庭', 'verifypass'));
//审核通过短信通知
$urldata = [
'content' => json_encode([
'client_type' => $clientType,
'path' => "/pages/index/index",
'query' => "ctp=" . $clientType,
'employee_id' => $v['id']
]),
'type' => 'join_company'
];
$shortUrl = new ShortUrl();
$shortUrl->save($urldata);
// 将ID进行
$query = dec52($shortUrl->id);
$shortUrl->uri = $query;
$shortUrl->save();
sendSms($v['phone'], $v['name'] . "您已成功加入" . $companyName . ",请点击链接访问数字化系统https://wzh.nczyzs.com/open/" . $query);
$i+=1;
$orgs[] = $v['org_id'];
}
}
if ($orgs) {
dataStatistics(request()->employee->root_id,'emp_count',$i,'inc');//manage应用首页统计数据
$org = Org::where([['id','in',$orgs],['org_type','=',1]])->column('id');
$count = count(array_diff($orgs,$org));//去掉销售
dataStatistics(request()->employee->root_id,'designer_count',$count,'inc');//manage 统计设计师数量
}
return json(['code' => 0, 'msg' => '一键审核完成']);
}
public function verifypass_count()
{
$request = request();
$where[] = ['root_id', '=', $request->employee->root_id];
$where[] = ['state', '=', '待审核'];
$where[] = ['verified', '=', 0];
$count = EmployeeModel::where($where)->count();
return $count;
}
public function verifyreject()
{
$request = request();
$empid = $request->param('empid');
// 手机端操作,pc端未刷新的情况
$thisApplyer = EmployeeModel::find($empid);
//
if ($thisApplyer->verified == 1) {
return json(['code' => 1, 'msg' => '已经处理,请刷新页面']);
}
if ($thisApplyer->state == '驳回') {
return json(['code' => 1, 'msg' => '已经处理,请刷新页面']);
}
//
$where[] = ['root_id', '=', $request->employee->root_id];
$where[] = ['id', '=', $empid];
///
if (EmployeeModel::where($where)->update(['state' => '驳回', 'verified' => 0])) {
return json(['code' => 0, 'msg' => '驳回申请成功']);
} else {
return json(['code' => 1, 'msg' => '驳回申请失败']);
}
}
/**
* 部门人员获取(仅包含该部门下人员)
*/
public function orgEmployee($id)
{
// 检测该id是否是该组织结构下的
$employee = EmployeeModel::field('id,name,is_manager')->where([['uid', '>', 0], ['org_id', '=', $id], ['root_id', '=', request()->employee->root_id], ['state', '=', '在职']])->select();
return json(['code' => 0, 'data' => $employee]);
}
/**
* 设计师列表
*/
public function designer()
{
// Designer
$token = request()->employee;
$param = Request::only(['page' => 1, 'limit' => 10, 'keyword' => '', 'org'=>'', 'start_time'=> '']);
// $param = $request->param();
$w[] = ['path', 'like', $token['root_id'] . '-%'];
$w[] = ['org_type', '=', 2];
$orgs = Org::where($w)->column('id');
if ($param['keyword']) {
$w1[] = ['name', 'like', '%' . trim($param['keyword']) . '%'];
$w1[] = ['root_id', '=', $token['root_id']];
$ids1 = Designer::where($w1)->column('employee_id');
$w2[] = ['root_id', '=', $token['root_id']];
$ids2 = Designer::where($w2)->where("name is null AND name = ''")->column('employee_id');
$w2[] = ['name', 'like', '%' . trim($param['keyword']) . '%'];
$w2[] = ['id', 'not in', $ids2];
$ids3 = EmployeeModel::where($w2)->column('id');
$w3[] = ['id', 'in', array_merge($ids1, $ids3)];
}
if ($param['org']) {
$w3[] = ['org_id', '=', $param['org']];
}
if ($param['start_time']) {
$date = explode(' - ', $param['start_time']);
if (isset($date[0])) {
$date[0] = $date[0] . ' 00:00:00';
}
if (isset($date[1])) {
$date[1] = $date[1] . ' 23:59:59';
}
$w_date[] = ['vcr_updatetime', 'between', $date];
$w_date[] = ['root_id', '=', $token['root_id']];
$ids_date = Designer::where($w_date)->column('employee_id');
$w3[] = ['id', 'in', $ids_date];
}
$w3[] = ['org_id', 'in', $orgs];
$w3[] = ['root_id', '=', $token['root_id']];
$w3[] = ['state', '=', '在职'];
$root_id = $token['root_id'];
$list = EmployeeModel::with(['designer' => function ($query) use ($root_id) {
$query->where('root_id', $root_id)->visible(['headimgurl', 'employee_id', 'desc', 'good_at', 'position', 'work_years', 'addtime', 'vcr_updatetime', 'good_house', 'design_concept', 'vcr'])->bind(['desc', 'good_at', 'position', 'work_years', 'addtime', 'vcr_updatetime', 'good_house', 'design_concept', 'vcr', 'name', 'headimgurl']);
}, 'org'=>function($query){
$query->bind(['org_name'=>'name']);
}])->where($w3)->field('name title,id,show,org_id')->page($param['page'], $param['limit'])->select()->toArray();
$count = EmployeeModel::where($w3)->count();
foreach ($list as $k => $v) {
$list[$k]['name'] = $v['title'];
$list[$k]['show'] = $v['show'] ? '不展示' : '展示';
unset($list[$k]['designer']);
// 设计师预约次数统计
$list[$k]['designer_reserve'] = DesignerReserve::where('designer_id', '=', $v['id'])->count();
}
return json(['code' => 0, 'data' => $list, 'count' => $count]);
}
/**
* 设计师列表
*/
public function edit_show()
{
$param = Request::only(['id' => 0]);
$token = request()->employee;
$w[] = ['root_id', '=', $token['root_id']];
$w[] = ['id', '=', $param['id']];
$row = EmployeeModel::where($w)->findOrEmpty();
if ($row->isEmpty()) return json(['code' => 1, 'data' => '数据不存在', 'msg' => '数据不存在']);
$show = $row->show ? 0 : 1;
EmployeeModel::where($w)->update(['show' => $show]);
return json(['code' => 0, 'data' => '操作成功', 'msg' => '操作成功']);
}
/**
* 设计师编辑
*/
public function edit_designer()
{
$param = Request::only(['id' => 0, 'position' => '', 'name' => '', 'good_at' => '', 'desc' => '', 'work_years' => 0, 'house_at' => '', 'design_concept' => '', 'vcr' => '', 'vcrurl' => '', 'headimgurl' => '', 'img' => '']);
$param['headimgurl'] = $param['headimgurl'] ?: $param['img'];
if (!$param['headimgurl']) return json(['code' => 1, 'data' => '请选择形象照', 'msg' => '请选择形象照']);
$param['vcr'] = $param['vcr'] ?: $param['vcrurl'];
//if(!$param['vcr']) return json(['code' => 1, 'data' =>'请选择vcr','msg'=>'请选择vcr']);
if (!empty($param['vcr'])) {
$arr = explode(',', $param['vcr']);
$param['vcr'] = end($arr);
}
$token = request()->employee;
$w[] = ['root_id', '=', $token['root_id']];
$w[] = ['id', '=', $param['id']];
$row = EmployeeModel::where($w)->findOrEmpty();
if ($row->isEmpty()) return json(['code' => 1, 'data' => '数据不存在', 'msg' => '数据不存在']);
$w1[] = ['root_id', '=', $token['root_id']];
$w1[] = ['employee_id', '=', $param['id']];
$row = Designer::where($w1)->findOrEmpty();
$save['root_id'] = $token['root_id'];
$save['name'] = $param['name'];
$save['good_at'] = $param['good_at'];
$save['desc'] = $param['desc'];
$save['work_years'] = $param['work_years'];
$save['good_house'] = $param['house_at'];
$save['design_concept'] = $param['design_concept'];
$save['vcr'] = $param['vcr'];
$save['position'] = $param['position'];
$save['headimgurl'] = $param['headimgurl'];
if ($row->isEmpty()) {
if (!empty($save['vcr'])) {
$save['vcr_updatetime'] = date('Y-m-d H:i:s');
}
$save['employee_id'] = $param['id'];
Designer::insertGetId($save);
} else {
$old_vcr = $row->getData('vcr');
if ($save['vcr'] != $old_vcr) {
$save['vcr_updatetime'] = date('Y-m-d H:i:s');
}
$row->save($save);
}
EmployeeModel::where('id', $param['id'])->update(['image_photo' => $param['headimgurl']]);
return json(['code' => 0, 'data' => '操作成功', 'msg' => '操作成功']);
}
/**
* 设计师预约列表
*/
public function designer_reserve()
{
if (!request()->isAjax()) {
$id = input('id', '', 'intval');
View::assign('id', $id);
return View::fetch();
}
$param = request()->only(['page' => 1, 'limit' => 10, 'id']);
$list = DesignerReserve::with(['employee', 'user'])->where([['root_id', '=', request()->employee->root_id], ['designer_id', '=', $param['id']]])->page($param['page'], $param['limit'])->select()->each(function ($item) {
$org_ids = orgSubIds($item['root_id']);
$customer = Customer::where([['uid', '=', $item['uid']], ['org_id', 'in', $org_ids]])->find();
if ($customer) {
$item['customer_state'] = Customer::changeState($customer['state']);
} else {
$item['customer_state'] = '未建档';
}
switch ($item['pipe_type']) {
case 'materialCase':
$item['from'] = MaterialCase::where('id', '=', $item['data_id'])->value('title');
break;
case 'designer':
$item['from'] = '设计师预约';
break;
default:
break;
}
});
$count = DesignerReserve::where([['root_id', '=', request()->employee->root_id], ['designer_id', '=', $param['id']]])->count();
return json(['code' => 0, 'data' => $list, 'count' => $count]);
}
/**
* 小程序禁入开关
*/
public function disable($id, $disable, $type)
{
$employee = EmployeeModel::where([
['root_id', '=', request()->employee['root_id']],
['id', '=', $id],
['uid', '<>', 0]
])->find();
if (empty($employee)) return json(['code' => 1, 'msg' => '员工不存在']);
switch ($type){
case 1:
if ($disable == 'true') {
$employee->disable = 0;
} else {
$employee->disable = 1;
}
$disable_day_setting = Setting::where([['name', '=', 'disable_day'], ['root_id', '=', request()->employee['root_id']]])->findOrEmpty();
if (!$disable_day_setting->isEmpty() && $disable_day_setting['content']) {
$employee->last_login_time = date('Y-m-d H:i:s');
}
$employee->save();
break;
case 2:
if ($disable == 'true') {
$employee->empcrm_disable = 0;
} else {
$employee->empcrm_disable = 1;
}
$employee->save();
break;
case 3:
if ($disable == 'true') {
$employee->community_disable = 0;
} else {
$employee->community_disable = 1;
}
$employee->save();
break;
case 4:
if ($disable == 'true') {
$employee->clue_disable = 0;
} else {
$employee->clue_disable = 1;
}
$employee->save();
break;
default:
break;
}
return json(['code' => 0, 'msg' => '操作成功']);
}
/**
* 获取登陆剩余时间
*/
public function getTime()
{
$id = request()->employee->id;
$time = OperateLog::where([['employee_id','=', $id]])->order('id desc')->value('addtime');
$session = 18000;//session保持时间5小时
$res = strtotime($time)+$session;
return json(['code' => 0, 'data' => date('Y/m/d H:i:s',$res)]);
}
}