Employee.php 15 KB

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