From 3587eddc7584b1ae991cbb750bb5126a7a44d778 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Thu, 28 Apr 2022 13:52:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95v1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/organization/annotation/Log.java | 10 +-- .../organization/entity/LoggerContext.java | 24 +++++-- .../organization/enums/DeleteTypeEnum.java | 32 +++++++++ .../mapper/SISLog/SISLogMapper.java | 14 ++++ .../mapper/SISLog/SISLogMapper.xml | 68 +++++++++++++++++++ .../service/impl/DemoServiceImpl.java | 21 +++++- .../engine/organization/util/LogAspect.java | 54 +++++++++++---- 7 files changed, 201 insertions(+), 22 deletions(-) create mode 100644 src/com/engine/organization/enums/DeleteTypeEnum.java create mode 100644 src/com/engine/organization/mapper/SISLog/SISLogMapper.java create mode 100644 src/com/engine/organization/mapper/SISLog/SISLogMapper.xml diff --git a/src/com/engine/organization/annotation/Log.java b/src/com/engine/organization/annotation/Log.java index d11c3bcd..35b4810f 100644 --- a/src/com/engine/organization/annotation/Log.java +++ b/src/com/engine/organization/annotation/Log.java @@ -1,5 +1,7 @@ package com.engine.organization.annotation; +import com.engine.organization.enums.OperateTypeEnum; + import java.lang.annotation.*; /** @@ -15,12 +17,12 @@ import java.lang.annotation.*; public @interface Log { /** - * 操作事件 + * 操作类型 */ - String value(); + OperateTypeEnum operateType(); /** - * 字段组装描述内容 + * 操作说明 */ - String description() default ""; + String operateDesc() default ""; } diff --git a/src/com/engine/organization/entity/LoggerContext.java b/src/com/engine/organization/entity/LoggerContext.java index a0928534..1d8c3699 100644 --- a/src/com/engine/organization/entity/LoggerContext.java +++ b/src/com/engine/organization/entity/LoggerContext.java @@ -27,19 +27,35 @@ public class LoggerContext implements Serializable { //日志ID private long id; + //操作详细说明 + private String operateDesc; + //操作人 - private String operator; + private long operatorId; //操作人姓名 private String operatorName; - // '操作时间(yyyy-MM-dd HH:mm:ss)' + // 创建时间(yyyy-MM-dd HH:mm:ss) @JSONField(format="yyyy-MM-dd HH:mm:ss") - private Date operTime; + private Date createTime; + + //操作类型增删改查等 + private String operateType; + + //涉及的相关参数-转string存储 + private String paramsStr; - private Integer operateType; + //客户端Ip + private String clientIp; + // 请求方法名 + private String methodName; + //请求类名称 + private String className; + //是否删除 + private int deleteType; } diff --git a/src/com/engine/organization/enums/DeleteTypeEnum.java b/src/com/engine/organization/enums/DeleteTypeEnum.java new file mode 100644 index 00000000..92a833ba --- /dev/null +++ b/src/com/engine/organization/enums/DeleteTypeEnum.java @@ -0,0 +1,32 @@ +package com.engine.organization.enums; + +/** + * @Author weaver_cl + * @Description: TODO + * @Date 2022/4/28 + * @Version V1.0 + **/ +public enum DeleteTypeEnum { + + NOT_DELETED(0, "未删除"), + + DELETED(1, "已删除"); + + private Integer value; + + private String desc; + + DeleteTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + public Integer getValue() { + return value; + } + + public String getDesc() { + return desc; + } +} + diff --git a/src/com/engine/organization/mapper/SISLog/SISLogMapper.java b/src/com/engine/organization/mapper/SISLog/SISLogMapper.java new file mode 100644 index 00000000..4999c0d4 --- /dev/null +++ b/src/com/engine/organization/mapper/SISLog/SISLogMapper.java @@ -0,0 +1,14 @@ +package com.engine.organization.mapper.SISLog; + +import com.engine.organization.entity.LoggerContext; + +/** + * @Author weaver_cl + * @Description: TODO + * @Date 2022/4/28 + * @Version V1.0 + **/ +public interface SISLogMapper { + + void insert(LoggerContext loggerContext); +} diff --git a/src/com/engine/organization/mapper/SISLog/SISLogMapper.xml b/src/com/engine/organization/mapper/SISLog/SISLogMapper.xml new file mode 100644 index 00000000..f9063cde --- /dev/null +++ b/src/com/engine/organization/mapper/SISLog/SISLogMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + t.id + , t.operate_desc + , t.operator_id + , t.operator_name + , t.create_time + , t.operate_type + , t.params_str + , t.client_ip + , t.method_name + , t.class_name + , t.delete_type + + + + + INSERT INTO hr_log + + operate_desc, + operator_id, + operator_name, + create_time, + operate_type, + params_str, + client_ip, + method_name, + class_name, + delete_type + + + #{operateDesc}, + #{operatorId}, + #{operatorName}, + #{createTime}, + #{operateType}, + #{paramsStr}, + #{clientIp}, + #{methodName}, + #{className}, + #{deleteType} + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/organization/service/impl/DemoServiceImpl.java b/src/com/engine/organization/service/impl/DemoServiceImpl.java index 2fb0856c..6829bdcf 100644 --- a/src/com/engine/organization/service/impl/DemoServiceImpl.java +++ b/src/com/engine/organization/service/impl/DemoServiceImpl.java @@ -1,12 +1,18 @@ package com.engine.organization.service.impl; import com.engine.core.impl.Service; +import com.engine.organization.annotation.Log; +import com.engine.organization.entity.LoggerContext; import com.engine.organization.entity.po.Demo; +import com.engine.organization.enums.OperateTypeEnum; import com.engine.organization.mapper.DemoMapper; import com.engine.organization.service.DemoService; +import com.engine.organization.util.HrmI18nUtil; +import com.engine.organization.util.LogAspect; import com.engine.organization.util.OrganizationAssert; import com.engine.organization.util.db.MapperProxyFactory; +import java.lang.reflect.Method; import java.util.List; /** @@ -17,10 +23,21 @@ import java.util.List; **/ public class DemoServiceImpl extends Service implements DemoService { + + @Override + @Log(operateType = OperateTypeEnum.ADD,operateDesc = "测试自定义日志") public List list(String name) { - OrganizationAssert.notNull(name,"参数不能为空"); - return MapperProxyFactory.getProxy(DemoMapper.class).listAll(); + OrganizationAssert.notNull(name,HrmI18nUtil.getI18nLabel(34721,"参数不能为空") ); + List demos = MapperProxyFactory.getProxy(DemoMapper.class).listAll(); + + //操作日志记录 + Method method = new Object(){}.getClass().getEnclosingMethod(); + LoggerContext loggerContext = LoggerContext.builder().operatorId(user.getUID()).operatorName(user.getLastname()).build(); + LogAspect logAspect = new LogAspect(DemoServiceImpl.class,method,loggerContext); + logAspect.start(); + + return demos; } } diff --git a/src/com/engine/organization/util/LogAspect.java b/src/com/engine/organization/util/LogAspect.java index 9d982752..8962dcb6 100644 --- a/src/com/engine/organization/util/LogAspect.java +++ b/src/com/engine/organization/util/LogAspect.java @@ -1,40 +1,70 @@ package com.engine.organization.util; import com.engine.organization.annotation.Log; +import com.engine.organization.entity.LoggerContext; +import com.engine.organization.enums.DeleteTypeEnum; +import com.engine.organization.mapper.SISLog.SISLogMapper; +import com.engine.organization.util.db.MapperProxyFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.Arrays; +import java.util.Date; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * @Author weaver_cl - * @Description: TODO + * @Description: TODO 日志切面操作 * @Date 2022/4/27 * @Version V1.0 **/ -public class LogAspect { +public class LogAspect { Class clazz; Method method; - public LogAspect(Class clazz,Method method) { + LoggerContext loggerContext; + + private static final Logger logger = LoggerFactory.getLogger(LogAspect.class); + + + public LogAspect(Class clazz,Method method,LoggerContext loggerContext) { this.clazz = clazz; this.method = method; + this.loggerContext = loggerContext; } public void start() { try { - boolean f = method.isAnnotationPresent(Log.class); + //线程池 + ExecutorService taskExecutor = Executors.newCachedThreadPool(); + taskExecutor.execute(() -> { + boolean f = method.isAnnotationPresent(Log.class); + if (f) { + Log annotation = method.getAnnotation(Log.class); + Parameter[] parameters = method.getParameters(); + String value = annotation.operateType().getValue(); + String operateDesc = annotation.operateDesc(); + loggerContext.setOperateDesc(operateDesc); + loggerContext.setCreateTime(new Date()); + loggerContext.setOperateType(value); + loggerContext.setParamsStr(Arrays.toString(parameters)); + loggerContext.setClientIp("127.0.0.1"); + loggerContext.setMethodName(method.getName()); + loggerContext.setClassName(clazz.getName()); + loggerContext.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + MapperProxyFactory.getProxy(SISLogMapper.class).insert(loggerContext); + } + }); - if (f) { - Log annotation = method.getAnnotation(Log.class); - String value = annotation.value(); - String description = annotation.description(); - } - - Method[] methods = clazz.getMethods(); } catch (Exception e) { - + // 记录本地异常日志 + logger.error("后置通知异常:异常信息:", e.getMessage()); } } }