diff --git a/src/main/java/io/v/nutz/base/event/user/SysCommonDataChange.java b/src/main/java/io/v/nutz/base/event/user/SysCommonDataChange.java new file mode 100644 index 0000000..efcd8e8 --- /dev/null +++ b/src/main/java/io/v/nutz/base/event/user/SysCommonDataChange.java @@ -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); + +} diff --git a/src/main/java/io/v/nutz/base/event/user/SysCommonDataChangeCenter.java b/src/main/java/io/v/nutz/base/event/user/SysCommonDataChangeCenter.java new file mode 100644 index 0000000..3e9ad2c --- /dev/null +++ b/src/main/java/io/v/nutz/base/event/user/SysCommonDataChangeCenter.java @@ -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(() ->); +// } + } + } + + +} diff --git a/src/main/java/io/v/nutz/base/event/user/SysCommonDataChangeType.java b/src/main/java/io/v/nutz/base/event/user/SysCommonDataChangeType.java new file mode 100644 index 0000000..48f9881 --- /dev/null +++ b/src/main/java/io/v/nutz/base/event/user/SysCommonDataChangeType.java @@ -0,0 +1,11 @@ +package io.v.nutz.base.event.user; + +/** + * 数据变更类型 + */ +public enum SysCommonDataChangeType { + + INSERT(), + UPDATE(), + DELETE() +} diff --git a/src/main/java/io/v/nutz/sys/controllers/platform/sys/SysUnionMangeCon.java b/src/main/java/io/v/nutz/sys/controllers/platform/sys/SysUnionMangeCon.java index 214ac50..8b9c8c7 100644 --- a/src/main/java/io/v/nutz/sys/controllers/platform/sys/SysUnionMangeCon.java +++ b/src/main/java/io/v/nutz/sys/controllers/platform/sys/SysUnionMangeCon.java @@ -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 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 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 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) { diff --git a/src/main/java/io/v/nutz/sys/controllers/platform/sys/SysUnitMangeController.java b/src/main/java/io/v/nutz/sys/controllers/platform/sys/SysUnitMangeController.java index 5a2d4a1..c29d5d5 100644 --- a/src/main/java/io/v/nutz/sys/controllers/platform/sys/SysUnitMangeController.java +++ b/src/main/java/io/v/nutz/sys/controllers/platform/sys/SysUnitMangeController.java @@ -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; } diff --git a/src/main/java/io/v/nutz/zhgh/activity/listener/SysActivityUnionListener.java b/src/main/java/io/v/nutz/zhgh/activity/listener/SysActivityUnionListener.java new file mode 100644 index 0000000..3417f02 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/activity/listener/SysActivityUnionListener.java @@ -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 -> { + } + } + } + } +} diff --git a/src/main/java/io/v/nutz/zhgh/activity/listener/SysActivityUnitListener.java b/src/main/java/io/v/nutz/zhgh/activity/listener/SysActivityUnitListener.java new file mode 100644 index 0000000..23b65c7 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/activity/listener/SysActivityUnitListener.java @@ -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 -> { + } + } + } + } +} diff --git a/src/main/java/io/v/nutz/zhgh/proposal/listener/ProposalUnderTakeListener.java b/src/main/java/io/v/nutz/zhgh/proposal/listener/ProposalUnderTakeListener.java new file mode 100644 index 0000000..d27c67e --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/proposal/listener/ProposalUnderTakeListener.java @@ -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 -> { + } + } + } + } +}