题目列表页面+习题添加页面

后端习题批量添加的接口

@RequestMapping(value = "/question_file_add", method = RequestMethod.POST)
    @ResponseBody
    public Result question_file_add(HttpServletRequest request, Model model, @RequestParam("file") MultipartFile file){
        if( file==null ){
            log.info("接受的excel为NULL");
            return Result.error(CodeMsg.FILE_RESOLVE_ERROR);
        }
        Workbook workbook = null;
        StringBuilder msg = new StringBuilder();
        Map<String, List<QuestionEntity>> data = new HashMap<String, List<QuestionEntity>>();
        List<QuestionEntity> success_add = new ArrayList<QuestionEntity>();
        List<QuestionEntity> failed_add = new ArrayList<QuestionEntity>();
        List<QuestionEntity> already_exists_add = new ArrayList<QuestionEntity>();
        try {
            InputStream inputStream = file.getInputStream();
            Integer length = file.getOriginalFilename().split("\\.").length;
            String suffix = file.getOriginalFilename().split("\\.")[length - 1];
            if ("xls".equals(suffix)) {
                workbook = new HSSFWorkbook(inputStream);// 后缀为.xls则用HSSFWorkbook
            } else if ("xlsx".equals(suffix)) {
                workbook = new XSSFWorkbook(inputStream);// 后缀为.xlsx则用XSSFWorkbook
            }
            if( workbook==null ){
                return Result.success("空表NULL");
            }
            //默认取第一张表
            Sheet sheet = workbook.getSheetAt(0);
            //默认第一行为标题
            Row titleRow = sheet.getRow(0);
            //循环取每行的数据
            for( int rowIndex=1;rowIndex<sheet.getPhysicalNumberOfRows();rowIndex++ ){
                QuestionObject questionObject = new QuestionObject();
                Row row = sheet.getRow(rowIndex);
                if( row==null ){
                    continue;
                }
                QuestionEntity questionEntity = new QuestionEntity();
                List<QuestionItemObject> questionItemObjects = new ArrayList<QuestionItemObject>();
                for( int cellIndex=0;cellIndex<row.getPhysicalNumberOfCells();cellIndex++ ){
                    String title = titleRow.getCell(cellIndex).getStringCellValue();
                    if(title.equals("")){
                        continue;
                    }
                    Cell cell = row.getCell(cellIndex);
                    switch (title){
                        case "标签":
                            String labelStr = cell.getStringCellValue();
                            Integer label = 0;
                            switch (labelStr){
                              //******************
                            //这里要根据label表中算法id 进行修改
                               case "k-means":
                                    label = 1;
                                    break;
                                case "kNN":
                                    label = 2;
                                    break;
                                case "决策树":
                                    label = 3;
                                    break;
                                case "支持向量机":
                                    label = 4;
                                    break;
                                case "逻辑回归":
                                    label = 5;
                                    break;
                                case "朴素贝叶斯":
                                    label = 6;
                                    break;
                            }
                            questionEntity.setLabelId(label);
                            break;
                        case "题目":
                            questionObject.setTitleContent(cell.getStringCellValue());
                            break;
                        case "题型":
                            String questionTypeStr = cell.getStringCellValue();
                            Integer questionType = null;
                            switch (questionTypeStr){
                                case "单选题":
                                    questionType = 1;
                                    break;
                                case "多选题":
                                    questionType = 2;
                                    break;
                                case "判断题":
                                    questionType = 3;
                                    break;
                            }
                            questionEntity.setQuestionType(questionType);
                            break;
                        case "难度": //难度是Double型
                            questionEntity.setDifficult(cell.getNumericCellValue());
                            break;
                        case "正确答案":
                            questionObject.setCorrect(cell.getStringCellValue());
                            break;
                        case "题解":
                            questionObject.setAnalyze(cell.getStringCellValue());
                            break;
                        case "选项1":
                            questionItemObjects.add(new QuestionItemObject("A", cell.getStringCellValue()));
                            break;
                        case "选项2":
                            questionItemObjects.add(new QuestionItemObject("B", cell.getStringCellValue()));
                            break;
                        case "选项3":
                            questionItemObjects.add(new QuestionItemObject("C", cell.getStringCellValue()));
                            break;
                        case "选项4":
                            questionItemObjects.add(new QuestionItemObject("D", cell.getStringCellValue()));
                            break;
                    }
                }
                //
                if( questionEntity.getQuestionType()==3 ){//判断题的选项只有2个
                    List<QuestionItemObject> items = new ArrayList<QuestionItemObject>();
                    for (QuestionItemObject questionItemObject : questionItemObjects) {
                        if (questionItemObject.getPrefix().equals("A")) {
                            items.add(questionItemObject);
                        } else if (questionItemObject.getPrefix().equals("B")) {
                            items.add(questionItemObject);
                        }
                    }
                    questionObject.setQuestionItemObjects(items);
                }else{
                    questionObject.setQuestionItemObjects(questionItemObjects);
                }
                questionEntity.setQuestionObject(questionObject);
                //设置questionEntity的创建者
                User operator = (User)(request.getSession().getAttribute("user"));
                if( operator==null){
                    //操作用户为空,无法记录日志
                    return Result.error(CodeMsg.USER_SESSION_EXPIRED);
                }
                questionEntity.setCreateUserId(operator.getId());
                questionEntity.setCorrectTimes("0");
                //保存到数据库
                if( questionEntityService.save(questionEntity)==null ){
                    //保存该学生数据失败
                    msg.append(questionEntity.getQuestionObject().getTitleContent());
                    failed_add.add(questionEntity);
                }else{
                    log.info("成功创建"+questionEntity.getId());
                    success_add.add(questionEntity);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        model.addAttribute("success", success_add);
        model.addAttribute("failed", failed_add);
        model.addAttribute("already_exist", already_exists_add);
        return Result.success(model);
    }

前端习题批量添加页面

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
    <title>首页 - AIAL</title>
    <#include "../common/header.ftl" />
    <!--标签插件-->
    <link rel="stylesheet" href="../admin/js/jquery-tags-input/jquery.tagsinput.min.css">
</head>

<body>
<div class="lyear-layout-web">
    <div class="lyear-layout-container">
        <!--左侧导航-->
        <aside class="lyear-layout-sidebar">
            <!-- logo -->
            <div id="logo" class="sidebar-header">
                <a href="../admin/index.html"><img src="../admin/images/logo-sidebar.png" title="LightYear" alt="LightYear" /></a>
            </div>
            <div class="lyear-layout-sidebar-scroll">
                <#include "../common/left-menu.ftl" />
            </div>
        </aside>
        <!--End 左侧导航-->

        <#include "../common/header-menu.ftl" />

        <!--页面主要内容-->
        <main class="lyear-layout-content">

            <div class="container-fluid">
                <div class="card">
                    <div class="card-header"><h3>题目添加</h3></div>
                    <div class="card-body">

                        <ul class="nav nav-tabs nav-justified">
                            <li class="active">
                                <a data-toggle="tab" href="#home-basic">批量添加</a>
                            </li>
                            <li class="nav-item">
                                <a data-toggle="tab" href="#profile-basic">单个添加</a>
                            </li>
                        </ul>
                        <div class="tab-content">
                            <div class="tab-pane fade active in" id="home-basic">
                                <form class="form-horizontal" method="post" onsubmit="return false;">
                                    <#--   文件上传格式-->
                                    <div class="form-group col-xs-7">
                                        <label class="col-xs-12" for="example-file-input">exls文件上传规则</label>
                                        <div class="col-xs-12">
                                            <p>1. 请保证...</p>
                                            <p>2. 请按照...</p>
                                        </div>
                                    </div>
                                    <#--   上传按钮-->
                                    <div class="form-group col-xs-5">
                                        <label class="col-xs-12" for="file-input">点击上传</label>
                                        <div class="col-xs-12">
                                            <input type="file" id="file-input" name="file-input" accept=".xls,.xlsx">
                                        </div>
                                    </div>
                                    <#--   提交按钮-->
                                    <div class="form-group">
                                        <div class="col-xs-12">
                                            <button class="btn btn-primary col-xs-offset-5" id="submit-file-btn" >提交</button>
                                        </div>
                                    </div>
                                </form>
                            </div>
                               <!--单个题目的添加  -->  
                            <div class="tab-pane fade" id="profile-basic">
                            	单个题目的添加区域
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </main>
        <!--End 页面主要内容-->
    </div>
</div>
<#include "../common/footer.ftl" />
<script type="text/javascript" src="../admin/js/perfect-scrollbar.min.js"></script>
<!--tag标签插件-->
<script src="../admin/js/jquery-tags-input/jquery.tagsinput.min.js"></script>

<script type="text/javascript">
    $(document).ready(function () {
        //文件上传添加学生
        $("#submit-file-btn").click(function () {
            var fd = new FormData();
            var file = document.getElementById("file-input").files[0];
            if (file === undefined) {
                showWarningMsg("文件数据为空, 请正确上传文件!");
                return;
            }

            //上传的参数名 参数值 k-v键值对
            fd.append("file", file);
            $.ajax({
                url:"${request.contextPath}/platform/question_file_add",
                type:"post",
                data:fd,
                async : true, //此处为异步加载
                processData: false, // 告诉jQuery不要去处理发送的数据
                contentType: false, // 告诉jQuery不要去设置Content-Type请求头
                beforeSend: function () {
                    $("#submit").attr({ disabled: "disabled" });// 禁用按钮防止重复提交
                    // showWarningMsg("文件处理中,请稍候……");
                },
                success:function(data){
                    if (data.code === 0) {
                        console.log("打印传过来的数据");
                        console.log(data.data);
                        showSuccessMsg(data.msg, function () {

                        });

                        var failed = data.data.failed;
                        if( failed.length>0 ){
                            createTable(failed, "导入失败的习题");
                        }
                        var already_exist = data.data.already_exist;
                        if( already_exist.length>0 ){
                            createTable(already_exist, "已经存在而无法导入的习题");
                        }
                        var success = data.data.success;
                        if( success.length>0 ){
                            createTable(success, "成功导入的习题");
                        }
                    }
                    else{
                        showErrorMsg(data.msg);
                    }
                },
                complete: function () {
                    $("#submit").removeAttr("disabled");
                },
                error:function(data){
                    alert("网络错误");
                },
            });

        });
    });

    function createTable(data, msg) {
        var table = $("<table class=\"table table-bordered\"></table>");
        var thead = $("<thead></thead>");
        var tr = $("<tr></tr>");
        var th0 = $("<th>"+msg+"</th>");
        var th1 = $("<th>题目</th>");
        var th2 = $("<th>难度</th>");
        var th3 = $("<th>题型</th>");
        var th4 = $("<th>题解</th>");
        var th5 = $("<th>正确答案</th>");
        var th6 = $("<th>选项1</th>");
        var th7 = $("<th>选项2</th>");
        var th8 = $("<th>选项3</th>");
        var th9 = $("<th>选项4</th>");

        tr.append(th0).append(th1).append(th2).append(th3).append(th4).append(th5).append(th6).append(th7).append(th8).append(th9);
        thead.append(tr);
        table.append(thead);
        for(var i=0;i<data.length;i++){
            var td0 = $("<td>"+(i+1)+"</td>");
            var td1 = $("<td>"+data[i].questionObject.titleContent+"</td>");
            var td2 = $("<td>"+data[i].difficult+"</td>");
            var td3 = null;
            var td6 = "";
            var td7 = "";
            var td8 = "";
            var td9 = "";
            var td4 = $("<td>"+data[i].questionObject.analyze+"</td>");
            var td5 = $("<td>"+data[i].questionObject.correct+"</td>");
            switch (data[i].questionType) {
                case "1":
                case 1:
                     td3 = $("<td>单选题</td>");
                    td6 =  $("<td>"+data[i].questionObject.questionItemObjects[0].content+"</td>");
                    td7 =  $("<td>"+data[i].questionObject.questionItemObjects[1].content+"</td>");
                    td8 =  $("<td>"+data[i].questionObject.questionItemObjects[2].content+"</td>");
                    td9 =  $("<td>"+data[i].questionObject.questionItemObjects[3].content+"</td>");
                    break;
                case "2":
                case 2:
                     td3 = $("<td>多选题</td>");
                    td6 =  $("<td>"+data[i].questionObject.questionItemObjects[0].content+"</td>");
                    td7 =  $("<td>"+data[i].questionObject.questionItemObjects[1].content+"</td>");
                    td8 =  $("<td>"+data[i].questionObject.questionItemObjects[2].content+"</td>");
                    td9 =  $("<td>"+data[i].questionObject.questionItemObjects[3].content+"</td>");
                    break;
                case "3":
                case 3:
                     td3 = $("<td>判断题</td>");
                    td6 =  $("<td>"+data[i].questionObject.questionItemObjects[0].content+"</td>");
                    td7 =  $("<td>"+data[i].questionObject.questionItemObjects[1].content+"</td>");
                    break;
            }

            var tr = $("<tr></tr>");
            tr.append(td0).append(td1).append(td2).append(td3).append(td4).append(td5).append(td6).append(td7).append(td8).append(td9);
            table.append(tr);
        }
        $("#home-basic").append(table);
        console.log(msg+"显示完毕");
    }
</script>
</body>
</html>

前端题目列表页面

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
    <title>首页 - AIAL</title>
    <#include "../common/header.ftl" />
</head>

<body>
<div class="lyear-layout-web">
    <div class="lyear-layout-container">
        <!--左侧导航-->
        <aside class="lyear-layout-sidebar">
            <!-- logo -->
            <div id="logo" class="sidebar-header">
                <a href="../admin/index.html"><img src="../admin/images/logo-sidebar.png" title="LightYear" alt="LightYear" /></a>
            </div>
            <div class="lyear-layout-sidebar-scroll">
                <#include "../common/left-menu.ftl" />
            </div>
        </aside>
        <!--End 左侧导航-->

        <#include "../common/header-menu.ftl" />

        <!--页面主要内容-->
        <main class="lyear-layout-content">

            <div class="container-fluid">

                <div class="row">s
                    <div class="col-lg-12">
                        <div class="card">
                            <div class="card-toolbar clearfix">
                                <form class="pull-right search-bar" method="get" action="#!" role="form">
                                    <div class="input-group">
                                        <div class="input-group-btn">
                                            <input type="hidden" name="search_field" id="search-field" value="title">
                                            <button class="btn btn-default dropdown-toggle" id="search-btn" data-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">
                                                标题 <span class="caret"></span>
                                            </button>
                                            <ul class="dropdown-menu">
                                                <li> <a tabindex="-1" href="javascript:void(0)" data-field="title">标题</a> </li>
                                                <li> <a tabindex="-1" href="javascript:void(0)" data-field="cat_name">栏目</a> </li>
                                            </ul>
                                        </div>
                                        <input type="text" class="form-control" value="" name="keyword" placeholder="请输入名称">
                                    </div>
                                </form>
                                <div class="toolbar-btn-action">
                                    <a class="btn btn-primary m-r-5" href="${request.contextPath}/menu/exercise_add"><i class="mdi mdi-plus"></i> 新增</a>
                                    <a class="btn btn-danger" id="exercise_delete" href="#!"><i class="mdi mdi-window-close"></i> 删除</a>
                                </div>
                            </div>
                            <div class="card-body">

                                <div class="table-responsive">
                                    <table class="table table-bordered">
                                        <thead>
                                        <tr>
                                            <th>
                                                <label class="lyear-checkbox checkbox-primary">
                                                    <input type="checkbox" id="check-all"><span></span>
                                                </label>
                                            </th>
                                            <th>习题id</th>
<#--                                            <th>题目</th>-->
                                            <th>标签</th>
                                            <th>难度</th>
                                            <th>类型</th>
                                            <th>正确答案</th>
<#--                                            <th>题解</th>-->
<#--                                            <th>正确率</th>-->
                                            <th>操作</th>
                                        </tr>
                                        </thead>
                                        <tbody>

                                        <#if Questions??>
                                            <#list Questions as question>
                                                <tr>
                                                    <td>
                                                        <label class="lyear-checkbox checkbox-primary">
                                                            <input type="checkbox" name="ids" value="${question.getId()}"><span></span>
                                                        </label>
                                                    </td>
                                                    <td>${question.getId()!""}</td>
<#--                                                    <td>${question.getId()!""}</td>-->
                                                    <td>${question.getLabel()!""}</td>
                                                    <td>${question.getDifficulty()!""}</td>
                                                    <td>${question.getQuestionType()!""}</td>
                                                    <td>${question.getCorrect()!""}</td>
                                                    <td>
                                                        <div class="btn-group">
                                                            <a class="btn btn-xs btn-default" href="#!" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>
                                                        </div>
                                                    </td>
                                                </tr>
                                            </#list>
                                        </#if>

                                        </tbody>
                                    </table>
                                </div>

                            </div>
                        </div>
                    </div>

                </div>

            </div>

        </main>
        <!--End 页面主要内容-->
    </div>
</div>
<#include "../common/footer.ftl" />
<script type="text/javascript" src="../admin/js/perfect-scrollbar.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        // goPage(1, 5);//进入该页面时,显示第1页,每页有6条数据
        $("#exercise_delete").click( function () {
            console.log("点击删除习题");
            del("${request.contextPath}/menu/exercise_del");
        })

    });
    //删除学生的方法
    function del(url){
        if($("input[type='checkbox']:checked").length == 0){
            showWarningMsg('请选择一条数据进行删除!');
            return;
        }
        var ids = []; //被选中要删除的习题id列表
        $("input[type='checkbox']:checked").each(function(i, e){ ids.push(Number($(e).val())); });
        console.log("习题id="+ids);
        console.log("JSON字符串格式:"+JSON.stringify(ids));
        $.confirm({
            title: '确定删除?',
            content: '删除后数据不可恢复,请慎重!',
            buttons: {
                confirm: {
                    text: '确认',
                    action: function(){
                        deleteReq(ids,url);
                        // showWarningMsg("还未发送Ajax");
                    }
                },
                cancel: {
                    text: '关闭',
                    action: function(){

                    }
                }
            }
        });
    }

    //调用删除方法
    function deleteReq(id,url){
        $.ajax({
            url:url,
            type:'POST',
            data: JSON.stringify(id),
            dataType:'json',
            contentType:"application/json;charset=UTF-8",
            success:function(data){
                if( data.code == 0 ){
                    showSuccessMsg('习题删除成功!',function(){
                        $("input[type='checkbox']:checked").parents("tr").remove();
                    });
                }else{
                    showErrorMsg(data.msg);
                }
            },
            error:function(data){
                alert('网络错误!');
            }
        });
    }
</script>
</body>
</html>

习题列表后端接口:

    /**
     * 题目删除请求的处理
     * @param id
     * @return
     */
    @RequestMapping( value = "/exercise_del", method = RequestMethod.POST)
    @ResponseBody
    public Result exercise_del(@RequestBody List<Long> id){
        log.info("进入删除习题的接口");
        log.info(id.toString());
        return Result.success("成功删除"+id.toString());
    }

    /**
     * 题目管理页面
     * @return
     */
    @RequestMapping(value = "/exercise_page")
    public String exercise_list(Model model){
        model.addAttribute("siteName", siteConfig.getSiteName());
        model.addAttribute("siteUrl", siteConfig.getSiteUrl());
        model.addAttribute("Questions", questionService.findAll());
        log.info(questionService.findAll().toString());
        return "/admin/menu/exercise_list";
//        return "/admin/test/test_question_content";
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值