This commit is contained in:
=
2025-08-15 11:37:31 +08:00
parent d2506c3985
commit 0450c6343e
8 changed files with 235 additions and 10 deletions
@@ -0,0 +1,17 @@
package io.v.nutz.base.event.user;
import io.v.nutz.base.event.user.SysCommonDataChangeType;
public interface SysCommonDataChange {
/**
* 系统通用数据变更
*
* @param changeType 变更类型
* @param tClass 数据类型 例如user、unit...............
* @param bizId 业务ID
*/
void exec(SysCommonDataChangeType changeType, Class<?> tClass, String bizId);
}
@@ -0,0 +1,30 @@
package io.v.nutz.base.event.user;
import io.v.nutz.base.event.user.SysCommonDataChange;
import io.v.nutz.base.event.user.SysCommonDataChangeType;
import org.nutz.mvc.Mvcs;
/**
* @author zhf
* @date 2025/8/14 17:23
* @description
*/
public class SysCommonDataChangeCenter {
public static void publish(SysCommonDataChangeType changeType, Class<?> tClass, String bizId){
String[] names = Mvcs.getIoc().getNamesByType(SysCommonDataChange.class);
for (String listener : names) {
SysCommonDataChange listenerBean = Mvcs.getIoc().get(SysCommonDataChange.class, listener);
listenerBean.exec(changeType, tClass, bizId);
// 是否在事务中
// boolean transactionNone = Trans.isTransactionNone();
// if(transactionNone){
//
// }else{
// ThreadUtil.execAsync(() ->);
// }
}
}
}
@@ -0,0 +1,11 @@
package io.v.nutz.base.event.user;
/**
* 数据变更类型
*/
public enum SysCommonDataChangeType {
INSERT(),
UPDATE(),
DELETE()
}
@@ -6,6 +6,8 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.event.user.SysCommonDataChangeCenter;
import io.v.nutz.base.event.user.SysCommonDataChangeType;
import io.v.nutz.base.event.user.UserChangeMsg;
import io.v.nutz.base.event.user.UserChangePublisher;
import io.v.nutz.base.page.Pagination;
@@ -20,6 +22,7 @@ import io.v.nutz.web.commons.utils.ShiroUtil;
import lombok.Data;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
@@ -27,6 +30,7 @@ import org.nutz.dao.entity.Record;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
@@ -230,9 +234,8 @@ public class SysUnionMangeCon {
public Object doAddUnion(Sys_union union) {
try {
sysUnionService.insert(union);
// flushDict();
// 通知系统工会发生变更
SysCommonDataChangeCenter.publish(SysCommonDataChangeType.UPDATE, Sys_union.class, union.getId());
return Result.success();
} catch (Exception e) {
log.error(e);
@@ -267,6 +270,9 @@ public class SysUnionMangeCon {
try {
sysUnionService.update(union);
// 通知系统工会发生变更
SysCommonDataChangeCenter.publish(SysCommonDataChangeType.UPDATE, Sys_union.class, union.getId());
// flushDict();
return Result.success();
@@ -275,7 +281,6 @@ public class SysUnionMangeCon {
return Result.error();
}
}
private void flushDict() {
sysDictService.clear(Cnd.where("parentId", "=", ViCommonCon.DICT_UNION_ID));
List<Sys_union> unions = sysUnionService.query();
@@ -761,11 +766,20 @@ public class SysUnionMangeCon {
* @return
*/
@At
@Aop(TransAop.READ_COMMITTED)
public Object doEditZcdw(String unionid, String unitids) {
try {
List<Sys_unit> oldUnitList = sysUnitService.query(Cnd.where("unionid", "=", unionid));
sysUnitService.execute(Sqls.create("UPDATE sys_unit set unionid = null WHERE unionid=@id").setParam("id", unionid));
for (String id : Json.fromJsonAsList(String.class, unitids)) {
sysUnitService.update(Chain.make("unionid", unionid), Cnd.where("id", "=", id));
SysCommonDataChangeCenter.publish(SysCommonDataChangeType.UPDATE, Sys_unit.class, id);
}
// 排除出去的单位
List<Sys_unit> deleteUnits = oldUnitList.stream().filter(v -> !unitids.contains(v.getId())).collect(Collectors.toList());
for (Sys_unit deleteUnit : deleteUnits) {
SysCommonDataChangeCenter.publish(SysCommonDataChangeType.UPDATE, Sys_unit.class, deleteUnit.getId());
}
return Result.success();
} catch (Exception e) {
@@ -2,6 +2,8 @@ package io.v.nutz.sys.controllers.platform.sys;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.annontation.ViReturn;
import io.v.nutz.base.event.user.SysCommonDataChangeCenter;
import io.v.nutz.base.event.user.SysCommonDataChangeType;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.dao.CndPlus;
import io.v.nutz.base.query.PageForm;
@@ -134,11 +136,14 @@ public class SysUnitMangeController {
sysUnitService.insert(sys_unit);
//添加承办单位
ProposalUndertake proposalUndertake = new ProposalUndertake();
proposalUndertake.setIsEnable(true);
proposalUndertake.setUnitName(sys_unit.getName());
proposalUndertake.setUnitCode(sys_unit.getUnitcode());
dao.insert(proposalUndertake);
// ProposalUndertake proposalUndertake = new ProposalUndertake();
// proposalUndertake.setIsEnable(true);
// proposalUndertake.setUnitName(sys_unit.getName());
// proposalUndertake.setUnitCode(sys_unit.getUnitcode());
// dao.insert(proposalUndertake);
// 通知系统单位发生变更
SysCommonDataChangeCenter.publish(SysCommonDataChangeType.INSERT, Sys_unit.class, sys_unit.getId());
return null;
}
@@ -156,7 +161,11 @@ public class SysUnitMangeController {
sysUnitService.update(sys_unit);
//更新承办单位
dao.update(ProposalUndertake.class, Chain.make("unitName", sys_unit.getName()), Cnd.where("unitCode", "=", sys_unit.getUnitcode()));
// dao.update(ProposalUndertake.class, Chain.make("unitName", sys_unit.getName()), Cnd.where("unitCode", "=", sys_unit.getUnitcode()));
// 通知系统单位发生变更
SysCommonDataChangeCenter.publish(SysCommonDataChangeType.UPDATE, Sys_unit.class, sys_unit.getId());
return null;
}
@@ -0,0 +1,50 @@
package io.v.nutz.zhgh.activity.listener;
import cn.hutool.core.bean.BeanUtil;
import io.v.nutz.base.event.user.SysCommonDataChange;
import io.v.nutz.base.event.user.SysCommonDataChangeType;
import io.v.nutz.base.event.user.SysCommonDataChange;
import io.v.nutz.sys.models.Sys_union;
import io.v.nutz.zhgh.activity.models.ActivityBasicUnion;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @author zhf
* @date 2025/8/15 08:46
* @description
*/
@IocBean
public class SysActivityUnionListener implements SysCommonDataChange {
@Inject
private Dao dao;
@Override
public void exec(SysCommonDataChangeType changeType, Class<?> sysUnionClass, String bizId) {
if (sysUnionClass.getSimpleName().equals(Sys_union.class.getSimpleName())) {
switch (changeType) {
case INSERT -> {
Sys_union sys_union = dao.fetch(Sys_union.class, bizId);
ActivityBasicUnion basicUnion = BeanUtil.copyProperties(sys_union, ActivityBasicUnion.class);
dao.insert(basicUnion);
}
case UPDATE -> {
Sys_union sys_union = dao.fetch(Sys_union.class, bizId);
ActivityBasicUnion basicUnion = dao.fetch(ActivityBasicUnion.class, Cnd.where("id", "=", sys_union.getId()));
sys_union.setEnable(true);
BeanUtil.copyProperties(sys_union, basicUnion);
dao.update(basicUnion);
}
case DELETE -> {
dao.clear(ActivityBasicUnion.class, Cnd.where("id", "=", bizId));
}
default -> {
}
}
}
}
}
@@ -0,0 +1,47 @@
package io.v.nutz.zhgh.activity.listener;
import cn.hutool.core.bean.BeanUtil;
import io.v.nutz.base.event.user.SysCommonDataChange;
import io.v.nutz.base.event.user.SysCommonDataChangeType;
import io.v.nutz.sys.models.Sys_unit;
import io.v.nutz.zhgh.activity.models.ActivityBasicUnit;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @author zhf
* @date 2025/8/14 17:30
* @description
*/
@IocBean
public class SysActivityUnitListener implements SysCommonDataChange {
@Inject
private Dao dao;
@Override
public void exec(SysCommonDataChangeType changeType, Class<?> sysUnitClass, String bizId) {
if (sysUnitClass.getSimpleName().equals(Sys_unit.class.getSimpleName())) {
switch (changeType) {
case INSERT -> {
Sys_unit sys_unit = dao.fetch(Sys_unit.class, bizId);
ActivityBasicUnit basicUnit = BeanUtil.copyProperties(sys_unit, ActivityBasicUnit.class);
dao.insert(basicUnit);
}
case UPDATE -> {
Sys_unit sys_unit = dao.fetch(Sys_unit.class, bizId);
ActivityBasicUnit basicUnit = dao.fetch(ActivityBasicUnit.class, Cnd.where("id", "=", sys_unit.getId()));
BeanUtil.copyProperties(sys_unit, basicUnit, "id");
dao.update(basicUnit);
}
case DELETE -> {
dao.clear(ActivityBasicUnit.class, Cnd.where("id", "=", bizId));
}
default -> {
}
}
}
}
}
@@ -0,0 +1,47 @@
package io.v.nutz.zhgh.proposal.listener;
import cn.hutool.core.bean.BeanUtil;
import io.v.nutz.base.event.user.SysCommonDataChange;
import io.v.nutz.base.event.user.SysCommonDataChangeType;
import io.v.nutz.sys.models.Sys_unit;
import io.v.nutz.zhgh.proposal.models.ProposalUndertake;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
/**
* @author zhf
* @date 2025/8/14 17:30
* @description
*/
@IocBean
public class ProposalUnderTakeListener implements SysCommonDataChange {
@Inject
private Dao dao;
@Override
public void exec(SysCommonDataChangeType changeType, Class<?> sysUnitClass, String bizId) {
if (sysUnitClass.getSimpleName().equals(Sys_unit.class.getSimpleName())) {
switch (changeType) {
case INSERT -> {
Sys_unit sys_unit = dao.fetch(Sys_unit.class, bizId);
ProposalUndertake basicUnit = BeanUtil.copyProperties(sys_unit, ProposalUndertake.class);
dao.insert(basicUnit);
}
case UPDATE -> {
Sys_unit sys_unit = dao.fetch(Sys_unit.class, bizId);
ProposalUndertake undertake = dao.fetch(ProposalUndertake.class, Cnd.where("unitCode", "=", sys_unit.getUnitcode()));
undertake.setUnitName(sys_unit.getName());
dao.updateIgnoreNull(undertake);
}
case DELETE -> {
dao.clear(ProposalUndertake.class, Cnd.where("id", "=", bizId));
}
default -> {
}
}
}
}
}