mirror of https://gitee.com/xiaonuobase/snowy
【更新】更新数据变动事件机制,可对系统数据变动监听做额外处理,降低耦合
parent
11c9145eaf
commit
16ff5dcb3c
|
@ -1,3 +1,15 @@
|
|||
/*
|
||||
* 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.handler;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
|
|
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
* 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.listener;
|
||||
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 通用数据变化事件中心 事件发布器
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:14
|
||||
**/
|
||||
public class CommonDataChangeEventCenter {
|
||||
|
||||
// --------- 注册侦听器
|
||||
|
||||
private static List<CommonDataChangeListener> listenerList = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 获取已注册的所有侦听器
|
||||
* @return /
|
||||
*/
|
||||
public static List<CommonDataChangeListener> getListenerList() {
|
||||
return listenerList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置侦听器集合
|
||||
* @param listenerList /
|
||||
*/
|
||||
public static void setListenerList(List<CommonDataChangeListener> listenerList) {
|
||||
if(listenerList == null) {
|
||||
throw new CommonException("重置的侦听器集合不可以为空");
|
||||
}
|
||||
CommonDataChangeEventCenter.listenerList = listenerList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册一个侦听器
|
||||
* @param listener /
|
||||
*/
|
||||
public static void registerListener(CommonDataChangeListener listener) {
|
||||
if(listener == null) {
|
||||
throw new CommonException("注册的侦听器不可以为空");
|
||||
}
|
||||
listenerList.add(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册一组侦听器
|
||||
* @param listenerList /
|
||||
*/
|
||||
public static void registerListenerList(List<CommonDataChangeListener> listenerList) {
|
||||
if(listenerList == null) {
|
||||
throw new CommonException("注册的侦听器不可以为空");
|
||||
}
|
||||
for (CommonDataChangeListener listener : listenerList) {
|
||||
if(listener == null) {
|
||||
throw new CommonException("注册的侦听器不可以为空");
|
||||
}
|
||||
}
|
||||
CommonDataChangeEventCenter.listenerList.addAll(listenerList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除一个侦听器
|
||||
* @param listener /
|
||||
*/
|
||||
public static void removeListener(CommonDataChangeListener listener) {
|
||||
listenerList.remove(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除指定类型的所有侦听器
|
||||
* @param cls /
|
||||
*/
|
||||
public static void removeListener(Class<? extends CommonDataChangeListener> cls) {
|
||||
ArrayList<CommonDataChangeListener> listenerListCopy = new ArrayList<>(listenerList);
|
||||
for (CommonDataChangeListener listener : listenerListCopy) {
|
||||
if(cls.isAssignableFrom(listener.getClass())) {
|
||||
listenerList.remove(listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空所有已注册的侦听器
|
||||
*/
|
||||
public static void clearListener() {
|
||||
listenerList.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否已经注册了指定侦听器
|
||||
* @param listener /
|
||||
* @return /
|
||||
*/
|
||||
public static boolean hasListener(CommonDataChangeListener listener) {
|
||||
return listenerList.contains(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否已经注册了指定类型的侦听器
|
||||
* @param cls /
|
||||
* @return /
|
||||
*/
|
||||
public static boolean hasListener(Class<? extends CommonDataChangeListener> cls) {
|
||||
for (CommonDataChangeListener listener : listenerList) {
|
||||
if(cls.isAssignableFrom(listener.getClass())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// --------- 事件发布-添加 --------- //
|
||||
|
||||
/**
|
||||
* 执行添加事件发布,数据集合
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:22
|
||||
**/
|
||||
public static void doAddWithData(String dataType, JSONArray jsonArray) {
|
||||
for (CommonDataChangeListener listener : listenerList) {
|
||||
listener.doAddWithDataIdList(dataType, jsonArray.stream().map(o -> JSONUtil.parseObj(o).getStr("id")).collect(Collectors.toList()));
|
||||
listener.doAddWithDataList(dataType, jsonArray);
|
||||
}
|
||||
}
|
||||
|
||||
// --------- 事件发布-更新 --------- //
|
||||
|
||||
/**
|
||||
* 执行更新事件发布,数据集合
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:22
|
||||
**/
|
||||
public static void doUpdateWithData(String dataType, JSONArray jsonArray) {
|
||||
for (CommonDataChangeListener listener : listenerList) {
|
||||
listener.doUpdateWithDataIdList(dataType, jsonArray.stream().map(o -> JSONUtil.parseObj(o).getStr("id")).collect(Collectors.toList()));
|
||||
listener.doUpdateWithDataList(dataType, jsonArray);
|
||||
}
|
||||
}
|
||||
|
||||
// --------- 事件发布-删除 --------- //
|
||||
|
||||
/**
|
||||
* 执行删除事件发布,ID集合
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:22
|
||||
**/
|
||||
public static void doDeleteWithDataId(String dataType, List<String> dataIdList) {
|
||||
for (CommonDataChangeListener listener : listenerList) {
|
||||
listener.doDeleteWithDataIdList(dataType, dataIdList);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* 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.listener;
|
||||
|
||||
import cn.hutool.json.JSONArray;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 通用数据变化侦听器,你可以实现该侦听器接口,在数据更新时进行一些AOP操作
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:14
|
||||
**/
|
||||
public interface CommonDataChangeListener {
|
||||
|
||||
/**
|
||||
* 执行添加,ID集合
|
||||
*
|
||||
* @param dataType 数据类型,如USER、ORG,自行定义
|
||||
* @param dataIdList 被添加的数据ID集合
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:24
|
||||
**/
|
||||
void doAddWithDataIdList(String dataType, List<String> dataIdList);
|
||||
|
||||
/**
|
||||
* 执行添加,数据集合
|
||||
*
|
||||
* @param dataType 数据类型,如USER、ORG,自行定义
|
||||
* @param jsonArray 被添加的数据集合
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:24
|
||||
**/
|
||||
void doAddWithDataList(String dataType, JSONArray jsonArray);
|
||||
|
||||
/**
|
||||
* 执行更新,ID集合
|
||||
*
|
||||
* @param dataType 数据类型,如USER、ORG,自行定义
|
||||
* @param dataIdList 被更新的数据ID集合
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:24
|
||||
**/
|
||||
void doUpdateWithDataIdList(String dataType, List<String> dataIdList);
|
||||
|
||||
/**
|
||||
* 执行更新,数据集合
|
||||
*
|
||||
* @param dataType 数据类型,如USER、ORG,自行定义
|
||||
* @param jsonArray 被更新的数据集合
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:24
|
||||
**/
|
||||
void doUpdateWithDataList(String dataType, JSONArray jsonArray);
|
||||
|
||||
/**
|
||||
* 执行删除,ID集合
|
||||
*
|
||||
* @param dataType 数据类型,如USER、ORG,自行定义
|
||||
* @param dataIdList 被删除的数据ID集合
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:24
|
||||
**/
|
||||
void doDeleteWithDataIdList(String dataType, List<String> dataIdList);
|
||||
}
|
|
@ -137,7 +137,7 @@ public class AuthServiceImpl implements AuthService {
|
|||
throw new CommonException(AuthExceptionEnum.VALID_CODE_ERROR.getValue());
|
||||
}
|
||||
// 不一致则直接验证码错误
|
||||
if(!validCode.equals(Convert.toStr(existValidCode))) {
|
||||
if(!validCode.equals(Convert.toStr(existValidCode).toLowerCase())) {
|
||||
// 移除该验证码
|
||||
commonCacheOperator.remove(AUTH_CACHE_KEY + validCodeReqNo);
|
||||
throw new CommonException(AuthExceptionEnum.VALID_CODE_ERROR.getValue());
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* 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.biz.core.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 业务模块数据类型枚举
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:40
|
||||
**/
|
||||
@Getter
|
||||
public enum BizDataTypeEnum {
|
||||
|
||||
/**
|
||||
* 机构
|
||||
*/
|
||||
ORG("ORG"),
|
||||
|
||||
/**
|
||||
* 岗位
|
||||
*/
|
||||
POSITION("POSITION"),
|
||||
|
||||
/**
|
||||
* 人员
|
||||
*/
|
||||
USER("USER");
|
||||
|
||||
private final String value;
|
||||
|
||||
BizDataTypeEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
}
|
|
@ -30,6 +30,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
||||
import vip.xiaonuo.biz.core.enums.BizDataTypeEnum;
|
||||
import vip.xiaonuo.biz.modular.org.entity.BizOrg;
|
||||
import vip.xiaonuo.biz.modular.org.enums.BizOrgCategoryEnum;
|
||||
import vip.xiaonuo.biz.modular.org.mapper.BizOrgMapper;
|
||||
|
@ -41,6 +42,7 @@ import vip.xiaonuo.biz.modular.user.entity.BizUser;
|
|||
import vip.xiaonuo.biz.modular.user.service.BizUserService;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.sys.api.SysRoleApi;
|
||||
|
||||
|
@ -139,6 +141,9 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
|
|||
}
|
||||
bizOrg.setCode(RandomUtil.randomString(10));
|
||||
this.save(bizOrg);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(bizOrg));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -171,6 +176,9 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
|
|||
throw new CommonException("不可选择上级机构:{}", this.getById(originDataList, bizOrg.getParentId()).getName());
|
||||
}
|
||||
this.updateById(bizOrg);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(BizDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(bizOrg));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -221,6 +229,9 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
|
|||
}
|
||||
// 执行删除
|
||||
this.removeByIds(toDeleteOrgIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(BizDataTypeEnum.ORG.getValue(), toDeleteOrgIdList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
||||
import vip.xiaonuo.biz.core.enums.BizDataTypeEnum;
|
||||
import vip.xiaonuo.biz.modular.org.entity.BizOrg;
|
||||
import vip.xiaonuo.biz.modular.org.service.BizOrgService;
|
||||
import vip.xiaonuo.biz.modular.position.entity.BizPosition;
|
||||
|
@ -42,6 +43,7 @@ import vip.xiaonuo.biz.modular.user.entity.BizUser;
|
|||
import vip.xiaonuo.biz.modular.user.service.BizUserService;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
@ -114,6 +116,9 @@ public class BizPositionServiceImpl extends ServiceImpl<BizPositionMapper, BizPo
|
|||
}
|
||||
bizPosition.setCode(RandomUtil.randomString(10));
|
||||
this.save(bizPosition);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(bizPosition));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -139,6 +144,9 @@ public class BizPositionServiceImpl extends ServiceImpl<BizPositionMapper, BizPo
|
|||
throw new CommonException("同机构下存在重复的岗位,名称为:{}", bizPosition.getName());
|
||||
}
|
||||
this.updateById(bizPosition);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(BizDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(bizPosition));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -176,6 +184,9 @@ public class BizPositionServiceImpl extends ServiceImpl<BizPositionMapper, BizPo
|
|||
}
|
||||
// 执行删除
|
||||
this.removeByIds(positionIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(BizDataTypeEnum.POSITION.getValue(), positionIdList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import org.springframework.web.multipart.MultipartFile;
|
||||
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
||||
import vip.xiaonuo.biz.core.enums.BizBuildInEnum;
|
||||
import vip.xiaonuo.biz.core.enums.BizDataTypeEnum;
|
||||
import vip.xiaonuo.biz.modular.org.entity.BizOrg;
|
||||
import vip.xiaonuo.biz.modular.org.service.BizOrgService;
|
||||
import vip.xiaonuo.biz.modular.position.entity.BizPosition;
|
||||
|
@ -52,6 +53,7 @@ import vip.xiaonuo.biz.modular.user.result.BizUserRoleResult;
|
|||
import vip.xiaonuo.biz.modular.user.service.BizUserService;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.common.util.*;
|
||||
import vip.xiaonuo.dev.api.DevConfigApi;
|
||||
|
@ -139,6 +141,9 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
|
|||
// 设置状态
|
||||
bizUser.setUserStatus(BizUserStatusEnum.ENABLE.getValue());
|
||||
this.save(bizUser);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(bizUser));
|
||||
}
|
||||
|
||||
private void checkParam(BizUserAddParam bizUserAddParam) {
|
||||
|
@ -187,6 +192,9 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
|
|||
}
|
||||
BeanUtil.copyProperties(bizUserEditParam, bizUser);
|
||||
this.updateById(bizUser);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(BizDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(bizUser));
|
||||
}
|
||||
|
||||
private void checkParam(BizUserEditParam bizUserEditParam) {
|
||||
|
@ -254,6 +262,7 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
|
|||
}
|
||||
// 清除【将这些人员作为主管】的信息
|
||||
this.update(new LambdaUpdateWrapper<BizUser>().in(BizUser::getDirectorId, bizUserIdList).set(BizUser::getDirectorId, null));
|
||||
|
||||
// 清除【将这些人员作为兼任岗位的主管】的信息
|
||||
this.list(new LambdaQueryWrapper<BizUser>() .isNotNull(BizUser::getPositionJson)).forEach(sysUser -> {
|
||||
List<JSONObject> handledJsonObjectList = JSONUtil.toList(JSONUtil.parseArray(sysUser.getPositionJson()),
|
||||
|
@ -266,10 +275,15 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
|
|||
this.update(new LambdaUpdateWrapper<BizUser>().eq(BizUser::getId, sysUser.getId())
|
||||
.set(BizUser::getPositionJson, JSONUtil.toJsonStr(handledJsonObjectList)));
|
||||
});
|
||||
|
||||
// 清除【将这些用户作为主管】的机构的主管信息
|
||||
bizOrgService.update(new LambdaUpdateWrapper<BizOrg>().in(BizOrg::getDirectorId, bizUserIdList).set(BizOrg::getDirectorId, null));
|
||||
|
||||
// 执行删除
|
||||
this.removeByIds(bizUserIdList);
|
||||
|
||||
// TODO 此处需要将这些人员踢下线,并永久注销这些人员
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(BizDataTypeEnum.USER.getValue(), bizUserIdList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* 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.core.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 系统模块数据类型枚举
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:40
|
||||
**/
|
||||
@Getter
|
||||
public enum SysDataTypeEnum {
|
||||
|
||||
/**
|
||||
* 组织
|
||||
*/
|
||||
ORG("ORG"),
|
||||
|
||||
/**
|
||||
* 职位
|
||||
*/
|
||||
POSITION("POSITION"),
|
||||
|
||||
/**
|
||||
* 资源
|
||||
*/
|
||||
RESOURCE("RESOURCE"),
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*/
|
||||
ROLE("ROLE"),
|
||||
|
||||
/**
|
||||
* 用户
|
||||
*/
|
||||
USER("USER");
|
||||
|
||||
private final String value;
|
||||
|
||||
SysDataTypeEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* 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.core.listener;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import org.springframework.stereotype.Component;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeListener;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统模块数据变化侦听器
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 10:44
|
||||
**/
|
||||
@Component
|
||||
public class SysDataChangeListener implements CommonDataChangeListener {
|
||||
|
||||
@Override
|
||||
public void doAddWithDataIdList(String dataType, List<String> dataIdList) {
|
||||
// 此处可做额外处理
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAddWithDataList(String dataType, JSONArray jsonArray) {
|
||||
// 此处可做额外处理
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doUpdateWithDataIdList(String dataType, List<String> dataIdList) {
|
||||
// 此处可做额外处理
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doUpdateWithDataList(String dataType, JSONArray jsonArray) {
|
||||
// 此处可做额外处理
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doDeleteWithDataIdList(String dataType, List<String> dataIdList) {
|
||||
if(dataType.equals(SysDataTypeEnum.USER.getValue())) {
|
||||
// 当用户被删除时,此处将这些用户踢下线
|
||||
dataIdList.forEach(StpUtil::kickout);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -31,7 +31,9 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
import vip.xiaonuo.sys.modular.org.entity.SysOrg;
|
||||
import vip.xiaonuo.sys.modular.org.enums.SysOrgCategoryEnum;
|
||||
import vip.xiaonuo.sys.modular.org.mapper.SysOrgMapper;
|
||||
|
@ -100,6 +102,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
|
|||
return TreeUtil.build(treeNodeList, "0");
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void add(SysOrgAddParam sysOrgAddParam) {
|
||||
SysOrgCategoryEnum.validate(sysOrgAddParam.getCategory());
|
||||
|
@ -112,8 +115,12 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
|
|||
}
|
||||
sysOrg.setCode(RandomUtil.randomString(10));
|
||||
this.save(sysOrg);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(sysOrg));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void edit(SysOrgEditParam sysOrgEditParam) {
|
||||
SysOrgCategoryEnum.validate(sysOrgEditParam.getCategory());
|
||||
|
@ -131,6 +138,9 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
|
|||
throw new CommonException("不可选择上级组织:{}", this.getById(originDataList, sysOrg.getParentId()).getName());
|
||||
}
|
||||
this.updateById(sysOrg);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(sysOrg));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -173,6 +183,9 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
|
|||
}
|
||||
// 执行删除
|
||||
this.removeByIds(toDeleteOrgIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.ORG.getValue(), toDeleteOrgIdList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,9 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
import vip.xiaonuo.sys.modular.org.entity.SysOrg;
|
||||
import vip.xiaonuo.sys.modular.org.service.SysOrgService;
|
||||
import vip.xiaonuo.sys.modular.position.entity.SysPosition;
|
||||
|
@ -86,6 +88,7 @@ public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPo
|
|||
return this.page(CommonPageRequest.defaultPage(), queryWrapper);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void add(SysPositionAddParam sysPositionAddParam) {
|
||||
SysPositionCategoryEnum.validate(sysPositionAddParam.getCategory());
|
||||
|
@ -97,8 +100,12 @@ public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPo
|
|||
}
|
||||
sysPosition.setCode(RandomUtil.randomString(10));
|
||||
this.save(sysPosition);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(sysPosition));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void edit(SysPositionEditParam sysPositionEditParam) {
|
||||
SysPositionCategoryEnum.validate(sysPositionEditParam.getCategory());
|
||||
|
@ -110,6 +117,9 @@ public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPo
|
|||
throw new CommonException("同组织下存在重复的职位,名称为:{}", sysPosition.getName());
|
||||
}
|
||||
this.updateById(sysPosition);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(sysPosition));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -136,6 +146,9 @@ public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPo
|
|||
}
|
||||
// 执行删除
|
||||
this.removeByIds(positionIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.POSITION.getValue(), positionIdList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,9 +25,12 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
import vip.xiaonuo.sys.modular.relation.entity.SysRelation;
|
||||
import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum;
|
||||
import vip.xiaonuo.sys.modular.relation.service.SysRelationService;
|
||||
|
@ -83,6 +86,7 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
|
|||
return this.page(CommonPageRequest.defaultPage(), queryWrapper);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void add(SysButtonAddParam sysButtonAddParam) {
|
||||
SysButton sysButton = BeanUtil.toBean(sysButtonAddParam, SysButton.class);
|
||||
|
@ -94,6 +98,9 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
|
|||
}
|
||||
sysButton.setCategory(SysResourceCategoryEnum.BUTTON.getValue());
|
||||
this.save(sysButton);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysButton));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -111,6 +118,7 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
|
|||
});
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void edit(SysButtonEditParam sysButtonEditParam) {
|
||||
SysButton sysButton = this.queryEntity(sysButtonEditParam.getId());
|
||||
|
@ -123,6 +131,9 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
|
|||
throw new CommonException("存在重复的按钮,编码为:{}", sysButton.getCode());
|
||||
}
|
||||
this.updateById(sysButton);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysButton));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -152,6 +163,9 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
|
|||
});
|
||||
// 执行删除
|
||||
this.removeByIds(buttonIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.RESOURCE.getValue(), buttonIdList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,9 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
import vip.xiaonuo.sys.modular.relation.entity.SysRelation;
|
||||
import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum;
|
||||
import vip.xiaonuo.sys.modular.relation.service.SysRelationService;
|
||||
|
@ -102,6 +104,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
return TreeUtil.build(treeNodeList, "0");
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void add(SysMenuAddParam sysMenuAddParam) {
|
||||
checkParam(sysMenuAddParam);
|
||||
|
@ -124,6 +127,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
}
|
||||
sysMenu.setCategory(SysResourceCategoryEnum.MENU.getValue());
|
||||
this.save(sysMenu);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysMenu));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -185,6 +191,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void edit(SysMenuEditParam sysMenuEditParam) {
|
||||
SysMenu sysMenu = this.queryEntity(sysMenuEditParam.getId());
|
||||
|
@ -213,6 +220,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
}
|
||||
}
|
||||
this.updateById(sysMenu);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysMenu));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -266,6 +276,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
.eq(SysRelation::getCategory, SysRelationCategoryEnum.SYS_ROLE_HAS_RESOURCE.getValue()));
|
||||
// 执行删除
|
||||
this.removeByIds(toDeleteMenuIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.RESOURCE.getValue(), toDeleteMenuIdList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,16 +18,20 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.sys.core.enums.SysBuildInEnum;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
import vip.xiaonuo.sys.modular.relation.entity.SysRelation;
|
||||
import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum;
|
||||
import vip.xiaonuo.sys.modular.relation.service.SysRelationService;
|
||||
|
@ -78,6 +82,7 @@ public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule
|
|||
return this.page(CommonPageRequest.defaultPage(), queryWrapper);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void add(SysModuleAddParam sysModuleAddParam) {
|
||||
SysModule sysModule = BeanUtil.toBean(sysModuleAddParam, SysModule.class);
|
||||
|
@ -89,8 +94,12 @@ public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule
|
|||
sysModule.setCode(RandomUtil.randomString(10));
|
||||
sysModule.setCategory(SysResourceCategoryEnum.MODULE.getValue());
|
||||
this.save(sysModule);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysModule));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void edit(SysModuleEditParam sysModuleEditParam) {
|
||||
SysModule sysModule = this.queryEntity(sysModuleEditParam.getId());
|
||||
|
@ -102,6 +111,9 @@ public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule
|
|||
throw new CommonException("存在重复的模块,名称为:{}", sysModule.getTitle());
|
||||
}
|
||||
this.updateById(sysModule);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysModule));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -130,6 +142,9 @@ public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule
|
|||
.eq(SysRelation::getCategory, SysRelationCategoryEnum.SYS_ROLE_HAS_RESOURCE.getValue()));
|
||||
// 执行删除
|
||||
this.removeByIds(toDeleteMenuIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.RESOURCE.getValue(), toDeleteMenuIdList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,15 +17,19 @@ import cn.hutool.core.collection.CollStreamUtil;
|
|||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.sys.core.enums.SysBuildInEnum;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
import vip.xiaonuo.sys.modular.resource.entity.SysSpa;
|
||||
import vip.xiaonuo.sys.modular.resource.enums.SysResourceCategoryEnum;
|
||||
import vip.xiaonuo.sys.modular.resource.enums.SysResourceMenuTypeEnum;
|
||||
|
@ -65,6 +69,7 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
|
|||
return this.page(CommonPageRequest.defaultPage(), queryWrapper);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void add(SysSpaAddParam sysSpaAddParam) {
|
||||
checkParam(sysSpaAddParam);
|
||||
|
@ -77,6 +82,9 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
|
|||
sysSpa.setCode(RandomUtil.randomString(10));
|
||||
sysSpa.setCategory(SysResourceCategoryEnum.SPA.getValue());
|
||||
this.save(sysSpa);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysSpa));
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
|
@ -99,6 +107,7 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
|
|||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void edit(SysSpaEditParam sysSpaEditParam) {
|
||||
SysSpa sysSpa = this.queryEntity(sysSpaEditParam.getId());
|
||||
|
@ -111,6 +120,9 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
|
|||
throw new CommonException("存在重复的单页面,名称为:{}", sysSpa.getTitle());
|
||||
}
|
||||
this.updateById(sysSpa);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysSpa));
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
|
@ -144,6 +156,9 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
|
|||
}
|
||||
// 删除
|
||||
this.removeByIds(sysSpaIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.RESOURCE.getValue(), sysSpaIdList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,9 +37,11 @@ import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
|
|||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.mobile.api.MobileMenuApi;
|
||||
import vip.xiaonuo.sys.core.enums.SysBuildInEnum;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
import vip.xiaonuo.sys.modular.org.entity.SysOrg;
|
||||
import vip.xiaonuo.sys.modular.org.service.SysOrgService;
|
||||
import vip.xiaonuo.sys.modular.relation.entity.SysRelation;
|
||||
|
@ -112,6 +114,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||
return this.page(CommonPageRequest.defaultPage(), queryWrapper);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void add(SysRoleAddParam sysRoleAddParam) {
|
||||
SysRoleCategoryEnum.validate(sysRoleAddParam.getCategory());
|
||||
|
@ -134,8 +137,12 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||
}
|
||||
sysRole.setCode(RandomUtil.randomString(10));
|
||||
this.save(sysRole);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.ROLE.getValue(), JSONUtil.createArray().put(sysRole));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void edit(SysRoleEditParam sysRoleEditParam) {
|
||||
SysRole sysRole = this.queryEntity(sysRoleEditParam.getId());
|
||||
|
@ -161,6 +168,9 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||
}
|
||||
BeanUtil.copyProperties(sysRoleEditParam, sysRole);
|
||||
this.updateById(sysRole);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.ROLE.getValue(), JSONUtil.createArray().put(sysRole));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -184,6 +194,9 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||
.eq(SysRelation::getCategory, SysRelationCategoryEnum.SYS_ROLE_HAS_PERMISSION.getValue()));
|
||||
// 执行删除
|
||||
this.removeByIds(sysRoleIdList);
|
||||
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.ROLE.getValue(), sysRoleIdList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||
import vip.xiaonuo.common.cache.CommonCacheOperator;
|
||||
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.page.CommonPageRequest;
|
||||
import vip.xiaonuo.common.util.*;
|
||||
import vip.xiaonuo.dev.api.DevConfigApi;
|
||||
|
@ -59,6 +60,7 @@ import vip.xiaonuo.dev.api.DevSmsApi;
|
|||
import vip.xiaonuo.mobile.api.MobileButtonApi;
|
||||
import vip.xiaonuo.mobile.api.MobileMenuApi;
|
||||
import vip.xiaonuo.sys.core.enums.SysBuildInEnum;
|
||||
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
|
||||
import vip.xiaonuo.sys.modular.org.entity.SysOrg;
|
||||
import vip.xiaonuo.sys.modular.org.service.SysOrgService;
|
||||
import vip.xiaonuo.sys.modular.position.entity.SysPosition;
|
||||
|
@ -227,6 +229,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
// 设置状态
|
||||
sysUser.setUserStatus(SysUserStatusEnum.ENABLE.getValue());
|
||||
this.save(sysUser);
|
||||
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(sysUser));
|
||||
}
|
||||
|
||||
private void checkParam(SysUserAddParam sysUserAddParam) {
|
||||
|
@ -266,6 +271,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
}
|
||||
BeanUtil.copyProperties(sysUserEditParam, sysUser);
|
||||
this.updateById(sysUser);
|
||||
|
||||
// 发布更新事件
|
||||
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(sysUser));
|
||||
}
|
||||
|
||||
private void checkParam(SysUserEditParam sysUserEditParam) {
|
||||
|
@ -306,8 +314,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
if (containsSuperAdminAccount) {
|
||||
throw new CommonException("不可删除系统内置超管用户");
|
||||
}
|
||||
|
||||
// 清除【将这些用户作为主管】的信息
|
||||
this.update(new LambdaUpdateWrapper<SysUser>().in(SysUser::getDirectorId, sysUserIdList).set(SysUser::getDirectorId, null));
|
||||
|
||||
// 清除【将这些用户作为兼任职位的主管】的信息
|
||||
this.list(new LambdaQueryWrapper<SysUser>().isNotNull(SysUser::getPositionJson)).forEach(sysUser -> {
|
||||
List<JSONObject> handledJsonObjectList = JSONUtil.toList(JSONUtil.parseArray(sysUser.getPositionJson()),
|
||||
|
@ -320,10 +330,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getId, sysUser.getId())
|
||||
.set(SysUser::getPositionJson, JSONUtil.toJsonStr(handledJsonObjectList)));
|
||||
});
|
||||
|
||||
// 清除【将这些用户作为主管】的机构的主管信息
|
||||
sysOrgService.update(new LambdaUpdateWrapper<SysOrg>().in(SysOrg::getDirectorId, sysUserIdList).set(SysOrg::getDirectorId, null));
|
||||
|
||||
// 执行删除
|
||||
this.removeByIds(sysUserIdList);
|
||||
|
||||
// TODO 此处需要将这些用户踢下线,并永久注销这些用户
|
||||
// 发布删除事件
|
||||
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.USER.getValue(), sysUserIdList);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -387,7 +402,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
throw new CommonException("验证码错误");
|
||||
}
|
||||
// 不一致则直接验证码错误
|
||||
if (!validCode.equals(Convert.toStr(existValidCode))) {
|
||||
if (!validCode.equals(Convert.toStr(existValidCode).toLowerCase())) {
|
||||
// 移除该验证码
|
||||
commonCacheOperator.remove(USER_CACHE_KEY + validCodeReqNo);
|
||||
throw new CommonException("验证码错误");
|
||||
|
|
|
@ -60,11 +60,14 @@ import vip.xiaonuo.common.annotation.CommonNoRepeat;
|
|||
import vip.xiaonuo.common.annotation.CommonWrapper;
|
||||
import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
|
||||
import vip.xiaonuo.common.exception.CommonException;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
|
||||
import vip.xiaonuo.common.listener.CommonDataChangeListener;
|
||||
import vip.xiaonuo.common.pojo.CommonResult;
|
||||
import vip.xiaonuo.common.pojo.CommonWrapperInterface;
|
||||
import vip.xiaonuo.core.handler.GlobalExceptionUtil;
|
||||
import vip.xiaonuo.sys.core.enums.SysBuildInEnum;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
@ -585,4 +588,15 @@ public class GlobalConfigure implements WebMvcConfigurer {
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册数据变化事件中心 事件发布器
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2023/3/3 14:27
|
||||
**/
|
||||
@Resource
|
||||
public void registerListenerList(List<CommonDataChangeListener> dataChangeListenerList) {
|
||||
CommonDataChangeEventCenter.registerListenerList(dataChangeListenerList);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue