浏览代码

1、增加日志机制

liuqq 3 年之前
父节点
当前提交
8d92a9b311

+ 6 - 0
pom.xml

@@ -205,6 +205,12 @@
             <version>${aggregator.version}</version>
         </dependency>
 
+        <!--消息中心-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
+        </dependency>
+
         <!-- easypoi -->
         <dependency>
             <groupId>cn.afterturn</groupId>

+ 15 - 0
src/main/java/com/diagbot/annotation/MrqcLog.java

@@ -0,0 +1,15 @@
+package com.diagbot.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * @Description:日志记录
+ * @Author:liuqq
+ * @time: ${DATE} ${TIME}
+ **/
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface MrqcLog {
+    String value() default "";
+}

+ 81 - 0
src/main/java/com/diagbot/aop/MrqcLogAspect.java

@@ -0,0 +1,81 @@
+package com.diagbot.aop;
+
+import com.diagbot.entity.LogInfo;
+import com.diagbot.rabbit.MySender;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.FastJsonUtils;
+import com.diagbot.util.MrqcLogUtil;
+import com.diagbot.vo.data.ABasDoctorInfoVO;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.AfterThrowing;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Date;
+
+@Aspect
+@Component
+@ConditionalOnProperty(prefix = "mrqcLog", value = { "enable" }, havingValue = "true")
+@Slf4j
+public class MrqcLogAspect {
+
+    @Autowired
+    MySender mySender;
+
+    //切所有Controller
+    @Pointcut("execution(* com.diagbot.web..*.*(..)) && @annotation(com.diagbot.annotation.MrqcLog)")
+    public void pointcutController() {
+    }
+
+    @Around("pointcutController()")
+    public Object mrqcLogIntercept(ProceedingJoinPoint joinPoint) throws Throwable {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+        //获取方法参数
+        Object[] args = joinPoint.getArgs();
+        //请求的参数
+        LogInfo tanLog = MrqcLogUtil.tranLogReqAspect(joinPoint);
+        //tanLog.setBehospitalCode();
+        //tanLog.setHospitalId();
+        tanLog.setFuncName(method.getName());
+        tanLog.setReqParam(FastJsonUtils.getBeanToJson(args));
+        Date now = DateUtil.now();
+        tanLog.setGmtReq(now);
+        long start = System.currentTimeMillis();
+        tanLog.setGmtReq(DateUtil.now());
+
+        Object proceed = joinPoint.proceed(args);
+        //执行方法后获取出参
+        tanLog = MrqcLogUtil.tranLogRespAspect(proceed, tanLog, start, joinPoint);
+
+        //异步记录日志
+        mySender.outputMrqcLogSend(tanLog);
+        return proceed;
+    }
+
+    @AfterThrowing(pointcut = "pointcutController()", throwing = "ex")
+    public void mrqcLogInterceptThrow(JoinPoint joinPoint, Throwable ex) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+        LogInfo tanLog = new LogInfo();
+        Date now = DateUtil.now();
+        /*tanLog.setGmtCreate(now);
+        tanLog.setGmtModified(now);
+        tanLog.setSceneName(method.getAnnotation(CdssLog.class).value());*/
+        long start = System.currentTimeMillis();
+        tanLog.setGmtReq(DateUtil.now());
+        tanLog = MrqcLogUtil.tranLogRespAspectThrow(joinPoint, tanLog, start, ex);
+
+        //保存日志
+        mySender.outputMrqcLogSend(tanLog);
+    }
+}

+ 161 - 0
src/main/java/com/diagbot/entity/LogInfo.java

@@ -0,0 +1,161 @@
+package com.diagbot.entity;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-12-31
+ */
+public class LogInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 病历号
+     */
+    private String behospitalCode;
+
+    /**
+     * 接口方法名
+     */
+    private String funcName;
+
+    /**
+     * 入参
+     */
+    private String reqParam;
+
+    /**
+     * 回参
+     */
+    private String respParam;
+
+    /**
+     * 请求时间
+     */
+    private Date gmtReq;
+
+    /**
+     * 响应时间
+     */
+    private Date gmtResp;
+
+    private String execTime;
+
+    private String status;
+
+    private String remark;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getBehospitalCode() {
+        return behospitalCode;
+    }
+
+    public void setBehospitalCode(String behospitalCode) {
+        this.behospitalCode = behospitalCode;
+    }
+    public String getFuncName() {
+        return funcName;
+    }
+
+    public void setFuncName(String funcName) {
+        this.funcName = funcName;
+    }
+    public String getReqParam() {
+        return reqParam;
+    }
+
+    public void setReqParam(String reqParam) {
+        this.reqParam = reqParam;
+    }
+    public String getRespParam() {
+        return respParam;
+    }
+
+    public void setRespParam(String respParam) {
+        this.respParam = respParam;
+    }
+    public Date getGmtReq() {
+        return gmtReq;
+    }
+
+    public void setGmtReq(Date gmtReq) {
+        this.gmtReq = gmtReq;
+    }
+    public Date getGmtResp() {
+        return gmtResp;
+    }
+
+    public void setGmtResp(Date gmtResp) {
+        this.gmtResp = gmtResp;
+    }
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getExecTime() {
+        return execTime;
+    }
+
+    public void setExecTime(String execTime) {
+        this.execTime = execTime;
+    }
+
+    @Override
+    public String toString() {
+        return "LogInfo{" +
+            "id=" + id +
+            ", hospitalId=" + hospitalId +
+            ", behospitalCode=" + behospitalCode +
+            ", funcName=" + funcName +
+            ", reqParam=" + reqParam +
+            ", respParam=" + respParam +
+            ", gmtReq=" + gmtReq +
+            ", gmtResp=" + gmtResp +
+            ", status=" + status +
+            ", remark=" + remark +
+                ", execTime=" + execTime +
+        "}";
+    }
+}

+ 2 - 0
src/main/java/com/diagbot/facade/data/ABasDoctorInfoFacade.java

@@ -7,6 +7,7 @@ import com.diagbot.dto.data.ABasDoctorInfoDTO;
 import com.diagbot.entity.BasDoctorInfo;
 import com.diagbot.service.impl.BasDoctorInfoServiceImpl;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.MrqcLogUtil;
 import com.diagbot.util.TZDBConn;
 import com.diagbot.vo.data.ABasDoctorInfoVO;
 import com.google.common.collect.Lists;
@@ -64,6 +65,7 @@ public class ABasDoctorInfoFacade extends BasDoctorInfoServiceImpl {
                         return RespDTO.onError("请输入医院编码!");
                     }
                 }
+
                 execute(basDoctorInfoList);
 
                 if(logSwitch){

+ 8 - 0
src/main/java/com/diagbot/facade/data/LogInfoFacade.java

@@ -0,0 +1,8 @@
+package com.diagbot.facade.data;
+
+import com.diagbot.service.impl.LogInfoServiceImpl;
+import org.springframework.stereotype.Component;
+
+@Component
+public class LogInfoFacade extends LogInfoServiceImpl {
+}

+ 16 - 0
src/main/java/com/diagbot/mapper/LogInfoMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.LogInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-12-31
+ */
+public interface LogInfoMapper extends BaseMapper<LogInfo> {
+
+}

+ 23 - 0
src/main/java/com/diagbot/rabbit/MyProcessor.java

@@ -0,0 +1,23 @@
+package com.diagbot.rabbit;
+
+import org.springframework.cloud.stream.annotation.Input;
+import org.springframework.cloud.stream.annotation.Output;
+import org.springframework.messaging.MessageChannel;
+import org.springframework.messaging.SubscribableChannel;
+
+/**
+ * @Description: 自定义Stream发布和消费对象
+ * @author: gaodm
+ * @time: 2018/8/29 13:39
+ */
+public interface MyProcessor {
+
+    String INPUT_MrqcLog = "inputMrqcLog";
+    String OUTPUT_MrqcLog= "outputMrqcLog";
+
+    @Input(INPUT_MrqcLog)
+    SubscribableChannel inputMrqcLog();
+    @Output(OUTPUT_MrqcLog)
+    MessageChannel outputMrqcLog();
+
+}

+ 29 - 0
src/main/java/com/diagbot/rabbit/MyReceiver.java

@@ -0,0 +1,29 @@
+package com.diagbot.rabbit;
+
+import com.diagbot.entity.LogInfo;
+import com.diagbot.facade.data.LogInfoFacade;
+import com.diagbot.util.FastJsonUtils;
+import com.diagbot.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.stream.annotation.EnableBinding;
+import org.springframework.cloud.stream.annotation.StreamListener;
+
+/**
+ * @Description: 消费者
+ * @author: wangfeng
+ * @time: 2018/8/29 14:02
+ */
+@EnableBinding({ MyProcessor.class })
+public class MyReceiver {
+
+    @Autowired
+    private LogInfoFacade logInfoFacade;
+
+    @StreamListener(MyProcessor.INPUT_MrqcLog)
+    public void inputMrqcLog(String message) {
+        //System.out.println("Received <" + "接受到的信息" + ">" + message);
+        if (StringUtil.isNotBlank(message)) {
+            logInfoFacade.save(FastJsonUtils.getJsonToBean(message, LogInfo.class));
+        }
+    }
+}

+ 28 - 0
src/main/java/com/diagbot/rabbit/MySender.java

@@ -0,0 +1,28 @@
+package com.diagbot.rabbit;
+
+import com.diagbot.entity.LogInfo;
+import com.diagbot.util.FastJsonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.cloud.stream.annotation.EnableBinding;
+import org.springframework.integration.support.MessageBuilder;
+import org.springframework.messaging.MessageChannel;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 发布者
+ * @author: gaodm
+ * @time: 2018/8/29 13:41
+ */
+@Component
+@EnableBinding({ MyProcessor.class })
+public class MySender {
+
+    @Autowired
+    @Qualifier("outputMrqcLog")
+    MessageChannel outputMrqcLog;
+
+    public void outputMrqcLogSend(LogInfo msg) {
+        outputMrqcLog.send(MessageBuilder.withPayload(FastJsonUtils.getBeanToJson(msg)).build());
+    }
+}

+ 16 - 0
src/main/java/com/diagbot/service/LogInfoService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.LogInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-12-31
+ */
+public interface LogInfoService extends IService<LogInfo> {
+
+}

+ 20 - 0
src/main/java/com/diagbot/service/impl/LogInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.LogInfo;
+import com.diagbot.mapper.LogInfoMapper;
+import com.diagbot.service.LogInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-12-31
+ */
+@Service
+public class LogInfoServiceImpl extends ServiceImpl<LogInfoMapper, LogInfo> implements LogInfoService {
+
+}

+ 1 - 1
src/main/java/com/diagbot/task/HomePageTask.java

@@ -46,7 +46,7 @@ public class HomePageTask implements SchedulingConfigurer{
                         && task001.getIsDeleted().equals(IsDeleteEnum.N.getKey())
                         && task001.getIsUsed().equals(1)) {
                     log.info("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
-                    aHomePageFacade.executeHomePage();
+                    //aHomePageFacade.executeHomePage();
                 }
             }
         }, new Trigger() {

+ 1 - 1
src/main/java/com/diagbot/task/MedicalRecordTask.java

@@ -47,7 +47,7 @@ public class MedicalRecordTask implements SchedulingConfigurer{
                         && task001.getIsDeleted().equals(IsDeleteEnum.N.getKey())
                         && task001.getIsUsed().equals(1)) {
                     log.info("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
-                    aMedicalRecordFacade.executeMrRecord();
+                    //aMedicalRecordFacade.executeMrRecord();
                 }
             }
         }, new Trigger() {

+ 218 - 0
src/main/java/com/diagbot/util/MrqcLogUtil.java

@@ -0,0 +1,218 @@
+package com.diagbot.util;
+
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.LogInfo;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.springframework.validation.BindException;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description: Cdss日志工具类
+ * @author: gaodm
+ * @time: 2021/10/20 10:30
+ */
+public class MrqcLogUtil {
+
+    private final static String CDSS_REQ = "Cdss_Req";
+    private final static String CDSS_RESP = "Cdss_Resp";
+    private final static String CDSS_LOG_SP = "→";
+
+    /**
+     * 入参设置
+     *
+     * @param joinPoint
+     */
+    public static LogInfo tranLogReqAspect(ProceedingJoinPoint joinPoint) {
+        LogInfo tranLog = new LogInfo();
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+        //请求的参数
+        for (Object o : args) {
+            //addBizReq(o);
+            break;
+        }
+        return tranLog;
+    }
+
+    /**
+     * 正常结束出参
+     *
+     * @param tranLog
+     * @param joinPoint
+     * @return
+     * @throws Throwable
+     */
+    public static LogInfo tranLogRespAspect(Object proceed, LogInfo tranLog, long start, ProceedingJoinPoint joinPoint) throws Throwable {
+        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+
+        //出参日志记录
+        String result = "";
+        result = FastJsonUtils.getBeanToJson(proceed);
+        tranLog.setStatus("1");
+        if (!StringUtil.isEmpty(result)) {
+            tranLog.setRespParam(result);
+            if (proceed instanceof RespDTO) {
+                RespDTO respDTO = (RespDTO) proceed;
+                if (!respDTO.code.equals("0")) {
+                    tranLog.setStatus("0");
+                }
+            }
+        }
+
+        //设置医院id
+        Long hospitalId = tranLog.getHospitalId();
+        String hosId = response.getHeader("Hospital_Id");
+        if (StringUtil.isNotBlank(hosId)) {
+            hospitalId = Long.valueOf(hosId);
+            response.setHeader("Hospital_Id", "");
+        }
+        tranLog.setHospitalId(hospitalId);
+
+        //设置病历号
+        String hospitalCode = tranLog.getBehospitalCode();
+        String hosCode = response.getHeader("Be_Hospital_Code");
+        if (StringUtil.isNotBlank(hosCode)) {
+            hospitalCode = hosCode;
+            response.setHeader("Be_Hospital_Code", "");
+        }
+        tranLog.setBehospitalCode(hospitalCode);
+
+        long execTime = System.currentTimeMillis() - start;
+        tranLog.setGmtResp(DateUtil.now());
+        tranLog.setExecTime(String.valueOf(execTime));
+        return tranLog;
+    }
+
+    /**
+     * 异常结束
+     *
+     * @param joinPoint
+     * @param ex
+     * @return
+     */
+    public static LogInfo tranLogRespAspectThrow(JoinPoint joinPoint, LogInfo tranLog, long start, Throwable ex) {
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+        //请求的参数
+        /*for (Object o : args) {
+            tranLog.setHospitalId(o.);
+            //第一个参数继承基类
+            if (o instanceof CdssLogBaseVO) {
+                CdssLogBaseVO p = (CdssLogBaseVO) o;
+                tranLog.setPatientId(p.getPatientId());
+                tranLog.setHospitalId(p.getHospitalId());
+                tranLog.setSubHospitalCode(p.getSubHospitalCode());
+                tranLog.setSubHospitalName(p.getSubHospitalName());
+                if (StringUtil.isNotBlank(p.getSceneName())) {
+                    tranLog.setSceneName(p.getSceneName());
+                }
+            }
+            break;
+        }*/
+
+        //出参设置
+        String result = "";
+        result = FastJsonUtils.getBeanToJson(handleException((Exception) ex));
+        tranLog.setRespParam(result);
+        tranLog.setStatus("0");
+        long execTime = System.currentTimeMillis() - start;
+        tranLog.setGmtResp(DateUtil.now());
+        tranLog.setExecTime(String.valueOf(execTime));
+        return tranLog;
+    }
+
+    /**
+     * 抛错信息处理
+     *
+     * @param e
+     * @return 结果参数
+     */
+    private static RespDTO handleException(Exception e) {
+        RespDTO resp = new RespDTO();
+        if (e instanceof BindException) {
+            BindException ex = (BindException) e;
+            Map<String, String> stringMap = new HashMap<>();
+            for (FieldError fieldError : ex.getBindingResult().getFieldErrors()) {
+                stringMap.put(fieldError.getField(), fieldError.getDefaultMessage());
+            }
+            String msg = FastJsonUtils.getBeanToJson(stringMap);
+            resp.code = CommonErrorCode.PARAM_ERROR.getCode();
+            resp.msg = msg;
+            return resp;
+        }
+        if (e instanceof MethodArgumentNotValidException) {
+            MethodArgumentNotValidException ex = (MethodArgumentNotValidException) e;
+            Map<String, String> stringMap = new HashMap<>();
+            for (FieldError fieldError : ex.getBindingResult().getFieldErrors()) {
+                stringMap.put(fieldError.getField(), fieldError.getDefaultMessage());
+            }
+            String msg = FastJsonUtils.getBeanToJson(stringMap);
+            resp.code = CommonErrorCode.PARAM_ERROR.getCode();
+            resp.msg = msg;
+            return resp;
+        }
+        if (e instanceof MissingServletRequestParameterException) {
+            MissingServletRequestParameterException ex = (MissingServletRequestParameterException) e;
+            Map<String, String> stringMap = new HashMap<>();
+            stringMap.put(ex.getParameterName(), "不能为null");
+            String msg = FastJsonUtils.getBeanToJson(stringMap);
+            resp.code = CommonErrorCode.PARAM_ERROR.getCode();
+            resp.msg = msg;
+            return resp;
+        }
+        if (e instanceof CommonException) {
+            CommonException taiChiException = (CommonException) e;
+            resp.code = taiChiException.getCode();
+            resp.msg = e.getMessage();
+            return resp;
+        }
+        resp.code = CommonErrorCode.FAIL.getCode();
+        resp.msg = e.getMessage();
+        return resp;
+    }
+
+    /**
+     * 设置医院id
+     *
+     * @param o
+     */
+    public static void addBizHospitalId(Object o) {
+        handleRespHeaderMap("Hospital_Id", o);
+    }
+
+    /**
+     * 设置病历号
+     *
+     * @param o
+     */
+    public static void addBizHospitalCode(Object o) {
+        handleRespHeaderMap("Be_Hospital_Code", o);
+    }
+
+    private static void handleRespHeaderMap(String key, Object o) {
+        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+        String value = response.getHeader(key);
+        if (StringUtil.isNotBlank(value)) {
+            value += CDSS_LOG_SP + FastJsonUtils.getBeanToJson(o);
+        } else {
+            value = FastJsonUtils.getBeanToJson(o);
+        }
+        // 设置Header
+        response.setHeader(key, value);
+    }
+
+}

+ 23 - 0
src/main/java/com/diagbot/web/DataController.java

@@ -1,5 +1,6 @@
 package com.diagbot.web;
 
+import com.diagbot.annotation.MrqcLog;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.data.*;
@@ -60,6 +61,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-获取医院所有在职医生的基本信息")
     @PostMapping("/sendDoctorInfos")
     @SysLogger("sendDoctorInfos")
+    @MrqcLog
     public RespDTO sendDoctorInfos(@RequestBody List<ABasDoctorInfoVO> list) {
         return aBasDoctorInfoFacade.executeDoctor(list);
     }
@@ -67,6 +69,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-获取医院所有有效科室的基本信息")
     @PostMapping("/sendDeptInfos")
     @SysLogger("sendDeptInfos")
+    @MrqcLog
     public RespDTO<List<ABasDeptInfoDTO>> sendDeptInfos(@RequestBody List<ABasDeptInfoVO> list) {
         return aBasDeptInfoFacade.executeDept(list);
     }
@@ -74,6 +77,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-获取医院所有文书模板基本信息")
     @PostMapping("/sendRecordTypes")
     @SysLogger("sendRecordTypes")
+    @MrqcLog
     public RespDTO<List<AMedicalRecordTypeDTO>> sendRecordTypes(@RequestBody List<AMedicalRecordTypeVO> list) {
         return aMedRecordTypeFacade.executeMRType(list);
     }
@@ -81,6 +85,7 @@ public class DataController {
     @ApiOperation(value = "运行质控-评分-文书信息")
     @PostMapping("/sendMrRecordIng")
     @SysLogger("sendMrRecordIng")
+    @MrqcLog
     public RespDTO<Map<String, Object>> sendMrRecordIng(@Valid @RequestBody AMrContentVO aMrContentVO) {
         return aMedicalRecordFacade.executeMrRecordIng(aMrContentVO);
     }
@@ -88,6 +93,7 @@ public class DataController {
     @ApiOperation(value = "终末质控-文书信息")
     @PostMapping("/sendMrRecord")
     @SysLogger("sendMrRecord")
+    @MrqcLog
     public RespDTO<List<AMedicalRecordDTO>> sendMrRecord(@RequestBody List<AMedicalRecordVO> list) {
         return aMedicalRecordFacade.executeMrRecord(list);
     }
@@ -95,6 +101,7 @@ public class DataController {
     @ApiOperation(value = "终末质控-文书详情")
     @PostMapping("/sendMrContent")
     @SysLogger("sendMrContent")
+    @MrqcLog
     public RespDTO<List<AMedicalRecordContentDTO>> sendMrContent(@RequestBody List<AMedicalRecordContentVO> list) {
         return aMedicalRecordContentFacade.executeMrRecordContent(list);
     }
@@ -102,6 +109,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-获取医院病人住院记录信息")
     @PostMapping("/sendPatientInfo")
     @SysLogger("sendPatientInfo")
+    @MrqcLog
     public RespDTO<List<ABehospitalInfoDTO>> sendPatientInfo(@RequestBody List<ABehospitalInfoVO> list) {
         return aBehospitalInfoFacade.executeBehospital(list);
     }
@@ -109,6 +117,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-获取医院医生医嘱信息")
     @PostMapping("/sendDoctorAdvice")
     @SysLogger("sendDoctorAdvice")
+    @MrqcLog
     public RespDTO<List<ADoctorAdviceDTO>> sendDoctorAdvice(@RequestBody List<ADoctorAdviceVO> list) {
         return aDoctorAdviceFacade.executeDoctorAdvice(list);
     }
@@ -116,6 +125,7 @@ public class DataController {
     @ApiOperation(value = "运行质控-获取病案首页")
     @PostMapping("/sendHomePageIng")
     @SysLogger("sendHomePageIng")
+    @MrqcLog
     public RespDTO<Map<String, Object>> sendHomePageIng(@Valid @RequestBody AHomePageIngVO aHomePageIngVO) {
         return aHomePageFacade.executeHomePageIng(aHomePageIngVO);
     }
@@ -123,6 +133,7 @@ public class DataController {
     @ApiOperation(value = "终末质控-获取病案首页")
     @PostMapping("/sendHomePage")
     @SysLogger("sendHomePage")
+    @MrqcLog
     public RespDTO<List<AHomePageDTO>> sendHomePage(@RequestBody List<AHomePageVO> list) {
         return aHomePageFacade.executeHomePage(list);
     }
@@ -130,6 +141,7 @@ public class DataController {
     @ApiOperation(value = "终末质控-获取病案首页诊断")
     @PostMapping("/sendHomeDiagnose")
     @SysLogger("sendHomeDiagnose")
+    @MrqcLog
     public RespDTO<List<AHomeDiagnoseDTO>> sendHomeDiagnose(@RequestBody List<AHomeDiagnoseVO> list) {
         return aHomeDiagnoseInfoFacade.executeHomeDiagnose(list);
     }
@@ -137,6 +149,7 @@ public class DataController {
     @ApiOperation(value = "终末质控-获取病案首页手术")
     @PostMapping("/sendHomeOperation")
     @SysLogger("sendHomeOperation")
+    @MrqcLog
     public RespDTO<List<AHomeOperationDTO>> sendHomeOperation(@RequestBody List<AHomeOperationVO> list) {
         return RespDTO.onSuc(aHomeOperationInfoFacade.executeHomeOperation(list));
     }
@@ -144,6 +157,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-获取危急值")
     @PostMapping("/sendCrisis")
     @SysLogger("sendCrisis")
+    @MrqcLog
     public RespDTO<List<AMedCrisisDTO>> sendCrisis(@RequestBody List<AMedCrisisVO> list) {
         return aMedCrisisFacade.executeMedCrisis(list);
     }
@@ -151,6 +165,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-删除标识")
     @PostMapping("/deleteFlag")
     @SysLogger("deleteFlag")
+    @MrqcLog
     public RespDTO deleteFlag(@RequestBody ADeleteFlagVO aDeleteFlagVO) {
         if ("brzyxx".equals(aDeleteFlagVO.getModeType())) {
             return aBehospitalInfoFacade.deleteFlag(aDeleteFlagVO);
@@ -177,6 +192,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-归档标识")
     @PostMapping("/placeFile")
     @SysLogger("placeFile")
+    @MrqcLog
     public RespDTO placeFileFlag(@RequestBody APlaceFileVO aPlaceFileVO) {
         return aBehospitalInfoFacade.placeFileFlag(aPlaceFileVO);
     }
@@ -184,6 +200,7 @@ public class DataController {
     @ApiOperation(value = "检查结果")
     @PostMapping("/sendPacsResults")
     @SysLogger("sendPacsResults")
+    @MrqcLog
     public RespDTO<List<AMedPacsResultVO>> sendPacsResults(@RequestBody List<AMedPacsResultVO> list) {
         return aMedPacsResultFacade.executeMedPacsResult(list);
     }
@@ -191,6 +208,7 @@ public class DataController {
     @ApiOperation(value = "化验结果")
     @PostMapping("/sendLisResults")
     @SysLogger("sendLisResults")
+    @MrqcLog
     public RespDTO<List<AMedLisResultVO>> sendLisResults(@RequestBody List<AMedLisResultVO> list) {
         return aMedLisResultFacade.executeMedLisResult(list);
     }
@@ -198,6 +216,7 @@ public class DataController {
     @ApiOperation(value = "检查信息")
     @PostMapping("/sendPacsInfos")
     @SysLogger("sendPacsInfos")
+    @MrqcLog
     public RespDTO sendPacsInfos(@RequestBody List<AMedPacsInfoVO> list) {
         return aMedPacsInfoFacade.dealData(list);
     }
@@ -205,6 +224,7 @@ public class DataController {
     @ApiOperation(value = "化验信息")
     @PostMapping("/sendLisInfos")
     @SysLogger("sendLisInfos")
+    @MrqcLog
     public RespDTO sendLisInfos(@RequestBody List<AMedLisInfoVO> list) {
         return aMedLisInfoFacade.dealData(list);
     }
@@ -212,6 +232,7 @@ public class DataController {
     @ApiOperation(value = "数据引擎-历史数据结构化处理")
     @PostMapping("/hisDataDeal")
     @SysLogger("hisDataDeal")
+    @MrqcLog
     public RespDTO<List<AMedCrisisDTO>> hisDataDeal(@RequestBody HisDataDealVO hisDataDealVO) {
         boolean b = true;
         try {
@@ -243,6 +264,7 @@ public class DataController {
     @ApiOperation(value = "his数据补录")
     @PostMapping("/dataSupplement")
     @SysLogger("dataSupplement")
+    @MrqcLog
     public RespDTO dataSupplement(@RequestBody List<ABehospitalInfoVO> list) {
         RespDTO respDTO = null;
         try {
@@ -258,6 +280,7 @@ public class DataController {
     @ApiOperation(value = "his历史数据批量导入")
     @PostMapping("/getPatientRecord")
     @SysLogger("getPatientRecord")
+    @MrqcLog
     public RespDTO getPatientRecord(@RequestBody HisDataImportVO hisDataImportVO){
         try {
             hisBehospitalInfoFacade.getPatientRecord(hisDataImportVO);

+ 20 - 0
src/main/java/com/diagbot/web/LogInfoController.java

@@ -0,0 +1,20 @@
+package com.diagbot.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zhanghang
+ * @since 2021-12-31
+ */
+@Controller
+@RequestMapping("/logInfo")
+public class LogInfoController {
+
+}

+ 9 - 0
src/main/resources/application-dev.yml

@@ -106,6 +106,15 @@ spring:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8
 
+  cloud:
+    stream:
+      bindings:
+        outputMrqcLog:
+          destination: mrqcLog
+        inputMrqcLog:
+          destination: mrqcLog
+          group: mrqcLogReceiveGroup
+
   #redis
   redis:
     database:

+ 21 - 0
src/main/resources/application-local.yml

@@ -122,6 +122,24 @@ spring:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8
 
+  cloud:
+    stream:
+      bindings:
+        outputMrqcLog:
+          destination: mrqcLog
+        inputMrqcLog:
+          destination: mrqcLog
+          group: mrqcLogReceiveGroup
+
+  #mq
+  rabbitmq:
+    host: 192.168.2.236
+    port: 5672
+    username: lantone
+    password: lantone
+    publisher-confirms: true
+    virtual-host: /
+
   #redis
   redis:
     database:
@@ -195,4 +213,7 @@ initmodeid:
 
 #对接过程中是否记录正常流程的日志
 log_switch:
+  enable: true
+
+mrqcLog:
   enable: true

+ 8 - 0
src/main/resources/application-pre.yml

@@ -106,6 +106,14 @@ spring:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8
 
+  cloud:
+    stream:
+      bindings:
+        outputMrqcLog:
+          destination: mrqcLog
+        inputMrqcLog:
+          destination: mrqcLog
+          group: mrqcLogReceiveGroup
   #redis
   redis:
     database:

+ 8 - 0
src/main/resources/application-pro.yml

@@ -106,6 +106,14 @@ spring:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8
 
+  cloud:
+    stream:
+      bindings:
+        outputMrqcLog:
+          destination: mrqcLog
+        inputMrqcLog:
+          destination: mrqcLog
+          group: mrqcLogReceiveGroup
   #redis
   redis:
     database:

+ 9 - 0
src/main/resources/application-test.yml

@@ -106,6 +106,15 @@ spring:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8
 
+  cloud:
+    stream:
+      bindings:
+        outputMrqcLog:
+          destination: mrqcLog
+        inputMrqcLog:
+          destination: mrqcLog
+          group: mrqcLogReceiveGroup
+
   #redis
   redis:
     database:

+ 20 - 0
src/main/resources/mapper/LogInfoMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.LogInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.LogInfo">
+        <id column="id" property="id" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="behospital_code" property="behospitalCode" />
+        <result column="func_name" property="funcName" />
+        <result column="req_param" property="reqParam" />
+        <result column="resp_param" property="respParam" />
+        <result column="gmt_req" property="gmtReq" />
+        <result column="gmt_resp" property="gmtResp" />
+        <result column="exec_time" property="execTime" />
+        <result column="status" property="status" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>