Employee.php 14 KB

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