From 7293f04d18fb2e882e152f962c3aa1d8fcb1f93e Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Wed, 17 Nov 2021 15:46:35 +0800
Subject: [PATCH] 证书打印信息导出修改

---
 src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java |   11 +
 src/main/java/org/springblade/modules/system/mapper/UserMapper.xml                                    |    4 
 src/main/java/org/springblade/common/utils/ConvertUtil.java                                           |   55 +++++
 src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml             |  120 ++++++++++
 src/main/resources/xls/securityPaper.xlsx                                                             |    0 
 src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java                     |   42 +-
 src/main/java/org/springblade/common/excel/MySheetWriteHandler.java                                   |   45 ++++
 src/main/resources/application-test.yml                                                               |    4 
 src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java    |  275 ++++++++++++++++++++++++
 src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java            |    7 
 src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java                        |   20 +
 src/main/java/org/springblade/modules/exam/excel/ExamScoreExcel.java                                  |    6 
 src/main/java/org/springblade/modules/accreditation/service/AccreditationRecordsService.java          |    5 
 src/main/java/org/springblade/modules/accreditation/excel/ExportSecurityPaperExcelVO.java             |   40 +++
 src/main/resources/xls/export_package_template.xlsx                                                   |    0 
 src/main/resources/application.yml                                                                    |    1 
 src/main/java/org/springblade/modules/system/vo/UserVO.java                                           |    5 
 17 files changed, 602 insertions(+), 38 deletions(-)

diff --git a/src/main/java/org/springblade/common/excel/MySheetWriteHandler.java b/src/main/java/org/springblade/common/excel/MySheetWriteHandler.java
new file mode 100644
index 0000000..b614835
--- /dev/null
+++ b/src/main/java/org/springblade/common/excel/MySheetWriteHandler.java
@@ -0,0 +1,45 @@
+package org.springblade.common.excel;
+
+import com.alibaba.excel.write.handler.SheetWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+public class MySheetWriteHandler implements SheetWriteHandler {
+	@Override
+	public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
+
+	}
+
+	@Override
+	public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
+		Workbook workbook = writeWorkbookHolder.getWorkbook();
+		Sheet sheet = workbook.getSheetAt(0);
+		Row row1 = sheet.createRow(0);
+		row1.setHeight((short) 500);
+		Cell cell = row1.createCell(0);
+		//设置单元格内容
+		cell.setCellValue("附件2");
+		//设置标题
+		Row row2 = sheet.createRow(1);
+		row2.setHeight((short) 800);
+		Cell cell1 = row2.createCell(0);
+		cell1.setCellValue("存量建筑垃圾堆体治理进度月报表");
+		CellStyle cellStyle = workbook.createCellStyle();
+		cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+		cellStyle.setAlignment(HorizontalAlignment.CENTER);
+		Font font = workbook.createFont();
+		font.setBold(true);
+		font.setFontHeight((short) 400);
+		cellStyle.setFont(font);
+		cell1.setCellStyle(cellStyle);
+		sheet.addMergedRegionUnsafe(new CellRangeAddress(1, 1, 0, 17));
+		//设置填表日期,填报人,联系方式
+		Row row3 = sheet.createRow(2);
+		row3.setHeight((short) 500);
+		row3.createCell(1).setCellValue("填表日期");
+		row3.createCell(11).setCellValue("填表人");
+		row3.createCell(15).setCellValue("联系方式");
+	}
+}
diff --git a/src/main/java/org/springblade/common/utils/ConvertUtil.java b/src/main/java/org/springblade/common/utils/ConvertUtil.java
new file mode 100644
index 0000000..9217095
--- /dev/null
+++ b/src/main/java/org/springblade/common/utils/ConvertUtil.java
@@ -0,0 +1,55 @@
+package org.springblade.common.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class ConvertUtil {
+	// inputStream转outputStream
+	public static ByteArrayOutputStream parse(final InputStream in) throws Exception {
+		final ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
+		int ch;
+		while ((ch = in.read()) != -1) {
+			swapStream.write(ch);
+		}
+		return swapStream;
+	}
+
+	// outputStream转inputStream
+	public ByteArrayInputStream parse(final OutputStream out) throws Exception {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		baos = (ByteArrayOutputStream) out;
+		final ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());
+		return swapStream;
+	}
+
+	// inputStream转String
+	public String parse_String(final InputStream in) throws Exception {
+		final ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
+		int ch;
+		while ((ch = in.read()) != -1) {
+			swapStream.write(ch);
+		}
+		return swapStream.toString();
+	}
+
+	// OutputStream 转String
+	public String parse_String(final OutputStream out) throws Exception {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		baos = (ByteArrayOutputStream) out;
+		final ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());
+		return swapStream.toString();
+	}
+
+	// String转inputStream
+	public ByteArrayInputStream parse_inputStream(final String in) throws Exception {
+		final ByteArrayInputStream input = new ByteArrayInputStream(in.getBytes());
+		return input;
+	}
+
+	// String 转outputStream
+	public ByteArrayOutputStream parse_outputStream(final String in) throws Exception {
+		return parse(parse_inputStream(in));
+	}
+}
diff --git a/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java b/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
index 4900cc0..4e72d3a 100644
--- a/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
+++ b/src/main/java/org/springblade/modules/accreditation/controller/AccreditationRecordsController.java
@@ -1,11 +1,20 @@
 package org.springblade.modules.accreditation.controller;
 
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.enums.WriteDirectionEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.apache.commons.codec.Charsets;
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.*;
+import org.springblade.common.utils.ConvertUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
@@ -14,15 +23,22 @@
 import org.springblade.modules.FTP.FtpUtil;
 import org.springblade.modules.accreditation.excel.ExportSecurityBookPaperExcel;
 import org.springblade.modules.accreditation.excel.ExportSecurityPaperExcel;
+import org.springblade.modules.accreditation.excel.ExportSecurityPaperExcelVO;
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.service.IUserService;
 import org.springblade.modules.accreditation.entity.AccreditationRecords;
 import org.springblade.modules.accreditation.service.AccreditationRecordsService;
 import org.springblade.modules.accreditation.vo.AccreditationRecordsVo;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
 import org.springframework.web.bind.annotation.*;
 
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -274,4 +290,261 @@
 	}
 
 
+	/**
+	 * 导出证书制证信息(包含照片)
+	 */
+	@GetMapping("export-security-book-papers")
+	public void exportSecurityBookPapers(AccreditationRecordsVo accreditationRecords, HttpServletResponse response) throws Exception {
+		//按条件查询成绩数据
+		List<AccreditationRecordsVo> excels = accreditationRecordsService.exportSecurityBookPapers(accreditationRecords);
+		List<ExportSecurityPaperExcelVO> list = new ArrayList<>();
+		//数据转换封装
+		excels.forEach(accreditationRecordsVo -> {
+			ExportSecurityPaperExcelVO exportSecurityPaperExcelVO = new ExportSecurityPaperExcelVO();
+			//如果头像有
+			if (null != accreditationRecordsVo.getAvatar() && accreditationRecordsVo.getAvatar() != "") {
+				exportSecurityPaperExcelVO.setAvatar(accreditationRecordsVo.getAvatar());
+			}
+			exportSecurityPaperExcelVO.setName(accreditationRecordsVo.getRealName()+accreditationRecordsVo.getIdCardNo());
+			//封装
+			list.add(exportSecurityPaperExcelVO);
+		});
+		// 声明一个工作薄
+		HSSFWorkbook workBook = new HSSFWorkbook();
+		// 生成一个表格
+		HSSFSheet sheet = workBook.createSheet();
+		//首行锁定
+//		sheet.createFreezePane(0, 1, 0, 1);
+		workBook.setSheetName(0, "证书打印信息");
+		CellStyle style = workBook.createCellStyle();
+		Font font = workBook.getFontAt((short) 0);
+		font.setCharSet(HSSFFont.DEFAULT_CHARSET);
+		//更改默认字体大小
+		font.setFontHeightInPoints((short) 12);
+		font.setFontName("宋体");
+		style.setFont(font);
+		// 上下居中
+		style.setVerticalAlignment(VerticalAlignment.CENTER);
+		//默认宽高
+		sheet.setDefaultColumnWidth((short)11);
+
+		// 创建表格标题行 第一行
+//		HSSFRow titleRow = sheet.createRow(0);
+//		titleRow.setHeight((short) 300);
+//		titleRow.createCell(0).setCellValue("员工姓名");
+//		titleRow.createCell(1).setCellValue("员工照片");
+		HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+		//如果总数小于等于7
+		if (list.size()<=7){
+			HSSFRow row = sheet.createRow(0);
+			row.setHeight((short) 1980);
+			HSSFRow row1 = sheet.createRow(1);
+			row1.setHeight((short) 300);
+			for (int i = 0; i < list.size(); i++) {
+				ExportSecurityPaperExcelVO checkWorkVo = list.get(i);
+				row1.createCell(i).setCellValue(checkWorkVo.getName());
+				//如果头像有
+				if (null != list.get(i).getAvatar() && list.get(i).getAvatar() != "") {
+					if (list.get(i).getAvatar().contains("http:")) {
+						//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
+						BufferedImage bufferImg = null;
+						//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
+						ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
+						try {
+							bufferImg = ImageIO.read(new URL(list.get(i).getAvatar()));
+						} catch (IOException e) {
+							e.printStackTrace();
+						}
+						try {
+							ImageIO.write(bufferImg, "jpg", byteArrayOut);
+						} catch (IOException e) {
+							e.printStackTrace();
+						}
+						//anchor主要用于设置图片的属性
+						HSSFClientAnchor anchor =
+							new HSSFClientAnchor
+								(        0, //x缩放
+									0, // y缩放
+									1023, //最大1023
+									255, //最大255
+									(short) i,  //宽度占几格 0开始
+									0, //在第几行
+									(short) i, //宽度占几格 0开始
+									0 //第几列
+								);
+						//插入图片
+						patriarch.createPicture(anchor, workBook.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
+					}
+				}
+			}
+		}else {
+			//总数大于7
+			List<ExportSecurityPaperExcelVO> excelList = new ArrayList<>();
+			//标记行,初始为0
+			int rowNum = -2;
+			for (int i = 0; i < list.size(); i++) {
+				//每次从集合中读取7个对象,求余数
+				if (i != 0 && (i + 1) % 7 == 0) {
+					excelList.add(list.get(i));
+					rowNum = rowNum + 2;
+					//写入表格
+					writeBookForEach(excelList,rowNum,workBook,sheet,patriarch);
+					//清空集合
+					excelList.clear();
+				} else {
+					excelList.add(list.get(i));
+				}
+			}
+			//判断余下的
+			if (excelList.size()>0){
+				rowNum++;
+				//写入表格
+				writeBookForEach(excelList,rowNum,workBook,sheet,patriarch);
+			}
+		}
+		//导出数据
+		response.setContentType("application/vnd.ms-excel; charset=UTF-8");
+		response.setHeader("Content-Disposition", "attachment;filename=" + "证书打印信息导出"+DateUtil.time() + ".xlsx");
+		workBook.write(response.getOutputStream());
+	}
+
+	/**
+	 * 循环写入表格
+	 * @param list 每行需要插入的数据
+	 * @param rowNum 行标记
+	 * @param workBook book
+	 * @param sheet sheet
+	 * @param patriarch 画图对象
+	 */
+	private void writeBookForEach(List<ExportSecurityPaperExcelVO> list, int rowNum, HSSFWorkbook workBook, HSSFSheet sheet, HSSFPatriarch patriarch) {
+		HSSFRow row = sheet.createRow(rowNum);
+		row.setHeight((short) 1980);
+		HSSFRow row1 = sheet.createRow(rowNum+1);
+		row1.setHeight((short) 300);
+		for (int i = 0; i < list.size(); i++) {
+			ExportSecurityPaperExcelVO checkWorkVo = list.get(i);
+			row1.createCell(i).setCellValue(checkWorkVo.getName());
+			//如果头像有
+			if (null != list.get(i).getAvatar() && list.get(i).getAvatar() != "") {
+				if (list.get(i).getAvatar().contains("http:")) {
+					//画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
+					BufferedImage bufferImg = null;
+					//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
+					ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
+					try {
+						bufferImg = ImageIO.read(new URL(list.get(i).getAvatar()));
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+					try {
+						ImageIO.write(bufferImg, "jpg", byteArrayOut);
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+					//anchor主要用于设置图片的属性
+					HSSFClientAnchor anchor =
+						new HSSFClientAnchor
+							(        0, //x缩放
+								0, // y缩放
+								1023, //最大1023
+								255, //最大255
+								(short) i,  //宽度占几格 0开始
+								rowNum, //在第几行
+								(short) i, //宽度占几格 0开始
+								rowNum //第几列
+							);
+					//插入图片
+					patriarch.createPicture(anchor, workBook.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
+				}
+			}
+		}
+	}
+
+
+//	/**
+//	 * 导出证书制证信息(包含照片)  easyExcel 填充
+//	 */
+//	@GetMapping("export-security-book-papers")
+//	public void exportSecurityBookPapers(AccreditationRecordsVo accreditationRecords, HttpServletResponse response) throws Exception {
+//		//按条件查询成绩数据
+//		List<AccreditationRecordsVo> excels = accreditationRecordsService.exportSecurityBookPapers(accreditationRecords);
+//		List<ExportSecurityPaperExcelVO> list = new ArrayList<>();
+//		excels.forEach(accreditationRecordsVo -> {
+//			ExportSecurityPaperExcelVO exportSecurityPaperExcelVO = new ExportSecurityPaperExcelVO();
+//			//如果头像有
+//			if (null != accreditationRecordsVo.getAvatar() && accreditationRecordsVo.getAvatar() != "") {
+//				try {
+//					if (accreditationRecordsVo.getAvatar().contains("http:")) {
+//						exportSecurityPaperExcelVO.setAvatar(new URL(accreditationRecordsVo.getAvatar()));
+//					}
+//				} catch (MalformedURLException e) {
+//					e.printStackTrace();
+//				}
+//			}
+//			exportSecurityPaperExcelVO.setName(accreditationRecordsVo.getRealName()+accreditationRecordsVo.getIdCardNo());
+//			//封装
+//			list.add(exportSecurityPaperExcelVO);
+//		});
+//		String fileName = null;
+//		try {
+//			response.setContentType("application/vnd.ms-excel");
+//			response.setCharacterEncoding(org.apache.commons.codec.Charsets.UTF_8.name());
+//			fileName = URLEncoder.encode("证书制证数据"+ DateUtil.time(), Charsets.UTF_8.name());
+////			response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+//			//修改单元格格式为文本格式
+////			EasyExcel.write(response.getOutputStream(), AccreditationRecordsVo.class)
+////				.sheet("证书制证数据表")
+////				.doWrite(excels);
+//			// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
+//			// {} 代表普通变量 {.} 代表是list的变量securityPaper.xlsx
+//			String templateFileName = "xls" + File.separator + "securityPaper.xlsx";
+////			Resource resource = new ClassPathResource("xls" + File.separator + "securityPaper.xlsx");
+////			InputStream is = resource.getInputStream();
+////			ByteArrayOutputStream os = ConvertUtil.parse(is);
+//////			ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build();
+////			ExcelWriter excelWriter = EasyExcel.write().file(os).withTemplate(templateFileName).build();
+//
+//			ExcelWriter excelWriter = null;
+//			try {
+//				excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate
+//					(new ClassPathResource(templateFileName).getInputStream()).build();
+//			} catch (IOException e) {
+//			}
+//
+//			//设置横向填充
+//			FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
+//			WriteSheet writeSheet = EasyExcel.writerSheet().build();
+//			excelWriter.fill(list, fillConfig, writeSheet);
+////			//如果总数小于等于8
+////			if (list.size()<=8){
+////				WriteSheet writeSheet = EasyExcel.writerSheet().build();
+////				excelWriter.fill(list, fillConfig, writeSheet);
+////			}else {
+////				//总数大于8
+////				List<ExportSecurityPaperExcelVO> excelList = new ArrayList<>();
+////				for (int i = 0; i < list.size(); i++) {
+////					//每次从集合中读取8个对象
+////					if (i != 0 && (i + 1) / 8 == 0) {
+////						WriteSheet writeSheet = EasyExcel.writerSheet().build();
+////						excelWriter.fill(excelList, fillConfig, writeSheet);
+////						//清空集合
+////						excelList.clear();
+////					} else {
+////						excelList.add(list.get(i));
+////					}
+////				}
+////				//判断余下的
+////				if (excelList.size()>0){
+////					WriteSheet writeSheet = EasyExcel.writerSheet().build();
+////					excelWriter.fill(excelList, fillConfig, writeSheet);
+////				}
+////			}
+//			// 别忘记关闭流
+//			excelWriter.finish();
+//		} catch (Throwable var6) {
+//			throw var6;
+//		}
+//	}
+
+
 }
diff --git a/src/main/java/org/springblade/modules/accreditation/excel/ExportSecurityPaperExcelVO.java b/src/main/java/org/springblade/modules/accreditation/excel/ExportSecurityPaperExcelVO.java
new file mode 100644
index 0000000..8e5470d
--- /dev/null
+++ b/src/main/java/org/springblade/modules/accreditation/excel/ExportSecurityPaperExcelVO.java
@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.accreditation.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.net.URL;
+
+/**
+ * ExamPaymentExcelVO
+ * @author zhongrj
+ * @since 2021-11-16
+ */
+@Data
+public class ExportSecurityPaperExcelVO implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	private String avatar;
+
+	private String name;
+}
diff --git a/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java b/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java
index 181efb3..789d5df 100644
--- a/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java
+++ b/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.java
@@ -26,7 +26,7 @@
 	 * @param recruitment 实体
 	 * @return
 	 */
-	List<AccreditationRecordsVo> selectAccreditationRecordsPage(IPage page, @Param("accreditationRecords") AccreditationRecordsVo recruitment);
+	List<AccreditationRecordsVo> selectAccreditationRecordsPage(IPage<AccreditationRecordsVo> page, @Param("accreditationRecords") AccreditationRecordsVo recruitment);
 
 	/**
 	 * 自定义详情信息
@@ -48,4 +48,9 @@
 	 * @return
 	 */
     List<ExportSecurityBookPaperExcel> exportSecurityBookPaper(@Param("accreditationRecords") AccreditationRecordsVo accreditationRecords);
+
+	/**
+	 * 导出证书制证信息(包含照片)
+	 */
+	List<AccreditationRecordsVo> exportSecurityBookPapers(@Param("accreditationRecords") AccreditationRecordsVo accreditationRecords);
 }
diff --git a/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml b/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml
index e8db204..317e9c1 100644
--- a/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml
+++ b/src/main/java/org/springblade/modules/accreditation/mapper/AccreditationRecordsMapper.xml
@@ -8,7 +8,8 @@
             sar.*,
             bt.dept_name AS deptName,
             bu.real_name realName,
-            bu.sex,bu.cardid idCardNo,
+            IF(mod(SUBSTR(bu.cardid,17,1),2),1,2) sex,
+            bu.cardid idCardNo,
             bu.securitynumber securityNumber,
             bu.avatar,
             ifnull(DATE_FORMAT(NOW(), '%Y') - SUBSTRING( bu.cardid,7,4),0) age,
@@ -73,6 +74,9 @@
         <if test="accreditationRecords.deptId!=null">
             and bt.id = #{accreditationRecords.deptId}
         </if>
+        <if test="accreditationRecords.userType!=null">
+            and bu.user_type = #{accreditationRecords.userType}
+        </if>
         <if test="accreditationRecords.type!=null">
             and sar.type = #{accreditationRecords.type}
         </if>
@@ -91,7 +95,6 @@
         <if test="accreditationRecords.endTime!=null and accreditationRecords.endTime!='' and accreditationRecords.endTime!='undefined'">
             and sar.create_time &lt;= #{accreditationRecords.endTime}
         </if>
-        order by sar.create_time desc
     </select>
 
     <!--自定义详情信息-->
@@ -100,7 +103,8 @@
         sar.*,
         bt.dept_name AS deptName,
         bu.real_name realName,
-        bu.sex,bu.cardid idCardNo,
+        IF(mod(SUBSTR(bu.cardid,17,1),2),1,2) sex,
+        bu.cardid idCardNo,
         bu.securitynumber securityNumber,
         bu.avatar,
         ifnull(DATE_FORMAT(NOW(), '%Y') - SUBSTRING( bu.cardid,7,4),0) age
@@ -126,7 +130,8 @@
         sar.*,
         bt.dept_name AS deptName,
         bu.real_name realName,
-        bu.sex,bu.cardid idCardNo,
+        IF(mod(SUBSTR(bu.cardid,17,1),2),1,2) sex,
+        bu.cardid idCardNo,
         bu.securitynumber securityNumber,
         bu.avatar,
         ifnull(DATE_FORMAT(NOW(), '%Y') - SUBSTRING( bu.cardid,7,4),0) age
@@ -172,6 +177,9 @@
         <if test="accreditationRecords.securityNumber!=null and  accreditationRecords.securityNumber!=''">
             and bu.securitynumber like concat('%', #{accreditationRecords.securityNumber},'%')
         </if>
+        <if test="accreditationRecords.userType!=null">
+            and bu.user_type = #{accreditationRecords.userType}
+        </if>
         <if test="accreditationRecords.jurisdiction!=null and accreditationRecords.jurisdiction!='' and accreditationRecords.jurisdiction!='1372091709474910209'">
             and (sj.id = #{accreditationRecords.jurisdiction} or sj.parent_id = #{accreditationRecords.jurisdiction})
         </if>
@@ -202,7 +210,6 @@
         <if test="accreditationRecords.endTime!=null and accreditationRecords.endTime!='' and accreditationRecords.endTime!='undefined'">
             and sar.create_time &lt;= #{accreditationRecords.endTime}
         </if>
-        order by sar.create_time desc
     </select>
 
 
@@ -210,7 +217,8 @@
     <select id="exportSecurityBookPaper" resultType="org.springblade.modules.accreditation.excel.ExportSecurityBookPaperExcel">
         SELECT
         bu.real_name realName,
-        bu.sex,bu.cardid idCardNo,
+        IF(mod(SUBSTR(bu.cardid,17,1),2),1,2) sex,
+        bu.cardid idCardNo,
         bt.dept_name AS deptName,
         bu.securitynumber securityNumber,
         bu1.real_name applyName,
@@ -271,6 +279,9 @@
         <if test="accreditationRecords.status!=null">
             and sar.status = #{accreditationRecords.status}
         </if>
+        <if test="accreditationRecords.userType!=null">
+            and bu.user_type = #{accreditationRecords.userType}
+        </if>
         <if test="accreditationRecords.createUser!=null">
             and sar.create_user = #{accreditationRecords.createUser}
         </if>
@@ -295,6 +306,101 @@
         <if test="accreditationRecords.endTime!=null and accreditationRecords.endTime!='' and accreditationRecords.endTime!='undefined'">
             and sar.create_time &lt;= #{accreditationRecords.endTime}
         </if>
-        order by sar.create_time desc
+    </select>
+
+
+    <!--导出证书制证信息(包含照片)-->
+    <select id="exportSecurityBookPapers" resultType="org.springblade.modules.accreditation.vo.AccreditationRecordsVo">
+        SELECT
+        sar.*,
+        bt.dept_name AS deptName,
+        bu.real_name realName,
+        IF(mod(SUBSTR(bu.cardid,17,1),2),1,2) sex,
+        bu.cardid idCardNo,
+        bu.securitynumber securityNumber,
+        bu.avatar,
+        ifnull(DATE_FORMAT(NOW(), '%Y') - SUBSTRING( bu.cardid,7,4),0) age,
+        bu1.real_name applyName,
+        bt1.dept_name applyUnit,
+        bu.registered,
+        bu.user_type userType
+        FROM
+        sys_accreditation_records sar
+        left join
+        blade_user bu
+        on
+        sar.user_id = bu.id
+        LEFT JOIN
+        blade_dept bt
+        ON
+        bu.dept_id = bt.id
+        left join
+        blade_user bu1
+        on
+        sar.create_user = bu1.id
+        LEFT JOIN
+        blade_dept bt1
+        ON
+        bu1.dept_id = bt1.id
+        left join
+        sys_information si
+        on
+        bt.id = si.departmentid
+        left join
+        sys_jurisdiction sj
+        on
+        sj.id = si.jurisdiction
+        WHERE
+        1=1
+        and bu.status = 1
+        and bu.is_deleted = 0
+        <if test="accreditationRecords.deptName!=null and  accreditationRecords.deptName!=''">
+            and bt.dept_name like concat('%', #{accreditationRecords.deptName},'%')
+        </if>
+        <if test="accreditationRecords.realName!=null and  accreditationRecords.realName!=''">
+            and bu.real_name like concat('%', #{accreditationRecords.realName},'%')
+        </if>
+        <if test="accreditationRecords.idCardNo!=null and  accreditationRecords.idCardNo!=''">
+            and bu.cardid like concat('%', #{accreditationRecords.idCardNo},'%')
+        </if>
+        <if test="accreditationRecords.applyUnit!=null and  accreditationRecords.applyUnit!=''">
+            and bt1.dept_name like concat('%', #{accreditationRecords.applyUnit},'%')
+        </if>
+        <if test="accreditationRecords.securityNumber!=null and  accreditationRecords.securityNumber!=''">
+            and bu.securitynumber like concat('%', #{accreditationRecords.securityNumber},'%')
+        </if>
+        <if test="accreditationRecords.jurisdiction!=null and accreditationRecords.jurisdiction!='' and accreditationRecords.jurisdiction!='1372091709474910209'">
+            and (sj.id = #{accreditationRecords.jurisdiction} or sj.parent_id = #{accreditationRecords.jurisdiction})
+        </if>
+        <if test="accreditationRecords.status!=null">
+            and sar.status = #{accreditationRecords.status}
+        </if>
+        <if test="accreditationRecords.createUser!=null">
+            and sar.create_user = #{accreditationRecords.createUser}
+        </if>
+        <if test="accreditationRecords.deptId!=null">
+            and bt.id = #{accreditationRecords.deptId}
+        </if>
+        <if test="accreditationRecords.userType!=null">
+            and bu.user_type = #{accreditationRecords.userType}
+        </if>
+        <if test="accreditationRecords.type!=null">
+            and sar.type = #{accreditationRecords.type}
+        </if>
+        <if test="accreditationRecords.auditStatus!=null">
+            and sar.audit_status = #{accreditationRecords.auditStatus}
+        </if>
+        <if test="accreditationRecords.isAvatar==1">
+            and bu.avatar is not null and bu.avatar!=""
+        </if>
+        <if test="accreditationRecords.isAvatar==2">
+            and (bu.avatar is null or bu.avatar="")
+        </if>
+        <if test="accreditationRecords.startTime!=null and accreditationRecords.startTime!='' and accreditationRecords.startTime!='undefined'">
+            and sar.create_time &gt;= #{accreditationRecords.startTime}
+        </if>
+        <if test="accreditationRecords.endTime!=null and accreditationRecords.endTime!='' and accreditationRecords.endTime!='undefined'">
+            and sar.create_time &lt;= #{accreditationRecords.endTime}
+        </if>
     </select>
 </mapper>
diff --git a/src/main/java/org/springblade/modules/accreditation/service/AccreditationRecordsService.java b/src/main/java/org/springblade/modules/accreditation/service/AccreditationRecordsService.java
index 3c0893f..bdc7240 100644
--- a/src/main/java/org/springblade/modules/accreditation/service/AccreditationRecordsService.java
+++ b/src/main/java/org/springblade/modules/accreditation/service/AccreditationRecordsService.java
@@ -49,4 +49,9 @@
 	 * @return
 	 */
     List<ExportSecurityBookPaperExcel> exportSecurityBookPaper(AccreditationRecordsVo accreditationRecords);
+
+	/**
+	 * 导出证书制证信息(包含照片)
+	 */
+	List<AccreditationRecordsVo> exportSecurityBookPapers(AccreditationRecordsVo accreditationRecords);
 }
diff --git a/src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java b/src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java
index 7860264..3d19de5 100644
--- a/src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java
+++ b/src/main/java/org/springblade/modules/accreditation/service/impl/AccreditationRecordsServiceImpl.java
@@ -152,4 +152,15 @@
 		List<ExportSecurityBookPaperExcel> accreditationRecordsVos = baseMapper.exportSecurityBookPaper(accreditationRecords);
 		return accreditationRecordsVos;
 	}
+
+	/**
+	 * 导出证书制证信息(包含照片)
+	 */
+	@Override
+	public List<AccreditationRecordsVo> exportSecurityBookPapers(AccreditationRecordsVo accreditationRecords) {
+		//查询数据
+		List<AccreditationRecordsVo> accreditationRecordsVos = baseMapper.exportSecurityBookPapers(accreditationRecords);
+		System.out.println("accreditationRecordsVos = " + accreditationRecordsVos.size());
+		return accreditationRecordsVos;
+	}
 }
diff --git a/src/main/java/org/springblade/modules/exam/excel/ExamScoreExcel.java b/src/main/java/org/springblade/modules/exam/excel/ExamScoreExcel.java
index 74b074b..aa747f6 100644
--- a/src/main/java/org/springblade/modules/exam/excel/ExamScoreExcel.java
+++ b/src/main/java/org/springblade/modules/exam/excel/ExamScoreExcel.java
@@ -56,9 +56,9 @@
 	@ExcelProperty("准考证号*")
 	private String candidateNo;
 
-//	@ColumnWidth(15)
-//	@ExcelProperty("理论得分*")
-//	private Integer theoryGrade;
+	@ColumnWidth(15)
+	@ExcelProperty("理论得分*")
+	private Integer theoryGrade;
 
 	@ColumnWidth(15)
 	@ExcelProperty("实操得分*")
diff --git a/src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java b/src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
index ec73a36..8c750f6 100644
--- a/src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
+++ b/src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
@@ -3,9 +3,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
-import org.springblade.common.utils.arg;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.modules.FTP.FtpUtil;
@@ -23,7 +21,6 @@
 import org.springblade.modules.exam.vo.ExamResultVO;
 import org.springblade.modules.exam.vo.ExamScoreVO;
 import org.springblade.modules.exam.vo.UpdateParamVo;
-import org.springblade.modules.system.entity.Role;
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.service.IRoleService;
 import org.springblade.modules.system.service.IUserService;
@@ -39,8 +36,7 @@
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
-
-import static com.bstek.ureport.expression.model.condition.Join.and;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 考试成绩服务实现类
@@ -370,30 +366,30 @@
 //			List<Object> errorList = new ArrayList<>();
 //			//导入状态,默认为true ,如果有一个出现问题则为 false
 //			AtomicBoolean status = new AtomicBoolean(true);
+//			AtomicInteger num = new AtomicInteger();
 //			//遍历
 //			examScoreExcelList.forEach(examScoreExcel -> {
 //				//根据身份证号查询培训信息
-//				User userInfoByIdCardNo = userService.getUserInfoByIdCardNo(examScoreExcel.getIdCardNo());
-//				TrainingRegistration registration = new TrainingRegistration();
-//				registration.setUserId(userInfoByIdCardNo.getId().toString());
-//				TrainingRegistration one1 = trainingRegistrationService.getOne(Condition.getQueryWrapper(registration));
+//				User user = userService.getUserInfoByIdCardNo(examScoreExcel.getIdCardNo());
+////				TrainingRegistration registration = new TrainingRegistration();
+////				registration.setCandidateNo(examScoreExcel.getCandidateNo());
+////				TrainingRegistration one1 = trainingRegistrationService.getOne(Condition.getQueryWrapper(registration));
 ////				测试生成考试成绩
-//				ExamScore examScore = new ExamScore();
-//				examScore.setCandidateNo(one1.getCandidateNo());
+//				ExamScore examScore1 = new ExamScore();
+//				examScore1.setCandidateNo(examScoreExcel.getCandidateNo());
+//				examScore1.setUserId(user.getId().toString());
+//				//根据准考证号和用户id查询考试成绩
+//				ExamScore examScore = this.getOne(Condition.getQueryWrapper(examScore1));
 //				examScore.setQualified(0);
 //				//根据身份证号查询用户
-//				examScore.setUserId(userInfoByIdCardNo.getId().toString());
-//				examScore.setExamId(one1.getTrainExamId());
-//				examScore.setApplyId(one1.getId());
-//				examScore.setLearnGrade(examScoreExcel.getLearnGrade());
 //				examScore.setTheoryGrade(examScoreExcel.getTheoryGrade());
 //				examScore.setAllGrade((examScore.getLearnGrade()+examScore.getTheoryGrade())/2);
 //
 //				//新增
-//				this.save(examScore);
+//				this.updateById(examScore);
 //
 //				//生成准考证号
-//				if (null==userInfoByIdCardNo.getSecuritynumber() || userInfoByIdCardNo.getSecuritynumber().equals("") ) {
+//				if (null==user.getSecuritynumber() || user.getSecuritynumber().equals("") ) {
 //					//去生成保安证编号
 //					String pre = SecurityPaperUtil.getSecurityPaper();
 //					//查询当前年份已有的保安证编号
@@ -407,12 +403,13 @@
 //						count++;
 //						result = pre + (decimalFormat.format(count));
 //					}
-//					userInfoByIdCardNo.setSecuritynumber(result);
+//					user.setSecuritynumber(result);
 //					//修改为持证保安
-//					userInfoByIdCardNo.setHold("1");
-//					userInfoByIdCardNo.setRegistered(examScoreExcel.getExamName());
+//					user.setHold("1");
+////					user.setRegistered(examScoreExcel.getExamName());
 //					//更新保安数据
-//					userService.updateById(userInfoByIdCardNo);
+//					userService.updateById(user);
+//					num.getAndIncrement();
 //				}
 //			});
 //			//如果所有数据导入有一个异常
@@ -420,6 +417,9 @@
 //				String errorAccount = StringUtils.join(errorList, "\\\n");
 //				throw new ServiceException("用户:["+errorAccount+"]实操成绩导入失败!账号与准考证号不匹配!");
 //			}
+//			if (status.get()){
+//				throw new ServiceException("更新成功:"+ num.get());
+//			}
 //		}
 //	}
 
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
index 96c11eb..822efbb 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -54,7 +54,7 @@
     <select id="selectUserPages" resultMap="userResultMap">
         select
         distinct
-        bu.*,
+        bu.*,IF(mod(SUBSTR(bu.cardid,17,1),2),1,2) sexs,
         sll.longitude,sll.latitude,
         bd.dept_name
         from
@@ -233,7 +233,7 @@
     <!--保安员列表-->
     <select id="selectUserPageSecurity" resultMap="userResultMap">
         select
-        bu.*
+        bu.*,IF(mod(SUBSTR(bu.cardid,17,1),2),1,2) sexs
         from
         blade_user bu
         left join
diff --git a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
index 0d955ae..c62718f 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -39,6 +39,8 @@
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.*;
 import org.springblade.modules.FTP.FtpUtil;
+import org.springblade.modules.accreditation.entity.AccreditationRecords;
+import org.springblade.modules.accreditation.service.AccreditationRecordsService;
 import org.springblade.modules.auth.enums.UserEnum;
 import org.springblade.modules.dispatcher.vo.DispatcherVO;
 import org.springblade.modules.information.entity.Information;
@@ -66,6 +68,7 @@
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -85,6 +88,7 @@
 	private final IInformationService iInformationService;
 	private final IDeptService deptService;
 	private final JurisdictionService jurisdictionService;
+	private final AccreditationRecordsService accreditationRecordsService;
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -1169,6 +1173,7 @@
 //		List<String> errorList = new ArrayList<>();
 //		//导入状态,默认为true ,如果有一个出现问题则为 false
 //		AtomicBoolean status = new AtomicBoolean(true);
+//		AtomicInteger count = new AtomicInteger();
 //		data.forEach(userExcel -> {
 //			//判断当前用户是否已在本单位,如果是的更新数据
 //			User user1 = new User();
@@ -1179,9 +1184,18 @@
 //			if (null!=user2){
 //				if (null!=userExcel.getRegistered() && userExcel.getRegistered()!=""){
 //					user2.setRegistered(userExcel.getRegistered());
-//					user2.setUserType(7);
+////					user2.setUserType(7);
 //				}
 //				this.updateById(user2);
+//				count.getAndIncrement();
+//
+////				AccreditationRecords accreditationRecords = new AccreditationRecords();
+////				accreditationRecords.setType(2);
+////				accreditationRecords.setAuditStatus(2);
+////				accreditationRecords.setUserId(user2.getId());
+////				accreditationRecords.setStatus(1);
+////				accreditationRecords.setCreateTime(new Date());
+////				accreditationRecordsService.save(accreditationRecords);
 //			}else {
 //				errorList.add(userExcel.getCardid());
 //			}
@@ -1191,6 +1205,10 @@
 //			String errorAccount = StringUtils.join(errorList, "\\\n");
 //			throw new ServiceException("用户:["+errorAccount+"]导入失败!已在其他单位存在!");
 //		}
+//		if (status.get()){
+//			String errorAccount = StringUtils.join(errorList, "\\\n");
+//			throw new ServiceException("成功导入用户:"+count.get());
+//		}
 //	}
 
 
diff --git a/src/main/java/org/springblade/modules/system/vo/UserVO.java b/src/main/java/org/springblade/modules/system/vo/UserVO.java
index a0e8276..345ad9e 100644
--- a/src/main/java/org/springblade/modules/system/vo/UserVO.java
+++ b/src/main/java/org/springblade/modules/system/vo/UserVO.java
@@ -123,5 +123,10 @@
 	 */
 	private String trainingUnitId;
 
+	/**
+	 * 根据身份证计算性别
+	 */
+	private Integer sexs;
+
 
 }
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 73dbff2..d971c80 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -13,7 +13,7 @@
     #  commandTimeout: 5000
   datasource:
     # MySql
-    url: jdbc:mysql://223.82.109.183:2083/zhbaw-test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+    url: jdbc:mysql://223.82.109.183:2083/zhbaw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
     username: root
     password: zhba0728
 
@@ -39,7 +39,7 @@
 
 #ftp 设置
 ftp:
-  sqlConnect: jdbc:mysql://223.82.109.183:2083/zhbaw-test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+  sqlConnect: jdbc:mysql://223.82.109.183:2083/zhbaw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
   ftpHost: 192.168.0.199
   ftpPort: 21
   ftpUserName: arsn
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c439993..12ac43b 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -210,6 +210,7 @@
       - /blade-desk/**
       - /directive/**
       - /blade-system/**
+      - /blade-user/**
       - /blade-resource/**
       - /liveLocation/**
       - /qrCode/**
diff --git a/src/main/resources/xls/export_package_template.xlsx b/src/main/resources/xls/export_package_template.xlsx
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/main/resources/xls/export_package_template.xlsx
diff --git a/src/main/resources/xls/securityPaper.xlsx b/src/main/resources/xls/securityPaper.xlsx
new file mode 100644
index 0000000..a1207ec
--- /dev/null
+++ b/src/main/resources/xls/securityPaper.xlsx
Binary files differ

--
Gitblit v1.9.3