Bill.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace app\admin\controller\money;
  3. use app\admin\model\exams\ExamsModel;
  4. use app\common\controller\Backend;
  5. use think\Exception;
  6. /**
  7. *
  8. *
  9. * @icon fa fa-circle-o
  10. */
  11. class Bill extends Backend
  12. {
  13. /**
  14. * Bill模型对象
  15. * @var \app\admin\model\money\Bill
  16. */
  17. protected $model = null;
  18. protected $water = null;
  19. protected $noNeedRight = ['exportexam'];
  20. public function _initialize()
  21. {
  22. parent::_initialize();
  23. $this->model = new \app\admin\model\money\Bill;
  24. $this->water = new \app\admin\model\money\Money;
  25. }
  26. public function completedList()
  27. {
  28. //设置过滤方法
  29. $this->request->filter(['strip_tags']);
  30. if ($this->request->isAjax()) {
  31. $result = array (
  32. "total" => 0 ,
  33. "rows" => []
  34. );
  35. return json($result);
  36. }
  37. return $this->view->fetch();
  38. }
  39. public function exportExam($id)
  40. {
  41. // try {
  42. $order = $this->model->get($id);
  43. $exam_ids = $this->water
  44. ->whereIn('id', explode(',', $order['water_ids']))
  45. ->column('exam_id');
  46. $exam_data = ExamsModel::whereIn('id', $exam_ids)
  47. ->field('name,patient_num,accession_num,hopitalized_no,exam_class,exam_project,exam_datetime,application_department,application_doctor')
  48. ->select();
  49. if(!$exam_data){
  50. $this->error('无检查数据');
  51. }
  52. foreach ($exam_data as &$val){
  53. $val['name'] = mb_substr($val['name'],0,1) . '**';
  54. }
  55. unset($val);
  56. // 文件名和文件类型
  57. $fileName = $order['order_num'];
  58. $fileType = "xlsx";
  59. // 模拟获取数据
  60. import('phpexcel.PHPExcel', EXTEND_PATH);
  61. $obj = new \PHPExcel();
  62. // 以下内容是excel文件的信息描述信息
  63. $obj->getProperties()->setCreator(''); //设置创建者
  64. $obj->getProperties()->setLastModifiedBy(''); //设置修改者
  65. $obj->getProperties()->setTitle(''); //设置标题
  66. $obj->getProperties()->setSubject(''); //设置主题
  67. $obj->getProperties()->setDescription(''); //设置描述
  68. $obj->getProperties()->setKeywords('');//设置关键词
  69. $obj->getProperties()->setCategory('');//设置类型
  70. // 设置当前sheet
  71. $obj->setActiveSheetIndex(0);
  72. // 设置当前sheet的名称
  73. $obj->getActiveSheet()->setTitle('student');
  74. // 列标
  75. $list = ['A', 'B', 'C', 'D', 'E', 'F', 'G' , 'H', 'I'];
  76. // 填充第一行数据
  77. $obj->getActiveSheet()
  78. ->setCellValue($list[0] . '1', '姓名')
  79. ->setCellValue($list[1] . '1', '病历号')
  80. ->setCellValue($list[2] . '1', '检查号')
  81. ->setCellValue($list[3] . '1', '住院号')
  82. ->setCellValue($list[4] . '1', '检查类别')
  83. ->setCellValue($list[5] . '1', '检查项目')
  84. ->setCellValue($list[6] . '1', '检查时间')
  85. ->setCellValue($list[7] . '1', '申请科室')
  86. ->setCellValue($list[8] . '1', '申请医生');
  87. // 填充第n(n>=2, n∈N*)行数据
  88. $length = count($exam_data);
  89. for ($i = 0; $i < $length; $i++) {
  90. $obj->getActiveSheet()->setCellValue($list[0] . ($i + 2), $exam_data[$i]['name'], \PHPExcel_Cell_DataType::TYPE_STRING);//将其设置为文本格式
  91. $obj->getActiveSheet()->setCellValue($list[1] . ($i + 2), $exam_data[$i]['patient_num']);
  92. $obj->getActiveSheet()->setCellValue($list[2] . ($i + 2), $exam_data[$i]['accession_num']);
  93. $obj->getActiveSheet()->setCellValue($list[3] . ($i + 2), $exam_data[$i]['hopitalized_no']);
  94. $obj->getActiveSheet()->setCellValue($list[4] . ($i + 2), $exam_data[$i]['exam_class']);
  95. $obj->getActiveSheet()->setCellValue($list[5] . ($i + 2), $exam_data[$i]['exam_project']);
  96. $obj->getActiveSheet()->setCellValue($list[6] . ($i + 2), $exam_data[$i]['exam_datetime']);
  97. $obj->getActiveSheet()->setCellValue($list[7] . ($i + 2), $exam_data[$i]['application_department']);
  98. $obj->getActiveSheet()->setCellValue($list[8] . ($i + 2), $exam_data[$i]['application_doctor']);
  99. }
  100. // 设置加粗和左对齐
  101. foreach ($list as $col) {
  102. // 设置第一行加粗
  103. $obj->getActiveSheet()->getStyle($col . '1')->getFont()->setBold(true);
  104. // 设置第1-n行,左对齐
  105. for ($i = 1; $i <= $length + 1; $i++) {
  106. $obj->getActiveSheet()->getStyle($col . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
  107. }
  108. }
  109. // 设置列宽
  110. $obj->getActiveSheet()->getColumnDimension('A')->setWidth(20);
  111. $obj->getActiveSheet()->getColumnDimension('B')->setWidth(20);
  112. $obj->getActiveSheet()->getColumnDimension('C')->setWidth(15);
  113. // 导出
  114. // ob_clean();
  115. if ($fileType == 'xls') {
  116. header('Content-Type: application/vnd.ms-excel');
  117. header('Content-Disposition: attachment;filename="' . $fileName . '.xls');
  118. header('Cache-Control: max-age=1');
  119. $objWriter = new \PHPExcel_Writer_Excel5($obj);
  120. $objWriter->save('php://output');
  121. exit;
  122. } elseif ($fileType == 'xlsx') {
  123. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  124. header('Content-Disposition: attachment;filename="' . $fileName . '.xlsx');
  125. header('Cache-Control: max-age=1');
  126. $objWriter = \PHPExcel_IOFactory::createWriter($obj, 'Excel2007');
  127. $objWriter->save('php://output');
  128. exit;
  129. }
  130. // } catch ( Exception $exception){
  131. // $this->error($exception->getMessage());
  132. // }
  133. }
  134. }