Project.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
  1. <?php
  2. namespace app\api\controller\screen;
  3. use app\hander\HelpHander;
  4. use app\api\controller\screen\Index;
  5. use think\Controller;
  6. use think\Db;
  7. class Project extends Controller
  8. {
  9. public function __construct()
  10. {
  11. parent::__construct();
  12. $this->orgId = input('orgid')?input('orgid'):0;
  13. }
  14. /**
  15. * 获取用户数
  16. * @param $orgid 组织id
  17. * @param $roles 角色id
  18. * @return mixed
  19. */
  20. private function get_user_count($orgid,$roles){
  21. $count = $this->db
  22. ->join('user_roles','user.USER_ID = user_roles.USER_ID')
  23. ->join('user_org','user.USER_ID = user_org.USER_ID')
  24. ->where_in('user_roles.ROLES_ID',$roles)
  25. ->where('user.DEL_REF',0)
  26. ->where('user.ENABLE',1)
  27. ->where('user_org.ORG_TYPE',0)
  28. ->where('user_org.ORG_ID',$orgid)
  29. ->from('user')
  30. ->count_all_results();
  31. return $count;
  32. }
  33. // 各类人员占比接口
  34. public function user(){
  35. $this->load->model(array('OrgModel','RolesModel'));
  36. $info = $this->OrgModel->show_one(array('ORG_ID'=>$this->orgId,'TYPE'=>'2'));
  37. if(!$info||$info->ENABLE != 1||$info->DEL_REF != 0){
  38. $this->error('项目不存在');
  39. }
  40. // 1=客户人员 2=综合人员 3=运送人员 4=维修人员 5=保洁人员 6=保安人员 7=调度人员 8=监管人员
  41. $arr = array(
  42. array('type' => 5),
  43. array('type' => 3),
  44. array('type' => 4),
  45. array('type' => 6),
  46. );
  47. $allcount = 0;
  48. foreach ($arr as $k=>$v){
  49. $roles = $this->RolesModel->get_roles_type($this->orgId,$v['type']);
  50. $arr[$k]['name'] = $roles['name'];
  51. $arr[$k]['value'] = $this->get_user_count($this->orgId,$roles['roles']);
  52. $allcount += $arr[$k]['value'];
  53. }
  54. $data = array(
  55. array('value'=>$arr[0]['value'],'name'=>'保洁人员','name2'=>'保洁','bl'=>$allcount>0?round($arr[0]['value']*100/$allcount):0),
  56. array('value'=>$arr[1]['value'],'name'=>'运送人员','name2'=>'运送','bl'=>$allcount>0?round($arr[1]['value']*100/$allcount):0),
  57. array('value'=>$arr[2]['value'],'name'=>'维修人员','name2'=>'维修','bl'=>$allcount>0?round($arr[2]['value']*100/$allcount):0),
  58. array('value'=>$arr[3]['value'],'name'=>'保安人员','name2'=>'保安','bl'=>$allcount>0?round($arr[3]['value']*100/$allcount):0),
  59. );
  60. $this->success('成功',['count' => $allcount,'list' => $data]);
  61. }
  62. public function todostis(){
  63. $count1 = Db::name('orders')
  64. ->where('org_id',$this->orgId)
  65. ->where('del',0)
  66. ->where('work_type_mode',3)
  67. ->where('create_yyyymmdd',date('Ymd'))
  68. ->where('order_mode','in',[5,6])
  69. ->count();
  70. $count2 = Db::name('orders')
  71. ->where('org_id',$this->orgId)
  72. ->where('del',0)
  73. ->where('work_type_mode',1)
  74. ->where('create_yyyymmdd',date('Ymd'))
  75. ->where('order_mode','in',[5,6])
  76. ->count();
  77. $count3 = Db::name('daily_record')
  78. ->where('org_id',$this->orgId)
  79. ->where('create_yyyymmdd',date('Ymd'))
  80. ->count();
  81. $arr = [
  82. [
  83. 'name' => '运送任务',
  84. 'count' => $count1
  85. ],
  86. [
  87. 'name' => '维修任务',
  88. 'count' => $count2
  89. ],
  90. [
  91. 'name' => '日常任务',
  92. 'count' => $count3
  93. ]
  94. ];
  95. HelpHander::success($arr,'成功');
  96. }
  97. public function ysuser(){
  98. $lists = model('User')->getYsUser($this->orgId,1);
  99. $nlists = [];
  100. if(count($lists) > 4){
  101. $arr = array_rand($lists,4);
  102. foreach ($arr as $k=>$v){
  103. $nlists[] = $lists[$v];
  104. }
  105. }else{
  106. $nlists = $lists;
  107. }
  108. foreach ($nlists as $k=>$v){
  109. $count = Db::name('todo')
  110. ->alias('a')
  111. ->join('orders b','a.order_id=b.id')
  112. ->where('a.create_yyyymmdd',date('Ymd'))
  113. ->where('a.to_user_id',$v['id'])
  114. ->where('a.todo_mode',3)
  115. ->where('a.del',0)
  116. ->where('a.org_id',$this->orgId)
  117. ->count();
  118. $nlists[$k]['count'] = $count;
  119. // $addr = Db::name('user_convey_addr')
  120. // ->alias('uca')
  121. // ->join('convey_addr ca','ca.id = uca.ADDR_ID')
  122. // ->where('uca.USER_ID',$v['USER_ID'])
  123. // ->order_by('uca.CREATE_TIME DESC')
  124. // ->select('ca.TITLE')
  125. // ->get('user_convey_addr as uca')
  126. // ->row_array();
  127. $addr = [];
  128. $nlists[$k]['addr_title'] = $addr?$addr['TITLE']:'';
  129. }
  130. HelpHander::success($nlists,'成功');
  131. }
  132. // 热点区域
  133. public function hotaddr(){
  134. //SELECT count(a.START) as COUNT,a.START FROM order_convey as a JOIN orders as o ON o.ORDER_ID = a.ORDER_ID GROUP BY a.`START` LIMIT 10
  135. $curDay = date('Ymd');
  136. $oldDay = date('Ymd',time() - 29*24*60*60);
  137. $lists = Db::name('order_convey')
  138. ->alias('oc')
  139. ->join('orders o','o.id = oc.order_id')
  140. ->where('o.org_id',$this->orgId)
  141. ->where('o.create_yyyymmdd',$curDay)
  142. ->where('o.work_type_mode',3)
  143. ->where('o.del',0)
  144. ->where('o.order_mode','in',[5,6])
  145. ->field('COUNT(oc.start) as count,oc.start')
  146. ->group('oc.start')
  147. ->order('count','desc')
  148. ->limit(10)
  149. ->select();
  150. $x = [];
  151. $y1 = [];
  152. $y2 = [];
  153. foreach ($lists as $k=>$v){
  154. $addr = Db::name('address')
  155. ->where('id',$v['start'])
  156. ->find();
  157. $x[] = $addr?$addr['title']:'';
  158. $y1[] = $v['count'];
  159. $count = Db::name('order_convey')
  160. ->alias('oc')
  161. ->join('orders o','o.id = oc.order_id')
  162. ->where('o.org_id',$this->orgId)
  163. ->where('o.work_type_mode',3)
  164. ->where('o.create_yyyymmdd','<=',$curDay)
  165. ->where('o.create_yyyymmdd','>=',$oldDay)
  166. ->where('o.order_mode','in',[5,6])
  167. ->where('oc.start',$v['start'])
  168. ->where('o.del',0)
  169. ->count();
  170. $y2[] = round($count/30,2);
  171. }
  172. $data = [
  173. 'x' => $x,
  174. 'y1' => $y1,
  175. 'y2' => $y2
  176. ];
  177. HelpHander::success($data,'成功');
  178. }
  179. public function yscount(){
  180. $curDay = date('Ymd');
  181. $tcount = Db::name('orders')
  182. ->where('org_id',$this->orgId)
  183. ->where('work_type_mode',3)
  184. ->where('create_yyyymmdd',$curDay)
  185. ->where('order_mode','in',[5,6])
  186. ->where('del',0)
  187. ->count();
  188. $fcount = Db::name('order_convey')
  189. ->alias('oc')
  190. ->join('orders o','o.id = oc.order_id')
  191. ->where('o.org_id',$this->orgId)
  192. ->where('o.work_type_mode',3)
  193. ->where('o.create_yyyymmdd',$curDay)
  194. ->whereRaw("TIMESTAMPDIFF(second,o.finish_time,oc.ywc_time) >=0")
  195. ->where('o.order_mode','in',[5,6])
  196. ->where('o.del',0)
  197. ->count();
  198. $bl1 = $tcount>0?round($fcount/$tcount,3)*100:0;
  199. $wcount = Db::name('orders')
  200. ->where('org_id',$this->orgId)
  201. ->where('del',0)
  202. ->where('work_type_mode',3)
  203. ->where('create_yyyymmdd',$curDay)
  204. ->where('order_mode','in',[1])
  205. ->count();
  206. $jxcount = Db::name('orders')
  207. ->where('org_id',$this->orgId)
  208. ->where('del',0)
  209. ->where('work_type_mode',3)
  210. ->where('create_yyyymmdd',$curDay)
  211. ->where('order_mode','in',[5])
  212. ->count();
  213. $bhcount = Db::name('todo')
  214. ->alias('a')
  215. ->join('todo b','a.order_id=b.id')
  216. ->where('a.org_id',$this->orgId)
  217. ->where('b.del',0)
  218. ->where('a.work_type_mode',3)
  219. ->where('a.create_yyyymmdd',$curDay)
  220. ->where('a.todo_mode','in',[4])
  221. ->count();
  222. $flist = Db::name('orders')
  223. ->field('(TIMESTAMPDIFF(minute,create_time,send_time)) as minute')
  224. ->where('org_id',$this->orgId)
  225. ->where('work_type_mode',3)
  226. ->where('create_yyyymmdd',$curDay)
  227. ->where('del',0)
  228. ->where('order_mode','in',[4,5,6])
  229. ->select();
  230. $flist = $flist?$flist:[];
  231. $c = count($flist);
  232. $minu = 0;
  233. foreach ($flist as $k=>$v){
  234. if($v['minute']){
  235. $minu += $v['minute'];
  236. }
  237. }
  238. $avg = $c > 0?round($minu/$c,1):0;
  239. $data = [
  240. 'count1' => $bl1."%",
  241. 'count2' => $avg,
  242. 'count3' => $wcount,
  243. 'count4' => $jxcount,
  244. 'count5' => $tcount,
  245. 'count6' => $bhcount
  246. ];
  247. HelpHander::success($data,'成功');
  248. }
  249. // 隐患预警数据统计
  250. public function yinhuan(){
  251. $list = [
  252. ['标题', '隐患数量', '转任务量'],
  253. // ['报修', $bxwc, $bxxy],
  254. // ['保洁', $bjwc, $bjxy],
  255. // ['运送', $yswc, $ysxy],
  256. // ['隐患预警', $yhwc, $yhxy],
  257. ];
  258. $dlist = [
  259. date('Y-m-d',strtotime('-6 days')),
  260. date('Y-m-d',strtotime('-5 days')),
  261. date('Y-m-d',strtotime('-4 days')),
  262. date('Y-m-d',strtotime('-3 days')),
  263. date('Y-m-d',strtotime('-2 days')),
  264. date('Y-m-d',strtotime('-1 days')),
  265. date('Y-m-d'),
  266. ];
  267. foreach ($dlist as $v){
  268. $tt = date('Ymd',strtotime($v));
  269. $count = Db::name('orders')
  270. ->where('org_id',$this->orgId)
  271. ->where('create_yyyymmdd',$tt)
  272. ->where('del',0)
  273. ->where('work_type_mode',4)
  274. ->count();
  275. $count1 = Db::name('todo')
  276. ->alias('a')
  277. ->join('orders b','a.order_id=b.id')
  278. ->where('a.org_id',$this->orgId)
  279. ->where('a.create_yyyymmdd',$tt)
  280. ->where('a.del',0)
  281. ->where('a.work_type_mode',4)
  282. ->where('b.del',0)
  283. ->group('a.order_id')
  284. ->count();
  285. $list[] = [date('m-d',strtotime($v)),$count,$count1];
  286. }
  287. $data = [
  288. 'list' => $list
  289. ];
  290. HelpHander::success($data,'成功');
  291. }
  292. // 运送数据统计
  293. public function yusong(){
  294. $list = [
  295. ['标题', '工单总量', '完成工单量'],
  296. ];
  297. $dlist = [
  298. date('Y-m-d',strtotime('-6 days')),
  299. date('Y-m-d',strtotime('-5 days')),
  300. date('Y-m-d',strtotime('-4 days')),
  301. date('Y-m-d',strtotime('-3 days')),
  302. date('Y-m-d',strtotime('-2 days')),
  303. date('Y-m-d',strtotime('-1 days')),
  304. date('Y-m-d'),
  305. ];
  306. foreach ($dlist as $v){
  307. $tt = date('Ymd',strtotime($v));
  308. $count = $this->db
  309. ->where('ORG_ID',$this->orgId)
  310. ->where('CREATE_YYYYMMDD',$tt)
  311. ->where('DEL_REF',0)
  312. ->where('WORK_TYPE_MODE',3)
  313. ->from('orders')
  314. ->count_all_results();
  315. $count1 = $this->db
  316. ->where('ORG_ID',$this->orgId)
  317. ->where('CREATE_YYYYMMDD',$tt)
  318. ->where('DEL_REF',0)
  319. ->where('WORK_TYPE_MODE',3)
  320. ->where_in('CURR_ORDER_MODE',[9,11])
  321. ->from('orders')
  322. ->count_all_results();
  323. $list[] = [date('m-d',strtotime($v)),$count,$count1];
  324. }
  325. $data = [
  326. 'list' => $list
  327. ];
  328. $this->success('成功',$data);
  329. }
  330. // 今日运送完成工单总量
  331. public function yscounttoday(){
  332. $curDay = date('Ymd');
  333. $tcount = $this->db
  334. ->where('ORG_ID',$this->orgId)
  335. ->where('WORK_TYPE_MODE',3)
  336. ->where('CREATE_YYYYMMDD',$curDay)
  337. ->where_in('CURR_ORDER_MODE',[9,11])
  338. ->from('orders')
  339. ->count_all_results();
  340. $data = [
  341. 'count' => $tcount
  342. ];
  343. $this->success('成功',$data);
  344. }
  345. // 医废
  346. public function waste(){
  347. $dlist = [
  348. date('Y-m-d',strtotime('-6 days')),
  349. date('Y-m-d',strtotime('-5 days')),
  350. date('Y-m-d',strtotime('-4 days')),
  351. date('Y-m-d',strtotime('-3 days')),
  352. date('Y-m-d',strtotime('-2 days')),
  353. date('Y-m-d',strtotime('-1 days')),
  354. date('Y-m-d'),
  355. ];
  356. $xdata = [];
  357. $ydata = [];
  358. foreach ($dlist as $v){
  359. $tt = date('Ymd',strtotime($v));
  360. // $count = $this->db
  361. //// ->where('ORG_ID',$this->orgId)
  362. //// ->where('CREATE_YYYYMMDD',$tt)
  363. //// ->where('DEL_REF',0)
  364. //// ->from('waste_record')
  365. //// ->count_all_results();
  366. ///
  367. $ret = Db::name('waste_record')
  368. ->where('org_id',$this->orgId)
  369. ->where('create_yyyymmdd',$tt)
  370. ->where('del',0)
  371. ->select();
  372. $total = 0;
  373. foreach ($ret as $kk=>$vv){
  374. $total += $vv['weight'];
  375. }
  376. $ydata[] = $total/1000;
  377. $xdata[] = date('m-d',strtotime($v));
  378. }
  379. $data = [
  380. 'xdata' => $xdata,
  381. 'ydata' => $ydata
  382. ];
  383. HelpHander::success($data,'成功');
  384. }
  385. public function ystask(){
  386. $size = input('size')?input('size'):5;
  387. $data = model('Orders')->get_cur_day_lists($this->orgId,$size);
  388. foreach ($data as $k=>$v){
  389. $data[$k]['xq_time'] = date('H:i',strtotime($v['xq_time']));
  390. $data[$k]['send_time'] = $v['send_time']?date('H:i',strtotime($v['send_time'])):'';
  391. $data[$k]['confirm_time'] = $v['confirm_time']?date('H:i',strtotime($v['confirm_time'])):'';
  392. }
  393. HelpHander::success($data,'成功');
  394. }
  395. public function ystaskcount(){
  396. $this->load->model('OrdersModel');
  397. $data = $this->OrdersModel->get_cur_day_count($this->orgId);
  398. $this->success('成功',['count' => $data]);
  399. }
  400. public function daily(){
  401. $lists = Db::name('daily_record')
  402. ->alias('dr')
  403. ->join('daily d','d.id = dr.daily_id')
  404. ->where('dr.org_id',$this->orgId)
  405. ->where('dr.create_yyyymmdd',date('Ymd'))
  406. ->limit(9)
  407. ->field('d.title,d.content,dr.user_id,dr.create_time')
  408. ->order('dr.id','desc')
  409. ->select();
  410. foreach ($lists as $k=>$v){
  411. $user = Db::name('user')
  412. ->where('id',$v['user_id'])
  413. ->find();
  414. $lists[$k]['real_name'] = $user?$user['real_name']:'';
  415. $lists[$k]['create_time'] = date('m-d H:i',strtotime($v['create_time']));
  416. }
  417. HelpHander::success($lists,'成功');
  418. }
  419. public function patrolList(){
  420. $lists = Db::name('patrol_record')
  421. ->alias('pr')
  422. ->join('address pa','pa.id = pr.patrol_addr_id')
  423. ->join('patrol_task pt','pt.id = pr.patrol_task_id')
  424. ->join('user u','u.id = pr.user_id')
  425. ->where('pr.org_id',$this->orgId)
  426. ->where('pr.create_yyyymmdd',date('Ymd'))
  427. ->limit(4)
  428. ->field('pa.title,pt.title as task_title,u.real_name,pr.create_time')
  429. ->order('pr.id','DESC')
  430. ->select();
  431. foreach ($lists as $k=>$v){
  432. $lists[$k]['create_time'] = date('m-d H:i',strtotime($v['create_time']));
  433. }
  434. HelpHander::success($lists,'成功');
  435. }
  436. public function patrolImg(){
  437. $lists = Db::name('patrol_record')
  438. ->alias('pr')
  439. ->join('patrol_task pt','pt.id = pr.patrol_task_id')
  440. ->where('pr.org_id',$this->orgId)
  441. ->where('pr.images','<>','null')
  442. ->where('pr.create_yyyymmdd',date('Ymd'))
  443. ->limit(4)
  444. ->field('pt.title as task_title,pr.images')
  445. ->order('pr.id','DESC')
  446. ->select();
  447. foreach ($lists as $k=>$v){
  448. $imgs = explode(',',$v['images']);
  449. $lists[$k]['images'] = $imgs[0];
  450. }
  451. HelpHander::success($lists?$lists:[],'成功');
  452. }
  453. // 评论,满意度
  454. public function comment(){
  455. $scores = [
  456. ['score'=>1,'name'=>'一星','value'=>0],
  457. ['score'=>2,'name'=>'二星','value'=>0],
  458. ['score'=>3,'name'=>'三星','value'=>0],
  459. ['score'=>4,'name'=>'四星','value'=>0],
  460. ['score'=>5,'name'=>'五星','value'=>0],
  461. ];
  462. foreach ($scores as $k=>$v){
  463. $count = $this->db
  464. ->where('ORG_ID',$this->orgId)
  465. ->where('SCORE',$v['score'])
  466. ->from('comment')
  467. ->count_all_results();
  468. $scores[$k]['value'] = $count?$count:0;
  469. unset($scores[$k]['score']);
  470. }
  471. $user = $this->db
  472. ->select('sum(SCORE) as SCORE,TO_USER_ID')
  473. ->where('ORG_ID',$this->orgId)
  474. ->group_by('TO_USER_ID')
  475. ->distinct()
  476. ->get('comment_reply')
  477. ->result_array();
  478. foreach ($user as $k=>$v){
  479. $count = $this->db
  480. ->where('ORG_ID',$this->orgId)
  481. ->where('TO_USER_ID',$v['TO_USER_ID'])
  482. ->from('comment_reply')
  483. ->count_all_results();
  484. $score = round($v['SCORE']/$count,1);
  485. $user[$k]['SCORE'] = $score;
  486. $info = $this->db
  487. ->join('user_org uo','uo.USER_ID = u.USER_ID')
  488. ->join('org o','uo.ORG_ID = o.ORG_ID')
  489. ->where('uo.ORG_TYPE',1)
  490. ->where('u.USER_ID',$v['TO_USER_ID'])
  491. ->select('u.REAL_NAME,o.NAME as DEP_NAME')
  492. ->get('user u')
  493. ->row_array();
  494. $user[$k]['REAL_NAME'] = $info['REAL_NAME'];
  495. $user[$k]['DEP_NAME'] = $info['DEP_NAME'];
  496. }
  497. // 获取排名前5的人
  498. $user = list_sort_by($user,'SCORE', 'desc');
  499. $lists = [];
  500. foreach ($user as $k=>$v){
  501. if($k >= 5){
  502. continue;
  503. }
  504. $lists[] = $v;
  505. }
  506. $this->success('成功',['count'=>$scores,'list' => $lists]);
  507. }
  508. // 工单统计
  509. public function todo(){
  510. $start = date('Y-m-d').' 00:00:00';
  511. $end = date('Y-m-d').' 23:59:59';
  512. $fininsh = $this->db
  513. ->where('ORG_ID',$this->orgId)
  514. ->where('DEL_REF',0)
  515. ->where('TODO_MODE',3)
  516. ->where('DONE_TIME >=',$start)
  517. ->where('DONE_TIME <=',$end)
  518. ->from('todo')
  519. ->count_all_results();
  520. $unfininsh = $this->db
  521. ->where('ORG_ID',$this->orgId)
  522. ->where('DEL_REF',0)
  523. ->where_in('TODO_MODE',[1,2])
  524. ->where('DONE_TIME >=',$start)
  525. ->where('DONE_TIME <=',$end)
  526. ->from('todo')
  527. ->count_all_results();
  528. $undeal = $this->db
  529. ->where('ORG_ID',$this->orgId)
  530. ->where('DEL_REF',0)
  531. ->where_in('CURR_ORDER_MODE',1)
  532. ->where('CREATTE_TIME >=',$start)
  533. ->where('CREATTE_TIME <=',$end)
  534. ->from('orders')
  535. ->count_all_results();
  536. $total = $this->db
  537. ->where('ORG_ID',$this->orgId)
  538. ->where('DEL_REF',0)
  539. ->where_in('TODO_MODE',[1,2,3,4,5])
  540. ->from('todo')
  541. ->count_all_results();
  542. $today = $this->db
  543. ->where('ORG_ID',$this->orgId)
  544. ->where('DEL_REF',0)
  545. ->where_in('TODO_MODE',[1,2,3,4,5])
  546. ->where('CREATE_TIME >=',$start)
  547. ->where('CREATE_TIME <=',$end)
  548. ->from('todo')
  549. ->count_all_results();
  550. $commentcount = $this->db
  551. ->where('ORG_ID',$this->orgId)
  552. ->from('comment')
  553. ->count_all_results();
  554. $comment = $this->db
  555. ->where('ORG_ID',$this->orgId)
  556. ->select_sum('SCORE')
  557. ->get('comment')
  558. ->row_array();
  559. $data = [
  560. 'total' => $total,
  561. 'today' => $today,
  562. 'finish' => $fininsh,
  563. 'unfinish' => $unfininsh,
  564. 'undeal' => $undeal,
  565. 'comment' => $commentcount&&$comment?round($comment['SCORE']/$commentcount,1):0
  566. ];
  567. $this->success('成功',$data);
  568. }
  569. // 获取今日最新5条中的随机一条
  570. public function patrol(){
  571. $lists = $this->db
  572. ->select('u.REAL_NAME,pa.TITLE,pr.IMAGES,pt.TITLE as CONTENT,pr.CREATE_TIME')
  573. ->join('user u','u.USER_ID = pr.USER_ID')
  574. ->join('patrol_addr pa','pa.PATROL_ADDR_ID = pr.PATROL_ADDR_ID')
  575. ->join('patrol_task pt','pt.PATROL_TASK_ID = pr.PATROL_TASK_ID')
  576. ->where('pr.ORG_ID',$this->orgId)
  577. ->where('pr.CREATE_YYYYMMDD',date('Ymd'))
  578. ->limit(5)
  579. ->order_by('pr.PATROL_RECORD_ID DESC')
  580. ->get('patrol_record pr')
  581. ->result_array();
  582. $info = null;
  583. if($lists){
  584. $info = $lists[array_rand($lists,1)];
  585. }
  586. if($info){
  587. $imgs = $info['IMAGES']?explode(',',$info['IMAGES']):[];
  588. $info['IMAGES'] = $imgs?$imgs[0]:'';
  589. $info['CREATE_TIME'] = date('Y-m-d',strtotime($info['CREATE_TIME']));
  590. $this->success('成功',$info);
  591. }else{
  592. $this->error('失败');
  593. }
  594. }
  595. // 工单指数数据统计
  596. public function todotime(){
  597. $bxcount = $this->db
  598. ->where('ORG_ID',$this->orgId)
  599. ->where('DEL_REF',0)
  600. ->where('TODO_MODE',3)
  601. ->where('WORK_TYPE_MODE',1)
  602. ->from('todo')
  603. ->count_all_results();
  604. $bjcount = $this->db
  605. ->where('ORG_ID',$this->orgId)
  606. ->where('DEL_REF',0)
  607. ->where('TODO_MODE',3)
  608. ->where('WORK_TYPE_MODE',2)
  609. ->from('todo')
  610. ->count_all_results();
  611. $yscount = $this->db
  612. ->where('ORG_ID',$this->orgId)
  613. ->where('DEL_REF',0)
  614. ->where('TODO_MODE',3)
  615. ->where('WORK_TYPE_MODE',3)
  616. ->from('todo')
  617. ->count_all_results();
  618. $yhcount = $this->db
  619. ->where('ORG_ID',$this->orgId)
  620. ->where('DEL_REF',0)
  621. ->where('TODO_MODE',3)
  622. ->where('WORK_TYPE_MODE',4)
  623. ->from('todo')
  624. ->count_all_results();
  625. $bxinfo = $this->db
  626. ->select_sum('XY_TIME')
  627. ->select_sum('WC_TIME')
  628. ->where('ORG_ID',$this->orgId)
  629. ->where('DEL_REF',0)
  630. ->where('TODO_MODE',3)
  631. ->where('WORK_TYPE_MODE',1)
  632. ->get('todo')
  633. ->row_array();
  634. $bxinfo = $bxinfo?$bxinfo:['XY_TIME'=>0,'WC_TIME'=>0];
  635. $bjinfo = $this->db
  636. ->select_sum('XY_TIME')
  637. ->select_sum('WC_TIME')
  638. ->where('ORG_ID',$this->orgId)
  639. ->where('DEL_REF',0)
  640. ->where('TODO_MODE',3)
  641. ->where('WORK_TYPE_MODE',2)
  642. ->get('todo')
  643. ->row_array();
  644. $bjinfo = $bjinfo?$bjinfo:['XY_TIME'=>0,'WC_TIME'=>0];
  645. $ysinfo = $this->db
  646. ->select_sum('XY_TIME')
  647. ->select_sum('WC_TIME')
  648. ->where('ORG_ID',$this->orgId)
  649. ->where('DEL_REF',0)
  650. ->where('TODO_MODE',3)
  651. ->where('WORK_TYPE_MODE',3)
  652. ->get('todo')
  653. ->row_array();
  654. $ysinfo = $ysinfo?$ysinfo:['XY_TIME'=>0,'WC_TIME'=>0];
  655. $yhinfo = $this->db
  656. ->select_sum('XY_TIME')
  657. ->select_sum('WC_TIME')
  658. ->where('ORG_ID',$this->orgId)
  659. ->where('DEL_REF',0)
  660. ->where('TODO_MODE',3)
  661. ->where('WORK_TYPE_MODE',4)
  662. ->get('todo')
  663. ->row_array();
  664. $yhinfo = $yhinfo?$yhinfo:['XY_TIME'=>0,'WC_TIME'=>0];
  665. $bxwc = $bxcount?round($bxinfo['WC_TIME']/$bxcount/60,1):0;
  666. $bxxy = $bxcount?round($bxinfo['XY_TIME']/$bxcount/60,1):0;
  667. $bjwc = $bjcount?round($bjinfo['WC_TIME']/$bjcount/60,1):0;
  668. $bjxy = $bjcount?round($bjinfo['XY_TIME']/$bjcount/60,1):0;
  669. $yswc = $yscount?round($ysinfo['WC_TIME']/$yscount/60,1):0;
  670. $ysxy = $yscount?round($ysinfo['XY_TIME']/$yscount/60,1):0;
  671. $yhwc = $yhcount?round($yhinfo['WC_TIME']/$yhcount/60,1):0;
  672. $yhxy = $yhcount?round($yhinfo['XY_TIME']/$yhcount/60,1):0;
  673. $list = [
  674. ['标题', '平均完成时', '响应时长'],
  675. ['报修', $bxwc, $bxxy],
  676. ['保洁', $bjwc, $bjxy],
  677. ['运送', $yswc, $ysxy],
  678. ['隐患预警', $yhwc, $yhxy],
  679. ];
  680. $data = [
  681. 'bx' => $bxcount,
  682. 'bj' => $bjcount,
  683. 'ys' => $yscount,
  684. 'yh' => $yhcount,
  685. 'list' => $list
  686. ];
  687. $this->success('成功',$data);
  688. }
  689. // 设备维检
  690. public function device(){
  691. $dcount = $this->db
  692. ->where('ORG_ID',$this->orgId)
  693. ->where('DEL_REF',0)
  694. ->where('ENABLE',1)
  695. ->from('device')
  696. ->count_all_results();
  697. $rcount = $this->db
  698. ->where('ORG_ID',$this->orgId)
  699. ->from('device_record')
  700. ->count_all_results();
  701. $cur = date('Y-m');
  702. $curTime = strtotime($cur.'-01');
  703. $month = [];
  704. for ($i=5;$i>0;$i--){
  705. $date = strtotime("-".$i." month",$curTime);
  706. $month[] = date('Y-m',$date);
  707. }
  708. $month[] = $cur;
  709. $list = [];
  710. foreach ($month as $k=>$v){
  711. $list[] = $this->db
  712. ->where('ORG_ID',$this->orgId)
  713. ->where('CREATE_YYYYMM',str_ireplace('-','',$v))
  714. ->from('device_record')
  715. ->count_all_results();
  716. }
  717. $data = [
  718. 'dcount' => $dcount,
  719. 'rcount' => $rcount,
  720. 'list' => $list,
  721. 'month' => $month
  722. ];
  723. $this->success('成功',$data);
  724. }
  725. // 24小时内记录
  726. public function patrolRecord(){
  727. $day = date('Ymd');
  728. $time = strtotime(date('Y-m-d'));
  729. $hours = [];
  730. $plist1 = $plist2 = $plist3 = $plist4 = [];
  731. for ($i=0;$i<24;$i++){
  732. $hours[] = $i;
  733. $stime = date('Y-m-d H:i:s',$time + $i*60*60);
  734. $etime = date('Y-m-d H:i:s',$time + ($i+1)*60*60);
  735. $plist1[] = $this->db
  736. ->where('ORG_ID',$this->orgId)
  737. ->where('PATROL_MODE',1)
  738. ->where('CREATE_TIME >=',$stime)
  739. ->where('CREATE_TIME <',$etime)
  740. ->where('CREATE_YYYYMMDD',$day)
  741. ->from('patrol_record')
  742. ->count_all_results();
  743. $plist2[] = $this->db
  744. ->where('ORG_ID',$this->orgId)
  745. ->where('PATROL_MODE',2)
  746. ->where('CREATE_TIME >=',$stime)
  747. ->where('CREATE_TIME <',$etime)
  748. ->where('CREATE_YYYYMMDD',$day)
  749. ->from('patrol_record')
  750. ->count_all_results();
  751. $plist3[] = $this->db
  752. ->where('ORG_ID',$this->orgId)
  753. ->where('PATROL_MODE',3)
  754. ->where('CREATE_TIME >=',$stime)
  755. ->where('CREATE_TIME <',$etime)
  756. ->where('CREATE_YYYYMMDD',$day)
  757. ->from('patrol_record')
  758. ->count_all_results();
  759. $plist4[] = $this->db
  760. ->where('ORG_ID',$this->orgId)
  761. ->where('PATROL_MODE',4)
  762. ->where('CREATE_TIME >=',$stime)
  763. ->where('CREATE_TIME <',$etime)
  764. ->where('CREATE_YYYYMMDD',$day)
  765. ->from('patrol_record')
  766. ->count_all_results();
  767. }
  768. $data = [
  769. 'hour' => $hours,
  770. 'plist1' => $plist1,
  771. 'plist2' => $plist2,
  772. 'plist3' => $plist3,
  773. 'plist4' => $plist4
  774. ];
  775. $this->success('成功',$data);
  776. }
  777. // 报修工单
  778. public function repair(){
  779. $dlist = [
  780. date('Y-m-d',strtotime('-6 days')),
  781. date('Y-m-d',strtotime('-5 days')),
  782. date('Y-m-d',strtotime('-4 days')),
  783. date('Y-m-d',strtotime('-3 days')),
  784. date('Y-m-d',strtotime('-2 days')),
  785. date('Y-m-d',strtotime('-1 days')),
  786. date('Y-m-d'),
  787. ];
  788. $names = [];
  789. $counts = [];
  790. foreach ($dlist as $v){
  791. $names[] = date('m-d',strtotime($v));
  792. $tt = date('Ymd',strtotime($v));
  793. $count = Db::name('todo')
  794. ->alias('a')
  795. ->join('orders b','a.order_id=b.id')
  796. ->where('a.del',0)
  797. ->where('a.org_id',$this->orgId)
  798. ->where('a.todo_mode',3)
  799. ->where('a.work_type_mode',1)
  800. ->where('a.create_yyyymmdd',$tt)
  801. ->group('a.order_id')
  802. ->count();
  803. $counts[] = $count;
  804. }
  805. HelpHander::success(['names'=>$names,'counts' => $counts],'成功');
  806. }
  807. public function ystypeuser(){
  808. $this->load->model('UserModel');
  809. $lists = $this->UserModel->getYsUser($this->orgId,1);
  810. $lists = $lists?$lists:[];
  811. $curday = date('Ymd');
  812. $users = $this->db
  813. ->where('ORG_ID',$this->orgId)
  814. ->where_in('TODO_MODE',[1,2])
  815. ->where('DEL_REF',0)
  816. ->where('CREATE_YYYYMMDD',$curday)
  817. ->select('TO_USER_ID')
  818. ->group_by('TO_USER_ID')
  819. ->get('todo')
  820. ->result_array();
  821. $users = $users?$users:[];
  822. $userIds = [];
  823. foreach ($users as $k=>$v){
  824. $userIds[] = $v['TO_USER_ID'];
  825. }
  826. $data = [
  827. 'list1' => [],
  828. 'list2' => []
  829. ];
  830. $nlists = [];
  831. foreach ($lists as $k=>$v){
  832. if(!in_array($v['USER_ID'],$userIds)){
  833. $nlists[] = $v;
  834. }
  835. }
  836. $slist = [];
  837. if(count($nlists) > 10){
  838. $keys = array_rand($nlists,10);
  839. foreach ($nlists as $k=>$v){
  840. if(in_array($k,$keys)){
  841. $slist[] = $v;
  842. }
  843. }
  844. }else{
  845. $slist = $nlists;
  846. }
  847. foreach ($slist as $k=>$v){
  848. $count = $this->db
  849. ->where('ORG_ID',$this->orgId)
  850. ->where('TO_USER_ID',$v['USER_ID'])
  851. ->where_in('TODO_MODE',[1,2,3])
  852. ->where('DEL_REF',0)
  853. ->where('CREATE_YYYYMMDD',$curday)
  854. ->from('todo')
  855. ->count_all_results();
  856. $slist[$k]['COUNT'] = $count;
  857. $addr = $this->db
  858. ->join('convey_addr ca','ca.CONVEY_ADDR_ID = cpr.ADDR_ID')
  859. ->select('ca.TITLE,cpr.CREATE_TIME')
  860. ->where('USER_ID',$v['USER_ID'])
  861. ->order_by('cpr.ID desc')
  862. ->get('convey_plan_record cpr')
  863. ->row_array();
  864. $slist[$k]['TITLE'] = $addr?$addr['TITLE']:'';;
  865. }
  866. $nlists2 = [];
  867. foreach ($lists as $k=>$v){
  868. if(in_array($v['USER_ID'],$userIds)){
  869. $nlists2[] = $v;
  870. }
  871. }
  872. $slist2 = [];
  873. if(count($nlists2) > 9){
  874. $keys2 = array_rand($nlists2,9);
  875. foreach ($nlists2 as $k=>$v){
  876. if(in_array($k,$keys2)){
  877. $slist2[] = $v;
  878. }
  879. }
  880. }else{
  881. $slist2 = $nlists2;
  882. }
  883. foreach ($slist2 as $k=>$v){
  884. $count = $this->db
  885. ->where('ORG_ID',$this->orgId)
  886. ->where('TO_USER_ID',$v['USER_ID'])
  887. ->where_in('TODO_MODE',[1,2,3])
  888. ->where('DEL_REF',0)
  889. ->where('CREATE_YYYYMMDD',$curday)
  890. ->from('todo')
  891. ->count_all_results();
  892. $slist2[$k]['COUNT'] = $count;
  893. $addr = $this->db
  894. ->join('convey_addr ca','ca.CONVEY_ADDR_ID = cpr.ADDR_ID')
  895. ->select('ca.TITLE,cpr.CREATE_TIME')
  896. ->where('USER_ID',$v['USER_ID'])
  897. ->order_by('cpr.ID desc')
  898. ->get('convey_plan_record cpr')
  899. ->row_array();
  900. $slist2[$k]['TITLE'] = $addr?$addr['TITLE']:'';
  901. }
  902. $data['list1'] = $slist; // 待命人员
  903. $data['list2'] = $slist2; // 行动人员
  904. $this->success('成功',$data);
  905. }
  906. }