Department.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. /**
  3. +-----------------------------------------------------------------------------------------------
  4. * GouGuOPEN [ 左手研发,右手开源,未来可期!]
  5. +-----------------------------------------------------------------------------------------------
  6. * @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
  7. +-----------------------------------------------------------------------------------------------
  8. * @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
  9. +-----------------------------------------------------------------------------------------------
  10. * @Author 勾股工作室 <hdm58@qq.com>
  11. +-----------------------------------------------------------------------------------------------
  12. */
  13. namespace app\user\model;
  14. use think\Model;
  15. use think\facade\Db;
  16. class Department extends Model
  17. {
  18. // 定义与员工的多对多关联关系
  19. public function admins()
  20. {
  21. return $this->belongsToMany(Admin::class, 'department_admin');
  22. }
  23. public function update_auth_dids_son_dids(){
  24. $admin = Db::name('Admin')->field('id,did,auth_did')->select()->toArray();
  25. foreach ($admin as $key => $val) {
  26. $auth_dids = $this->get_auth_departments($val);
  27. $son_dids = $this->get_son_departments($val);
  28. Db::name('Admin')->where('id',$val['id'])->update(['auth_dids'=>$auth_dids,'son_dids'=>$son_dids]);
  29. }
  30. }
  31. /*获取某员工所能看的部门数据(dids)
  32. *传入某员工uid,输出部门数组,如:'1,2,3'。
  33. *超级管理员默认返回全部部门数据
  34. */
  35. public function get_auth_departments($admin)
  36. {
  37. $str='';
  38. $uid = $admin['id'];
  39. $did = $admin['did'];
  40. $auth_did = $admin['auth_did'];
  41. $dids = Db::name('Department')->where('status',1)->column('id');
  42. $departments = Db::name('Department')->where('status',1)->select()->toArray();
  43. //次要部门did
  44. $secondary_dids = Db::name('DepartmentAdmin')->where('admin_id',$uid)->column('department_id');
  45. //全部可见部门
  46. $all_dids = array_merge($secondary_dids,[$did]);
  47. //超级管理员||所有部门数据权限
  48. if($uid==1 || $auth_did==10){
  49. $str = implode(',',$dids);
  50. }
  51. //仅自己关联的数据
  52. if($auth_did==0){
  53. $str='';
  54. }
  55. //所属主部门的数据
  56. if($auth_did==1){
  57. $str=$did;
  58. }
  59. //所属次部门的数据
  60. if($auth_did==2){
  61. $str = implode(',',$secondary_dids);
  62. }
  63. //仅所属主次部门数据
  64. if($auth_did==3){
  65. $str = implode(',',$all_dids);
  66. }
  67. //所属主部门及其子部门数据
  68. if($auth_did==4){
  69. //获取子部门
  70. $department_list = get_data_node($departments, $did);
  71. $department_array = array_column($department_list, 'id');
  72. //包括自己部门在内
  73. $department_array[] = $did;
  74. $str = implode(',',$department_array);
  75. }
  76. //所属次部门及其子部门数据
  77. if($auth_did==5){
  78. //获取子部门
  79. $list_array = [];
  80. foreach ($secondary_dids as $key => $value) {
  81. $department_list = get_data_node($departments, $value);
  82. $department_array = array_column($department_list, 'id');
  83. //包括自己部门在内
  84. $department_array[] = $value;
  85. $list_array = array_merge($list_array,$department_array);
  86. }
  87. $new_array = array_unique($list_array);
  88. $str = implode(',',$new_array);
  89. }
  90. //所属主次部门及其子部门数据
  91. if($auth_did==6){
  92. //获取子部门
  93. $list_array = [];
  94. foreach ($all_dids as $key => $value) {
  95. $department_list = get_data_node($departments, $value);
  96. $department_array = array_column($department_list, 'id');
  97. //包括自己部门在内
  98. $department_array[] = $value;
  99. $list_array = array_merge($list_array,$department_array);
  100. }
  101. $new_array = array_unique($list_array);
  102. $str = implode(',',$new_array);
  103. }
  104. //所属主部门所在顶级部门及其子部门数据
  105. if($auth_did==7){
  106. //获取顶级部门
  107. $top_did = get_department_top($did);
  108. $new_array = get_department_son($top_did,1);
  109. $str = implode(',',$new_array);
  110. }
  111. //所属次部门所在顶级部门及其子部门数据
  112. if($auth_did==8){
  113. //获取顶级部门
  114. $top_dids =[];
  115. foreach ($secondary_dids as $key => $value) {
  116. array_push($top_dids, get_department_top($value));
  117. }
  118. $list_array = [];
  119. foreach ($top_dids as $key => $value) {
  120. $list_array = array_merge($list_array,get_department_son($value,1));
  121. }
  122. $new_array = array_unique($list_array);
  123. $str = implode(',',$new_array);
  124. }
  125. //所属主次部门所在顶级部门及其子部门数据
  126. if($auth_did==9){
  127. //获取顶级部门
  128. $top_dids =[];
  129. foreach ($all_dids as $key => $value) {
  130. array_push($top_dids, get_department_top($value));
  131. }
  132. $list_array = [];
  133. foreach ($top_dids as $key => $value) {
  134. $list_array = array_merge($list_array,get_department_son($value,1));
  135. }
  136. $new_array = array_unique($list_array);
  137. $str = implode(',',$new_array);
  138. }
  139. return $str;
  140. }
  141. /*获取某负责人所负责的部门的数据集(ids),传入某员工uid,输出部门字符串,如:1,2,3,
  142. *逻辑:先判断传入的uid是否是负责人,如果是负责人再读取对应的部门数据。
  143. *超级管理员默认返回全部部门数据
  144. */
  145. public function get_son_departments($admin)
  146. {
  147. $str='';
  148. $uid = $admin['id'];
  149. $dids = Db::name('Department')->where('status',1)->column('id');
  150. $departments = Db::name('Department')->where('status',1)->select()->toArray();
  151. if($uid==1){
  152. $str = implode(',',$dids);
  153. }
  154. else{
  155. $map = [];
  156. $map[] = ['status','=',1];
  157. $map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$uid}',leader_ids)")];
  158. $leader_dids = Db::name('Department')->where($map)->column('id');
  159. //判断是否是部门负责人
  160. if(!empty($leader_dids)){
  161. //获取子部门
  162. $list_array = [];
  163. foreach ($leader_dids as $key => $value) {
  164. $department_list = get_data_node($departments, $value);
  165. $department_array = array_column($department_list, 'id');
  166. //包括自己部门在内
  167. $department_array[] = $value;
  168. $list_array = array_merge($list_array,$department_array);
  169. }
  170. $str = implode(',',$list_array);
  171. }
  172. }
  173. return $str;
  174. }
  175. }