onlineexamaction.java

来自「培训考试系统代码」· Java 代码 · 共 1,182 行 · 第 1/3 页

JAVA
1,182
字号
package com.huawei.icd30.agt.exam;

import java.util.Date;
import java.text.SimpleDateFormat;
import javax.servlet.http.*;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import com.huawei.icd30.agt.util.*;
import com.huawei.icd30.common.db.*;
import com.huawei.icd30.common.systemconfig.* ;

import java.util.*;

/**
 * <p> 从OnlineExamForm类中提取在线考试模块从页面提交的数据信息,
 * 进行考试的查询,处理所提交的答卷的Action类。
 * </p>
 * <p> </p>
 * <p> </p>
 * @author 龙燕茜
 * @version 1.0
 */

public class OnlineExamAction extends Action
{

    public ActionForward perform(ActionMapping mapping,
           ActionForm form, HttpServletRequest req,
           HttpServletResponse res)
    {
        //判断session是否超时
        //ActionForward checkForword = Tools.checkSession(req,res);
        //if(checkForword != null)
        //{
        //     return checkForword;
        //}
        //获取操作类型
        String opeType = ((OnlineExamForm)form).getOpeType();//从form中获取

        if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_GETALL)
           || opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_GETTASK))
        {//获取考试列表
             return getExamList(mapping,form,req,res);
        }
        else if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_GETPAPER))
        {//获取考试的试卷
             return getExamPaper(mapping,form,req,res);
        }
        else if( opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_TEST) )
        {//获取自测的试卷
             return getTestPaper(mapping,form,req,res);
        }
        else if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_DEAL))
        {//处理答卷
             return dealExamPaper(mapping,form,req,res);
        }
        else if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_TESTDEAL))
        {//处理自测题
             return dealTestPaper(mapping,form,req,res);
        }
        else if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_GETEXAMRESULT))
        {
           return getExamResultPaper(mapping,form,req,res);
        }
        ///:huangyuyuan add 2004-06-09
        else if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_RANK_TEST))
        {//获取自测的试卷
           return getRankTestPaper(mapping,form,req,res);
        }
        else if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_RANK_TESTDEAL))
        {//处理自测题
           return dealRankTestPaper(mapping,form,req,res);
        }
        else if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_RANK_DEAL))
        {//处理答卷
           return dealRankExamPaper(mapping,form,req,res);
        }
        ///:~
        else
        {//操作类型错误,定向到错误页面,错误编码:UNKNOW_ERROR
             req.setAttribute("errorId",ErrorCode.UNKNOW_ERROR);
             return (mapping.findForward("error"));
        }
    }

    /**
     * 获取考试列表
     */
    private ActionForward getExamList(ActionMapping mapping,
           ActionForm form, HttpServletRequest req,
           HttpServletResponse res)
    {

       //从OnlineExamForm中获取操作类型与查询条件;
       String classIdTerm = ((OnlineExamForm)form).getClassIdTerm();
       //获取操作类型
       String opeType = ((OnlineExamForm)form).getOpeType();//从form中获取

       String titleTerm = req.getParameter("titleTerm");
       String subjectTerm = req.getParameter("subjectTerm");
       String startTimeTerm = req.getParameter("startTimeTerm");
       String endTimeTerm = req.getParameter("endTimeTerm");
       String hostIp = req.getRemoteAddr();

       //从Session中获取工号
       String staffNo = (String)req.getSession().getAttribute("workerNo");
       //从Session中获取地市
       //String cityId = (String)req.getSession().getAttribute("CITYID");
       //省中心的地市,从配置文件中获取?????????????
       //String cityCenter = "00";

       //定义连接的实例
       SysDbConn aplcoms = null;
       try
       {
           //得到一个连接的实例
           aplcoms = SysConnPool.getInstance().getAplComs();

           if(opeType.equalsIgnoreCase(OperatorFlagCode.ONLINEEXAM_GETALL))
           {//利用P_Agt_OnExamGetALL进行查询
            //从数据库中获取考试列表记录
               aplcoms.preparedSP();
               //设置条件参数:类别ID
               aplcoms.setString(1, titleTerm);
               aplcoms.setString(2, subjectTerm);
               aplcoms.setString(3, classIdTerm);
               aplcoms.setString(4, startTimeTerm);
               aplcoms.setString(5, endTimeTerm);
               aplcoms.setString(6, staffNo);
               aplcoms.setString(7, hostIp);
               //aplcoms.setString(3, cityCenter);
               SysResultSet rs1 = aplcoms.csCommonSP("P_Agt_OnExamGetALL").getResultSet();

               rs1.next();
               aplcoms.preparedQuery(rs1.getString(1));

               SysResultSet rs2 = aplcoms.csCommonQuery("SELFSQL","1","-1").getResultSet();

               //把结果集存放到session中
               req.getSession().setAttribute("ONLINEEXAM-GET-BYCLASSSET",new ResUtil(rs2));

               //定向到列表显示页面
               return (mapping.findForward("onexambyclasslist"));
            }
            else
            {//利用P_Agt_OnExamGetTask进行查询
             //从数据库中获取考试列表记录
                aplcoms.preparedSP();

                 //设置条件参数:工号
               aplcoms.setString(1, titleTerm);
               aplcoms.setString(2, subjectTerm);
               aplcoms.setString(3, classIdTerm);
               aplcoms.setString(4, startTimeTerm);
               aplcoms.setString(5, endTimeTerm);
               aplcoms.setString(6, staffNo);
               aplcoms.setString(7, hostIp);
                //aplcoms.setString(3, cityCenter);
                SysResultSet rs1 = aplcoms.csCommonSP("P_Agt_OnExamGetALL").getResultSet();
                rs1.next();

                aplcoms.preparedQuery(rs1.getString(1));
                SysResultSet rs2 = aplcoms.csCommonQuery("SELFSQL","1","-1").getResultSet();

                //把结果集存放到session中
                req.getSession().setAttribute("ONLINEEXAM-GET-TASKSET",new ResUtil(rs2));

                //定向到列表显示页面
                return (mapping.findForward("onexamtasklist"));
            }
       }
       catch (SysDbException aple)
       {//捕获CommonService系统异常,定向到出错页面
           //输出异常信息
           aple.printStackTrace();
           req.setAttribute("errorId",ErrorCode.COMMONSERVICE_ERROR);
           return (mapping.findForward("error"));
       }
       catch(java.sql.SQLException sqle)
       {//捕获调用aplcoms异常,定向到出错页面
           // 输出异常信息
           sqle.printStackTrace();
           req.setAttribute("errorId",ErrorCode.DATABASE_ERROR);
           return (mapping.findForward("error"));
       }
       catch(Exception e)
       {//捕获未知异常,定向到出错页面
           //输出异常信息
           e.printStackTrace();
           req.setAttribute("errorId",ErrorCode.UNKNOW_ERROR);
           return (mapping.findForward("error"));
       }
       finally
       {//关闭连接实例
           if(aplcoms != null)
           {
              aplcoms.close();
           }
       }
    }

    /**
     * 根据考试的ID号获取的试卷信息
     */
    private ActionForward getExamPaper(ActionMapping mapping,
           ActionForm form, HttpServletRequest req,
           HttpServletResponse res)
    {

       //从OnlineExamForm中获取考试的ID;
       String examId = ((OnlineExamForm)form).getExamId();
       String scope = req.getParameter("scope");
       //从Session中获取工号
       String staffNo = (String)req.getSession().getAttribute("workerNo");

       //定义连接的实例
       SysDbConn aplcoms = null;
       try
       {
           //得到一个连接的实例
           aplcoms = SysConnPool.getInstance().getAplComs();

           //调用存储过程P_Agt_OnExamGetHead获取考试试卷的前面的信息
           //包括:考试的名称、考试的最大次数、用户已考的次数、考试的限制时间
           aplcoms.preparedSP();
           aplcoms.setString(1 ,staffNo);  //设置条件参数:考试ID号与工号
           aplcoms.setString(2 ,examId);
           SysDataSet ds1 = aplcoms.csCommonSP("P_Agt_OnExamGetHead");
           SysRecord rc1 = ds1.getParamSet();

           String title = rc1.getString(0);
           int maxCount = rc1.getInt(1);
           int userCount = rc1.getInt(2);
           int examTime = rc1.getInt(3);

           if(maxCount != 0)
           {//考试限制次数,即考试的最大次数不为空

               if(userCount == maxCount)
               {
                  //向到出错页面,错误号:ONEXAM_OVER_ERROR
                  req.setAttribute("errorId",ErrorCode.ONEXAM_OVER_ERROR);
                  return (mapping.findForward("error"));
               }
           }

           SysResultSet rs1 = null;
           String paperId = null;
           if("3".equalsIgnoreCase(scope))
           {
              //从数据库中获取考试试卷的试题列表记录
              if("ok".equalsIgnoreCase(req.getParameter("print")))
              {//定向到试卷的显示打印页面
                  paperId = ((OnlineExamForm)form).getPaperId();
              }
              else
              {

                 aplcoms.preparedQuery("");
                 aplcoms.setString(1 ,examId);
                 aplcoms.setString(2 ,req.getRemoteAddr());
                 SysResultSet rss = aplcoms.csCommonQuery("SQL_Agt_OnExamGetPaperIDByHost" ,"1" ,"-1").getResultSet();
                 if(rss != null)
                 {
                    rss.setRecord(0);
                    paperId = rss.getString(0);
                 }
              }

              aplcoms.preparedQuery("");
              aplcoms.setString(1 ,paperId);   //设置条件参数:考试ID号
              rs1 = aplcoms.csCommonQuery("SQL_Agt_OnExamGetTestByPaperID" ,"1" ,"-1").getResultSet();
           }
           else
           {
              aplcoms.preparedQuery("");
              aplcoms.setString(1 ,examId);
              SysResultSet rss = aplcoms.csCommonQuery("SQL_Agt_OnExamGetPaperID" ,"1" ,"-1").getResultSet();
              if(rss != null)
              {
                 rss.setRecord(0);
                 paperId = rss.getString(0);
              }
              //从数据库中获取考试试卷的试题列表记录
              aplcoms.preparedQuery("");
              aplcoms.setString(1 ,examId);   //设置条件参数:考试ID号
              rs1 = aplcoms.csCommonQuery("SQL_Agt_OnExamGetTest" ,"1" ,"-1").getResultSet();
           }
            //把结果集存放到session中
            req.setAttribute("ONLINEEXAM-GETTEST-RESULTSET",rs1);

            //把考试试卷的前面的信息传送到页面
            req.setAttribute("title",title);
            req.setAttribute("maxCount",String.valueOf(maxCount));
            req.setAttribute("userCount",String.valueOf(userCount));
            req.setAttribute("examTime",String.valueOf(examTime));

            if("ok".equalsIgnoreCase(req.getParameter("print")))
            {//定向到试卷的显示打印页面
               System.out.println("forward!!!!!!!!");
                return (mapping.findForward("exampaper"));
            }

           //调用存储过程P_Agt_OnExamAddRecord插入考试记录
           aplcoms.preparedSP();
           //设置参数:员工工号、考试ID、考试的时间、考试的时长
           aplcoms.setString(1, staffNo);
           aplcoms.setString(2, examId);
           aplcoms.setInt(3,0);
           aplcoms.setString(4, paperId);

           SysDataSet ds2 = aplcoms.csCommonSP("P_Agt_OnExamAddRecord");
           SysRecord rc2 = ds2.getParamSet() ;

           if(rc2==null || rc2.getInt(2) == OperatorFlagCode.OPERATOR_EORROR)
           {//定向到出错页面,错误号为:ONEXAM_RECORDADD_ERROR
               req.setAttribute("errorId",ErrorCode.ONEXAM_RECORDADD_ERROR);
               return (mapping.findForward("error"));
           }
           req.setAttribute("recordId",rc2.getString(0));
           req.setAttribute("paperFlag",String.valueOf(rc2.getInt(1)));

           ///:huangyuyuan modify 2004-06-14
           //获取设置参数,判断是显示所有试题还是分批显示试题
           String showByItem = Initor.systemConfig.get("agt/showByItem","true").trim();

           //定向到考试页面
           if("true".equals(showByItem))
           {

             return (mapping.findForward("onrankexamdo"));
           }
           else
           {
               return (mapping.findForward("onexamdo"));
           }
           ///:~
       }
       catch (SysDbException aple)
       {//捕获CommonService系统异常,定向到出错页面
           //输出异常信息
           aple.printStackTrace();
           req.setAttribute("errorId",ErrorCode.COMMONSERVICE_ERROR);
           return (mapping.findForward("error"));
       }
       catch(java.sql.SQLException sqle)
       {//捕获调用aplcoms异常,定向到出错页面
           // 输出异常信息
           sqle.printStackTrace();
           req.setAttribute("errorId",ErrorCode.DATABASE_ERROR);
           return (mapping.findForward("error"));
       }
       catch(Exception e)
       {//捕获未知异常,定向到出错页面
           //输出异常信息
           e.printStackTrace();
           req.setAttribute("errorId",ErrorCode.UNKNOW_ERROR);
           return (mapping.findForward("error"));
       }
       finally
       {//关闭连接实例
           if(aplcoms != null)
           {
              aplcoms.close();
           }
       }
    }


   /**
     * 根据试卷的ID号获取的试卷信息
     */
    private ActionForward getTestPaper(ActionMapping mapping,
           ActionForm form, HttpServletRequest req,
           HttpServletResponse res)
    {

       //从OnlineExamForm中获取试卷的ID;
       String paperId = ((OnlineExamForm)form).getPaperId();

       //定义连接的实例
       SysDbConn aplcoms = null;
       try
       {
           //得到一个连接的实例
           aplcoms = SysConnPool.getInstance().getAplComs();

           //获取试卷的信息
           //包括:试卷的名称
           aplcoms.preparedQuery("");
           aplcoms.setString(1 ,paperId);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?