Commit f4a7359454522a54843d62cf39f5317fea0b34dc

Authored by jack
1 parent 739794be

1.增加班级统计报表和导出

WebRoot/WEB-INF/jsp/save_result2.jsp
... ... @@ -15,10 +15,32 @@
15 15 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
16 16  
17 17 <script type="text/javascript" src="static/js/jquery-1.7.2.js"></script>
18   -
  18 +<style type="text/css">
  19 + #zhongxin{
  20 + text-align:center;
  21 + padding-top:50px;
  22 + }
  23 + .fail{
  24 + text-align:center;
  25 + margin-bottom:-30px;
  26 + }
  27 + .fail p{
  28 + font-size:16px;
  29 + color:#ff006a;
  30 + font-weight:bolder;
  31 + }
  32 +</style>
19 33 </head>
20 34 <body>
  35 + <c:if test="${state =='fail'}">
  36 + <div class="fail">
  37 + <img src="static/images/fail.png" width="100px" />
  38 +
  39 + <p>导入失败</p>
  40 + </div>
  41 + </c:if>
21 42 <div id="zhongxin">${msg}</div>
  43 +
22 44 <script type="text/javascript">
23 45 var msg = "${msg}";
24 46 if(msg=="success" || msg==""){
... ...
WebRoot/WEB-INF/jsp/sunvote/admin/admin_main.jsp
... ... @@ -30,7 +30,11 @@
30 30 <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
31 31 <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
32 32 <![endif]-->
33   -
  33 +<style>
  34 + .menu_2 .active{
  35 + background:#000;
  36 + }
  37 +</style>
34 38 </head>
35 39 <body>
36 40 <div class="header">
... ... @@ -60,7 +64,7 @@
60 64 <p>
61 65 年级管理<span class="right jiao"></span>
62 66 </p>
63   - <ul class="menu_1">
  67 + <ul class="menu_2">
64 68 <c:forEach items="${gradeInfos}" var="var" varStatus="vs">
65 69 <li
66 70 onclick="event.stopPropagation();chooseListClass('${SCHOOL_ID}','${var.ID}')">
... ... @@ -185,7 +189,7 @@
185 189 系统设置<span class="right jiao"></span>
186 190 </p>
187 191  
188   - <ul class="menu_1">
  192 + <ul class="menu_2">
189 193 <li>
190 194 <p onclick="event.stopPropagation();school('${SCHOOL_ID}')">学校设置</p>
191 195  
... ... @@ -495,6 +499,11 @@
495 499 if (defaultUrl != '' && defaultUrl != '') {
496 500 $("#mainFrame").attr('src', defaultUrl);
497 501 }
  502 +
  503 + $(".menu_2 li").click(function(){
  504 + $(".active").removeClass("active");
  505 + $(this).addClass("active");
  506 + })
498 507 </script>
499 508 </body>
500 509 </html>
501 510 \ No newline at end of file
... ...
WebRoot/WEB-INF/jsp/sunvote/paper/paper_list2.jsp
... ... @@ -56,8 +56,8 @@
56 56 <col style="width: 20%" />
57 57 <col style="width: 20%" />
58 58 <col style="width: 20%" />
59   - <col style="width: 20%" />
60 59 <col style="width: 10%" />
  60 + <col style="width: 20%" />
61 61 <thead>
62 62 <tr>
63 63 <th><input type="checkbox" name='ids' id="ids" />序号</th>
... ... @@ -72,13 +72,14 @@
72 72 </div>
73 73 </div>
74 74 <div class="table_box">
  75 +
75 76 <table class="table table-striped">
76 77 <col style="width: 10%" />
77 78 <col style="width: 20%" />
78 79 <col style="width: 20%" />
79 80 <col style="width: 20%" />
80   - <col style="width: 20%" />
81 81 <col style="width: 10%" />
  82 + <col style="width: 20%" />
82 83 <tbody>
83 84 <c:choose>
84 85 <c:when test="${not empty varList}">
... ... @@ -90,6 +91,7 @@
90 91 <td >${var.EXAM_TIME}</td>
91 92 <td >${var.SCORE}</td>
92 93 <td>
  94 + <a href="<%=basePath%>paper/paperRep.do?paper_id=${var.PAPER_ID}">查看成绩</a>
93 95 <a href="#" onclick="del('${var.PAPER_ID}');"><img src="../static/images/remove.png" /></a>
94 96 </td>
95 97 </tr>
... ...
WebRoot/WEB-INF/jsp/sunvote/paper/paper_list4.jsp
... ... @@ -86,6 +86,7 @@
86 86 <th>创建时间</th>
87 87 <th>建议考试时长</th>
88 88 <th>总分</th>
  89 + <th>操作</th>
89 90 </tr>
90 91 </thead>
91 92 </table>
... ... @@ -114,6 +115,7 @@
114 115 <td >${var.CREATE_DATE}</td>
115 116 <td >${var.EXAM_TIME}</td>
116 117 <td >${var.SCORE}</td>
  118 + <td ><a href="<%=basePath%>paper/paperRep.do?paper_id=${var.PAPER_ID}">查看成绩</a></td>
117 119 </tr>
118 120  
119 121 </c:forEach>
... ...
WebRoot/WEB-INF/jsp/sunvote/paper/paper_list5.jsp
... ... @@ -99,6 +99,7 @@
99 99 <td >${var.EXAM_TIME}</td>
100 100 <td >${var.SCORE}</td>
101 101 <td>
  102 + <a href="<%=basePath%>paper/paperRep.do?paper_id=${var.PAPER_ID}">查看成绩</a>
102 103 <a href="#" onclick="del('${var.PAPER_ID}');"><img src="../static/images/remove.png" /></a>
103 104 </td>
104 105 </tr>
... ...
WebRoot/WEB-INF/jsp/sunvote/paper/test_list1.jsp 0 → 100644
  1 +<%@ page language="java" contentType="text/html; charset=UTF-8"
  2 + pageEncoding="UTF-8"%>
  3 +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  4 +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
  5 +<%@ taglib prefix="myelfun" uri="/WEB-INF/tld/elfun.tld"%>
  6 +<%
  7 + String path = request.getContextPath();
  8 + String basePath = request.getScheme() + "://"
  9 + + request.getServerName() + ":" + request.getServerPort() + path + "/";
  10 +%>
  11 +<html lang="zh-CN">
  12 +<head>
  13 +<meta charset="utf-8">
  14 +<meta http-equiv="X-UA-Compatible" content="IE=edge">
  15 +<meta name="viewport" content="width=device-width, initial-scale=1">
  16 +<title>教育管理系统</title>
  17 +
  18 +<!-- Bootstrap -->
  19 +<!-- <link
  20 + href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
  21 + rel="stylesheet"> -->
  22 + <link rel="stylesheet" href="../static/css/bootstrap.min.css" />
  23 +<link href="../static/css/teach.css" rel="stylesheet">
  24 +<link rel="stylesheet" href="../static/ace/css/datepicker.css" />
  25 +<link type="text/css" href="../static/css/tablescroller.css" rel="stylesheet" />
  26 +<script src="../static/js/loading.js"></script>
  27 +<script src="../static/js/remove.js?a=1"></script>
  28 +
  29 +
  30 +<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
  31 +<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
  32 +<!--[if lt IE 9]>
  33 + <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  34 + <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
  35 + <![endif]-->
  36 +</head>
  37 +<body>
  38 +
  39 + <form action="../paper/list4.do" method="post" name="Form" id="Form">
  40 + <div class="head_box">
  41 + <div class="box_header">
  42 + <div class="head_box_l">
  43 + <p>
  44 + <span class="right_b"></span>试卷测验列表
  45 + </p>
  46 + </div>
  47 + <div class="head_box_r">
  48 + <button type="button" class="btn btn-primary" onclick="window.history.go(-1)" autocomplete="off">返回</button>
  49 + <button type="button" class="btn btn-primary" onclick="export1()" autocomplete="off">导出</button>
  50 + </div>
  51 +
  52 + <div class="clear"></div>
  53 + </div>
  54 +
  55 + </div>
  56 + <div class="table_box" style="padding:0 5%;background:#fff;">
  57 + <div style="padding:15px 0;background:#fff;" class="paper_title">
  58 + &nbsp;
  59 + 试卷名称:${myelfun:findPaperName(pd.PAPER_ID)}
  60 + </div>
  61 +
  62 + <table id="simple-table"
  63 + class="table table-striped table-bordered table-hover"
  64 + style="margin-top:0px;margin-bottom:0;">
  65 + <thead>
  66 + <tr>
  67 + <th><div style="width:80px">序号</div></th>
  68 + <th><div style="width:80px">班级名称</div></th>
  69 + <th><div style="width:80px">考试时间</div></th>
  70 + <th><div style="width:80px">平均分</div></th>
  71 + <th><div style="width:80px">班级总人数</div></th>
  72 + <th><div style="width:80px">优秀人数</div></th>
  73 + <th><div style="width:80px">优秀率</div></th>
  74 + <th><div style="width:80px">良好人数</div></th>
  75 + <th><div style="width:80px">良好率</div></th>
  76 + <th><div style="width:80px">及格人数</div></th>
  77 + <th><div style="width:80px">及格率</div></th>
  78 + <th><div style="width:80px">低分人数</div></th>
  79 + <th><div style="width:80px">低分率</div></th>
  80 + <th><div style="width:80px">操作</div></th>
  81 + </tr>
  82 + </thead>
  83 + <tbody>
  84 + <c:choose>
  85 + <c:when test="${not empty varList}">
  86 + <c:forEach items="${varList}" var="var" varStatus="vs">
  87 + <tr>
  88 +
  89 + <td>${vs.index+1}</td>
  90 + <td>${myelfun:findClassName(var.class_id)}</td>
  91 + <td >${var.creat_time}</td>
  92 + <td >${var.avg_score}</td>
  93 + <td >${var.student_num}</td>
  94 + <td >${var.you}</td>
  95 + <td >
  96 + <fmt:formatNumber type="number"
  97 + value="${var.student_num == 0 ? 0: (var.you / var.student_num * 100)}"
  98 + maxFractionDigits="2" />%
  99 + </td>
  100 + <td >${var.liang}</td>
  101 + <td >
  102 + <fmt:formatNumber type="number"
  103 + value="${var.student_num == 0 ? 0: (var.liang / var.student_num * 100)}"
  104 + maxFractionDigits="2" />%
  105 + </td>
  106 + <td >${var.jige}</td>
  107 + <td >
  108 + <fmt:formatNumber type="number"
  109 + value="${var.student_num == 0 ? 0: (var.jige / var.student_num * 100)}"
  110 + maxFractionDigits="2" />%
  111 + </td>
  112 + <td >${var.difen}</td>
  113 + <td >
  114 + <fmt:formatNumber type="number"
  115 + value="${var.student_num == 0 ? 0: (var.difen / var.student_num * 100)}"
  116 + maxFractionDigits="2" />%
  117 + </td>
  118 + <td ><a href="<%=basePath%>paper/paperRep2.do?PAPER_ID=${pd.PAPER_ID}&TESTPAPER_ID=${var.testpaper_id}">查看成绩</a></td>
  119 + </tr>
  120 +
  121 + </c:forEach>
  122 + </c:when>
  123 + <c:otherwise>
  124 + <tr class="main_info">
  125 + <td colspan="100" class="center" >没有相关数据</td>
  126 + </tr>
  127 + </c:otherwise>
  128 + </c:choose>
  129 + </tbody>
  130 + </table>
  131 +
  132 + <div id="scrollableTable"></div>
  133 +
  134 + <div class="footer">
  135 + <!-- <div class="creat">
  136 + <input type="button" onclick="parent.$('.title_time').modal('show');" value="新建试卷" />
  137 + </div>
  138 + <div class="removeAll">
  139 + <input type="button" onclick="deleteAll()" value="批量删除" />
  140 + </div> -->
  141 + <div class="page_box">
  142 +
  143 + <div class="pagination" style="float: right;padding-top: 0px;margin-top: 0px;">${page.pageStr}</div>
  144 + </div>
  145 + </div>
  146 + </div>
  147 + </form>
  148 +</body>
  149 +
  150 +<%@ include file="../../system/index/foot2.jsp"%>
  151 +<script src="../static/ace/js/date-time/bootstrap-datepicker.js"></script>
  152 +
  153 + <script language="javascript" src="../static/js/tablescroller.js"></script>
  154 + <script language="javascript" src="../static/js/tablescroller.jquery.js"></script>
  155 +<script type="text/javascript">
  156 +
  157 + $(document).ready(function(){
  158 + window.top.loading.remove();
  159 + $(".table_box").css("padding-top",$(".head_box").height());
  160 +
  161 + var _heigh = $('#mainFrame', parent.document).height()-150;
  162 +
  163 + var options = {
  164 + width: '100%',
  165 + height: _heigh,
  166 + pinnedRows: 1,
  167 + pinnedCols: 5,
  168 + container: "#scrollableTable",
  169 + removeOriginal: true
  170 + };
  171 +
  172 + //$("#simple-table").tablescroller(options);
  173 + });
  174 +
  175 +
  176 +
  177 + function tosearch(){
  178 + window.top.loading.remove();
  179 + $("#Form").submit();
  180 + }
  181 +
  182 + $('#ids').on('click', function(){
  183 + var th_checked = $("#ids").prop('checked');//checkbox inside "TH" table header
  184 +
  185 + $(".table_box .table").find('tbody > tr').each(function(){
  186 + var row = this;
  187 + if(th_checked) $(row).find('input[type=checkbox]').eq(0).prop('checked', true);
  188 + else $(row).find('input[type=checkbox]').eq(0).prop('checked', false);
  189 + });
  190 + });
  191 +
  192 + function del(Id){
  193 + //var remove = new remove();
  194 + window.top.remove.init({"title":"删除","func":function(success){
  195 + if(success){
  196 + var url = "<%=basePath%>paper/delete.do?PAPER_ID="+Id+"&qingsongkao=true&tm="+new Date().getTime();
  197 + window.top.loading.show();
  198 + $.get(url,function(data){
  199 + tosearch();
  200 + });
  201 + }
  202 + else{
  203 + console.log("false");
  204 + }
  205 + }});
  206 + remove.show();
  207 + }
  208 +
  209 + $(function() {
  210 +
  211 + //日期框
  212 + $('.date-picker').datepicker({
  213 + autoclose: true,
  214 + todayHighlight: true
  215 + });
  216 +
  217 + });
  218 +
  219 + function deleteAll(){
  220 + window.top.remove.init({"title":"删除","func":function(success){
  221 + if(success){
  222 + var str = '';
  223 + for(var i=0;i < document.getElementsByName('ids').length;i++){
  224 + if(document.getElementsByName('ids')[i].checked){
  225 + if(str=='') str += document.getElementsByName('ids')[i].value;
  226 + else str += ',' + document.getElementsByName('ids')[i].value;
  227 + }
  228 + }
  229 + if(str==''){
  230 +
  231 + }else{
  232 + $.ajax({
  233 + type: "POST",
  234 + url: '<%=basePath%>paper/deleteAll.do?tm='+new Date().getTime(),
  235 + data: {DATA_IDS:str},
  236 + dataType:'json',
  237 + //beforeSend: validateData,
  238 + cache: false,
  239 + success: function(data){
  240 + $.each(data.list, function(i, list){
  241 + tosearch();
  242 + });
  243 + }
  244 + });
  245 + }
  246 + }
  247 + else{
  248 + console.log("false");
  249 + }
  250 + }});
  251 + window.top.remove.show();
  252 + }
  253 +
  254 + function export1(){
  255 + window.open('<%=basePath%>paper/export1?PAPER_ID=${pd.PAPER_ID}', '_blank');
  256 + }
  257 +
  258 +</script>
  259 +</html>
0 260 \ No newline at end of file
... ...
WebRoot/WEB-INF/jsp/sunvote/paper/test_list2.jsp 0 → 100644
  1 +<%@ page language="java" contentType="text/html; charset=UTF-8"
  2 + pageEncoding="UTF-8"%>
  3 +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  4 +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  5 +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
  6 +<%@ taglib prefix="myelfun" uri="/WEB-INF/tld/elfun.tld"%>
  7 +<%
  8 + String path = request.getContextPath();
  9 + String basePath = request.getScheme() + "://"
  10 + + request.getServerName() + ":" + request.getServerPort() + path + "/";
  11 +%>
  12 +<html lang="zh-CN">
  13 +<head>
  14 +<meta charset="utf-8">
  15 +<meta http-equiv="X-UA-Compatible" content="IE=edge">
  16 +<meta name="viewport" content="width=device-width, initial-scale=1">
  17 +<title>教育管理系统</title>
  18 +
  19 +<!-- Bootstrap -->
  20 +<!-- <link
  21 + href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
  22 + rel="stylesheet"> -->
  23 + <link rel="stylesheet" href="../static/css/bootstrap.min.css" />
  24 +<link href="../static/css/teach.css" rel="stylesheet">
  25 +<link rel="stylesheet" href="../static/ace/css/datepicker.css" />
  26 +<link type="text/css" href="../static/css/tablescroller.css" rel="stylesheet" />
  27 +<script src="../static/js/loading.js"></script>
  28 +<script src="../static/js/remove.js?a=1"></script>
  29 +
  30 +
  31 +<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
  32 +<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
  33 +<!--[if lt IE 9]>
  34 + <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  35 + <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
  36 + <![endif]-->
  37 +</head>
  38 +<body>
  39 +
  40 + <form action="../paper/list4.do" method="post" name="Form" id="Form">
  41 + <div class="head_box">
  42 + <div class="box_header">
  43 + <div class="head_box_l">
  44 + <p>
  45 + <span class="right_b"></span>试卷测验列表
  46 + </p>
  47 + </div>
  48 +
  49 + <div class="head_box_r">
  50 + <button type="button" class="btn btn-primary" onclick="window.history.go(-1)" autocomplete="off">返回</button>
  51 + <button type="button" class="btn btn-primary" onclick="export2()" autocomplete="off">导出</button>
  52 + </div>
  53 +
  54 + <div class="clear"></div>
  55 + </div>
  56 +
  57 + </div>
  58 + <div class="table_box" style="padding:0 5%;background:#fff;">
  59 + <div style="padding:15px 0;background:#fff;" class="paper_title">
  60 + &nbsp;
  61 + 试卷名称:${myelfun:findPaperName(pd.PAPER_ID)}
  62 + </div>
  63 +
  64 + <table id="simple-table"
  65 + class="table table-striped table-bordered table-hover"
  66 + style="margin-top:0px;margin-bottom:0;">
  67 + <thead>
  68 + <tr>
  69 + <th><div style="width:80px">题号</div></th>
  70 + <th><div style="width:80px">答案</div></th>
  71 + <th><div style="width:80px">答题人数</div></th>
  72 + <th><div style="width:80px">正确人数</div></th>
  73 + <th><div style="width:80px">正确率</div></th>
  74 + <th><div style="width:80px">满分值</div></th>
  75 + <th><div style="width:80px">平均分</div></th>
  76 + <c:forEach begin="0" end="${pd.MAX-1}" var="var" varStatus="vs">
  77 + <th><div style="width:80px">选 ${myelfun:jstlInt2Char(var+1)}人数</div></th>
  78 + <th><div style="width:80px">选${myelfun:jstlInt2Char(var+1)}比例</div></th>
  79 + </c:forEach>
  80 + <th><div style="width:80px">漏选人数</div></th>
  81 + <th><div style="width:80px">漏选比例</div></th>
  82 +
  83 + </tr>
  84 + </thead>
  85 + <tbody>
  86 + <c:choose>
  87 + <c:when test="${not empty varList}">
  88 + <c:forEach items="${varList}" var="var" varStatus="vs">
  89 + <tr>
  90 +
  91 + <td>${var.QUESTION_RANK}</td>
  92 + <td>${var.ANSWER}</td>
  93 + <td >${var.ANSWERNUM}</td>
  94 + <td >${var.RIGHTNUM}</td>
  95 + <td >
  96 + <fmt:formatNumber type="number"
  97 + value="${var.ANSWERNUM == 0 ? 0: (var.RIGHTNUM / var.ANSWERNUM * 100)}"
  98 + maxFractionDigits="2" />%
  99 + </td>
  100 + <td >${var.QUESTION_SCORE}</td>
  101 + <td >
  102 + <fmt:formatNumber type="number"
  103 + value="${var.ANSWERNUM == 0 ? 0: (var.RIGHTNUM / var.ANSWERNUM)*var.QUESTION_SCORE}"
  104 + maxFractionDigits="2" />
  105 + </td>
  106 + <c:forEach items="${var.optin_info}" begin="0" end="${pd.MAX}" var="var1" varStatus="vs">
  107 + <td>${var1}</td>
  108 + <td>
  109 + <fmt:formatNumber type="number"
  110 + value="${var.ANSWERNUM == 0 ? 0: (var1 / var.ANSWERNUM * 100)}"
  111 + maxFractionDigits="2" />%
  112 + </td>
  113 + </c:forEach>
  114 +
  115 + </tr>
  116 +
  117 + </c:forEach>
  118 + </c:when>
  119 + <c:otherwise>
  120 + <tr class="main_info">
  121 + <td colspan="100" class="center" >没有相关数据</td>
  122 + </tr>
  123 + </c:otherwise>
  124 + </c:choose>
  125 + </tbody>
  126 + </table>
  127 +
  128 +
  129 +
  130 + <div class="footer">
  131 + <!-- <div class="creat">
  132 + <input type="button" onclick="parent.$('.title_time').modal('show');" value="新建试卷" />
  133 + </div>
  134 + <div class="removeAll">
  135 + <input type="button" onclick="deleteAll()" value="批量删除" />
  136 + </div> -->
  137 + <div class="page_box">
  138 +
  139 + <div class="pagination" style="float: right;padding-top: 0px;margin-top: 0px;">${page.pageStr}</div>
  140 + </div>
  141 + </div>
  142 + </div>
  143 + </form>
  144 +</body>
  145 +
  146 +<%@ include file="../../system/index/foot2.jsp"%>
  147 +<script src="../static/ace/js/date-time/bootstrap-datepicker.js"></script>
  148 +
  149 + <script language="javascript" src="../static/js/tablescroller.js"></script>
  150 + <script language="javascript" src="../static/js/tablescroller.jquery.js"></script>
  151 +<script type="text/javascript">
  152 +
  153 + $(document).ready(function(){
  154 + window.top.loading.remove();
  155 + $(".table_box").css("padding-top",$(".head_box").height());
  156 +
  157 + var _heigh = $('#mainFrame', parent.document).height()-150;
  158 +
  159 + var options = {
  160 + width: '100%',
  161 + height: _heigh,
  162 + pinnedRows: 1,
  163 + pinnedCols: 5,
  164 + container: "#scrollableTable",
  165 + removeOriginal: true
  166 + };
  167 +
  168 + $("#simple-table").tablescroller(options);
  169 + });
  170 +
  171 +
  172 +
  173 + function tosearch(){
  174 + window.top.loading.remove();
  175 + $("#Form").submit();
  176 + }
  177 +
  178 + $('#ids').on('click', function(){
  179 + var th_checked = $("#ids").prop('checked');//checkbox inside "TH" table header
  180 +
  181 + $(".table_box .table").find('tbody > tr').each(function(){
  182 + var row = this;
  183 + if(th_checked) $(row).find('input[type=checkbox]').eq(0).prop('checked', true);
  184 + else $(row).find('input[type=checkbox]').eq(0).prop('checked', false);
  185 + });
  186 + });
  187 +
  188 + function del(Id){
  189 + //var remove = new remove();
  190 + window.top.remove.init({"title":"删除","func":function(success){
  191 + if(success){
  192 + var url = "<%=basePath%>paper/delete.do?PAPER_ID="+Id+"&qingsongkao=true&tm="+new Date().getTime();
  193 + window.top.loading.show();
  194 + $.get(url,function(data){
  195 + tosearch();
  196 + });
  197 + }
  198 + else{
  199 + console.log("false");
  200 + }
  201 + }});
  202 + remove.show();
  203 + }
  204 +
  205 + $(function() {
  206 +
  207 + //日期框
  208 + $('.date-picker').datepicker({
  209 + autoclose: true,
  210 + todayHighlight: true
  211 + });
  212 +
  213 + });
  214 +
  215 + function deleteAll(){
  216 + window.top.remove.init({"title":"删除","func":function(success){
  217 + if(success){
  218 + var str = '';
  219 + for(var i=0;i < document.getElementsByName('ids').length;i++){
  220 + if(document.getElementsByName('ids')[i].checked){
  221 + if(str=='') str += document.getElementsByName('ids')[i].value;
  222 + else str += ',' + document.getElementsByName('ids')[i].value;
  223 + }
  224 + }
  225 + if(str==''){
  226 +
  227 + }else{
  228 + $.ajax({
  229 + type: "POST",
  230 + url: '<%=basePath%>paper/deleteAll.do?tm='+new Date().getTime(),
  231 + data: {DATA_IDS:str},
  232 + dataType:'json',
  233 + //beforeSend: validateData,
  234 + cache: false,
  235 + success: function(data){
  236 + $.each(data.list, function(i, list){
  237 + tosearch();
  238 + });
  239 + }
  240 + });
  241 + }
  242 + }
  243 + else{
  244 + console.log("false");
  245 + }
  246 + }});
  247 + window.top.remove.show();
  248 + }
  249 + function export2(){
  250 + window.open("<%=basePath%>paper/export2?PAPER_ID=${pd.PAPER_ID}&TESTPAPER_ID=${pd.TESTPAPER_ID}","_blank");
  251 + }
  252 +
  253 +</script>
  254 +</html>
0 255 \ No newline at end of file
... ...
WebRoot/WEB-INF/jsp/sunvote/subject/subject_list2.jsp
... ... @@ -16,7 +16,6 @@
16 16 <link rel="stylesheet" href="static/ace/css/chosen.css" />
17 17 <!-- jsp文件头和头部 -->
18 18  
19   -<link href="../static/css/teach.css" rel="stylesheet">
20 19 <!-- 日期框 -->
21 20 <link rel="stylesheet" href="static/ace/css/datepicker.css" />
22 21 <!-- <link
... ... @@ -24,6 +23,10 @@
24 23 rel="stylesheet"> -->
25 24 <link rel="stylesheet" href="static/css/bootstrap.min.css" />
26 25 <link href="static/css/teach.css" rel="stylesheet">
  26 +<style type="text/css">
  27 + #remove{
  28 + background:#ccc}
  29 +</style>
27 30 </head>
28 31 <body class="no-skin">
29 32 <form action="subject/listcs.do" method="post" name="Form" id="Form">
... ... @@ -68,7 +71,7 @@
68 71 <c:when test="${not empty varList}">
69 72 <c:forEach items="${varList}" var="var" varStatus="vs">
70 73 <tr>
71   - <td><input type="checkbox" name='ids' id="ids"
  74 + <td><input type="checkbox" name='ids' class="ids"
72 75 value="${var.ID}" />${vs.index+1}</td>
73 76 <td class='center'>${var.CNAME}</td>
74 77 <td class='center'>${var.ENAME}</td>
... ... @@ -91,7 +94,7 @@
91 94 <input type="button" onclick="add()" value="添加科目" />
92 95 </div>
93 96 <div class="removeAll">
94   - <input type="button" onclick="del()" value="移除科目" />
  97 + <input type="button" onclick="del()" disabled id="remove" value="移除科目" />
95 98 </div>
96 99 <div class="page_box">
97 100  
... ... @@ -179,6 +182,32 @@
179 182 });
180 183 window.top.modal.show();
181 184 }
  185 + $('#ids').on('click', function(){
  186 + var th_checked = $("#ids").prop('checked');//checkbox inside "TH" table header
  187 +
  188 + $(".table_box .table").find('tbody > tr').each(function(){
  189 + var row = this;
  190 + if(th_checked) $(row).find('input[type=checkbox]').eq(0).prop('checked', true);
  191 + else $(row).find('input[type=checkbox]').eq(0).prop('checked', false);
  192 + });
  193 + });
  194 +
  195 + $("input[type=checkbox]").on('click',function(){
  196 + var str = '';
  197 + for(var i=0;i < document.getElementsByName('ids').length;i++){
  198 + if(document.getElementsByName('ids')[i].checked){
  199 + if(str=='') str += document.getElementsByName('ids')[i].value;
  200 + else str += ',' + document.getElementsByName('ids')[i].value;
  201 + }
  202 + }
  203 + if(str==''){
  204 + $("#remove").attr("disabled","disabled");
  205 + $("#remove").css("background","#ccc");
  206 + }else{
  207 + $("#remove").removeAttr("disabled");
  208 + $("#remove").css("background","#f29c9f");
  209 + }
  210 + })
182 211 </script>
183 212  
184 213  
... ...
WebRoot/WEB-INF/jsp/sunvote/teacher/teacher_main.jsp
... ... @@ -27,6 +27,11 @@
27 27 <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
28 28 <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
29 29 <![endif]-->
  30 + <style>
  31 + .menu_2 .active{
  32 + background:#000;
  33 + }
  34 +</style>
30 35 </head>
31 36 <body>
32 37 <div class="header">
... ... @@ -284,6 +289,10 @@
284 289 if (defaultUrl != '' && defaultUrl != '') {
285 290 $("#mainFrame").attr('src', defaultUrl);
286 291 }
  292 + $(".menu_2 li").click(function(){
  293 + $(".active").removeClass("active");
  294 + $(this).addClass("active");
  295 + })
287 296 </script>
288 297 </body>
289 298 </html>
290 299 \ No newline at end of file
... ...
WebRoot/WEB-INF/jsp/sunvote/teacher/teacher_report_1.jsp
... ... @@ -82,7 +82,7 @@
82 82 <th class="center"><div style="width:80px;">课程总分</div></th>
83 83 <c:forEach items="${testpaperList}" var="var" varStatus="vs">
84 84 <th class="center kc"><a
85   - onclick="paper('${info.CLASS_ID}','${var.TESTPAPER_ID}');"><div style="width:180px; margin: 0 auto;cursor:hand" class="font">${var.NAME}</br><span>${var.CREATE_DATE}</span></div></a></th>
  85 + onclick="paper('${info.CLASS_ID}','${var.TESTPAPER_ID}');"><div style="width:180px; margin: 0 auto;cursor:hand" class="font"><div style="width:100%;overflow:hidden;text-overflow:ellipsis;white-space: nowrap;">${var.NAME}</div><span>${var.CREATE_DATE}</span></div></a></th>
86 86 </c:forEach>
87 87 </tr>
88 88 </thead>
... ... @@ -239,6 +239,16 @@
239 239 var url = "<%=basePath%>report/report.do?classid=${info.CLASS_ID}" ;
240 240 var startDate = $("#lastStart").val();
241 241 var endDate = $("#lastEnd").val();
  242 + var temp="";
  243 + var sd = parseInt(startDate.replace(/-/g,""));
  244 + var ed = parseInt(endDate.replace(/-/g,""));
  245 + if(sd>ed){
  246 + temp = startDate;
  247 + startDate = endDate;
  248 + endDate = temp;
  249 + }
  250 + $("#lastStart").val(startDate);
  251 + $("#lastEnd").val(endDate);
242 252 var subject_id = $("#SUBJECT_ID").val();
243 253 url = url + "&start_date=" + startDate ;
244 254 if(endDate != null){
... ...
WebRoot/WEB-INF/tld/elfun.tld
... ... @@ -146,7 +146,7 @@
146 146 <description>数字转字符</description><!-- 对该标签的说明 -->
147 147 <name>jstlInt2Char</name><!-- 定义标签名,放在短标签之后 -->
148 148 <function-class>com.fh.controller.sunvote.Myelfun</function-class><!-- 标签处理域值的类路径 -->
149   - <function-signature>java.lang.String findSoftwareName(int)</function-signature><!-- 标签处理域值的具体的类方法 -->
  149 + <function-signature>java.lang.String jstlInt2Char(int)</function-signature><!-- 标签处理域值的具体的类方法 -->
150 150 <example>${myelfun:jstlInt2Char(obj1)}</example><!-- 自定义标签的使用示范 ,域参数会自动传递到具体的方法里面-->
151 151 </function>
152 152  
... ...
WebRoot/static/files/Template.xls
No preview for this file type
WebRoot/static/files/Template1.xls
No preview for this file type
WebRoot/static/images/fail.png 0 → 100644

30.2 KB

resources/mybatis1/sunvote/StudentMapper.xml
... ... @@ -108,6 +108,16 @@
108 108 NAME = #{NAME}
109 109 </select>
110 110  
  111 + <!-- 通过ID获取数据 -->
  112 + <select id="countByClassId" parameterType="String" resultType="Integer">
  113 + select
  114 + count(0)
  115 + from
  116 + <include refid="tableName"></include>
  117 + where
  118 + CLASS_ID = #{classid}
  119 + </select>
  120 +
111 121 <!-- 列表 -->
112 122 <select id="datalistPage" parameterType="page" resultType="pd">
113 123 select
... ...
src/com/fh/controller/api/V1.java
... ... @@ -551,10 +551,13 @@ public class V1 extends BaseController {
551 551 PageData p = teacherService.findById2(pd.get("USER_ID").toString());
552 552 if(p != null){
553 553 pd.put("SCHOOL_ID", p.get("SCHOOL_ID"));
554   - pd.remove("USER_ID");
  554 + //pd.remove("USER_ID");
555 555 }else{
556 556 pd.put("SCHOOL_ID", "");
557 557 }
  558 + if(pd.getString("PAPER_TYPE").equals("2")){
  559 + pd.remove("USER_ID");
  560 + }
558 561 List<PageData> pageList = paperService.listAllByType(pd);
559 562 res.setData(pageList);
560 563 } else {
... ...
src/com/fh/controller/sunvote/Myelfun.java
... ... @@ -351,6 +351,6 @@ public class Myelfun {
351 351 }
352 352  
353 353 public static String jstlInt2Char(int i){
354   - return "" + ('A' + (i - 1));
  354 + return "" + (char)('A' + (i - 1));
355 355 }
356 356 }
... ...
src/com/fh/controller/sunvote/paper/PaperController.java
... ... @@ -2,8 +2,12 @@ package com.fh.controller.sunvote.paper;
2 2  
3 3 import java.io.PrintWriter;
4 4 import java.text.DateFormat;
  5 +import java.text.DecimalFormat;
5 6 import java.text.SimpleDateFormat;
6 7 import java.util.ArrayList;
  8 +import java.util.Arrays;
  9 +import java.util.Collections;
  10 +import java.util.Comparator;
7 11 import java.util.Date;
8 12 import java.util.HashMap;
9 13 import java.util.List;
... ... @@ -20,9 +24,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
20 24 import org.springframework.web.bind.annotation.ResponseBody;
21 25 import org.springframework.web.servlet.ModelAndView;
22 26  
  27 +import com.alibaba.druid.support.json.JSONUtils;
23 28 import com.fh.bean.Paper;
24 29 import com.fh.bean.Question;
  30 +import com.fh.controller.api.ResponseGson;
25 31 import com.fh.controller.base.BaseController;
  32 +import com.fh.controller.sunvote.Myelfun;
26 33 import com.fh.entity.Page;
27 34 import com.fh.entity.system.User;
28 35 import com.fh.service.api.V1Manager;
... ... @@ -31,6 +38,12 @@ import com.fh.service.sunvote.paper.PaperManager;
31 38 import com.fh.service.sunvote.paperquestion.PaperQuestionManager;
32 39 import com.fh.service.sunvote.question.QuestionManager;
33 40 import com.fh.service.sunvote.schoolgradesubject.SchoolGradeSubjectManager;
  41 +import com.fh.service.sunvote.sclass.SClassManager;
  42 +import com.fh.service.sunvote.sclass.impl.SClassService;
  43 +import com.fh.service.sunvote.student.StudentManager;
  44 +import com.fh.service.sunvote.studenttest.StudentTestManager;
  45 +import com.fh.service.sunvote.testpaper.TestPaperManager;
  46 +import com.fh.service.sunvote.testpaperinfo.TestPaperInfoManager;
34 47 import com.fh.util.AppUtil;
35 48 import com.fh.util.Const;
36 49 import com.fh.util.Jurisdiction;
... ... @@ -49,6 +62,15 @@ public class PaperController extends BaseController {
49 62 @Resource(name="paperService")
50 63 private PaperManager paperService;
51 64  
  65 + @Resource(name="testpaperService")
  66 + private TestPaperManager testpaperService;
  67 +
  68 + @Resource(name="testpaperinfoService")
  69 + private TestPaperInfoManager testpaperinfoService;
  70 +
  71 + @Resource(name="studentService")
  72 + private StudentManager stundentService;
  73 +
52 74 @Resource(name="paperquestionService")
53 75 private PaperQuestionManager paperquestionService;
54 76  
... ... @@ -64,6 +86,12 @@ public class PaperController extends BaseController {
64 86 @Resource(name="pagetemplateService")
65 87 private PageTemplateManager pagetemplateService;
66 88  
  89 + @Resource(name="studenttestService")
  90 + private StudentTestManager studenttestService;
  91 +
  92 + @Resource(name="sclassService")
  93 + private SClassManager sclassService;
  94 +
67 95 /**保存
68 96 * @param
69 97 * @throws Exception
... ... @@ -164,6 +192,403 @@ public class PaperController extends BaseController {
164 192 return mv;
165 193 }
166 194  
  195 + @RequestMapping(value="/paperRep")
  196 + public ModelAndView paperRep() throws Exception{
  197 + ModelAndView mv = this.getModelAndView();
  198 + PageData pd = new PageData();
  199 + List<PageData> templist = new ArrayList<PageData>();
  200 + PageData saveData = new PageData();
  201 +
  202 + ResponseGson<PageData> res = new ResponseGson();
  203 + pd = this.getPageData();
  204 + if(pd.containsKey("PAPER_ID")){
  205 + List<PageData> list = testpaperService.listAll(pd);
  206 +
  207 + pd.put("testpaperlist", list);
  208 + for(int i = 0 ;i<list.size();i++){
  209 + PageData data = new PageData();
  210 +
  211 + PageData pdtemp = new PageData();
  212 + pdtemp.put("CLASS_ID", list.get(i).get("SCLASS_ID").toString());
  213 + List<PageData> studentlist = stundentService.listAllClass(pdtemp);
  214 + data.put("testpaper_id", list.get(i).get("TESTPAPER_ID"));
  215 + data.put("student_num", studentlist.size());
  216 + data.put("creat_time", list.get(i).get("CREATE_DATE"));
  217 + data.put("avg_score", list.get(i).get("AVG_SCORE"));
  218 + data.put("class_id", list.get(i).get("SCLASS_ID"));
  219 + pdtemp.put("TEST_ID", list.get(i).get("TESTPAPER_ID"));
  220 + List<PageData> l = studenttestService.listAll(pdtemp);
  221 +
  222 + Integer you = 0;
  223 + Integer liang = 0;
  224 + Integer jige = 0;
  225 + Integer difen = 0;
  226 + Float total = Float.valueOf(list.get(i).get("TOTAL_SCORE").toString());
  227 +
  228 + for(int j = 0; j<l.size();j++){
  229 + Float score = Float.valueOf(l.get(j).get("SCORE").toString());
  230 + if(total != 0){
  231 + if(score/total>=0.8){
  232 + you++;
  233 + }else if(score/total>=0.7){
  234 + liang++;
  235 + }else if(score/total>=0.6){
  236 + jige++;
  237 + }else if(score/total<0.3){
  238 + difen++;
  239 + }
  240 + }
  241 +
  242 + }
  243 +
  244 + data.put("you",you);
  245 + data.put("liang",liang);
  246 + data.put("jige",jige);
  247 + data.put("difen",difen);
  248 +
  249 + templist.add(data);
  250 + }
  251 + }
  252 + saveData.put("list", templist);
  253 +
  254 + mv.setViewName("sunvote/paper/test_list1");
  255 + mv.addObject("varList", templist);
  256 + mv.addObject("pd",pd);
  257 + res.setData(saveData);
  258 + return mv;
  259 + }
  260 +
  261 + @RequestMapping(value="/export1")
  262 + public ModelAndView export1() throws Exception{
  263 + ModelAndView mv = this.getModelAndView();
  264 + PageData pd = new PageData();
  265 + List<PageData> templist = new ArrayList<PageData>();
  266 + PageData saveData = new PageData();
  267 +
  268 + ResponseGson<PageData> res = new ResponseGson();
  269 + pd = this.getPageData();
  270 + if(pd.containsKey("PAPER_ID")){
  271 + List<PageData> list = testpaperService.listAll(pd);
  272 +
  273 + pd.put("testpaperlist", list);
  274 + for(int i = 0 ;i<list.size();i++){
  275 + PageData data = new PageData();
  276 +
  277 + PageData pdtemp = new PageData();
  278 + pdtemp.put("CLASS_ID", list.get(i).get("SCLASS_ID").toString());
  279 + List<PageData> studentlist = stundentService.listAllClass(pdtemp);
  280 + data.put("testpaper_id", list.get(i).get("TESTPAPER_ID"));
  281 + data.put("student_num", studentlist.size());
  282 + data.put("creat_time", list.get(i).get("CREATE_DATE"));
  283 + data.put("avg_score", list.get(i).get("AVG_SCORE"));
  284 + data.put("class_id", list.get(i).get("SCLASS_ID"));
  285 + pdtemp.put("TEST_ID", list.get(i).get("TESTPAPER_ID"));
  286 + List<PageData> l = studenttestService.listAll(pdtemp);
  287 +
  288 + Integer you = 0;
  289 + Integer liang = 0;
  290 + Integer jige = 0;
  291 + Integer difen = 0;
  292 + Float total = Float.valueOf(list.get(i).get("TOTAL_SCORE").toString());
  293 +
  294 + for(int j = 0; j<l.size();j++){
  295 + Float score = Float.valueOf(l.get(j).get("SCORE").toString());
  296 + if(total != 0){
  297 + if(score/total>=0.8){
  298 + you++;
  299 + }else if(score/total>=0.7){
  300 + liang++;
  301 + }else if(score/total>=0.6){
  302 + jige++;
  303 + }else if(score/total<0.3){
  304 + difen++;
  305 + }
  306 + }
  307 +
  308 + }
  309 +
  310 + data.put("you",you);
  311 + data.put("liang",liang);
  312 + data.put("jige",jige);
  313 + data.put("difen",difen);
  314 +
  315 + templist.add(data);
  316 + }
  317 + }
  318 +
  319 + Map<String,Object> dataMap = new HashMap<String,Object>();
  320 + List<String> titles = new ArrayList<String>();
  321 + titles.add("序号"); //1
  322 + titles.add("班级名称"); //2
  323 + titles.add("考试时间"); //3
  324 + titles.add("平均分"); //4
  325 + titles.add("班级总人数"); //5
  326 + titles.add("优秀人数"); //6
  327 + titles.add("优秀率"); //7
  328 + titles.add("良好人数"); //8
  329 + titles.add("良好率"); //9
  330 + titles.add("及格人数"); //10
  331 + titles.add("及格率"); //11
  332 + titles.add("低分人数"); //12
  333 + titles.add("低分率"); //13
  334 + dataMap.put("titles", titles);
  335 + List<PageData> varOList = templist;
  336 + List<PageData> varList = new ArrayList<PageData>();
  337 + DecimalFormat decimalFormat=new DecimalFormat("0.00");
  338 + for(int i=0;i<varOList.size();i++){
  339 + PageData vpd = new PageData();
  340 + vpd.put("ID", varOList.get(i).getString("class_id"));
  341 + PageData c = sclassService.findById(vpd);
  342 + vpd.remove("ID");
  343 +
  344 + Integer you = Integer.valueOf(varOList.get(i).getString("you"));
  345 + Integer liang = Integer.valueOf(varOList.get(i).getString("liang"));
  346 + Integer jige = Integer.valueOf(varOList.get(i).getString("jige"));
  347 + Integer difen = Integer.valueOf(varOList.get(i).getString("difen"));
  348 + Integer student_num = Integer.valueOf(varOList.get(i).getString("student_num"));
  349 +
  350 +
  351 + vpd.put("var1", i+1); //1
  352 + vpd.put("var2", c.getString("CLASS_NAME")); //2
  353 + vpd.put("var3", varOList.get(i).getString("creat_time")); //3
  354 + vpd.put("var4", varOList.get(i).getString("avg_score")); //4
  355 + vpd.put("var5", student_num); //5
  356 + vpd.put("var6", you); //6
  357 + vpd.put("var7", student_num==0?0:decimalFormat.format(you*100/student_num)+"%"); //7
  358 + vpd.put("var8", liang); //8
  359 + vpd.put("var9", student_num==0?0:decimalFormat.format(liang*100/student_num)+"%"); //9
  360 + vpd.put("var10", jige); //10
  361 + vpd.put("var11", student_num==0?0:decimalFormat.format(jige*100/student_num)+"%"); //11
  362 + vpd.put("var12", difen); //12
  363 + vpd.put("var13", student_num==0?0:decimalFormat.format(difen*100/student_num)+"%"); //13
  364 + varList.add(vpd);
  365 + }
  366 + dataMap.put("varList", varList);
  367 + ObjectExcelView erv = new ObjectExcelView();
  368 + mv = new ModelAndView(erv,dataMap);
  369 + return mv;
  370 + }
  371 + @RequestMapping(value="/paperRep2")
  372 + public ModelAndView paperRep2() throws Exception{
  373 + ModelAndView mv = this.getModelAndView();
  374 + PageData pd = new PageData();
  375 + List<PageData> templist = new ArrayList<PageData>();
  376 + PageData saveData = new PageData();
  377 +
  378 + ResponseGson<PageData> res = new ResponseGson();
  379 + pd = this.getPageData();
  380 + if(pd.containsKey("PAPER_ID")){
  381 + List<PageData> list = paperquestionService.listAll(pd);
  382 + List<PageData> test = new ArrayList<PageData>();
  383 + int onum[] = new int[list.size()];
  384 +
  385 + for(int i = 0;i<list.size();i++){
  386 + PageData temp = new PageData();
  387 + String questionid = list.get(i).get("QUESTION_ID").toString();
  388 +
  389 + if(list.get(i).get("NO_NAME")==null||list.get(i).get("NO_NAME").toString().isEmpty()){
  390 + continue;
  391 + }
  392 + Float que_score = Float.valueOf(list.get(i).get("SCORE").toString());
  393 + temp.put("QUESTION_ID", questionid);
  394 + PageData question = questionService.findById(temp);
  395 + temp.put("ANSWER",question.get("ANSWER").toString());
  396 + temp.put("QUESTION_RANK", list.get(i).get("RANK").toString());
  397 + temp.put("QUESTION_SCORE", que_score);
  398 +
  399 + PageData que = questionService.findById(temp);
  400 + Integer option_num = 0;
  401 + if(!que.get("OPTION_NUM").toString().isEmpty()){
  402 + option_num = Integer.valueOf(que.get("OPTION_NUM").toString());
  403 + onum[i]=option_num;
  404 + }
  405 +
  406 + temp.put("TEST_ID", pd.get("TESTPAPER_ID"));
  407 + List<PageData> queInfo = testpaperinfoService.listTestPaperQuestionIDinfo(temp);
  408 + int answer[] = new int[option_num+1];
  409 + int right = 0;
  410 + for(int j=0;j<queInfo.size();j++){
  411 + if(queInfo.get(j).get("RIGHT")!=null&&!queInfo.get(j).get("RIGHT").toString().isEmpty()){
  412 + if(queInfo.get(j).get("RIGHT").toString().equals("1")){
  413 + right++;
  414 + }
  415 + }
  416 + if(queInfo.get(j).get("ANSWER")!=null&&!queInfo.get(j).get("ANSWER").toString().isEmpty()){
  417 + for(int o=0;o<option_num;o++ ){
  418 + String s = String.valueOf((char)(65+o)) ;
  419 + if(queInfo.get(j).get("ANSWER").toString().equals(s)){
  420 + answer[o]++;
  421 + }
  422 + }
  423 + }
  424 + else{
  425 + answer[option_num]++;
  426 + }
  427 + }
  428 + temp.put("RIGHTNUM", right);
  429 + temp.put("ANSWERNUM",queInfo.size());
  430 + temp.put("optin_info", answer);
  431 + templist.add(temp);
  432 + }
  433 + Arrays.sort(onum);
  434 + int max = onum[onum.length-1];
  435 + pd.put("MAX",max);
  436 + }
  437 +
  438 + Collections.sort(templist,new Comparator<PageData>(){
  439 +
  440 + @Override
  441 + public int compare(PageData o1, PageData o2) {
  442 + Integer o1GetScore = Integer.valueOf(o1.getString("QUESTION_RANK"));
  443 + Integer o2GetScore = Integer.valueOf(o2.getString("QUESTION_RANK"));
  444 + return o1GetScore.compareTo(o2GetScore);
  445 + }
  446 +
  447 + });
  448 + mv.setViewName("sunvote/paper/test_list2");
  449 + mv.addObject("varList", templist);
  450 + mv.addObject("pd",pd);
  451 + res.setData(saveData);
  452 + return mv;
  453 + }
  454 +
  455 + @RequestMapping(value="/export2")
  456 + public ModelAndView export2() throws Exception{
  457 + ModelAndView mv = this.getModelAndView();
  458 + PageData pd = new PageData();
  459 + List<PageData> templist = new ArrayList<PageData>();
  460 + PageData saveData = new PageData();
  461 +
  462 + ResponseGson<PageData> res = new ResponseGson();
  463 + pd = this.getPageData();
  464 + if(pd.containsKey("PAPER_ID")){
  465 + List<PageData> list = paperquestionService.listAll(pd);
  466 + List<PageData> test = new ArrayList<PageData>();
  467 + int onum[] = new int[list.size()];
  468 +
  469 + for(int i = 0;i<list.size();i++){
  470 + PageData temp = new PageData();
  471 + String questionid = list.get(i).get("QUESTION_ID").toString();
  472 +
  473 + if(list.get(i).get("NO_NAME")==null||list.get(i).get("NO_NAME").toString().isEmpty()){
  474 + continue;
  475 + }
  476 + Float que_score = Float.valueOf(list.get(i).get("SCORE").toString());
  477 + temp.put("QUESTION_ID", questionid);
  478 + PageData question = questionService.findById(temp);
  479 + temp.put("ANSWER",question.get("ANSWER").toString());
  480 + temp.put("QUESTION_RANK", list.get(i).get("RANK").toString());
  481 + temp.put("QUESTION_SCORE", que_score);
  482 +
  483 + PageData que = questionService.findById(temp);
  484 + Integer option_num = 0;
  485 + if(!que.get("OPTION_NUM").toString().isEmpty()){
  486 + option_num = Integer.valueOf(que.get("OPTION_NUM").toString());
  487 + onum[i]=option_num;
  488 + }
  489 +
  490 + temp.put("TEST_ID", pd.get("TESTPAPER_ID"));
  491 + List<PageData> queInfo = testpaperinfoService.listTestPaperQuestionIDinfo(temp);
  492 + int answer[] = new int[option_num+1];
  493 + int right = 0;
  494 + for(int j=0;j<queInfo.size();j++){
  495 + if(queInfo.get(j).get("RIGHT")!=null&&!queInfo.get(j).get("RIGHT").toString().isEmpty()){
  496 + if(queInfo.get(j).get("RIGHT").toString().equals("1")){
  497 + right++;
  498 + }
  499 + }
  500 + if(queInfo.get(j).get("ANSWER")!=null&&!queInfo.get(j).get("ANSWER").toString().isEmpty()){
  501 + for(int o=0;o<option_num;o++ ){
  502 + String s = String.valueOf((char)(65+o)) ;
  503 + if(queInfo.get(j).get("ANSWER").toString().equals(s)){
  504 + answer[o]++;
  505 + }
  506 + }
  507 + }
  508 + else{
  509 + answer[option_num]++;
  510 + }
  511 + }
  512 + temp.put("RIGHTNUM", right);
  513 + temp.put("ANSWERNUM",queInfo.size());
  514 + temp.put("optin_info", JSONUtils.toJSONString(answer));
  515 + templist.add(temp);
  516 + }
  517 + Arrays.sort(onum);
  518 + int max = onum[onum.length-1];
  519 + pd.put("MAX",max);
  520 + }
  521 +
  522 + Collections.sort(templist,new Comparator<PageData>(){
  523 +
  524 + @Override
  525 + public int compare(PageData o1, PageData o2) {
  526 + Integer o1GetScore = Integer.valueOf(o1.getString("QUESTION_RANK"));
  527 + Integer o2GetScore = Integer.valueOf(o2.getString("QUESTION_RANK"));
  528 + return o1GetScore.compareTo(o2GetScore);
  529 + }
  530 +
  531 + });
  532 +
  533 +
  534 +// mv.addObject("varList", templist);
  535 +// mv.addObject("pd",pd);
  536 +
  537 + Map<String,Object> dataMap = new HashMap<String,Object>();
  538 + List<String> titles = new ArrayList<String>();
  539 + titles.add("题号"); //1
  540 + titles.add("答案"); //2
  541 + titles.add("答题人数"); //3
  542 + titles.add("正确人数"); //4
  543 + titles.add("正确率"); //5
  544 + titles.add("满分值"); //6
  545 + titles.add("平均分"); //7
  546 + Integer max = Integer.valueOf(pd.getString("MAX"));
  547 + for(int x = 0 ;x<max;x++){
  548 + titles.add("选"+Myelfun.jstlInt2Char(x+1)+"人数"); //8
  549 + titles.add("选"+Myelfun.jstlInt2Char(x+1)+"比例"); //9
  550 + }
  551 + titles.add("漏选人数"); //10
  552 + titles.add("漏选比例"); //11
  553 + dataMap.put("titles", titles);
  554 + List<PageData> varOList = templist;
  555 + List<PageData> varList = new ArrayList<PageData>();
  556 + DecimalFormat decimalFormat=new DecimalFormat("0.00");
  557 + for(int i=0;i<varOList.size();i++){
  558 + PageData vpd = new PageData();
  559 +
  560 + vpd.put("var1", varOList.get(i).getString("QUESTION_RANK")); //1
  561 + vpd.put("var2", varOList.get(i).getString("ANSWER")); //2
  562 + vpd.put("var3", varOList.get(i).getString("ANSWERNUM")); //3
  563 + vpd.put("var4", varOList.get(i).getString("RIGHTNUM")); //4
  564 + vpd.put("var5", decimalFormat.format(Integer.valueOf(varOList.get(i).getString("RIGHTNUM"))*100/Integer.valueOf(varOList.get(i).getString("ANSWERNUM")))+"%"); //5
  565 + vpd.put("var6", varOList.get(i).getString("QUESTION_SCORE")); //6
  566 + vpd.put("var7", decimalFormat.format(Integer.valueOf(varOList.get(i).getString("RIGHTNUM"))*Float.valueOf(varOList.get(i).getString("QUESTION_SCORE"))/Integer.valueOf(varOList.get(i).getString("ANSWERNUM")))); //7
  567 + String s = varOList.get(i).get("optin_info").toString();
  568 + s = s.replace("[", "");
  569 + s = s.replace("]", "");
  570 + List<String> optoin = Arrays.asList(s.split(","));
  571 + for(int y = 0 ;y<max;y++){
  572 + Integer nn = Integer.valueOf(optoin.get(y));
  573 + nn = (nn==null?0:nn);
  574 + vpd.put("var"+(8+2*y), nn); //8
  575 + vpd.put("var"+(9+2*y), decimalFormat.format(nn*100/Integer.valueOf(varOList.get(i).getString("ANSWERNUM")))+"%"); //9
  576 +
  577 + }
  578 +
  579 + vpd.put("var"+(max*2+8), Integer.valueOf(optoin.get(max))); //8
  580 + vpd.put("var"+(max*2+9), decimalFormat.format(Integer.valueOf(optoin.get(max))*100/Integer.valueOf(varOList.get(i).getString("ANSWERNUM")))+"%"); //9
  581 +
  582 + varList.add(vpd);
  583 + }
  584 + dataMap.put("varList", varList);
  585 + ObjectExcelView erv = new ObjectExcelView();
  586 + mv = new ModelAndView(erv,dataMap);
  587 +
  588 +
  589 + return mv;
  590 + }
  591 +
167 592 @RequestMapping(value="/iteminfo")
168 593 public ModelAndView iteminfo() throws Exception{
169 594 logBefore(logger, Jurisdiction.getUsername()+"Paper详细信息");
... ... @@ -336,17 +761,17 @@ public class PaperController extends BaseController {
336 761 try{
337 762 int et = Integer.parseInt(examTime);
338 763 String min = (et / 60 ) + "" ;
339   - if(min.length() < 2){
340   - min = "0" + min ;
341   - }
  764 +// if(min.length() < 2){
  765 +// min = "0" + min ;
  766 +// }
342 767 String sec = (et % 60 ) + "" ;
343 768 if(sec.length() < 2){
344 769 sec = "0" + sec ;
345 770 }
346   - if(et > 60){
347   - examTime = min + ":" + sec;
  771 + if(et >= 60){
  772 + examTime = min + "时" + sec+"分";
348 773 }else{
349   - examTime = "00:" + sec;
  774 + examTime = "0时" + sec+"分";
350 775 }
351 776 }catch(Exception e){
352 777 e.printStackTrace();
... ... @@ -397,24 +822,24 @@ public class PaperController extends BaseController {
397 822 try{
398 823 int et = Integer.parseInt(examTime);
399 824 String min = (et / 60 ) + "" ;
400   - if(min.length() < 2){
401   - min = "0" + min ;
402   - }
  825 +// if(min.length() < 2){
  826 +// min = "0" + min ;
  827 +// }
403 828 String sec = (et % 60 ) + "" ;
404 829 if(sec.length() < 2){
405 830 sec = "0" + sec ;
406 831 }
407   - if(et > 60){
408   - examTime = min + ":" + sec;
  832 + if(et >= 60){
  833 + examTime = min + "时" + sec +"分";
409 834 }else{
410   - examTime = "00:" + sec;
  835 + examTime = "0时" + sec + "分";
411 836 }
412 837 }catch(Exception e){
413 838 e.printStackTrace();
414 839 }
415 840 }
416 841 if(examTime == null){
417   - examTime = "00:00";
  842 + examTime = "0";
418 843 }
419 844 p.put("EXAM_TIME", examTime);
420 845 }
... ... @@ -465,24 +890,24 @@ public class PaperController extends BaseController {
465 890 try{
466 891 int et = Integer.parseInt(examTime);
467 892 String min = (et / 60 ) + "" ;
468   - if(min.length() < 2){
469   - min = "0" + min ;
470   - }
  893 +// if(min.length() < 2){
  894 +// min = "0" + min ;
  895 +// }
471 896 String sec = (et % 60 ) + "" ;
472 897 if(sec.length() < 2){
473 898 sec = "0" + sec ;
474 899 }
475   - if(et > 60){
476   - examTime = min + ":" + sec;
  900 + if(et >= 60){
  901 + examTime = min + "时" + sec+"分";
477 902 }else{
478   - examTime = "00:" + sec;
  903 + examTime = "0时" + sec+"分";
479 904 }
480 905 }catch(Exception e){
481 906 e.printStackTrace();
482 907 }
483 908 }
484 909 if(examTime == null){
485   - examTime = "00:00";
  910 + examTime = "0";
486 911 }
487 912 p.put("EXAM_TIME", examTime);
488 913 }
... ... @@ -521,24 +946,24 @@ public class PaperController extends BaseController {
521 946 try{
522 947 int et = Integer.parseInt(examTime);
523 948 String min = (et / 60 ) + "" ;
524   - if(min.length() < 2){
525   - min = "0" + min ;
526   - }
  949 +// if(min.length() < 2){
  950 +// min = "0" + min ;
  951 +// }
527 952 String sec = (et % 60 ) + "" ;
528 953 if(sec.length() < 2){
529 954 sec = "0" + sec ;
530 955 }
531 956 if(et > 60){
532   - examTime = min + ":" + sec;
  957 + examTime = min + "时" + sec+"分";
533 958 }else{
534   - examTime = "00:" + sec;
  959 + examTime = "0时" + sec+"分";
535 960 }
536 961 }catch(Exception e){
537 962 e.printStackTrace();
538 963 }
539 964 }
540 965 if(examTime == null){
541   - examTime = "00:00";
  966 + examTime = "0";
542 967 }
543 968 p.put("EXAM_TIME", examTime);
544 969 }
... ...
src/com/fh/controller/sunvote/student/StudentController.java
... ... @@ -147,12 +147,17 @@ public class StudentController extends BaseController {
147 147 for(int i = 1 ; i < listPd.size();i++){
148 148 PageData savePd = new PageData();
149 149 PageData temp = listPd.get(i);
150   - for(int j = 0 ; ;j++){
151   - if(temp.get("var" + j) == null){
152   - break ;
153   - }
  150 + for(int j = 0 ;j<3 ;j++){
  151 +// if(temp.get("var" + j) == null){
  152 +// break ;
  153 +// }
154 154 if(temp.get("var" + j) != null && !"".equals(temp.get("var" + j).toString())){
155 155 savePd.put(pd.getString("var" + j).toUpperCase(), temp.get("var" + j));
  156 + }else{
  157 + mv.addObject("msg","本次成功导入"+(i-1>=0?i-1:0)+"条数据,第"+i+"行有空数据");
  158 + mv.addObject("state","fail");
  159 + mv.setViewName("save_result2");
  160 + return mv;
156 161 }
157 162 }
158 163 if(!savePd.containsKey("ID")){
... ... @@ -179,6 +184,7 @@ public class StudentController extends BaseController {
179 184  
180 185 }
181 186 }
  187 + mv.addObject("state","success");
182 188 mv.addObject("msg","success");
183 189 mv.setViewName("save_result2");
184 190 return mv;
... ...
src/com/fh/controller/sunvote/teacher/TeacherController.java
... ... @@ -726,6 +726,7 @@ public class TeacherController extends BaseController {
726 726 if (null != DATA_IDS && !"".equals(DATA_IDS)) {
727 727 String ArrayDATA_IDS[] = DATA_IDS.split(",");
728 728 teacherService.deleteAll(ArrayDATA_IDS);
  729 + userService.deleteAllU(ArrayDATA_IDS);
729 730 pd.put("msg", "ok");
730 731 } else {
731 732 pd.put("msg", "no");
... ... @@ -798,6 +799,34 @@ public class TeacherController extends BaseController {
798 799 savePd.put("ID", teacherId);
799 800 savePd.put("SCHOOL_ID", schoolID);
800 801  
  802 + PageData p = new PageData();
  803 + p.put("USERNAME", savePd.getString("ACCOUT"));
  804 +
  805 + if(null==userService.findByUsername(p)){
  806 + p.put("USER_ID", savePd.get("ID"));
  807 + p.put("ROLE_ID", "57bb1e6f138247a0b05cc721a5da1b64");
  808 + p.put("PASSWORD",
  809 + new SimpleHash("SHA-1", savePd.getString("ACCOUT"), savePd
  810 + .getString("PASSWORD")).toString()); // 密码加密
  811 + p.put("LAST_LOGIN", ""); // 最后登录时间
  812 + p.put("IP", ""); // IP
  813 + p.put("STATUS", "0"); // 状态
  814 + p.put("SKIN", "default");
  815 + p.put("RIGHTS", "");
  816 + p.put("NAME",savePd.getString("NAME") );
  817 +
  818 + userService.saveU(p);
  819 + FHLOG.save(Jurisdiction.getUsername(),
  820 + "新增系统用户:" + pd.getString("USERNAME"));
  821 + }else{
  822 + mv.addObject("state","fail");
  823 + mv.addObject("msg","本次成功导入"+(i-1>=0?i-1:0)+"条数据,第"+i+"行用户名系统已存在。");
  824 + mv.setViewName("save_result2");
  825 + return mv;
  826 + }
  827 +
  828 +
  829 +
801 830 teacherService.save(savePd);
802 831 }
803 832  
... ...
src/com/fh/entity/Page.java
... ... @@ -97,13 +97,13 @@ public class Page {
97 97 sb.append(" <ul class=\"pagination pull-right no-margin\">\n");
98 98 if(currentPage==1){
99 99 sb.append(" <li><a>" + total +totalResult+articles + "</a></li>\n");
100   - sb.append(" <li><span style='padding:0'><input type=\"number\" value=\"\" id=\"toGoPage\" style=\"width:80px;text-align:center;float:left\" placeholder=\"" + pageNumber + "\"/></span></li>\n");
  100 + sb.append(" <li><span style='padding:0'><input type=\"number\" min=\"1\" value=\"\" id=\"toGoPage\" style=\"width:80px;text-align:center;float:left\" placeholder=\"" + pageNumber + "\"/></span></li>\n");
101 101 sb.append(" <li style=\"cursor:pointer;\"><a onclick=\"toTZ();\" class=\"btn btn-mini btn-success\">" + jump + "</a></li>\n");
102 102 sb.append(" <li><a>" + frist + "</a></li>\n");
103 103 sb.append(" <li><a>" + previous + "</a></li>\n");
104 104 }else{
105 105 sb.append(" <li><a>"+ total +"<font color=red>"+totalResult+"</font>" + articles + "</a></li>\n");
106   - sb.append(" <li><input type=\"number\" value=\"\" id=\"toGoPage\" style=\"width:80px;text-align:center;float:left\" placeholder=\"" + pageNumber + "\"/></li>\n");
  106 + sb.append(" <li><input type=\"number\" min=\"1\" value=\"\" id=\"toGoPage\" style=\"width:80px;text-align:center;float:left\" placeholder=\"" + pageNumber + "\"/></li>\n");
107 107 sb.append(" <li style=\"cursor:pointer;\"><a onclick=\"toTZ();\" class=\"btn btn-mini btn-success\">" + jump + "</a></li>\n");
108 108 sb.append(" <li style=\"cursor:pointer;\"><a onclick=\"nextPage(1)\">" + frist + "</a></li>\n");
109 109 sb.append(" <li style=\"cursor:pointer;\"><a onclick=\"nextPage("+(currentPage-1)+")\">" + previous + "</a></li>\n");
... ... @@ -127,7 +127,7 @@ public class Page {
127 127 sb.append(" <li style=\"cursor:pointer;\"><a onclick=\"nextPage("+(currentPage+1)+")\">" + next + "</a></li>\n");
128 128 sb.append(" <li style=\"cursor:pointer;\"><a onclick=\"nextPage("+totalPage+")\">" + tail + "</a></li>\n");
129 129 }
130   - sb.append(" <li><a>" + total +totalResult+articles + "</a></li>\n");
  130 +// sb.append(" <li><a>" + total +totalResult+articles + "</a></li>\n");
131 131 sb.append(" <li><span class=\"enter\"><select title='" + displayNumber + "' style=\"width:55px;float:left;height:32px;margin-top:1px;border:0\" onchange=\"changeCount(this.value)\">\n");
132 132 sb.append(" <option value='"+showCount+"'>"+showCount+"</option>\n");
133 133 sb.append(" <option value='10'>10</option>\n");
... ...
src/com/fh/service/sunvote/student/StudentManager.java
... ... @@ -41,6 +41,12 @@ public interface StudentManager{
41 41 * @param page
42 42 * @throws Exception
43 43 */
  44 + public Integer countByClassId(String classid)throws Exception;
  45 +
  46 + /**列表
  47 + * @param page
  48 + * @throws Exception
  49 + */
44 50 public List<PageData> datalistclassPage(Page page)throws Exception;
45 51  
46 52 /**列表(全部)
... ...
src/com/fh/service/sunvote/student/impl/StudentService.java
... ... @@ -57,6 +57,14 @@ public class StudentService implements StudentManager{
57 57 * @param page
58 58 * @throws Exception
59 59 */
  60 + public Integer countByClassId(String classid)throws Exception{
  61 + return (Integer)dao.findForList("StudentMapper.countByClassId", classid);
  62 + }
  63 +
  64 + /**列表
  65 + * @param page
  66 + * @throws Exception
  67 + */
60 68 @SuppressWarnings("unchecked")
61 69 public List<PageData> datalistclassPage(Page page)throws Exception{
62 70 return (List<PageData>)dao.findForList("StudentMapper.dataclasslistPage", page);
... ...