Employee.php 12 KB

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