1 , 'PROCESSING' => 2 , 'COMPLETED' => 3 ]; public function _initialize() { parent::_initialize(); $this->model = new \app\admin\model\money\Money; $this->bill = new \app\admin\model\money\Bill(); } /** * 查看 */ public function index() { //设置过滤方法 $this->request->filter(['strip_tags']); if ($this->request->isAjax()) { //如果发送的来源是Selectpage,则转发到Selectpage if ($this->request->request('keyField')) { return $this->selectpage(); } list($where , $sort , $order , $offset , $limit) = $this->buildparams(); $more_where = [ 'order_status' => 1, 'type' => 2 ]; $total = $this->model ->where($where) ->where($more_where) ->order($sort , $order) ->count(); $list = $this->model ->where($where) ->where($more_where) ->order($sort , $order) ->limit($offset , $limit) ->select(); $list = collection($list)->toArray(); $result = array ( "total" => $total , "rows" => $list ); return json($result); } return $this->view->fetch(); } /** * 生成账单 * @param $disable $ids * @throws DbException * @throws Exception */ public function makePaymentOrder($disable = false) { $params = $this->request->param(); $ids = $params['ids']; $moneys = $this->model->whereIn('id' , $ids)->select(); $ins_id = array_unique(array_column($moneys , 'institution_id')); if (count($ins_id) != 1) { $this->error('选择错误'); } $ins_data = Institution::where('id' , $ins_id[0])->find(); if ($this->request->isPost()) { $admin = Session::get('admin'); // 提交缴费单 $order_num = $this->makeOrderNum(); Db::startTrans(); try { $this->bill->insert([ 'order_num' => $order_num , 'institution_id' => $ins_data['id'] , 'institution_name' => $ins_data['name'] , 'water_ids' => implode(',' , $ids) , 'create_user_id' => $admin['id'] , 'create_user_name' => $admin['nickname'], 'remark' => $params['remark'] ]); $res = $this->model ->whereIn('id', $ids) ->update(['order_status' => $this->order_status['PROCESSING']]); if(!$res){ Db::rollback(); $this->error('修改流水状态失败'); } Db::commit(); $this->success('成功!单号为:'. $order_num); } catch (Exception $e){ Db::rollback(); $this->error($e->getMessage()); } } // 预览缴费单 $data = [ '1' => [ 'ZS' => 0 , 'TK' => 0 , 'HZZF' => 0 , 'YYTG' => 0 , 'YYDS' => 0 , ] , '2' => [ 'ZS' => 0 , 'TK' => 0 , 'HZZF' => 0 , 'YYTG' => 0 , 'YYDS' => 0 , ] ]; $total = 0; foreach ($moneys as $val) { $data[$val['type']]['ZS']++; $money = $val['money'] / 100; if ($val['pay_type'] == '1') { $total += $money; switch ($val['order_type']) { case '1': $data[$val['type']]['HZZF'] += $money; break; case '2': $data[$val['type']]['YYTG'] += $money; break; case '3': $data[$val['type']]['YYDS'] += $money; break; } } else { $data[$val['type']]['TK'] += $money; } } $this->view->disable = $disable; $this->view->result = $data; $this->view->total = $total; $this->view->institution = $ins_data; $html = $this->view->fetch(); $this->success('ok' , '' , $html); } public function downOrder($id) { $params = $this->request->param(); $ids = $this->bill->where('id',$id)->value('water_ids'); $moneys = $this->model->whereIn('id' , $ids)->select(); $ins_id = array_unique(array_column($moneys , 'institution_id')); if (count($ins_id) != 1) { $this->error('选择错误'); } $ins_data = Institution::where('id' , $ins_id[0])->find(); if ($this->request->isPost()) { $admin = Session::get('admin'); // 提交缴费单 $order_num = $this->makeOrderNum(); Db::startTrans(); try { $this->bill->insert([ 'order_num' => $order_num , 'institution_id' => $ins_data['id'] , 'institution_name' => $ins_data['name'] , 'water_ids' => implode(',' , $ids) , 'create_user_id' => $admin['id'] , 'create_user_name' => $admin['nickname'], 'remark' => $params['remark'] ]); $res = $this->model ->whereIn('id', $ids) ->update(['order_status' => $this->order_status['PROCESSING']]); if(!$res){ Db::rollback(); $this->error('修改流水状态失败'); } Db::commit(); $this->success('成功!单号为:'. $order_num); } catch (Exception $e){ Db::rollback(); $this->error($e->getMessage()); } } // 预览缴费单 $data = [ '1' => [ 'ZS' => 0 , 'TK' => 0 , 'HZZF' => 0 , 'YYTG' => 0 , 'YYDS' => 0 , ] , '2' => [ 'ZS' => 0 , 'TK' => 0 , 'HZZF' => 0 , 'YYTG' => 0 , 'YYDS' => 0 , ] ]; $total = 0; foreach ($moneys as $val) { $data[$val['type']]['ZS']++; $money = $val['money'] / 100; if ($val['pay_type'] == '1') { $total += $money; switch ($val['order_type']) { case '1': $data[$val['type']]['HZZF'] += $money; break; case '2': $data[$val['type']]['YYTG'] += $money; break; case '3': $data[$val['type']]['YYDS'] += $money; break; } } else { $data[$val['type']]['TK'] += $money; } } $this->view->disable = true; $this->view->result = $data; $this->view->total = $total; $this->view->institution = $ins_data; $html = $this->makeHtml($ins_data,$data,$total); $this->htmlToPdf($html); // $this->word($html); } public function makeHtml($ins_data,$data,$total) { $html = '

'.$ins_data['name'].'


检查共计 : '.$data[2]['ZS'].' 个( '.($ins_data['film_price']/100).' 元 / 个 )
患者支付 : '.$data[2]['HZZF'].' RMB
医院托管 : '.$data[2]['YYTG'].' RMB
医院代收 : '.$data[2]['YYDS'].' RMB

远程诊断共计 : '.$data[1]['ZS'].' 个
患者支付 : '.$data[1]['HZZF'].' RMB
退款 : '.$data[1]['TK'].' RMB
医院托管 : '.$data[1]['YYTG'].' RMB
医院代收 : '.$data[1]['YYDS'].' RMB

共计 : '.$total.' RMB
'; return $html; } public function word($html) { $data = ''.$html.''; $dir = "../public/word/"; if(!file_exists($dir)) mkdir($dir,777,true); $name = date('His').'.doc'; $fileName=$dir.$name; $writefile = fopen($fileName,'wb') or die("创建文件失败"); //wb以二进制写入 fwrite($writefile,$data); fclose($writefile); $this->down($name); return ''; } public function htmlToPdf($html='',$title="对账单",$fileName="bill"){ require_once ROOT_PATH.'vendor/autoload.php'; require_once ROOT_PATH.'/vendor/tecnickcom/tcpdf/tcpdf.php'; $pdf=new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // 设置打印模式 //设置文件信息,头部的信息设置 $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor(""); $pdf->SetTitle($title); $pdf->SetSubject('TCPDF Tutorial'); $pdf->SetKeywords('TCPDF, PDF, example, test, guide');//设置关键字 // 是否显示页眉 $pdf->setPrintHeader(false); // 设置页眉显示的内容 $pdf->SetHeaderData('logo.png', 60, 'owndraw.com', '', array(0,64,255), array(0,64,128)); // 设置页眉字体 $pdf->setHeaderFont(Array('deja2vusans', '', '12')); // 页眉距离顶部的距离 $pdf->SetHeaderMargin('5'); // 是否显示页脚 $pdf->setPrintFooter(true); // 设置页脚显示的内容 $pdf->setFooterData(array(0,64,0), array(0,64,128)); // 设置页脚的字体 $pdf->setFooterFont(Array('dejavusans', '', '10')); // 设置页脚距离底部的距离 $pdf->SetFooterMargin('10'); // 设置默认等宽字体 $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); // 设置行高 $pdf->setCellHeightRatio(1); // 设置左、上、右的间距 $pdf->SetMargins('10', '10', '10'); // 设置是否自动分页 距离底部多少距离时分页 $pdf->SetAutoPageBreak(TRUE, '15'); // 设置图像比例因子 $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); $pdf->setFontSubsetting(true); $pdf->AddPage("A4","Landscape",true,true); // 设置字体 $pdf->SetFont('stsongstdlight', '', 14, '', true); $pdf->writeHTML($html);//HTML生成PDF //$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); $showType= 'D';//PDF输出的方式。I,在浏览器中打开;D,以文件形式下载;F,保存到服务器中;S,以字符串形式输出;E:以邮件的附件输出。 ob_end_clean(); $path=ROOT_PATH.'public/template/pdf/'; //判断保存目录是否存在,不存在则进行建立 if(!is_dir($path)){ mkdir($path,'0777',true); } $pdf->Output($fileName.".pdf", $showType); } public function down($fileName) { $file_name = $fileName; // 下载文件名 $file_dir = ROOT_PATH."public/word/"; // 下载文件存放目录 // 检查文件是否存在 if (!file_exists($file_dir . $file_name)) { header('HTTP/1.1 404 NOT FOUND'); } else { // 以只读和二进制模式打开文件 $file = fopen($file_dir . $file_name, "rb"); // 告诉浏览器这是一个文件流格式的文件 Header("Content-type: application/octet-stream"); // 请求范围的度量单位 Header("Accept-Ranges: bytes"); // Content-Length是指定包含于请求或响应中数据的字节长度 Header("Accept-Length: " . filesize($file_dir . $file_name)); // 用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。 Header("Content-Disposition: attachment; filename=" . $file_name); // 读取文件内容并直接输出到浏览器 echo fread($file, filesize($file_dir . $file_name)); fclose($file); exit (); } } /** * 生成订单号 * @return string */ protected function makeOrderNum() { $count = (int) $this->bill ->whereTime('createdAt','today') ->count(); return 'BILL' . date('Ymd') . str_pad($count+1,4,0,STR_PAD_LEFT); } }