下载数据库内容到EXCEL文件

@GetMapping("/downloadExcel")
public void downloadExcel(HttpServletResponse response) {
response.setContentType("application/force-download");// 设置强制下载不打开
File excel;
try {
excel = this.backUpService.getBackUpExcel();
} catch (IOException e) {
// log.error(e.toString());
e.printStackTrace();
return;
}
response.addHeader("Content-Disposition", "attachment;fileName=" + excel.getName());// 设置文件名
wirteFile(excel,response);
}
    @Override
public File getBackUpExcel() throws IOException {
List<Candidate> candidateList = this.candidateMapper.listCandidate(null,null,null,0,0);
List<ExamCourse> examCourseList = this.examCourseMapper.listExamCourse(null,null,null,null,null,0,0);
Map<Long,ExamCourse> examCourse = new HashMap<>();
Iterator var4 = examCourseList.iterator();
while (var4.hasNext()){
ExamCourse e = (ExamCourse) var4.next();
examCourse.put(e.getId(),e);
}
Calendar calendar = Calendar.getInstance();
File file = new File(getExcelPath(calendar))

if(file.exists()&&file.isFile()&&!file.delete()){
throw new RuntimeException("删除原文件出错");
} else if(!file.createNewFile()){
throw new RuntimeException("新建文件出错");
}else {
PrintWriter printWriter;
try {
// printWriter = new PrintWriter(file,"gb2312");
printWriter = new PrintWriter(file, "GBK");
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("新建文件未找到");
}
printWriter.write("序号,姓名,身份证号码,科目名称,性别,准考证号,微信,电话,联系E-mail,考点,考试日期,开考时间,考试时长(分),上下半年\r\n");
int p = 1;
for (Candidate candidate : candidateList) {
candidate.setExamCourse(examCourse.get(candidate.getExamCourse().getId()));
Calendar examTime = Calendar.getInstance();
examTime.setTime(candidate.getExamCourse().getExamTime());
printWriter.write(p++ + "," + candidate.getName() + ","
+ ((char) (9)) + candidate.getIdNumber() + ","
+ candidate.getExamCourse().getCourse().getCourseName() + ","
+ (candidate.getSex() ? "女" : "男") + "," + candidate.getExamineeNumber() + ","
+ (candidate.getWechat() == null ? "" : candidate.getWechat()) + ","
+ ((char) (9)) + candidate.getPhoneNumber() + ","
+ candidate.getEmail() + ","
+ candidate.getExamCourse().getExamLocation().getExamLocationName() + ","
+ examTime.get(Calendar.YEAR) + "-"
+ (examTime.get(Calendar.MONTH) + 1) + "-"
+ examTime.get(Calendar.DATE) + ","
+ examTime.get(Calendar.HOUR) + ":" + examTime.get(Calendar.MINUTE) + ","
+ candidate.getExamCourse().getExamTimeLength() + ","
+ (candidate.getExamCourse().getTerm() ? "下" : "上") + "\r\n");
}
printWriter.flush();
printWriter.close();
return file;
}
}
private String getExcelPath(Calendar calendar) {
String url = fileSaveConfigProperties.getPath() + "/excel";
File file = new File(url);
if(!file.exists()) {
if(!file.mkdir())
throw new RuntimeException("文件夹创建失败");
}
    //通过url创建文件夹中的.csv文件,以便往里面写入数据
return url + "/" + calendar.get(Calendar.YEAR) +
"_" + (calendar.get(Calendar.MONTH) + 1) +
"_" + calendar.get(Calendar.DATE) +
"." + "csv";
}
}


@Configuration
@PropertySource("classpath:config/file_save.properties")
@Component
public class FileSaveConfigProperties {
//savePath在config下的properties文件中设置
@Value("${savePath}")
private String path;

@Value("${delayed}")
private int delayed;

@Value("${Access-Control-Allow-Origin}")
private String accessControlAllowOrigin;
}
    private static void wirteFile(File file, HttpServletResponse response) {
byte[] buffer = new byte[2048];
try(FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis)) {
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
log.info("{} 文件输出完成",file.getName());
} catch (Exception e) {
log.error("{} 文件输出异常", file.getName());
}
}
}
 

posted @ 2018-11-27 16:48  悄悄地超越  阅读(331)  评论(0编辑  收藏  举报