zgg 4 dienas atpakaļ
vecāks
revīzija
d58253212e

+ 340 - 0
application/admin/controller/PhStatistics.php

@@ -0,0 +1,340 @@
+<?php
+namespace app\admin\controller;
+
+use app\common\util\ExcelUtil;
+use think\App;
+use think\Db;
+use think\db\Where;
+use think\Exception;
+use function GuzzleHttp\Promise\all;
+
+class PhStatistics extends Auth
+{
+    /**
+     * 流水统计
+     */
+    public function ls()
+    {
+        $begin = input('begin',date('Y-m-d',strtotime('-7 days')),'trim');
+        $end = input('end',date('Y-m-d'),'trim');
+        if(request()->isAjax()){
+            //分页参数
+            $length = input('rows',10,'intval');   //每页条数
+            $page = input('page',1,'intval');      //第几页
+            $start = ($page - 1) * $length;     //分页开始位置
+            $worker = input('worker','','trim');
+            if($worker){
+                $ids = Db::name('worker')
+                    ->alias('a')
+                    ->join('user b','a.user_id = b.id')
+                    ->join('user_org c','c.user_id = a.user_id')
+                    ->where('b.real_name','like','%'.$worker.'%')
+                    ->where('c.org_id',$this->orgId)
+                    ->column('a.id');
+                if (!empty($ids)){
+                    $map[] = ['d.worker_id','in',$ids];
+                }
+            }
+            $name= input('name','','trim');
+            if ($name){
+                $map[] = ['b.name','like','%'.$name.'%'];
+            }
+
+            $cateId = input('cateId','','trim');
+            if($cateId){
+                $map[] = ['b.cate_id','=',$cateId];
+            }
+
+            $depId = input('depId','','trim');
+            if($depId){
+                $map[] = ['b.dep_id','=',$depId];
+            }
+
+            $payType = input('payType','','trim');
+            if ($payType){
+                $map[] = ['a.type','=',$payType];
+            }
+
+            $delType = input('dealType','','trim');
+            if ($delType != ''){
+                $map[] = ['a.mode','=',$delType];
+            }
+
+            $map[] = ['a.pay_time','>=',$begin.' 00:00:00'];
+            $map[] = ['a.pay_time','<=',$end.' 23:59:59'];
+            $map[] = ['b.org_id','=',$this->orgId];
+            $lists = Db::name('ph_order_water')
+                ->alias('a')
+                ->join('ph_orders b','a.order_id = b.id')
+                ->join('dep c','b.dep_id = c.id','left')
+                ->join('ph_todo d',' a.order_id = d.order_id','left')
+                ->field('a.*,c.title as depTitle')
+                ->group('a.sn')
+                ->order('a.pay_time','desc')
+                ->where($map)
+                ->limit($start,$length)
+                ->select();
+
+            foreach ($lists as $k=>$v){
+                $order = Db::name('ph_orders')
+                    ->where('id',$v['order_id'])
+                    ->field('sn,name,phone,user_id,form')
+                    ->find();
+                $lists[$k]['order_sn'] = $order?$order['sn']:'';
+                $lists[$k]['contact'] = $order?$order['name']:'';
+                $lists[$k]['phone'] = $order?$order['phone']:'';
+                $lists[$k]['pay_text'] = $v['type'] == 1 ?  "线下" : '线上';
+                $lists[$k]['name'] = Db::name('user')
+                    ->where('id',$v['user_id'])
+                    ->value('real_name');
+
+                if ($v['mode'] == 0) {
+                    $lists[$k]['modeName'] ='预收金';
+                }elseif ($v['mode'] == 1){
+                    $lists[$k]['modeName'] ='服务费';
+                } else{
+                    $lists[$k]['modeName'] ='退款';
+                }
+                $workerIds = Db::name('ph_todo')->where('order_id',$v['order_id'])->column('worker_id');
+                $workerIds = array_unique($workerIds);
+                $users = Db::name('user')
+                    ->alias('a')
+                    ->join('worker b','a.id = b.user_id')
+                    ->where('b.id','in',$workerIds)
+                    ->column('a.real_name','b.id');
+                foreach ($workerIds as $k2=>$v2){
+                    $workerIds[$k2] = $users[$v2];
+                }
+                $lists[$k]['worker'] = implode(',',$workerIds);
+
+            }
+            //数据返回
+            $totalCount = Db::name('ph_order_water')
+                ->alias('a')
+                ->join('ph_orders b','a.order_id = b.id')
+                ->join('dep c','b.dep_id = c.id','left')
+                ->join('ph_todo d',' a.order_id = d.order_id','left')
+                ->order('a.pay_time asc,a.id asc')
+                ->field('a.*,c.title as depTitle')
+                ->group('a.sn')
+                ->where($map)
+                ->count();
+            $lists2 = Db::name('ph_order_water')
+                ->alias('a')
+                ->join('ph_orders b','a.order_id = b.id')
+                ->join('dep c','b.dep_id = c.id','left')
+                ->join('ph_todo d',' a.order_id = d.order_id','left')
+                ->order('a.pay_time asc,a.id asc')
+                ->field('a.mode,a.money')
+                ->group('a.sn')
+                ->where($map)
+                ->select();
+
+            $money1 = $money2 = $money3 = 0;
+            $totalMoney = 0;
+            foreach ($lists2 as $k=>$v){
+                if ($v['mode'] == 0) {
+                    $money1+=$v['money'];
+                }elseif ($v['mode'] == 1) {
+                    $money2+=$v['money'];
+                }
+                else{
+                    $money3+=$v['money'];
+                }
+                $totalMoney = $money1 + $money2 - $money3;
+            }
+            $totalPage = ceil($totalCount/$length);
+            $result['money1'] = round($money1,2);
+            $result['money2'] = round($money2,2);
+            $result['money3'] = round($money3,2);
+            $result['totalMoney'] = round($totalMoney,2);
+            $result['page'] = $page;
+            $result['total'] = $totalPage;
+            $result['records'] = $totalCount;
+            $result['rows'] = $lists;
+            return json($result);
+        }else{
+
+            $dep =(new \app\common\model\Dep())->getList($this->orgId);
+            $this->assign('dep',$dep);
+            $this->assign('begin',$begin);
+            $this->assign('end',$end);
+            return $this->fetch();
+        }
+    }
+
+    //流水列表导出
+    public function lsExport()
+    {
+        if(request()->isGet()){
+            $begin = input('begin',date('Y-m-d',strtotime('-7 days')),'trim');//用户
+            $end = input('end',date('Y-m-d'),'trim');//用户
+            $worker = input('worker','','trim');
+            if($worker){
+                $ids = Db::name('worker')
+                    ->alias('a')
+                    ->join('user b','a.user_id = b.id')
+                    ->join('user_org c','c.user_id = a.user_id')
+                    ->where('b.real_name','like','%'.$worker.'%')
+                    ->where('c.org_id',$this->orgId)
+                    ->column('a.id');
+                if (!empty($ids)){
+                    $map[] = ['d.worker_id','in',$ids];
+                }
+            }
+            $name= input('name','','trim');
+            if ($name){
+                $map[] = ['b.name','like','%'.$name.'%'];
+            }
+            $cateId = input('cateId','','trim');
+            if($cateId){
+                $map[] = ['b.cate_id','=',$cateId];
+            }
+
+            $depId = input('depId','','trim');
+            if($depId){
+                $map[] = ['b.dep_id','=',$depId];
+            }
+
+            $payType = input('payType','','trim');
+            if ($payType){
+                $map[] = ['a.type','=',$payType];
+            }
+
+            $delType = input('dealType','','trim');
+            if ($delType){
+                $map[] = ['a.mode','=',$delType];
+            }
+
+            $map[] = ['a.pay_time','>=',$begin.' 00:00:00'];
+            $map[] = ['a.pay_time','<=',$end.' 23:59:59'];
+            $map[] = ['b.org_id','=',$this->orgId];
+            $lists = Db::name('ph_order_water')
+                ->alias('a')
+                ->join('ph_orders b','a.order_id = b.id')
+                ->join('dep c','b.dep_id = c.id','left')
+                ->join('ph_todo d',' a.order_id = d.order_id','left')
+                ->order('a.pay_time','desc')
+                ->field('a.*,c.title as depTitle')
+                ->group('a.sn')
+                ->where($map)
+                ->select();
+            $money1 = $money2 = $money3 = $totalMoney = 0;
+            foreach ($lists as $k=>$v){
+                $order = Db::name('ph_orders')
+                    ->where('id',$v['order_id'])
+                    ->field('sn,name,phone,user_id,form')
+                    ->find();
+                $lists[$k]['order_sn'] = $order?$order['sn']:'';
+                $lists[$k]['contact'] = $order?$order['name']:'';
+                $lists[$k]['phone'] = $order?$order['phone']:'';
+                $lists[$k]['pay_text'] = $v['type'] == 1 ?  "线下" : '线上';
+                $lists[$k]['name'] = Db::name('user')
+                    ->where('id',$v['user_id'])
+                    ->value('real_name');
+                if ($v['mode'] == 0) {
+                    $lists[$k]['modeName'] ='预收金';
+                }elseif ($v['mode'] == 1){
+                    $lists[$k]['modeName'] ='服务费';
+                } else{
+                    $lists[$k]['modeName'] ='退款';
+                }
+                $workerIds = Db::name('ph_todo')->where('order_id',$v['order_id'])->column('worker_id');
+                $workerIds = array_unique($workerIds);
+                $users = Db::name('user')
+                    ->alias('a')
+                    ->join('worker b','a.id = b.user_id')
+                    ->where('b.id','in',$workerIds)
+                    ->column('a.real_name','b.id');
+                foreach ($workerIds as $k2=>$v2){
+                    $workerIds[$k2] = $users[$v2];
+                }
+                $lists[$k]['worker'] = implode(',',$workerIds);
+                if ($v['mode'] == 0) {
+                    $money1+=$v['money'];
+                }elseif ($v['mode'] == 1) {
+                    $money2+=$v['money'];
+                }
+                else{
+                    $money3+=$v['money'];
+                }
+                $totalMoney = $money1 + $money2 - $money3;
+            }
+
+            //实例化PHPExcel类
+            include_once env('root_path') . '/extend/phpexcel/Classes/PHPExcel.php';
+            $objPHPExcel = new \PHPExcel();
+            //激活当前的sheet表
+            $objPHPExcel->setActiveSheetIndex(0);
+            //设置表格头(即excel表格的第一行)
+            $objPHPExcel->setActiveSheetIndex(0)
+                ->setCellValue('A1', '订单编号')
+                ->setCellValue('B1', '下单科室')
+                ->setCellValue('C1', '护工')
+                ->setCellValue('D1', '患者姓名')
+                ->setCellValue('E1', '联系方式')
+                ->setCellValue('F1', '流水号')
+                ->setCellValue('G1', '交易时间')
+                ->setCellValue('H1', '金额')
+                ->setCellValue('I1', '交易类型')
+                ->setCellValue('J1', '支付方式')
+                ->setCellValue('K1', '操作人')
+                ->setCellValue('L1', '备注');
+
+            $arrs = ['A','B','C','D','E','F','G','H','I','J','H','I','J','K','L','M'];
+            foreach ($arrs as $arr){
+                // 设置表格头水平居中
+                $objPHPExcel->setActiveSheetIndex(0)->getStyle($arr.'1')->getAlignment()
+                    ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+                //设置列水平居中
+                $objPHPExcel->setActiveSheetIndex(0)->getStyle($arr)->getAlignment()
+                    ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+                //设置单元格宽度
+                $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension($arr)->setWidth(20);
+            }
+
+            //循环刚取出来的数组,将数据逐一添加到excel表格。
+            for ($i = 0; $i < count($lists); $i++) {
+                $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $lists[$i]['order_sn']);
+                $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $lists[$i]['depTitle']);
+                $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $lists[$i]['worker']);
+                $objPHPExcel->getActiveSheet()->setCellValue('D' . ($i + 2), $lists[$i]['contact']);
+                $objPHPExcel->getActiveSheet()->setCellValue('E' . ($i + 2), $lists[$i]['phone']);
+                $objPHPExcel->getActiveSheet()->setCellValue('F' . ($i + 2), $lists[$i]['sn']);
+                $objPHPExcel->getActiveSheet()->setCellValue('G' . ($i + 2), $lists[$i]['pay_time']);
+                $objPHPExcel->getActiveSheet()->setCellValue('H' . ($i + 2), $lists[$i]['money']);
+                $objPHPExcel->getActiveSheet()->setCellValue('I' . ($i + 2), $lists[$i]['modeName']);
+                $objPHPExcel->getActiveSheet()->setCellValue('J' . ($i + 2), $lists[$i]['pay_text']);
+                $objPHPExcel->getActiveSheet()->setCellValue('K' . ($i + 2), $lists[$i]['name']);
+                $objPHPExcel->getActiveSheet()->setCellValue('L' . ($i + 2), $lists[$i]['remark']);
+            }
+            $objPHPExcel->getActiveSheet()->setCellValue('A' . (count($lists) + 2), '预收金:');
+            $objPHPExcel->getActiveSheet()->setCellValue('B' . (count($lists) + 2), $money1.'元');
+            $objPHPExcel->getActiveSheet()->setCellValue('C' . (count($lists) + 2), '服务费:');
+            $objPHPExcel->getActiveSheet()->setCellValue('D' . (count($lists) + 2), $money2.'元');
+            $objPHPExcel->getActiveSheet()->setCellValue('E' . (count($lists) + 2), '退款:');
+            $objPHPExcel->getActiveSheet()->setCellValue('F' . (count($lists) + 2), $money3.'元');
+            $objPHPExcel->getActiveSheet()->setCellValue('G' . (count($lists) + 2), '总金额:');
+            $objPHPExcel->getActiveSheet()->setCellValue('H' . (count($lists) + 2), $totalMoney.'元');
+            //设置保存的Excel表格名称
+            $filename = '流水列表' . date('YmdHis', time()) . '.xls';
+
+            //设置当前激活的sheet表格名称
+            $objPHPExcel->getActiveSheet()->setTitle('流水列表');
+
+            //设置浏览器窗口下载表格
+            ob_end_clean();
+            header("Content-Type: application/force-download");
+            header("Content-Type: application/octet-stream");
+            header("Content-Type: application/download");
+            header('Content-Disposition:inline;filename="' . $filename);
+
+            //生成excel文件
+            $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
+            //下载文件在浏览器窗口
+            return  $objWriter->save('php://output');
+        }
+
+    }
+
+}

+ 5 - 5
application/admin/view/ph_orders/detail.html

@@ -17,9 +17,9 @@
             <div class="ibox-title">
                 <h5>订单详情</h5>
                 <div class="ibox-tools">
-                    <a class="toback" href="{:url('index')}">
-                        返回上一页
-                    </a>
+<!--                    <a class="toback" href="{:url('index')}">-->
+<!--                        返回上一页-->
+<!--                    </a>-->
                 </div>
             </div>
             <div class="ibox-content">
@@ -190,7 +190,7 @@
                         </td>
                         <td>{$v.pay_time}</td>
                         <td>{$v.remark}</td>
-                        {if condition="$info['status'] eq 0 or $info['status'] eq 1"}
+                        {if in_array($info.status,[0,1,2])}
                         <td>
                             <a href="javascript:;" url="{:url('PhOrders/refund',['id'=>$v['id']])}" data-title="退款" onclick="layer_open(this,2)" class="btn btn-xs btn-danger">退款</a>
                         </td>
@@ -229,7 +229,7 @@
                         </td>
                         <td>{$v.pay_time}</td>
                         <td>{$v.remark}</td>
-                        {if condition="$info['status'] eq 0 or $info['status'] eq 1"}
+                        {if in_array($info.status,[0,1,2])}
                         <td>
                             <a href="javascript:;" url="{:url('PhOrders/refund',['id'=>$v['id']])}" data-title="退款" onclick="layer_open(this,2)" class="btn btn-xs btn-danger">退款</a>
                         </td>

+ 1 - 1
application/admin/view/ph_orders/index.html

@@ -155,7 +155,7 @@
                     var editurl = "{:url('detail',[],'')}/id/"+c.id;
                     var cancel_url = "{:url('cancel',[],'')}/id/"+c.id;
                     //var btn = '<a href="'+editurl+'"><span class="label label-info" title="详情">详情</span></a>&nbsp;';
-                        var btn = '<a href="'+editurl+'"<span class="label label-primary" title="详情">详情</span></a>&nbsp;';
+                        var btn = '<a href="javascript:;" url="'+editurl+'" data-title="详情" data-width="95%" data-height="95%" onclick="layer_open(this,1)"><span class="label label-primary" title="详情">详情</span></a>&nbsp;';
 
                         if(c.is_zf == 0){
                         if(c.status == 0||c.status == 1){

+ 160 - 0
application/admin/view/ph_statistics/ls.html

@@ -0,0 +1,160 @@
+{extend name="common/common2" /}
+{block name="main"}
+
+<style>
+    .av{
+        background-color: #23c6c8 !important;
+        border-color: #23c6c8 !important;
+    }
+    .ui-jqgrid tr.jqgrow td {
+        white-space: normal; /* 允许文本换行 */
+        word-wrap: break-word; /* 长单词也可以换行 */
+    }
+</style>
+<div class="ibox">
+    <div class="ibox-content">
+        <div class="row" style="margin-left: 40px !important;">
+            <div class="col-xs-16" style="text-align: left;">
+                <form class="form-inline" id="form-search" action="{:url('ls')}">
+                    <div class="input-group">
+                        <input type="text"  class="form-control" name="worker" placeholder="护工姓名">
+                    </div>
+                    <div class="input-group">
+                        <input type="text"  class="form-control" name="name" placeholder="患者姓名">
+                    </div>
+
+                    <div class="input-group">
+                        <select name="depId" class="form-control">
+                            <option value="">下单科室</option>
+                            {volist name="dep" id="v"}
+                            <option value="{$v.id}">{$v.title}</option>
+                            {/volist}
+                        </select>
+                    </div>
+                    <div class="input-group">
+                        <select class="form-control" name="dealType">
+                            <option value="">交易类型</option>
+                            <option value="0">预收金</option>
+                            <option value="1">服务费</option>
+                            <option value="2">退款</option>
+                        </select>
+                    </div>
+                    <div class="input-group">
+                        <select class="form-control" name="payType">
+                            <option value="">交易方式</option>
+                            <option value="1">线下</option>>
+                            <option value="2">线上</option>
+                        </select>
+                    </div>
+                    <div class="input-group">
+                        <span class="input-group-addon">开始日期</span>
+                        <input type="text" id="date" readonly class="form-control" name="begin" value="{$begin}" placeholder="开始日期">
+                    </div>
+                    <div class="input-group">
+                        <span class="input-group-addon">结束日期</span>
+                        <input type="text" id="date1" readonly class="form-control" name="end" value="{$end}" placeholder="结束日期">
+                    </div>
+
+                    <div class="input-group">
+                        <span class="input-group-btn">
+                            <button class="btn-sm btn-primary" type="button" id ="search-btn" ><i class="fa fa-search"></i></button>
+                        </span>&nbsp;
+                        <span class="input-group-btn">
+                            <button class="btn-sm btn-warning " type="button" id="search-clear"><i class="fa fa-undo"></i></button>
+                        </span>&nbsp;
+                        <span class="input-group-btn">
+                        <button data-url="{:url('lsExport')}" title="导出" class="btn-sm btn-primary"  onclick="excel_download(this)" type="button" ><i class="fa fa-cloud-download"></i></button>
+                    </span>
+                    </div>
+                </form>
+            </div>
+        </div>
+
+    </div>
+    <div class="ibox-content">
+        <div class="jqGrid_wrapper">
+            <table id="table" style="border-collapse: collapse"></table>
+            <div id="pager"></div>
+        </div>
+    </div>
+</div>
+<script src="/static/layDate-v5.0.9/laydate.js"></script>
+{/block}
+{block name="script"}
+<script>
+    //导出
+    function excel_download(_self){
+        var url = $(_self).attr('data-url');
+        var param = $('#form-search').serialize();
+        window.location.href = url+'?'+param;
+    }
+    laydate.render({
+        elem: '#date',
+        //设置开始日期、日期日期的 input 选择器
+        //数组格式为 5.3.0 开始新增,之前版本直接配置 true 或任意分割字符即可
+        trigger: 'click' ,
+        theme: '#148d8f'
+    });
+    laydate.render({
+        elem: '#date1',
+        //设置开始日期、日期日期的 input 选择器
+        //数组格式为 5.3.0 开始新增,之前版本直接配置 true 或任意分割字符即可
+        trigger: 'click' ,
+        theme: '#148d8f'
+    });
+
+    $(function () {
+
+        $(window).bind("resize",function(){
+            var width=$(".jqGrid_wrapper").width();
+            $("#table").setGridWidth(width);
+        });
+
+        $.jgrid.defaults.styleUI="Bootstrap";
+        $("#table").jqGrid({
+            url:"{:url('ls')}",
+            datatype: "json",
+            colModel:[
+                {label:'订单编号',name:'order_sn',index:'order_sn',width:65,editable: false,sortable: false,formatter:function(a,b,c){
+                        var url = "{:url('PhOrders/detail',[],'')}/id/"+c.order_id;
+                        return '<a url="'+url+'" href="javascript:;" data-title="详情" onclick="layer_open(this,1)">'+a+'</a>&nbsp;';
+                    }},
+                {label:'下单科室',name:'depTitle',index:'depTitle',width:50,editable: false,sortable: false},
+                {label:'护工',name:'worker',index:'worker',width:50,editable: false,sortable: false},
+                {label:'患者姓名',name:'contact',index:'contact',width:35,editable: false,sortable: false},
+                {label:'联系方式',name:'phone',index:'phone',width:50,editable: false,sortable: false},
+                {label:'流水号',name:'sn',index:'sn',width:75,editable: false,sortable: false},
+                {label:'交易时间',name:'pay_time',index:'pay_time',width:50,editable: false,sortable: false},
+                {label:'金额',name:'money',index:'money',width:35,editable: false,sortable: false},
+                {label:'交易类型',name:'modeName',index:'modeName',width:35,editable: false,sortable: false},
+                {label:'交易方式',name:'pay_text',index:'pay_text',width:35,editable: false,sortable: false},
+                {label:'操作人',name:'name',index:'name',width:50,editable: false,sortable: false},
+                {label:'备注',name:'remark',index:'remark',width:50,editable: false,sortable: false},
+            ],
+            rowNum:10,
+            rowList:[10,20,30,50,100],
+            pager: '#pager',
+            sortname: 'id',
+            viewrecords: true,
+            autowidth:true,
+            mtype: 'post',
+            height: 'auto',
+            emptyrecords: "暂无数据",
+            sortorder: "desc",
+            caption:"流水统计",
+            loadComplete: function (xhr) {
+                if(xhr.code==0){
+                    layer.msg(xhr.msg);
+                    return false;
+                }
+                var money1 = xhr.money1;
+                var money2 = xhr.money2;
+                var money3 = xhr.money3;
+                var totalMoney = xhr.totalMoney;
+                $('.ui-jqgrid-title').html('流水统计'+'<span style="color:red;font-size: 16px;font-weight: 400;margin-left: 20px">预收金:'+money1+' 元 ,'+'服务费:'+money2+' 元 ,'+'退款:'+money3+' 元 ,'+'总金额:'+totalMoney+' 元');
+            },
+        });
+    });
+
+</script>
+{/block}

+ 10 - 3
application/common/model/PhOrderPay.php

@@ -217,9 +217,16 @@ class PhOrderPay extends Base
                     'service_money' => $order['service_money'] - $data['money']
                 ]);
             }else{
-                $ret = Db::name('ph_orders')->where('id',$pay['order_id'])->update([
-                    'pre_money' => $order['pre_money'] - $data['money']
-                ]);
+                if ($order['status'] == 2){ //已完成状态下,要从订单金额里面减去退款金额
+                    $ret = Db::name('ph_orders')->where('id',$pay['order_id'])->update([
+                        'pre_money' => $order['pre_money'] - $data['money'],
+                        'amount' => $order['amount'] - $data['money'],
+                    ]);
+                }else{
+                    $ret = Db::name('ph_orders')->where('id',$pay['order_id'])->update([
+                        'pre_money' => $order['pre_money'] - $data['money']
+                    ]);
+                }
             }
 
             if(!$ret){