User.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. <?php
  2. namespace app\api\controller\screen;
  3. use app\hander\HelpHander;
  4. use think\Db;
  5. class User extends Index
  6. {
  7. // 项目大屏--员工数据分析
  8. public function userCate(){
  9. $lists = model('WorkTypeMode')->getWorkerUserStatistics($this->orgId);
  10. $data = [];
  11. foreach ($lists as $v){
  12. $data[] = [
  13. 'name' => $v['name'],
  14. 'value' => $v['count']
  15. ];
  16. }
  17. HelpHander::success($data);
  18. }
  19. // 项目大屏--员工好评度排名
  20. public function userPraise(){
  21. $allUids = model('WorkTypeMode')->getWorkerUserIds($this->orgId);
  22. $users = [];
  23. if($allUids){
  24. $users = Db::name('user')
  25. ->where('id','in',$allUids)
  26. ->order('score desc,id asc')
  27. ->field('id,real_name')
  28. ->limit(10)
  29. ->select();
  30. $users = $users?$users:[];
  31. }
  32. $data = [];
  33. $host = request()->domain(true);
  34. foreach ($users as $k=>$v){
  35. if($k == 0){
  36. $top = '<img src="'.$host.'/img/org-top1.png" width="35" style="margin-top:5px">';
  37. }else if($k == 1){
  38. $top = '<img src="'.$host.'/img/org-top2.png" width="35" style="margin-top:5px">';
  39. }else if($k == 2){
  40. $top = '<img src="'.$host.'/img/org-top3.png" width="35" style="margin-top:5px">';
  41. }else{
  42. $top = 'TOP'.($k+1);
  43. }
  44. $data[] = [$top,$v['real_name']];
  45. }
  46. HelpHander::success($data);
  47. }
  48. // 项目大屏--员工实时在岗情况
  49. public function userPosition(){
  50. $lists = Db::name('todo')
  51. ->where('todo_mode',3)
  52. ->where('org_id',$this->orgId)
  53. ->where('create_yyyymmdd',date('Ymd'))
  54. ->field('count(*) as count,to_user_id')
  55. ->group('to_user_id')
  56. ->distinct(true)
  57. ->order('count desc,to_user_id asc')
  58. ->select();
  59. $data = [];
  60. foreach ($lists as $k=>$v){
  61. $addr = Db::name('convey_plan_record')
  62. ->alias('cpr')
  63. ->join('address a','a.id = cpr.addr_id')
  64. ->where('user_id',$v['to_user_id'])
  65. ->value('title');
  66. $username = Db::name('user')->where('id',$v['to_user_id'])->value('real_name');
  67. $data[] = [$username?$username:'',$v['count'],$addr?$addr:''];
  68. }
  69. HelpHander::success($data);
  70. }
  71. public function userDep(){
  72. // $depList = Db::name('dep')->where('enable',1)->where('org_id',$this->orgId)->where('del',0)->limit(6)->order('id desc')->select();
  73. $data = [];
  74. $data = Db::name('user_dep')
  75. ->alias('ud')
  76. ->join('user u','u.id=ud.user_id')
  77. ->join('dep dp','dp.id=ud.dep_id')
  78. ->where('u.del',0)
  79. ->where('dp.del',0)
  80. ->where('dp.enable',1)
  81. ->where('dp.org_id',$this->orgId)
  82. ->field('count(ud.user_id) as value,dp.title as name')
  83. ->group('ud.dep_id')
  84. ->order('value','desc')
  85. ->limit(6)
  86. ->select();
  87. // foreach ($depList as $v){
  88. // $data[] = [
  89. // 'name' => $v['title'],
  90. // 'value' => Db::name('user_dep')
  91. // ->alias('ud')
  92. // ->join('user u','u.id=ud.user_id')
  93. // ->where('ud.dep_id',$v['id'])
  94. // ->where('u.del',0)
  95. // ->count(),
  96. // ];
  97. // }
  98. HelpHander::success($data);
  99. }
  100. //新项目大屏---在岗人员情况
  101. public function onGuardUserData(){
  102. $type = input('type','');
  103. $pid = 0;
  104. if($type == 1){
  105. $pid = 7;
  106. }elseif ($type == 2){
  107. $pid = 8;
  108. }elseif ($type == 3){
  109. $pid = 6;
  110. }elseif ($type == 4){
  111. $pid = 5;
  112. }elseif ($type == 5){
  113. $pid = 9;
  114. }elseif ($type == 6){
  115. $pid = 11;
  116. }
  117. $rolesId = Db::name('roles')
  118. ->where('parent_id',$pid)
  119. ->where('del',0)
  120. ->where('type',1)
  121. ->where('enable',1)
  122. ->where('org_id',$this->orgId)
  123. ->column('id');
  124. $userCount = Db::name('user')
  125. ->alias('u')
  126. ->field('u.id,u.real_name,ur.roles_id')
  127. ->join('user_roles ur','ur.user_id=u.id')
  128. ->where('u.del',0)
  129. ->where('u.enable',1)
  130. ->whereIn('ur.roles_id',$rolesId)
  131. ->count();
  132. $rolesUser = Db::name('user')
  133. ->alias('u')
  134. ->field('u.id,u.real_name,ur.roles_id')
  135. ->join('user_roles ur','ur.user_id=u.id')
  136. ->where('u.del',0)
  137. ->where('u.enable',1)
  138. ->where('u.work',1)
  139. ->whereIn('ur.roles_id',$rolesId)
  140. ->select();
  141. foreach ($rolesUser as $k=>$v){
  142. $roles = Db::name('roles')->where('id',$v['roles_id'])->find();
  143. $rolesUser[$k]['roles_name'] = Db::name('roles')->where('id',$roles['parent_id'])->value('name');
  144. $rolesUser[$k]['dep_name'] = Db::name('user_dep')
  145. ->alias('ud')
  146. ->join('dep d','d.id=ud.dep_id')
  147. ->where('ud.user_id',$v['id'])
  148. ->where('d.org_id',$this->orgId)
  149. ->value('d.title');
  150. }
  151. $list = [];
  152. foreach ($rolesUser as $k=>$v){
  153. $list[$k][] = $v['roles_name'];
  154. $list[$k][] = $v['dep_name'];
  155. $list[$k][] = $v['real_name'];
  156. }
  157. $data = [
  158. 'userCount'=>$userCount,
  159. 'rolesCount'=>count($rolesUser),
  160. 'list'=>$list
  161. ];
  162. HelpHander::success($data);
  163. }
  164. //人员在岗数据总览
  165. public function orgUserCount(){
  166. $userCount = Db::name('user')
  167. ->alias('u')
  168. ->join('user_org uo','u.id=uo.user_id')
  169. ->where('uo.org_id',$this->orgId)
  170. ->where('u.type',0)
  171. ->where('enable',1)
  172. ->where('del',0)
  173. ->count();
  174. $userPostCount = Db::name('user')
  175. ->alias('u')
  176. ->join('user_org uo','u.id=uo.user_id')
  177. ->where('uo.org_id',$this->orgId)
  178. ->where('u.work',1)
  179. ->where('u.type',0)
  180. ->where('del',0)
  181. ->where('enable',1)
  182. ->count();
  183. $data = [
  184. ['name'=>'总人数','value'=>$userCount],
  185. ['name'=>'在岗人员','value'=>$userPostCount]
  186. ];
  187. HelpHander::success($data);
  188. }
  189. public function rolesUserData(){
  190. $data = [
  191. ['pid'=>8,'name'=>'保洁','value'=>0],
  192. ['pid'=>7,'name'=>'维修','value'=>0],
  193. ['pid'=>5,'name'=>'保安','value'=>0],
  194. ['pid'=>6,'name'=>'运送','value'=>0],
  195. ['pid'=>11,'name'=>'陪护','value'=>0],
  196. ];
  197. foreach ($data as $k=>$v){
  198. $data[$k]['pid'] = Db::name('roles')
  199. ->where('parent_id',$v['pid'])
  200. ->where('del',0)
  201. ->where('type',1)
  202. ->where('enable',1)
  203. ->where('org_id',$this->orgId)
  204. ->column('id');
  205. }
  206. foreach ($data as $k=>$v){
  207. $data[$k]['value'] = Db::name('user')
  208. ->alias('u')
  209. ->join('user_roles ur','ur.user_id=u.id')
  210. ->whereIn('ur.roles_id',$v['pid'])
  211. ->where('u.del',0)
  212. ->where('u.enable',1)
  213. ->count();
  214. unset($data[$k]['pid']);
  215. }
  216. HelpHander::success($data);
  217. }
  218. public function bjUserCountData(){
  219. //保洁
  220. $bjRolesId = Db::name('roles')
  221. ->where('parent_id',8)
  222. ->where('del',0)
  223. ->where('type',1)
  224. ->where('enable',1)
  225. ->where('org_id',$this->orgId)
  226. ->column('id');
  227. $bjCount = Db::name('user')
  228. ->alias('u')
  229. ->join('user_roles ur','ur.user_id=u.id')
  230. ->whereIn('ur.roles_id',$bjRolesId)
  231. ->where('u.del',0)
  232. ->where('u.enable',1)
  233. ->count();
  234. $bjWorkCount = Db::name('user')
  235. ->alias('u')
  236. ->join('user_roles ur','ur.user_id=u.id')
  237. ->whereIn('ur.roles_id',$bjRolesId)
  238. ->where('u.del',0)
  239. ->where('u.enable',1)
  240. ->where('u.work',1)
  241. ->count();
  242. $bl = $bl2 = 0;
  243. if($bjCount > 0){
  244. $bl = round($bjWorkCount/$bjCount*100,1);
  245. $bl2 = 100 - $bl;
  246. }
  247. $data = [
  248. 'count'=>['bjCount'=>$bjCount,'bjWorkCount'=>$bjWorkCount],
  249. 'count2'=>[['value'=>$bl],['value'=>$bl2]],
  250. 'bl'=>$bl
  251. ];
  252. HelpHander::success($data);
  253. }
  254. public function wxUserCountData(){
  255. //维修
  256. $rolesId = Db::name('roles')
  257. ->where('parent_id',7)
  258. ->where('del',0)
  259. ->where('type',1)
  260. ->where('enable',1)
  261. ->where('org_id',$this->orgId)
  262. ->column('id');
  263. $count = Db::name('user')
  264. ->alias('u')
  265. ->join('user_roles ur','ur.user_id=u.id')
  266. ->whereIn('ur.roles_id',$rolesId)
  267. ->where('u.del',0)
  268. ->where('u.enable',1)
  269. ->count();
  270. $workCount = Db::name('user')
  271. ->alias('u')
  272. ->join('user_roles ur','ur.user_id=u.id')
  273. ->whereIn('ur.roles_id',$rolesId)
  274. ->where('u.del',0)
  275. ->where('u.enable',1)
  276. ->where('u.work',1)
  277. ->count();
  278. $bl = $bl2 = 0;
  279. if($count > 0){
  280. $bl = round($workCount/$count*100,1);
  281. $bl2 = 100 - $bl;
  282. }
  283. $data = [
  284. 'count'=>['count'=>$count,'workCount'=>$workCount],
  285. 'count2'=>[['value'=>$bl],['value'=>$bl2]],
  286. 'bl'=>$bl
  287. ];
  288. HelpHander::success($data);
  289. }
  290. public function baUserCountData(){
  291. //保安
  292. $rolesId = Db::name('roles')
  293. ->where('parent_id',5)
  294. ->where('del',0)
  295. ->where('type',1)
  296. ->where('enable',1)
  297. ->where('org_id',$this->orgId)
  298. ->column('id');
  299. $count = Db::name('user')
  300. ->alias('u')
  301. ->join('user_roles ur','ur.user_id=u.id')
  302. ->whereIn('ur.roles_id',$rolesId)
  303. ->where('u.del',0)
  304. ->where('u.enable',1)
  305. ->count();
  306. $workCount = Db::name('user')
  307. ->alias('u')
  308. ->join('user_roles ur','ur.user_id=u.id')
  309. ->whereIn('ur.roles_id',$rolesId)
  310. ->where('u.del',0)
  311. ->where('u.enable',1)
  312. ->where('u.work',1)
  313. ->count();
  314. $bl = $bl2 = 0;
  315. if($count > 0){
  316. $bl = round($workCount/$count*100,1);
  317. $bl2 = 100 - $bl;
  318. }
  319. $data = [
  320. 'count'=>['count'=>$count,'workCount'=>$workCount],
  321. 'count2'=>[['value'=>$bl],['value'=>$bl2]],
  322. 'bl'=>$bl
  323. ];
  324. HelpHander::success($data);
  325. }
  326. public function phUserCountData(){
  327. //陪护
  328. $rolesId = Db::name('roles')
  329. ->where('parent_id',11)
  330. ->where('del',0)
  331. ->where('type',1)
  332. ->where('enable',1)
  333. ->where('org_id',$this->orgId)
  334. ->column('id');
  335. $count = Db::name('user')
  336. ->alias('u')
  337. ->join('user_roles ur','ur.user_id=u.id')
  338. ->whereIn('ur.roles_id',$rolesId)
  339. ->where('u.del',0)
  340. ->where('u.enable',1)
  341. ->count();
  342. $workCount = Db::name('user')
  343. ->alias('u')
  344. ->join('user_roles ur','ur.user_id=u.id')
  345. ->whereIn('ur.roles_id',$rolesId)
  346. ->where('u.del',0)
  347. ->where('u.enable',1)
  348. ->where('u.work',1)
  349. ->count();
  350. $bl = $bl2 = 0;
  351. if($count > 0){
  352. $bl = round($workCount/$count*100,1);
  353. $bl2 = 100 - $bl;
  354. }
  355. $workUserIds = Db::name('user')
  356. ->alias('u')
  357. ->join('user_roles ur','ur.user_id=u.id')
  358. ->whereIn('ur.roles_id',$rolesId)
  359. ->where('u.del',0)
  360. ->where('u.enable',1)
  361. ->where('u.work',1)
  362. ->column('u.id');
  363. $isWorkCount = Db::name('ph_todo')->whereIn('user_id',$workUserIds)->where('org_id',$this->orgId)->where('status',1)->group('user_id')->count();
  364. $noWorkCount = $workCount - $isWorkCount;
  365. if($noWorkCount < 1 ){
  366. $noWorkCount = 0;
  367. }
  368. $data = [
  369. 'count'=>['count'=>$count,'workCount'=>$workCount,'noWorkCount'=>$noWorkCount],
  370. 'count2'=>[['value'=>$bl],['value'=>$bl2]],
  371. 'bl'=>$bl
  372. ];
  373. HelpHander::success($data);
  374. }
  375. public function ysUserCountData(){
  376. //运送
  377. $rolesId = Db::name('roles')
  378. ->where('parent_id',6)
  379. ->where('del',0)
  380. ->where('type',1)
  381. ->where('enable',1)
  382. ->where('org_id',$this->orgId)
  383. ->column('id');
  384. $count = Db::name('user')
  385. ->alias('u')
  386. ->join('user_roles ur','ur.user_id=u.id')
  387. ->whereIn('ur.roles_id',$rolesId)
  388. ->where('u.del',0)
  389. ->where('u.enable',1)
  390. ->count();
  391. $workCount = Db::name('user')
  392. ->alias('u')
  393. ->join('user_roles ur','ur.user_id=u.id')
  394. ->whereIn('ur.roles_id',$rolesId)
  395. ->where('u.del',0)
  396. ->where('u.enable',1)
  397. ->where('u.work',1)
  398. ->count();
  399. $bl = $bl2 = 0;
  400. if($count > 0){
  401. $bl = round($workCount/$count*100,1);
  402. $bl2 = 100 - $bl;
  403. }
  404. $workUserIds = Db::name('user')
  405. ->alias('u')
  406. ->join('user_roles ur','ur.user_id=u.id')
  407. ->whereIn('ur.roles_id',$rolesId)
  408. ->where('u.del',0)
  409. ->where('u.enable',1)
  410. ->where('u.work',1)
  411. ->column('u.id');
  412. $isWorkCount = Db::name('todo')->whereIn('to_user_id',$workUserIds)->where('org_id',$this->orgId)->where('todo_mode',2)->where('work_type_mode',3)->group('to_user_id')->where('del',0)->count();
  413. $noWorkCount = $workCount - $isWorkCount;
  414. if($noWorkCount < 1 ){
  415. $noWorkCount = 0;
  416. }
  417. $data = [
  418. 'count'=>['count'=>$count,'workCount'=>$workCount,'noWorkCount'=>$noWorkCount],
  419. 'count2'=>[['value'=>$bl],['value'=>$bl2]],
  420. 'bl'=>$bl
  421. ];
  422. HelpHander::success($data);
  423. }
  424. public function userCount(){
  425. $userCount = Db::name('user')
  426. ->alias('u')
  427. ->join('user_org uo','uo.user_id=u.id')
  428. ->join('org o','o.id=uo.org_id')
  429. ->where('u.del',0)
  430. ->where('u.type','in',[0,2])
  431. ->where('o.enable',1)
  432. ->where('o.del',0)
  433. ->where('o.id',$this->orgId)
  434. ->count();
  435. HelpHander::success($userCount);
  436. }
  437. // 项目大屏--满意度排名
  438. public function userCommentScoreList(){
  439. $user = Db::name('comment')
  440. ->field('user_id')
  441. ->where('org_id',$this->orgId)
  442. ->group('user_id')
  443. ->select();
  444. foreach ($user as $k=>$v){
  445. $user[$k]['score'] = Db::name('comment')
  446. ->where('org_id',$this->orgId)
  447. ->where('user_id',$v['user_id'])
  448. ->sum('score');
  449. $user[$k]['name'] = Db::name('user')->where('id',$v['user_id'])->value('real_name');
  450. $user[$k]['dep'] = Db::name('user_dep')
  451. ->alias('ud')
  452. ->join('dep d','d.id=ud.dep_id')
  453. ->where('ud.user_id',$v['user_id'])
  454. ->value('title');
  455. $rolesId = Db::name('user_roles')
  456. ->alias('ur')
  457. ->join('roles r','r.id=ur.roles_id')
  458. ->where('ur.user_id',$v['user_id'])
  459. ->value('r.parent_id');
  460. $user[$k]['roles'] = $rolesId ? Db::name('roles')->where('id',$rolesId)->value('name'):'';
  461. $user[$k]['task'] = Db::name('comment')
  462. ->where('org_id',$this->orgId)
  463. ->where('user_id',$v['user_id'])
  464. ->count();
  465. }
  466. $list = list_sort_by($user,'score','desc');
  467. $data = [];
  468. $host = request()->domain(true);
  469. foreach ($list as $k=>$v){
  470. if(isset($k) && $k==0){
  471. $top = '<img src="'.$host.'/img/org-top1.png" width="30" style="margin-top:5px" >';
  472. }elseif (isset($k) && $k==1){
  473. $top = '<img src="'.$host.'/img/org-top2.png" width="30" style="margin-top:5px" >';
  474. }elseif (isset($k) && $k==2){
  475. $top = '<img src="'.$host.'/img/org-top3.png" width="30" style="margin-top:5px">';
  476. }else{
  477. $top = 'TOP'.($k+1);
  478. }
  479. $data[] = [$top,$v['name'],$v['dep'],$v['roles'],$v['task'],$v['score']];
  480. }
  481. HelpHander::success($data);
  482. }
  483. }