Popup.php 20 KB

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