Browse Source

完成率

xiaoshushu 2 years ago
parent
commit
b78152165c

+ 17 - 5
src/main/java/com/lsw/controller/ReportController.java

@@ -1,6 +1,8 @@
 package com.lsw.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.jfinal.core.Controller;
+import com.jfinal.kit.JsonKit;
 import com.jfinal.kit.Kv;
 import com.jfinal.plugin.activerecord.Db;
 import com.jfinal.plugin.activerecord.Record;
@@ -9,23 +11,33 @@ import com.lsw.utils.TimeUtil;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 public class ReportController extends Controller {
 
     public void index() {
         String op = getPara("op", "finish");
-        String ID = getPara("ID", "ZMMMGm5mnGCE4WvWFeI");//部门ID
+        String ID = getPara("ID", "__HZPWsyc0ZOqvua4Lwwg");//部门ID
         set("begin", TimeUtil.getDay("firstDay"));
         set("end", TimeUtil.getDay("lastDay"));
         set("DOMAINID", getPara("DOMAINID", "uumsxrgm1KEEqSZIoHs"));
         set("ID", ID);
-        List<Record> list = new ArrayList<>();
         List<Record> department_list = Db.template("department", Kv.by("ID", ID)).find();
-        for (Record r : department_list) {
-            if (r.get("ID").equals(ID)) {
-                list.add(new Record().set("value", ID).set("label", r.getStr("NAME")));
+        List<Record> list = department_list.stream().filter(r -> r.get("ID").equals(ID)).collect(Collectors.toList());
+        for (Record record : list) {
+            //二级
+            List<Record> list2 = department_list.stream().filter(r -> r.get("SUPERIOR").equals(record.get("ID"))).collect(Collectors.toList());
+            record.set("children", list2);
+            for (Record record2 : list2) {
+                //三级
+                List<Record> list3 = department_list.stream().filter(r -> r.get("SUPERIOR").equals(record2.get("ID"))).collect(Collectors.toList());
+                record2.set("children", list3);
             }
+
         }
+
+        System.out.println("asd:" + JsonKit.toJson(list));
+        set("department",JsonKit.toJson(list));
         render(op + ".html");
     }
 

+ 14 - 0
src/main/resources/report.sql

@@ -0,0 +1,14 @@
+###完成率
+#sql("finish")
+ select count(0)as count, case  when e.STATELABEL = '结束' then '结束' else '未结束' end AS tag  from tlk_examine e
+ left outer join t_user on t_user.ID=author
+ left outer join t_department on t_user.defaultdepartment=t_department.ID
+ where e.DOMAINID=#para(DOMAINID) and t_department.ID in (select  ID from t_department start with ID=#para(ID) connect by prior ID=superior)
+ and e.created between to_date(#para(begin),'yyyy-mm-dd hh24:mi:ss') and to_date(#para(end),'yyyy-mm-dd hh24:mi:ss')
+ and e.STATELABEL is not null group by  case  when e.STATELABEL = '结束'  then '结束' else '未结束' end
+#end
+
+###选择部门
+#sql("department")
+ select ID,NAME,SUPERIOR from t_department start with ID=#para(ID) connect by prior ID=superior
+#end

+ 148 - 0
src/main/webapp/WEB-INF/view/report/finish.html

@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>实验完成率</title>
+    <link href="#(path)/static/js/element-ui.css" rel="stylesheet"/>
+    <style>
+        body {background-color: #f1f1f4;}
+        .bar{height:600px;margin-top: 50px;}
+        [v-cloak] {display: none;}
+    </style>
+</head>
+<body>
+<div id="app" v-cloak>
+    <el-form :inline="true" label-width="auto">
+        <el-form-item label="实验部门" prop="state">
+            <el-cascader
+                    v-model="value"
+                    :options="options"
+                    :props="props"
+                    @change="handleChange"
+                    :show-all-levels="false"
+                    clearable>
+            </el-cascader>
+        </el-form-item>
+        <el-form-item label="时间范围">
+            <el-date-picker
+                    v-model="created"
+                    style="width: 240px"
+                    value-format="yyyy-MM-dd"
+                    type="daterange"
+                    range-separator="-"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+            ></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+            <el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button>
+        </el-form-item>
+    </el-form>
+    <div id="echart" class="bar"></div>
+</div>
+</body>
+<script src="#(path)/static/js/jquery.min.js"></script>
+<script src="#(path)/static/js/layer/layer.js"></script>
+<script src="#(path)/static/js/vue.min.js"></script>
+<script src="#(path)/static/js/common.js"></script>
+<script src="#(path)/static/js/echarts.min.js"></script>
+<script src="#(path)/static/js/element-ui.js"></script>
+<script>
+    let vm = new Vue({
+        el: "#app",
+        data: {
+            created: ['#(begin)', '#(end)'],
+            value: '',
+            param: {
+                DOMAINID: '#(DOMAINID)',
+                ID: '#(ID)'
+            },
+            props: {
+                value: 'ID',
+                label: 'NAME',
+                checkStrictly: true
+            },
+            options: #(department)
+        },
+        mounted() {
+            this.getData();
+        },
+        methods: {
+            handleChange(value) {
+                this.param.ID=value[value.length-1]
+            },
+            search() {
+                this.param.begin = this.created[0];
+                this.param.end = this.created[1];
+                this.getData();
+            },
+            getData() {
+                sendAjax("#(path)/report/getData", this.param, res => {
+                    cancelLoding();
+                    this.initEcharts(res.data);
+                    console.log("asd:" + JSON.stringify(res));
+                })
+            },
+            initEcharts(data) {
+                let myChart = echarts.init(document.getElementById('echart'));
+                let legend = [];
+                let series = [];
+                data.forEach(item => {
+                    legend.push(item.TAG);
+                    series.push({name: item.TAG, value: item.COUNT, id: 'asd'});
+                })
+                let option = {
+                    title: [{
+                        text: '实验完成率',
+                        left: 'center',
+                        top: 0,
+                        textStyle: {
+                            fontSize: '18',
+                        }
+
+                    }],
+                    tooltip: {
+                        trigger: 'item',
+                        formatter: "{a} <br/>{b}: {c} ({d}%)",
+                        position: function (p) { //其中p为当前鼠标的位置
+                            return [p[0] + 10, p[1] - 10];
+                        }
+                    },
+                    legend: {
+                        top: '90%',
+                        itemWidth: 10,
+                        itemHeight: 10,
+                        data: legend,
+                        textStyle: {
+                            fontSize: '15',
+                        }
+                    },
+                    series: [{
+                        name: '实验完成率',
+                        type: 'pie',
+                        center: ['50%', '42%'],
+                        radius: ['40%', '60%'],
+                        label: {
+                            show: true,
+                            textStyle: {
+                                fontSize: '15',
+                            }
+                        },
+                        labelLine: {
+                            show: true
+                        },
+                        data: series
+                    }]
+                };
+                myChart.setOption(option);
+                window.addEventListener("resize", function () {
+                    myChart.resize();
+                });
+                myChart.on('click', function (params) {
+                    console.log(params)
+                })
+            }
+        }
+    })
+</script>
+</html>