浏览代码

redis pom包引用调整 全局轨迹添加

785834757 1 年之前
父节点
当前提交
2b0b9ad2b7

+ 15 - 1
README.md

@@ -5,4 +5,18 @@ platform            总控项目
 
 
 
-通过gateway网关转发其他服务项目   后期加入nacos 使用服务名支持负载均衡、服务健康状态管理
+通过gateway网关转发其他服务项目   后期加入nacos 使用服务名支持负载均衡、服务健康状态管理
+
+
+
+
+轨迹添加
+Service层 需要继承HistoryDataService  实现getHistoryData方法   更新与删除操作需要获取历史的数据
+type  操作类型   C U D
+systemCode  系统code
+serviceTag  service Bean名
+primary     service对应表的主键id  默认为id
+@OperatorTrajectory(type = "D",systemCode = "JZG",serviceTag = "userRoleService",primary = "id")
+@GetMapping("/delete")
+public HttpResult delete(Integer roleId){
+}

+ 14 - 0
authentication/pom.xml

@@ -63,6 +63,20 @@
             <groupId>com.github.whvcse</groupId>
             <artifactId>easy-captcha</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-data-27</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 1 - 9
authentication/src/main/java/com/jzg/controller/AuthController.java

@@ -2,11 +2,9 @@ package com.jzg.controller;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.jzg.aop.PremissionCheck;
 import com.jzg.config.JzgTokenService;
 import com.jzg.config.JzgUserDetailsService;
 import com.jzg.config.JzgUsernamePasswordAuthenticationToken;
-import com.jzg.config.RedissonConfig;
 import com.jzg.constants.RedisKeyConstants;
 import com.jzg.core.base.BaseController;
 import com.jzg.core.page.HttpResult;
@@ -16,13 +14,12 @@ import com.jzg.entity.vo.ModifyPassWordFormVo;
 import com.jzg.exception.SystemException;
 import com.jzg.handler.JzgAuthenticationSuccessHandler;
 import com.jzg.service.SysUserService;
-import com.jzg.utils.ImageUtil;
+import com.jzg.util.ImageUtil;
 import com.wf.captcha.SpecCaptcha;
 import com.wf.captcha.base.Captcha;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.models.annotations.OpenAPI30;
 import jakarta.servlet.ServletException;
 import jakarta.servlet.ServletOutputStream;
 import jakarta.servlet.http.HttpServletRequest;
@@ -30,10 +27,7 @@ import jakarta.servlet.http.HttpServletResponse;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.tomcat.util.http.fileupload.IOUtils;
 import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -43,9 +37,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.util.Base64;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 

+ 14 - 0
commons/pom.xml

@@ -27,5 +27,19 @@
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-data-27</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 31 - 0
commons/src/main/java/com/jzg/aop/OperatorTrajectory.java

@@ -0,0 +1,31 @@
+package com.jzg.aop;
+
+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.METHOD)
+public @interface OperatorTrajectory {
+
+    // 系统code
+    String systemCode() default "";
+
+    //服务标识
+    String serviceTag() default "";
+
+    //操作方式  创建  C   修改 U  删除 D
+    String type() default "C";
+
+    //主键的名称
+    String primary() default "id";
+
+}
+
+
+

+ 158 - 0
commons/src/main/java/com/jzg/aop/aspect/OperatorTrajectoryAspect.java

@@ -0,0 +1,158 @@
+package com.jzg.aop.aspect;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.aop.OperatorTrajectory;
+import com.jzg.core.base.HistoryDataService;
+import com.jzg.core.page.HttpResult;
+import com.jzg.exception.SystemException;
+import com.jzg.service.OperatorTrajectoryService;
+import com.jzg.util.idgen.IdGenerate;
+import lombok.RequiredArgsConstructor;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Objects;
+
+@Aspect
+@Component
+@RequiredArgsConstructor
+public class OperatorTrajectoryAspect {
+
+
+    @Autowired
+    OperatorTrajectoryService operatorTrajectoryService;
+
+
+    @Autowired
+    private ApplicationContext applicationContext;
+
+    private ThreadLocal<MethodContext> methodContext = new ThreadLocal<>();
+
+    @AfterReturning(pointcut = "@annotation(com.jzg.aop.OperatorTrajectory)",returning = "result")
+    public void doAfter(JoinPoint joinPoint, HttpResult result) {
+        MethodContext context = methodContext.get();
+        Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+        OperatorTrajectory annotation = method.getAnnotation(OperatorTrajectory.class);
+        if (context != null) {
+            // 验证结果
+            String methodName = context.getMethodName();
+            if(joinPoint.getSignature().getName().equals(methodName)){
+                if(Objects.isNull(context.getId())){
+                    throw new SystemException("线程上下文异常,请重试");
+                }
+                com.jzg.entity.po.OperatorTrajectory byId = operatorTrajectoryService.getById(context.getId());
+                if(result.getCode() == 200){
+                    if(byId.getOperatorType().equals("C")){
+                        JSONObject jsonObject = JSON.parseObject(result.getData().toString());
+                        byId.setPrimaryValue(jsonObject.getString(annotation.primary()));
+                    }
+                    byId.setExecuteStatus(1);
+                }else{
+                    byId.setExecuteStatus(2);
+                    byId.setErrorMsg(result.getMsg());
+                }
+                operatorTrajectoryService.updateById(byId);
+            }
+        }
+        // 清除上下文
+        methodContext.remove();
+    }
+
+    //拦截异常消息
+    @AfterThrowing(pointcut = "@annotation(com.jzg.aop.OperatorTrajectory)", throwing = "ex")
+    public void doAfterThrowing(JoinPoint joinPoint, Throwable ex) {
+        MethodContext context = methodContext.get();
+        if (context != null) {
+            String methodName = context.getMethodName();
+            if(joinPoint.getSignature().getName().equals(methodName)){
+                com.jzg.entity.po.OperatorTrajectory byId = operatorTrajectoryService.getById(context.getId());
+                byId.setExecuteStatus(2);
+                byId.setErrorMsg(ex.getMessage());
+                operatorTrajectoryService.updateById(byId);
+            }
+        }
+        // 清除上下文
+        methodContext.remove();
+    }
+
+    @Before("@annotation(operatorTrajectory)")
+    public void doBefore(JoinPoint point,  OperatorTrajectory operatorTrajectory) {
+        Object obj = null;
+        String id = null;
+        if(operatorTrajectory.type().equals("C") || operatorTrajectory.type().equals("U")) {
+            //强转参数
+            obj = point.getArgs()[0];
+        }else if(operatorTrajectory.type().equals("D")){
+            id = point.getArgs()[0].toString();
+        }
+
+        com.jzg.entity.po.OperatorTrajectory trajectory = new com.jzg.entity.po.OperatorTrajectory();
+        String trajectoryId = IdGenerate.nextId();
+        trajectory.setId(trajectoryId);
+        trajectory.setOperatorType(operatorTrajectory.type());
+        trajectory.setSystemCode(operatorTrajectory.systemCode());
+        trajectory.setServiceTag(operatorTrajectory.serviceTag());
+
+        if(!Objects.isNull(obj)) {
+            trajectory.setAfterJson(JSON.toJSONString(obj));
+        }
+        HistoryDataService historyDataService;
+        JSONObject jsonObject;
+        Object beforeData;
+
+
+        switch(operatorTrajectory.type()){
+            //创建
+            case "C":
+                operatorTrajectoryService.save(trajectory);
+                break;
+            //更新
+            case "U":
+                historyDataService = (HistoryDataService)applicationContext.getBean(operatorTrajectory.serviceTag());
+                jsonObject = JSON.parseObject(JSONObject.toJSONString(obj));
+                trajectory.setPrimaryValue(jsonObject.getString(operatorTrajectory.primary()));
+                beforeData = historyDataService.getHistoryData(jsonObject.getString(operatorTrajectory.primary()));
+                trajectory.setBeforeJson(JSON.toJSONString(beforeData));
+                operatorTrajectoryService.save(trajectory);
+                break;
+            //删除
+            case "D":
+                historyDataService = (HistoryDataService)applicationContext.getBean(operatorTrajectory.serviceTag() + "Impl");
+                beforeData = historyDataService.getHistoryData(id);
+                trajectory.setPrimaryValue(id);
+                trajectory.setBeforeJson(JSON.toJSONString(beforeData));
+                operatorTrajectoryService.save(trajectory);
+                break;
+
+        }
+        // 用于验证上下文
+        methodContext.set(new MethodContext(point.getSignature().getName(), trajectoryId));
+    }
+
+
+    private static class MethodContext {
+        private final String methodName;
+        private final String id;
+
+        public MethodContext(String methodName, String id) {
+            this.methodName = methodName;
+            this.id = id;
+        }
+
+        public String getMethodName() {
+            return methodName;
+        }
+
+        public String getId() {
+            return id;
+        }
+    }
+}

+ 9 - 0
commons/src/main/java/com/jzg/core/base/HistoryDataService.java

@@ -0,0 +1,9 @@
+package com.jzg.core.base;
+
+
+import com.jzg.core.page.HttpResult;
+
+public interface HistoryDataService {
+
+    public Object getHistoryData(String id);
+}

+ 41 - 0
commons/src/main/java/com/jzg/entity/po/OperatorTrajectory.java

@@ -0,0 +1,41 @@
+package com.jzg.entity.po;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 操作日志记录表 oper_log
+ * 
+ * @author dongxin
+ */
+@Data
+public class OperatorTrajectory {
+    private String id;
+
+    private String systemCode;
+
+    private String serviceTag;
+
+    private String primaryValue;
+
+    private String beforeJson;
+
+    private String afterJson;
+
+    private String createBy;
+
+    private String createByName;
+
+    private LocalDateTime createTime;
+
+    private String operatorType;
+
+    private Integer executeStatus;
+
+    private String errorMsg;
+
+
+}

+ 1 - 1
commons/src/main/java/com/jzg/exception/GlobalExceptionHandler.java

@@ -29,7 +29,7 @@ public class GlobalExceptionHandler {
     @ResponseBody
     public HttpResult exceptionGet(Exception e) {
         LOGGER.error("【系统异常】{}", e);
-        return HttpResult.error(-9999, "程序异常,请联系管理员");
+        return HttpResult.error(500, "程序异常,请联系管理员");
     }
 
 

+ 9 - 0
commons/src/main/java/com/jzg/mapper/OperatorTrajectoryMapper.java

@@ -0,0 +1,9 @@
+package com.jzg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.entity.po.OperatorTrajectory;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface OperatorTrajectoryMapper extends BaseMapper<OperatorTrajectory> {
+}

+ 17 - 0
commons/src/main/java/com/jzg/service/OperatorTrajectoryService.java

@@ -0,0 +1,17 @@
+package com.jzg.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.entity.po.OperatorTrajectory;
+
+import java.util.List;
+
+/**
+ * 操作日志 服务层
+ * 
+ * @author dongxin
+ */
+public interface OperatorTrajectoryService extends IService<OperatorTrajectory>
+{
+
+}

+ 17 - 0
commons/src/main/java/com/jzg/service/impl/OperatorTrajectoryServiceImpl.java

@@ -0,0 +1,17 @@
+package com.jzg.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.core.base.HistoryDataService;
+import com.jzg.core.page.HttpResult;
+import com.jzg.entity.po.OperatorTrajectory;
+import com.jzg.entity.vo.RoleMenuVo;
+import com.jzg.mapper.OperatorTrajectoryMapper;
+import com.jzg.service.OperatorTrajectoryService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class OperatorTrajectoryServiceImpl extends ServiceImpl<OperatorTrajectoryMapper, OperatorTrajectory> implements OperatorTrajectoryService {
+
+}

+ 1 - 1
commons/src/main/java/com/jzg/utils/ImageUtil.java → commons/src/main/java/com/jzg/util/ImageUtil.java

@@ -1,4 +1,4 @@
-package com.jzg.utils;
+package com.jzg.util;
 
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;

+ 186 - 0
commons/src/main/java/com/jzg/util/idgen/IdGenerate.java

@@ -0,0 +1,186 @@
+/**
+ * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
+ */
+package com.jzg.util.idgen;
+
+
+import java.security.SecureRandom;
+import java.util.UUID;
+
+
+/**
+ * 封装各种生成唯一性ID算法的工具类.
+ *
+ * @author ThinkGem
+ * @version 2014-8-19
+ */
+public class IdGenerate {
+
+    private static SecureRandom random = new SecureRandom();
+    private static IdWorker idWorker = new IdWorker(-1, -1);
+
+    /**
+     * 生成UUID, 中间无-分割.
+     */
+    public static String uuid() {
+        return UUID.randomUUID().toString().replaceAll("-", "");
+    }
+
+    /**
+     * 使用SecureRandom随机生成Long.
+     */
+    public static long randomLong() {
+        return Math.abs(random.nextLong());
+    }
+
+//	/**
+//	 * 基于Base62编码的SecureRandom随机生成bytes.
+//	 */
+//	public static String randomBase62(int length) {
+//		byte[] randomBytes = new byte[length];
+//		random.nextBytes(randomBytes);
+//		return EncodeUtils.encodeBase62(randomBytes);
+//	}
+
+    /**
+     * 获取新唯一编号(18为数值)
+     * 来自于twitter项目snowflake的id产生方案,全局唯一,时间有序。
+     * 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
+     */
+    public static String nextId() {
+        return String.valueOf(idWorker.nextId());
+    }
+
+    /**
+     * 获取新代码编号
+     */
+    public static String nextCode(String code) {
+        if (code != null) {
+            String str = code.trim();
+            int len = str.length() - 1;
+            int lastNotNumIndex = 0;
+            for (int i = len; i >= 0; i--) {
+                if (!(str.charAt(i) >= '0' && str.charAt(i) <= '9')) {
+                    lastNotNumIndex = i;
+                    break;
+                }
+            }
+            // 如果最后一位是数字,并且last索引位置还在最后,则代表是纯数字,则最后一个不是数字的索引为-1
+            if ((str.charAt(len) >= '0' && str.charAt(len) <= '9') && (lastNotNumIndex == len)) {
+                lastNotNumIndex = -1;
+            }
+            String prefix = str.substring(0, lastNotNumIndex + 1);
+            String numStr = str.substring(lastNotNumIndex + 1, str.length());
+            long num = Long.parseLong(numStr);
+//			System.out.println("处理前:"+str);
+            str = prefix + padLeft(String.valueOf(num + 1), numStr.length(), '0');
+//			System.out.println("处理后:"+str);
+            return str;
+        }
+        return null;
+    }
+
+    /**
+     * 获取新代码编号
+     * code: 当前的编号 比如 x113x3423009
+     * num: 最后几位是序顺号 比如3  那个上面的那个就返回:x113x3423010
+     */
+    public static String nextCode(String code, int num) {
+        if (code != null) {
+            String str = code.trim();
+            int lastNotNumIndex = str.length() - num;
+            String prefix = str.substring(0, lastNotNumIndex);
+            long newNo = Long.parseLong(str.substring(lastNotNumIndex)) + 1;
+            String newNoStr = String.format("%0" + num + "d", newNo);
+
+
+//			System.out.println("处理前:"+str);
+//			str = prefix + newNoStr;
+
+//			System.out.println("处理后:"+str);
+            return prefix + newNoStr;
+        }
+        return null;
+    }
+
+
+    /**
+     * @作者 尧
+     * @功能 String左对齐
+     */
+    public static String padLeft(String src, int len, char ch) {
+        int diff = len - src.length();
+        if (diff <= 0) {
+            return src;
+        }
+
+        char[] charr = new char[len];
+        System.arraycopy(src.toCharArray(), 0, charr, 0, src.length());
+        for (int i = src.length(); i < len; i++) {
+            charr[i] = ch;
+        }
+        return new String(charr);
+    }
+
+    /**
+     * @作者 尧
+     * @功能 String右对齐
+     */
+    public static String padRight(String src, int len, char ch) {
+        int diff = len - src.length();
+        if (diff <= 0) {
+            return src;
+        }
+
+        char[] charr = new char[len];
+        System.arraycopy(src.toCharArray(), 0, charr, diff, src.length());
+        for (int i = 0; i < diff; i++) {
+            charr[i] = ch;
+        }
+        return new String(charr);
+    }
+
+    //好像不对,但思路可借签
+    public static void main(String[] args) {
+        System.out.println(nextCode("zgd", 3));
+        System.out.println(uuid());
+        System.out.println(nextId());
+        System.out.println(nextCode("8"));
+        System.out.println(nextCode("09"));
+        System.out.println(nextCode("009"));
+        System.out.println(nextCode("E09"));
+        System.out.println(nextCode("EC09"));
+        System.out.println(nextCode("EC0101"));
+        System.out.println(nextCode("EC0109"));
+        System.out.println(nextCode("EC02T03"));
+        System.out.println(nextCode("EC02T099"));
+        System.out.println(nextCode("EC02T100"));
+//		System.out.println(nextCode("EC02T10A"));
+//		// 数值型ID重复验证测试
+//		Set<String> set = SetUtils.newHashSet();
+//		try{
+//			for (int i=0; i<100; i++){
+//				String id = String.valueOf(nextId());
+//				if (set.contains(id)){
+//					throw new Exception(id + " exists");
+//				}
+//				set.add(id);
+//				System.out.println(id);
+//				Thread.sleep(100);
+//			}
+//		}catch (Exception e) {
+//			e.printStackTrace();
+//		}
+
+        String nc = nextCode("x113x3423009", 3);
+        System.out.println(nc);
+
+        nc = nextCode("x113x34231999", 4);
+        System.out.println(nc);
+    }
+
+}
+
+
+
+

+ 160 - 0
commons/src/main/java/com/jzg/util/idgen/IdWorker.java

@@ -0,0 +1,160 @@
+/**
+ * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
+ */
+package com.jzg.util.idgen;
+
+
+import java.util.Random;
+
+/**
+ * 来自于twitter项目snowflake的id产生方案,全局唯一,时间有序。
+ * 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
+ * https://github.com/twitter/snowflake/blob/scala_28/src/main/
+ * scala/com/twitter/service/snowflake/IdWorker.scala
+ */
+public class IdWorker {
+
+    private final static long twepoch = 1288834974657L;
+    // 机器标识位数
+    private final static long workerIdBits = 5L;
+    // 数据中心标识位数
+    private final static long datacenterIdBits = 5L;
+    // 机器ID最大值
+    private final static long maxWorkerId = -1L ^ (-1L << workerIdBits);
+    // 数据中心ID最大值
+    private final static long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
+    // 毫秒内自增位
+    private final static long sequenceBits = 12L;
+    // 机器ID偏左移12位
+    private final static long workerIdShift = sequenceBits;
+    // 数据中心ID左移17位
+    private final static long datacenterIdShift = sequenceBits + workerIdBits;
+    // 时间毫秒左移22位
+    private final static long timestampLeftShift = sequenceBits + workerIdBits
+            + datacenterIdBits;
+
+    private final static long sequenceMask = -1L ^ (-1L << sequenceBits);
+
+    private static long lastTimestamp = -1L;
+
+    private long sequence = 0L;
+    private final long workerId;
+    private final long datacenterId;
+
+    public IdWorker(long workerId, long datacenterId) {
+        if (workerId > maxWorkerId || workerId < 0) {
+            if (workerId == -1) {
+                this.workerId = new Random().nextInt((int) maxWorkerId);
+            } else {
+                throw new IllegalArgumentException(
+                        "worker Id can't be greater than %d or less than 0");
+            }
+        } else {
+            this.workerId = workerId;
+        }
+        if (datacenterId > maxDatacenterId || datacenterId < 0) {
+            if (datacenterId == -1) {
+                this.datacenterId = new Random().nextInt((int) maxDatacenterId);
+            } else {
+                throw new IllegalArgumentException(
+                        "datacenter Id can't be greater than %d or less than 0");
+            }
+        } else {
+            this.datacenterId = datacenterId;
+        }
+    }
+
+    public synchronized long nextId() {
+        long timestamp = timeGen();
+        if (timestamp < lastTimestamp) {
+            try {
+                throw new Exception(
+                        "Clock moved backwards.  Refusing to generate id for "
+                                + (lastTimestamp - timestamp) + " milliseconds");
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        if (lastTimestamp == timestamp) {
+            // 当前毫秒内,则+1
+            sequence = (sequence + 1) & sequenceMask;
+            if (sequence == 0) {
+                // 当前毫秒内计数满了,则等待下一秒
+                timestamp = tilNextMillis(lastTimestamp);
+            }
+        } else {
+            sequence = 0;
+        }
+        lastTimestamp = timestamp;
+        // ID偏移组合生成最终的ID,并返回ID
+        long nextId = ((timestamp - twepoch) << timestampLeftShift)
+                | (datacenterId << datacenterIdShift)
+                | (workerId << workerIdShift) | sequence;
+
+        return nextId;
+    }
+
+    private long tilNextMillis(final long lastTimestamp) {
+        long timestamp = this.timeGen();
+        while (timestamp <= lastTimestamp) {
+            timestamp = this.timeGen();
+        }
+        return timestamp;
+    }
+
+    private long timeGen() {
+        return System.currentTimeMillis();
+    }
+
+//	////////////  test  ////////////
+//
+//	public static void main(String[] args) throws Exception {
+//		final Set<Long> set = SetUtils.newHashSet();
+//
+//		final IdWorker w1 = new IdWorker(-1, -1);
+//		final IdWorker w2 = new IdWorker(-1, -1);
+//		final CyclicBarrier cdl = new CyclicBarrier(100);
+//
+//		for (int i = 0; i < 1000; i++) {
+//			new Thread(new Runnable() {
+//				@Override
+//				public void run() {
+//					try {
+//						cdl.await();
+//					} catch (InterruptedException e) {
+//						e.printStackTrace();
+//					} catch (BrokenBarrierException e) {
+//						e.printStackTrace();
+//					}
+//
+//					// id
+//					Long id = w1.nextId();
+//					if (set.contains(id)){
+//						System.out.println(id + " exists");
+//					}
+//					set.add(id);
+//					System.out.println(id);
+//
+//					// id2
+//					Long id2 = w2.nextId();
+//					if (set.contains(id2)){
+//						System.out.println(id2 + " exists");
+//					}
+//					set.add(id2);
+//					System.out.println(id2);
+//				}
+//			}).start();
+//		}
+//		try {
+//			TimeUnit.SECONDS.sleep(5);
+//		} catch (InterruptedException e) {
+//			e.printStackTrace();
+//		}
+//	}
+
+}
+
+
+
+

+ 1 - 6
gateway/pom.xml

@@ -16,12 +16,7 @@
             <artifactId>spring-cloud-starter-gateway</artifactId>
             <version>3.1.2</version>
         </dependency>
-        <dependency>
-            <groupId>com.jzg</groupId>
-            <artifactId>commons</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>compile</scope>
-        </dependency>
+
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-gateway-server</artifactId>

+ 1 - 1
gateway/src/main/java/com/jzg/GateWayApplication.java

@@ -4,7 +4,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 
-@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+@SpringBootApplication(exclude ={DataSourceAutoConfiguration.class},scanBasePackages = "com.jzg")
 public class GateWayApplication {
 
     public static void main(String[] args) {

+ 7 - 7
gateway/src/main/java/com/jzg/config/AopConfig.java

@@ -1,6 +1,6 @@
 package com.jzg.config;
 
-import com.jzg.aop.aspect.PermissionAspect;
+//import com.jzg.aop.aspect.PermissionAspect;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -8,10 +8,10 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class AopConfig {
 
-    //禁止 permission 切面
-    @Bean
-    @ConditionalOnProperty(name = "aop.permission.enabled", havingValue = "true")
-    public PermissionAspect permissionAspect() {
-        return new PermissionAspect();
-    }
+//    //禁止 permission 切面
+//    @Bean
+//    @ConditionalOnProperty(name = "aop.permission.enabled", havingValue = "true")
+//    public PermissionAspect permissionAspect() {
+//        return new PermissionAspect();
+//    }
 }

+ 2 - 8
gateway/src/main/java/com/jzg/filter/AuthFilter.java

@@ -1,17 +1,11 @@
 package com.jzg.filter;
 
-import com.jzg.aop.PremissionCheck;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.context.ApplicationContext;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.gateway.filter.GatewayFilter;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.context.ApplicationContext;
 import org.springframework.core.annotation.Order;
-import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Mono;
 @Component

+ 14 - 0
platform/pom.xml

@@ -41,6 +41,20 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-data-27</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <finalName>platform</finalName>

+ 18 - 0
platform/src/main/java/com/jzg/controller/SysUserController.java

@@ -0,0 +1,18 @@
+package com.jzg.controller;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * 系统用户管理
+ */
+@Tag(name="用户接口")
+@RestController
+@RequestMapping("/userRole")
+public class SysUserController {
+
+
+
+}

+ 17 - 17
pom.xml

@@ -52,23 +52,6 @@
       <artifactId>spring-boot-starter-aop</artifactId>
     </dependency>
 
-    <dependency>
-      <groupId>org.redisson</groupId>
-      <artifactId>redisson</artifactId>
-      <version>${redisson.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.redisson</groupId>
-      <artifactId>redisson-spring-boot-starter</artifactId>
-      <version>${redisson.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.redisson</groupId>
-      <artifactId>redisson-spring-data-27</artifactId>
-      <version>${redisson.version}</version>
-    </dependency>
-
     <!-- fastjson -->
     <dependency>
       <groupId>com.alibaba</groupId>
@@ -80,6 +63,23 @@
   <dependencyManagement>
     <dependencies>
 
+      <dependency>
+        <groupId>org.redisson</groupId>
+        <artifactId>redisson</artifactId>
+        <version>${redisson.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.redisson</groupId>
+        <artifactId>redisson-spring-boot-starter</artifactId>
+        <version>${redisson.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.redisson</groupId>
+        <artifactId>redisson-spring-data-27</artifactId>
+        <version>${redisson.version}</version>
+      </dependency>
+
       <!--swagger -->
       <dependency>
         <groupId>org.springdoc</groupId>