lishuangjiang@potevio.com 1 tahun lalu
induk
melakukan
e9ca91f766

+ 1 - 2
iot-common-core/src/main/java/cc/iotkit/common/enums/ErrCode.java

@@ -1,5 +1,4 @@
 package cc.iotkit.common.enums;
-
 /**
  * @author :tfd
  * 异常枚举类
@@ -138,4 +137,4 @@ public enum ErrCode implements IEnum {
     public String getValue() {
         return this.message;
     }
-}
+}

+ 10 - 3
iot-common-oss/src/main/java/cc/iotkit/common/oss/core/OssClient.java

@@ -89,7 +89,10 @@ public class OssClient {
             client.createBucket(createBucketRequest);
             client.setBucketPolicy(bucketName, getPolicy(bucketName, accessPolicy.getPolicyType()));
         } catch (Exception e) {
-            throw new OssException("创建Bucket失败, 请核对配置信息:[" + e.getMessage() + "]");
+            if (e.getMessage().contains("Your previous request to create the named bucket succeeded and you already own it")) {
+                return;
+            }
+            throw new OssException("创建Bucket失败, 请核对配置信息:[" + e.getMessage() + "]", e);
         }
     }
 
@@ -110,7 +113,7 @@ public class OssClient {
             putObjectRequest.setCannedAcl(getAccessPolicy().getAcl());
             client.putObject(putObjectRequest);
         } catch (Exception e) {
-            throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]");
+            throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]", e);
         }
         return UploadResult.builder().url(getUrl() + "/" + path).filename(path).build();
     }
@@ -175,7 +178,11 @@ public class OssClient {
         if (StringUtils.isNotBlank(prefix)) {
             path = prefix + "/" + path;
         }
-        return path + suffix;
+        path = path + suffix;
+        if (configKey.equals("oss-embed")) {
+            return path.replace("/", "_");
+        }
+        return path;
     }
 
 

+ 4 - 0
iot-common-oss/src/main/java/cc/iotkit/common/oss/exception/OssException.java

@@ -15,4 +15,8 @@ public class OssException extends RuntimeException {
         super(msg);
     }
 
+    public OssException(String msg, Exception e) {
+        super(msg, e);
+    }
+
 }

+ 6 - 0
iot-common-oss/src/main/java/cc/iotkit/common/oss/properties/OssProperties.java

@@ -1,6 +1,9 @@
 package cc.iotkit.common.oss.properties;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * OSS对象存储 配置属性
@@ -8,6 +11,9 @@ import lombok.Data;
  * @author Lion Li
  */
 @Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
 public class OssProperties {
 
     /**

+ 1 - 1
iot-common-satoken/src/main/java/cc/iotkit/common/satoken/config/SaTokenConfig.java

@@ -46,7 +46,7 @@ public class SaTokenConfig implements WebMvcConfigurer {
         List<String> swaggerUrls = List.of("/doc.html","/favicon.ico", "/webjars/**", "/resources/**"
                 , "/swagger-resources/**", "/swagger-ui.html/**");
 
-        List loginUrls = List.of("/code", "/auth/tenant/list", "/auth/login", "/auth/logout");
+        List loginUrls = List.of("/code", "/auth/tenant/list", "/auth/login", "/auth/logout","/iot-oss/**");
         List<String> openApiUrls = List.of( "/openapi/v1/getToken");
 
         List<String> excludeUrls = new ArrayList<>();

+ 2 - 1
iot-common-satoken/src/main/java/cc/iotkit/common/satoken/utils/LoginHelper.java

@@ -143,7 +143,8 @@ public class LoginHelper {
      * 获取部门ID
      */
     public static Long getDeptId() {
-        return getLoginUser().getDeptId();
+
+        return getLoginUser()==null?-1L:getLoginUser().getDeptId();
     }
 
     /**

+ 6 - 0
iot-common-tenant/src/main/java/cc/iotkit/common/tenant/aspect/TenantFilterAspect.java

@@ -2,6 +2,8 @@ package cc.iotkit.common.tenant.aspect;
 
 
 import cc.iotkit.common.satoken.utils.LoginHelper;
+import cc.iotkit.common.tenant.helper.TenantHelper;
+import cc.iotkit.common.utils.StringUtils;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Pointcut;
@@ -25,6 +27,10 @@ public class TenantFilterAspect {
     public void afterOpenSession(Object session) {
         if (session instanceof Session) {
             String tenantId = LoginHelper.getTenantId();
+            String dynamic = TenantHelper.getDynamic();
+            if (StringUtils.isNotBlank(dynamic)) {
+                tenantId = dynamic;
+            }
             if (tenantId != null && !tenantId.equals("000000")) {
                 org.hibernate.Filter filter = ((Session) session).enableFilter("tenantFilter");
                 filter.setParameter("tenantId", tenantId);

+ 1 - 25
iot-common-tenant/src/main/java/cc/iotkit/common/tenant/helper/TenantHelper.java

@@ -13,11 +13,6 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-/**
- * 租户助手
- *
- * @author Lion Li
- */
 @Slf4j
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class TenantHelper {
@@ -26,19 +21,11 @@ public class TenantHelper {
 
     private static final ThreadLocal<String> TEMP_DYNAMIC_TENANT = new TransmittableThreadLocal<>();
 
-    /**
-     * 租户功能是否启用
-     */
+
     public static boolean isEnable() {
         return Convert.toBool(SpringUtils.getProperty("tenant.enable"), false);
     }
 
-
-    /**
-     * 设置动态租户(一直有效 需要手动清理)
-     * <p>
-     * 如果为非web环境 那么只在当前线程内生效
-     */
     public static void setDynamic(String tenantId) {
         if (!SpringMVCUtil.isWeb()) {
             TEMP_DYNAMIC_TENANT.set(tenantId);
@@ -49,11 +36,6 @@ public class TenantHelper {
         SaHolder.getStorage().set(cacheKey, tenantId);
     }
 
-    /**
-     * 获取动态租户(一直有效 需要手动清理)
-     * <p>
-     * 如果为非web环境 那么只在当前线程内生效
-     */
     public static String getDynamic() {
         if (!SpringMVCUtil.isWeb()) {
             return TEMP_DYNAMIC_TENANT.get();
@@ -68,9 +50,6 @@ public class TenantHelper {
         return tenantId;
     }
 
-    /**
-     * 清除动态租户
-     */
     public static void clearDynamic() {
         if (!SpringMVCUtil.isWeb()) {
             TEMP_DYNAMIC_TENANT.remove();
@@ -81,9 +60,6 @@ public class TenantHelper {
         SaHolder.getStorage().delete(cacheKey);
     }
 
-    /**
-     * 获取当前租户id(动态租户优先)
-     */
     public static String getTenantId() {
         String tenantId = TenantHelper.getDynamic();
         if (StringUtils.isBlank(tenantId)) {

+ 7 - 11
iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java

@@ -3,18 +3,12 @@ package cc.iotkit.common.tenant.listener;
 
 import cc.iotkit.common.satoken.utils.LoginHelper;
 import cc.iotkit.common.tenant.dao.TenantAware;
+import cc.iotkit.common.tenant.helper.TenantHelper;
+import cc.iotkit.common.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 
 import javax.persistence.PrePersist;
 import javax.persistence.PreRemove;
-import javax.persistence.PreUpdate;
-
-/**
- * 类描述...
- *
- * @author Tiger Chen
- * created on 2023/7/14 20:50
- */
 
 @Slf4j
 public class TenantListener {
@@ -23,13 +17,15 @@ public class TenantListener {
     @PreRemove
     @PrePersist
     public void setTenant(TenantAware entity) {
-        final String tenantId = LoginHelper.getTenantId();
+        String tenantId = LoginHelper.getTenantId();
         final Long createDept = LoginHelper.getDeptId();
+        String dynamic = TenantHelper.getDynamic();
+        if (StringUtils.isNotBlank(dynamic)) {
+            tenantId = dynamic;
+        }
         if (!"000000".equals(tenantId) && tenantId != null) {
             entity.setTenantId(tenantId);
         }
         entity.setCreateDept(createDept);
     }
-
-
 }

+ 2 - 1
iot-common-web/src/main/java/cc/iotkit/common/web/handler/GlobalExceptionHandler.java

@@ -21,11 +21,12 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 
 @Slf4j
-@ControllerAdvice
+@ControllerAdvice(annotations = RestController.class)
 public class GlobalExceptionHandler {
 
     @ExceptionHandler(Exception.class)

+ 4 - 0
iot-common-web/src/main/java/cc/iotkit/common/web/handler/ResponseResultHandler.java

@@ -14,6 +14,7 @@ import cn.dev33.satoken.util.SaResult;
 import cn.hutool.core.util.IdUtil;
 import org.springframework.core.MethodParameter;
 import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.http.server.ServerHttpRequest;
@@ -27,6 +28,9 @@ import java.util.Map;
 public class ResponseResultHandler implements ResponseBodyAdvice<Object> {
     @Override
     public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
+        if (returnType.getParameterType() == ResponseEntity.class) {
+            return false;
+        }
         return !converterType.equals(StringHttpMessageConverter.class);
     }
 

+ 6 - 2
iot-message-bus/iot-message-event-bus/src/main/java/cc/iotkit/vertx/VertxMqConsumer.java

@@ -12,6 +12,7 @@ package cc.iotkit.vertx;
 import cc.iotkit.mq.ConsumerHandler;
 import cc.iotkit.mq.MqConsumer;
 import io.vertx.core.AbstractVerticle;
+import io.vertx.core.DeploymentOptions;
 import io.vertx.core.Handler;
 import io.vertx.core.eventbus.EventBus;
 import io.vertx.core.eventbus.Message;
@@ -25,12 +26,15 @@ public class VertxMqConsumer<T> implements MqConsumer<T> {
 
     private final MqConsumerVerticle<T> consumerVerticle;
 
-    private final CountDownLatch countDownLatch = new CountDownLatch(1);
+    private final CountDownLatch countDownLatch = new CountDownLatch(4);
 
     @SneakyThrows
     public VertxMqConsumer(Class<T> cls) {
         consumerVerticle = new MqConsumerVerticle<>(cls);
-        VertxManager.getVertx().deployVerticle(consumerVerticle, stringAsyncResult -> countDownLatch.countDown());
+//        VertxManager.getVertx().deployVerticle(consumerVerticle, stringAsyncResult -> countDownLatch.countDown());
+        for (int i = 0; i < 4; i++) {
+            VertxManager.getVertx().deployVerticle(consumerVerticle,new DeploymentOptions().setWorker(true), stringAsyncResult -> countDownLatch.countDown());
+        }
         //等待初始化穿完成
         countDownLatch.await();
     }

+ 1 - 0
iot-script-engine/src/main/java/cc/iotkit/script/IScriptEngine.java

@@ -11,5 +11,6 @@ public interface IScriptEngine {
     void invokeMethod(String methodName, Object... args);
 
     <T> T invokeMethod(TypeReference<T> type, String methodName, Object... args);
+    String invokeMethod(String methodName, String args);
 
 }

+ 14 - 0
iot-script-engine/src/main/java/cc/iotkit/script/JavaScriptEngine.java

@@ -71,6 +71,20 @@ public class JavaScriptEngine implements IScriptEngine {
         return JsonUtils.parseObject(json, type);
     }
 
+    @Override
+    public String invokeMethod(String methodName, String args) {
+        Value member = jsScript.getMember("invoke");
+        //通过调用invoke方法将目标方法返回结果转成json
+        Value rst = member.execute(methodName, JsonUtils.parseArray(args, Object.class));
+        String json = rst.asString();
+        log.info("invoke script={}, args={}, result={}", methodName, args, json);
+        //没有返回值
+        if (json == null || "null".equals(json)) {
+            return null;
+        }
+        return json;
+    }
+
     private static StringBuilder formatArgs(Object[] args) {
         StringBuilder sbArgs = new StringBuilder("[");
         //将入参转成json

+ 12 - 0
iot-script-engine/src/main/java/cc/iotkit/script/ScriptEngineFactory.java

@@ -36,6 +36,11 @@ public class ScriptEngineFactory {
                     public <T> T invokeMethod(TypeReference<T> type, String methodName, Object... args) {
                         return null;
                     }
+
+                    @Override
+                    public String invokeMethod(String methodName, String args) {
+                        return null;
+                    }
                 };
             case "js":
             default:
@@ -43,4 +48,11 @@ public class ScriptEngineFactory {
         }
     }
 
+    public static IScriptEngine getJsEngine(String script) {
+        JavaScriptEngine scriptEngine = new JavaScriptEngine();
+        scriptEngine.setScript(script);
+        return scriptEngine;
+    }
+
+
 }

+ 10 - 1
pom.xml

@@ -23,6 +23,9 @@
         <module>iot-common-web</module>
         <module>iot-common-websocket</module>
         <module>iot-common-thing</module>
+<!--        <module>iot-plugin-core</module>-->
+<!--        <module>iot-spring-brick</module>-->
+<!--        <module>iot-oss-embed</module>-->
     </modules>
 
     <properties>
@@ -38,11 +41,16 @@
         <lock4j.version>2.2.4</lock4j.version>
         <mapstruct-plus.version>1.3.1</mapstruct-plus.version>
         <lombok.version>1.18.26</lombok.version>
+        <aws-v2.version>2.24.9</aws-v2.version>
     </properties>
 
     <dependencyManagement>
         <dependencies>
-
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter</artifactId>
+                <version>${spring-boot.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter-web</artifactId>
@@ -325,6 +333,7 @@
                 <configuration>
                     <source>${java.version}</source>
                     <target>${java.version}</target>
+                    <encoding>utf8</encoding>
                 </configuration>
             </plugin>
         </plugins>