Statistics.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. namespace app\manage\controller;
  3. use think\Controller;
  4. use think\Db;
  5. use think\Session;
  6. use think\Config;
  7. use think\Cookie;
  8. use think\Request;
  9. use app\common\library\SysLogs;
  10. use app\common\library\UUIDs;
  11. class Statistics extends Base {
  12. public function index() {
  13. return $this->fetch('index');
  14. }
  15. public function datas(){
  16. $admin = Session::get('session_manager');
  17. $institution_id = $admin['institution_id'];
  18. $doctor = DB::table('doctors')->where('institution_id',$institution_id)->field('realname,id')->select();
  19. $request = Request::instance();
  20. $params = $request->param();
  21. $where = array();
  22. foreach ($params as $k=>$v) {
  23. switch($k){
  24. case 'upload1':
  25. if($params['upload1'] == null){
  26. continue;
  27. }
  28. $where[] = ' report_datetime > \''.$params['upload1'].' 00:00:00\' ';
  29. break;
  30. case 'upload2':
  31. if($params['upload2'] == null){
  32. continue;
  33. }
  34. $where[] = ' report_datetime < \''.$params['upload2'].' 23:59:59\' ';
  35. break;
  36. }
  37. }
  38. if(count($where) <= 1){
  39. $where1 = implode('',$where);
  40. $search = $where1;
  41. }else{
  42. $where1 = implode(' and ',$where);
  43. $search = $where1;
  44. }
  45. if($search == ''){
  46. $time1 = date('Y-m-d 00:00:00',time());
  47. $time2 = date('Y-m-d 23:59:59',time());
  48. $search = 'report_datetime >\''.$time1.'\' and report_datetime < \''.$time2.'\'';
  49. }
  50. $report_num = 0;
  51. $review_num = 0;
  52. $list = [];
  53. foreach($doctor as $k=>$v){
  54. $report = DB::table('report')->where('report_doctor_id',$v['id'])->where($search)->count();
  55. $review = DB::table('report')->where('review_doctor_id',$v['id'])->where($search)->count();
  56. $list[$k]['name'] = $v['realname'];
  57. $list[$k]['report'] = $report;
  58. $list[$k]['review'] = $review;
  59. $report_num = $report_num + $report;
  60. $review_num = $review_num + $review;
  61. }
  62. $num = count($doctor);
  63. $list[$num]['name'] = '统计';
  64. $list[$num]['report'] = $report_num;
  65. $list[$num]['review'] = $review_num;
  66. echo json_encode($list);
  67. }
  68. public function out() {
  69. $admin = Session::get('session_manager');
  70. $institution_id = $admin['institution_id'];
  71. $doctor = DB::table('doctors')->where('institution_id',$institution_id)->field('realname,id')->select();
  72. $request = Request::instance();
  73. $params = $request->param();
  74. $where = array();
  75. $begin = '';
  76. $finish = '';
  77. foreach ($params as $k=>$v) {
  78. switch($k){
  79. case 'upload1':
  80. if($params['upload1'] == null){
  81. continue;
  82. }
  83. $where[] = ' report_datetime > \''.$params['upload1'].' 00:00:00\' ';
  84. $begin = $params['upload1'];
  85. break;
  86. case 'upload2':
  87. if($params['upload2'] == null){
  88. continue;
  89. }
  90. $where[] = ' report_datetime < \''.$params['upload2'].' 23:59:59\' ';
  91. $finish = $params['upload2'];
  92. break;
  93. }
  94. }
  95. if(count($where) <= 1){
  96. $where1 = implode('',$where);
  97. $search = $where1;
  98. }else{
  99. $where1 = implode(' and ',$where);
  100. $search = $where1;
  101. }
  102. if($search == ''){
  103. $time1 = date('Y-m-d 00:00:00',time());
  104. $time2 = date('Y-m-d 23:59:59',time());
  105. $search = 'report_datetime >\''.$time1.'\' and report_datetime < \''.$time2.'\'';
  106. $begin = date('Y-m-d',time());
  107. $finish = date('Y-m-d',time());
  108. }
  109. $report_num = 0;
  110. $review_num = 0;
  111. $list = [];
  112. foreach($doctor as $k=>$v){
  113. $report = DB::table('report')->where('report_doctor_id',$v['id'])->where($search)->count();
  114. $review = DB::table('report')->where('review_doctor_id',$v['id'])->where($search)->count();
  115. $list[$k]['name'] = $v['realname'];
  116. $list[$k]['report'] = $report;
  117. $list[$k]['review'] = $review;
  118. $report_num = $report_num + $report;
  119. $review_num = $review_num + $review;
  120. }
  121. $num = count($doctor);
  122. $list[$num]['name'] = '统计';
  123. $list[$num]['report'] = $report_num;
  124. $list[$num]['review'] = $review_num;
  125. if($begin == $finish){
  126. $filename = $begin."数据统计表";
  127. }else{
  128. $filename = $begin.'至'.$finish."数据统计表";
  129. }
  130. $headArr = array("医生姓名","已书写报告数量", "已审核报告数量");
  131. $this->getExcel($filename, $headArr, $list);
  132. }
  133. public function getExcel($fileName, $headArr, $data) {
  134. //对数据进行检验
  135. if (empty($data) || !is_array($data)) {
  136. die("data must be a array");
  137. }
  138. //检查文件名
  139. if (empty($fileName)) {
  140. exit;
  141. }
  142. $date = date("Y_m_d", time());
  143. $fileName .= ".xls";
  144. //创建PHPExcel对象,注意,不能少了\
  145. $objPHPExcel = new \PHPExcel();
  146. $objProps = $objPHPExcel->getProperties();
  147. $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  148. $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  149. $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  150. //设置表头
  151. $key = ord("A");
  152. foreach ($headArr as $v) {
  153. $colum = chr($key);
  154. $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
  155. $key += 1;
  156. }
  157. $column = 2;
  158. $objActSheet = $objPHPExcel->getActiveSheet();
  159. foreach ($data as $key => $rows) { //行写入
  160. $span = ord("A");
  161. foreach ($rows as $keyName => $value) {// 列写入
  162. $j = chr($span);
  163. $objActSheet->setCellValue($j . $column, $value);
  164. $span++;
  165. }
  166. $column++;
  167. }
  168. $fileName = iconv("utf-8", "gb2312", $fileName);
  169. //重命名表
  170. // $objPHPExcel->getActiveSheet()->setTitle('test');
  171. //设置活动单指数到第一个表,所以Excel打开这是第一个表
  172. $objPHPExcel->setActiveSheetIndex(0);
  173. header('Content-Type: application/vnd.ms-excel');
  174. header("Content-Disposition: attachment;filename=\"$fileName\"");
  175. header('Cache-Control: max-age=0');
  176. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  177. $objWriter->save('php://output'); //文件通过浏览器下载
  178. exit;
  179. }
  180. }