| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 |
- <?php
- /**
- * Created by PhpStorm.
- * Name: 芸众商城系统
- * Author: 广州市芸众信息科技有限公司
- * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
- * Date: 2021/9/22
- * Time: 13:37
- */
- namespace business\admin\controllers;
- use app\common\helpers\QrCodeHelper;
- use app\common\models\Member;
- use business\common\models\Department;
- use business\common\models\Staff;
- use business\common\services\BusinessService;
- use business\common\services\DepartmentService;
- use business\common\services\SettingService;
- use business\common\services\StaffService;
- use business\common\controllers\components\BaseController;
- class StaffController extends BaseController
- {
- /*
- * 根据手机号查询会员
- */
- public function businessGetMemberByMobile()
- {
- $type = request()->search_type;
- $search = request()->search;
- $mobile = request()->mobile;
- if (!$mobile && !in_array($type, ['uid', 'mobile', 'strict_mobile'])) {
- return $this->errorJson('请输入搜索条件');
- }
- $query = Member::uniacid()->select('uid', 'avatar', 'nickname', 'realname', 'mobile');
- switch ($type) {
- case 'uid' :
- $query->where('uid', $search);
- break;
- case 'strict_mobile':
- $query->where('mobile', $search);
- break;
- }
- if (request()->mobile || $type == 'mobile') {
- $query->where('mobile', 'like', '%' . (request()->mobile ?: $search) . '%');
- }
- $member = $query->get();
- return $this->successJson('成功', $member);
- }
- /*
- * 查找企业员工
- */
- public function searchStaff()
- {
- $request = \request();
- $kwd = $request->kwd;
- $where = [
- [function ($query) use ($kwd) {
- $query->where('name', 'like', "%{$kwd}%")->orWhere('mobile', 'like', "%{$kwd}%");
- }]
- ];
- if ($request->is_qy_wx) { //是否只查询企业微信员工
- $where[] = ['status', '<>', 0];
- }
- if ($request->disabled) { //是否屏蔽禁用员工
- $where[] = ['disabled', 0];
- }
- $staff = Staff::business()->where($where)->get();
- if ($staff->isNotEmpty()) {
- $staff = $staff->map(function ($v) {
- $v->gender_desc = Staff::GENDER_DESC[$v->gender] ?: '未知';
- $v->status_desc = Staff::STATUS_DESC[$v->status] ?: '未知';
- return $v;
- });
- }
- return $this->successJson('成功', $staff);
- }
- /*
- * 创建员工
- */
- public function createStaff()
- {
- if (\request()->id) {
- return $this->errorJson('参数异常');
- }
- $check_res = StaffService::checkManageRightByKey('createStaff', \request()->id, \request()->department_id);
- if (!$check_res['result']) {
- return $this->errorJson($check_res['msg']);
- }
- if (request()->department_id) {
- $true_request_department_id = [];
- $request_department_id = request()->department_id;
- foreach ($request_department_id as $v) {
- $true_request_department_id[] = end($v);
- }
- request()->offsetSet('department_id', $true_request_department_id);
- }
- $res = StaffService::changeStaff(\request()); //推送
- if (!$res['result']) {
- return $this->errorJson($res['msg']);
- }
- if (SettingService::EnabledQyWx() && $staff = $res['data']['staff']) {
- $res = StaffService::refreshStaff(0, $staff->id); //同步
- if (!$res['result']) {
- return $this->errorJson($res['msg']);
- }
- }
- return $this->successJson('创建成功');
- }
- /*
- * 编辑员工
- */
- public function updateStaff()
- {
- $check_res = StaffService::checkManageRightByKey('updateStaff', \request()->id, \request()->department_id);
- if (!$check_res['result']) {
- return $this->errorJson($check_res['msg']);
- }
- if (!\request()->id) {
- return $this->errorJson('请选择要编辑的员工');
- }
- if (!\request()->is_edit) {
- $staff = Staff::business()->select('id', 'uid', 'name', 'mobile', 'telephone', 'email', 'avatar', 'alias', 'address', 'position')
- ->with(['hasOneMember' => function ($query) {
- $query->select('uid', 'avatar', 'nickname', 'realname', 'mobile');
- }])->with(['hasManyDepartmentStaff' => function ($query) {
- $query->with('hasOneDepartment');
- }])->find(\request()->id);
- if (!$staff) {
- return $this->errorJson('员工不存在');
- }
- $department_list = [];
- $department_id = [];
- $department_name = [];
- $staff->hasManyDepartmentStaff->each(function ($v) use (&$department_list) {
- if ($v->hasOneDepartment->id) {
- if (!$department_list[$v->hasOneDepartment->level]) $department_list[$v->hasOneDepartment->level] = collect([]);
- $department_list[$v->hasOneDepartment->level]->push(['id' => $v->hasOneDepartment->id, 'name' => $v->hasOneDepartment->name, 'order' => $v->hasOneDepartment->order]);
- }
- });
- ksort($department_list);
- foreach ($department_list as $v) {
- $v = $v->sortByDesc('order');
- $department_id = array_merge($department_id, $v->pluck('id')->all());
- $department_name = array_merge($department_name, $v->pluck('name')->all());
- }
- $all_department = Department::business()->get();
- $true_department_id = [];
- foreach ($department_id as $v) {
- $this_parent_department = Department::getAllDepartmentParentId($v, $all_department);
- $this_parent_department = array_reverse($this_parent_department);
- $this_parent_department[] = $v;
- $true_department_id[] = $this_parent_department;
- }
- $staff->setAttribute('department_id', $true_department_id);
- $staff->setAttribute('department_name', $department_name);
- $staff->unsetRelation('hasManyDepartmentStaff');
- return $this->successJson('获取成功', ['staff' => $staff]);
- }
- if (request()->department_id) {
- $true_request_department_id = [];
- $request_department_id = request()->department_id;
- foreach ($request_department_id as $v) {
- $true_request_department_id[] = end($v);
- }
- request()->offsetSet('department_id', $true_request_department_id);
- }
- $res = StaffService::changeStaff(\request());
- if (!$res['result']) {
- return $this->errorJson($res['msg']);
- }
- if (SettingService::EnabledQyWx() && $staff = $res['data']['staff']) {
- $res = StaffService::refreshStaff(0, $staff->id); //同步
- if (!$res['result']) {
- return $this->errorJson($res['msg']);
- }
- }
- return $this->successJson('修改成功');
- }
- /*
- * 删除员工
- */
- public function deleteStaff()
- {
- $check_res = StaffService::checkManageRightByKey('deleteStaff', \request()->id, []);
- if (!$check_res['result']) {
- return $this->errorJson($check_res['msg']);
- }
- $disabled = request()->disabled ? 0 : 1;
- $res = StaffService::deleteStaff(\request()->id, $disabled);
- if (!$res['result']) {
- return $this->errorJson($res['msg']);
- }
- return $this->successJson($disabled ? '禁用成功' : '解禁成功');
- }
- /*
- * 推送员工信息到企业微信
- */
- // public function pushStaff()
- // {
- // $res = StaffService::pushStaff(\request()->id);
- // if (!$res['result']) {
- // return $this->errorJson($res['msg']);
- // }
- // return $this->successJson('推送成功');
- // }
- /*
- * 设置部门领导
- */
- public function setDepartmentLeader()
- {
- $right = BusinessService::checkBusinessRight();
- if (!$right['identity'] || $right['identity'] < 2) {
- return $this->errorJson('无权设置部门主管');
- }
- $res = StaffService::setStaffLeader(\request()->department_id, \request()->staff_id);
- if (!$res['result']) {
- return $this->errorJson($res['msg']);
- }
- return $this->successJson('设置成功');
- }
- /*
- * 从企业微信同步员工列表
- */
- public function refreshStaffList()
- {
- if (!SettingService::EnabledQyWx()) {
- return $this->errorJson('未开启企业微信', ['is_set' => 1]);
- }
- if ($department_id = \request()->department_id) {
- $department = Department::business()->where('wechat_department_id', '<>', 0)->find($department_id);
- } else {
- $department = Department::business()->where('level', 1)->where('wechat_department_id', '<>', 0)->first();
- }
- if (!$department) {
- return $this->errorJson('部门不存在或未关联企业微信');
- }
- $res = StaffService::refreshStaff($department->id);
- if (!$res['result']) {
- return $this->errorJson($res['msg']);
- }
- return $this->successJson('同步成功');
- }
- /*
- * 根据部门id获取员工列表
- */
- public function getStaffList()
- {
- $request = request();
- // if (!DepartmentService::checkDepartmentIdByMethod('getStaffList', $request->department_id)) {
- // return $this->errorJson('暂无权限查看此部门员工');
- // }
- //
- // if (!$department = Department::business()->find($request->department_id)) {
- // return $this->errorJson('部门不存在');
- // }
- // 需求改成显示当前部门下(包括下级)所有可显示的员工
- $department_ids = DepartmentService::getDepartmentIds($request->department_id ?: 0, true);
- if ($request->department_id and DepartmentService::checkDepartmentIdByMethod('getStaffList', $request->department_id)) {
- $department_ids[] = (int)$request->department_id;
- }
- if (!$request->sub_page) {
- $res = StaffService::getStaffList($department_ids, [
- 'kwd' => trim(\request()->kwd),
- 'id' => intval(\request()->id) ?: 0,
- 'status' => \request()->status,
- 'disabled' => \request()->disabled,
- ])->paginate()->toArray();
- } else {
- $list = StaffService::getStaffList($department_ids, [
- 'kwd' => trim(\request()->kwd),
- 'id' => intval(\request()->id) ?: 0,
- 'status' => \request()->status,
- 'disabled' => \request()->disabled,
- ])->get()->toArray();
- $res['data'] = $list;
- }
- StaffService::addStaffPremission($res['data']);
- $return_list = [];
- $leader_list = [];
- foreach ($res['data'] as $v) {
- $return_list[] = $this_data = [
- 'id' => $v['staff_id'],
- 'uid' => $v['has_one_staff']['uid'] ?: 0,
- 'name' => $v['has_one_staff']['name'] ?: '',
- 'mobile' => $v['has_one_staff']['mobile'] ?: '',
- 'position' => $v['has_one_staff']['position'] ?: '',
- 'gender_desc' => Staff::GENDER_DESC[$v['has_one_staff']['gender']] ?: '未知',
- 'status' => Staff::STATUS_DESC[$v['has_one_staff']['status'] ?: 0],
- // 'status' => $v['has_one_staff']['status'] ?: 0,
- 'disabled' => $v['has_one_staff']['disabled'] ? 1 : 0,
- 'premission' => $v['premission'],
- 'has_one_member' => $v['has_one_staff']['has_one_member'] ?: null
- ];
- if ($request->get_leader && $v['is_leader']) {
- $leader_list[] = $this_data;
- }
- }
- $res['data'] = $return_list;
- if ($request->get_leader) {
- $res['leader_list'] = $leader_list ? array_column($leader_list, null, 'id') : [];
- }
- $res['premission']['createStaff'] = BusinessService::getPremissionByRoute('createStaff');
- $res = array_merge($res, SettingService::getStaffTicketCodeUrl());
- return $this->successJson('成功', $res);
- }
- }
|