Browse Source

设备调用日志记录

LuoDLeo 5 months ago
parent
commit
1292f74324

+ 19 - 0
src/main/java/org/springblade/common/aspect/VendingLog.java

@@ -0,0 +1,19 @@
+package org.springblade.common.aspect;
+
+import org.springblade.common.enums.VendingLogEnum;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 设备调用日志
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD})
+public @interface VendingLog {
+
+    VendingLogEnum value() default VendingLogEnum.DEFAULT;
+
+}

+ 76 - 0
src/main/java/org/springblade/common/aspect/VendingLogAspect.java

@@ -0,0 +1,76 @@
+package org.springblade.common.aspect;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSONObject;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springblade.core.launch.props.BladeProperties;
+import org.springblade.core.launch.server.ServerInfo;
+import org.springblade.core.log.model.LogApi;
+import org.springblade.core.log.utils.LogAbstractUtil;
+import org.springblade.core.tool.utils.WebUtil;
+import org.springblade.modules.business.entity.FacilityLog;
+import org.springblade.modules.business.service.IFacilityLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+
+@Aspect
+@Component
+public class VendingLogAspect {
+
+    @Value("${spring.profiles.active}")
+    private String active;
+    @Autowired
+    private ServerInfo serverInfo;
+    @Autowired
+    private BladeProperties bladeProperties;
+    @Autowired
+    private IFacilityLogService facilityLogService;
+
+    public VendingLogAspect() {
+    }
+
+    @Around("@annotation(org.springblade.common.aspect.VendingLog)")
+    public Object doAround(ProceedingJoinPoint point) throws Throwable {
+        MethodSignature methodSignature = (MethodSignature) point.getSignature();
+        Method method = methodSignature.getMethod();
+        VendingLog vendingLog = method.getAnnotation(VendingLog.class);
+
+        String className = point.getTarget().getClass().getName();
+        String methodName = point.getSignature().getName();
+        long beginTime = System.currentTimeMillis();
+        Object result = point.proceed();
+        long time = System.currentTimeMillis() - beginTime;
+        publishEvent(methodName, className, vendingLog, time);
+        return result;
+    }
+
+    public void publishEvent(String methodName, String methodClass, VendingLog vendingLog, long time) {
+        HttpServletRequest request = WebUtil.getRequest();
+        LogApi logApi = new LogApi();
+        logApi.setType(vendingLog.value().getType());
+        logApi.setTitle(vendingLog.value().getTitle());
+        logApi.setTime(String.valueOf(time));
+        logApi.setMethodClass(methodClass);
+        logApi.setMethodName(methodName);
+        LogAbstractUtil.addRequestInfoToLog(request, logApi);
+        LogAbstractUtil.addOtherInfoToLog(logApi, bladeProperties, serverInfo);
+        FacilityLog facilityLog = new FacilityLog();
+        BeanUtil.copyProperties(logApi, facilityLog);
+
+        facilityLog.setEnv(active);
+
+        JSONObject jsonObject = JSONObject.parseObject(facilityLog.getParams());
+        String machineId = jsonObject.get("machineId").toString();
+        facilityLog.setCreateBy(machineId);
+
+        facilityLogService.save(facilityLog);
+    }
+
+}

+ 22 - 0
src/main/java/org/springblade/common/enums/VendingLogEnum.java

@@ -0,0 +1,22 @@
+package org.springblade.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 设备日志类型
+ */
+@Getter
+@AllArgsConstructor
+public enum VendingLogEnum {
+
+    DEFAULT("设备调用", "0"),
+    ORDER("查询订单", "1"),
+    OQC("出货回调", "2"),
+    HEARTBEAT("设备心跳", "3");
+
+    private String title;
+
+    private String type;
+
+}

+ 5 - 4
src/main/java/org/springblade/modules/api/controller/ApiVendingController.java

@@ -9,10 +9,11 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.common.aspect.VendingFlag;
+import org.springblade.common.aspect.VendingLog;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.enums.FacilityStatusEnum;
 import org.springblade.common.enums.OrderStateEnum;
-import org.springblade.core.log.annotation.ApiLog;
+import org.springblade.common.enums.VendingLogEnum;
 import org.springblade.modules.api.request.VendingHeartReq;
 import org.springblade.modules.api.request.VendingOrderReq;
 import org.springblade.modules.api.request.VendingShipReq;
@@ -60,7 +61,7 @@ public class ApiVendingController {
     private final IFacilityFaultService facilityFaultService;
 
 
-    @ApiLog("查询设备订单信息")
+    @VendingLog(VendingLogEnum.ORDER)
     @VendingFlag
     @ApiOperation(value = "查询订单信息", notes = "传入售货机编号")
     @PostMapping("/getOrder")
@@ -122,7 +123,7 @@ public class ApiVendingController {
         response.flushBuffer();
     }
 
-    @ApiLog("设备出货成功回调")
+    @VendingLog(VendingLogEnum.OQC)
     @ApiOperation(value = "出货成功回调", notes = "出货成功回调")
     @PostMapping("callback")
     public void callback(@Valid @RequestBody VendingShipReq req) {
@@ -172,7 +173,7 @@ public class ApiVendingController {
 
     }
 
-    @ApiLog("设备心跳")
+    @VendingLog(VendingLogEnum.HEARTBEAT)
     @ApiOperation(value = "设备心跳", notes = "设备心跳")
     @PostMapping("heartbeat")
     public void heartbeat(@Valid @RequestBody VendingHeartReq req) {

+ 25 - 0
src/main/java/org/springblade/modules/business/entity/FacilityLog.java

@@ -0,0 +1,25 @@
+package org.springblade.modules.business.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.log.model.LogAbstract;
+
+@Data
+@TableName("t_facility_log")
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "售货机调用接口记录", description = "售货机调用接口记录")
+public class FacilityLog extends LogAbstract {
+
+    /**
+     * 接口名
+     */
+    private String title;
+
+    /**
+     * 耗时
+     */
+    private String time;
+
+}

+ 8 - 0
src/main/java/org/springblade/modules/business/mapper/FacilityLogMapper.java

@@ -0,0 +1,8 @@
+package org.springblade.modules.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.modules.business.entity.FacilityLog;
+
+public interface FacilityLogMapper  extends BaseMapper<FacilityLog> {
+
+}

+ 8 - 0
src/main/java/org/springblade/modules/business/service/IFacilityLogService.java

@@ -0,0 +1,8 @@
+package org.springblade.modules.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.business.entity.FacilityLog;
+
+public interface IFacilityLogService extends IService<FacilityLog> {
+
+}

+ 12 - 0
src/main/java/org/springblade/modules/business/service/impl/FacilityLogServiceImpl.java

@@ -0,0 +1,12 @@
+package org.springblade.modules.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.modules.business.entity.FacilityLog;
+import org.springblade.modules.business.mapper.FacilityLogMapper;
+import org.springblade.modules.business.service.IFacilityLogService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FacilityLogServiceImpl extends ServiceImpl<FacilityLogMapper, FacilityLog>  implements IFacilityLogService {
+
+}