项目实训——实验平台(二)

目录

实验老师发布实验

ExMsgMapper.xml:

ExMsgMapper.xml:

ExMsgMapper:

IExMsgService:

ExMsgServiceImpl:

ExMsgList.vue:

健壮性

 学生提交实验作业

未截止任务

ExsMsgMapper.xml:

ExMsgMapper:

 ExMsgServiceImpl:

 ExMsgController:

ExMsgMapper.xml:

 ExMsgContrller:

 StuExMsgList.vue:

健壮性:

删除作业


实验老师编辑好实验任务后,还得将任务发送给选中课程的所有学生

实验老师发布实验

ExMsgMapper.xml:

首先要将此任务是否被学生可见的属性isvisiable设置为"是",然后再将选了这门课的所有学生查询出啦,批量插入到ex_msg表中

ExMsgMapper.xml:

<update id="sendTask">
        update ex_msg
        set isvisiable = "是"
        where id = #{id}
    </update>

    <select id="getStudent" resultType="org.jeecg.modules.demo.CourseSelect.entity.CourseSelset">
        select *
        from course_selset
        where les_id = #{courseid} and les_ord = #{courseord}
    </select>

ExMsgMapper:

void sendTask(@Param("id") String id);
    List<CourseSelset> getStudent(@Param("courseid") String courseid,@Param("courseord") String courseord);

IExMsgService:

void sendTask(String id);
    List<CourseSelset> getStudent(String courseid, String courseord);

ExMsgServiceImpl:

@RequestMapping(value = "/sendTask",method = RequestMethod.GET)
	 public Result<Object> sendTask(@RequestParam(name = "id",required = true) String id){
		exMsgService.sendTask(id);
		return Result.OK();
	 }
	 @RequestMapping(value = "getExStudent",method = RequestMethod.GET)
	 public Result<Object> getExStudent(@RequestParam(name = "extid",required = true) String extid,
										@RequestParam(name = "exname",required = true) String exname,
										@RequestParam(name = "courseid",required = true) String courseid,
										@RequestParam(name = "courseord",required = true) String courseord,
										@RequestParam(name = "coursename",required = true) String coursename,
										@RequestParam(name = "courseclass",required = true) String courseclass,
										@RequestParam(name = "isvisiable",required = true) String isvisiable,
										@RequestParam(name = "experimentname",required = true) String experimentname,
										@RequestParam(name = "extimes",required = true) String extimes,
										@RequestParam(name = "filecontentString",required = true) String filecontentString,
										@RequestParam(name = "deadline",required = true) String deadline
										) throws ParseException {
		//获取所有学生
		 List<CourseSelset> allStudent = exMsgService.getStudent(courseid,courseord);
		 List<ExMsg> exMsgList = new ArrayList<>();
		 //for将所有学生信息插入到exMsgList中
		 for(int i = 0;i<allStudent.size();i++){
			 CourseSelset courseSelset = allStudent.get(i);
			 ExMsg exMsgItem = new ExMsg();
			 exMsgItem.setExtid(extid);
			 exMsgItem.setExname(exname);
			 exMsgItem.setCourseid(courseid);
			 exMsgItem.setCourseord(courseord);
			 exMsgItem.setCoursename(coursename);
			 exMsgItem.setCourseclass(courseclass);
			 exMsgItem.setExperimentname(experimentname);
			 exMsgItem.setExtimes(extimes);
			 exMsgItem.setFilecontentString(filecontentString);
			 exMsgItem.setIsvisiable(isvisiable);
			 exMsgItem.setSid(courseSelset.getStuId());
			 exMsgItem.setStuname(courseSelset.getStuName());
			 exMsgItem.setIshandle("否");
			 SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			 Date deadlineTime = formatter.parse(deadline);
			 exMsgItem.setDeadline(deadlineTime);
			 exMsgItem.setScorevisiable("否");
			 exMsgList.add(exMsgItem);
		 }
		 //使用saveBatch批量加入
		 exMsgService.saveBatch(exMsgList);
		 return Result.OK();
	 }

ExMsgList.vue:

使用@click="sendTask(record)",点击"发布实验"触发点击事件,调用sendTask,传入选中实验任务的信息

sendTask(record){
            if(record.isvisiable != "是"){
                getAction("ExMsg/exMsg/sendTask",{id:record.id}).then(res=>{
                    if(res.success){
                        this.loadData()
                    }else{
                        this.$message.error("操作失败")
                    }
                })
                getAction("ExMsg/exMsg/getExStudent",{extid:record.extid,exname:record.exname,courseid:record.courseid,courseord:record.courseord,coursename:record.coursename,courseclass:record.courseclass
                    ,isvisiable:"是",experimentname: record.experimentname,extimes: record.extimes,filecontentString:record.filecontentString,deadline:record.deadline}).then(res=>{
                    if(res.success){
                        this.$message.success("操作成功")
                        this.loadData()
                    }else{
                        this.$message.error("操作失败")
                    }
                })
            }else{//实验发布后,不能再次发布
                this.$message.error("此任务已发布,不可重复发布!")
            }
            }

        },

健壮性

发布后不能再编辑:

handleEdit: function (record) {
      //实验老师发布任务后,不可再编辑
      if(record.isvisiable == "是"){
        this.$message.error("此任务已发布,不可编辑!")
        return
      }
      //excApply提交申请后,isapply值为"是"
      if(record.isapply == "是"){
        this.$message.error("此任务已申请,不可编辑!")
        return
      }
      this.$refs.modalForm.edit(record);
      this.$refs.modalForm.title = "编辑";
      this.$refs.modalForm.disableSubmit = false;
    },

结果:

 2.发布后不能再次发布:

 3.实验任务发布后不可删除:

修改JeecgListMixin.js中的handleDelete()方法,当它发布后就不能删除;没有发布九可以删除

handleDelete1: function (id,isvisiable) {
      if(isvisiable == "是"){
        this.$message.error("此任务已发布,不能删除!")
        return
      }
      if(!this.url.delete){
        this.$message.error("请设置url.delete属性!")
        return
      }

      var that = this;
      deleteAction(that.url.delete, {id: id}).then((res) => {
        if (res.success) {
          //重新计算分页问题
          that.reCalculatePage(1)
          that.$message.success(res.message);
          that.loadData();
        } else {
          that.$message.warning(res.message);
        }
      });
    },

 学生提交实验作业

未截止任务

学生界面要获取到任务还没到截止时间的任务,方便学生查看自己需要完成的作业

ExsMsgMapper.xml:

选择截止日期大于等于此时此刻的任务

使用

<select id="getExList" resultType="org.jeecg.modules.demo.ExMsg.entity.ExMsg">
        select *
        from ex_msg
        where sid = #{sid} and isvisiable = "是" and deadline >= #{deadline}
    </select>

ExMsgMapper:

List<ExMsg> getExList(@Param("sid") String sid,@Param("deadline") Date deadline);

 ExMsgServiceImpl:

@Override
    public List<ExMsg> getExList(String sid, Date deadline) {
        return this.baseMapper.getExList(sid,deadline);
    }

 ExMsgController:

使用System.currentTimeMillis()来获得当前事件秒数,再用Date封装转为Date格式,即为当前时间

 @RequestMapping(value = "/getExList",method = RequestMethod.GET)
	 public Result<?> getExList(@RequestParam(name="sid",defaultValue = "1")String sid) throws ParseException {
		 SysUser sysUser = iFlowThirdService.getLoginUser();
		 sid = sysUser.getUsername();
		 Date deadline = new Date(System.currentTimeMillis());
		 System.out.println(deadline);
		 List<ExMsg> allList = exMsgService.getExList(sid,deadline);
		 return Result.ok(allList);
	 }

将前端StuExMsgList.vue url中list的设置为"/ExMsg/exMsg/getExList"

url: {
                    list: "/ExMsg/exMsg/getExList",
                    delete: "/ExMsg/exMsg/delete",
                    deleteBatch: "/ExMsg/exMsg/deleteBatch",
                    exportXlsUrl: "/ExMsg/exMsg/exportXls",
                    importExcelUrl: "ExMsg/exMsg/importExcel",

                },

 获取到未截止任务需要可以上传实验作业文件,这个时候需要使用JUpload组件

<j-upload v-model="record.homeworkString" :serviceType = '"1"' :recordOne = "record"></j-upload>

 在JUpload的props中添加serviceType属性来储存服务类型,props中添加recordOne来储存此行record信息

props:{
     serviceType: {
            type: String,
            default: 'demo',
            required: false
        },
     recordOne:{
            type:Object,
            default:{},
        },
}

 在data中添加handleSerType来判断服务类型

data(){

   handleSerType:{
            homework: "1",
              doneHomework:"2"
          },
}

 "上传文件"按钮只要有添加文件或者删除文件等变动,就会调用handleChange()方法

上传文件直接使用JUpload组件中的handleChange()中,即info.file.status==='done'

上传文件后,如果没提交实验,仍属于未提交作业,因此要修改弹出信息来提示用户

用@click="handleTask(record) ”来设置“提交实验”的点击事件

ExMsgMapper.xml:

<update id="handleHomework">
        update ex_msg set homework = #{homework},ishandle = "是"
        where sid = #{sid} and courseid = #{courseid} and courseord = #{courseord} and extimes = #{extimes}
    </update>

 ExMsgContrller:

@RequestMapping(value = "/handleTask",method = RequestMethod.GET)
	 public Result<Object> handleTask(@RequestParam(name = "courseid",required = true) String courseid,
									  @RequestParam(name = "courseord",required = true) String courseord,
									  @RequestParam(name = "extimes",required = true) String extimes,
									  @RequestParam(name = "homeworkString",required = true) String homeworkString
									  ){
		 SysUser sysUser = iFlowThirdService.getLoginUser();
		 String sid = sysUser.getUsername();
		 try {
			 byte[] homework = homeworkString.getBytes("UTF-8");
			 exMsgService.handleHomework(sid,courseid,courseord,extimes,homework);
		 } catch (UnsupportedEncodingException e) {
			 e.printStackTrace();
		 }
		return Result.OK();
	 }

 StuExMsgList.vue:

handleTask(record){
                if(record.ishandle == "是"){
                    this.$message.error("实验已提交,不可重复提交!")
                    return
                }else if(record.homeworkString == ''){
                    this.$message.error("不可提交空作业!")
                    return
                }
                getAction("ExMsg/exMsg/handleTask",{courseid:record.courseid,courseord:record.courseord,extimes:record.extimes,homeworkString:record.homeworkString}).then(res=>{
                    if(res.success){
                        this.$message.success("操作成功")
                        this.loadData()
                    }else{
                        this.$message.error("操作失败")
                    }
                })
            },

 提交试验后,表格属性会改变

健壮性:

 实验提交后不能重复提交:

不可提交空作业:

删除作业

 "上传文件"按钮只要有添加文件或者删除文件等变动,就会调用handleChange()方法

此处主要发生移除文件改变,即info.file.status == 'remove',所以要对handleChange()中的此if判断做修改:

handleChange(info) {
        if(this.serviceType != this.handleSerType.doneHomework){
            console.log("--文件列表改变--")
            if(!info.file.status && this.uploadGoOn === false){
                info.fileList.pop();
            }
            let fileList = info.fileList
            if(info.file.status==='done'){
                if(this.number>0){
                    fileList = fileList.slice(-this.number);
                }
                if(info.file.response.success){
                    fileList = fileList.map((file) => {
                        if (file.response) {
                            let reUrl = file.response.message;
                            file.url = getFileAccessHttpUrl(reUrl);
                        }
                        return file;
                    });
                }
                this.$message.success(`${info.file.name} 上传成功!`);

            }else if (info.file.status === 'error') {
                this.$message.error(`${info.file.name} 上传失败.点击‘提交实验’按钮交作业`);
            }else if(info.file.status === 'removed'){
                this.handleDelete(info.file)
                //添加接口来实现删除提交作业的功能
                if(this.serviceType == this.handleSerType.homework){
                    getAction("ExMsg/exMsg/deleteTask",{courseid:this.recordOne.courseid,courseord:this.recordOne.courseord,extimes:this.recordOne.extimes}).then(res=>{
                        if(res.success){
                            this.$message.success("操作成功")
                            loadData()
                        }else{
                            this.$message.error("操作失败")
                        }
                    })
                    getAction("ExMsg/exMsg/getAllExList").then(res=>{
                        if(res.success){
                            this.$message.success("getList操作成功")
                            loadData()
                        }else{
                            this.$message.error("操作失败")
                        }
                    })
                }
            }
            this.fileList = fileList
            if(info.file.status==='done' || info.file.status === 'removed'){
                //returnUrl为true时仅返回文件路径
                if(this.returnUrl){
                    this.handlePathChange()
                }else{
                    //returnUrl为false时返回文件名称、文件路径及文件大小
                    this.newFileList = [];
                    for(var a=0;a<fileList.length;a++){
                        // update-begin-author:lvdandan date:20200603 for:【TESTA-514】【开源issue】多个文件同时上传时,控制台报错
                        if(fileList[a].status === 'done' ) {
                            var fileJson = {
                                fileName:fileList[a].name,
                                filePath:fileList[a].response.message,
                                fileSize:fileList[a].size
                            };
                            this.newFileList.push(fileJson);
                        }else{
                            return;
                        }
                        // update-end-author:lvdandan date:20200603 for:【TESTA-514】【开源issue】多个文件同时上传时,控制台报错
                    }
                    this.$emit('change', this.newFileList);
                }
            }
        }else{
            this.$message.error("实验已截至,不可修改!");
        }
      },

 this.file.status == 'remove'移除文件判断中调用后端接口先移除任务,再重新连接后端"/ExMsg/exMsg/getExList"获取实验列表

//添加接口来实现删除提交作业的功能
                if(this.serviceType == this.handleSerType.homework){
                    getAction("/ExMsg/exMsg/deleteTask",{courseid:this.recordOne.courseid,courseord:this.recordOne.courseord,extimes:this.recordOne.extimes}).then(res=>{
                        if(res.success){
                            this.$message.success("操作成功")
                            loadData()
                        }else{
                            this.$message.error("操作失败")
                        }
                    })
                    getAction("/ExMsg/exMsg/getExList").then(res=>{
                        if(res.success){
                            loadData()
                        }else{
                            this.$message.error("操作失败")
                        }
                    })
                }

 ExMsgMapper.xml:

<update id="deleteHomework">
        update ex_msg set homework = null,ishandle = "否"
        where sid = #{sid} and courseid = #{courseid} and courseord = #{courseord} and extimes = #{extimes}
    </update>

 ExMsgServiceImpl:

@Override
    public void deleteHomework(String sid, String courseid, String courseord, String extimes) {
        this.baseMapper.deleteHomework(sid,courseid,courseord,extimes);
    }

ExMsgController:

@RequestMapping(value = "/deleteTask",method = RequestMethod.GET)
	 public Result<Object> deleteTask(@RequestParam(name = "courseid",required = true) String courseid,
									  @RequestParam(name = "courseord",required = true) String courseord,
									  @RequestParam(name = "extimes",required = true) String extimes
	 ){
		 SysUser sysUser = iFlowThirdService.getLoginUser();
		 String sid = sysUser.getUsername();
		 exMsgService.deleteHomework(sid,courseid,courseord,extimes);
		 return Result.OK();
	 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值