package com.xxx.project.controller;
import com.xxx.project.common.MsgException;
import com.xxx.project.entity.Counselor;
import com.xxx.project.entity.PlanFile;
import com.xxx.project.entity.Student;
import com.xxx.project.repository.PlanFileRepository;
import com.xxx.project.service.CounselorService;
import com.xxx.project.service.StudentService;
import javassist.bytecode.ByteArray;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.List;
import java.util.stream.Collectors;
@RestController
//@CrossOrigin(allowCredentials = "true")
@RequestMapping(value = "/file")
public class FileController {
@Autowired
private PlanFileRepository planFileRepository;
@Autowired
private StudentService studentService;
@Autowired
private CounselorService counselorService;
public static String getCellValue(Cell cell) {
if (cell == null) return "xxx";
if (cell.getCellType() == CellType.BOOLEAN) {
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == CellType.NUMERIC) {
Double d = cell.getNumericCellValue();
return String.valueOf(d);
}
return String.valueOf(cell.getStringCellValue());
}
// 学生信息excel文档解析
@PostMapping("/upload/student")
@Transactional
public String uploadExcel (MultipartFile file) throws IOException, MsgException {
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
XSSFSheet sheet = workbook.getSheetAt(0);
int total = sheet.getPhysicalNumberOfRows();
for (int i = 1; i < total; i++) {
Row row = sheet.getRow(i);
Student student = new Student();
System.err.println(getCellValue(row.getCell(0)));
System.err.println(row.getCell(0).getCellType());
student.setStudentId(getCellValue(row.getCell(0)));
student.setName(getCellValue(row.getCell(1)));
if (getCellValue(row.getCell(2)).equals("男")) {
student.setGender(true);
} else {
student.setGender(false);
}
student.setCollege(getCellValue(row.getCell(3)));
student.setProfession(getCellValue(row.getCell(4)));
student.setPhoneNumber(getCellValue(row.getCell(5)));
student.setCode(getCellValue(row.getCell(6)));
student.setClassNum(getCellValue(row.getCell(7)));
student.setGradeNum(getCellValue(row.getCell(8)));
studentService.add(student);
}
return "上传成功!";
} // 教师信息excel文档解析
@PostMapping("/upload/teacher")
@Transactional
public String uploadExcel1 (MultipartFile file) throws IOException, MsgException {
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
XSSFSheet sheet = workbook.getSheetAt(0);
int total = sheet.getPhysicalNumberOfRows();
for (int i = 1; i < total; i++) {
Row row = sheet.getRow(i);
Counselor counselor = new Counselor();
counselor.setCounselorId(getCellValue(row.getCell(0)));
counselor.setName(getCellValue(row.getCell(1)));
if (getCellValue(row.getCell(2)).equals("男")) {
counselor.setGender(true);
} else {
counselor.setGender(false);
}
counselor.setCollege(getCellValue(row.getCell(3)));
counselor.setPhoneNumber(getCellValue(row.getCell(4)));
counselor.setCode(getCellValue(row.getCell(5)));
counselorService.add(counselor);
}
return "上传成功!";
}
// 文件上传
@PostMapping(value = "/upload/{id}")
public PlanFile upload(@PathVariable(name = "id") String extraId, @RequestParam(name = "name") String name, @RequestParam(name = "type") String type, @RequestParam(name = "file", required = false) MultipartFile file) throws IOException {
PlanFile planFile = new PlanFile();
planFile.setFile(file.getBytes());
planFile.setExtraId(extraId);
planFile.setName(name);
planFile.setType(type);
planFileRepository.save(planFile);
planFile.setFile(null);
return planFile;
}
// 获取文件列表
@GetMapping(value = "/{id}")
public List<PlanFile> getFile(@PathVariable(value = "id") String id) {
List<PlanFile> list = planFileRepository.findAllByExtraId(id);
List<PlanFile> ret = list.stream().filter(obj -> {
obj.setFile(null);
return true;
}).collect(Collectors.toList());
return ret;
}
// 删除单个文件
@DeleteMapping(value = "/{id}")
public void delete(@PathVariable(value = "id") String id) {
planFileRepository.deleteById(id);
}
// 下载文件
@GetMapping(value = "/download/{id}")
public String onePicture(@PathVariable(value = "id") String fileId, HttpServletResponse response) throws UnsupportedEncodingException {
PlanFile planFile = planFileRepository.getOne(fileId);
if (planFile.getFile() != null) {
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(planFile.getName(), "UTF-8"));// 设置文件名
OutputStream os = null;
try {
os = response.getOutputStream();
os.write(planFile.getFile(), 0, planFile.getFile().length);
return "下载成功";
} catch (IOException e) {
e.printStackTrace();
}
}
return "下载失败";
}
// 下载文件模板
@GetMapping(value = "/download/student")
public void getStudentTemplate(HttpServletResponse response) throws UnsupportedEncodingException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("学生文件模板");
Row row = sheet.createRow(0);
String[] strings = new String[]{"学号", "姓名", "性别", "学院", "专业", "电话", "身份证号码", "班级", "年级"};
for (int i = 0; i < 9; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(strings[i]);
}
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("学生信息导入.xlsx", "UTF-8"));// 设置文件名
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 下载文件模板
@GetMapping(value = "/download/teacher")
public void getTeacherTemplate(HttpServletResponse response) throws UnsupportedEncodingException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("教师文件模板");
Row row = sheet.createRow(0);
String[] strings = new String[]{"教师号", "姓名", "性别", "学院", "电话", "身份证号码"};
for (int i = 0; i < 6; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(strings[i]);
}
response.setContentType("
基于SpringBoot+Vue实现的竞赛系统.zip
需积分: 0 186 浏览量
更新于2023-08-18
收藏 40KB ZIP 举报
这是一个基于Java的SpringBoot框架和前端Vue.js技术实现的竞赛管理系统项目。该项目作为一个完整的Web应用,旨在提供一个高效、易用且功能丰富的平台,用于组织和管理各类竞赛活动。
SpringBoot是Spring框架的一个轻量级扩展,它简化了Spring应用的初始搭建以及开发过程。通过内置的Tomcat服务器和自动配置功能,SpringBoot可以快速构建可独立运行的Java应用。在本项目中,SpringBoot可能被用来处理HTTP请求、数据库交互、服务层逻辑以及安全控制等核心功能。
Vue.js是一个用于构建用户界面的渐进式框架,它强调声明式渲染和组件化。Vue.js的应用结构清晰,易于理解和维护,特别适合构建单页面应用。在竞赛系统中,Vue.js可能被用于构建前端界面,实现动态数据绑定、路由管理、状态管理和组件通信等功能。
项目中可能包含以下关键模块:
1. 用户管理:包括用户注册、登录、权限管理等功能,SpringBoot的安全组件Spring Security可以用于这些场景。
2. 竞赛管理:允许创建、编辑和删除竞赛信息,管理参赛者报名,可能使用SpringBoot的数据访问层与数据库交互。
3. 报名与参赛者管理:处理用户的报名申请,记录参赛者信息,可能结合使用Vue.js的表单处理和SpringBoot的RESTful API。
4. 分组与赛程安排:实现竞赛分组和赛程的设定,需要与后台数据库进行复杂的数据操作。
5. 结果公布与成绩查询:发布竞赛结果,提供成绩查询接口,展示给用户。
6. 权限与角色控制:不同角色(如管理员、参赛者、观众)拥有不同的操作权限,这可以通过SpringBoot的权限控制机制实现。
7. 实时通知与消息推送:可能利用WebSocket或轮询等方式实现实时的消息传递,提高用户体验。
为了更好地理解和运行项目,下载后需首先查看`README.md`文件,该文件通常会包含项目的安装步骤、依赖项、数据库配置以及如何启动和测试应用等重要信息。此外,项目源码的结构分析、关键类的功能介绍、数据库模型设计以及Vue组件的详细说明也将有助于深入理解系统的实现细节。
这个基于SpringBoot+Vue的竞赛系统展示了现代Web开发的技术趋势,结合了后端的强大功能和前端的优秀用户体验,是学习和实践这两种技术的绝佳实例。通过研究此项目,开发者可以提升对SpringBoot后端开发和Vue.js前端构建的理解,同时掌握实际项目中的集成应用。