WorkRole.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <?php
  2. namespace app\bug\controller;
  3. use app\bug\model\WorkAction;
  4. use app\bug\model\WorkUser;
  5. use app\user\model\Account;
  6. use app\user\model\AccountCompany;use think\App;
  7. use think\facade\Validate;
  8. class WorkRole extends Base{
  9. public function __construct(App $app) {
  10. parent::__construct($app);
  11. $this->model= new \app\bug\model\WorkRole();
  12. }
  13. public function create(){
  14. $param = $this->request->param(["role_name"=>"","companyNo"=>"","level"=>"","work_id"=>"","action"=>[]],"post","trim");
  15. $valid=Validate::rule([
  16. "role_name|角色名称"=>"require|max:255|unique:\app\bug\model\WorkRole,role_name^companyNo^belong",
  17. "companyNo|业务公司"=>"require|max:255",
  18. "level|等级"=>"require|number|in:1,2,3,4",
  19. "work_id|岗位模板id"=>"require|number",
  20. "action|角色权限集合"=>"require|array"
  21. ]);
  22. if($valid->check($param)==false) return error($valid->getError());
  23. $template = \app\bug\model\Work::with(["workTemplate"])->findOrEmpty($param['work_id']);
  24. if($template->isEmpty()) return error("岗位模板不存在");
  25. if($template->status==0)return error('岗位模板已禁用');
  26. if(empty($template->action??[]))return error('岗位模板权限不能为空');
  27. if(empty(array_diff($param['action'],$template->action))==false)return error('选择权限超出模板权限范围');
  28. $data=[
  29. "role_name"=>$param['role_name'],
  30. "companyNo"=>$param['companyNo'],
  31. "work_id"=>$param['work_id'],
  32. "level"=>$param['level'],
  33. "belong"=>$template->belong,
  34. "action"=>$param["action"],
  35. "process"=>[],
  36. "apply_id"=>$this->uid,
  37. "apply_name"=>$this->uname,
  38. ];
  39. $add= $this->model->save($data);
  40. return $add ? success('岗位角色创建成功'):error('岗位角色创建失败');
  41. }
  42. public function save(){
  43. $param = $this->request->param(["id"=>"",'role_name'=>'',"level"=>"",'companyNo'=>'','work_id'=>'','action'=>[]],'post','trim');
  44. $valid=Validate::rule([
  45. 'id|岗位角色id'=>'require|number|gt:0',
  46. 'role_name|角色名称'=>'require|max:255|unique:\app\bug\model\WorkRole,role_name^companyNo^belong',
  47. 'companyNo|业务公司'=>'require|max:255',
  48. 'level|等级'=>'require|number|in:1,2,3,4',
  49. 'work_id|岗位模板id'=>'require|number',
  50. 'action|角色权限集合'=>'require|array'
  51. ]);
  52. if($valid->check($param)==false) return error($valid->getError());
  53. $info = $this->model->findOrEmpty($param['id']);
  54. if($info->isEmpty()) return error('岗位角色不存在');
  55. $template = \app\bug\model\Work::with(['workTemplate'])->findOrEmpty($param['work_id']);
  56. if($template->isEmpty()) return error('岗位模板不存在');
  57. if($template->status==0)return error('岗位模板已禁用');
  58. if(empty($template->action??[]))return error('岗位模板权限不能为空');
  59. if(empty(array_diff($param['action'],$template->action))==false)return error('选择权限超出模板权限范围');
  60. $user = WorkUser::where(['role_id'=>$param['id'],"status"=>[1,2]])->findOrEmpty();
  61. if($user->isEmpty()==false)return error('岗位角色有账户正在使用中无法修改');
  62. $info->role_name= $param['role_name'];
  63. $info->companyNo= $param['companyNo'];
  64. $info->level= $param['level'];
  65. $info->work_id= $param['work_id'];
  66. $info->belong= $template->belong;
  67. $info->action= $param['action'];
  68. $info->status= 0;
  69. $add= $info->save();
  70. return $add ? success('岗位角色修改成功'):error('岗位角色修改失败');
  71. }
  72. public function info(){
  73. $id = $this->request->post("id/d");
  74. $info = $this->model->findOrEmpty($id);
  75. if($info->isEmpty()) return error('岗位角色不存在');
  76. $info->actionInfo= (new WorkAction())->GetTreeActionByIdArr($info->action,$info->belong);
  77. return success('获取成功',$info);
  78. }
  79. public function status(){
  80. $param = $this->request->param(['id'=>'','status'=>''],'post','trim');
  81. $valid = Validate::rule([
  82. 'id|账户角色ID'=>'require|number|gt:0',
  83. 'status|状态'=>'require|number|in:0,1'
  84. ]);
  85. if($valid->check($param)==false) return error($valid->getError());
  86. $info = $this->model->with(['companyInfo','workInfo'])->findOrEmpty($param['id']);
  87. if($info->isEmpty())return error('岗位角色信息不存在');
  88. $info->status=$param['status'];
  89. $add = $info->save();
  90. $messg= \app\bug\model\WorkRole::$statusCn[$param['status']];
  91. if($add==false)return error("岗位角色{$messg}失败");
  92. event('role_sync',['info_id'=>$info->id,'type'=>$param['status']==1?"on":'off']);
  93. return success("岗位角色{$messg}成功");
  94. }
  95. public function delete(){
  96. $id = $this->request->post('id/d');
  97. $info = $this->model->findOrEmpty($id);
  98. if($info->isEmpty()) return error('岗位角色不存在');
  99. $user = WorkUser::where(["role_id"=>$id])->findOrEmpty();
  100. if($user->isEmpty()==false)return error('岗位角色有账户正在使用无法删除');
  101. $delete = $info->delete();
  102. if($delete==false)return error('删除失败');
  103. event('role_sync',["info_id"=>$id,"type"=>"delete"]);
  104. return success('删除成功');
  105. }
  106. public function list(){
  107. $param = $this->request->param(['role_name'=>'','companyNo'=>'','belong'=>'','level'=>'','work_id'=>'',
  108. 'status'=>'','page'=>1,"size"=>15],'post','trim');
  109. $where=[];
  110. if($param['companyNo']!='')$where[]=['companyNo','=',$param['companyNo']];
  111. if($param['belong']!='')$where[]=['belong','=',$param['belong']];
  112. if($param['level']!='')$where[]=['level','=',$param['level']];
  113. if($param['status']!='')$where[]=['status','=',$param['status']];
  114. if($param['role_name']!='')$where[]=['role_name','like',"%{$param['role_name']}%"];
  115. if($param['work_id']!='')$where[]=['work_id','=',$param['work_id']];
  116. $list =$this->model->with(['companyInfo','workInfo'])->where($where)->order('id desc')->paginate(['list_rows'=>$param['size'],
  117. 'page'=>$param['page']]);
  118. foreach ($list->items() as &$item){
  119. $item["usedNum"] = WorkUser::where(['role_id'=>$item->id])->count();
  120. }
  121. return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
  122. }
  123. public function WorkRoleCreate(){
  124. $param=$this->request->param(["account_id"=>"","role_id"=>""],"post","trim");
  125. $valid = Validate::rule([
  126. "account_id|账户ID"=>"require|number|gt:0",
  127. "role_id|岗位角色Id"=>"require|number|gt:0"
  128. ]);
  129. if($valid->check($param)==false) return error($valid->getError());
  130. $userinfo = Account::with(["userInfo"])->where(["is_del"=>0])->findOrEmpty($param['account_id']);
  131. if($userinfo->isEmpty())return error("用户信息不存在");
  132. $roleInfo = $this->model->findOrEmpty($param['role_id']);
  133. if($roleInfo->isEmpty())return error('角色信息不存在');
  134. $data=[
  135. "account_id"=>$param['account_id'],
  136. "role_id" => $param['role_id'],
  137. 'apply_id'=>$this->uid,
  138. 'apply_name'=>$this->uname,
  139. ];
  140. $add =WorkUser::create($data);
  141. return $add ? success('账户角色设置成功'):error('账户角色设置失败');
  142. }
  143. public function WorkRoleSave(){
  144. $param=$this->request->param(['id'=>'',"account_id"=>"",'role_id'=>''],'post','trim');
  145. $valid = Validate::rule([
  146. 'id|账户角色ID'=>'require|number|gt:0',
  147. 'account_id|账户ID'=>'require|number|gt:0',
  148. 'role_id|岗位角色Id'=>'require|number|gt:0'
  149. ]);
  150. if($valid->check($param)==false) return error($valid->getError());
  151. $info = WorkUser::where(["id"=>$param['id']])->findOrEmpty();
  152. if($info->isEmpty())return error('账户角色信息不存在');
  153. if($info->status!=0)return error('账户角色状态不可修改');
  154. $userinfo = Account::with(['userInfo'])->where(['is_del'=>0])->findOrEmpty($param['account_id']);
  155. if($userinfo->isEmpty())return error('用户信息不存在');
  156. $roleInfo = $this->model->findOrEmpty($param['role_id']);
  157. if($roleInfo->isEmpty())return error('角色信息不存在');
  158. $info->account_id=$param['account_id'];
  159. $info->role_id=$param['role_id'];
  160. $add = $info->save();
  161. return $add ? success('账户角色设置成功'):error('账户角色设置失败');
  162. }
  163. public function WorkRoleStatus(){
  164. $param=$this->request->param(['id'=>'','status'=>''],'post','trim');
  165. $valid = Validate::rule([
  166. 'id|账户角色ID'=>'require|number|gt:0',
  167. 'status|状态'=>'require|number|in:0,1,4'
  168. ]);
  169. if($valid->check($param)==false) return error($valid->getError());
  170. $info = WorkUser::where(['id'=>$param['id']])->findOrEmpty();
  171. if($info->isEmpty())return error('账户角色信息不存在');
  172. $info->status=$param['status'];
  173. $add = $info->save();
  174. $messg= WorkUser::$statusCn[$param['status']];
  175. if($add==false)return error("账户角色{$messg}失败");
  176. event("user_sync",["info_id"=>$info->id,"type"=>$param['status']==1?"on":'off']);
  177. return success("账户角色{$messg}成功");
  178. }
  179. public function WorkRoleInfo(){
  180. $id=$this->request->post("id/d");
  181. $info = WorkUser::with(['account',"workRole"])->where(['id'=>$id])->findOrEmpty();
  182. if($info->isEmpty())return error('账户角色信息不存在');
  183. $info->statusCn= WorkUser::$statusCn[$info->status];
  184. return success("获取成功",$info);
  185. }
  186. public function WorkRoleInfoByCondition(){
  187. $param=$this->request->param(["companyNo"=>"","belong"=>"","account_id"=>""],"post","trim");
  188. $valid=Validate::rule([
  189. "companyNo|业务公司"=>"require|max:255",
  190. "belong|系统归属"=>"require|number|in:1,2,3",
  191. "account_id|账户id"=>"require|number|gt:0",
  192. ]);
  193. if($valid->check($param)==false)return error($valid->getError());
  194. $info = WorkUser::withJoin(['workRole'],"left")
  195. ->where([["companyNo","=",$param['companyNo']],["belong","=",$param["belong"]],['account_id','=',$param['account_id']]])
  196. ->findOrEmpty();
  197. if($info->isEmpty())return error('账户角色信息不存在');
  198. $info->statusCn= WorkUser::$statusCn[$info->status];
  199. return success('获取成功',$info);
  200. }
  201. public function WorkRoleDelete(){
  202. $id=$this->request->post('id/d');
  203. $info = WorkUser::where(['id'=>$id])->findOrEmpty();
  204. if($info->isEmpty())return error('账户角色信息不存在');
  205. if($info->status==1 || $info->status==2 )return error('账户角色状态不可删除');
  206. $del = $info->delete();
  207. if($del==false)return error('账户角色删除失败');
  208. event("user_sync",["info_id"=>$id,"type"=>'del']);
  209. return success('删除成功');
  210. }
  211. public function WorkRoleList(){
  212. $param = $this->request->param(['companyNo'=>'','status'=>'','level'=>'','apply_id'=>'',
  213. 'belong'=>1,'account_id'=>'','page'=>1,'size'=>15],'post','trim');
  214. $where=[["account_company.is_del","=",0]];
  215. $workWhere=[['work_user.status','=',1]];
  216. if($param['companyNo']!='')$where[]=['companyCode','=',$param['companyNo']];
  217. if($param['level']!='')$where[]=['level','=',$param['level']];
  218. if($param['account_id']!='')$where[]=['account_id','=',$param['account_id']];
  219. if($param['belong']!=''){
  220. $workWhere[]=["belong","=",$param['belong']];
  221. }
  222. if($param['apply_id']!=''){
  223. $workWhere[]=['workUser.apply_id','=',$param['apply_id']];
  224. }
  225. $uidArr = WorkUser::withJoin(['workRole'],"left")->where($workWhere)->column('account_id');
  226. if($param['status']!==''){
  227. if($param['status']==1){
  228. $where[]=['account_id','in',$uidArr];
  229. }else{
  230. $where[]=['account_id','not in',$uidArr];
  231. }
  232. }
  233. $list =AccountCompany::with(["accountInfo"=>["userInfo","accountItem"=>["itemName"]]])
  234. ->withJoin(["account_info"],"left")
  235. ->where($where)->order('id asc')
  236. ->paginate(['list_rows'=>$param['size'],'page'=>$param['page']]);
  237. foreach ($list->items() as &$item){
  238. $uidArr = WorkUser::withJoin(['workRole'],'left')
  239. ->where(['account_id'=>$item['account_id'],'companyNo'=>$item['companyCode'],"belong"=>$param['belong']])
  240. ->findOrEmpty();
  241. $item['role_name'] ='';
  242. $item['user_role_id'] =0;
  243. $item['role_status'] =0;
  244. $item['apply_name'] = '';
  245. $item['usedNum']=0;
  246. if($uidArr->isEmpty()==false){
  247. $item['role_name'] = $uidArr->role_name??'';
  248. $item['role_status'] = $uidArr->status??0;
  249. $item['user_role_id'] =$uidArr->id;
  250. $item['apply_name'] = $uidArr->apply_name??'';
  251. $item['usedNum'] = WorkUser::where(['role_id'=>$uidArr->role_id])->count();
  252. }
  253. }
  254. return success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
  255. }
  256. }