User.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. <?php
  2. namespace App\Models\Manager\Personnel;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Support\Facades\DB;
  6. use App\Facades\Servers\Encrypts\AccessToken;
  7. /**
  8. * 用户模型
  9. * @author 唐远望
  10. * @version 1.0
  11. * @date 2025-12-04
  12. */
  13. class User extends Model
  14. {
  15. use HasFactory;
  16. // 与模型关联的表名
  17. protected $table = 'personnel_User';
  18. // 是否主动维护时间戳
  19. public $timestamps = false;
  20. // 定义时间戳字段名
  21. // const CREATED_AT = 'insert_time';
  22. // const UPDATED_AT = 'update_time';
  23. /**
  24. * 添加
  25. * @author 唐远望
  26. * @version 1.0
  27. * @date 2025-12-04
  28. */
  29. public function addUser_content($data)
  30. {
  31. $insert_data = [
  32. 'name' => $data['name'],
  33. 'mobile' => $data['mobile'],
  34. 'email' => $data['email'],
  35. 'password' => md5($data['password']),
  36. 'role_id' => $data['role_id'],
  37. 'department_id' => $data['department_id'],
  38. 'open_notice' => $data['open_notice'],
  39. 'duty_type' => isset($data['duty_type']) ? $data['duty_type'] : '',
  40. 'company_id' => $data['company_id'],
  41. 'insert_time' => time(),
  42. ];
  43. $User_id = $this->insertGetId($insert_data);
  44. if ($User_id) {
  45. $this->where('id', $User_id)->update(['User_code' => $this->User_id_rule($data['company_id'], $User_id)]);
  46. }
  47. return $User_id;
  48. }
  49. /**
  50. * id转编码
  51. * @author 唐远望
  52. * @version 1.0
  53. * @date 2025-12-04
  54. * @param int $id 编码
  55. *
  56. */
  57. public function User_idToCode($id)
  58. {
  59. return 'RH' . str_pad($id, 9, '0', STR_PAD_LEFT);
  60. }
  61. /**
  62. * 用户ID生成规则
  63. * @author 唐远望
  64. * @version 1.0
  65. * @date 2026-03-31
  66. * @param int $company_id 公司ID
  67. * @param int $id 用户ID
  68. *
  69. */
  70. public function User_id_rule($company_id,$id)
  71. {
  72. $new_id =rand(100000000, 999999999);
  73. //查询最新一条记录用户ID
  74. $latest_User = $this->where('company_id', $company_id)->where([['User_code','!=','']])->orderBy('id', 'desc')->first();
  75. if (!$latest_User) {
  76. $new_id = $company_id.str_pad(1, 9, '0', STR_PAD_LEFT);
  77. } else {
  78. //如果包含RH字符,则去除后字符串转数字+1,否则直接字符串数据+1
  79. if (strpos($latest_User->User_code, 'RH') === 0) {
  80. $latest_id = intval(str_ireplace('RH', '', $latest_User->User_code));
  81. $new_id = $company_id.$latest_id + 1;
  82. } else if (trim($latest_User->User_code) != '') {
  83. $new_id = intval($latest_User->User_code) + 1;
  84. } else {
  85. $new_id = $company_id.str_pad(1, 9, '0', STR_PAD_LEFT);
  86. }
  87. }
  88. return $new_id;
  89. }
  90. /**
  91. * 编码转id
  92. * @author 唐远望
  93. * @version 1.0
  94. * @date 2025-12-04
  95. * @param string $code 编码
  96. *
  97. */
  98. public function User_codeToId($code)
  99. {
  100. return intval(str_ireplace('RH', '', $code));
  101. }
  102. /**
  103. * 写入数据
  104. * @author 唐远望
  105. * @version 1.0
  106. * @date 2025-12-04
  107. * @param $data
  108. * @return bool
  109. */
  110. public function addUser($data)
  111. {
  112. DB::beginTransaction();
  113. try {
  114. $insert_data = [
  115. 'name' => $data['name'],
  116. 'mobile' => $data['mobile'],
  117. 'email' => $data['email'],
  118. 'password' => md5($data['password']),
  119. 'role_id' => $data['role_id'],
  120. 'department_ids' => isset($data['department_ids']) ? ',' . $data['department_ids'] . ',' : '',
  121. 'open_notice' => $data['open_notice'],
  122. 'duty_type' => isset($data['duty_type']) ? $data['duty_type'] : '',
  123. 'company_id' => $data['company_id'],
  124. 'insert_time' => time(),
  125. ];
  126. $User_id = $this->insertGetId($insert_data);
  127. if ($User_id) {
  128. $this->where('id', $User_id)->update(['User_code' => $this->User_id_rule($data['company_id'],$User_id)]);
  129. }
  130. DB::commit();
  131. return true;
  132. // 成功处理...
  133. } catch (\Exception $e) {
  134. DB::rollBack();
  135. // 错误处理...
  136. return false;
  137. }
  138. }
  139. /**
  140. * 编辑内容
  141. * @author 唐远望
  142. * @version 1.0
  143. * @date 2025-12-04
  144. * @param $data
  145. * @return bool
  146. */
  147. public function editUser_content($where, $data)
  148. {
  149. $User = $this->where($where)->first();
  150. if (!$User) {
  151. return false;
  152. }
  153. $User->name = $data['name'];
  154. $User->mobile = $data['mobile'];
  155. $User->email = $data['email'];
  156. if (isset($data['password']) && $data['password'] != '') $User->password = md5($data['password']);
  157. $User->role_id = $data['role_id'];
  158. $User->department_ids = isset($data['department_ids']) ? ',' . $data['department_ids'] . ',' : '';
  159. $User->open_notice = $data['open_notice'];
  160. $User->duty_type = isset($data['duty_type']) ? $data['duty_type'] : '';
  161. $User->company_id = $data['company_id'];
  162. $User->update_time = time();
  163. $User->save();
  164. return true;
  165. }
  166. /**
  167. * 更新数据
  168. * @author 唐远望
  169. * @version 1.0
  170. * @date 2025-12-04
  171. * @param $data
  172. * @return bool
  173. */
  174. public function updateUser($User, $data)
  175. {
  176. DB::beginTransaction();
  177. try {
  178. $User->name = $data['name'];
  179. $User->mobile = $data['mobile'];
  180. $User->email = $data['email'];
  181. if (isset($data['password']) && $data['password'] != '') $User->password = md5($data['password']);
  182. $User->role_id = $data['role_id'];
  183. $User->department_ids = isset($data['department_ids']) ? ',' . $data['department_ids'] . ',' : '';
  184. $User->open_notice = $data['open_notice'];
  185. $User->duty_type = isset($data['duty_type']) ? $data['duty_type'] : '';
  186. $User->company_id = $data['company_id'];
  187. $User->update_time = time();
  188. $User->save();
  189. DB::commit();
  190. return true;
  191. // 成功处理...
  192. } catch (\Exception $e) {
  193. DB::rollBack();
  194. // 错误处理...
  195. return false;
  196. }
  197. }
  198. /**
  199. * 修改状态
  200. * @author 唐远望
  201. * @version 1.0
  202. * @date 2025-12-04
  203. * @param $id
  204. * @param $status
  205. * @return bool
  206. */
  207. public function changeStatus($where, $status)
  208. {
  209. $User = $this->where($where)->first();
  210. if (!$User) {
  211. return false;
  212. }
  213. $User->status = $status;
  214. $User->update_time = time();
  215. $User->save();
  216. return true;
  217. }
  218. /**
  219. * 删除数据
  220. * @author 唐远望
  221. * @version 1.0
  222. * @date 2025-12-04
  223. * @param $id
  224. * @return bool
  225. */
  226. public function deleteUser($where)
  227. {
  228. $User = $this->where($where)->first();
  229. if (!$User) {
  230. return false;
  231. }
  232. $User->delete();
  233. return true;
  234. }
  235. /**
  236. * 添加数据
  237. *
  238. */
  239. public function edit($id,$data)
  240. {
  241. // 更新时间
  242. $data['update_time'] = time();
  243. // 写入数据表
  244. $result = $this->query()->where(['id'=>$id])->update($data);
  245. // 如果操作失败
  246. if( !$result ) return 0;
  247. // 更新缓存
  248. $this->getList(true);
  249. // 返回结果
  250. return $id;
  251. }
  252. /**
  253. * 获取列表
  254. * @param Bool $force 是否强制更新
  255. *
  256. */
  257. public function getList($force = false)
  258. {
  259. // 结果数据
  260. $list = $force ? [] : cache('manager:admin:User:list');
  261. // 不存在数据
  262. if ( !$list ) {
  263. // 从数据库获取数据
  264. $data = $this->query()->get(['id','name','mobile','status','password','status','insert_time','update_time'])->toArray();
  265. // 循环处理数据
  266. $list = [];
  267. // 进行更新
  268. foreach ($data as $value) {
  269. // 重组数据
  270. $list[$value['id']] = $value;
  271. }
  272. // 存起来
  273. cache(['manager:admin:User:list'=>$list]);
  274. }
  275. // 返回结果
  276. return $list;
  277. }
  278. /**
  279. * 获取配置平台对应的应用数据
  280. *
  281. * @param int 用户ID
  282. * @param string 指定字段
  283. *
  284. */
  285. public function getOne($id,$field='')
  286. {
  287. // 获取列表数据
  288. $list = $this->getList();
  289. // 获取数据
  290. $one = isset($list[$id]) ? $list[$id] : [];
  291. // 返回值
  292. return empty($field) ? $one : ( isset($one[$field]) ? $one[$field] : null);
  293. }
  294. /**
  295. * 登录
  296. *
  297. * @param int 用户ID
  298. *
  299. */
  300. public function Login($uid,$company_id=0, $module = 'manager')
  301. {
  302. // 组合数据
  303. $jwtData = ['company_id'=>$company_id, 'uid' => $uid, 'is_admin' => '0', 'type' => $module, 'expire' => time() + 3600 * 8];
  304. // 登录成功
  305. $token = AccessToken::encode($jwtData);
  306. // 如果异常的话
  307. if (isset($token['error'])) return $token;
  308. // 登录成功
  309. cache([$module . ':User:access_token:' . $uid => md5($token)], 3600 * 8);
  310. // 返回结果
  311. return ['access_token_' . $module => $token, 'expire' => 3600 * 8];
  312. }
  313. /**
  314. * 退出登录
  315. *
  316. * @param int 用户ID
  317. *
  318. */
  319. public function LoginOut($uid, $module = 'manager')
  320. {
  321. // 删除缓存
  322. cache([$module . ':User:access_token:' . $uid => null]);
  323. // 返回结果
  324. return true;
  325. }
  326. }