Statistics.php 15 KB

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