Browse Source

报表统计

lizhen_gitee 8 months ago
parent
commit
5e4518b789

+ 93 - 0
application/admin/controller/Dashboard.php

@@ -81,4 +81,97 @@ class Dashboard extends Backend
         return $this->view->fetch();
     }
 
+    /**
+     * 报表统计
+     */
+    public function tongji(){
+        $starttime = strtotime(date('Y-m-d',strtotime("-7 day")));  //默认7天前
+        $endtime   = strtotime(date('Y-m-d')) - 1;
+
+        //接收
+        $choicedatetime = input('choicedatetime','');
+        if(!empty($choicedatetime)){
+            $choicedatetime = explode(' - ',$choicedatetime);
+            $starttime = strtotime($choicedatetime[0]);
+            $endtime   = strtotime($choicedatetime[1]) + 86399;
+        }
+        $this->view->assign('defaultdatetime',date('Y-m-d',$starttime).' - '.date('Y-m-d',$endtime));
+
+        //dump($starttime);
+        //dump($endtime);
+
+        //所有应该参加考试的人
+        $exam_paper = Db::name('exam_paper')->where('start_time','BETWEEN',[$starttime,$endtime])->where('deletetime',NULL)->column('id,user_ids');
+//        dump($exam_paper);
+        $new_exam_paper = [];
+        foreach($exam_paper as $key => $val){
+            $new_exam_paper = array_merge($new_exam_paper,explode(',',$val));
+        }
+//        dump($new_exam_paper);
+        $new_exam_paper = array_count_values($new_exam_paper);
+//        dump($new_exam_paper);
+
+        //未通过考试的人
+        $nopass = Db::name('exam_grade')->where('paper_id','IN',array_keys($exam_paper))->where('is_pass',0)->column('user_id');
+//        dump($nopass);
+        $nopass = array_count_values($nopass);
+//        dump($nopass);
+
+        //参加考试的人
+        $exam_grade = Db::name('exam_grade')->where('paper_id','IN',array_keys($exam_paper))->column('user_id');
+//        dump($exam_grade);
+        $exam_grade = array_count_values($exam_grade);
+//        dump($exam_grade);
+
+        //应该参加培训的人
+        $train_active = Db::name('train_active')->where('sign_endtime','BETWEEN',[$starttime,$endtime])->where('deletetime',NULL)->column('id,user_ids');
+//        dump($train_active);
+        $new_train_active = [];
+        foreach($train_active as $key => $val){
+            $new_train_active = array_merge($new_train_active,explode(',',$val));
+        }
+//        dump($new_train_active);
+        $new_train_active = array_count_values($new_train_active);
+//        dump($new_train_active);
+
+        //参加签到的人
+        $user_train = Db::name('user_train')->where('train_id','IN',array_keys($train_active))->column('user_id');
+//        dump($user_train);
+        $user_train = array_count_values($user_train);
+//        dump($user_train);
+
+        //所有用户
+        $userlist = Db::name('user')->order('idcard_status desc')->select();
+        foreach($userlist as $key => $user){
+            $user['realname'] = '';
+            if($user['idcard_status'] == 1){
+                $user['realname'] = $user['nickname'];
+            }
+
+            //应参加考试次数
+            $user['paper_count'] = isset($new_exam_paper[$user['id']]) ? $new_exam_paper[$user['id']] : 0;
+            //不及格次数
+            $user['no_pass'] = isset($nopass[$user['id']]) ? $nopass[$user['id']] : 0;
+            //考试次数
+            $user['grade_count'] = isset($exam_grade[$user['id']]) ? $exam_grade[$user['id']] : 0;
+            //缺考次数
+            $user['no_grade'] = $user['paper_count'] - $user['grade_count'];
+            if($user['no_grade'] < 0){ $user['no_grade'] = 0;}
+
+            //应该签到的次数
+            $user['train_count'] = isset($new_train_active[$user['id']]) ? $new_train_active[$user['id']] : 0;
+            //签到的次数
+            $user['sign_count'] = isset($user_train[$user['id']]) ? $user_train[$user['id']] : 0;
+            //未到的次数
+            $user['no_sign'] = $user['train_count'] - $user['sign_count'];
+            if($user['no_sign'] < 0){ $user['no_sign'] = 0;}
+
+            //
+            $userlist[$key] = $user;
+        }
+
+        $this->assign('datalist',$userlist);
+
+        return $this->view->fetch();
+    }
 }

+ 69 - 0
application/admin/view/dashboard/tongji.html

@@ -0,0 +1,69 @@
+
+<div class="panel panel-default panel-intro">
+
+    <form  method="POST"  class="form-horizontal" action="">
+        <div class="form-group">
+            <div class="col-xs-12 col-sm-2">
+                <input type="text" class="form-control" name="choicedatetime" value="{$defaultdatetime}" placeholder="选择时间" id="choicedatetime" data-index="4" autocomplete="off">
+            </div>
+        </div>
+        <div class="form-group layer-footer">
+            <label class="control-label col-xs-12 col-sm-2"></label>
+            <div class="col-xs-12 col-sm-8">
+                <button type="submit" class="btn btn-success btn-embossed">{:__('OK')}</button>
+            </div>
+        </div>
+    </form>
+
+
+    <table id="left_table" class="table table-striped table-bordered table-hover table-nowrap">
+        <tr>
+            <td colspan="8">日期:{$defaultdatetime}</td>
+        </tr>
+        <tr>
+            <td rowspan="2" style="vertical-align: middle;text-align: center">序号</td>
+            <td rowspan="2" style="vertical-align: middle;text-align: center">姓名</td>
+            <td rowspan="2" style="vertical-align: middle;text-align: center">昵称</td>
+            <td colspan="3" style="text-align: center">考试统计</td>
+            <td colspan="2" style="text-align: center">培训统计</td>
+        </tr>
+        <tr>
+            <td>应参加考试</td>
+            <td>不及格次数</td>
+            <!--<td>参加次数</td>-->
+            <td>缺考次数</td>
+
+            <td>应参加培训次数</td>
+            <!--<td>签到次数</td>-->
+            <td>未到次数</td>
+        </tr>
+        {volist name='datalist' id='vo'}
+        <tr>
+            <td>{$vo.id}</td>
+            <td>{$vo.realname}</td>
+            <td>{$vo.nickname}</td>
+
+            <td>{$vo.paper_count}</td>
+            <td>{$vo.no_pass}</td>
+            <!--<td>{$vo.grade_count}</td>-->
+            <td>{$vo.no_grade}</td>
+
+            <td>{$vo.train_count}</td>
+            <!--<td>{$vo.sign_count}</td>-->
+            <td>{$vo.no_sign}</td>
+        </tr>
+        {/volist}
+    </table>
+
+
+</div>
+
+<script src="/assets/laydate/laydate.js"></script>
+<script>
+    laydate.render({
+        elem: '#choicedatetime'
+        //设置开始日期、日期日期的 input 选择器
+        //数组格式为 5.3.0 开始新增,之前版本直接配置 true 或任意分割字符即可
+        ,range: ['#test-startDate-1', '#test-endDate-1']
+    });
+</script>

+ 2 - 2
application/admin/view/exam/paper/add.html

@@ -117,13 +117,13 @@
             </div>
         </div>
 
-        <div class="form-group">
+        <!--<div class="form-group">
             <label class="control-label col-xs-12 col-sm-2">每人限制考试次数:</label>
             <div class="col-xs-12 col-sm-8" style="line-height: 31px;">
                 <input id="c-limit_count" data-rule="required" class="form-control" name="row[limit_count]" type="number"
                        step="1" min="0" value="1" style="width: 200px" placeholder="考试限时,0不限制">
             </div>
-        </div>
+        </div>-->
 
         <div class="form-group">
             <label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>

+ 2 - 2
application/admin/view/exam/paper/edit.html

@@ -138,13 +138,13 @@
             </div>
         </div>-->
 
-        <div class="form-group">
+        <!--<div class="form-group">
             <label class="control-label col-xs-12 col-sm-2">每人限制考试次数:</label>
             <div class="col-xs-12 col-sm-8" style="line-height: 31px;">
                 <input id="c-limit_count" data-rule="required" class="form-control" name="row[limit_count]" type="number"
                        step="1" min="0" value="{$row.limit_count|default=0}" style="width: 200px" placeholder="考试限时,0不限制">
             </div>
-        </div>
+        </div>-->
 
         <div class="form-group">
             <label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>

+ 3 - 0
public/assets/js/backend/dashboard.js

@@ -73,6 +73,9 @@ define(['jquery', 'bootstrap', 'backend', 'addtabs', 'table', 'echarts', 'echart
                 }, 0);
             });
 
+        },
+        tongji: function () {
+
         }
     };