UserService.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. <?php
  2. namespace app\wechat\service;
  3. use app\model\Consultant;
  4. use app\model\MarketCustomer;
  5. use app\model\SysDept;
  6. use Carbon\Carbon;
  7. use support\Db;
  8. use support\exception\BusinessException;
  9. use Tinywan\Jwt\JwtToken;
  10. class UserService
  11. {
  12. /**
  13. * Notes: 获取所有顾问
  14. * User: yb
  15. * Date: 2024/8/15
  16. * Time: 11:51
  17. * @param $params
  18. */
  19. public static function getAll($params)
  20. {
  21. $ids = self::getIds(1);
  22. $where = [
  23. [function($query) use ($ids) {
  24. $query->whereIn('id', $ids);
  25. }]
  26. ];
  27. if (!empty($params['not_id'])) {
  28. $where[] = ['id', '<>', $params['not_id']];
  29. }
  30. $list = Consultant::where($where)->select(['id','name','mobile','gender','status','dept_id','created_at'])->orderBy('created_at', 'desc')->get();
  31. return json_success('请求成功', $list);
  32. }
  33. /**
  34. * Notes: 团队成员
  35. * User: yb
  36. * Date: 2024/8/14
  37. * Time: 15:34
  38. * @param $params
  39. */
  40. public static function index($params)
  41. {
  42. $page = $params['page'] ?? 1;
  43. $size = $params['size'] ?? 10;
  44. $ids = self::getIds(1);
  45. $where = [
  46. [function($query) use ($ids) {
  47. $query->whereIn('id', $ids);
  48. }]
  49. ];
  50. if (!empty($params['status'])) {
  51. $where[] = ['status', '=', $params['status']];
  52. }
  53. if (!empty($params['consultant'])) {
  54. $keywords = $params['consultant'];
  55. $where[] = [function($query) use ($keywords) {
  56. $query->orWhere('name', 'like', "%{$keywords}%")->orWhere('mobile', 'like', "%{$keywords}%");
  57. }];
  58. }
  59. if (!empty($params['dept_id'])) {
  60. $deptIds = $params['dept_id'];
  61. $deptId = end($deptIds);
  62. $where[] = ['dept_id', '=', $deptId];
  63. }
  64. if (!empty($params['created_at'])) {
  65. $datetime = $params['created_at'];
  66. $startTime = strtotime($datetime['start'].' 00:00:00');
  67. $endTime = strtotime($datetime['end'].' 23:59:59');
  68. $where[] = [function($query) use ($startTime, $endTime) {
  69. $query->whereBetween('created_at', [$startTime, $endTime]);
  70. }];
  71. }
  72. $paginator = Consultant::where($where)->orderBy('created_at', 'desc')->paginate($size, ['id','name','mobile','gender','status','dept_id','created_at'], 'page', $page);
  73. $total = $paginator->total();
  74. $items = $paginator->items();
  75. $data = [
  76. 'total' => $total,
  77. 'rows' => $items
  78. ];
  79. return json_success('success', $data);
  80. }
  81. /**
  82. * Notes: 删除成员
  83. * User: yb
  84. * Date: 2024/8/15
  85. * Time: 11:39
  86. * @param $id
  87. */
  88. public static function del($id)
  89. {
  90. if(MarketCustomer::where('consultant_id', $id)->exists()) {
  91. return json_fail('成员下存在客户,请移交客户后删除成员');
  92. }
  93. $result = Consultant::where('id', $id)->delete();
  94. if ($result) {
  95. return json_success('删除成功');
  96. } else {
  97. return json_fail('删除失败');
  98. }
  99. }
  100. /**
  101. * Notes: 成员详情
  102. * User: yb
  103. * Date: 2024/8/15
  104. * Time: 10:19
  105. * @param $id
  106. */
  107. public static function getInfoById($id)
  108. {
  109. $info = Consultant::firstWhere(['id' => $id]);
  110. if (empty($info)) {
  111. return json_fail('成员信息不存在');
  112. }
  113. return json_success('请求成功', $info);
  114. }
  115. /**
  116. * Notes: 编辑成员
  117. * User: yb
  118. * Date: 2024/8/15
  119. * Time: 10:28
  120. * @param $params
  121. */
  122. public static function updateById($params)
  123. {
  124. if (empty($params['id'])) {
  125. return json_fail('成员id不能为空');
  126. }
  127. //查找员工信息
  128. $info = Consultant::find($params['id']);
  129. $oldDeptId = $info->dept_id;
  130. if (empty($info)) {
  131. return json_fail('成员不存在');
  132. }
  133. if (!self::checkMobile($params['mobile'])) {
  134. return json_fail('请输入正确的手机号');
  135. }
  136. //查询员工是否已被注册
  137. if (Consultant::where('mobile', $params['mobile'])->where('id', '<>', $params['id'])->exists()) {
  138. return json_fail('手机号已存在,成员已被注册');
  139. }
  140. //校验密码规则
  141. if (!empty($params['password'])) {
  142. $passwordLen = strlen($params['password']);
  143. if ($passwordLen > 20 || $passwordLen < 6) {
  144. return json_fail('请输入6-20位密码');
  145. }
  146. $password = self::handlePassword($params['password']);
  147. }
  148. //查询上级团队
  149. $topDeptId = SysDept::where('dept_id', $params['dept_id'])->where('dept_category', TeamService::DEPT_CATEGORY)->value('dept_super_id');
  150. if (!is_numeric($topDeptId)) {
  151. return json_fail('团队不存在');
  152. }
  153. $updateData = [
  154. 'name' => $params['name'],
  155. 'mobile' => $params['mobile'],
  156. 'dept_id' => $params['dept_id'],
  157. 'top_dept_id' => $topDeptId,
  158. 'gender' => $params['gender'] ?? 1,
  159. 'status' => $params['status'] ?? 1,
  160. 'updated_at' => time()
  161. ];
  162. if (!empty($params['password'])) {
  163. $updateData['password'] = $password;
  164. }
  165. $result = false;
  166. Db::beginTransaction();
  167. try {
  168. $result = Consultant::where('id', $params['id'])->update($updateData);
  169. if ($updateData['dept_id'] != $oldDeptId) {
  170. //修改成员所属部门
  171. MarketCustomer::where('consultant_id', '=', $params['id'])->update(['updated_at' => time(), 'dept_id' => $updateData['dept_id']]);
  172. }
  173. Db::commit();
  174. }catch (BusinessException|\Exception $e) {
  175. Db::rollBack();
  176. return json_fail($e->getMessage());
  177. }
  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/15
  188. * Time: 9:55
  189. * @param $params
  190. */
  191. public static function add($params)
  192. {
  193. if (!self::checkMobile($params['mobile'])) {
  194. return json_fail('请输入正确的手机号');
  195. }
  196. //查询员工是否已被注册
  197. if (Consultant::where('mobile', $params['mobile'])->exists()) {
  198. return json_fail('手机号已存在,成员已被注册');
  199. }
  200. //校验密码规则
  201. if (!empty($params['password'])) {
  202. $passwordLen = strlen($params['password']);
  203. if ($passwordLen > 20 || $passwordLen < 6) {
  204. return json_fail('请输入6-20位密码');
  205. }
  206. }
  207. //查询上级团队
  208. $topDeptId = SysDept::where('dept_id', $params['dept_id'])->where('dept_category', TeamService::DEPT_CATEGORY)->value('dept_super_id');
  209. if (!is_numeric($topDeptId)) {
  210. return json_fail('团队不存在');
  211. }
  212. if (empty($params['password'])) {
  213. $showPassword = substr($params['mobile'], 5);
  214. $password = self::handlePassword($showPassword);
  215. } else {
  216. $password = self::handlePassword($params['password']);
  217. }
  218. $insertData = [
  219. 'name' => $params['name'],
  220. 'mobile' => $params['mobile'],
  221. 'dept_id' => $params['dept_id'],
  222. 'top_dept_id' => $topDeptId,
  223. 'gender' => $params['gender'] ?? 1,
  224. 'password' => $password,
  225. 'status' => $params['status'] ?? 1,
  226. 'relation_user_id' => $params['relation_user_id'] ?? null,
  227. 'type' => 2,
  228. 'created_at' => time()
  229. ];
  230. $result = Consultant::insert($insertData);
  231. if ($result) {
  232. return json_success('新增成功');
  233. } else {
  234. return json_fail('新增失败');
  235. }
  236. }
  237. /**
  238. * Notes: 登录
  239. * User: yb
  240. * Date: 2024/8/8
  241. * Time: 9:20
  242. * @param $data
  243. */
  244. public static function login($data)
  245. {
  246. $password = $data['password'];
  247. $mobile = $data['mobile'];
  248. $userInfo = Consultant::firstWhere(['mobile' => $mobile]);
  249. if (empty($userInfo)) {
  250. return json_fail('用户不存在');
  251. }
  252. //校验密码
  253. $confoundPassword = $userInfo->password;
  254. if ($confoundPassword != md5(md5($password))) {
  255. return json_fail('密码错误');
  256. }
  257. $status = $userInfo->status;
  258. if ($status != 1) {
  259. return json_fail('用户已离职');
  260. }
  261. $extend = [
  262. 'id' => $userInfo->id,
  263. 'client' => 'wechat',
  264. 'name'=> $userInfo->name,
  265. 'user_type' => $userInfo->type
  266. ];
  267. $token = JwtToken::generateToken($extend);
  268. $token['user_type'] = $extend['user_type'];
  269. return json_success('', $token);
  270. }
  271. /**
  272. * Notes: 获取身份信息
  273. * User: yb
  274. * Date: 2024/8/8
  275. * Time: 10:09
  276. */
  277. public static function auth()
  278. {
  279. $userId = JwtToken::getCurrentId();
  280. $userInfo = Consultant::firstWhere(['id' => $userId]);
  281. if (empty($userInfo)) {
  282. return json_fail('用户不存在');
  283. }
  284. $status = $userInfo->status;
  285. if ($status != 1) {
  286. return json_fail('用户已离职');
  287. }
  288. $type = $userInfo->type;
  289. $relationUserId = $userInfo->relation_user_id;
  290. return json_success('请求成功', ['type' => $type, 'relation_user_id' => $relationUserId]);
  291. }
  292. /**
  293. * Notes: 获取需要查询的ids
  294. * User: yb
  295. * Date: 2024/8/13
  296. * Time: 15:58
  297. * @return array
  298. */
  299. public static function getIds($clearSelf = 0)
  300. {
  301. $userId = JwtToken::getCurrentId();
  302. $userInfo = Consultant::firstWhere(['id' => $userId]);
  303. if (empty($userInfo)) {
  304. return [];
  305. }
  306. $ids = [];
  307. if ($userInfo->type == 1) {
  308. //管理账号
  309. $deptId = $userInfo->dept_id;
  310. $deptIds = TeamService::getIds($deptId);
  311. //团队下的所有员工
  312. $where = [
  313. [function($query) use ($deptIds) {
  314. $query->whereIn('dept_id', $deptIds);
  315. }]
  316. ];
  317. if ($clearSelf == 1) {
  318. $where[] = ['id', '<>', $userId];
  319. }
  320. $ids = Consultant::where($where)->pluck('id')->toArray();
  321. } else {
  322. //普通账号
  323. $ids[] = $userId;
  324. }
  325. return $ids;
  326. }
  327. /**
  328. * Notes: 首页统计分析
  329. * User: yb
  330. * Date: 2024/8/14
  331. * Time: 10:23
  332. */
  333. public static function statistics($params)
  334. {
  335. //统计客户总数
  336. $userIds = self::getIds();
  337. $currentTime = time();
  338. $diffNums = CustomService::DIFF_TIME;
  339. $where = [
  340. [function($query) use ($userIds) {
  341. $query->whereIn('consultant_id', $userIds);
  342. }]
  343. ];
  344. //客户总量
  345. $customNums = MarketCustomer::where($where)->count();
  346. if (!empty($params['time'])) {
  347. $time = $params['time'];
  348. $start = strtotime($time[0]);
  349. $end = strtotime($time[1]);
  350. } else {
  351. $startDate = date('Y-m-01', strtotime(date('Y-m-d')));
  352. $endDate = date('Y-m-t', strtotime(date('Y-m-d')));
  353. $start = strtotime($startDate.' 00:00:00');
  354. $end = strtotime($endDate.' 23:59:59');
  355. }
  356. $where[] = [function($query) use ($start, $end) {
  357. $query->whereBetween('created_at', [$start, $end]);
  358. }];
  359. //待审核客户数量
  360. $checkCustomNums = MarketCustomer::where($where)->where('check_status', '=', 1)->count();
  361. //新增客户
  362. $newCustomNums = MarketCustomer::where($where)->count();
  363. //已报备客户数
  364. $whereReport = [
  365. [function($query) use ($diffNums, $currentTime) {
  366. $query->whereRaw("((visit_time + {$diffNums}) - {$currentTime} > 0)")->where('current_status', '=', 1);
  367. }],
  368. ['check_status', '=', 2]
  369. ];
  370. $reportCustomNums = MarketCustomer::where($where)->where($whereReport)->count();
  371. //已到访客户数量
  372. $visitCustomNums = MarketCustomer::where($where)->where('current_status', 2)->where('check_status', 2)->count();
  373. //已缴费客户数量
  374. $payCustomNums = MarketCustomer::where($where)->where('current_status', 3)->where('check_status', 2)->count();
  375. //已成交客户数量
  376. $dealCustomNums = MarketCustomer::where($where)->where('current_status', 4)->where('check_status', 2)->count();
  377. //新增跟进记录数量
  378. $newFollowNums = MarketCustomer::where($where)->count();
  379. //男女性别占比
  380. $whereEffective = [
  381. [function($query) {
  382. $query->orWhere(function ($query){
  383. $diffNums = (60 * 60 * 24 * 30);
  384. $currentTime = time();
  385. $query->whereRaw("((visit_time + {$diffNums}) - {$currentTime} > 0)")->where('current_status', '=', 1);
  386. })->orWhereIn('current_status', [2,3,4]);
  387. }],
  388. ['check_status', '=', 2]
  389. ];
  390. /* 男女数量 */
  391. $genderDataNums = [
  392. ['label' => '男', 'value' => 1, 'nums' => 0],
  393. ['label' => '女', 'value' => 2, 'nums' => 0],
  394. ];
  395. $genderData = MarketCustomer::where($where)->select(Db::raw('gender, count(*) as nums'))->where($whereEffective)->groupBy('gender')->get();
  396. if (!$genderData->isEmpty()) {
  397. $genderData = $genderData->toArray();
  398. foreach ($genderDataNums as $genderKey => $genderVal) {
  399. foreach ($genderData as $genderItem) {
  400. if ($genderItem['gender'] == $genderVal['value']) {
  401. $genderDataNums[$genderKey]['nums'] = $genderItem['nums'];
  402. }
  403. }
  404. }
  405. }
  406. /* 客户级别 */
  407. $levelDataNums = [
  408. ['label' => 'A类', 'value' => 1, 'nums' => 0],
  409. ['label' => 'B类', 'value' => 2, 'nums' => 0],
  410. ['label' => 'C类', 'value' => 3, 'nums' => 0],
  411. ['label' => 'D类', 'value' => 4, 'nums' => 0],
  412. ['label' => '其他', 'value' => "", 'nums' => 0],
  413. ];
  414. $levelData = MarketCustomer::where($where)->select(Db::raw('level, count(*) as nums'))->where($whereEffective)->groupBy('level')->get();
  415. if (!$levelData->isEmpty()) {
  416. $levelData = $levelData->toArray();
  417. $levelData = array_column($levelData, 'nums', 'level');
  418. foreach ($levelDataNums as $levelKey => $levelVal) {
  419. if (isset($levelData[$levelVal['value']])) {
  420. $levelDataNums[$levelKey]['nums'] = $levelData[$levelVal['value']];
  421. }
  422. }
  423. }
  424. $data = [
  425. 'custom_nums' => $customNums,
  426. 'check_custom_nums' => $checkCustomNums,
  427. 'new_custom_nums' => $newCustomNums,
  428. 'report_custom_nums' => $reportCustomNums,
  429. 'visit_custom_nums' => $visitCustomNums,
  430. 'pay_custom_nums' => $payCustomNums,
  431. 'deal_custom_nums' => $dealCustomNums,
  432. 'new_follow_nums' => $newFollowNums,
  433. 'gender_data_nums' => $genderDataNums,
  434. 'level_data_nums' => $levelDataNums
  435. ];
  436. return json_success('请求成功', $data);
  437. }
  438. /**
  439. * Notes: 近7日客户走势
  440. * User: yb
  441. * Date: 2024/8/17
  442. * Time: 17:44
  443. */
  444. public static function customTrend($params)
  445. {
  446. //统计客户总数
  447. $userIds = self::getIds();
  448. $where = [
  449. [function($query) use ($userIds) {
  450. $query->whereIn('consultant_id', $userIds);
  451. }],
  452. [function($query) {
  453. $query->orWhere(function ($query){
  454. $diffNums = (60 * 60 * 24 * 30);
  455. $currentTime = time();
  456. $query->whereRaw("((visit_time + {$diffNums}) - {$currentTime} > 0)")->where('current_status', '=', 1);
  457. })->orWhereIn('current_status', [2,3,4]);
  458. }],
  459. ['check_status', '=', 2]
  460. ];
  461. $whereTrend = [];
  462. if (!empty($params['type'])) {
  463. $whereTrend[] = ['current_status', '=', $params['type']];
  464. }
  465. // 获取当前日期
  466. $today = Carbon::now();
  467. // 初始化日期数组和数量数组
  468. $dates = [date('Y-m-d')];
  469. // 循环7次,获取从今天开始往前推7天的日期
  470. for ($i = 0; $i < 6; $i++) {
  471. // 将日期推回到7天前
  472. $date = $today->subDay()->toDateString();
  473. // 将日期字符串存入数组
  474. $dates[] = $date;
  475. }
  476. // 逆序日期数组,因为我们是从今天往前计算的
  477. $dates = array_reverse($dates);
  478. $dateList = [];
  479. foreach ($dates as $item) {
  480. $dateList[] = ['label' => $item, 'nums' => 0, 'label_sim' => date('m/d', strtotime($item))];
  481. }
  482. $datesStr = implode('","', $dates);
  483. $datesStr = '"'.$datesStr.'"';
  484. $dateRaw = Db::raw("DATE_FORMAT(FROM_UNIXTIME(created_at), '%Y-%m-%d') IN ({$datesStr})");
  485. // 构建查询,使用whereBetween或whereIn根据需要筛选日期
  486. $results = MarketCustomer::select(Db::raw("DATE_FORMAT(FROM_UNIXTIME(created_at), '%Y-%m-%d') AS date,count(*) AS nums"))
  487. ->where($where)
  488. ->where($whereTrend)
  489. ->whereRaw($dateRaw)
  490. ->groupBy('date')->get();
  491. if (!$results->isEmpty()) {
  492. $results = $results->toArray();
  493. $results = array_column($results, 'nums', 'date');
  494. foreach ($dateList as $key => $val) {
  495. $dateList[$key]['nums'] = $results[$val['label']] ?? 0;
  496. }
  497. }
  498. //总数
  499. $customNums = MarketCustomer::where($where)->whereRaw($dateRaw)->count();
  500. //到访数
  501. $visitCustomNums = MarketCustomer::where($where)->whereRaw($dateRaw)->where('current_status', 2)->count();
  502. //已缴费数
  503. $payCustomNums = MarketCustomer::where($where)->whereRaw($dateRaw)->where('current_status', 3)->count();
  504. //已成交数
  505. $dealCustomNums = MarketCustomer::where($where)->whereRaw($dateRaw)->where('current_status', 4)->count();
  506. $data = [
  507. 'dateList' => $dateList,
  508. 'visit_nums' => $visitCustomNums,
  509. 'pay_nums' => $payCustomNums,
  510. 'deal_nums' => $dealCustomNums,
  511. 'total_nums' => $customNums
  512. ];
  513. return json_success('请求成功', $data);
  514. }
  515. /**
  516. * Notes: 用户详情
  517. * User: yb
  518. * Date: 2024/8/14
  519. * Time: 13:35
  520. */
  521. public static function info()
  522. {
  523. $userId = JwtToken::getCurrentId();
  524. $info = Consultant::firstWhere(['id' => $userId]);
  525. if (!empty($info)) {
  526. $info->dept_name = SysDept::where('dept_id', $info->dept_id)->value('dept_name');
  527. }
  528. return json_success('请求成功', $info);
  529. }
  530. /**
  531. * Notes: 修改个人信息
  532. * User: yb
  533. * Date: 2024/8/14
  534. * Time: 14:19
  535. * @param $params
  536. */
  537. public static function update($params)
  538. {
  539. $userId = JwtToken::getCurrentId();
  540. if (!self::checkMobile($params['mobile'])) {
  541. return json_fail('请输入正确的手机号');
  542. }
  543. //查询员工是否已被注册
  544. if (Consultant::where('mobile', $params['mobile'])->where('id', '<>', $userId)->exists()) {
  545. return json_fail('手机号已存在');
  546. }
  547. $info = Consultant::firstWhere(['id' => $userId]);
  548. if (empty($info)) {
  549. return json_fail('用户不存在');
  550. }
  551. $info->name = $params['name'];
  552. $info->gender = $params['gender'];
  553. $info->mobile = $params['mobile'];
  554. $result = $info->save();
  555. if ($result) {
  556. return json_success('修改成功');
  557. } else {
  558. return json_fail('修改失败');
  559. }
  560. }
  561. /**
  562. * Notes: 修改密码
  563. * User: yb
  564. * Date: 2024/8/14
  565. * Time: 14:20
  566. * @param $params
  567. */
  568. public static function editPassword($params)
  569. {
  570. $oldPassword = $params['old_password'];
  571. $password = $params['new_password'];
  572. $rePassword = $params['check_password'] ?? '';
  573. $len = mb_strlen($password);
  574. if ($len < 6) {
  575. return json_fail('密码长度最少为6位');
  576. }
  577. if ($len > 20) {
  578. return json_fail('密码长度最大为20位');
  579. }
  580. if ($password != $rePassword) {
  581. return json_fail('密码与确认密码不一致');
  582. }
  583. $userId = JwtToken::getCurrentId();
  584. $info = Consultant::firstWhere(['id' => $userId]);
  585. if (empty($info)) {
  586. return json_fail('用户不存在');
  587. }
  588. //校验密码
  589. $confoundPassword = $info->password;
  590. if ($confoundPassword != md5(md5($oldPassword))) {
  591. return json_fail('旧密码错误');
  592. }
  593. $info->password = md5(md5($password));
  594. $result = $info->save();
  595. if ($result) {
  596. return json_success('修改成功');
  597. } else {
  598. return json_fail('修改失败');
  599. }
  600. }
  601. /**
  602. * Notes: 团队列表
  603. * User: yb
  604. * Date: 2024/8/14
  605. * Time: 16:32
  606. */
  607. public static function getTeamList()
  608. {
  609. $userId = JwtToken::getCurrentId();
  610. $info = Consultant::firstWhere(['id' => $userId]);
  611. if (empty($info)) {
  612. return json_success('请求成功');
  613. }
  614. $deptId = $info->dept_id;
  615. $list = TeamService::getTeamList($deptId);
  616. return $list;
  617. }
  618. /**
  619. * Notes:校验手机号
  620. * User: yb
  621. * Date: 2024/8/2
  622. * Time: 11:12
  623. * @param $mobile
  624. * @return bool
  625. */
  626. protected static function checkMobile($mobile)
  627. {
  628. if (preg_match('/^1[0-9]\d{9}$/', $mobile)) {
  629. return true;
  630. } else {
  631. return false;
  632. }
  633. }
  634. /**
  635. * Notes: 处理密码
  636. * User: yb
  637. * Date: 2024/8/2
  638. * Time: 11:19
  639. * @param $password
  640. * @return mixed
  641. */
  642. protected static function handlePassword($password)
  643. {
  644. return md5(md5($password));
  645. }
  646. }