From f41f7a7efb363425a88e1a060f81f785ba2b57a8 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Fri, 29 Oct 2021 21:00:04 +0800
Subject: [PATCH] 新增保安员证相关信息导出接口(包含图片,二维码)

---
 src/main/java/org/springblade/modules/system/mapper/UserMapper.xml               |   53 +++++++
 src/main/java/org/springblade/common/excel/CustomCellWriteWeightConfig.java      |   83 +++++++++++
 src/main/java/org/springblade/modules/exam/service/ExamScoreService.java         |    4 
 src/main/java/org/springblade/modules/exam/mapper/ExamScoreMapper.java           |    1 
 src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java   |   60 ++++++++
 src/main/java/org/springblade/common/excel/CustomCellWriteHeightConfig.java      |   49 +++++++
 src/main/java/org/springblade/modules/system/controller/UserController.java      |   31 ++++
 src/main/java/org/springblade/modules/system/excel/ExportSecurityPaperExcel.java |   64 +++++++++
 src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java   |    2 
 src/main/java/org/springblade/modules/system/mapper/UserMapper.java              |    7 +
 src/main/java/org/springblade/modules/system/service/IUserService.java           |    9 +
 11 files changed, 362 insertions(+), 1 deletions(-)

diff --git a/src/main/java/org/springblade/common/excel/CustomCellWriteHeightConfig.java b/src/main/java/org/springblade/common/excel/CustomCellWriteHeightConfig.java
new file mode 100644
index 0000000..5530055
--- /dev/null
+++ b/src/main/java/org/springblade/common/excel/CustomCellWriteHeightConfig.java
@@ -0,0 +1,49 @@
+package org.springblade.common.excel;
+
+import com.alibaba.excel.write.style.row.AbstractRowHeightStyleStrategy;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.util.Iterator;
+
+/**
+ * 自适应行高
+ * @author zhongrj
+ * @since 2021-10-29
+ */
+public class CustomCellWriteHeightConfig extends AbstractRowHeightStyleStrategy {
+	/**
+	 * 默认高度
+	 */
+	private static final Integer DEFAULT_HEIGHT = 300;
+
+	@Override
+	protected void setHeadColumnHeight(Row row, int relativeRowIndex) {
+	}
+
+	@Override
+	protected void setContentColumnHeight(Row row, int relativeRowIndex) {
+		Iterator<Cell> cellIterator = row.cellIterator();
+		if (!cellIterator.hasNext()) {
+			return;
+		}
+
+		// 默认为 1行高度
+		Integer maxHeight = 1;
+		while (cellIterator.hasNext()) {
+			Cell cell = cellIterator.next();
+			switch (cell.getCellTypeEnum()) {
+				case STRING:
+					if (cell.getStringCellValue().indexOf("\n") != -1) {
+						int length = cell.getStringCellValue().split("\n").length;
+						maxHeight = Math.max(maxHeight, length);
+					}
+					break;
+				default:
+					break;
+			}
+		}
+
+		row.setHeight((short) (maxHeight * DEFAULT_HEIGHT));
+	}
+}
diff --git a/src/main/java/org/springblade/common/excel/CustomCellWriteWeightConfig.java b/src/main/java/org/springblade/common/excel/CustomCellWriteWeightConfig.java
new file mode 100644
index 0000000..c8ec134
--- /dev/null
+++ b/src/main/java/org/springblade/common/excel/CustomCellWriteWeightConfig.java
@@ -0,0 +1,83 @@
+package org.springblade.common.excel;
+
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.util.CollectionUtils;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Sheet;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 自适应行款
+ * @author zhongrj
+ * @since 2021-10-29
+ */
+public class CustomCellWriteWeightConfig extends AbstractColumnWidthStyleStrategy {
+	private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>();
+
+	@Override
+	protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer integer, Boolean isHead) {
+		boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
+		if (needSetWidth) {
+			Map<Integer, Integer> maxColumnWidthMap = CACHE.get(writeSheetHolder.getSheetNo());
+			if (maxColumnWidthMap == null) {
+				maxColumnWidthMap = new HashMap<>();
+				CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
+			}
+
+			Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
+			if (columnWidth >= 0) {
+				if (columnWidth > 254) {
+					columnWidth = 254;
+				}
+
+				Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
+				if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
+					maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
+					Sheet sheet = writeSheetHolder.getSheet();
+					sheet.setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
+				}
+
+			}
+		}
+	}
+
+	/**
+	 * 计算长度
+	 * @param cellDataList
+	 * @param cell
+	 * @param isHead
+	 * @return
+	 */
+	private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {
+		if (isHead) {
+			return cell.getStringCellValue().getBytes().length;
+		} else {
+			CellData cellData = cellDataList.get(0);
+			CellDataTypeEnum type = cellData.getType();
+			if (type == null) {
+				return -1;
+			} else {
+				switch (type) {
+					case STRING:
+						// 换行符(数据需要提前解析好)
+						int index = cellData.getStringValue().indexOf("\n");
+						return index != -1 ?
+							cellData.getStringValue().substring(0, index).getBytes().length + 1 : cellData.getStringValue().getBytes().length + 1;
+					case BOOLEAN:
+						return cellData.getBooleanValue().toString().getBytes().length;
+					case NUMBER:
+						return cellData.getNumberValue().toString().getBytes().length;
+					default:
+						return -1;
+				}
+			}
+		}
+	}
+}
diff --git a/src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java b/src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java
index f3a1e4b..f3155ab 100644
--- a/src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java
+++ b/src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java
@@ -28,6 +28,7 @@
 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.excel.ExportSecurityPaperExcel;
 import org.springblade.modules.system.excel.UserExcel;
 import org.springblade.modules.system.service.IRoleService;
 import org.springblade.modules.system.service.IUserService;
@@ -425,7 +426,6 @@
 		//导出成绩集合数据
 		ExcelUtil.export(response, "成绩数据", "成绩数据表", examScoreExcels, ExportExamScoreExcel.class);
 	}
-
 
 	/**
 	 * 考试成绩恢复状态重置(重考)
diff --git a/src/main/java/org/springblade/modules/exam/mapper/ExamScoreMapper.java b/src/main/java/org/springblade/modules/exam/mapper/ExamScoreMapper.java
index b70c398..014d5d6 100644
--- a/src/main/java/org/springblade/modules/exam/mapper/ExamScoreMapper.java
+++ b/src/main/java/org/springblade/modules/exam/mapper/ExamScoreMapper.java
@@ -6,6 +6,7 @@
 import org.springblade.modules.exam.entity.ExamScore;
 import org.springblade.modules.exam.excel.ExportExamScoreExcel;
 import org.springblade.modules.exam.vo.ExamScoreVO;
+import org.springblade.modules.system.vo.UserVO;
 import org.springblade.modules.training.entity.TrainingRegistration;
 
 import java.util.List;
diff --git a/src/main/java/org/springblade/modules/exam/service/ExamScoreService.java b/src/main/java/org/springblade/modules/exam/service/ExamScoreService.java
index 99033ca..36a63fc 100644
--- a/src/main/java/org/springblade/modules/exam/service/ExamScoreService.java
+++ b/src/main/java/org/springblade/modules/exam/service/ExamScoreService.java
@@ -7,6 +7,7 @@
 import org.springblade.modules.exam.excel.ExportExamScoreExcel;
 import org.springblade.modules.exam.vo.ExamScoreVO;
 import org.springblade.modules.exam.vo.UpdateParamVo;
+import org.springblade.modules.system.excel.ExportSecurityPaperExcel;
 
 import java.util.List;
 import java.util.Map;
@@ -90,4 +91,7 @@
 	 * @return
 	 */
 	Boolean refreshTrainExamScore();
+
+
+
 }
diff --git a/src/main/java/org/springblade/modules/system/controller/UserController.java b/src/main/java/org/springblade/modules/system/controller/UserController.java
index a3fe945..1888ff1 100644
--- a/src/main/java/org/springblade/modules/system/controller/UserController.java
+++ b/src/main/java/org/springblade/modules/system/controller/UserController.java
@@ -33,6 +33,8 @@
 import org.springblade.common.cache.DictCache;
 import org.springblade.common.config.FtpConfig;
 import org.springblade.common.enums.DictEnum;
+import org.springblade.common.excel.CustomCellWriteHeightConfig;
+import org.springblade.common.excel.CustomCellWriteWeightConfig;
 import org.springblade.common.excel.RowWriteHandler;
 import org.springblade.common.utils.arg;
 import org.springblade.core.cache.utils.CacheUtil;
@@ -50,6 +52,7 @@
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.*;
 import org.springblade.modules.FTP.FtpUtil;
+import org.springblade.modules.exam.excel.ExportExamScoreExcel;
 import org.springblade.modules.experience.entity.Experience;
 import org.springblade.modules.experience.service.IExperienceService;
 import org.springblade.modules.jurisdiction.entity.Jurisdiction;
@@ -413,6 +416,34 @@
 //	}
 
 	/**
+	 * 导出保安员证信息
+	 */
+	@GetMapping("export-security-paper")
+	public void exportSecurityPaper(UserVO user, HttpServletResponse response) throws IOException {
+		//按条件查询成绩数据
+		List<ExportSecurityPaperExcel> excels = userService.exportSecurityPaperList(user);
+		String fileName = null;
+		try {
+			response.setContentType("application/vnd.ms-excel");
+			response.setCharacterEncoding(org.apache.commons.codec.Charsets.UTF_8.name());
+			fileName = URLEncoder.encode("保安员证数据", Charsets.UTF_8.name());
+			response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+			//修改单元格格式为文本格式
+			EasyExcel.write(response.getOutputStream(), ExportSecurityPaperExcel.class)
+				.sheet("保安员证数据表")
+				//自定义行高
+//				.registerWriteHandler(new CustomCellWriteHeightConfig())
+				//自定义宽度
+//				.registerWriteHandler(new CustomCellWriteWeightConfig())
+				//写入
+				.doWrite(excels);
+		} catch (Throwable var6) {
+			throw var6;
+		}
+//		ExcelUtil.export(response, "保安员证数据" + DateUtil.time(), "保安员证数据表", excels, ExportSecurityPaperExcel.class);
+	}
+
+	/**
 	 * 导出模板
 	 */
 	@GetMapping("export-template")
diff --git a/src/main/java/org/springblade/modules/system/excel/ExportSecurityPaperExcel.java b/src/main/java/org/springblade/modules/system/excel/ExportSecurityPaperExcel.java
new file mode 100644
index 0000000..b41ac5b
--- /dev/null
+++ b/src/main/java/org/springblade/modules/system/excel/ExportSecurityPaperExcel.java
@@ -0,0 +1,64 @@
+/*
+ *      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.system.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;
+
+/**
+ * ExamPaymentExcel
+ * @author zhongrj
+ * @since 2021-10-29
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(125)
+public class ExportSecurityPaperExcel implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ColumnWidth(15)
+	@ExcelProperty("姓名")
+	private String realName;
+
+	@ColumnWidth(20)
+	@ExcelProperty("身份证号码")
+	private String idCardNo;
+
+	@ColumnWidth(35)
+	@ExcelProperty("所属公司")
+	private String deptName;
+
+
+	@ColumnWidth(20)
+	@ExcelProperty("保安证编号")
+	private String securityNumber;
+
+	@ColumnWidth(20)
+	@ExcelProperty("照片")
+	private URL avatar;
+
+	@ColumnWidth(20)
+	@ExcelProperty("二维码图片")
+	private byte[] qrCode;
+}
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
index 00086c7..1af5851 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -206,4 +206,11 @@
 	 * @return
 	 */
 	List<Map<String, Object>> getSecurityInfo(@Param("jurisdiction")String jurisdiction);
+
+	/**
+	 * 导出保安员证信息
+	 * @param user
+	 * @return
+	 */
+    List<UserVO> exportSecurityPaperList(@Param("user") UserVO user);
 }
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 c4802b1..cc4e627 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -575,4 +575,57 @@
         and bu.is_deleted = 0
         and br.role_alias = "保安"
     </select>
+
+
+    <!--导出保安员证信息-->
+    <select id="exportSecurityPaperList" resultType="org.springblade.modules.system.vo.UserVO">
+        select
+        bu.*,bd.dept_name deptName
+        from
+        blade_user bu
+        left join
+        blade_dept bd
+        on
+        bu.dept_id = bd.id
+        left join
+        blade_role br
+        on
+        br.id = bu.role_id
+        where
+        bu.is_deleted = 0
+        and role_alias = '保安'
+        <if test="user.realName!=null and user.realName != ''">
+            and bu.real_name like concat(concat('%', #{user.realName}),'%')
+        </if>
+        <if test="user.userType!=null and user.userType != ''">
+            and bu.user_type = #{user.userType}
+        </if>
+        <if test="user.nativeplace!=null and user.nativeplace != ''">
+            and bu.nativeplace = #{user.nativeplace}
+        </if>
+        <if test="user.deptId!=null and user.deptId != ''">
+            and bu.dept_id = #{user.deptId}
+        </if>
+        <if test="user.sex!=null and user.sex != ''">
+            and bu.sex = #{user.sex}
+        </if>
+        <if test="user.dispatch!=null and user.dispatch != ''">
+            <if test="user.dispatch==1">
+                and (bu.dispatch = #{user.dispatch} or bu.dispatch is null)
+            </if>
+            <if test="user.dispatch==0">
+                and bu.dispatch = #{user.dispatch}
+            </if>
+        </if>
+        <if test="user.status!=null and user.status != ''">
+            and bu.status = #{user.status}
+        </if>
+        <if test="user.jurisdiction!=null and user.jurisdiction != ''">
+            and bu.jurisdiction = #{user.jurisdiction}
+        </if>
+        <if test="user.securitynumber!=null and user.securitynumber != ''">
+            and bu.securitynumber = #{user.securitynumber}
+        </if>
+        ORDER BY bu.id
+    </select>
 </mapper>
diff --git a/src/main/java/org/springblade/modules/system/service/IUserService.java b/src/main/java/org/springblade/modules/system/service/IUserService.java
index 53ddb25..a2f9939 100644
--- a/src/main/java/org/springblade/modules/system/service/IUserService.java
+++ b/src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -23,9 +23,11 @@
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
 import org.springblade.modules.auth.enums.UserEnum;
+import org.springblade.modules.exam.vo.ExamScoreVO;
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.entity.UserInfo;
 import org.springblade.modules.system.entity.UserOauth;
+import org.springblade.modules.system.excel.ExportSecurityPaperExcel;
 import org.springblade.modules.system.excel.QrCodeExcel;
 import org.springblade.modules.system.excel.UserExcel;
 import org.springblade.modules.system.node.TreeNode;
@@ -323,4 +325,11 @@
 	 * @param deptId
 	 */
 	void importQrCode(List<QrCodeExcel> data, Boolean isCovered, String deptId);
+
+	/**
+	 * 导出保安员证信息
+	 * @param user
+	 * @return
+	 */
+    List<ExportSecurityPaperExcel> exportSecurityPaperList(UserVO user);
 }
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 eba795a..553ae83 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
@@ -44,6 +44,7 @@
 import org.springblade.modules.information.entity.Information;
 import org.springblade.modules.information.service.IInformationService;
 import org.springblade.modules.system.entity.*;
+import org.springblade.modules.system.excel.ExportSecurityPaperExcel;
 import org.springblade.modules.system.excel.QrCodeExcel;
 import org.springblade.modules.system.excel.UserExcel;
 import org.springblade.modules.system.mapper.UserMapper;
@@ -51,6 +52,10 @@
 import org.springblade.modules.system.service.*;
 import org.springblade.modules.system.vo.UserVO;
 import org.springblade.modules.system.wrapper.UserWrapper;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -58,6 +63,8 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -883,4 +890,57 @@
 			}
 		});
 	}
+
+
+	/**
+	 * 导出保安员证信息
+	 * @param user
+	 * @return
+	 */
+	@Override
+	public List<ExportSecurityPaperExcel> exportSecurityPaperList(UserVO user) {
+		//查询数据
+		List<UserVO> userVOList = baseMapper.exportSecurityPaperList(user);
+		if (userVOList.size()>0) {
+			//返回的集合数据
+			List<ExportSecurityPaperExcel> list = new ArrayList<>();
+			//遍历
+			userVOList.forEach(userVO -> {
+				ExportSecurityPaperExcel excel = new ExportSecurityPaperExcel();
+				//数据转换封装
+				excel.setRealName(userVO.getRealName());
+				excel.setIdCardNo(userVO.getCardid());
+				excel.setDeptName(userVO.getDeptName());
+				//如果头像有
+				if (null != userVO.getAvatar() && userVO.getAvatar() != "") {
+					try {
+						if (userVO.getAvatar().contains("http:")) {
+							excel.setAvatar(new URL(userVO.getAvatar()));
+						}
+					} catch (MalformedURLException e) {
+						e.printStackTrace();
+					}
+				}
+				//如果保安证编号不为空
+				if (null != userVO.getSecuritynumber() && userVO.getSecuritynumber() != "") {
+					//去生成二维码
+					String url = "http://223.82.109.183:2080/securityInfo.html";
+					String encoded = null;
+					try {
+						encoded = URLEncoder.encode(userVO.getSecuritynumber(), "UTF-8");
+						String content = url + "?securityNumber=" + encoded;
+						URLEncoder.encode(content, "utf-8");
+						byte[] qrCodeImage = QRCodeUtil.getQRCodeImage(content, 350, 350);
+						//设置二维码
+						excel.setQrCode(qrCodeImage);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+				list.add(excel);
+			});
+			return list;
+		}
+		return null;
+	}
 }

--
Gitblit v1.9.3