Employee.php 12 KB

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