| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 | <?phpnamespace app\admin\service\consultant;use app\model\Consultant;use app\model\MarketCustomer;use app\model\SysDept;use app\model\SysUser;use support\Request;class ConsultantService{    public static function index(Request $request)    {        $format = $request->get('format', 'normal');        $limit = (int)$request->get('pageSize', $format === 'tree' ? 1000 : 10);        $limit = $limit <= 0 ? 10 : $limit;        $params = $request->get();        $page = (int)$request->get('page');        $page = $page > 0 ? $page : 1;        $where = [];        $whereDept = [];        $whereTopDept = [];        $deptIds = TeamService::getIdsByUser();        if (false === $deptIds) {            //无权限            $where[] = ['dept_id', '=', 0];        } else if (is_array($deptIds)) {            //指定团队下的权限            $where[] = [function($query) use ($deptIds) {                $query->whereIn('dept_id', $deptIds);            }];        }        if (!empty($params['name'])) {            $where[] = ['name', 'like', "%{$params['name']}%"];        }        if (!empty($params['mobile'])) {            $where[] = ['mobile', 'like', "%{$params['mobile']}%"];        }        if (!empty($params['status'])) {            $where[] = ['status', '=', $params['status']];        }        if (!empty($params['dept_id'])) {            $deptId = end($params['dept_id']);            $whereDept[] = ['dept_id', '=', $deptId];            $whereTopDept[] = ['top_dept_id', '=', $deptId];        }        if (!empty($params['type'])) {            $where[] = ['type', '=', $params['type']];        }        $paginator = Consultant::where(function ($query) use ($whereDept, $whereTopDept) {                $query->orWhere($whereDept)                ->orWhere($whereTopDept);        })->where($where)->orderBy('id', 'DESC')->paginate($limit, '*', 'page', $page);        $total = $paginator->total();        $items = $paginator->items();        if (!empty($items)) {            $teamKeys = TeamService::getKeys();            foreach ($items as &$item) {                $teamName = [];                if (isset($teamKeys[$item->top_dept_id])) {                    $teamName[] = $teamKeys[$item->top_dept_id];                }                if (isset($teamKeys[$item->dept_id])) {                    $teamName[] = $teamKeys[$item->dept_id];                }                $item->team_name = !empty($teamName) ? implode('-', $teamName) : '';            }        }        $data = [            'total' => $total,            'rows' => $items        ];        return json_success('success', $data);    }    /**     * Notes: 添加员工     * User: yb     * Date: 2024/8/2     * Time: 11:03     * @param $params     */    public static function add($params)    {        if (!self::checkMobile($params['mobile'])) {            return json_fail('请输入正确的手机号');        }        //查询员工是否已被注册        if (Consultant::where('mobile', $params['mobile'])->exists()) {            return json_fail('手机号已存在,员工已被注册');        }        //校验密码规则        if (!empty($params['password'])) {            $passwordLen = strlen($params['password']);            if ($passwordLen > 20 || $passwordLen < 6) {                return json_fail('请输入6-20位密码');            }        }        //查询上级团队        $topDeptId = SysDept::where('dept_id', $params['dept_id'])->where('dept_category', TeamService::DEPT_CATEGORY)->value('dept_super_id');        if (!is_numeric($topDeptId)) {            return json_fail('团队不存在');        }        if (empty($params['password'])) {            $showPassword = substr($params['mobile'], 5);            $password = self::handlePassword($showPassword);        } else {            $password = self::handlePassword($params['password']);        }        $type = 2;        if (!empty($params['type'])) {            if (in_array($params['type'], [1,2,3,4])) {                $type = $params['type'];                if ($type != 1) {                    $params['relation_user_id'] = null;                } else {                    if (empty($params['relation_user_id'])) {                        return json_fail('请绑定后台账号');                    }                }            }        }        $insertData = [            'name' => $params['name'],            'mobile' => $params['mobile'],            'dept_id' => $params['dept_id'],            'top_dept_id' => $topDeptId,            'job' => $params['job'] ?? '顾问',            'gender' => $params['gender'] ?? 1,            'password' => $password,            'status' => $params['status'] ?? 1,            'relation_user_id' => $params['relation_user_id'] ?? null,            'type' => $type,            'created_at' => time()        ];        $result = Consultant::insert($insertData);        if ($result) {            return json_success('新增成功');        } else {            return json_fail('新增失败');        }    }    /**     * Notes: 更新员工信息     * User: yb     * Date: 2024/8/2     * Time: 11:54     * @param $params     */    public static function update($params)    {        if (empty($params['id'])) {            return json_fail('员工id不能为空');        }        //查找员工信息        $info = Consultant::find($params['id']);        if (empty($info)) {            return json_fail('员工不存在');        }        if (!self::checkMobile($params['mobile'])) {            return json_fail('请输入正确的手机号');        }        //查询员工是否已被注册        if (Consultant::where('mobile', $params['mobile'])->where('id', '<>', $params['id'])->exists()) {            return json_fail('手机号已存在,员工已被注册');        }        //校验密码规则        if (!empty($params['password'])) {            $passwordLen = strlen($params['password']);            if ($passwordLen > 20 || $passwordLen < 6) {                return json_fail('请输入6-20位密码');            }            $password = self::handlePassword($params['password']);        }        $type = 2;        if (!empty($params['type'])) {            if (in_array($params['type'], [1,2,3,4])) {                $type = $params['type'];                if ($type != 1) {                    $params['relation_user_id'] = null;                } else {                    if (empty($params['relation_user_id'])) {                        return json_fail('请绑定后台账号');                    }                }            }        }        $updateData = [            'name' => $params['name'],            'mobile' => $params['mobile'],            'job' => $params['job'] ?? '顾问',            'gender' => $params['gender'] ?? 1,            'status' => $params['status'] ?? 1,            'relation_user_id' => $params['relation_user_id'] ?? null,            'type' => $type,            'updated_at' => time()        ];        if (!empty($params['password'])) {            $updateData['password'] = $password;        }        $result = Consultant::where('id', $params['id'])->update($updateData);        if ($result) {            return json_success('更新成功');        } else {            return json_fail('更新失败');        }    }    /**     * Notes: 删除员工     * User: yb     * Date: 2024/8/2     * Time: 13:33     * @param $ids     * @return \support\Response     */    public static function delete($ids)    {        if (!$ids) {            return json_fail("数据错误");        }        if (!is_array($ids)) {            $ids = [$ids];        }        try {            if (is_array($ids)) {                if (MarketCustomer::whereIn('consultant_id', $ids)->exists()) {                    throw new \Exception('员工下存在客户');                }                Consultant::whereIn('id', $ids)->delete();            } else {                if (MarketCustomer::where('consultant_id', $ids)->exists()) {                    throw new \Exception('员工下存在客户');                }                Consultant::where('id', $ids)->delete();            }        } catch (\Exception $e) {            return json_fail($e->getMessage());        }        return json_success('删除成功');    }    /**     * Notes:     * User: yb     * Date: 2024/8/5     * Time: 10:52     */    public static function userList()    {        $deptIds = TeamService::getIdsByUser();        $where = [];        if (false === $deptIds) {            //无权限            $where[] = ['join_user_dept_id', '=', 0];        } else if (is_array($deptIds)) {            //指定团队下的权限            $where[] = [function($query) use ($deptIds) {                $query->whereIn('join_user_dept_id', $deptIds);            }];        } else {            $deptIds = SysDept::where('dept_category', '=', '获客团队')->pluck('dept_id');            $deptIds = $deptIds->toArray();            $where[] = [function($query) use ($deptIds) {                $query->whereIn('join_user_dept_id', $deptIds);            }];        }        $userList = SysUser::where($where)->select(['user_id', 'user_name', 'user_mobile'])->get();        return json_success('请求成功', $userList);    }    /**     * Notes:校验手机号     * User: yb     * Date: 2024/8/2     * Time: 11:12     * @param $mobile     * @return bool     */    protected static function checkMobile($mobile)    {        if (preg_match('/^1[0-9]\d{9}$/', $mobile)) {            return true;        } else {            return false;        }    }    /**     * Notes: 处理密码     * User: yb     * Date: 2024/8/2     * Time: 11:19     * @param $password     * @return mixed     */    protected static function handlePassword($password)    {        return md5(md5($password));    }    /**     * Notes: 处理出生日期     * User: yb     * Date: 2024/8/2     * Time: 11:28     * @param $birth     * @return false|string     */    protected static function handleBirth($birth)    {        return date('Y-m-d',strtotime($birth));    }}
 |