【更新】更新数据变动事件机制,可对系统数据变动监听做额外处理,降低耦合

pull/87/head
xuyuxiang 2023-03-03 14:43:07 +08:00
parent 11c9145eaf
commit 16ff5dcb3c
19 changed files with 591 additions and 4 deletions

View File

@ -1,3 +1,15 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* SnowyAPACHE 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; package vip.xiaonuo.common.handler;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;

View File

@ -0,0 +1,175 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* SnowyAPACHE 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);
}
}
}

View File

@ -0,0 +1,76 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* SnowyAPACHE 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 USERORG
* @param dataIdList ID
* @author xuyuxiang
* @date 2023/3/3 10:24
**/
void doAddWithDataIdList(String dataType, List<String> dataIdList);
/**
*
*
* @param dataType USERORG
* @param jsonArray
* @author xuyuxiang
* @date 2023/3/3 10:24
**/
void doAddWithDataList(String dataType, JSONArray jsonArray);
/**
* ID
*
* @param dataType USERORG
* @param dataIdList ID
* @author xuyuxiang
* @date 2023/3/3 10:24
**/
void doUpdateWithDataIdList(String dataType, List<String> dataIdList);
/**
*
*
* @param dataType USERORG
* @param jsonArray
* @author xuyuxiang
* @date 2023/3/3 10:24
**/
void doUpdateWithDataList(String dataType, JSONArray jsonArray);
/**
* ID
*
* @param dataType USERORG
* @param dataIdList ID
* @author xuyuxiang
* @date 2023/3/3 10:24
**/
void doDeleteWithDataIdList(String dataType, List<String> dataIdList);
}

View File

@ -137,7 +137,7 @@ public class AuthServiceImpl implements AuthService {
throw new CommonException(AuthExceptionEnum.VALID_CODE_ERROR.getValue()); 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); commonCacheOperator.remove(AUTH_CACHE_KEY + validCodeReqNo);
throw new CommonException(AuthExceptionEnum.VALID_CODE_ERROR.getValue()); throw new CommonException(AuthExceptionEnum.VALID_CODE_ERROR.getValue());

View File

@ -0,0 +1,47 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* SnowyAPACHE 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;
}
}

View File

@ -30,6 +30,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.auth.core.util.StpLoginUserUtil; 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.entity.BizOrg;
import vip.xiaonuo.biz.modular.org.enums.BizOrgCategoryEnum; import vip.xiaonuo.biz.modular.org.enums.BizOrgCategoryEnum;
import vip.xiaonuo.biz.modular.org.mapper.BizOrgMapper; 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.biz.modular.user.service.BizUserService;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.common.page.CommonPageRequest;
import vip.xiaonuo.sys.api.SysRoleApi; import vip.xiaonuo.sys.api.SysRoleApi;
@ -139,6 +141,9 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
} }
bizOrg.setCode(RandomUtil.randomString(10)); bizOrg.setCode(RandomUtil.randomString(10));
this.save(bizOrg); this.save(bizOrg);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(bizOrg));
} }
@Transactional(rollbackFor = Exception.class) @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()); throw new CommonException("不可选择上级机构:{}", this.getById(originDataList, bizOrg.getParentId()).getName());
} }
this.updateById(bizOrg); this.updateById(bizOrg);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(BizDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(bizOrg));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -221,6 +229,9 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
} }
// 执行删除 // 执行删除
this.removeByIds(toDeleteOrgIdList); this.removeByIds(toDeleteOrgIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(BizDataTypeEnum.ORG.getValue(), toDeleteOrgIdList);
} }
} }

View File

@ -31,6 +31,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.auth.core.util.StpLoginUserUtil; 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.entity.BizOrg;
import vip.xiaonuo.biz.modular.org.service.BizOrgService; import vip.xiaonuo.biz.modular.org.service.BizOrgService;
import vip.xiaonuo.biz.modular.position.entity.BizPosition; 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.biz.modular.user.service.BizUserService;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.common.page.CommonPageRequest;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -114,6 +116,9 @@ public class BizPositionServiceImpl extends ServiceImpl<BizPositionMapper, BizPo
} }
bizPosition.setCode(RandomUtil.randomString(10)); bizPosition.setCode(RandomUtil.randomString(10));
this.save(bizPosition); this.save(bizPosition);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(bizPosition));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -139,6 +144,9 @@ public class BizPositionServiceImpl extends ServiceImpl<BizPositionMapper, BizPo
throw new CommonException("同机构下存在重复的岗位,名称为:{}", bizPosition.getName()); throw new CommonException("同机构下存在重复的岗位,名称为:{}", bizPosition.getName());
} }
this.updateById(bizPosition); this.updateById(bizPosition);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(BizDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(bizPosition));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -176,6 +184,9 @@ public class BizPositionServiceImpl extends ServiceImpl<BizPositionMapper, BizPo
} }
// 执行删除 // 执行删除
this.removeByIds(positionIdList); this.removeByIds(positionIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(BizDataTypeEnum.POSITION.getValue(), positionIdList);
} }
} }

View File

@ -39,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import vip.xiaonuo.auth.core.util.StpLoginUserUtil; import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
import vip.xiaonuo.biz.core.enums.BizBuildInEnum; 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.entity.BizOrg;
import vip.xiaonuo.biz.modular.org.service.BizOrgService; import vip.xiaonuo.biz.modular.org.service.BizOrgService;
import vip.xiaonuo.biz.modular.position.entity.BizPosition; 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.biz.modular.user.service.BizUserService;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.common.page.CommonPageRequest;
import vip.xiaonuo.common.util.*; import vip.xiaonuo.common.util.*;
import vip.xiaonuo.dev.api.DevConfigApi; import vip.xiaonuo.dev.api.DevConfigApi;
@ -139,6 +141,9 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
// 设置状态 // 设置状态
bizUser.setUserStatus(BizUserStatusEnum.ENABLE.getValue()); bizUser.setUserStatus(BizUserStatusEnum.ENABLE.getValue());
this.save(bizUser); this.save(bizUser);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(bizUser));
} }
private void checkParam(BizUserAddParam bizUserAddParam) { private void checkParam(BizUserAddParam bizUserAddParam) {
@ -187,6 +192,9 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
} }
BeanUtil.copyProperties(bizUserEditParam, bizUser); BeanUtil.copyProperties(bizUserEditParam, bizUser);
this.updateById(bizUser); this.updateById(bizUser);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(BizDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(bizUser));
} }
private void checkParam(BizUserEditParam bizUserEditParam) { 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.update(new LambdaUpdateWrapper<BizUser>().in(BizUser::getDirectorId, bizUserIdList).set(BizUser::getDirectorId, null));
// 清除【将这些人员作为兼任岗位的主管】的信息 // 清除【将这些人员作为兼任岗位的主管】的信息
this.list(new LambdaQueryWrapper<BizUser>() .isNotNull(BizUser::getPositionJson)).forEach(sysUser -> { this.list(new LambdaQueryWrapper<BizUser>() .isNotNull(BizUser::getPositionJson)).forEach(sysUser -> {
List<JSONObject> handledJsonObjectList = JSONUtil.toList(JSONUtil.parseArray(sysUser.getPositionJson()), 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()) this.update(new LambdaUpdateWrapper<BizUser>().eq(BizUser::getId, sysUser.getId())
.set(BizUser::getPositionJson, JSONUtil.toJsonStr(handledJsonObjectList))); .set(BizUser::getPositionJson, JSONUtil.toJsonStr(handledJsonObjectList)));
}); });
// 清除【将这些用户作为主管】的机构的主管信息
bizOrgService.update(new LambdaUpdateWrapper<BizOrg>().in(BizOrg::getDirectorId, bizUserIdList).set(BizOrg::getDirectorId, null));
// 执行删除 // 执行删除
this.removeByIds(bizUserIdList); this.removeByIds(bizUserIdList);
// TODO 此处需要将这些人员踢下线,并永久注销这些人员 // 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(BizDataTypeEnum.USER.getValue(), bizUserIdList);
} }
} }

View File

@ -0,0 +1,57 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* SnowyAPACHE 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;
}
}

View File

@ -0,0 +1,59 @@
/*
* Copyright [2022] [https://www.xiaonuo.vip]
*
* SnowyAPACHE 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);
}
}
}

View File

@ -31,7 +31,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; 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.entity.SysOrg;
import vip.xiaonuo.sys.modular.org.enums.SysOrgCategoryEnum; import vip.xiaonuo.sys.modular.org.enums.SysOrgCategoryEnum;
import vip.xiaonuo.sys.modular.org.mapper.SysOrgMapper; 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"); return TreeUtil.build(treeNodeList, "0");
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void add(SysOrgAddParam sysOrgAddParam) { public void add(SysOrgAddParam sysOrgAddParam) {
SysOrgCategoryEnum.validate(sysOrgAddParam.getCategory()); SysOrgCategoryEnum.validate(sysOrgAddParam.getCategory());
@ -112,8 +115,12 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
} }
sysOrg.setCode(RandomUtil.randomString(10)); sysOrg.setCode(RandomUtil.randomString(10));
this.save(sysOrg); this.save(sysOrg);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(sysOrg));
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void edit(SysOrgEditParam sysOrgEditParam) { public void edit(SysOrgEditParam sysOrgEditParam) {
SysOrgCategoryEnum.validate(sysOrgEditParam.getCategory()); 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()); throw new CommonException("不可选择上级组织:{}", this.getById(originDataList, sysOrg.getParentId()).getName());
} }
this.updateById(sysOrg); this.updateById(sysOrg);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(sysOrg));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -173,6 +183,9 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
} }
// 执行删除 // 执行删除
this.removeByIds(toDeleteOrgIdList); this.removeByIds(toDeleteOrgIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.ORG.getValue(), toDeleteOrgIdList);
} }
} }

View File

@ -31,7 +31,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; 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.entity.SysOrg;
import vip.xiaonuo.sys.modular.org.service.SysOrgService; import vip.xiaonuo.sys.modular.org.service.SysOrgService;
import vip.xiaonuo.sys.modular.position.entity.SysPosition; 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); return this.page(CommonPageRequest.defaultPage(), queryWrapper);
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void add(SysPositionAddParam sysPositionAddParam) { public void add(SysPositionAddParam sysPositionAddParam) {
SysPositionCategoryEnum.validate(sysPositionAddParam.getCategory()); SysPositionCategoryEnum.validate(sysPositionAddParam.getCategory());
@ -97,8 +100,12 @@ public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPo
} }
sysPosition.setCode(RandomUtil.randomString(10)); sysPosition.setCode(RandomUtil.randomString(10));
this.save(sysPosition); this.save(sysPosition);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(sysPosition));
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void edit(SysPositionEditParam sysPositionEditParam) { public void edit(SysPositionEditParam sysPositionEditParam) {
SysPositionCategoryEnum.validate(sysPositionEditParam.getCategory()); SysPositionCategoryEnum.validate(sysPositionEditParam.getCategory());
@ -110,6 +117,9 @@ public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPo
throw new CommonException("同组织下存在重复的职位,名称为:{}", sysPosition.getName()); throw new CommonException("同组织下存在重复的职位,名称为:{}", sysPosition.getName());
} }
this.updateById(sysPosition); this.updateById(sysPosition);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.POSITION.getValue(), JSONUtil.createArray().put(sysPosition));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -136,6 +146,9 @@ public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPo
} }
// 执行删除 // 执行删除
this.removeByIds(positionIdList); this.removeByIds(positionIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.POSITION.getValue(), positionIdList);
} }
} }

View File

@ -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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; 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.entity.SysRelation;
import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum; import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum;
import vip.xiaonuo.sys.modular.relation.service.SysRelationService; 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); return this.page(CommonPageRequest.defaultPage(), queryWrapper);
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void add(SysButtonAddParam sysButtonAddParam) { public void add(SysButtonAddParam sysButtonAddParam) {
SysButton sysButton = BeanUtil.toBean(sysButtonAddParam, SysButton.class); SysButton sysButton = BeanUtil.toBean(sysButtonAddParam, SysButton.class);
@ -94,6 +98,9 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
} }
sysButton.setCategory(SysResourceCategoryEnum.BUTTON.getValue()); sysButton.setCategory(SysResourceCategoryEnum.BUTTON.getValue());
this.save(sysButton); this.save(sysButton);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysButton));
} }
@Override @Override
@ -111,6 +118,7 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
}); });
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void edit(SysButtonEditParam sysButtonEditParam) { public void edit(SysButtonEditParam sysButtonEditParam) {
SysButton sysButton = this.queryEntity(sysButtonEditParam.getId()); SysButton sysButton = this.queryEntity(sysButtonEditParam.getId());
@ -123,6 +131,9 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
throw new CommonException("存在重复的按钮,编码为:{}", sysButton.getCode()); throw new CommonException("存在重复的按钮,编码为:{}", sysButton.getCode());
} }
this.updateById(sysButton); this.updateById(sysButton);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysButton));
} }
@Override @Override
@ -152,6 +163,9 @@ public class SysButtonServiceImpl extends ServiceImpl<SysButtonMapper, SysButton
}); });
// 执行删除 // 执行删除
this.removeByIds(buttonIdList); this.removeByIds(buttonIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.RESOURCE.getValue(), buttonIdList);
} }
} }
} }

View File

@ -31,7 +31,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; 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.entity.SysRelation;
import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum; import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum;
import vip.xiaonuo.sys.modular.relation.service.SysRelationService; 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"); return TreeUtil.build(treeNodeList, "0");
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void add(SysMenuAddParam sysMenuAddParam) { public void add(SysMenuAddParam sysMenuAddParam) {
checkParam(sysMenuAddParam); checkParam(sysMenuAddParam);
@ -124,6 +127,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
} }
sysMenu.setCategory(SysResourceCategoryEnum.MENU.getValue()); sysMenu.setCategory(SysResourceCategoryEnum.MENU.getValue());
this.save(sysMenu); this.save(sysMenu);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysMenu));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -185,6 +191,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void edit(SysMenuEditParam sysMenuEditParam) { public void edit(SysMenuEditParam sysMenuEditParam) {
SysMenu sysMenu = this.queryEntity(sysMenuEditParam.getId()); SysMenu sysMenu = this.queryEntity(sysMenuEditParam.getId());
@ -213,6 +220,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
} }
} }
this.updateById(sysMenu); this.updateById(sysMenu);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysMenu));
} }
@Override @Override
@ -266,6 +276,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
.eq(SysRelation::getCategory, SysRelationCategoryEnum.SYS_ROLE_HAS_RESOURCE.getValue())); .eq(SysRelation::getCategory, SysRelationCategoryEnum.SYS_ROLE_HAS_RESOURCE.getValue()));
// 执行删除 // 执行删除
this.removeByIds(toDeleteMenuIdList); this.removeByIds(toDeleteMenuIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.RESOURCE.getValue(), toDeleteMenuIdList);
} }
} }
} }

View File

@ -18,16 +18,20 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; 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.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;
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 org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.common.page.CommonPageRequest;
import vip.xiaonuo.sys.core.enums.SysBuildInEnum; 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.entity.SysRelation;
import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum; import vip.xiaonuo.sys.modular.relation.enums.SysRelationCategoryEnum;
import vip.xiaonuo.sys.modular.relation.service.SysRelationService; 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); return this.page(CommonPageRequest.defaultPage(), queryWrapper);
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void add(SysModuleAddParam sysModuleAddParam) { public void add(SysModuleAddParam sysModuleAddParam) {
SysModule sysModule = BeanUtil.toBean(sysModuleAddParam, SysModule.class); SysModule sysModule = BeanUtil.toBean(sysModuleAddParam, SysModule.class);
@ -89,8 +94,12 @@ public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule
sysModule.setCode(RandomUtil.randomString(10)); sysModule.setCode(RandomUtil.randomString(10));
sysModule.setCategory(SysResourceCategoryEnum.MODULE.getValue()); sysModule.setCategory(SysResourceCategoryEnum.MODULE.getValue());
this.save(sysModule); this.save(sysModule);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysModule));
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void edit(SysModuleEditParam sysModuleEditParam) { public void edit(SysModuleEditParam sysModuleEditParam) {
SysModule sysModule = this.queryEntity(sysModuleEditParam.getId()); SysModule sysModule = this.queryEntity(sysModuleEditParam.getId());
@ -102,6 +111,9 @@ public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule
throw new CommonException("存在重复的模块,名称为:{}", sysModule.getTitle()); throw new CommonException("存在重复的模块,名称为:{}", sysModule.getTitle());
} }
this.updateById(sysModule); this.updateById(sysModule);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysModule));
} }
@Override @Override
@ -130,6 +142,9 @@ public class SysModuleServiceImpl extends ServiceImpl<SysModuleMapper, SysModule
.eq(SysRelation::getCategory, SysRelationCategoryEnum.SYS_ROLE_HAS_RESOURCE.getValue())); .eq(SysRelation::getCategory, SysRelationCategoryEnum.SYS_ROLE_HAS_RESOURCE.getValue()));
// 执行删除 // 执行删除
this.removeByIds(toDeleteMenuIdList); this.removeByIds(toDeleteMenuIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.RESOURCE.getValue(), toDeleteMenuIdList);
} }
} }
} }

View File

@ -17,15 +17,19 @@ import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; 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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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 org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.common.page.CommonPageRequest;
import vip.xiaonuo.sys.core.enums.SysBuildInEnum; 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.entity.SysSpa;
import vip.xiaonuo.sys.modular.resource.enums.SysResourceCategoryEnum; import vip.xiaonuo.sys.modular.resource.enums.SysResourceCategoryEnum;
import vip.xiaonuo.sys.modular.resource.enums.SysResourceMenuTypeEnum; 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); return this.page(CommonPageRequest.defaultPage(), queryWrapper);
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void add(SysSpaAddParam sysSpaAddParam) { public void add(SysSpaAddParam sysSpaAddParam) {
checkParam(sysSpaAddParam); checkParam(sysSpaAddParam);
@ -77,6 +82,9 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
sysSpa.setCode(RandomUtil.randomString(10)); sysSpa.setCode(RandomUtil.randomString(10));
sysSpa.setCategory(SysResourceCategoryEnum.SPA.getValue()); sysSpa.setCategory(SysResourceCategoryEnum.SPA.getValue());
this.save(sysSpa); this.save(sysSpa);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysSpa));
} }
@SuppressWarnings("all") @SuppressWarnings("all")
@ -99,6 +107,7 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
} }
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void edit(SysSpaEditParam sysSpaEditParam) { public void edit(SysSpaEditParam sysSpaEditParam) {
SysSpa sysSpa = this.queryEntity(sysSpaEditParam.getId()); SysSpa sysSpa = this.queryEntity(sysSpaEditParam.getId());
@ -111,6 +120,9 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
throw new CommonException("存在重复的单页面,名称为:{}", sysSpa.getTitle()); throw new CommonException("存在重复的单页面,名称为:{}", sysSpa.getTitle());
} }
this.updateById(sysSpa); this.updateById(sysSpa);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.RESOURCE.getValue(), JSONUtil.createArray().put(sysSpa));
} }
@SuppressWarnings("all") @SuppressWarnings("all")
@ -144,6 +156,9 @@ public class SysSpaServiceImpl extends ServiceImpl<SysSpaMapper, SysSpa> impleme
} }
// 删除 // 删除
this.removeByIds(sysSpaIdList); this.removeByIds(sysSpaIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.RESOURCE.getValue(), sysSpaIdList);
} }
} }

View File

@ -37,9 +37,11 @@ import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.common.page.CommonPageRequest;
import vip.xiaonuo.mobile.api.MobileMenuApi; import vip.xiaonuo.mobile.api.MobileMenuApi;
import vip.xiaonuo.sys.core.enums.SysBuildInEnum; 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.entity.SysOrg;
import vip.xiaonuo.sys.modular.org.service.SysOrgService; import vip.xiaonuo.sys.modular.org.service.SysOrgService;
import vip.xiaonuo.sys.modular.relation.entity.SysRelation; 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); return this.page(CommonPageRequest.defaultPage(), queryWrapper);
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void add(SysRoleAddParam sysRoleAddParam) { public void add(SysRoleAddParam sysRoleAddParam) {
SysRoleCategoryEnum.validate(sysRoleAddParam.getCategory()); SysRoleCategoryEnum.validate(sysRoleAddParam.getCategory());
@ -134,8 +137,12 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
} }
sysRole.setCode(RandomUtil.randomString(10)); sysRole.setCode(RandomUtil.randomString(10));
this.save(sysRole); this.save(sysRole);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.ROLE.getValue(), JSONUtil.createArray().put(sysRole));
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void edit(SysRoleEditParam sysRoleEditParam) { public void edit(SysRoleEditParam sysRoleEditParam) {
SysRole sysRole = this.queryEntity(sysRoleEditParam.getId()); SysRole sysRole = this.queryEntity(sysRoleEditParam.getId());
@ -161,6 +168,9 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
} }
BeanUtil.copyProperties(sysRoleEditParam, sysRole); BeanUtil.copyProperties(sysRoleEditParam, sysRole);
this.updateById(sysRole); this.updateById(sysRole);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.ROLE.getValue(), JSONUtil.createArray().put(sysRole));
} }
@Transactional(rollbackFor = Exception.class) @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())); .eq(SysRelation::getCategory, SysRelationCategoryEnum.SYS_ROLE_HAS_PERMISSION.getValue()));
// 执行删除 // 执行删除
this.removeByIds(sysRoleIdList); this.removeByIds(sysRoleIdList);
// 发布删除事件
CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.ROLE.getValue(), sysRoleIdList);
} }
} }

View File

@ -50,6 +50,7 @@ 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.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.common.page.CommonPageRequest;
import vip.xiaonuo.common.util.*; import vip.xiaonuo.common.util.*;
import vip.xiaonuo.dev.api.DevConfigApi; 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.MobileButtonApi;
import vip.xiaonuo.mobile.api.MobileMenuApi; import vip.xiaonuo.mobile.api.MobileMenuApi;
import vip.xiaonuo.sys.core.enums.SysBuildInEnum; 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.entity.SysOrg;
import vip.xiaonuo.sys.modular.org.service.SysOrgService; import vip.xiaonuo.sys.modular.org.service.SysOrgService;
import vip.xiaonuo.sys.modular.position.entity.SysPosition; 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()); sysUser.setUserStatus(SysUserStatusEnum.ENABLE.getValue());
this.save(sysUser); this.save(sysUser);
// 发布增加事件
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(sysUser));
} }
private void checkParam(SysUserAddParam sysUserAddParam) { private void checkParam(SysUserAddParam sysUserAddParam) {
@ -266,6 +271,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
} }
BeanUtil.copyProperties(sysUserEditParam, sysUser); BeanUtil.copyProperties(sysUserEditParam, sysUser);
this.updateById(sysUser); this.updateById(sysUser);
// 发布更新事件
CommonDataChangeEventCenter.doUpdateWithData(SysDataTypeEnum.USER.getValue(), JSONUtil.createArray().put(sysUser));
} }
private void checkParam(SysUserEditParam sysUserEditParam) { private void checkParam(SysUserEditParam sysUserEditParam) {
@ -306,8 +314,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
if (containsSuperAdminAccount) { if (containsSuperAdminAccount) {
throw new CommonException("不可删除系统内置超管用户"); throw new CommonException("不可删除系统内置超管用户");
} }
// 清除【将这些用户作为主管】的信息 // 清除【将这些用户作为主管】的信息
this.update(new LambdaUpdateWrapper<SysUser>().in(SysUser::getDirectorId, sysUserIdList).set(SysUser::getDirectorId, null)); this.update(new LambdaUpdateWrapper<SysUser>().in(SysUser::getDirectorId, sysUserIdList).set(SysUser::getDirectorId, null));
// 清除【将这些用户作为兼任职位的主管】的信息 // 清除【将这些用户作为兼任职位的主管】的信息
this.list(new LambdaQueryWrapper<SysUser>().isNotNull(SysUser::getPositionJson)).forEach(sysUser -> { this.list(new LambdaQueryWrapper<SysUser>().isNotNull(SysUser::getPositionJson)).forEach(sysUser -> {
List<JSONObject> handledJsonObjectList = JSONUtil.toList(JSONUtil.parseArray(sysUser.getPositionJson()), 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()) this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getId, sysUser.getId())
.set(SysUser::getPositionJson, JSONUtil.toJsonStr(handledJsonObjectList))); .set(SysUser::getPositionJson, JSONUtil.toJsonStr(handledJsonObjectList)));
}); });
// 清除【将这些用户作为主管】的机构的主管信息
sysOrgService.update(new LambdaUpdateWrapper<SysOrg>().in(SysOrg::getDirectorId, sysUserIdList).set(SysOrg::getDirectorId, null));
// 执行删除 // 执行删除
this.removeByIds(sysUserIdList); 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("验证码错误"); throw new CommonException("验证码错误");
} }
// 不一致则直接验证码错误 // 不一致则直接验证码错误
if (!validCode.equals(Convert.toStr(existValidCode))) { if (!validCode.equals(Convert.toStr(existValidCode).toLowerCase())) {
// 移除该验证码 // 移除该验证码
commonCacheOperator.remove(USER_CACHE_KEY + validCodeReqNo); commonCacheOperator.remove(USER_CACHE_KEY + validCodeReqNo);
throw new CommonException("验证码错误"); throw new CommonException("验证码错误");

View File

@ -60,11 +60,14 @@ import vip.xiaonuo.common.annotation.CommonNoRepeat;
import vip.xiaonuo.common.annotation.CommonWrapper; import vip.xiaonuo.common.annotation.CommonWrapper;
import vip.xiaonuo.common.enums.CommonDeleteFlagEnum; import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
import vip.xiaonuo.common.exception.CommonException; 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.CommonResult;
import vip.xiaonuo.common.pojo.CommonWrapperInterface; import vip.xiaonuo.common.pojo.CommonWrapperInterface;
import vip.xiaonuo.core.handler.GlobalExceptionUtil; import vip.xiaonuo.core.handler.GlobalExceptionUtil;
import vip.xiaonuo.sys.core.enums.SysBuildInEnum; import vip.xiaonuo.sys.core.enums.SysBuildInEnum;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; 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);
}
} }