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)]); } }