【更新】优化授权逻辑,用户导入(待完善)

This commit is contained in:
徐玉祥 2023-03-05 16:33:11 +08:00
parent 567127f2b2
commit 515c072e59
7 changed files with 198 additions and 46 deletions

View File

@ -15,6 +15,8 @@ package vip.xiaonuo.sys.core.listener;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
import vip.xiaonuo.common.cache.CommonCacheOperator; import vip.xiaonuo.common.cache.CommonCacheOperator;
import vip.xiaonuo.common.listener.CommonDataChangeListener; import vip.xiaonuo.common.listener.CommonDataChangeListener;
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum; import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
@ -41,6 +43,12 @@ public class SysDataChangeListener implements CommonDataChangeListener {
// 如果检测到机构增加则将机构的数据缓存清除 // 如果检测到机构增加则将机构的数据缓存清除
if(dataType.equals(SysDataTypeEnum.ORG.getValue())) { if(dataType.equals(SysDataTypeEnum.ORG.getValue())) {
commonCacheOperator.remove(SysOrgServiceImpl.ORG_CACHE_ALL_KEY); commonCacheOperator.remove(SysOrgServiceImpl.ORG_CACHE_ALL_KEY);
// 并将该机构加入到当前登录用户的数据范围缓存
SaBaseLoginUser saBaseLoginUser = StpLoginUserUtil.getLoginUser();
saBaseLoginUser.getDataScopeList().forEach(dataScope -> dataScope.getDataScope().addAll(dataIdList));
saBaseLoginUser.setDataScopeList(saBaseLoginUser.getDataScopeList());
// 重新缓存当前登录用户信息
StpUtil.getTokenSession().set("loginUser", saBaseLoginUser);
} }
// 如果检测到用户增加则将用户数据缓存清除 // 如果检测到用户增加则将用户数据缓存清除
if(dataType.equals(SysDataTypeEnum.USER.getValue())) { if(dataType.equals(SysDataTypeEnum.USER.getValue())) {

View File

@ -59,7 +59,7 @@ public class SysRoleGrantPermissionParam {
/** 数据范围分类 */ /** 数据范围分类 */
@ApiModelProperty(value = "数据范围分类", position = 2) @ApiModelProperty(value = "数据范围分类", position = 2)
@NotBlank(message = "category不能为空") @NotBlank(message = "scopeCategory不能为空")
private String scopeCategory; private String scopeCategory;
/** 自定义范围组织id集合 */ /** 自定义范围组织id集合 */

View File

@ -59,7 +59,7 @@ public class SysUserGrantPermissionParam {
/** 数据范围分类 */ /** 数据范围分类 */
@ApiModelProperty(value = "数据范围分类", position = 2) @ApiModelProperty(value = "数据范围分类", position = 2)
@NotBlank(message = "category不能为空") @NotBlank(message = "scopeCategory不能为空")
private String scopeCategory; private String scopeCategory;
/** 自定义范围组织id集合 */ /** 自定义范围组织id集合 */

View File

@ -0,0 +1,123 @@
/*
* 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.sys.modular.user.param;
import lombok.Getter;
import lombok.Setter;
/**
* 用户导入参数
*
* @author xuyuxiang
* @date 2022/7/8 13:22
**/
@Getter
@Setter
public class SysUserImportParam {
/** 头像 */
private String avatar;
/** 账号 */
private String account;
/** 姓名 */
private String name;
/** 昵称 */
private String nickname;
/** 性别 */
private String gender;
/** 年龄 */
private String age;
/** 出生日期 */
private String birthday;
/** 民族 */
private String nation;
/** 籍贯 */
private String nativePlace;
/** 家庭住址 */
private String homeAddress;
/** 通信地址 */
private String mailingAddress;
/** 证件类型 */
private String idCardType;
/** 证件号码 */
private String idCardNumber;
/** 文化程度 */
private String cultureLevel;
/** 政治面貌 */
private String politicalOutlook;
/** 毕业院校 */
private String college;
/** 学历 */
private String education;
/** 学制 */
private String eduLength;
/** 学位 */
private String degree;
/** 手机 */
private String phone;
/** 邮箱 */
private String email;
/** 家庭电话 */
private String homeTel;
/** 办公电话 */
private String officeTel;
/** 紧急联系人 */
private String emergencyContact;
/** 紧急联系人电话 */
private String emergencyPhone;
/** 紧急联系人地址 */
private String emergencyAddress;
/** 员工编号 */
private String empNo;
/** 入职日期 */
private String entryDate;
/** 组织名称 */
private String orgName;
/** 职位名称 */
private String positionName;
/** 主管名称 */
private String directorName;
/** 职级 */
private String positionLevel;
}

View File

@ -30,168 +30,168 @@ import java.util.Date;
public class SysUserExportResult { public class SysUserExportResult {
/** 头像 */ /** 头像 */
@ExcelProperty("头像") @ExcelProperty({"基本信息", "头像"})
private byte[] avatar; private byte[] avatar;
/** 账号 */ /** 账号 */
@ExcelProperty("账号") @ExcelProperty({"基本信息", "账号"})
private String account; private String account;
/** 姓名 */ /** 姓名 */
@ExcelProperty("姓名") @ExcelProperty({"基本信息", "姓名"})
private String name; private String name;
/** 昵称 */ /** 昵称 */
@ExcelProperty("昵称") @ExcelProperty({"基本信息", "昵称"})
private String nickname; private String nickname;
/** 性别 */ /** 性别 */
@ExcelProperty("性别") @ExcelProperty({"基本信息", "性别"})
private String gender; private String gender;
/** 年龄 */ /** 年龄 */
@ExcelProperty("年龄") @ExcelProperty({"基本信息", "年龄"})
private String age; private String age;
/** 出生日期 */ /** 出生日期 */
@ExcelProperty("出生日期") @ExcelProperty({"基本信息", "出生日期"})
private String birthday; private String birthday;
/** 民族 */ /** 民族 */
@ExcelProperty("民族") @ExcelProperty({"基本信息", "民族"})
private String nation; private String nation;
/** 籍贯 */ /** 籍贯 */
@ExcelProperty("籍贯") @ExcelProperty({"基本信息", "籍贯"})
private String nativePlace; private String nativePlace;
/** 家庭住址 */ /** 家庭住址 */
@ExcelProperty("家庭住址") @ExcelProperty({"基本信息", "家庭住址"})
private String homeAddress; private String homeAddress;
/** 通信地址 */ /** 通信地址 */
@ExcelProperty("通信地址") @ExcelProperty({"基本信息", "通信地址"})
private String mailingAddress; private String mailingAddress;
/** 证件类型 */ /** 证件类型 */
@ExcelProperty("证件类型") @ExcelProperty({"基本信息", "证件类型"})
private String idCardType; private String idCardType;
/** 证件号码 */ /** 证件号码 */
@ExcelProperty("证件号码") @ExcelProperty({"基本信息", "证件号码"})
private String idCardNumber; private String idCardNumber;
/** 文化程度 */ /** 文化程度 */
@ExcelProperty("文化程度") @ExcelProperty({"基本信息", "文化程度"})
private String cultureLevel; private String cultureLevel;
/** 政治面貌 */ /** 政治面貌 */
@ExcelProperty("政治面貌") @ExcelProperty({"基本信息", "政治面貌"})
private String politicalOutlook; private String politicalOutlook;
/** 毕业院校 */ /** 毕业院校 */
@ExcelProperty("毕业院校") @ExcelProperty({"基本信息", "毕业院校"})
private String college; private String college;
/** 学历 */ /** 学历 */
@ExcelProperty("学历") @ExcelProperty({"基本信息", "学历"})
private String education; private String education;
/** 学制 */ /** 学制 */
@ExcelProperty("学制") @ExcelProperty({"基本信息", "学制"})
private String eduLength; private String eduLength;
/** 学位 */ /** 学位 */
@ExcelProperty("学位") @ExcelProperty({"基本信息", "学位"})
private String degree; private String degree;
/** 手机 */ /** 手机 */
@ExcelProperty("手机") @ExcelProperty({"基本信息", "手机"})
private String phone; private String phone;
/** 邮箱 */ /** 邮箱 */
@ExcelProperty("邮箱") @ExcelProperty({"基本信息", "邮箱"})
private String email; private String email;
/** 家庭电话 */ /** 家庭电话 */
@ExcelProperty("家庭电话") @ExcelProperty({"基本信息", "家庭电话"})
private String homeTel; private String homeTel;
/** 办公电话 */ /** 办公电话 */
@ExcelProperty("办公电话") @ExcelProperty({"基本信息", "办公电话"})
private String officeTel; private String officeTel;
/** 紧急联系人 */ /** 紧急联系人 */
@ExcelProperty("紧急联系人") @ExcelProperty({"基本信息", "紧急联系人"})
private String emergencyContact; private String emergencyContact;
/** 紧急联系人电话 */ /** 紧急联系人电话 */
@ExcelProperty("紧急联系人电话") @ExcelProperty({"基本信息", "紧急联系人电话"})
private String emergencyPhone; private String emergencyPhone;
/** 紧急联系人地址 */ /** 紧急联系人地址 */
@ExcelProperty("紧急联系人地址") @ExcelProperty({"基本信息", "紧急联系人地址"})
private String emergencyAddress; private String emergencyAddress;
/** 员工编号 */ /** 员工编号 */
@ExcelProperty("员工编号") @ExcelProperty({"员工信息", "员工编号"})
private String empNo; private String empNo;
/** 入职日期 */ /** 入职日期 */
@ExcelProperty("入职日期") @ExcelProperty({"员工信息", "入职日期"})
private String entryDate; private String entryDate;
/** 组织名称 */ /** 组织名称 */
@ExcelProperty("组织名称") @ExcelProperty({"员工信息", "组织名称"})
private String orgName; private String orgName;
/** 职位名称 */ /** 职位名称 */
@ExcelProperty("职位名称") @ExcelProperty({"员工信息", "职位名称"})
private String positionName; private String positionName;
/** 主管名称 */ /** 主管名称 */
@ExcelProperty("主管名称") @ExcelProperty({"员工信息", "主管名称"})
private String directorName; private String directorName;
/** 职级 */ /** 职级 */
@ExcelProperty("职级") @ExcelProperty({"员工信息", "职级"})
private String positionLevel; private String positionLevel;
/** 上次登录ip */ /** 上次登录ip */
@ExcelProperty("上次登录ip") @ExcelProperty({"系统信息", "上次登录ip"})
private String lastLoginIp; private String lastLoginIp;
/** 上次登录地点 */ /** 上次登录地点 */
@ExcelProperty("上次登录地点") @ExcelProperty({"系统信息", "上次登录地点"})
private String lastLoginAddress; private String lastLoginAddress;
/** 上次登录时间 */ /** 上次登录时间 */
@DateTimeFormat("yyyy-MM-dd HH:mm:ss") @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ExcelProperty("上次登录时间") @ExcelProperty({"系统信息", "上次登录时间"})
private Date lastLoginTime; private Date lastLoginTime;
/** 上次登录设备 */ /** 上次登录设备 */
@ExcelProperty("上次登录设备") @ExcelProperty({"系统信息", "上次登录设备"})
private String lastLoginDevice; private String lastLoginDevice;
/** 最新登录ip */ /** 最新登录ip */
@ExcelProperty("最新登录ip") @ExcelProperty({"系统信息", "最新登录ip"})
private String latestLoginIp; private String latestLoginIp;
/** 最新登录地点 */ /** 最新登录地点 */
@ExcelProperty("最新登录地点") @ExcelProperty({"系统信息", "最新登录地点"})
private String latestLoginAddress; private String latestLoginAddress;
/** 最新登录时间 */ /** 最新登录时间 */
@DateTimeFormat("yyyy-MM-dd HH:mm:ss") @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ExcelProperty("最新登录时间") @ExcelProperty({"系统信息", "最新登录时间"})
private Date latestLoginTime; private Date latestLoginTime;
/** 最新登录设备 */ /** 最新登录设备 */
@ExcelProperty("最新登录设备") @ExcelProperty({"系统信息", "最新登录设备"})
private String latestLoginDevice; private String latestLoginDevice;
/** 用户状态 */ /** 用户状态 */
@ExcelProperty("用户状态") @ExcelProperty(value = {"系统信息", "用户状态"})
private String userStatus; private String userStatus;
} }

View File

@ -35,6 +35,8 @@ 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.read.listener.ReadListener;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
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;
@ -954,7 +956,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override @Override
public void importUser(MultipartFile file) { public void importUser(MultipartFile file) {
// TODO 待完善 // TODO
} }
@Override @Override
@ -975,10 +977,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
} }
} }
String fileName = "SNOWY2.0系统B端用户信息清单.xlsx"; String fileName = "SNOWY2.0系统B端用户信息清单.xlsx";
List<SysUserExportResult> sysUserExportResultList = this.list(queryWrapper).stream() List<SysUser> sysUserList = this.list(queryWrapper);
transService.transBatch(sysUserList);
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.setUserStatus(sysUserExportResult.getUserStatus()
.equalsIgnoreCase(SysUserStatusEnum.ENABLE.getValue())?"正常":"停用");
// 将base64转为byte数组 // 将base64转为byte数组
sysUserExportResult.setAvatar(ImgUtil.toBytes(ImgUtil.toImage(StrUtil sysUserExportResult.setAvatar(ImgUtil.toBytes(ImgUtil.toImage(StrUtil
.split(sysUser.getAvatar(), StrUtil.COMMA).get(1)), ImgUtil.IMAGE_TYPE_PNG)); .split(sysUser.getAvatar(), StrUtil.COMMA).get(1)), ImgUtil.IMAGE_TYPE_PNG));

View File

@ -12,6 +12,11 @@
*/ */
package vip.xiaonuo; package vip.xiaonuo;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.sys.modular.user.param.SysUserImportParam;
/** /**
* TestMain方法 * TestMain方法
* *
@ -20,6 +25,15 @@ package vip.xiaonuo;
*/ */
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {
try {
EasyExcel.read("D://import.xlsx", SysUserImportParam.class, new PageReadListener<SysUserImportParam>(dataList -> {
for (SysUserImportParam sysUserImportParam : dataList) {
System.out.println(sysUserImportParam);
}
})).sheet().doRead();
} catch (Exception e) {
e.printStackTrace();
throw new CommonException("文件导入失败");
}
} }
} }