Statistics.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  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')
  55. ->where('report_doctor_id',$v['id'])
  56. ->where('remote_application_id','not null')
  57. ->where('review_doctor_id','not null')
  58. ->where($search)
  59. ->count();
  60. $review = DB::table('report')
  61. ->where('review_doctor_id',$v['id'])
  62. ->where('remote_application_id','not null')
  63. ->where($search)
  64. ->count();
  65. $list[$k]['name'] = $v['realname'];
  66. $list[$k]['report'] = $report;
  67. $list[$k]['review'] = $review;
  68. $report_num = $report_num + $report;
  69. $review_num = $review_num + $review;
  70. }
  71. $num = count($doctor);
  72. $list[$num]['name'] = '统计';
  73. $list[$num]['report'] = $report_num;
  74. $list[$num]['review'] = $review_num;
  75. echo json_encode($list);
  76. }
  77. public function infos()
  78. {
  79. $admin = Session::get('session_manager');
  80. $institution_id = $admin['institution_id'];
  81. $request = Request::instance();
  82. $params = $request->param();
  83. $where = array();
  84. foreach ($params as $k=>$v) {
  85. switch($k){
  86. case 'upload1':
  87. if($params['upload1'] == null){
  88. continue;
  89. }
  90. $where[] = ' report_datetime > \''.$params['upload1'].' 00:00:00\' ';
  91. break;
  92. case 'upload2':
  93. if($params['upload2'] == null){
  94. continue;
  95. }
  96. $where[] = ' report_datetime < \''.$params['upload2'].' 23:59:59\' ';
  97. break;
  98. }
  99. }
  100. if(count($where) <= 1){
  101. $where1 = implode('',$where);
  102. $search = $where1;
  103. }else{
  104. $where1 = implode(' and ',$where);
  105. $search = $where1;
  106. }
  107. if($search == ''){
  108. $time1 = date('Y-m-d 00:00:00',time());
  109. $time2 = date('Y-m-d 23:59:59',time());
  110. $search = 'r.report_datetime >\''.$time1.'\' and r.report_datetime < \''.$time2.'\'';
  111. }
  112. $list = DB::table('remote_application')
  113. ->alias('ra')
  114. ->join(['report'=>'r'],'ra.id=r.remote_application_id')
  115. ->join(['exams'=>'e'],'ra.exam_id=e.id')
  116. ->join(["(select id,realname from doctors )"=>'reportd'],'reportd.id=r.report_doctor_id','left')
  117. ->join(["(select id,realname from doctors )"=>'reviewd'],'reviewd.id=r.review_doctor_id','left')
  118. ->join(["(select id,name from institution )"=>'ins'],'ins.id=ra.local_institution_id','left')
  119. ->join(["(select id,realname from doctors )"=>'req'],'req.id=ra.req_doctor_id','left')
  120. ->where('ra.remote_institution_id='.$institution_id)
  121. ->where('ra.report_status>7')
  122. ->where($search)
  123. ->field('ins.name as insname,req.realname as reqname,e.patient_num,e.exam_class,ra.req_date_time,r.report_datetime,reportd.realname as rpname,reviewd.realname as rvname,r.review_datetime')
  124. ->select();
  125. echo json_encode($list);
  126. }
  127. public function out() {
  128. $admin = Session::get('session_manager');
  129. $institution_id = $admin['institution_id'];
  130. $doctor = DB::table('doctors')->where('institution_id',$institution_id)->field('realname,id')->select();
  131. $request = Request::instance();
  132. $params = $request->param();
  133. $where = array();
  134. $begin = '';
  135. $finish = '';
  136. foreach ($params as $k=>$v) {
  137. switch($k){
  138. case 'upload1':
  139. if($params['upload1'] == null){
  140. continue;
  141. }
  142. $where[] = ' report_datetime > \''.$params['upload1'].' 00:00:00\' ';
  143. $begin = $params['upload1'];
  144. break;
  145. case 'upload2':
  146. if($params['upload2'] == null){
  147. continue;
  148. }
  149. $where[] = ' report_datetime < \''.$params['upload2'].' 23:59:59\' ';
  150. $finish = $params['upload2'];
  151. break;
  152. }
  153. }
  154. if(count($where) <= 1){
  155. $where1 = implode('',$where);
  156. $search = $where1;
  157. }else{
  158. $where1 = implode(' and ',$where);
  159. $search = $where1;
  160. }
  161. if($search == ''){
  162. $time1 = date('Y-m-d 00:00:00',time());
  163. $time2 = date('Y-m-d 23:59:59',time());
  164. $search = 'report_datetime >\''.$time1.'\' and report_datetime < \''.$time2.'\'';
  165. $begin = date('Y-m-d',time());
  166. $finish = date('Y-m-d',time());
  167. }
  168. $report_num = 0;
  169. $review_num = 0;
  170. $list = [];
  171. foreach($doctor as $k=>$v){
  172. $report = DB::table('report')->where('report_doctor_id',$v['id'])->where($search)->count();
  173. $review = DB::table('report')->where('review_doctor_id',$v['id'])->where($search)->count();
  174. $list[$k]['name'] = $v['realname'];
  175. $list[$k]['report'] = $report;
  176. $list[$k]['review'] = $review;
  177. $report_num = $report_num + $report;
  178. $review_num = $review_num + $review;
  179. }
  180. $num = count($doctor);
  181. $list[$num]['name'] = '统计';
  182. $list[$num]['report'] = $report_num;
  183. $list[$num]['review'] = $review_num;
  184. if($begin == $finish){
  185. $filename = $begin."数据统计表";
  186. }else{
  187. $filename = $begin.'至'.$finish."数据统计表";
  188. }
  189. $headArr = array("医生姓名","已书写报告数量", "已审核报告数量");
  190. $this->getExcel($filename, $headArr, $list);
  191. }
  192. public function outs() {$admin = Session::get('session_manager');
  193. $institution_id = $admin['institution_id'];
  194. $request = Request::instance();
  195. $params = $request->param();
  196. $where = array();
  197. $begin = '';
  198. $finish = '';
  199. foreach ($params as $k=>$v) {
  200. switch($k){
  201. case 'upload1':
  202. if($params['upload1'] == null){
  203. continue;
  204. }
  205. $where[] = ' report_datetime > \''.$params['upload1'].' 00:00:00\' ';
  206. $begin = $params['upload1'];
  207. break;
  208. case 'upload2':
  209. if($params['upload2'] == null){
  210. continue;
  211. }
  212. $where[] = ' report_datetime < \''.$params['upload2'].' 23:59:59\' ';
  213. $finish = $params['upload2'];
  214. break;
  215. }
  216. }
  217. if(count($where) <= 1){
  218. $where1 = implode('',$where);
  219. $search = $where1;
  220. }else{
  221. $where1 = implode(' and ',$where);
  222. $search = $where1;
  223. }
  224. if($search == ''){
  225. $time1 = date('Y-m-d 00:00:00',time());
  226. $time2 = date('Y-m-d 23:59:59',time());
  227. $search = 'r.report_datetime >\''.$time1.'\' and r.report_datetime < \''.$time2.'\'';
  228. }
  229. $list = DB::table('remote_application')
  230. ->alias('ra')
  231. ->join(['report'=>'r'],'ra.id=r.remote_application_id')
  232. ->join(['exams'=>'e'],'ra.exam_id=e.id')
  233. ->join(["(select id,realname from doctors )"=>'reportd'],'reportd.id=r.report_doctor_id','left')
  234. ->join(["(select id,realname from doctors )"=>'reviewd'],'reviewd.id=r.review_doctor_id','left')
  235. ->join(["(select id,name from institution )"=>'ins'],'ins.id=ra.local_institution_id','left')
  236. ->join(["(select id,realname from doctors )"=>'req'],'req.id=ra.req_doctor_id','left')
  237. ->where('ra.remote_institution_id='.$institution_id)
  238. ->where('ra.report_status>7')
  239. ->where($search)
  240. ->field('ins.name as insname,req.realname as reqname,e.patient_num,e.exam_class,ra.req_date_time,r.report_datetime,reportd.realname as rpname,reviewd.realname as rvname,r.review_datetime')
  241. ->select();
  242. if($begin == $finish){
  243. $filename = $begin."数据详情表";
  244. }else{
  245. $filename = $begin.'至'.$finish."数据详情表";
  246. }
  247. $headArr = array("申请医院","申请医生","病历号","检查类型","申请时间", "报告时间","报告医生","审核医生","审核时间");
  248. $this->getExcels($filename, $headArr, $list);
  249. }
  250. public function getExcels($fileName, $headArr, $data) {
  251. //对数据进行检验
  252. if (empty($data) || !is_array($data)) {
  253. die("data must be a array");
  254. }
  255. //检查文件名
  256. if (empty($fileName)) {
  257. exit;
  258. }
  259. $date = date("Y_m_d", time());
  260. $fileName .= ".xls";
  261. //创建PHPExcel对象,注意,不能少了\
  262. $objPHPExcel = new \PHPExcel();
  263. $objProps = $objPHPExcel->getProperties();
  264. $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  265. $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  266. $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  267. $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);
  268. $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  269. $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(25);
  270. $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(25);
  271. $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(25);
  272. $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(25);
  273. //设置表头
  274. $key = ord("A");
  275. foreach ($headArr as $v) {
  276. $colum = chr($key);
  277. $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
  278. $key += 1;
  279. }
  280. $column = 2;
  281. $objActSheet = $objPHPExcel->getActiveSheet();
  282. foreach ($data as $key => $rows) { //行写入
  283. $span = ord("A");
  284. foreach ($rows as $keyName => $value) {// 列写入
  285. $j = chr($span);
  286. $objActSheet->setCellValue($j . $column, $value);
  287. $span++;
  288. }
  289. $column++;
  290. }
  291. $fileName = iconv("utf-8", "gb2312", $fileName);
  292. //重命名表
  293. // $objPHPExcel->getActiveSheet()->setTitle('test');
  294. //设置活动单指数到第一个表,所以Excel打开这是第一个表
  295. $objPHPExcel->setActiveSheetIndex(0);
  296. header('Content-Type: application/vnd.ms-excel');
  297. header("Content-Disposition: attachment;filename=\"$fileName\"");
  298. header('Cache-Control: max-age=0');
  299. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  300. $objWriter->save('php://output'); //文件通过浏览器下载
  301. exit;
  302. }
  303. public function getExcel($fileName, $headArr, $data) {
  304. //对数据进行检验
  305. if (empty($data) || !is_array($data)) {
  306. die("data must be a array");
  307. }
  308. //检查文件名
  309. if (empty($fileName)) {
  310. exit;
  311. }
  312. $date = date("Y_m_d", time());
  313. $fileName .= ".xls";
  314. //创建PHPExcel对象,注意,不能少了\
  315. $objPHPExcel = new \PHPExcel();
  316. $objProps = $objPHPExcel->getProperties();
  317. $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  318. $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(25);
  319. $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);
  320. //设置表头
  321. $key = ord("A");
  322. foreach ($headArr as $v) {
  323. $colum = chr($key);
  324. $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
  325. $key += 1;
  326. }
  327. $column = 2;
  328. $objActSheet = $objPHPExcel->getActiveSheet();
  329. foreach ($data as $key => $rows) { //行写入
  330. $span = ord("A");
  331. foreach ($rows as $keyName => $value) {// 列写入
  332. $j = chr($span);
  333. $objActSheet->setCellValue($j . $column, $value);
  334. $span++;
  335. }
  336. $column++;
  337. }
  338. $fileName = iconv("utf-8", "gb2312", $fileName);
  339. //重命名表
  340. // $objPHPExcel->getActiveSheet()->setTitle('test');
  341. //设置活动单指数到第一个表,所以Excel打开这是第一个表
  342. $objPHPExcel->setActiveSheetIndex(0);
  343. header('Content-Type: application/vnd.ms-excel');
  344. header("Content-Disposition: attachment;filename=\"$fileName\"");
  345. header('Cache-Control: max-age=0');
  346. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  347. $objWriter->save('php://output'); //文件通过浏览器下载
  348. exit;
  349. }
  350. public function list() {
  351. return $this->fetch('list');
  352. }
  353. }