Counts.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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. /**
  12. *
  13. */
  14. class Counts extends Base {
  15. public function index(){
  16. return $this->fetch();
  17. }
  18. public function datas(){
  19. $admin = Session::get('session_manager');
  20. $institution_id = $admin['institution_id'];
  21. $request = Request::instance();
  22. $params = $request->param();
  23. $where = [];
  24. $where[] = ' e.film_type=2';
  25. foreach ($params as $k=>$v) {
  26. switch($k){
  27. case 'upload1':
  28. if($params['upload1'] == null){
  29. continue 2;
  30. }
  31. $where[] = ' s.createdAt > \''.$params['upload1'].'\' ';
  32. break;
  33. case 'upload2':
  34. if($params['upload2'] == null){
  35. continue 2;
  36. }
  37. $where[] = ' s.createdAt < \''.$params['upload2'].'\' ';
  38. break;
  39. case 'exam1':
  40. if($params['exam1'] == null){
  41. continue 2;
  42. }
  43. $exam1 = str_replace('-', '', $params['exam1']);
  44. $where[] = ' s.studydate > \''.$exam1.'\' ';
  45. break;
  46. case 'exam2':
  47. if($params['exam2'] == null){
  48. continue 2;
  49. }
  50. $exam2 = str_replace('-', '', $params['exam2']);
  51. $where[] = ' s.studydate < \''.$exam2.'\' ';
  52. break;
  53. case 'exam_class':
  54. if($params['exam_class'] == null){
  55. continue 2;
  56. }
  57. $where[] = 's.modality=\''.$params['exam_class'].'\' ';
  58. break;
  59. }
  60. }
  61. if(count($where) <= 1){
  62. $where1 = implode('',$where);
  63. $search = $where1;
  64. }else{
  65. $where1 = implode(' and ',$where);
  66. $search = $where1;
  67. }
  68. $page = empty($_GET["page"]) ? 1 : $_GET["page"];
  69. $pagesize = empty($_GET["rows"]) ? 1 : $_GET["rows"];
  70. if (empty($page) || $page < 1) {
  71. $page = 1;
  72. }
  73. if (empty($pagesize) || $pagesize < 1) {
  74. $pagesize = 30;
  75. }
  76. $count = DB::table('studies')
  77. ->alias('s')
  78. ->distinct(true)
  79. ->join(['patient_infos'=>'p'],'p.id=s.patient_id')
  80. ->join(['exams'=>'e'],'e.patient_id=p.id')
  81. ->join(['user_bind'=>'u'],'u.patient_id=s.patient_id','left')
  82. ->where('s.institution_id='.$institution_id)
  83. ->where($search)
  84. ->count();
  85. $list = DB::table('studies')
  86. ->alias('s')
  87. ->distinct(true)
  88. ->join(['patient_infos'=>'p'],'p.id=s.patient_id')
  89. ->join(['exams'=>'e'],'e.patient_id=p.id')
  90. ->join(['user_bind'=>'u'],'u.patient_id=s.patient_id','left')
  91. ->where('s.institution_id='.$institution_id)
  92. ->where($search)
  93. ->page($page, $pagesize)
  94. ->field('p.name,p.age,p.sex,s.studydate,s.createdAt,s.modality,u.exam_id')
  95. ->order('s.createdAt desc')
  96. ->select();
  97. $data["total"] = $count;
  98. $data["rows"] = $list;
  99. echo json_encode($data);
  100. }
  101. public function out() {
  102. $admin = Session::get('session_manager');
  103. $institution_id = $admin['institution_id'];
  104. $request = Request::instance();
  105. $params = $request->param();
  106. $where[] = ' e.film_type=2';
  107. foreach ($params as $k=>$v) {
  108. if(empty($v)){
  109. continue ;
  110. }
  111. switch($k){
  112. case 'upload_datetime1':
  113. $where[] = ' s.createdAt > \''.$params['upload_datetime1'].'\' ';
  114. break;
  115. case 'upload_datetime2':
  116. $where[] = ' s.createdAt < \''.$params['upload_datetime2'].'\' ';
  117. break;
  118. case 'exam_datetime1':
  119. $exam1 = str_replace('-', '', $params['exam_datetime1']);
  120. $where[] = ' s.studydate > \''.$exam1.'\' ';
  121. break;
  122. case 'exam_datetime2':
  123. $exam2 = str_replace('-', '', $params['exam_datetime2']);
  124. $where[] = ' s.studydate < \''.$exam2.'\' ';
  125. break;
  126. case 'exam_class':
  127. $where[] = 's.modality=\''.$params['exam_class'].'\' ';
  128. break;
  129. }
  130. }
  131. if(count($where) <= 1){
  132. $where1 = implode('',$where);
  133. $search = $where1;
  134. }else{
  135. $where1 = implode(' and ',$where);
  136. $search = $where1;
  137. }
  138. $data = DB::table('studies')
  139. ->alias('s')
  140. ->distinct(true)
  141. ->join(['patient_infos'=>'p'],'p.id=s.patient_id')
  142. ->join(['exams'=>'e'],'e.patient_id=p.id')
  143. ->join(['user_bind'=>'u'],'u.patient_id=s.patient_id','left')
  144. ->where('s.institution_id='.$institution_id)
  145. ->where($search)
  146. ->field('p.name,p.age,p.sex,s.studydate,s.createdAt,s.modality,u.exam_id')
  147. ->order('s.createdAt desc')
  148. ->select();
  149. //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
  150. /*import("Org.Util.PHPExcel");
  151. import("Org.Util.PHPExcel.Writer.Excel5");
  152. import("Org.Util.PHPExcel.IOFactory.php");*/
  153. foreach($data as $k=>$v){
  154. if($v['sex'] == 'F'){
  155. $data[$k]['sex'] = '女';
  156. }elseif($v['sex'] == 'M'){
  157. $data[$k]['sex'] = '男';
  158. }elseif($v['sex'] == '男'){
  159. $data[$k]['sex'] = '男';
  160. }elseif($v['sex'] == '女'){
  161. $data[$k]['sex'] = '女';
  162. }else{
  163. $data[$k]['sex'] = '未知';
  164. }
  165. if($v['exam_id'] == null){
  166. $data[$k]['exam_id'] = '未绑定';
  167. }else{
  168. $data[$k]['exam_id'] = '已绑定';
  169. }
  170. }
  171. $filename = time()."数据统计表";
  172. $headArr = array("患者姓名","患者年龄", "患者性别","检查时间", "上传时间", "患者类型", "是否绑定微信");
  173. $this->getExcel($filename, $headArr, $data);
  174. }
  175. public function getExcel($fileName, $headArr, $data) {
  176. //对数据进行检验
  177. if (empty($data) || !is_array($data)) {
  178. die("data must be a array");
  179. }
  180. //检查文件名
  181. if (empty($fileName)) {
  182. exit;
  183. }
  184. $date = date("Y_m_d", time());
  185. $fileName .= "_{$date}.xls";
  186. //创建PHPExcel对象,注意,不能少了\
  187. $objPHPExcel = new \PHPExcel();
  188. $objProps = $objPHPExcel->getProperties();
  189. $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  190. $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
  191. $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
  192. $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
  193. $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(25);
  194. $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);
  195. $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
  196. //设置表头
  197. $key = ord("A");
  198. foreach ($headArr as $v) {
  199. $colum = chr($key);
  200. $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
  201. $key += 1;
  202. }
  203. $column = 2;
  204. $objActSheet = $objPHPExcel->getActiveSheet();
  205. foreach ($data as $key => $rows) { //行写入
  206. $span = ord("A");
  207. foreach ($rows as $keyName => $value) {// 列写入
  208. $j = chr($span);
  209. $objActSheet->setCellValue($j . $column, $value);
  210. $span++;
  211. }
  212. $column++;
  213. }
  214. $fileName = iconv("utf-8", "gb2312", $fileName);
  215. //重命名表
  216. // $objPHPExcel->getActiveSheet()->setTitle('test');
  217. //设置活动单指数到第一个表,所以Excel打开这是第一个表
  218. $objPHPExcel->setActiveSheetIndex(0);
  219. header('Content-Type: application/vnd.ms-excel');
  220. header("Content-Disposition: attachment;filename=\"$fileName\"");
  221. header('Cache-Control: max-age=0');
  222. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  223. $objWriter->save('php://output'); //文件通过浏览器下载
  224. exit;
  225. }
  226. }