Popup.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. <?php
  2. namespace app\api\controller\screen;
  3. use app\api\controller\screen\Index;
  4. use app\hander\HelpHander;
  5. use think\Db;
  6. use think\helper\Time;
  7. class Popup extends Index
  8. {
  9. // 项目大屏--员工实时在岗情况
  10. public function userPraise(){
  11. $allUids = model('WorkTypeMode')->getWorkerUserIds($this->orgId);
  12. $users = [];
  13. if($allUids){
  14. $users = Db::name('user')
  15. ->where('id','in',$allUids)
  16. ->order('score desc,id asc')
  17. ->field('id,real_name,score')
  18. ->limit(10)
  19. ->select();
  20. $users = $users?$users:[];
  21. }
  22. $data = [];
  23. foreach ($users as $k=>$v){
  24. $top = 'TOP'.($k+1);
  25. $data[$k]['top'] = $top;
  26. $data[$k]['name'] = $v['real_name'];
  27. $data[$k]['score'] = $v['score'];
  28. }
  29. HelpHander::success($data);
  30. }
  31. public function hotMate(){
  32. $map[] = ['tm.org_id','=',$this->orgId];
  33. $lists = Db::name('todo_mate_item')
  34. ->alias('tmi')
  35. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  36. ->where($map)
  37. ->field('sum(total) as total,items_id')
  38. ->group('items_id')
  39. ->distinct(true)
  40. ->order('total desc')
  41. ->limit(10)
  42. ->select();
  43. $data = [];
  44. foreach ($lists as $k=>$v){
  45. $top = 'TOP'.($k+1);
  46. $name = Db::name('mate_goods')->where('id',$v['items_id'])->value('title');
  47. $data[$k]['top'] = $top;
  48. $data[$k]['name'] = $name ? $name :'';
  49. $data[$k]['count'] = $v['total'];
  50. }
  51. HelpHander::success($data);
  52. }
  53. public function hotDep(){
  54. $type = input('type/d',1);
  55. if(!in_array($type,[1,2])){
  56. HelpHander::error('参数错误');
  57. }
  58. if($type == 1){ // 运送
  59. $map[] = ['work_type_mode','=',3];
  60. $map[] = ['org_id','=',$this->orgId];
  61. $map[] = ['del','=',0];
  62. $lists = Db::name('orders')
  63. ->where($map)
  64. ->where('dep_id','<>',0)
  65. ->field('count(*) as count,dep_id')
  66. ->group('dep_id')
  67. ->distinct(true)
  68. ->order('count desc')
  69. ->limit(10)
  70. ->select();
  71. }else{ // 陪护
  72. $map[] = ['org_id','=',$this->orgId];
  73. $lists = Db::name('ph_orders')
  74. ->where($map)
  75. ->field('count(*) as count,dep_id')
  76. ->group('dep_id')
  77. ->distinct(true)
  78. ->order('count desc')
  79. ->limit(10)
  80. ->select();
  81. }
  82. $data = [];
  83. foreach ($lists as $k=>$v){
  84. $top = 'TOP'.($k+1);
  85. $depName = Db::name('dep')->where('id',$v['dep_id'])->value('title');
  86. $data[$k]['top'] = $top;
  87. $data[$k]['dep_name'] = $depName?$depName:'';
  88. $data[$k]['count'] = $v['count'];
  89. }
  90. HelpHander::success($data);
  91. }
  92. public function cateTodoCount(){
  93. //保洁
  94. $bjCount = Db::name('todo')
  95. ->where('del',0)
  96. ->where('create_yyyymmdd',date('Ymd'))
  97. ->where('org_id',$this->orgId)
  98. ->where('work_type_mode',2)
  99. ->count();
  100. $bjCount2 = Db::name('todo')
  101. ->where('del',0)
  102. ->where('todo_mode',3)
  103. ->where('create_yyyymmdd',date('Ymd'))
  104. ->where('org_id',$this->orgId)
  105. ->where('work_type_mode',2)
  106. ->count();
  107. //报修
  108. $bxCount = Db::name('todo')
  109. ->where('del',0)
  110. ->where('create_yyyymmdd',date('Ymd'))
  111. ->where('org_id',$this->orgId)
  112. ->where('work_type_mode',1)
  113. ->count();
  114. $bxCount2 = Db::name('todo')
  115. ->where('del',0)
  116. ->where('todo_mode',3)
  117. ->where('create_yyyymmdd',date('Ymd'))
  118. ->where('work_type_mode',1)
  119. ->where('org_id',$this->orgId)
  120. ->count();
  121. //隐患
  122. $yhCount = Db::name('todo')
  123. ->where('del',0)
  124. ->where('create_yyyymmdd',date('Ymd'))
  125. ->where('work_type_mode',4)
  126. ->where('org_id',$this->orgId)
  127. ->count();
  128. $yhCount2 = Db::name('todo')
  129. ->where('del',0)
  130. ->where('todo_mode',3)
  131. ->where('create_yyyymmdd',date('Ymd'))
  132. ->where('work_type_mode',4)
  133. ->where('org_id',$this->orgId)
  134. ->count();
  135. //运送
  136. $ysCount = Db::name('todo')
  137. ->where('del',0)
  138. ->where('create_yyyymmdd',date('Ymd'))
  139. ->where('work_type_mode',3)
  140. ->where('org_id',$this->orgId)
  141. ->count();
  142. $ysCount2 = Db::name('todo')
  143. ->where('del',0)
  144. ->where('todo_mode',3)
  145. ->where('create_yyyymmdd',date('Ymd'))
  146. ->where('work_type_mode',3)
  147. ->where('org_id',$this->orgId)
  148. ->count();
  149. //陪护
  150. $phCount = Db::name('ph_todo')
  151. ->where('create_time','>=',date('Y-m-d').' 00:00:00')
  152. ->where('create_time','<=',date('Y-m-d').' 23:59:59')
  153. ->where('org_id',$this->orgId)
  154. ->count();
  155. $phCount2 = Db::name('ph_todo')
  156. ->where('create_time','>=',date('Y-m-d').' 00:00:00')
  157. ->where('create_time','<=',date('Y-m-d').' 23:59:59')
  158. ->where('status',2)
  159. ->where('org_id',$this->orgId)
  160. ->count();
  161. $data = [
  162. ['name'=>'报修','num'=>$bxCount,'num1'=>$bxCount2],
  163. ['name'=>'保洁','num'=>$bjCount,'num1'=>$bjCount2],
  164. ['name'=>'运送','num'=>$ysCount,'num1'=>$ysCount2],
  165. ['name'=>'应急','num'=>$yhCount,'num1'=>$yhCount2],
  166. ['name'=>'陪护','num'=>$phCount,'num1'=>$phCount2],
  167. ];
  168. HelpHander::success($data);
  169. }
  170. public function orderCount(){
  171. $mode = input('mode/d',1);
  172. $type = input('type/d',1);
  173. if(!in_array($type,[1,2,3])||!in_array($mode,[1,2,3,4])){
  174. HelpHander::error('参数错误');
  175. }
  176. $date = [];
  177. $curDay = date('Y-m-d');
  178. if($type == 1){ // 日统计
  179. $date[] = '03';
  180. $date[] = '06';
  181. $date[] = '09';
  182. $date[] = '12';
  183. $date[] = '15';
  184. $date[] = '18';
  185. $date[] = '21';
  186. $date[] = '24';
  187. }else if($type == 2){ // 周统计
  188. $ms = Time::week();
  189. $start = $ms[0];
  190. $end = $ms[1] + 1;
  191. $date[] = date('Y-m-d',$start);
  192. $i = 1;
  193. while (($start + $i*24*60*60) < $end){
  194. $date[] = date('Y-m-d',$start + $i*24*60*60);
  195. $i++;
  196. }
  197. }else{ // 月统计
  198. $ms = Time::month();
  199. $start = $ms[0];
  200. $end = $ms[1] + 1;
  201. $i = 1;
  202. while (($start + $i*24*60*60) < $end){
  203. $date[] = date('Y-m-d',$start + $i*24*60*60);
  204. $i++;
  205. }
  206. }
  207. $d1 = [];
  208. $d2 = [];
  209. $d = [];
  210. $data = [];
  211. foreach ($date as $k=>$v){
  212. $map = [];
  213. $map[] = ['org_id','=',$this->orgId];
  214. $map[] = ['work_type_mode','=',$mode];
  215. $map[] = ['del','=',0];
  216. if($type == 1){ // 日统计
  217. if($k == 0){
  218. $s = $curDay.' 00:00:00';
  219. }else{
  220. $s = $curDay.' '.$date[$k-1].':00:00';
  221. }
  222. $e = $curDay.' '.$v.':00:00';
  223. $map[] = ['create_time','egt',$s];
  224. $map[] = ['create_time','lt',$e];
  225. $d[] = (int)$v;
  226. $data[$k]['name'] = $v;
  227. }else{
  228. $map[] = ['create_yyyymmdd','=',date('Ymd',strtotime($v))];
  229. $d[] = date('m-d',strtotime($v));
  230. $data[$k]['name'] = date('m-d',strtotime($v));
  231. }
  232. $order = Db::name('orders')->where($map)->count();
  233. $todo = Db::name('todo')->where($map)->count();
  234. $d1[] = $todo;
  235. $d2[] = $order;
  236. $data[$k]['order_num'] = $order;
  237. $data[$k]['todo_num'] = $todo;
  238. }
  239. // HelpHander::success(['d'=>$d,'d1'=>$d1,'d2'=>$d2]);
  240. HelpHander::success($data);
  241. }
  242. public function patrolRealTime(){
  243. $mode = input('mode');
  244. $page = input('page',1);
  245. $size = input('size',9);
  246. if(!in_array($mode,[1,2,3,4])){
  247. HelpHander::error('参数错误');
  248. }
  249. $lists = Db::name('patrol_record')
  250. ->field('create_time,user_id,patrol_addr_form_id,patrol_mode,is_normal,content as info,patrol_task_id,patrol_addr_id')
  251. ->where('patrol_mode',$mode)
  252. ->where('org_id',$this->orgId)
  253. ->page($page,$size)
  254. ->order('id desc')
  255. ->select();
  256. $data = [];
  257. foreach ($lists as $k=>$v){
  258. $addrForm = Db::name('patrol_addr_form')
  259. ->alias('a')
  260. ->join('patrol_task_addr b','b.patrol_form_id = a.id')
  261. ->where('b.id',$v['patrol_addr_form_id'])
  262. ->value('a.title');
  263. $modeTitle = Db::name('patrol_mode')
  264. ->where('id',$v['patrol_mode'])
  265. ->value('name');
  266. $user = Db::name('user')->where('id',$v['user_id'])->value('real_name');
  267. $is_normal = '无异常' ;
  268. if($v['is_normal'] == 1){
  269. $is_normal = '有异常' ;
  270. }
  271. $time = date('Y-m-d H:i',strtotime($v['create_time']));
  272. $content = '员工-'.$user.'完成'.$addrForm.$modeTitle.','.$is_normal;
  273. $data[$k]['time'] = $time;
  274. $data[$k]['content'] = $content;
  275. $data[$k]['info'] = $v['info'];
  276. $data[$k]['task_name'] = Db::name('patrol_task')->where('id',$v['patrol_task_id'])->value('title');
  277. $data[$k]['addr_name'] = Db::name('address')->where('id',$v['patrol_addr_id'])->value('title');
  278. }
  279. $count = Db::name('patrol_record')
  280. ->where('patrol_mode',$mode)
  281. ->where('org_id',$this->orgId)
  282. ->count();
  283. $dt = [
  284. 'list'=>$data,
  285. 'count'=>$count
  286. ];
  287. HelpHander::success($dt);
  288. }
  289. public function taskList(){
  290. $mode = input('mode/d',1);
  291. if(!in_array($mode,[1,2,3,4,5])){
  292. HelpHander::error('参数错误');
  293. }
  294. $data = [];
  295. if($mode == 5){
  296. $lists = Db::name('ph_orders')
  297. ->where('org_id',$this->orgId)
  298. ->where('status','in',[1,2])
  299. ->order('id desc')
  300. ->field('id,sn,cate_id,status,create_time,start,end,contact,phone')
  301. ->limit(20)
  302. ->select();
  303. foreach ($lists as $k=>$v){
  304. $cate = Db::name('cate')->where('id',$v['cate_id'])->value('title');
  305. $stxt = '新订单';
  306. $users = '';
  307. if($v['status'] == 2){
  308. $stxt = '服务中';
  309. $unames = Db::name('ph_todo')
  310. ->alias('t')
  311. ->join('worker w','t.worker_id = w.id')
  312. ->join('user u','u.id = w.user_id')
  313. ->where('t.order_id',$v['id'])
  314. ->where('t.status',1)
  315. ->column('real_name');
  316. $users = $unames?implode(',',$unames):'';
  317. }
  318. $data[$k]['status'] = $stxt;
  319. $data[$k]['sn'] = $v['sn'];
  320. $data[$k]['cate'] = $cate;
  321. $data[$k]['user'] = $users;
  322. $data[$k]['time'] = $v['create_time'];
  323. $data[$k]['st'] = $v['start'];
  324. $data[$k]['et'] = $v['end'];
  325. $data[$k]['contact'] = $v['contact'];
  326. $data[$k]['phone'] = $v['phone'];
  327. }
  328. }else{
  329. $lists = Db::name('orders')
  330. ->where('org_id',$this->orgId)
  331. ->where('order_mode','in',[1,4])
  332. ->where('work_type_mode',$mode)
  333. ->where('del',0)
  334. ->order('id desc')
  335. ->limit(20)
  336. ->field('id,order_mode,create_time,send_time,content,dep_id,sn,user_id')
  337. ->select();
  338. foreach ($lists as $k=>$v){
  339. $dep = Db::name('dep')->where('id',$v['dep_id'])->value('title');
  340. $status = Db::name('order_mode')->where('id',$v['order_mode'])->value('out_content');
  341. $userName = Db::name('user')->where('id',$v['user_id'])->value('real_name');
  342. if($mode == 1){ // 报修
  343. $type = Db::name('order_repair')
  344. ->alias('or')
  345. ->leftJoin('order_type ot','ot.id = or.type_id')
  346. ->where('or.order_id',$v['id'])
  347. ->value('title');
  348. // $data[] = [$status,$dep,$type?$type:'',$v['content'],$v['create_time']];
  349. $data[$k]['status'] = $status;
  350. $data[$k]['dep'] = $dep;
  351. $data[$k]['cate'] = $type?$type:'';
  352. $data[$k]['content'] = $v['content'];
  353. $data[$k]['time'] = $v['create_time'];
  354. $data[$k]['sn'] = $v['sn'];
  355. $data[$k]['user_name'] = $userName;
  356. $data[$k]['send_time'] = $v['send_time'];
  357. }else if($mode == 3){ //运送
  358. $convey = Db::name('order_convey')
  359. ->alias('oc')
  360. ->join('convey_cate cc','cc.id = oc.type')
  361. ->where('oc.order_id',$v['id'])
  362. ->field('oc.*,cc.title as cate_title')
  363. ->find();
  364. $start = Db::name('address')->where('id',$convey['start'])->value('title');
  365. $end = Db::name('address')->where('id',$convey['end'])->value('title');
  366. $todos = Db::name('todo')
  367. ->alias('t')
  368. ->join('user u','u.id = t.to_user_id')
  369. ->where('t.order_id',$v['id'])
  370. ->where('t.del',0)
  371. ->where('t.todo_mode','in',[1,2,3])
  372. ->field('t.confirm_time,u.real_name')
  373. ->select();
  374. $todos = $todos?$todos:[];
  375. $unames = [];
  376. $confirm = '';
  377. foreach ($todos as $tk=>$tv){
  378. $unames[] = $tv['real_name'];
  379. if(!$confirm){
  380. $confirm = $tv['confirm_time'];
  381. }
  382. }
  383. $un = $unames?implode(',',$unames):'';
  384. $send = $v['send_time']?date('H:i',strtotime($v['send_time'])):'';
  385. $xq = date('H:i',strtotime($convey['xq_time']));
  386. $confirm = $confirm?date('H:i',strtotime($confirm)):'';
  387. // $data[] = [$status,$convey['cate_title'],$start,$end,$xq,$un,$send,$confirm];
  388. $data[$k]['status'] = $status;
  389. $data[$k]['cate'] = $convey['cate_title'];
  390. $data[$k]['start'] = $start;
  391. $data[$k]['end'] = $end;
  392. $data[$k]['xq'] = $xq;
  393. $data[$k]['un'] = $un;
  394. $data[$k]['send'] = $send;
  395. $data[$k]['confirm'] = $confirm;
  396. $data[$k]['sn'] = $v['sn'];
  397. $data[$k]['user_name'] = $userName;
  398. $data[$k]['send_time'] = $v['send_time'];
  399. }else{ // 保洁,应急
  400. // $data[] = [$status,$dep,$v['content'],$v['create_time']];
  401. $data[$k]['status'] = $status;
  402. $data[$k]['dep'] = $dep;
  403. $data[$k]['content'] = $v['content'];
  404. $data[$k]['time'] = $v['create_time'];
  405. $data[$k]['sn'] = $v['sn'];
  406. $data[$k]['user_name'] = $userName;
  407. $data[$k]['send_time'] = $v['send_time'];
  408. }
  409. }
  410. }
  411. HelpHander::success($data);
  412. }
  413. public function wxTodoData(){
  414. $page = input('page',1);
  415. $size = input('size',9);
  416. $list = Db::name('todo')
  417. ->field('id,order_id,todo_mode,create_time,to_user_id,confirm_time,xy_time,wc_time,todo_content')
  418. ->where('org_id',$this->orgId)
  419. ->whereIn('todo_mode',[1,2,3])
  420. ->where('del',0)
  421. ->where('create_yyyymmdd','>=',date('Ymd',strtotime('-3 day')))
  422. ->where('create_yyyymmdd','<=',date('Ymd'))
  423. ->where('work_type_mode',1)
  424. ->page($page,$size)
  425. ->select();
  426. foreach ($list as $k=>$v){
  427. if($v['todo_mode'] == 1){
  428. $list[$k]['status'] = '新任务';
  429. }elseif ($v['todo_mode'] == 2){
  430. $list[$k]['status'] = '进行中';
  431. }elseif ($v['todo_mode'] == 3){
  432. $list[$k]['status'] = '已完成';
  433. }
  434. $repair = Db::name('order_type')
  435. ->alias('ot')
  436. ->field('ot.id,ot.title,ot.parent_id')
  437. ->join('order_repair or','or.type_id=ot.id')
  438. ->where('or.order_id',$v['order_id'])
  439. ->find();
  440. $list[$k]['cate_title'] = Db::name('order_type')->where('id',$repair['parent_id'])->value('title');
  441. $list[$k]['address'] = Db::name('address')
  442. ->alias('a')
  443. ->join('order_repair or','or.address_id=a.id')
  444. ->where('or.order_id',$v['order_id'])
  445. ->where('a.org_id',$this->orgId)
  446. ->value('a.title');
  447. $list[$k]['create_time'] = date('H:i',strtotime($v['create_time']));
  448. $list[$k]['confirm_time'] = $v['confirm_time']? date('H:i',strtotime($v['confirm_time'])):'';
  449. $list[$k]['user_name'] = Db::name('user')->where('id',$v['to_user_id'])->value('real_name');
  450. $list[$k]['xy_time'] = $v['xy_time'] ? round($v['xy_time']/60,1):'';
  451. $list[$k]['wc_time'] = $v['wc_time'] ? round($v['wc_time']/60,1):'';
  452. }
  453. $count = Db::name('todo')
  454. ->where('org_id',$this->orgId)
  455. ->whereIn('todo_mode',[1,2,3])
  456. ->where('del',0)
  457. ->where('create_yyyymmdd','>=',date('Ymd',strtotime('-3 day')))
  458. ->where('create_yyyymmdd','<=',date('Ymd'))
  459. ->where('work_type_mode',1)
  460. ->count();
  461. $data = [
  462. 'list'=>$list,
  463. 'count'=>$count,
  464. ];
  465. HelpHander::success($data);
  466. }
  467. public function patrolRecord(){
  468. $page = input('page',1);
  469. $size = input('size',9);
  470. $lists = Db::name('patrol_record')
  471. ->alias('a')
  472. ->join('patrol_task t','a.patrol_task_id = t.id')
  473. ->join('address b','a.patrol_addr_id = b.id')
  474. ->join('user c','a.user_id = c.id')
  475. ->where('a.create_yyyymmdd','>=',date('Ymd',strtotime('-3 day')))
  476. ->where('a.create_yyyymmdd','<=',date('Ymd'))
  477. ->where('a.org_id',$this->orgId)
  478. ->field('a.images,a.create_time,b.title as address,c.real_name as name,t.title as task_title,a.is_normal,a.content')
  479. ->page($page,$size)
  480. ->order('a.id desc')
  481. ->select();
  482. foreach ($lists as $k=>$v){
  483. $lists[$k]['is_normal_text'] = $v['is_normal'] == 0 ? '正常':'异常';
  484. }
  485. $count = Db::name('patrol_record')
  486. ->alias('a')
  487. ->join('patrol_task t','a.patrol_task_id = t.id')
  488. ->join('address b','a.patrol_addr_id = b.id')
  489. ->join('user c','a.user_id = c.id')
  490. ->where('a.create_yyyymmdd','>=',date('Ymd',strtotime('-3 day')))
  491. ->where('a.create_yyyymmdd','<=',date('Ymd'))
  492. ->where('a.org_id',$this->orgId)
  493. ->count();
  494. $data = [
  495. 'list'=>$lists,
  496. 'count'=>$count
  497. ];
  498. HelpHander::success($data);
  499. }
  500. }