From 5e070ab9f95348216a4f77e8d33b881eb297edcc Mon Sep 17 00:00:00 2001 From: "rong.liu" Date: Fri, 12 Mar 2021 14:09:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=80=83=E6=A0=B8=E6=88=90?= =?UTF-8?q?=E7=BB=A9=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/msdw/tms/TmsApplication.java | 2 +- .../tms/api/AchievementManagementApi.java | 6 +- .../AchievementManagementController.java | 10 +- .../tms/dao/AchievementManagementDao.java | 5 + .../request/ImportAssessmentRequest.java | 40 ++++++ .../service/AchievementManagementService.java | 4 +- .../AchievementManagementServiceImpl.java | 121 ++++++++++-------- ...绩管理实验记录导出模板 (2).xlsx | Bin 0 -> 8948 bytes .../mapper/tms/AchievementManagementDao.xml | 24 ++++ 9 files changed, 151 insertions(+), 61 deletions(-) create mode 100644 src/main/java/com/msdw/tms/entity/request/ImportAssessmentRequest.java create mode 100644 src/main/resources/excel-template/川大成绩管理实验记录导出模板 (2).xlsx diff --git a/src/main/java/com/msdw/tms/TmsApplication.java b/src/main/java/com/msdw/tms/TmsApplication.java index e2715d0..1e5e101 100644 --- a/src/main/java/com/msdw/tms/TmsApplication.java +++ b/src/main/java/com/msdw/tms/TmsApplication.java @@ -6,7 +6,7 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.scheduling.annotation.EnableScheduling; -@EnableScheduling//定时任务 +//@EnableScheduling//定时任务 @SpringBootApplication public class TmsApplication extends SpringBootServletInitializer { diff --git a/src/main/java/com/msdw/tms/api/AchievementManagementApi.java b/src/main/java/com/msdw/tms/api/AchievementManagementApi.java index 42ff62a..61eb7ed 100644 --- a/src/main/java/com/msdw/tms/api/AchievementManagementApi.java +++ b/src/main/java/com/msdw/tms/api/AchievementManagementApi.java @@ -64,7 +64,7 @@ public interface AchievementManagementApi { @ApiParam(value = "每页显示数据量", required = true) Integer size); @ApiOperation(value = "班级实验成绩导出", notes = "班级实验成绩导出") - void exportAchievement(HttpServletResponse response, @ApiParam(value = "实验记录集合recordId(此处为ids字符串(1,2,3))") String ids) throws Exception; + void exportAchievement(HttpServletResponse response, @ApiParam(value = "实验记录集合recordId(此处为ids字符串(1,2,3))") String ids, @ApiParam(value = "来源(1.练习2.考核)") Integer source) throws Exception; @ApiOperation(value = "成绩管理列表", notes = "成绩管理列表筛选查询") R queryAchievement(@ApiParam(value = "平台id", required = false) Integer systemId, @@ -82,8 +82,8 @@ public interface AchievementManagementApi { @ApiOperation(value = "成绩管理批量删除项目", notes = "将项目管理下的成绩管理批量删除") R deleteReportByIds(@ApiParam(value = "项目id", required = true) List projectIds, - @ApiParam(value = "项目类型(0练习,1考核)", required = true) Integer projectPermissions, - @ApiParam(value = "教学实验id",required = false) List ids); + @ApiParam(value = "项目类型(0练习,1考核)", required = true) Integer projectPermissions, + @ApiParam(value = "教学实验id", required = false) List ids); @ApiOperation(value = "成绩管理:虚拟仿真实验成绩管理", notes = "成绩管理:虚拟仿真实验成绩管理") diff --git a/src/main/java/com/msdw/tms/controller/AchievementManagementController.java b/src/main/java/com/msdw/tms/controller/AchievementManagementController.java index 3b2f903..37a20d5 100644 --- a/src/main/java/com/msdw/tms/controller/AchievementManagementController.java +++ b/src/main/java/com/msdw/tms/controller/AchievementManagementController.java @@ -229,8 +229,8 @@ public class AchievementManagementController implements AchievementManagementApi */ @Override @GetMapping("/exportAchievement") - public void exportAchievement(HttpServletResponse response, @RequestParam String ids) throws Exception { - service.exportAchievement(response, ids);//SearchAchievementVo vo + public void exportAchievement(HttpServletResponse response, @RequestParam String ids, @RequestParam Integer source) throws Exception { + service.exportAchievement(response, ids,source);//SearchAchievementVo vo } //成绩管理列表 @@ -281,9 +281,9 @@ public class AchievementManagementController implements AchievementManagementApi */ @Override @PostMapping("/deleteReportById") - public R deleteReportByIds(@RequestParam List projectIds,@RequestParam Integer projectPermissions, - @RequestParam(required = false) List ids) { - return service.deleteReportById(projectIds,projectPermissions,ids); + public R deleteReportByIds(@RequestParam List projectIds, @RequestParam Integer projectPermissions, + @RequestParam(required = false) List ids) { + return service.deleteReportById(projectIds, projectPermissions, ids); } /** diff --git a/src/main/java/com/msdw/tms/dao/AchievementManagementDao.java b/src/main/java/com/msdw/tms/dao/AchievementManagementDao.java index 799e79a..46004bd 100644 --- a/src/main/java/com/msdw/tms/dao/AchievementManagementDao.java +++ b/src/main/java/com/msdw/tms/dao/AchievementManagementDao.java @@ -8,6 +8,7 @@ import com.msdw.tms.entity.ExperimentalTeachingEntity; import com.msdw.tms.entity.ReportEntity; import com.msdw.tms.entity.ResultsEntity; import com.msdw.tms.entity.request.AchievementImportRequest; +import com.msdw.tms.entity.request.ImportAssessmentRequest; import com.msdw.tms.entity.vo.AchievementManagementVO; import com.msdw.tms.entity.vo.JudgmentPointsRuleVO; import com.msdw.tms.entity.vo.ResultsVo; @@ -51,8 +52,12 @@ public interface AchievementManagementDao extends BaseMapper queryEvaluationReport(Page tPage, String searchContant, Integer projectId); + //导出练习 List queryAchievement(@Param("ids") List ids); + //导出考核 + List queryAchievementByAssessment(Integer id); + List queryFictitiousRecord(Integer systemId, String searchContant, String startingtime, String endtime, Integer month, List projectIds); List queryEducationRecord(Integer systemId, String searchContant, String startingtime, String endtime, Integer month, List projectIds); diff --git a/src/main/java/com/msdw/tms/entity/request/ImportAssessmentRequest.java b/src/main/java/com/msdw/tms/entity/request/ImportAssessmentRequest.java new file mode 100644 index 0000000..aca5e05 --- /dev/null +++ b/src/main/java/com/msdw/tms/entity/request/ImportAssessmentRequest.java @@ -0,0 +1,40 @@ +package com.msdw.tms.entity.request; + +import com.msdw.tms.common.utils.poi.ExcelAttribute; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 班级实验成绩导出模板数据 + */ +@Data +@Accessors(chain = true) +public class ImportAssessmentRequest { + + + //学校 + @ExcelAttribute(sort = 0) + private String schoolName; + + //考核名称 + @ExcelAttribute(sort = 1) + private String experimentalName; + + //学生姓名 + @ExcelAttribute(sort = 2) + private String userName; + + //学号 + @ExcelAttribute(sort = 3) + private String workNumber; + + //分数 + @ExcelAttribute(sort = 4) + private String score; + + //提交时间 + @ExcelAttribute(sort = 5) + private String submitTime; + + +} diff --git a/src/main/java/com/msdw/tms/service/AchievementManagementService.java b/src/main/java/com/msdw/tms/service/AchievementManagementService.java index b142c80..dfd3bc2 100644 --- a/src/main/java/com/msdw/tms/service/AchievementManagementService.java +++ b/src/main/java/com/msdw/tms/service/AchievementManagementService.java @@ -36,7 +36,7 @@ public interface AchievementManagementService extends IService projectId,Integer projectPermissions, List id); + R deleteReportById(List projectId, Integer projectPermissions, List id); List getImitationAchievement(Integer projectId); diff --git a/src/main/java/com/msdw/tms/service/impl/AchievementManagementServiceImpl.java b/src/main/java/com/msdw/tms/service/impl/AchievementManagementServiceImpl.java index 40089a4..69853a1 100644 --- a/src/main/java/com/msdw/tms/service/impl/AchievementManagementServiceImpl.java +++ b/src/main/java/com/msdw/tms/service/impl/AchievementManagementServiceImpl.java @@ -13,6 +13,7 @@ import com.msdw.tms.dao.ProjectRecordDao; import com.msdw.tms.dao.UserInfoDao; import com.msdw.tms.entity.*; import com.msdw.tms.entity.request.AchievementImportRequest; +import com.msdw.tms.entity.request.ImportAssessmentRequest; import com.msdw.tms.entity.vo.AchievementManagementVO; import com.msdw.tms.entity.vo.JudgmentPointsRuleVO; import com.msdw.tms.entity.vo.ResultsVo; @@ -121,47 +122,47 @@ public class AchievementManagementServiceImpl extends ServiceImpl studentName = userInfoDao.queryStudentName(userid); -// if (studentName.size()==0){ -// return R.error("不存在的学生姓名"); -// }else if (student==null){ -// log.info("学生姓名和用户id不匹配!!!"); -// return R.error("错误的个人信息!"); -// } + // RecordVo record = entity.getEntity(); + // //1.信息校验 + // String userName = entity.getUserName(); + // Integer userid = record.getUserid(); + // String teacherName = entity.getTeacherName(); + // //获取学生id和用户id + // StudentEntity student = userInfoDao.queryStudentId(userName,userid); + // //获取学生姓名 + // List studentName = userInfoDao.queryStudentName(userid); + // if (studentName.size()==0){ + // return R.error("不存在的学生姓名"); + // }else if (student==null){ + // log.info("学生姓名和用户id不匹配!!!"); + // return R.error("错误的个人信息!"); + // } //2.根据实验得分 自动获取评语信息 //3.将评语对应的commentId放入entity以便一齐存入实验报告表 //(无判分系统暂写score=100) -// record.setScore(100); -// //根据成绩取出对应的评语和评语id -// Integer score = record.getScore(); -// if (score!=null) { -// if (score<60){ -// entity.setCommentId(1);//成绩不合格 -// }else if (score>=60&&score<70){ -// entity.setCommentId(2);//合格 -// }else if (score>=70&&score<90){ -// entity.setCommentId(3);//良好 -// }else { -// entity.setCommentId(4);//优秀 -// } -// }else { -// return R.error("系统异常,成绩为空!"); -// } + // record.setScore(100); + // //根据成绩取出对应的评语和评语id + // Integer score = record.getScore(); + // if (score!=null) { + // if (score<60){ + // entity.setCommentId(1);//成绩不合格 + // }else if (score>=60&&score<70){ + // entity.setCommentId(2);//合格 + // }else if (score>=70&&score<90){ + // entity.setCommentId(3);//良好 + // }else { + // entity.setCommentId(4);//优秀 + // } + // }else { + // return R.error("系统异常,成绩为空!"); + // } //4.添加实验记录表信息 -// projectRecordDao.addReport(record);//保存至tms_project_record并返回主键 + // projectRecordDao.addReport(record);//保存至tms_project_record并返回主键 //5.添加实验报告表信息 -// entity.setStudentId(student.getStudentId()).setEventId(record.getEventId()); + // entity.setStudentId(student.getStudentId()).setEventId(record.getEventId()); achievementManagementDao.addReport(entity); return R.ok(); @@ -209,23 +210,43 @@ public class AchievementManagementServiceImpl extends ServiceImpl list = new ArrayList<>(); String[] split = ids.split(","); for (int i = 0; i < split.length; i++) { list.add(Integer.parseInt(split[i])); } - List achievement = achievementManagementDao.queryAchievement(list); - - //2.加载模板流数据 - ClassPathResource resource = new ClassPathResource("excel-template/川大成绩管理实验记录导出模板 (1).xlsx"); - InputStream inputStream = resource.getInputStream(); + switch (source) { + case 1: + //1.获取数据 + List achievement = achievementManagementDao.queryAchievement(list); + //2.加载模板流数据 + ClassPathResource resource = new ClassPathResource("excel-template/川大成绩管理实验记录导出模板 (1).xlsx"); + InputStream inputStream = resource.getInputStream(); + //3、通过工具类下载文件 + new ExcelExportUtil(AchievementImportRequest.class, Constant.ROW_INDEX, Constant.STYLE_INDEX). + export(response, inputStream, achievement, "班级实验成绩.xlsx"); + break; + case 2: + //1.获取数据 + + Integer id = Integer.valueOf(list.get(0)); + List assessment = achievementManagementDao.queryAchievementByAssessment(id); + + //2.加载模板流数据 + ClassPathResource resource1 = new ClassPathResource("excel-template/川大成绩管理实验记录导出模板 (2).xlsx"); + InputStream inputStream1 = resource1.getInputStream(); + + //3、通过工具类下载文件 + new ExcelExportUtil(ImportAssessmentRequest.class, Constant.ROW_INDEX, Constant.STYLE_INDEX). + export(response, inputStream1, assessment, "班级实验成绩.xlsx"); + break; + default: + return; + } - //3、通过工具类下载文件 - new ExcelExportUtil(AchievementImportRequest.class, Constant.ROW_INDEX, Constant.STYLE_INDEX). - export(response, inputStream, achievement, "班级实验成绩.xlsx"); } @Override @@ -305,9 +326,9 @@ public class AchievementManagementServiceImpl extends ServiceImpl projectIds,Integer projectPermissions, List ids) { - if (projectPermissions == 1){//实验教学 - for (Integer id: ids) { + public R deleteReportById(List projectIds, Integer projectPermissions, List ids) { + if (projectPermissions == 1) {//实验教学 + for (Integer id : ids) { List teachAchievements = achievementManagementDao.getTeachAchievement(id); for (AchievementManagementVO teachAchievement : teachAchievements) { Integer reportId = teachAchievement.getReportId(); @@ -315,13 +336,13 @@ public class AchievementManagementServiceImpl extends ServiceImpl imitationAchievements = achievementManagementDao.getImitationAchievement(projectId); - for (AchievementManagementVO imitationAchievement: imitationAchievements) { + for (AchievementManagementVO imitationAchievement : imitationAchievements) { Integer reportId = imitationAchievement.getReportId(); Integer recordId = imitationAchievement.getRecordId(); - achievementManagementDao.deleteReport(reportId,recordId); + achievementManagementDao.deleteReport(reportId, recordId); } } } diff --git a/src/main/resources/excel-template/川大成绩管理实验记录导出模板 (2).xlsx b/src/main/resources/excel-template/川大成绩管理实验记录导出模板 (2).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6744c8d879822f949c546368f078ef633b84e25e GIT binary patch literal 8948 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 + + +