|
@@ -0,0 +1,280 @@
|
|
|
|
+<?php
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+namespace app\admin\service\consultant;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+use app\model\Consultant;
|
|
|
|
+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 = [];
|
|
|
|
+ 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)->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'], 4);
|
|
|
|
+ $password = self::handlePassword($showPassword);
|
|
|
|
+ } else {
|
|
|
|
+ $password = self::handlePassword($params['password']);
|
|
|
|
+ }
|
|
|
|
+ $type = 2;
|
|
|
|
+ if (!empty($params['type'])) {
|
|
|
|
+ if (in_array($params['type'], [1,2])) {
|
|
|
|
+ $type = $params['type'];
|
|
|
|
+ if ($type == 2) {
|
|
|
|
+ $params['relation_user_id'] = null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $insertData = [
|
|
|
|
+ 'name' => $params['name'],
|
|
|
|
+ 'mobile' => $params['mobile'],
|
|
|
|
+ 'dept_id' => $params['dept_id'],
|
|
|
|
+ 'top_dept_id' => $topDeptId,
|
|
|
|
+ '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])) {
|
|
|
|
+ $type = $params['type'];
|
|
|
|
+ if ($type == 2) {
|
|
|
|
+ $params['relation_user_id'] = null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ $updateData = [
|
|
|
|
+ 'name' => $params['name'],
|
|
|
|
+ 'mobile' => $params['mobile'],
|
|
|
|
+ '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)) {
|
|
|
|
+ Consultant::whereIn('id', $ids)->delete();
|
|
|
|
+ } else {
|
|
|
|
+ Consultant::where('id', $ids)->delete();
|
|
|
|
+ }
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
+ return json_fail('删除失败');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return json_success('删除成功');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Notes:
|
|
|
|
+ * User: yb
|
|
|
|
+ * Date: 2024/8/5
|
|
|
|
+ * Time: 10:52
|
|
|
|
+ */
|
|
|
|
+ public static function userList()
|
|
|
|
+ {
|
|
|
|
+ $deptIds = SysDept::where('dept_category', '=', '获客团队')->pluck('dept_id');
|
|
|
|
+ $deptIds = $deptIds->toArray();
|
|
|
|
+ $userList = SysUser::whereIn('join_user_dept_id', $deptIds)->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));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|