Statistics.php 14 KB

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