From f8e8274d4b593e56e1468bdd5d1a62b3f62464d5 Mon Sep 17 00:00:00 2001 From: FLYPHT <1035748121@qq.com> Date: Wed, 14 Sep 2022 10:24:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=E7=99=BB=E5=BD=95=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=EF=BC=88=E7=94=A8=E6=88=B7=E6=98=A0=E5=B0=84=EF=BC=8C?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=88=90=E5=8A=9F=E4=B9=8B=E5=90=8E=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smtweb/system/bpm/web/login/AuthService.java | 10 ++ .../smtweb/system/bpm/web/login/LoginHelper.java | 4 +- .../system/bpm/web/login/LoginSuccessParam.java | 20 +++ .../cc/smtweb/system/bpm/web/login/LoginVO.java | 3 + .../system/bpm/web/login/MappingUserParam.java | 19 +++ .../system/bpm/web/login/MappingUserRet.java | 21 +++ .../cc/smtweb/framework/core/common/SwConsts.java | 10 +- .../core/container/base/IListenerIntf.java | 16 ++ .../framework/core/container/base/SwParameter.java | 40 +++++ .../framework/core/container/base/SwReturn.java | 166 +++++++++++++++++++++ .../core/container/factory/ListenerFactory.java | 113 ++++++++++++++ 11 files changed, 418 insertions(+), 4 deletions(-) create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginSuccessParam.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/MappingUserParam.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/MappingUserRet.java create mode 100644 smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/IListenerIntf.java create mode 100644 smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/SwParameter.java create mode 100644 smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/SwReturn.java create mode 100644 smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/factory/ListenerFactory.java diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/AuthService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/AuthService.java index b44562c..7496e4a 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/AuthService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/AuthService.java @@ -5,7 +5,10 @@ import cc.smtweb.framework.core.annotation.SwParam; import cc.smtweb.framework.core.annotation.SwService; import cc.smtweb.framework.core.cache.CacheManager; import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwConsts; import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.container.base.SwParameter; +import cc.smtweb.framework.core.container.factory.ListenerFactory; import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.exception.BizException; import cc.smtweb.framework.core.session.SessionManager; @@ -91,6 +94,13 @@ public class AuthService { data.put("token", loginAckVO.getToken()); data.put("isOk", true); data.put("msg", ""); + // 发布登录成功事件 + SwParameter parameter = new SwParameter(); + LoginSuccessParam loginSuccessParam = new LoginSuccessParam(); + loginSuccessParam.setUs(userSession); + loginSuccessParam.setExtra(loginPO.getExtra() != null?loginPO.getExtra():new SwMap()); + parameter.setSingleParam(loginSuccessParam); + ListenerFactory.fireListenerAsyc(SwConsts.EventConst.LOGIN_SUCCESS,parameter); return R.success(data); } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginHelper.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginHelper.java index bbf3ef3..ed3a839 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginHelper.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginHelper.java @@ -23,7 +23,6 @@ import java.util.Set; * 登录辅助类 */ public class LoginHelper { - private static final String PWD_SALT = "goodpj"; public static User login(LoginVO loginPO) { @@ -31,12 +30,11 @@ public class LoginHelper { //先提取验证码 String verifyCode = RedisManager.getInstance().get(key, String.class); RedisManager.getInstance().del(key); - + MappingUserParam mappingUserEvent = new MappingUserParam(); if (StringUtils.isBlank(loginPO.getUsername())) { throw new BizException("账号不能为空"); } - if (StringUtils.isBlank(loginPO.getPassword())) { throw new BizException("密码不能为空"); } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginSuccessParam.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginSuccessParam.java new file mode 100644 index 0000000..b836114 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginSuccessParam.java @@ -0,0 +1,20 @@ +package cc.smtweb.system.bpm.web.login; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.session.UserSession; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: tanghp + * @Date: 2022-09-14 9:53 + * @Desc: 登录成功事件的参数对象 + */ +@Data +public class LoginSuccessParam implements Serializable { + // 登录的userSession + private UserSession us; + // 其他信息 + private SwMap extra; +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginVO.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginVO.java index 30fbf9e..e6211a6 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginVO.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/LoginVO.java @@ -1,5 +1,6 @@ package cc.smtweb.system.bpm.web.login; +import cc.smtweb.framework.core.common.SwMap; import lombok.Data; import java.io.Serializable; @@ -13,4 +14,6 @@ public class LoginVO implements Serializable { private String verifyCode; private String uuid; + + private SwMap extra; } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/MappingUserParam.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/MappingUserParam.java new file mode 100644 index 0000000..1ca8b30 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/MappingUserParam.java @@ -0,0 +1,19 @@ +package cc.smtweb.system.bpm.web.login; + +import cc.smtweb.framework.core.common.SwMap; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: tanghp + * @Date: 2022-09-09 16:52 + * @Desc: 用户映射事件参数对象 + */ +@Data +public class MappingUserParam implements Serializable { + // 来源 + private String source; + // 其他信息 + private SwMap extra; +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/MappingUserRet.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/MappingUserRet.java new file mode 100644 index 0000000..2763c1c --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/login/MappingUserRet.java @@ -0,0 +1,21 @@ +package cc.smtweb.system.bpm.web.login; + +import cc.smtweb.framework.core.common.SwMap; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author: tanghp + * @Date: 2022-09-09 17:32 + * @Desc: 用户映射返回 + */ +@Data +public class MappingUserRet implements Serializable { + // 用户ID + private long userId; + // 映射失败信息 + private String failMsg; + // 其他响应信息 + private SwMap extra; +} diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java index 6eeb901..e232480 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java @@ -16,7 +16,15 @@ public interface SwConsts { //是否执行定时任务 public static boolean enableJob = false; } - + //事件常量 + class EventConst { + // 登录映射 + public static final String LOGIN_MAPPING = "LOGIN_MAPPING"; + //登录成功后事件 + public static final String LOGIN_SUCCESS = "LOGIN_SUCCESS"; + //登录失败后事件 + public static final String LOGIN_FAIL = "LOGIN_FAIL"; + } //错误码 interface ErrorCode { //未登录 diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/IListenerIntf.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/IListenerIntf.java new file mode 100644 index 0000000..c9dd4cd --- /dev/null +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/IListenerIntf.java @@ -0,0 +1,16 @@ +package cc.smtweb.framework.core.container.base; + +/** + * Created by Akmm at 12-3-22 下午4:52 + * 事件监听 + */ +public interface IListenerIntf { + /** + * 监听动作 + * + * @param parameter 输入参数 + * @param reslt 返回参数 + * @throws Exception + */ + void doWork(SwParameter parameter, SwReturn result) throws Exception; +} diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/SwParameter.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/SwParameter.java new file mode 100644 index 0000000..0158681 --- /dev/null +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/SwParameter.java @@ -0,0 +1,40 @@ +package cc.smtweb.framework.core.container.base; + +/** + * Created by Akmm at 2011-1-12 9:41:41 + * 输入参数 + */ +public class SwParameter extends java.util.HashMap { + + private Object singleParam; + + public T getSingleParam() { + return (T)singleParam; + } + + public void setSingleParam(Object singleParam) { + this.singleParam = singleParam; + } + + /** + * 得到参数值 + * + * @param name 参数名 + * @param 参数类型 + * @return 参数值 + */ + @SuppressWarnings({"unchecked"}) + public T getParameter(String name) { + return (T) get(name); + } + + /** + * 设置参数值 + * + * @param name 参数名 + * @param value 参数值 + */ + public void setParameter(String name, Object value) { + put(name, value); + } +} diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/SwReturn.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/SwReturn.java new file mode 100644 index 0000000..1dbd5c1 --- /dev/null +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/base/SwReturn.java @@ -0,0 +1,166 @@ +package cc.smtweb.framework.core.container.base; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2011-1-12 9:45:04 + * 插件服务方法的返回参数 + */ +@SuppressWarnings("UnusedDeclaration") +public class SwReturn { + /** + * 是否执行成功 + */ + private boolean isSuccess; + /** + * 提示信息列表 + */ + private List messages = null; + /** + * 执行结果参数 + */ + private Map map = new HashMap<>(); + + /** + * @param isSuccess + * @param message + */ + public SwReturn(boolean isSuccess, String message) { + this.isSuccess = isSuccess; + this.addMessage(message); + } + + public SwReturn(Integer errCode, String message) { + this.isSuccess = false; + this.addMessage(message); + this.setParameter("errCode", errCode); + } + + public SwReturn(String errCode, String message) { + this.isSuccess = false; + this.addMessage(message); + this.setParameter("errCode", errCode); + } + + /** + */ + public SwReturn() { + this(true, null); + } + + /** + * 设置参数 + * + * @param name + * @param value + * @pdOid 590f34f1-b661-4a64-8dbb-b1c9a4ec931e + */ + public void setParameter(String name, Object value) { + map.put(name, value); + } + + /** + * 获取参数 + * + * @param name + * @pdOid a0df6724-734d-4c5d-b156-e96010436ee8 + */ + @SuppressWarnings({"unchecked"}) + public T getParameter(String name) { + return (T) map.get(name); + } + + public boolean containsParameter(String name) { + return map.containsKey(name); + } + + /** + * 是否执行成功 + */ + public boolean isSuccess() { + return isSuccess; + } + + /** + * @param success + * @pdOid bf4fdbfe-a134-43b7-9496-578fb61ab106 + */ + public void setSuccess(boolean success) { + isSuccess = success; + } + + /** + * 得到提示信息,字符串格式,有多个提示,则以回车符分隔 + */ + public String getMessageStr() { + if (this.messages == null) return null; + StringBuilder sb = new StringBuilder(32); + for (String s : messages) { + sb.append("\n").append(s); + } + return sb.substring(1); + } + + /** + * 得到结果参数Map + */ + public Map getMap() { + return map; + } + + /** + * 增加一条提示信息 + * + * @param msg + */ + public void addMessage(String msg) { + if (this.messages == null) + this.messages = new ArrayList<>(); + if (msg != null) this.messages.add(msg); + } + + /** + * 设置消息 + * + * @param msg + */ + public void setMessage(String msg) { + clearMessage(); + addMessage(msg); + } + + /** + * 清空所有提示信息 + */ + public void clearMessage() { + if (this.messages != null) this.messages.clear(); + } + + /** + * 得到提示信息列表 + * + * @return + */ + public List getMessages() { + return messages; + } + + /** + * 设置为执行失败,且增加错误信息 + * + * @param errmsg + */ + public void setError(String errmsg) { + this.isSuccess = false; + addMessage(errmsg); + } + public int getErrorCode() { + if (!isSuccess() && containsParameter("errCode")) { + return (Integer) getParameter("errCode"); + } + return 0; + } +} diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/factory/ListenerFactory.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/factory/ListenerFactory.java new file mode 100644 index 0000000..267c39f --- /dev/null +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/container/factory/ListenerFactory.java @@ -0,0 +1,113 @@ +package cc.smtweb.framework.core.container.factory; + +import cc.smtweb.framework.core.container.base.IListenerIntf; +import cc.smtweb.framework.core.container.base.SwParameter; +import cc.smtweb.framework.core.container.base.SwReturn; +import cc.smtweb.framework.core.systask.SysThreadPool; +import cc.smtweb.framework.core.systask.SysThreadWorker; + +import java.util.List; +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by Akmm at 12-3-22 下午4:45 + * 事件监听工厂 + */ +public class ListenerFactory { + private static Map> map; + + static { + map = new ConcurrentHashMap<>(64); + } + + /** + * 注册监听 + * + * @param event 事件名 + * @param listener 监听类 + */ + public static void reg(String event, IListenerIntf listener) { + List list = map.get(event); + if (list == null) { + synchronized (ListenerFactory.class) { + list = map.get(event); + if (list == null) { + list = new Vector<>(); + map.put(event, list); + } + } + } + list.add(listener); + } + + /** + * 取消注册监听 + * + * @param event 事件名 + * @param listener 监听类 + */ + public static void remove(String event, IListenerIntf listener) { + List list = map.get(event); + if (list != null) list.remove(listener); + } + + /** + * 取消指定事件所有监听 + * + * @param event 事件名 + */ + public static void clear(String event) { + map.remove(event); + } + + /** + * 执行监听 + * + * @param event 事件名 + * @param param 事件参数 + * @param result 监听程序的执行结果 + * @throws Exception + */ + public static void fireListener(String event, SwParameter param, SwReturn result)throws Exception{ + List list = map.get(event); + if (list == null) return; + for (IListenerIntf listener : list) { + listener.doWork(param, result); + if (!result.isSuccess()) return; + } + } + + /** + * 执行监听 + * + * @param event 事件名 + * @param param 事件参数 + * @throws Exception + */ + public static void fireListener(String event, SwParameter param) throws Exception { + SwReturn result = new SwReturn(); + fireListener(event, param, result); + if (!result.isSuccess()) throw new Exception(result.getMessageStr()); + } + /** + * 执行监听\异步执行 + * + * @param event 事件名 + * @param param 事件参数 + * @throws Exception + */ + public static void fireListenerAsyc(String event, SwParameter param){ + SysThreadPool.getInstance().addTask(new SysThreadWorker() { + @Override + public void localWork() throws Exception { + try { + fireListener(event, param); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } +}