123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- <?php
- namespace app\admin\controller\money;
- use app\admin\model\institution\Institution;
- use app\common\controller\Backend;
- use think\Db;
- use think\Exception;
- use think\exception\DbException;
- use think\Session;
- use Mpdf;
- /**
- * @icon fa fa-circle-o
- */
- class Money extends Backend
- {
- /**
- * Money模型对象
- * @var \app\admin\model\money\Money
- */
- protected $model = null;
- protected $bill = null;
- protected $order_status = [
- 'DEFAULT' => 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 = '<style>
- .JF-content{
- padding-left: 50px;
- }
- .JF-content .NR{
- font-size: 14px;
- float: left;
- width: 100%;
-
- }
- .JF-content .NR .val{
- float: left;
- width: 8%;
- font-weight: bold;
- }
- .JF-content .NR .text{
- float: left;
- width: 15%;
- }
- .JF-content .NR .unit{
- float: left;
- width: 77%;
- font-style: italic;
- color: grey;
- }
- </style>
- <div class="JFD">
- <h3 style="padding: 0 50px;">'.$ins_data['name'].'</h3>
- <hr>
- <div class="JF-content">
-
- <div class="NR">
- <div class="text">检查共计 : '.$data[2]['ZS'].' 个( '.($ins_data['film_price']/100).' 元 / 个 )</div>
- </div>
- <div class="NR">
- <div class="text">患者支付 : '.$data[2]['HZZF'].' RMB</div>
- </div>
- <div class="NR">
- <div class="text">医院托管 : '.$data[2]['YYTG'].' RMB</div>
- </div>
- <div class="NR">
- <div class="text">医院代收 : '.$data[2]['YYDS'].' RMB</div>
- </div>
- <div class="NR">
- <hr>
- </div>
- <div class="NR">
- <div class="text">远程诊断共计 : '.$data[1]['ZS'].' 个</div>
- </div>
- <div class="NR">
- <div class="text">患者支付 : '.$data[1]['HZZF'].' RMB</div>
- </div>
- <div class="NR">
- <div class="text">退款 : '.$data[1]['TK'].' RMB</div>
- </div>
- <div class="NR">
- <div class="text">医院托管 : '.$data[1]['YYTG'].' RMB</div>
- </div>
- <div class="NR">
- <div class="text">医院代收 : '.$data[1]['YYDS'].' RMB</div>
- </div>
- <div class="NR">
- <hr>
- </div>
- <div class="NR">
- <div class="text" style="width: 10%;">共计 : '.$total.' RMB</div>
- </div>
- </div>
- </div>';
- return $html;
- }
- public function word($html)
- {
- $data = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">'.$html.'</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);
- }
- }
|