ConsultantService.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. namespace app\admin\service\consultant;
  3. use app\model\Consultant;
  4. use app\model\SysDept;
  5. use app\model\SysUser;
  6. use support\Request;
  7. class ConsultantService
  8. {
  9. public static function index(Request $request)
  10. {
  11. $format = $request->get('format', 'normal');
  12. $limit = (int)$request->get('pageSize', $format === 'tree' ? 1000 : 10);
  13. $limit = $limit <= 0 ? 10 : $limit;
  14. $params = $request->get();
  15. $page = (int)$request->get('page');
  16. $page = $page > 0 ? $page : 1;
  17. $where = [];
  18. $whereDept = [];
  19. $whereTopDept = [];
  20. if (!empty($params['name'])) {
  21. $where[] = ['name', 'like', "%{$params['name']}%"];
  22. }
  23. if (!empty($params['mobile'])) {
  24. $where[] = ['mobile', 'like', "%{$params['mobile']}%"];
  25. }
  26. if (!empty($params['status'])) {
  27. $where[] = ['status', '=', $params['status']];
  28. }
  29. if (!empty($params['dept_id'])) {
  30. $deptId = end($params['dept_id']);
  31. $whereDept[] = ['dept_id', '=', $deptId];
  32. $whereTopDept[] = ['top_dept_id', '=', $deptId];
  33. }
  34. if (!empty($params['type'])) {
  35. $where[] = ['type', '=', $params['type']];
  36. }
  37. $paginator = Consultant::where(function ($query) use ($whereDept, $whereTopDept) {
  38. $query->orWhere($whereDept)
  39. ->orWhere($whereTopDept);
  40. })->where($where)->paginate($limit, '*', 'page', $page);
  41. $total = $paginator->total();
  42. $items = $paginator->items();
  43. if (!empty($items)) {
  44. $teamKeys = TeamService::getKeys();
  45. foreach ($items as &$item) {
  46. $teamName = [];
  47. if (isset($teamKeys[$item->top_dept_id])) {
  48. $teamName[] = $teamKeys[$item->top_dept_id];
  49. }
  50. if (isset($teamKeys[$item->dept_id])) {
  51. $teamName[] = $teamKeys[$item->dept_id];
  52. }
  53. $item->team_name = !empty($teamName) ? implode('-', $teamName) : '';
  54. }
  55. }
  56. $data = [
  57. 'total' => $total,
  58. 'rows' => $items
  59. ];
  60. return json_success('success', $data);
  61. }
  62. /**
  63. * Notes: 添加员工
  64. * User: yb
  65. * Date: 2024/8/2
  66. * Time: 11:03
  67. * @param $params
  68. */
  69. public static function add($params)
  70. {
  71. if (!self::checkMobile($params['mobile'])) {
  72. return json_fail('请输入正确的手机号');
  73. }
  74. //查询员工是否已被注册
  75. if (Consultant::where('mobile', $params['mobile'])->exists()) {
  76. return json_fail('手机号已存在,员工已被注册');
  77. }
  78. //校验密码规则
  79. if (!empty($params['password'])) {
  80. $passwordLen = strlen($params['password']);
  81. if ($passwordLen > 20 || $passwordLen < 6) {
  82. return json_fail('请输入6-20位密码');
  83. }
  84. }
  85. //查询上级团队
  86. $topDeptId = SysDept::where('dept_id', $params['dept_id'])->where('dept_category', TeamService::DEPT_CATEGORY)->value('dept_super_id');
  87. if (!is_numeric($topDeptId)) {
  88. return json_fail('团队不存在');
  89. }
  90. if (empty($params['password'])) {
  91. $showPassword = substr($params['mobile'], 4);
  92. $password = self::handlePassword($showPassword);
  93. } else {
  94. $password = self::handlePassword($params['password']);
  95. }
  96. $type = 2;
  97. if (!empty($params['type'])) {
  98. if (in_array($params['type'], [1,2])) {
  99. $type = $params['type'];
  100. if ($type == 2) {
  101. $params['relation_user_id'] = null;
  102. }
  103. }
  104. }
  105. $insertData = [
  106. 'name' => $params['name'],
  107. 'mobile' => $params['mobile'],
  108. 'dept_id' => $params['dept_id'],
  109. 'top_dept_id' => $topDeptId,
  110. 'gender' => $params['gender'] ?? 1,
  111. 'password' => $password,
  112. 'status' => $params['status'] ?? 1,
  113. 'relation_user_id' => $params['relation_user_id'] ?? null,
  114. 'type' => $type,
  115. 'created_at' => time()
  116. ];
  117. $result = Consultant::insert($insertData);
  118. if ($result) {
  119. return json_success('新增成功');
  120. } else {
  121. return json_fail('新增失败');
  122. }
  123. }
  124. /**
  125. * Notes: 更新员工信息
  126. * User: yb
  127. * Date: 2024/8/2
  128. * Time: 11:54
  129. * @param $params
  130. */
  131. public static function update($params)
  132. {
  133. if (empty($params['id'])) {
  134. return json_fail('员工id不能为空');
  135. }
  136. //查找员工信息
  137. $info = Consultant::find($params['id']);
  138. if (empty($info)) {
  139. return json_fail('员工不存在');
  140. }
  141. if (!self::checkMobile($params['mobile'])) {
  142. return json_fail('请输入正确的手机号');
  143. }
  144. //查询员工是否已被注册
  145. if (Consultant::where('mobile', $params['mobile'])->where('id', '<>', $params['id'])->exists()) {
  146. return json_fail('手机号已存在,员工已被注册');
  147. }
  148. //校验密码规则
  149. if (!empty($params['password'])) {
  150. $passwordLen = strlen($params['password']);
  151. if ($passwordLen > 20 || $passwordLen < 6) {
  152. return json_fail('请输入6-20位密码');
  153. }
  154. $password = self::handlePassword($params['password']);
  155. }
  156. $type = 2;
  157. if (!empty($params['type'])) {
  158. if (in_array($params['type'], [1,2])) {
  159. $type = $params['type'];
  160. if ($type == 2) {
  161. $params['relation_user_id'] = null;
  162. }
  163. }
  164. }
  165. $updateData = [
  166. 'name' => $params['name'],
  167. 'mobile' => $params['mobile'],
  168. 'gender' => $params['gender'] ?? 1,
  169. 'status' => $params['status'] ?? 1,
  170. 'relation_user_id' => $params['relation_user_id'] ?? null,
  171. 'type' => $type,
  172. 'updated_at' => time()
  173. ];
  174. if (!empty($params['password'])) {
  175. $updateData['password'] = $password;
  176. }
  177. $result = Consultant::where('id', $params['id'])->update($updateData);
  178. if ($result) {
  179. return json_success('更新成功');
  180. } else {
  181. return json_fail('更新失败');
  182. }
  183. }
  184. /**
  185. * Notes: 删除员工
  186. * User: yb
  187. * Date: 2024/8/2
  188. * Time: 13:33
  189. * @param $ids
  190. * @return \support\Response
  191. */
  192. public static function delete($ids)
  193. {
  194. if (!$ids) {
  195. return json_fail("数据错误");
  196. }
  197. if (!is_array($ids)) {
  198. $ids = [$ids];
  199. }
  200. //查询员工下是否存在客户
  201. try {
  202. if (is_array($ids)) {
  203. Consultant::whereIn('id', $ids)->delete();
  204. } else {
  205. Consultant::where('id', $ids)->delete();
  206. }
  207. } catch (\Exception $e) {
  208. return json_fail('删除失败');
  209. }
  210. return json_success('删除成功');
  211. }
  212. /**
  213. * Notes:
  214. * User: yb
  215. * Date: 2024/8/5
  216. * Time: 10:52
  217. */
  218. public static function userList()
  219. {
  220. $deptIds = SysDept::where('dept_category', '=', '获客团队')->pluck('dept_id');
  221. $deptIds = $deptIds->toArray();
  222. $userList = SysUser::whereIn('join_user_dept_id', $deptIds)->select(['user_id', 'user_name', 'user_mobile'])->get();
  223. return json_success('请求成功', $userList);
  224. }
  225. /**
  226. * Notes:校验手机号
  227. * User: yb
  228. * Date: 2024/8/2
  229. * Time: 11:12
  230. * @param $mobile
  231. * @return bool
  232. */
  233. protected static function checkMobile($mobile)
  234. {
  235. if (preg_match('/^1[0-9]\d{9}$/', $mobile)) {
  236. return true;
  237. } else {
  238. return false;
  239. }
  240. }
  241. /**
  242. * Notes: 处理密码
  243. * User: yb
  244. * Date: 2024/8/2
  245. * Time: 11:19
  246. * @param $password
  247. * @return mixed
  248. */
  249. protected static function handlePassword($password)
  250. {
  251. return md5(md5($password));
  252. }
  253. /**
  254. * Notes: 处理出生日期
  255. * User: yb
  256. * Date: 2024/8/2
  257. * Time: 11:28
  258. * @param $birth
  259. * @return false|string
  260. */
  261. protected static function handleBirth($birth)
  262. {
  263. return date('Y-m-d',strtotime($birth));
  264. }
  265. }