mirror of https://gitee.com/xiaonuobase/snowy
【更新】完成用户导出功能
parent
eb7b68e2e5
commit
2f566b2d1a
|
@ -0,0 +1,112 @@
|
||||||
|
/*
|
||||||
|
* Copyright [2022] [https://www.xiaonuo.vip]
|
||||||
|
*
|
||||||
|
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||||
|
*
|
||||||
|
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||||
|
* 2.请不要删除和修改Snowy源码头部的版权声明。
|
||||||
|
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
|
||||||
|
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
|
||||||
|
* 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
|
||||||
|
* 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
|
||||||
|
*/
|
||||||
|
package vip.xiaonuo.common.excel;
|
||||||
|
|
||||||
|
import com.alibaba.excel.metadata.Head;
|
||||||
|
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasyExcel自定义合并策略 该类继承了AbstractMergeStrategy抽象合并策略,需要重写merge()方法
|
||||||
|
*
|
||||||
|
* @author xuyuxiang
|
||||||
|
* @date 2023/3/6 13:21
|
||||||
|
**/
|
||||||
|
public class CommonExcelCustomMergeStrategy extends AbstractMergeStrategy {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分组,每几行合并一次
|
||||||
|
*/
|
||||||
|
private final List<Integer> exportFieldGroupCountList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 目标合并列index
|
||||||
|
*/
|
||||||
|
private final Integer targetColumnIndex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 需要开始合并单元格的首行index
|
||||||
|
*/
|
||||||
|
private Integer rowIndex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* exportDataList为待合并目标列的值
|
||||||
|
*
|
||||||
|
* @author xuyuxiang
|
||||||
|
* @date 2023/3/6 13:23
|
||||||
|
**/
|
||||||
|
public CommonExcelCustomMergeStrategy(List<String> exportDataList, Integer targetColumnIndex) {
|
||||||
|
this.exportFieldGroupCountList = getGroupCountList(exportDataList);
|
||||||
|
this.targetColumnIndex = targetColumnIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
|
||||||
|
|
||||||
|
if (null == rowIndex) {
|
||||||
|
rowIndex = cell.getRowIndex();
|
||||||
|
}
|
||||||
|
// 仅从首行以及目标列的单元格开始合并,忽略其他
|
||||||
|
if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == targetColumnIndex) {
|
||||||
|
mergeGroupColumn(sheet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void mergeGroupColumn(Sheet sheet) {
|
||||||
|
int rowCount = rowIndex;
|
||||||
|
for (Integer count : exportFieldGroupCountList) {
|
||||||
|
if(count == 1) {
|
||||||
|
rowCount += count;
|
||||||
|
continue ;
|
||||||
|
}
|
||||||
|
// 合并单元格
|
||||||
|
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCount, rowCount + count - 1, targetColumnIndex, targetColumnIndex);
|
||||||
|
sheet.addMergedRegionUnsafe(cellRangeAddress);
|
||||||
|
rowCount += count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 该方法将目标列根据值是否相同连续可合并,存储可合并的行数
|
||||||
|
*
|
||||||
|
* @author xuyuxiang
|
||||||
|
* @date 2023/3/6 13:23
|
||||||
|
**/
|
||||||
|
private List<Integer> getGroupCountList(List<String> exportDataList){
|
||||||
|
if (CollectionUtils.isEmpty(exportDataList)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Integer> groupCountList = new ArrayList<>();
|
||||||
|
int count = 1;
|
||||||
|
|
||||||
|
for (int i = 1; i < exportDataList.size(); i++) {
|
||||||
|
if (exportDataList.get(i).equals(exportDataList.get(i - 1))) {
|
||||||
|
count++;
|
||||||
|
} else {
|
||||||
|
groupCountList.add(count);
|
||||||
|
count = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 处理完最后一条后
|
||||||
|
groupCountList.add(count);
|
||||||
|
return groupCountList;
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,9 @@ package vip.xiaonuo.sys.modular.user.result;
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import com.alibaba.excel.annotation.format.DateTimeFormat;
|
import com.alibaba.excel.annotation.format.DateTimeFormat;
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
|
import com.alibaba.excel.annotation.write.style.HeadStyle;
|
||||||
|
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@ -29,169 +32,216 @@ import java.util.Date;
|
||||||
@Setter
|
@Setter
|
||||||
public class SysUserExportResult {
|
public class SysUserExportResult {
|
||||||
|
|
||||||
|
/** 机构分组 */
|
||||||
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 40)
|
||||||
|
@ExcelProperty({"用户信息", "机构分组"})
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
/** 头像 */
|
/** 头像 */
|
||||||
@ExcelProperty({"基本信息", "头像"})
|
@ColumnWidth(8)
|
||||||
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "头像"})
|
||||||
private byte[] avatar;
|
private byte[] avatar;
|
||||||
|
|
||||||
/** 账号 */
|
/** 账号 */
|
||||||
@ExcelProperty({"基本信息", "账号"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "账号"})
|
||||||
private String account;
|
private String account;
|
||||||
|
|
||||||
/** 姓名 */
|
/** 姓名 */
|
||||||
@ExcelProperty({"基本信息", "姓名"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "姓名"})
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/** 昵称 */
|
/** 昵称 */
|
||||||
@ExcelProperty({"基本信息", "昵称"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "昵称"})
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
|
||||||
/** 性别 */
|
/** 性别 */
|
||||||
@ExcelProperty({"基本信息", "性别"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "性别"})
|
||||||
private String gender;
|
private String gender;
|
||||||
|
|
||||||
/** 年龄 */
|
/** 年龄 */
|
||||||
@ExcelProperty({"基本信息", "年龄"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "年龄"})
|
||||||
private String age;
|
private String age;
|
||||||
|
|
||||||
/** 出生日期 */
|
/** 出生日期 */
|
||||||
@ExcelProperty({"基本信息", "出生日期"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "出生日期"})
|
||||||
private String birthday;
|
private String birthday;
|
||||||
|
|
||||||
/** 民族 */
|
/** 民族 */
|
||||||
@ExcelProperty({"基本信息", "民族"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "民族"})
|
||||||
private String nation;
|
private String nation;
|
||||||
|
|
||||||
/** 籍贯 */
|
/** 籍贯 */
|
||||||
@ExcelProperty({"基本信息", "籍贯"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "籍贯"})
|
||||||
private String nativePlace;
|
private String nativePlace;
|
||||||
|
|
||||||
/** 家庭住址 */
|
/** 家庭住址 */
|
||||||
@ExcelProperty({"基本信息", "家庭住址"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "家庭住址"})
|
||||||
private String homeAddress;
|
private String homeAddress;
|
||||||
|
|
||||||
/** 通信地址 */
|
/** 通信地址 */
|
||||||
@ExcelProperty({"基本信息", "通信地址"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "通信地址"})
|
||||||
private String mailingAddress;
|
private String mailingAddress;
|
||||||
|
|
||||||
/** 证件类型 */
|
/** 证件类型 */
|
||||||
@ExcelProperty({"基本信息", "证件类型"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "证件类型"})
|
||||||
private String idCardType;
|
private String idCardType;
|
||||||
|
|
||||||
/** 证件号码 */
|
/** 证件号码 */
|
||||||
@ExcelProperty({"基本信息", "证件号码"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "证件号码"})
|
||||||
private String idCardNumber;
|
private String idCardNumber;
|
||||||
|
|
||||||
/** 文化程度 */
|
/** 文化程度 */
|
||||||
@ExcelProperty({"基本信息", "文化程度"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "文化程度"})
|
||||||
private String cultureLevel;
|
private String cultureLevel;
|
||||||
|
|
||||||
/** 政治面貌 */
|
/** 政治面貌 */
|
||||||
@ExcelProperty({"基本信息", "政治面貌"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "政治面貌"})
|
||||||
private String politicalOutlook;
|
private String politicalOutlook;
|
||||||
|
|
||||||
/** 毕业院校 */
|
/** 毕业院校 */
|
||||||
@ExcelProperty({"基本信息", "毕业院校"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "毕业院校"})
|
||||||
private String college;
|
private String college;
|
||||||
|
|
||||||
/** 学历 */
|
/** 学历 */
|
||||||
@ExcelProperty({"基本信息", "学历"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "学历"})
|
||||||
private String education;
|
private String education;
|
||||||
|
|
||||||
/** 学制 */
|
/** 学制 */
|
||||||
@ExcelProperty({"基本信息", "学制"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "学制"})
|
||||||
private String eduLength;
|
private String eduLength;
|
||||||
|
|
||||||
/** 学位 */
|
/** 学位 */
|
||||||
@ExcelProperty({"基本信息", "学位"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "学位"})
|
||||||
private String degree;
|
private String degree;
|
||||||
|
|
||||||
/** 手机 */
|
/** 手机 */
|
||||||
@ExcelProperty({"基本信息", "手机"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "手机"})
|
||||||
private String phone;
|
private String phone;
|
||||||
|
|
||||||
/** 邮箱 */
|
/** 邮箱 */
|
||||||
@ExcelProperty({"基本信息", "邮箱"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "邮箱"})
|
||||||
private String email;
|
private String email;
|
||||||
|
|
||||||
/** 家庭电话 */
|
/** 家庭电话 */
|
||||||
@ExcelProperty({"基本信息", "家庭电话"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "家庭电话"})
|
||||||
private String homeTel;
|
private String homeTel;
|
||||||
|
|
||||||
/** 办公电话 */
|
/** 办公电话 */
|
||||||
@ExcelProperty({"基本信息", "办公电话"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "办公电话"})
|
||||||
private String officeTel;
|
private String officeTel;
|
||||||
|
|
||||||
/** 紧急联系人 */
|
/** 紧急联系人 */
|
||||||
@ExcelProperty({"基本信息", "紧急联系人"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "紧急联系人"})
|
||||||
private String emergencyContact;
|
private String emergencyContact;
|
||||||
|
|
||||||
/** 紧急联系人电话 */
|
/** 紧急联系人电话 */
|
||||||
@ExcelProperty({"基本信息", "紧急联系人电话"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "紧急联系人电话"})
|
||||||
private String emergencyPhone;
|
private String emergencyPhone;
|
||||||
|
|
||||||
/** 紧急联系人地址 */
|
/** 紧急联系人地址 */
|
||||||
@ExcelProperty({"基本信息", "紧急联系人地址"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 29)
|
||||||
|
@ExcelProperty({"用户信息", "基本信息", "紧急联系人地址"})
|
||||||
private String emergencyAddress;
|
private String emergencyAddress;
|
||||||
|
|
||||||
/** 员工编号 */
|
/** 员工编号 */
|
||||||
@ExcelProperty({"员工信息", "员工编号"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
|
||||||
|
@ExcelProperty({"用户信息", "员工信息", "员工编号"})
|
||||||
private String empNo;
|
private String empNo;
|
||||||
|
|
||||||
/** 入职日期 */
|
/** 入职日期 */
|
||||||
@ExcelProperty({"员工信息", "入职日期"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
|
||||||
|
@ExcelProperty({"用户信息", "员工信息", "入职日期"})
|
||||||
private String entryDate;
|
private String entryDate;
|
||||||
|
|
||||||
/** 组织名称 */
|
/** 组织名称 */
|
||||||
@ExcelProperty({"员工信息", "组织名称"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
|
||||||
|
@ExcelProperty({"用户信息", "员工信息", "组织名称"})
|
||||||
private String orgName;
|
private String orgName;
|
||||||
|
|
||||||
/** 职位名称 */
|
/** 职位名称 */
|
||||||
@ExcelProperty({"员工信息", "职位名称"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
|
||||||
|
@ExcelProperty({"用户信息", "员工信息", "职位名称"})
|
||||||
private String positionName;
|
private String positionName;
|
||||||
|
|
||||||
/** 主管名称 */
|
/** 主管名称 */
|
||||||
@ExcelProperty({"员工信息", "主管名称"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
|
||||||
|
@ExcelProperty({"用户信息", "员工信息", "主管名称"})
|
||||||
private String directorName;
|
private String directorName;
|
||||||
|
|
||||||
/** 职级 */
|
/** 职级 */
|
||||||
@ExcelProperty({"员工信息", "职级"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 34)
|
||||||
|
@ExcelProperty({"用户信息", "员工信息", "职级"})
|
||||||
private String positionLevel;
|
private String positionLevel;
|
||||||
|
|
||||||
/** 上次登录ip */
|
/** 上次登录ip */
|
||||||
@ExcelProperty({"系统信息", "上次登录ip"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
|
@ExcelProperty({"用户信息", "系统信息", "上次登录ip"})
|
||||||
private String lastLoginIp;
|
private String lastLoginIp;
|
||||||
|
|
||||||
/** 上次登录地点 */
|
/** 上次登录地点 */
|
||||||
@ExcelProperty({"系统信息", "上次登录地点"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
|
@ExcelProperty({"用户信息", "系统信息", "上次登录地点"})
|
||||||
private String lastLoginAddress;
|
private String lastLoginAddress;
|
||||||
|
|
||||||
/** 上次登录时间 */
|
/** 上次登录时间 */
|
||||||
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
|
||||||
@ExcelProperty({"系统信息", "上次登录时间"})
|
@ExcelProperty({"用户信息", "系统信息", "上次登录时间"})
|
||||||
private Date lastLoginTime;
|
private Date lastLoginTime;
|
||||||
|
|
||||||
/** 上次登录设备 */
|
/** 上次登录设备 */
|
||||||
@ExcelProperty({"系统信息", "上次登录设备"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
|
@ExcelProperty({"用户信息", "系统信息", "上次登录设备"})
|
||||||
private String lastLoginDevice;
|
private String lastLoginDevice;
|
||||||
|
|
||||||
/** 最新登录ip */
|
/** 最新登录ip */
|
||||||
@ExcelProperty({"系统信息", "最新登录ip"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
|
@ExcelProperty({"用户信息", "系统信息", "最新登录ip"})
|
||||||
private String latestLoginIp;
|
private String latestLoginIp;
|
||||||
|
|
||||||
/** 最新登录地点 */
|
/** 最新登录地点 */
|
||||||
@ExcelProperty({"系统信息", "最新登录地点"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
|
@ExcelProperty({"用户信息", "系统信息", "最新登录地点"})
|
||||||
private String latestLoginAddress;
|
private String latestLoginAddress;
|
||||||
|
|
||||||
/** 最新登录时间 */
|
/** 最新登录时间 */
|
||||||
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
|
||||||
@ExcelProperty({"系统信息", "最新登录时间"})
|
@ExcelProperty({"用户信息", "系统信息", "最新登录时间"})
|
||||||
private Date latestLoginTime;
|
private Date latestLoginTime;
|
||||||
|
|
||||||
/** 最新登录设备 */
|
/** 最新登录设备 */
|
||||||
@ExcelProperty({"系统信息", "最新登录设备"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
|
@ExcelProperty({"用户信息", "系统信息", "最新登录设备"})
|
||||||
private String latestLoginDevice;
|
private String latestLoginDevice;
|
||||||
|
|
||||||
/** 用户状态 */
|
/** 用户状态 */
|
||||||
@ExcelProperty(value = {"系统信息", "用户状态"})
|
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 42)
|
||||||
|
@ExcelProperty({"用户信息", "系统信息", "用户状态"})
|
||||||
private String userStatus;
|
private String userStatus;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,14 @@ import cn.hutool.json.JSONArray;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.metadata.data.WriteCellData;
|
||||||
import com.alibaba.excel.read.listener.ReadListener;
|
import com.alibaba.excel.write.handler.CellWriteHandler;
|
||||||
|
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
|
||||||
|
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
||||||
|
import com.alibaba.excel.write.metadata.style.WriteFont;
|
||||||
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
||||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
||||||
|
import com.alibaba.excel.write.style.row.AbstractRowHeightStyleStrategy;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
@ -45,11 +50,13 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.fhs.trans.service.impl.TransService;
|
import com.fhs.trans.service.impl.TransService;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import vip.xiaonuo.common.cache.CommonCacheOperator;
|
import vip.xiaonuo.common.cache.CommonCacheOperator;
|
||||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||||
|
import vip.xiaonuo.common.excel.CommonExcelCustomMergeStrategy;
|
||||||
import vip.xiaonuo.common.exception.CommonException;
|
import vip.xiaonuo.common.exception.CommonException;
|
||||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||||
|
@ -89,10 +96,7 @@ import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -979,10 +983,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||||
String fileName = "SNOWY2.0系统B端用户信息清单.xlsx";
|
String fileName = "SNOWY2.0系统B端用户信息清单.xlsx";
|
||||||
List<SysUser> sysUserList = this.list(queryWrapper);
|
List<SysUser> sysUserList = this.list(queryWrapper);
|
||||||
transService.transBatch(sysUserList);
|
transService.transBatch(sysUserList);
|
||||||
|
sysUserList = CollectionUtil.sort(sysUserList, Comparator.comparing(SysUser::getOrgId));
|
||||||
List<SysUserExportResult> sysUserExportResultList = sysUserList.stream()
|
List<SysUserExportResult> sysUserExportResultList = sysUserList.stream()
|
||||||
.map(sysUser -> {
|
.map(sysUser -> {
|
||||||
SysUserExportResult sysUserExportResult = new SysUserExportResult();
|
SysUserExportResult sysUserExportResult = new SysUserExportResult();
|
||||||
BeanUtil.copyProperties(sysUser, sysUserExportResult);
|
BeanUtil.copyProperties(sysUser, sysUserExportResult);
|
||||||
|
sysUserExportResult.setGroupName(sysUserExportResult.getOrgName());
|
||||||
// 状态枚举转为文字
|
// 状态枚举转为文字
|
||||||
sysUserExportResult.setUserStatus(sysUserExportResult.getUserStatus()
|
sysUserExportResult.setUserStatus(sysUserExportResult.getUserStatus()
|
||||||
.equalsIgnoreCase(SysUserStatusEnum.ENABLE.getValue())?"正常":"停用");
|
.equalsIgnoreCase(SysUserStatusEnum.ENABLE.getValue())?"正常":"停用");
|
||||||
|
@ -993,11 +999,87 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
// 创建临时文件
|
// 创建临时文件
|
||||||
tempFile = FileUtil.file(FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR + fileName);
|
tempFile = FileUtil.file(FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR + fileName);
|
||||||
|
|
||||||
|
// 头的策略
|
||||||
|
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
|
||||||
|
WriteFont headWriteFont = new WriteFont();
|
||||||
|
headWriteFont.setFontHeightInPoints((short) 14);
|
||||||
|
headWriteCellStyle.setWriteFont(headWriteFont);
|
||||||
|
// 水平垂直居中
|
||||||
|
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
|
||||||
|
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||||
|
|
||||||
|
// 内容的策略
|
||||||
|
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
|
||||||
|
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
|
||||||
|
contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
|
||||||
|
// 内容背景白色
|
||||||
|
contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
|
||||||
|
WriteFont contentWriteFont = new WriteFont();
|
||||||
|
|
||||||
|
// 内容字体大小
|
||||||
|
contentWriteFont.setFontHeightInPoints((short) 12);
|
||||||
|
contentWriteCellStyle.setWriteFont(contentWriteFont);
|
||||||
|
|
||||||
|
//设置边框样式,细实线
|
||||||
|
contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
|
||||||
|
contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
|
||||||
|
contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
|
||||||
|
contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
|
||||||
|
|
||||||
|
// 水平垂直居中
|
||||||
|
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
|
||||||
|
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||||
|
|
||||||
|
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
|
||||||
|
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle,
|
||||||
|
contentWriteCellStyle);
|
||||||
|
|
||||||
// 写excel
|
// 写excel
|
||||||
EasyExcel.write(tempFile.getPath(), SysUserExportResult.class)
|
EasyExcel.write(tempFile.getPath(), SysUserExportResult.class)
|
||||||
|
// 自定义样式
|
||||||
|
.registerWriteHandler(horizontalCellStyleStrategy)
|
||||||
// 自动列宽
|
// 自动列宽
|
||||||
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
||||||
.sheet("用户信息").doWrite(sysUserExportResultList);
|
// 机构分组合并单元格
|
||||||
|
.registerWriteHandler(new CommonExcelCustomMergeStrategy(sysUserExportResultList.stream().map(SysUserExportResult::getGroupName)
|
||||||
|
.collect(Collectors.toList()), 0))
|
||||||
|
// 设置第一行字体
|
||||||
|
.registerWriteHandler(new CellWriteHandler() {
|
||||||
|
@Override
|
||||||
|
public void afterCellDispose(CellWriteHandlerContext context) {
|
||||||
|
WriteCellData<?> cellData = context.getFirstCellData();
|
||||||
|
WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
|
||||||
|
Integer rowIndex = context.getRowIndex();
|
||||||
|
if(rowIndex == 0) {
|
||||||
|
WriteFont headWriteFont = new WriteFont();
|
||||||
|
headWriteFont.setFontName("宋体");
|
||||||
|
headWriteFont.setBold(true);
|
||||||
|
headWriteFont.setFontHeightInPoints((short) 16);
|
||||||
|
writeCellStyle.setWriteFont(headWriteFont);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// 设置表头行高
|
||||||
|
.registerWriteHandler(new AbstractRowHeightStyleStrategy() {
|
||||||
|
@Override
|
||||||
|
protected void setHeadColumnHeight(Row row, int relativeRowIndex) {
|
||||||
|
if(relativeRowIndex == 0) {
|
||||||
|
// 表头第一行
|
||||||
|
row.setHeightInPoints(34);
|
||||||
|
} else {
|
||||||
|
// 表头其他行
|
||||||
|
row.setHeightInPoints(30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected void setContentColumnHeight(Row row, int relativeRowIndex) {
|
||||||
|
// 内容行
|
||||||
|
row.setHeightInPoints(20);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.sheet("用户信息")
|
||||||
|
.doWrite(sysUserExportResultList);
|
||||||
CommonDownloadUtil.download(tempFile, response);
|
CommonDownloadUtil.download(tempFile, response);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
Loading…
Reference in New Issue