Browse Source

数据引擎模式支持BI数据记录

gaodm 5 năm trước cách đây
mục cha
commit
ea2f956024

+ 19 - 0
common/src/main/java/com/diagbot/annotation/BiLoggerResult.java

@@ -0,0 +1,19 @@
+package com.diagbot.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Description: BI统计注解结果太大需特殊处理
+ * @author: gaodm
+ * @time: 2019/11/11 11:46
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface BiLoggerResult {
+    String value() default "";
+}

+ 49 - 0
common/src/main/java/com/diagbot/enums/BiSourceEnum.java

@@ -0,0 +1,49 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description: 产品类型
+ * @author: gaodm
+ * @time: 2018/9/14 9:15
+ */
+public enum BiSourceEnum implements KeyedNamed {
+    BI_NORMAL(1, "后台接口-无处理"),
+    BI_RESULT(2, "后台接口-结果特殊处理"),
+    FRONT(3, "前端");
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    BiSourceEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static BiSourceEnum getEnum(int key) {
+        for (BiSourceEnum item : BiSourceEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        BiSourceEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 1 - 1
common/src/main/java/com/diagbot/vo/BiRecord.java

@@ -80,7 +80,7 @@ public class BiRecord {
     private String result;
 
     /**
-     * 来源(1:后台接口;2:前端)
+     * 来源(1:后台接口-无处理;2:后台接口-结果特殊处理;3:前端)
      */
     private Integer source;
 }

+ 77 - 0
icss-service/src/main/java/com/diagbot/aop/SysLoggerExprotAspect.java

@@ -0,0 +1,77 @@
+package com.diagbot.aop;
+
+import com.diagbot.annotation.SysLoggerExport;
+import com.diagbot.entity.SysLog;
+import com.diagbot.enums.SysTypeEnum;
+import com.diagbot.rabbit.MySender;
+import com.diagbot.util.GsonUtil;
+import com.diagbot.util.HttpUtils;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.UserUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.Date;
+
+/**
+ * @Description: 日志拦截切面(Excel导出用)
+ * @author: gaodm
+ * @time: 2018/8/2 13:36
+ */
+@Aspect
+@Component
+public class SysLoggerExprotAspect {
+    @Autowired
+    private MySender mySender;
+
+    @Pointcut("@annotation(com.diagbot.annotation.SysLoggerExport)")
+    public void loggerPointCut() {
+
+    }
+
+    @Before("loggerPointCut()")
+    public void saveSysLog(JoinPoint joinPoint) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+
+        SysLog sysLog = new SysLog();
+        SysLoggerExport sysLogger = method.getAnnotation(SysLoggerExport.class);
+        if (sysLogger != null) {
+            //注解上的描述
+            sysLog.setOperation(sysLogger.value());
+        }
+        //请求的方法名
+        String className = joinPoint.getTarget().getClass().getName();
+        String methodName = signature.getName();
+        sysLog.setMethod(className + "." + methodName + "()");
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+        String params = "";
+        for (Object o : args) {
+            params += GsonUtil.toJson(o);
+            break;
+        }
+        if (!StringUtil.isEmpty(params)) {
+            sysLog.setParams(params);
+        }
+        //设置IP地址
+        sysLog.setIp(HttpUtils.getIpAddress());
+        //用户名
+        String username = UserUtils.getCurrentPrinciple();
+        if (!StringUtil.isEmpty(username)) {
+            sysLog.setUsername(username);
+        }
+        sysLog.setGmtCreate(new Date());
+        sysLog.setSysType(SysTypeEnum.DIAGBOTMAN_SERVICE.getKey());
+        //保存系统日志
+        mySender.outputLogSend(sysLog);
+    }
+
+}
+

+ 77 - 0
knowledgeman-service/src/main/java/com/diagbot/aop/SysLoggerExprotAspect.java

@@ -0,0 +1,77 @@
+package com.diagbot.aop;
+
+import com.diagbot.annotation.SysLoggerExport;
+import com.diagbot.entity.SysLog;
+import com.diagbot.enums.SysTypeEnum;
+import com.diagbot.rabbit.MySender;
+import com.diagbot.util.GsonUtil;
+import com.diagbot.util.HttpUtils;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.UserUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.Date;
+
+/**
+ * @Description: 日志拦截切面(Excel导出用)
+ * @author: gaodm
+ * @time: 2018/8/2 13:36
+ */
+@Aspect
+@Component
+public class SysLoggerExprotAspect {
+    @Autowired
+    private MySender mySender;
+
+    @Pointcut("@annotation(com.diagbot.annotation.SysLoggerExport)")
+    public void loggerPointCut() {
+
+    }
+
+    @Before("loggerPointCut()")
+    public void saveSysLog(JoinPoint joinPoint) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+
+        SysLog sysLog = new SysLog();
+        SysLoggerExport sysLogger = method.getAnnotation(SysLoggerExport.class);
+        if (sysLogger != null) {
+            //注解上的描述
+            sysLog.setOperation(sysLogger.value());
+        }
+        //请求的方法名
+        String className = joinPoint.getTarget().getClass().getName();
+        String methodName = signature.getName();
+        sysLog.setMethod(className + "." + methodName + "()");
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+        String params = "";
+        for (Object o : args) {
+            params += GsonUtil.toJson(o);
+            break;
+        }
+        if (!StringUtil.isEmpty(params)) {
+            sysLog.setParams(params);
+        }
+        //设置IP地址
+        sysLog.setIp(HttpUtils.getIpAddress());
+        //用户名
+        String username = UserUtils.getCurrentPrinciple();
+        if (!StringUtil.isEmpty(username)) {
+            sysLog.setUsername(username);
+        }
+        sysLog.setGmtCreate(new Date());
+        sysLog.setSysType(SysTypeEnum.DIAGBOTMAN_SERVICE.getKey());
+        //保存系统日志
+        mySender.outputLogSend(sysLog);
+    }
+
+}
+

+ 1 - 1
log-service/src/main/java/com/diagbot/entity/BiRecord.java

@@ -87,7 +87,7 @@ public class BiRecord implements Serializable {
     private String result;
 
     /**
-     * 来源(1:后台接口;2:前端)
+     * 来源(1:后台接口-无处理;2:后台接口-结果特殊处理;3:前端)
      */
     private Integer source;
 

+ 2 - 0
ltapi-service/src/main/java/com/diagbot/aop/BiLoggerAspect.java

@@ -1,6 +1,7 @@
 package com.diagbot.aop;
 
 import com.diagbot.annotation.BiLogger;
+import com.diagbot.enums.BiSourceEnum;
 import com.diagbot.enums.ProductTypeEnum;
 import com.diagbot.rabbit.MySender;
 import com.diagbot.util.BeanUtil;
@@ -69,6 +70,7 @@ public class BiLoggerAspect {
 
         biRecord.setGmtCreate(new Date());
         biRecord.setProductType(ProductTypeEnum.LTAPI.getKey());
+        biRecord.setSource(BiSourceEnum.BI_NORMAL.getKey());
         //保存BI日志
         mySender.outputBiLogSend(biRecord);
     }

+ 88 - 0
ltapi-service/src/main/java/com/diagbot/aop/BiLoggerResultAspect.java

@@ -0,0 +1,88 @@
+package com.diagbot.aop;
+
+import com.diagbot.annotation.BiLoggerResult;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.enums.BiSourceEnum;
+import com.diagbot.enums.ProductTypeEnum;
+import com.diagbot.rabbit.MySender;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.GsonUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.BaseBiVO;
+import com.diagbot.vo.BiRecord;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.Date;
+
+/**
+ * @Description: 日志拦截切面
+ * @author: gaodm
+ * @time: 2018/8/2 13:36
+ */
+@Aspect
+@Component
+public class BiLoggerResultAspect {
+    @Autowired
+    private MySender mySender;
+
+    @AfterReturning(value = "@annotation(com.diagbot.annotation.BiLoggerResult)", returning = "keys")
+    public void saveBiRecord(JoinPoint joinPoint, Object keys) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+
+        BiRecord biRecord = new BiRecord();
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+        String params = "";
+        for (Object o : args) {
+            if (o instanceof BaseBiVO) {
+                BaseBiVO baseBiVO = (BaseBiVO) o;
+                if (StringUtil.isBlank(baseBiVO.getHospitalCode())) {
+                    return;
+                } else {
+                    BeanUtil.copyProperties(baseBiVO, biRecord);
+                }
+            }
+            params += GsonUtil.toJson(o);
+        }
+        if (!StringUtil.isEmpty(params)) {
+            biRecord.setParams(params);
+        }
+
+        //设置功能编码
+        BiLoggerResult biLoggerResult = method.getAnnotation(BiLoggerResult.class);
+        if (biLoggerResult != null) {
+            //注解上的描述
+            biRecord.setCode(biLoggerResult.value());
+        }
+
+        //出参设置
+        String result = "";
+        if (keys instanceof RespDTO) {
+            RespDTO respDTO = (RespDTO) keys;
+            RespDTO rs = new RespDTO();
+            rs.code = respDTO.code;
+            rs.msg = respDTO.msg;
+            rs.data = new Object();
+            result = GsonUtil.toJson(rs);
+        } else {
+            result = GsonUtil.toJson(keys);
+        }
+        if (!StringUtil.isEmpty(result)) {
+            biRecord.setResult(result);
+        }
+
+        biRecord.setGmtCreate(new Date());
+        biRecord.setProductType(ProductTypeEnum.LTAPI.getKey());
+        biRecord.setSource(BiSourceEnum.BI_RESULT.getKey());
+        //保存BI日志
+        mySender.outputBiLogSend(biRecord);
+    }
+}
+

+ 2 - 2
ltapi-service/src/main/java/com/diagbot/web/ConceptDetailController.java

@@ -1,6 +1,6 @@
 package com.diagbot.web;
 
-import com.diagbot.annotation.BiLogger;
+import com.diagbot.annotation.BiLoggerResult;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.ConceptIntroduceDTO;
 import com.diagbot.dto.RespDTO;
@@ -36,7 +36,7 @@ public class ConceptDetailController {
                     "position:1-摘要,2-全文,5-药品说明书,6-不良反应,单选选填")
     @PostMapping("/getConceptDetail")
     @SysLogger("getConceptDetail")
-    @BiLogger("LTAPT0002")
+    @BiLoggerResult("LTAPT0002")
     public RespDTO<ConceptIntroduceDTO> getConceptDetail(@Valid @RequestBody ConceptIntroduceVO conceptIntroduceVO) {
         ConceptIntroduceDTO data = conceptDetailFacade.getConceptDetail(conceptIntroduceVO);
         return RespDTO.onSuc(data);