Employee.php 12 KB

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