diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/core/listener/SysDataChangeListener.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/core/listener/SysDataChangeListener.java index 11cf8a47..40a9bc6a 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/core/listener/SysDataChangeListener.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/core/listener/SysDataChangeListener.java @@ -15,6 +15,8 @@ package vip.xiaonuo.sys.core.listener; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.json.JSONArray; 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.listener.CommonDataChangeListener; import vip.xiaonuo.sys.core.enums.SysDataTypeEnum; @@ -41,6 +43,12 @@ public class SysDataChangeListener implements CommonDataChangeListener { // 如果检测到机构增加,则将机构的数据缓存清除 if(dataType.equals(SysDataTypeEnum.ORG.getValue())) { 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())) { diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/param/SysRoleGrantPermissionParam.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/param/SysRoleGrantPermissionParam.java index fef594d0..f9c7f2e0 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/param/SysRoleGrantPermissionParam.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/role/param/SysRoleGrantPermissionParam.java @@ -59,7 +59,7 @@ public class SysRoleGrantPermissionParam { /** 数据范围分类 */ @ApiModelProperty(value = "数据范围分类", position = 2) - @NotBlank(message = "category不能为空") + @NotBlank(message = "scopeCategory不能为空") private String scopeCategory; /** 自定义范围组织id集合 */ diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserGrantPermissionParam.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserGrantPermissionParam.java index d4bde57f..b673f15a 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserGrantPermissionParam.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserGrantPermissionParam.java @@ -59,7 +59,7 @@ public class SysUserGrantPermissionParam { /** 数据范围分类 */ @ApiModelProperty(value = "数据范围分类", position = 2) - @NotBlank(message = "category不能为空") + @NotBlank(message = "scopeCategory不能为空") private String scopeCategory; /** 自定义范围组织id集合 */ diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserImportParam.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserImportParam.java new file mode 100644 index 00000000..5a391b97 --- /dev/null +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/param/SysUserImportParam.java @@ -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; +} diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserExportResult.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserExportResult.java index 62539749..00d83a06 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserExportResult.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/result/SysUserExportResult.java @@ -30,168 +30,168 @@ import java.util.Date; public class SysUserExportResult { /** 头像 */ - @ExcelProperty("头像") + @ExcelProperty({"基本信息", "头像"}) private byte[] avatar; /** 账号 */ - @ExcelProperty("账号") + @ExcelProperty({"基本信息", "账号"}) private String account; /** 姓名 */ - @ExcelProperty("姓名") + @ExcelProperty({"基本信息", "姓名"}) private String name; /** 昵称 */ - @ExcelProperty("昵称") + @ExcelProperty({"基本信息", "昵称"}) private String nickname; /** 性别 */ - @ExcelProperty("性别") + @ExcelProperty({"基本信息", "性别"}) private String gender; /** 年龄 */ - @ExcelProperty("年龄") + @ExcelProperty({"基本信息", "年龄"}) private String age; /** 出生日期 */ - @ExcelProperty("出生日期") + @ExcelProperty({"基本信息", "出生日期"}) private String birthday; /** 民族 */ - @ExcelProperty("民族") + @ExcelProperty({"基本信息", "民族"}) private String nation; /** 籍贯 */ - @ExcelProperty("籍贯") + @ExcelProperty({"基本信息", "籍贯"}) private String nativePlace; /** 家庭住址 */ - @ExcelProperty("家庭住址") + @ExcelProperty({"基本信息", "家庭住址"}) private String homeAddress; /** 通信地址 */ - @ExcelProperty("通信地址") + @ExcelProperty({"基本信息", "通信地址"}) private String mailingAddress; /** 证件类型 */ - @ExcelProperty("证件类型") + @ExcelProperty({"基本信息", "证件类型"}) private String idCardType; /** 证件号码 */ - @ExcelProperty("证件号码") + @ExcelProperty({"基本信息", "证件号码"}) private String idCardNumber; /** 文化程度 */ - @ExcelProperty("文化程度") + @ExcelProperty({"基本信息", "文化程度"}) private String cultureLevel; /** 政治面貌 */ - @ExcelProperty("政治面貌") + @ExcelProperty({"基本信息", "政治面貌"}) private String politicalOutlook; /** 毕业院校 */ - @ExcelProperty("毕业院校") + @ExcelProperty({"基本信息", "毕业院校"}) private String college; /** 学历 */ - @ExcelProperty("学历") + @ExcelProperty({"基本信息", "学历"}) private String education; /** 学制 */ - @ExcelProperty("学制") + @ExcelProperty({"基本信息", "学制"}) private String eduLength; /** 学位 */ - @ExcelProperty("学位") + @ExcelProperty({"基本信息", "学位"}) private String degree; /** 手机 */ - @ExcelProperty("手机") + @ExcelProperty({"基本信息", "手机"}) private String phone; /** 邮箱 */ - @ExcelProperty("邮箱") + @ExcelProperty({"基本信息", "邮箱"}) private String email; /** 家庭电话 */ - @ExcelProperty("家庭电话") + @ExcelProperty({"基本信息", "家庭电话"}) private String homeTel; /** 办公电话 */ - @ExcelProperty("办公电话") + @ExcelProperty({"基本信息", "办公电话"}) private String officeTel; /** 紧急联系人 */ - @ExcelProperty("紧急联系人") + @ExcelProperty({"基本信息", "紧急联系人"}) private String emergencyContact; /** 紧急联系人电话 */ - @ExcelProperty("紧急联系人电话") + @ExcelProperty({"基本信息", "紧急联系人电话"}) private String emergencyPhone; /** 紧急联系人地址 */ - @ExcelProperty("紧急联系人地址") + @ExcelProperty({"基本信息", "紧急联系人地址"}) private String emergencyAddress; /** 员工编号 */ - @ExcelProperty("员工编号") + @ExcelProperty({"员工信息", "员工编号"}) private String empNo; /** 入职日期 */ - @ExcelProperty("入职日期") + @ExcelProperty({"员工信息", "入职日期"}) private String entryDate; /** 组织名称 */ - @ExcelProperty("组织名称") + @ExcelProperty({"员工信息", "组织名称"}) private String orgName; /** 职位名称 */ - @ExcelProperty("职位名称") + @ExcelProperty({"员工信息", "职位名称"}) private String positionName; /** 主管名称 */ - @ExcelProperty("主管名称") + @ExcelProperty({"员工信息", "主管名称"}) private String directorName; /** 职级 */ - @ExcelProperty("职级") + @ExcelProperty({"员工信息", "职级"}) private String positionLevel; /** 上次登录ip */ - @ExcelProperty("上次登录ip") + @ExcelProperty({"系统信息", "上次登录ip"}) private String lastLoginIp; /** 上次登录地点 */ - @ExcelProperty("上次登录地点") + @ExcelProperty({"系统信息", "上次登录地点"}) private String lastLoginAddress; /** 上次登录时间 */ @DateTimeFormat("yyyy-MM-dd HH:mm:ss") - @ExcelProperty("上次登录时间") + @ExcelProperty({"系统信息", "上次登录时间"}) private Date lastLoginTime; /** 上次登录设备 */ - @ExcelProperty("上次登录设备") + @ExcelProperty({"系统信息", "上次登录设备"}) private String lastLoginDevice; /** 最新登录ip */ - @ExcelProperty("最新登录ip") + @ExcelProperty({"系统信息", "最新登录ip"}) private String latestLoginIp; /** 最新登录地点 */ - @ExcelProperty("最新登录地点") + @ExcelProperty({"系统信息", "最新登录地点"}) private String latestLoginAddress; /** 最新登录时间 */ @DateTimeFormat("yyyy-MM-dd HH:mm:ss") - @ExcelProperty("最新登录时间") + @ExcelProperty({"系统信息", "最新登录时间"}) private Date latestLoginTime; /** 最新登录设备 */ - @ExcelProperty("最新登录设备") + @ExcelProperty({"系统信息", "最新登录设备"}) private String latestLoginDevice; /** 用户状态 */ - @ExcelProperty("用户状态") + @ExcelProperty(value = {"系统信息", "用户状态"}) private String userStatus; } diff --git a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java index dc8325b6..b08edbc7 100644 --- a/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java +++ b/snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java @@ -35,6 +35,8 @@ import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; 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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -954,7 +956,7 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public void importUser(MultipartFile file) { - // TODO 待完善 + // TODO } @Override @@ -975,10 +977,15 @@ public class SysUserServiceImpl extends ServiceImpl impl } } String fileName = "SNOWY2.0系统B端用户信息清单.xlsx"; - List sysUserExportResultList = this.list(queryWrapper).stream() + List sysUserList = this.list(queryWrapper); + transService.transBatch(sysUserList); + List sysUserExportResultList = sysUserList.stream() .map(sysUser -> { SysUserExportResult sysUserExportResult = new SysUserExportResult(); BeanUtil.copyProperties(sysUser, sysUserExportResult); + // 状态枚举转为文字 + sysUserExportResult.setUserStatus(sysUserExportResult.getUserStatus() + .equalsIgnoreCase(SysUserStatusEnum.ENABLE.getValue())?"正常":"停用"); // 将base64转为byte数组 sysUserExportResult.setAvatar(ImgUtil.toBytes(ImgUtil.toImage(StrUtil .split(sysUser.getAvatar(), StrUtil.COMMA).get(1)), ImgUtil.IMAGE_TYPE_PNG)); diff --git a/snowy-web-app/src/test/java/vip/xiaonuo/Test.java b/snowy-web-app/src/test/java/vip/xiaonuo/Test.java index a9270e71..8bdc9fef 100644 --- a/snowy-web-app/src/test/java/vip/xiaonuo/Test.java +++ b/snowy-web-app/src/test/java/vip/xiaonuo/Test.java @@ -12,6 +12,11 @@ */ 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方法 * @@ -20,6 +25,15 @@ package vip.xiaonuo; */ public class Test { public static void main(String[] args) { - + try { + EasyExcel.read("D://import.xlsx", SysUserImportParam.class, new PageReadListener(dataList -> { + for (SysUserImportParam sysUserImportParam : dataList) { + System.out.println(sysUserImportParam); + } + })).sheet().doRead(); + } catch (Exception e) { + e.printStackTrace(); + throw new CommonException("文件导入失败"); + } } }