dengsixing 3 years ago
parent
commit
90b3403f9c

+ 3 - 0
4dkankan-common-utils/src/main/java/com/fdkankan/common/constant/ErrorCode.java

@@ -162,6 +162,9 @@ public enum ErrorCode {
     FAILURE_CODE_7016(7016, "仅支持.mp4格式文件"),
     FAILURE_CODE_7016(7016, "仅支持.mp4格式文件"),
     FAILURE_CODE_7017(7017, "场景同步失败"),
     FAILURE_CODE_7017(7017, "场景同步失败"),
     FAILURE_CODE_7018(7018, "压缩包内请勿包含文件夹"),
     FAILURE_CODE_7018(7018, "压缩包内请勿包含文件夹"),
+    FAILURE_CODE_7019(7019, "场景升级中,请勿重复升级"),
+    FAILURE_CODE_7020(7020, "场景已升级过,不能重复升级"),
+    FAILURE_CODE_7021(7021, "场景升级失败,请稍后重试!"),
 
 
 
 
 
 

+ 55 - 0
4dkankan-utils-fyun/src/main/java/com/fdkankan/fyun/oss/UploadToOssUtil.java

@@ -2,6 +2,7 @@ package com.fdkankan.fyun.oss;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.aliyun.oss.OSSClient;
 import com.aliyun.oss.OSSClient;
 import com.aliyun.oss.model.*;
 import com.aliyun.oss.model.*;
@@ -825,6 +826,22 @@ public class UploadToOssUtil {
 	}
 	}
 
 
 	/**
 	/**
+	 * 获取文件内容-阿里云
+	 * @param objectName
+	 * @return
+	 */
+	public boolean existOnAli(String objectName){
+		//创建oss客户端
+		OSSClient ossClient = new OSSClient(point, key, secrey);
+		// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
+		OSSObject ossObject = ossClient.getObject(bucket, objectName);
+		String key = ossObject.getKey();
+		if(StrUtil.isNotEmpty(key))
+			return true;
+		return false;
+	}
+
+	/**
 	 * 获取文件内容-亚马逊
 	 * 获取文件内容-亚马逊
 	 * @param bucketName
 	 * @param bucketName
 	 * @param objectName
 	 * @param objectName
@@ -864,6 +881,44 @@ public class UploadToOssUtil {
 	}
 	}
 
 
 	/**
 	/**
+	 * 获取文件内容-亚马逊
+	 * @param bucketName
+	 * @param objectName
+	 * @return
+	 */
+	public boolean existOnAws(String objectName){
+
+		BasicAWSCredentials awsCreds = new BasicAWSCredentials(s3key, s3secrey);
+		AmazonS3 s3 = AmazonS3ClientBuilder.standard()
+			.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
+			.withRegion(Regions.EU_WEST_2)
+			.build();
+		GetObjectRequest request  = new GetObjectRequest(bucket,objectName);
+		S3Object s3Object = s3.getObject(request);
+		String key = s3Object.getKey();
+		if(StrUtil.isNotEmpty(key))
+			return true;
+		return false;
+	}
+
+	/**
+	 * 判断key是否存在
+	 * @param key
+	 * @return
+	 */
+	public boolean existKey(String key){
+		StorageType storageType = StorageType.get(type);
+		switch (storageType){
+			case OSS:
+				return this.existOnAli(key);
+			case AWS:
+				return this.existOnAws(key);
+			default:
+				return false;
+		}
+	}
+
+	/**
 	 * 获取文件内容-本地
 	 * 获取文件内容-本地
 	 * @param objectName
 	 * @param objectName
 	 * @return
 	 * @return

+ 1 - 6
4dkankan-utils-mq/src/main/java/com/fdkankan/mq/message/BaseBuildSceneMessage.java

@@ -1,12 +1,7 @@
 package com.fdkankan.mq.message;
 package com.fdkankan.mq.message;
 
 
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.apache.rocketmq.common.message.Message;
-
 import java.io.Serializable;
 import java.io.Serializable;
+import lombok.Data;
 
 
 @Data
 @Data
 public class BaseBuildSceneMessage implements Serializable{
 public class BaseBuildSceneMessage implements Serializable{

+ 1 - 5
4dkankan-utils-mq/src/main/java/com/fdkankan/mq/message/BuildSceneMqMessage.java

@@ -1,11 +1,7 @@
 package com.fdkankan.mq.message;
 package com.fdkankan.mq.message;
 
 
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
 import java.util.Date;
 import java.util.Date;
+import lombok.Data;
 
 
 @Data
 @Data
 public class BuildSceneMqMessage extends BaseBuildSceneMessage {
 public class BuildSceneMqMessage extends BaseBuildSceneMessage {

+ 59 - 0
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/bean/BaseBuildSceneMessage.java

@@ -0,0 +1,59 @@
+package com.fdkankan.rabbitmq.bean;
+
+import java.io.Serializable;
+import lombok.Data;
+
+@Data
+public class BaseBuildSceneMessage implements Serializable{
+    /**
+     * 0:第一次计算;1:重新构建
+     */
+    private String rebuild = "0";
+
+    /**
+     * 0:非标定计算;1:标定计算
+     */
+    private String isStandardization;
+
+    /**
+     * 创建时间
+     */
+    private String createTime;
+
+    /**
+     * 执行结果接收消息队列名称
+     */
+    private String resultReceiverMqName;
+
+    public String getRebuild() {
+        return rebuild;
+    }
+
+    public void setRebuild(String rebuild) {
+        this.rebuild = rebuild;
+    }
+
+    public String getIsStandardization() {
+        return isStandardization;
+    }
+
+    public void setIsStandardization(String isStandardization) {
+        this.isStandardization = isStandardization;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getResultReceiverMqName() {
+        return resultReceiverMqName;
+    }
+
+    public void setResultReceiverMqName(String resultReceiverMqName) {
+        this.resultReceiverMqName = resultReceiverMqName;
+    }
+}

+ 142 - 0
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/bean/BuildSceneCallMessage.java

@@ -0,0 +1,142 @@
+package com.fdkankan.rabbitmq.bean;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class BuildSceneCallMessage extends BaseBuildSceneMessage {
+
+    private String unicode;
+    private String path;
+    private String prefix;
+    private String imgsName;
+    private String sceneNum;
+    private String isModel;
+    private String userName;
+    //不同的相机不同的方法
+    private String cameraType;
+    private String algorithm;
+    private String fileId;
+    private String cameraName;
+    //0表示有4k图,1表示没有
+    private String resolution;
+
+    //判断调用V2还是V3版本的算法
+    private String buildType;
+
+    private Long sceneProId;
+    private String sceneName;
+    private String webSite;
+    private Date sceneProCreateTime;
+    private Long userId;
+    private String dataSource;
+    private Integer sceneStatus;
+    private Integer PayStatus;
+    private String thumb;
+
+//    public String getUnicode() {
+//        return unicode;
+//    }
+//
+//    public void setUnicode(String unicode) {
+//        this.unicode = unicode;
+//    }
+//
+//    public String getPath() {
+//        return path;
+//    }
+//
+//    public void setPath(String path) {
+//        this.path = path;
+//    }
+//
+//    public String getPrefix() {
+//        return prefix;
+//    }
+//
+//    public void setPrefix(String prefix) {
+//        this.prefix = prefix;
+//    }
+//
+//    public String getImgsName() {
+//        return imgsName;
+//    }
+//
+//    public void setImgsName(String imgsName) {
+//        this.imgsName = imgsName;
+//    }
+//
+//    public String getSceneNum() {
+//        return sceneNum;
+//    }
+//
+//    public void setSceneNum(String sceneNum) {
+//        this.sceneNum = sceneNum;
+//    }
+//
+//    public String getIsModel() {
+//        return isModel;
+//    }
+//
+//    public void setIsModel(String isModel) {
+//        this.isModel = isModel;
+//    }
+//
+//    public String getUserName() {
+//        return userName;
+//    }
+//
+//    public void setUserName(String userName) {
+//        this.userName = userName;
+//    }
+//
+//    public String getCameraType() {
+//        return cameraType;
+//    }
+//
+//    public void setCameraType(String cameraType) {
+//        this.cameraType = cameraType;
+//    }
+//
+//    public String getAlgorithm() {
+//        return algorithm;
+//    }
+//
+//    public void setAlgorithm(String algorithm) {
+//        this.algorithm = algorithm;
+//    }
+//
+//    public String getFileId() {
+//        return fileId;
+//    }
+//
+//    public void setFileId(String fileId) {
+//        this.fileId = fileId;
+//    }
+//
+//    public String getCameraName() {
+//        return cameraName;
+//    }
+//
+//    public void setCameraName(String cameraName) {
+//        this.cameraName = cameraName;
+//    }
+//
+//    public String getResolution() {
+//        return resolution;
+//    }
+//
+//    public void setResolution(String resolution) {
+//        this.resolution = resolution;
+//    }
+//
+//    public String getBuildType() {
+//        return buildType;
+//    }
+//
+//    public void setBuildType(String buildType) {
+//        this.buildType = buildType;
+//    }
+
+}

+ 33 - 0
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/bean/BuildSceneFailDTMqMessage.java

@@ -0,0 +1,33 @@
+package com.fdkankan.rabbitmq.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ * 计算失败,发送钉钉MQ消息体实体
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/3/10
+ **/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BuildSceneFailDTMqMessage {
+
+    private String reason;
+
+    private String serverPath;
+
+    private String num;
+
+    private String hostName;
+
+    //是否调用算法服务失败
+    private Boolean isModelingFail;
+
+}

+ 40 - 0
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/bean/BuildSceneResultMqMessage.java

@@ -0,0 +1,40 @@
+package com.fdkankan.rabbitmq.bean;
+
+import java.util.Map;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BuildSceneResultMqMessage {
+
+    private String cameraType;
+
+    private String sceneCode;
+
+    private Long space;
+
+    private Integer payStatus;
+
+    private Long computeTime;
+
+    private String fileId;
+
+    private Boolean buildSuccess;
+
+    private Map<String, String> uploadFiles;
+
+    private String path;
+
+    private Integer pushChannel;
+
+    private String pushToken;
+
+    private String prefix;
+
+    private Integer videoVersion;
+}

+ 41 - 41
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/config/ExchangeConfig.java

@@ -1,41 +1,41 @@
-package com.fdkankan.rabbitmq.config;
-
-import com.fdkankan.rabbitmq.constant.RabbitMQConstant;
-import org.springframework.amqp.core.DirectExchange;
-import org.springframework.amqp.core.FanoutExchange;
-import org.springframework.amqp.core.TopicExchange;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class ExchangeConfig {
-
-    /**
-     * 交换机说明:
-     * durable="true" rabbitmq重启的时候不需要创建新的交换机
-     * auto-delete 表示交换机没有在使用时将被自动删除 默认是false
-     * direct交换器相对来说比较简单,匹配规则为:如果路由键匹配,消息就被投送到相关的队列
-     * topic交换器你采用模糊匹配路由键的原则进行转发消息到队列中
-     * fanout交换器中没有路由键的概念,他会把消息发送到所有绑定在此交换器上面的队列中。
-     */
-    @Bean(name = RabbitMQConstant.EXCHANGE_DIRECT)
-    public DirectExchange directExchange() {
-        return new DirectExchange(RabbitMQConstant.EXCHANGE_DIRECT, true, false);
-    }
-
-    @Bean(name = RabbitMQConstant.EXCHANGE_WORK)
-    public DirectExchange workExchange() {
-        return new DirectExchange(RabbitMQConstant.EXCHANGE_WORK, true, false);
-    }
-
-    @Bean(name = RabbitMQConstant.EXCHANGE_TOPIC)
-    public TopicExchange topicExchange() {
-        return new TopicExchange(RabbitMQConstant.EXCHANGE_TOPIC, true, false);
-    }
-
-    @Bean(name = RabbitMQConstant.EXCHANGE_FANOUT)
-    public FanoutExchange fanoutExchange() {
-        return new FanoutExchange(RabbitMQConstant.EXCHANGE_FANOUT, true, false);
-    }
-
-}
+//package com.fdkankan.rabbitmq.config;
+//
+//import com.fdkankan.rabbitmq.constant.RabbitMQConstant;
+//import org.springframework.amqp.core.DirectExchange;
+//import org.springframework.amqp.core.FanoutExchange;
+//import org.springframework.amqp.core.TopicExchange;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//
+//@Configuration
+//public class ExchangeConfig {
+//
+//    /**
+//     * 交换机说明:
+//     * durable="true" rabbitmq重启的时候不需要创建新的交换机
+//     * auto-delete 表示交换机没有在使用时将被自动删除 默认是false
+//     * direct交换器相对来说比较简单,匹配规则为:如果路由键匹配,消息就被投送到相关的队列
+//     * topic交换器你采用模糊匹配路由键的原则进行转发消息到队列中
+//     * fanout交换器中没有路由键的概念,他会把消息发送到所有绑定在此交换器上面的队列中。
+//     */
+//    @Bean(name = RabbitMQConstant.EXCHANGE_DIRECT)
+//    public DirectExchange directExchange() {
+//        return new DirectExchange(RabbitMQConstant.EXCHANGE_DIRECT, true, false);
+//    }
+//
+//    @Bean(name = RabbitMQConstant.EXCHANGE_WORK)
+//    public DirectExchange workExchange() {
+//        return new DirectExchange(RabbitMQConstant.EXCHANGE_WORK, true, false);
+//    }
+//
+//    @Bean(name = RabbitMQConstant.EXCHANGE_TOPIC)
+//    public TopicExchange topicExchange() {
+//        return new TopicExchange(RabbitMQConstant.EXCHANGE_TOPIC, true, false);
+//    }
+//
+//    @Bean(name = RabbitMQConstant.EXCHANGE_FANOUT)
+//    public FanoutExchange fanoutExchange() {
+//        return new FanoutExchange(RabbitMQConstant.EXCHANGE_FANOUT, true, false);
+//    }
+//
+//}

+ 0 - 4
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/config/QueueConfig.java

@@ -1,9 +1,5 @@
 package com.fdkankan.rabbitmq.config;
 package com.fdkankan.rabbitmq.config;
 
 
-import com.fdkankan.rabbitmq.constant.RabbitMQConstant;
-import org.springframework.amqp.core.Queue;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 
 
 @Configuration
 @Configuration

+ 6 - 7
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/config/RabbitMqConfig.java

@@ -1,15 +1,11 @@
 package com.fdkankan.rabbitmq.config;
 package com.fdkankan.rabbitmq.config;
 
 
 import com.fdkankan.rabbitmq.callback.ProducerCallback;
 import com.fdkankan.rabbitmq.callback.ProducerCallback;
-import com.fdkankan.rabbitmq.constant.RabbitMQConstant;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.amqp.core.Binding;
-import org.springframework.amqp.core.BindingBuilder;
 import org.springframework.amqp.rabbit.connection.ConnectionFactory;
 import org.springframework.amqp.rabbit.connection.ConnectionFactory;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
 import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 
 
@@ -19,8 +15,8 @@ public class RabbitMqConfig {
 
 
     @Resource
     @Resource
     private QueueConfig queueConfig;
     private QueueConfig queueConfig;
-    @Resource
-    private ExchangeConfig exchangeConfig;
+//    @Resource
+//    private ExchangeConfig exchangeConfig;
     /**
     /**
      * 连接工厂
      * 连接工厂
      */
      */
@@ -87,8 +83,11 @@ public class RabbitMqConfig {
      * 第二种是消费接收确认:这种是确认消费者是否成功消费了队列中的消息。
      * 第二种是消费接收确认:这种是确认消费者是否成功消费了队列中的消息。
      */
      */
     @Bean
     @Bean
-    public RabbitTemplate rabbitTemplate() {
+    public RabbitTemplate rabbitTemplate(Jackson2JsonMessageConverter messageConverter) {
         RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
         RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
+
+        rabbitTemplate.setMessageConverter(messageConverter);
+
         // 消息发送失败返回到队列中, yml需要配置 publisher-returns: true
         // 消息发送失败返回到队列中, yml需要配置 publisher-returns: true
 //        rabbitTemplate.setMandatory(true);
 //        rabbitTemplate.setMandatory(true);
 
 

+ 18 - 0
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/util/RabbitMqProducer.java

@@ -1,8 +1,12 @@
 package com.fdkankan.rabbitmq.util;
 package com.fdkankan.rabbitmq.util;
 
 
 import com.fdkankan.rabbitmq.config.ModelingQueueConfig;
 import com.fdkankan.rabbitmq.config.ModelingQueueConfig;
+import com.rabbitmq.client.AMQP;
+import com.rabbitmq.client.AMQP.Queue.DeclareOk;
+import com.rabbitmq.client.Channel;
 import java.util.UUID;
 import java.util.UUID;
 import org.springframework.amqp.rabbit.connection.CorrelationData;
 import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.ChannelCallback;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
@@ -32,6 +36,20 @@ public class RabbitMqProducer {
         rabbitTemplate.convertAndSend(queue, content, correlationId);
         rabbitTemplate.convertAndSend(queue, content, correlationId);
     }
     }
 
 
+    /**
+     * 获取队列未被消费的消息数量
+     * @return
+     */
+    public int getMessageCount(String queueName) {
+        AMQP.Queue.DeclareOk declareOk = rabbitTemplate.execute(new ChannelCallback<DeclareOk>() {
+            public AMQP.Queue.DeclareOk doInRabbit(Channel channel) throws Exception {
+                return channel.queueDeclarePassive(queueName);
+            }
+        });
+
+        return declareOk.getMessageCount();
+    }
+
 
 
 
 
 }
 }

+ 10 - 0
4dkankan-utils-redis/src/main/java/com/fdkankan/redis/constant/RedisKey.java

@@ -9,6 +9,11 @@ public class RedisKey {
     public static final int EXPIRE_TIME_1_MINUTE = 60;
     public static final int EXPIRE_TIME_1_MINUTE = 60;
 
 
     /**
     /**
+     * 过期时间:5分钟
+     */
+    public static final int EXPIRE_TIME_5_MINUTE = 5*60;
+
+    /**
      * 过期时间:10分钟
      * 过期时间:10分钟
      */
      */
     public static final int EXPIRE_TIME_10_MINUTE = 10*60;
     public static final int EXPIRE_TIME_10_MINUTE = 10*60;
@@ -104,6 +109,11 @@ public class RedisKey {
      */
      */
     public static final String SCENE_DOWNLOADS_TASK_V4 = "scene:downloads:task:v4";
     public static final String SCENE_DOWNLOADS_TASK_V4 = "scene:downloads:task:v4";
 
 
+    /**
+     * 场景升级进度
+     */
+    public static final String scene_upgrade_progress_num = "scene:upgrade:progress:num:%s";
+
 
 
 
 
 
 

+ 10 - 0
4dkankan-utils-redis/src/main/java/com/fdkankan/redis/constant/RedisLockKey.java

@@ -88,6 +88,16 @@ public class RedisLockKey {
      */
      */
     public static String LOCK_SCENE_DOWNLOAD_ING = "lock:scene:downloads:ing";
     public static String LOCK_SCENE_DOWNLOAD_ING = "lock:scene:downloads:ing";
 
 
+    /**
+     * 加载场景中断下载列表锁
+     */
+    public static String LOCK_STARTUP_MODELING_SERVER = "lock:startup:modeling:server";
+
+    /**
+     * 加载场景中断下载列表锁
+     */
+    public static String LOCK_SCENE_UPGRADE_V4 = "lock:scene:upgrade:v4:num:%s";
+
 
 
 
 
 }
 }