UserLogic.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. <?php
  2. namespace app\api\logic;
  3. use app\common\model\CourierModel;
  4. use app\common\model\EngageUserModel;
  5. use app\common\model\MealcenterModel;
  6. use app\common\model\UserAddressModel;
  7. use app\common\model\UserModel;
  8. use think\Db;
  9. class UserLogic
  10. {
  11. public function register($arr)
  12. {
  13. $fillfields = ['phone', 'passwd'];
  14. foreach ($fillfields as $key => $value) {
  15. if (!isset($arr[$value]) || empty($arr[$value])) {
  16. return backarr(0, "参数缺少");
  17. }
  18. }
  19. $m_u = new UserModel();
  20. $phone = $arr['phone'];
  21. $passwd = $phone . $arr['passwd'];
  22. $where = ['phone' => $phone];
  23. $uinfo = $m_u->getInfo($where);
  24. if (empty($uinfo)) {
  25. //注册
  26. $arr['passwd'] = $this->createpasswd($passwd);
  27. $uid = $m_u->insertData($arr);
  28. if (empty($uid)) {
  29. return backarr(0, "注册失败");
  30. }
  31. } else {
  32. //登录
  33. $uid = $uinfo['id'];
  34. $checked = $this->checkpasswd($passwd, $uinfo['passwd']);
  35. if (!$checked) {
  36. return backarr(0, "密码错误");
  37. }
  38. }
  39. $result = $this->changetoken($uid, $phone);
  40. if (empty($result['status'])) {
  41. return backarr(0, $result['msg']);
  42. }
  43. $field = ['id', 'phone', 'token'];
  44. $where = ['id' => $uid];
  45. $uinfo = $m_u->getInfo($where, $field);
  46. return backarr($uinfo, "注册成功", $uinfo);
  47. }
  48. public function login($arr)
  49. {
  50. $fillfields = ['phone', 'passwd'];
  51. foreach ($fillfields as $key => $value) {
  52. if (!isset($arr[$value]) || empty($arr[$value])) {
  53. return backarr(0, "参数缺少");
  54. }
  55. }
  56. $m_u = new UserModel();
  57. $phone = $arr['phone'];
  58. $passwd = $phone . $arr['passwd'];
  59. $where = ['phone' => $phone];
  60. $uinfo = $m_u->getInfo($where);
  61. if (empty($uinfo)) {
  62. return backarr(0, "无用户信息");
  63. }
  64. $uid = $uinfo['id'];
  65. $checked = $this->checkpasswd($passwd, $uinfo['passwd']);
  66. if (!$checked) {
  67. return backarr(0, "密码错误");
  68. }
  69. $result = $this->changetoken($uid, $phone);
  70. if (empty($result['status'])) {
  71. return backarr(0, $result['msg']);
  72. }
  73. $field = ['id', 'phone', 'token'];
  74. $where = ['id' => $uid];
  75. $uinfo = $m_u->getInfo($where, $field);
  76. return backarr(1, "登录成功", $uinfo);
  77. }
  78. private function checkpasswd($pwd, $hash)
  79. {
  80. return password_verify($pwd, $hash);
  81. }
  82. private function createpasswd($pwd)
  83. {
  84. $newpasswd = password_hash($pwd, PASSWORD_DEFAULT);
  85. return $newpasswd;
  86. }
  87. private function changetoken($uid, $str)
  88. {
  89. $token = $this->gettoken($str);
  90. $m_u = new UserModel();
  91. $updateData = ['token' => $token];
  92. $where = ['id' => $uid];
  93. $row = $m_u->updateinfo($where, $updateData);
  94. if (empty($row)) {
  95. return backarr(0, "修改token失败");
  96. }
  97. return backarr(1, "修改token成功");
  98. }
  99. private function gettoken($str)
  100. {
  101. $str = md5(uniqid(md5(microtime(true)), true));
  102. $token = sha1($str . $str);
  103. return $token;
  104. }
  105. /**
  106. * 编辑地址
  107. *
  108. * @return void
  109. * @author wj
  110. * @date 2022-12-01
  111. */
  112. public function editaddress($arr)
  113. {
  114. $fillfields = ['receiver_address', 'address', 'receiver_name', 'receiver_telno', 'gcj_lat', 'gcj_long', 'user_id'];
  115. foreach ($fillfields as $key => $value) {
  116. if (!isset($arr[$value]) || empty($arr[$value])) {
  117. return backarr(0, "参数缺少");
  118. }
  119. }
  120. $isadd = true;
  121. $m_ua = new UserAddressModel();
  122. if (isset($arr['id'])) {
  123. if (isset($arr['user_id'])) {
  124. //user_id 不可更改
  125. unset($arr['user_id']);
  126. }
  127. $id = $arr['id'];
  128. $uawhere = ['id' => $id];
  129. $uainfo = $m_ua->getInfo($uawhere);
  130. if (!empty($uainfo)) {
  131. $isadd = false;
  132. //修改
  133. $updateData = [];
  134. foreach ($arr as $key => $value) {
  135. if (isset($uainfo[$key]) && $uainfo[$key] != $value) {
  136. $updateData[$key] = $value;
  137. }
  138. }
  139. $row = $m_ua->updateinfo(['id' => $id], $updateData);
  140. if (empty($row)) {
  141. return backarr(0, "地址修改失败");
  142. }
  143. }
  144. $uaid = $uainfo['id'];
  145. }
  146. if ($isadd) {
  147. //添加
  148. $uaid = $m_ua->insertData($arr);
  149. if (empty($uaid)) {
  150. return backarr(0, "地址添加失败");
  151. }
  152. }
  153. return backarr(1, "地址编辑成功", ['uaid' => $uaid]);
  154. }
  155. /**
  156. * 修改默认地址
  157. *
  158. * @return void
  159. * @author wj
  160. * @date 2022-12-01
  161. */
  162. public function updateaddressdefault($arr)
  163. {
  164. $fillfields = ['id', 'user_id'];
  165. foreach ($fillfields as $key => $value) {
  166. if (!isset($arr[$value]) || empty($arr[$value])) {
  167. return backarr(0, "参数缺少");
  168. }
  169. }
  170. $id = $arr['id'];
  171. $user_id = $arr['user_id'];
  172. $updateData = ['is_default' => 0];
  173. $where = ['user_id' => $user_id];
  174. $m_ua = new UserAddressModel();
  175. $m_ua->updateinfo($where, $updateData);
  176. $where = ['id' => $id, 'user_id' => $user_id];
  177. $updateData = ['is_default' => 1];
  178. $row = $m_ua->updateinfo($where, $updateData);
  179. if (empty($row)) {
  180. return backarr(0, "默认地址修改失败");
  181. }
  182. return backarr(1, "默认地址修改成功", ['uaid' => $id]);
  183. }
  184. /**
  185. * 删除地址
  186. *
  187. * @return void
  188. * @author wj
  189. * @date 2022-12-01
  190. */
  191. public function deleteaddress($arr)
  192. {
  193. $fillfields = ['id', 'user_id'];
  194. foreach ($fillfields as $key => $value) {
  195. if (!isset($arr[$value]) || empty($arr[$value])) {
  196. return backarr(0, "参数缺少");
  197. }
  198. }
  199. $id = $arr['id'];
  200. $user_id = $arr['user_id'];
  201. $m_ua = new UserAddressModel();
  202. $where = ['id' => $id, 'user_id' => $user_id];
  203. $updateData = ['is_active' => 0];
  204. $row = $m_ua->updateinfo($where, $updateData);
  205. if (empty($row)) {
  206. return backarr(0, "地址删除失败");
  207. }
  208. return backarr(1, "地址删除成功", ['uaid' => $id]);
  209. }
  210. /**
  211. * 获取全部地址列表
  212. *
  213. * @return void
  214. * @author wj
  215. * @date 2022-12-01
  216. */
  217. public function getaddresslist($arr)
  218. {
  219. $userid = isset($arr['userid']) && is_numeric($arr['userid']) && !empty($arr['userid']) && $arr['userid'] > 0 ? $arr['userid'] : 0;
  220. $page = isset($arr['page']) && is_numeric($arr['page']) && !empty($arr['page']) && $arr['page'] > 0 ? $arr['page'] : 1;
  221. $size = isset($arr['size']) && is_numeric($arr['size']) && !empty($arr['size']) && $arr['size'] > 0 ? $arr['size'] : 10;
  222. $where = [];
  223. if (!empty($userid)) {
  224. $where['user_id'] = $userid;
  225. }
  226. if (isset($arr['is_active'])) {
  227. $where['is_active'] = $arr['is_active'];
  228. }
  229. $m_ua = new UserAddressModel();
  230. $count = $m_ua->getList($where, 'count');
  231. if ($count <= 0) {
  232. return backarr(0, "无数据");
  233. }
  234. $totalpage = ceil($count / $size);
  235. $page > $totalpage && $page = $totalpage;
  236. $list = $m_ua->getList($where, "*", $page, $size, 'is_default,id desc');
  237. $data = [
  238. 'page' => $page,
  239. 'size' => $size,
  240. 'count' => $count,
  241. 'list' => $list,
  242. ];
  243. return backarr(1, "查询成功", $data);
  244. }
  245. /**
  246. * 招聘人员登陆
  247. *
  248. * @param [type] $arr
  249. * @return void
  250. * @author wj
  251. * @date 2022-12-09
  252. */
  253. public function loginforengage($arr)
  254. {
  255. $fillfields = ['phone', 'passwd', 'type'];
  256. foreach ($fillfields as $key => $value) {
  257. if (!isset($arr[$value]) || empty($arr[$value])) {
  258. return backarr(0, "参数缺少");
  259. }
  260. }
  261. $m_u = new UserModel();
  262. $phone = $arr['phone'];
  263. $passwd = $phone . $arr['passwd'];
  264. $type = $arr['type'];
  265. $where = ['phone' => $phone, 'is_engage' => 1];
  266. $uinfo = $m_u->getInfo($where);
  267. if (empty($uinfo)) {
  268. return backarr(0, "无用户信息");
  269. }
  270. $uid = $uinfo['id'];
  271. $checked = $this->checkpasswd($passwd, $uinfo['passwd']);
  272. if (!$checked) {
  273. return backarr(0, "密码错误");
  274. }
  275. //校验type
  276. $result = $this->getengageinfo($type, $uid);
  277. if (empty($result['status'])) {
  278. return backarr(0, $result['msg']);
  279. }
  280. $engageinfo = $result['data'];
  281. $result = $this->changetoken($uid, $phone);
  282. if (empty($result['status'])) {
  283. return backarr(0, $result['msg']);
  284. }
  285. $field = ['id', 'phone', 'token'];
  286. $where = ['id' => $uid];
  287. $uinfo = $m_u->getInfo($where, $field);
  288. $uinfo['engageinfo'] = $engageinfo;
  289. return backarr(1, "登录成功", $uinfo);
  290. }
  291. /**
  292. * 获取招聘人员信息
  293. *
  294. * @return void
  295. * @author wj
  296. * @date 2022-12-09
  297. */
  298. public function getengageinfo($type, $userid)
  299. {
  300. $m_eu = new EngageUserModel();
  301. $euwhere = ['user_id' => $userid, 'et_id' => $type];
  302. $euinfo = $m_eu->getInfo($euwhere);
  303. if (empty($euinfo)) {
  304. return backarr(0, "无用户权限");
  305. }
  306. switch ($type) {
  307. case 1:
  308. # 套餐配送
  309. $m_c = new CourierModel();
  310. $cwhere = ['user_id' => $userid];
  311. $cinfo = $m_c->getInfo($cwhere);
  312. if (empty($cinfo)) {
  313. return backarr(0, "无配送员信息");
  314. }
  315. if (1 != $cinfo['is_active']) {
  316. return backarr(0, "配送员已被禁用");
  317. }
  318. $m_mc = new MealcenterModel();
  319. $mcinfo = $m_mc->getInfo(['id' => $cinfo['center_id']]);
  320. $cinfo['mcinfo'] = $mcinfo;
  321. return backarr(1, "配送员已被禁用", $cinfo);
  322. break;
  323. default:
  324. return backarr(0, "类型错误");
  325. break;
  326. }
  327. }
  328. /**
  329. * 聘用人员注册
  330. *
  331. * @param [type] $arr
  332. * @return void
  333. * @author wj
  334. * @date 2022-12-21
  335. */
  336. public function registerengage($arr)
  337. {
  338. $fillfields = ['phone', 'passwd', 'name', 'type'];
  339. foreach ($fillfields as $key => $value) {
  340. if (!isset($arr[$value]) || empty($arr[$value])) {
  341. return backarr(0, "参数缺少");
  342. }
  343. }
  344. $m_u = new UserModel();
  345. $m_eu = new EngageUserModel();
  346. $phone = $arr['phone'];
  347. $name = $arr['name'];
  348. $type = $arr['type'];
  349. $passwd = $phone . $arr['passwd'];
  350. $where = ['name' => $name];
  351. $uinfo = $m_u->getInfo($where);
  352. if (!empty($uinfo)) {
  353. return backarr(0, "登陆名已存在");
  354. }
  355. Db::startTrans();
  356. try {
  357. //注册
  358. $passwd = $this->createpasswd($passwd);
  359. $insertData = [
  360. 'name' => $name,
  361. 'phone' => $phone,
  362. 'passwd' => $passwd,
  363. 'is_engage' => 1,
  364. ];
  365. $uid = $m_u->insertData($insertData);
  366. if (empty($uid)) {
  367. throw new \Exception("注册失败");
  368. }
  369. $euinsertData = [
  370. 'user_id' => $uid,
  371. 'et_id' => $type,
  372. ];
  373. $euid = $m_eu->insertData($euinsertData);
  374. if (empty($euid)) {
  375. throw new \Exception("聘用人员信息添加失败");
  376. }
  377. switch ($type) {
  378. case 1:
  379. $m_c = new CourierModel();
  380. //username 用户姓名
  381. $fillfields = ['username'];
  382. foreach ($fillfields as $key => $value) {
  383. if (!isset($arr[$value]) || empty($arr[$value])) {
  384. throw new \Exception("参数缺少");
  385. }
  386. }
  387. $username = $arr['username'];
  388. $cinsertData = [
  389. 'name' => $username,
  390. 'telno' => $phone,
  391. 'is_active' => 1,
  392. 'user_id' => $uid,
  393. ];
  394. $cid = $m_c->insertData($cinsertData);
  395. if (empty($cid)) {
  396. throw new \Exception("配送员信息添加失败");
  397. }
  398. break;
  399. default:
  400. throw new \Exception("聘用人员类型错误");
  401. break;
  402. }
  403. Db::commit();
  404. $result = $this->getengageinfo($type, $uid);
  405. if (empty($result['status'])) {
  406. return backarr(0, $result['msg']);
  407. }
  408. $engageinfo = $result['data'];
  409. $result = $this->changetoken($uid, $phone);
  410. if (empty($result['status'])) {
  411. throw new \Exception($result['msg']);
  412. }
  413. $field = ['id', 'phone', 'token'];
  414. $where = ['id' => $uid];
  415. $uinfo = $m_u->getInfo($where, $field);
  416. $uinfo['engageinfo'] = $engageinfo;
  417. return backarr($uinfo, "注册成功", $uinfo);
  418. } catch (\Exception $e) {
  419. Db::rollback();
  420. $msg = $e->getMessage();
  421. //var_dump($msg, $e->getTraceAsString());
  422. return backarr(0, $msg);
  423. }
  424. }
  425. }