Browse Source

索引优化

xiongzhu 4 years ago
parent
commit
53574424e6

+ 0 - 188
src/main/java/com/izouma/nineth/aspect/OperLogAspect.java

@@ -1,188 +0,0 @@
-package com.izouma.nineth.aspect;
-
-import com.alibaba.fastjson.JSON;
-import com.izouma.nineth.annotations.OperLog;
-import com.izouma.nineth.domain.ExceptionLog;
-import com.izouma.nineth.domain.OperationLog;
-import com.izouma.nineth.domain.User;
-import com.izouma.nineth.repo.ExceptionLogRepo;
-import com.izouma.nineth.repo.OperationLogRepo;
-import com.izouma.nineth.utils.IPUtils;
-import com.izouma.nineth.utils.SecurityUtils;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.annotation.AfterReturning;
-import org.aspectj.lang.annotation.AfterThrowing;
-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.stereotype.Component;
-import org.springframework.web.context.request.RequestAttributes;
-import org.springframework.web.context.request.RequestContextHolder;
-
-import javax.servlet.http.HttpServletRequest;
-import java.lang.reflect.Method;
-import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.Map;
-
-@Aspect
-@Component
-public class OperLogAspect {
-
-    @Autowired
-    private OperationLogRepo operationLogRepo;
-
-    @Autowired
-    private ExceptionLogRepo exceptionLogRepo;
-
-    /**
-     * 设置操作日志切入点 记录操作日志 在注解的位置切入代码
-     */
-    @Pointcut("@annotation(com.izouma.nineth.annotations.OperLog)")
-    public void operLogPointCut() {
-    }
-
-    /**
-     * 设置操作异常切入点记录异常日志 扫描所有controller包下操作
-     */
-    @Pointcut("execution(* com.izouma.nineth.web..*.*(..))")
-    public void operExceptionLogPointCut() {
-    }
-
-    /**
-     * 正常返回通知,拦截用户操作日志,连接点正常执行完成后执行, 如果连接点抛出异常,则不会执行
-     *
-     * @param joinPoint 切入点
-     * @param keys      返回结果
-     */
-    @AfterReturning(value = "operLogPointCut()", returning = "keys")
-    public void saveOperLog(JoinPoint joinPoint, Object keys) {
-        // 获取RequestAttributes
-        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
-        // 从获取RequestAttributes中获取HttpServletRequest的信息
-        HttpServletRequest request = (HttpServletRequest) requestAttributes
-                .resolveReference(RequestAttributes.REFERENCE_REQUEST);
-
-        OperationLog operationLog = new OperationLog();
-        try {
-            // 从切面织入点处通过反射机制获取织入点处的方法
-            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
-            // 获取切入点所在的方法
-            Method method = signature.getMethod();
-            // 获取操作
-            OperLog operLog = method.getAnnotation(OperLog.class);
-            if (operLog != null) {
-                operationLog.setName(operLog.value()); // 操作模块
-                operationLog.setType(operLog.type()); // 操作类型
-                operationLog.setDesc(operLog.desc()); // 操作描述
-            }
-            // 获取请求的类名
-            String className = joinPoint.getTarget().getClass().getName();
-            // 获取请求的方法名
-            String methodName = method.getName();
-            methodName = className + "." + methodName;
-
-            operationLog.setReqMethod(methodName);
-
-            // 请求的参数
-            Map<String, String> rtnMap = null;
-            String params = null;
-            if (request != null) {
-                rtnMap = convertMap(request.getParameterMap());
-                params = JSON.toJSONString(rtnMap);
-            }
-
-            operationLog.setReqParams(params);
-            operationLog.setResp(JSON.toJSONString(keys));
-
-            User user = SecurityUtils.getAuthenticatedUser();
-            if (user != null) {
-                operationLog.setUserId(String.valueOf(user.getId()));
-                operationLog.setUsername(user.getUsername());
-            }
-            operationLog.setReqIp(IPUtils.getIpAddr(request));
-            operationLog.setReqUrl(request != null ? request.getRequestURI() : null);
-            operationLog.setTime(LocalDateTime.now());
-            operationLogRepo.save(operationLog);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 异常返回通知,用于拦截异常日志信息 连接点抛出异常后执行
-     *
-     * @param joinPoint 切入点
-     * @param e         异常信息
-     */
-    @AfterThrowing(pointcut = "operExceptionLogPointCut()", throwing = "e")
-    public void saveExceptionLog(JoinPoint joinPoint, Throwable e) {
-        // 获取RequestAttributes
-        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
-        // 从获取RequestAttributes中获取HttpServletRequest的信息
-        HttpServletRequest request = (HttpServletRequest) requestAttributes
-                .resolveReference(RequestAttributes.REFERENCE_REQUEST);
-
-        ExceptionLog exceptionLog = new ExceptionLog();
-        try {
-            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
-            Method method = signature.getMethod();
-            String className = joinPoint.getTarget().getClass().getName();
-            String methodName = method.getName();
-            methodName = className + "." + methodName;
-            exceptionLog.setReqMethod(methodName);
-
-            Map<String, String> rtnMap = convertMap(request.getParameterMap());
-            String params = JSON.toJSONString(rtnMap);
-            exceptionLog.setReqParams(params);
-
-            exceptionLog.setName(e.getClass().getName());
-            exceptionLog.setMessage(stackTraceToString(e.getClass().getName(), e.getMessage(), e
-                    .getStackTrace()));
-            User user = SecurityUtils.getAuthenticatedUser();
-            if (user != null) {
-                exceptionLog.setUserId(String.valueOf(user.getId()));
-                exceptionLog.setUsername(user.getUsername());
-            }
-
-            exceptionLog.setReqUrl(request.getRequestURI());
-            exceptionLog.setReqIp(IPUtils.getIpAddr(request));
-            exceptionLog.setTime(LocalDateTime.now());
-
-            exceptionLogRepo.save(exceptionLog);
-
-        } catch (Exception e2) {
-            e2.printStackTrace();
-        }
-
-    }
-
-    /**
-     * 转换request 请求参数
-     *
-     * @param paramMap request获取的参数数组
-     */
-    public Map<String, String> convertMap(Map<String, String[]> paramMap) {
-        Map<String, String> rtnMap = new HashMap<>();
-        for (String key : paramMap.keySet()) {
-            rtnMap.put(key, paramMap.get(key)[0]);
-        }
-        return rtnMap;
-    }
-
-    /**
-     * 转换异常信息为字符串
-     *
-     * @param exceptionName    异常名称
-     * @param exceptionMessage 异常信息
-     * @param elements         堆栈信息
-     */
-    public String stackTraceToString(String exceptionName, String exceptionMessage, StackTraceElement[] elements) {
-        StringBuilder strBuff = new StringBuilder();
-        for (StackTraceElement stet : elements) {
-            strBuff.append(stet).append("\n");
-        }
-        return exceptionName + ":" + exceptionMessage + "\n\t" + strBuff;
-    }
-}

+ 1 - 0
src/main/java/com/izouma/nineth/domain/Asset.java

@@ -22,6 +22,7 @@ import java.util.List;
 
 @Data
 @Entity
+@Table(indexes = {@Index(columnList = "userId")})
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder

+ 88 - 0
src/main/java/com/izouma/nineth/domain/BaseEntityNoID.java

@@ -0,0 +1,88 @@
+package com.izouma.nineth.domain;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.hibernate.envers.Audited;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+
+@MappedSuperclass
+@Audited
+@EntityListeners(AuditingEntityListener.class)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
+public abstract class BaseEntityNoID {
+    @ExcelIgnore
+    @JsonIgnore
+    @CreatedBy
+    private String createdBy;
+
+    @ExcelProperty("创建时间")
+    @JsonIgnore
+    @CreatedDate
+    private LocalDateTime createdAt;
+
+    @ExcelIgnore
+    @JsonIgnore
+    @LastModifiedBy
+    private String modifiedBy;
+
+    @ExcelIgnore
+    @JsonIgnore
+    @LastModifiedDate
+    private LocalDateTime modifiedAt;
+
+    @ExcelIgnore
+    private boolean del;
+
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    @JsonProperty("createdAt")
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public String getModifiedBy() {
+        return modifiedBy;
+    }
+
+    public void setModifiedBy(String modifiedBy) {
+        this.modifiedBy = modifiedBy;
+    }
+
+    public LocalDateTime getModifiedAt() {
+        return modifiedAt;
+    }
+
+    public void setModifiedAt(LocalDateTime modifiedAt) {
+        this.modifiedAt = modifiedAt;
+    }
+
+    public boolean isDel() {
+        return del;
+    }
+
+    public void setDel(boolean del) {
+        this.del = del;
+    }
+}

+ 3 - 1
src/main/java/com/izouma/nineth/domain/Like.java

@@ -7,11 +7,13 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
+import javax.persistence.Index;
 import javax.persistence.Table;
 
 @Data
 @Entity
-@Table(name = "like_info")
+@Table(name = "like_info", indexes =
+        {@Index(columnList = "userId"), @Index(columnList = "collectionId")})
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder

+ 4 - 10
src/main/java/com/izouma/nineth/domain/Order.java

@@ -1,8 +1,6 @@
 package com.izouma.nineth.domain;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.converter.FileObjectListConverter;
@@ -18,12 +16,10 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.hibernate.envers.Audited;
 import org.springframework.data.annotation.CreatedBy;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedBy;
 import org.springframework.data.annotation.LastModifiedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
 import javax.persistence.*;
 import java.math.BigDecimal;
@@ -37,17 +33,14 @@ import java.util.List;
         @Index(columnList = "userId"),
         @Index(columnList = "status"),
         @Index(columnList = "assetId"),
-        @Index(columnList = "collectionId")
+        @Index(columnList = "collectionId"),
+        @Index(columnList = "transactionId")
 })
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
-@Audited
-@EntityListeners(AuditingEntityListener.class)
-@JsonInclude(JsonInclude.Include.NON_NULL)
-@JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
 @ApiModel("订单")
-public class Order {
+public class Order extends BaseEntityNoID {
 
     @Id
 //    @GenericGenerator(name = "custom-id", strategy = "com.izouma.nineth.utils.SnowflakeIdGenerator")
@@ -162,6 +155,7 @@ public class Order {
 
     @ApiModelProperty("交易ID")
     @Searchable
+    @Column(length = 90)
     private String transactionId;
 
     @ApiModelProperty("支付时间")

+ 3 - 0
src/main/java/com/izouma/nineth/domain/SmsRecord.java

@@ -8,10 +8,13 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
+import javax.persistence.Index;
+import javax.persistence.Table;
 import java.time.LocalDateTime;
 
 @Data
 @Entity
+@Table(indexes = {@Index(columnList = "phone,expiresAt,expired")})
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder

+ 6 - 3
src/main/java/com/izouma/nineth/domain/User.java

@@ -6,7 +6,6 @@ import com.fasterxml.jackson.annotation.JsonView;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.izouma.nineth.JsonView.UserView;
 import com.izouma.nineth.annotations.Searchable;
-import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.security.Authority;
 import com.izouma.nineth.utils.UserAuthoritySerializer;
@@ -19,7 +18,6 @@ import lombok.NoArgsConstructor;
 import org.hibernate.annotations.BatchSize;
 
 import javax.persistence.*;
-import javax.validation.constraints.Pattern;
 import javax.validation.constraints.Size;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -28,13 +26,18 @@ import java.util.Set;
 
 @Data
 @Entity
+@Table(indexes = {
+        @Index(columnList = "phone"),
+        @Index(columnList = "collectionId"),
+        @Index(columnList = "collectionInvitor")
+})
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
 @ApiModel(value = "用户", description = "用户")
 public class User extends BaseEntity implements Serializable {
 
-//    @Pattern(regexp = Constants.Regex.USERNAME)
+    //    @Pattern(regexp = Constants.Regex.USERNAME)
     @Size(min = 1, max = 50)
     @Column(nullable = false, unique = true)
     @Searchable

+ 1 - 1
src/main/java/com/izouma/nineth/listener/CreateOrderListener.java

@@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit;
 @RocketMQMessageListener(
         consumerGroup = "${general.create-order-group}",
         topic = "${general.create-order-topic}",
-        consumeMode = ConsumeMode.CONCURRENTLY)
+        consumeMode = ConsumeMode.ORDERLY)
 @ConditionalOnProperty(value = "general.notify-server", havingValue = "false", matchIfMissing = true)
 public class CreateOrderListener implements RocketMQListener<CreateOrderEvent> {
     private OrderService                  orderService;

+ 1 - 1
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -717,7 +717,7 @@ public class OrderService {
     }
 
 
-    @Scheduled(fixedRate = 120000)
+    @Scheduled(cron = "0 0 4 * * ?")
     public void setSales() {
         if (generalProperties.isNotifyServer()) {
             return;