Преглед на файлове

redistempplate 统一改成redisutil工具类

by su преди 3 години
родител
ревизия
b4f6cde713
променени са 40 файла, в които са добавени 2284 реда и са изтрити 1221 реда
  1. 6 0
      4dkankan-center-auth/pom.xml
  2. 3 0
      4dkankan-center-auth/src/main/java/com/fdkankan/auth/AuthApplication.java
  3. 3 3
      4dkankan-center-auth/src/main/java/com/fdkankan/auth/schedul/DeveloperSchedul.java
  4. 5 0
      4dkankan-center-modeling/pom.xml
  5. 70 70
      4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/config/MQProducerConfig.java
  6. 61 61
      4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/config/MQReceiverConfig.java
  7. 1 1
      4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/feign/UserFeign.java
  8. 672 0
      4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/receiver/BuildSceneMQListener.java
  9. 680 679
      4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/receiver/BuildSceneReceiver.java
  10. 6 0
      4dkankan-center-platform/pom.xml
  11. 4 3
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/agent/controller/api/AgentLoginController.java
  12. 11 10
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/agent/service/impl/AgentServiceImpl.java
  13. 5 4
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/order/service/impl/OrderServiceImpl.java
  14. 12 11
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/LoginService.java
  15. 7 6
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/MsgService.java
  16. 10 9
      4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/RegisterService.java
  17. 1 1
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/SceneApplication.java
  18. 85 32
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/TestController.java
  19. 122 0
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/BuildSceneResultMQListener.java
  20. 32 0
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/TestMQListener.java
  21. 0 7
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/rocketmq/MQLogFormat.java
  22. 0 92
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/rocketmq/producer/MqSendMessage.java
  23. 0 70
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/rocketmq/producer/Producer.java
  24. 2 0
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneProService.java
  25. 21 16
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneFileBuildServiceImpl.java
  26. 22 7
      4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java
  27. 1 1
      4dkankan-center-scene/src/main/resources/bootstrap.yml
  28. 21 11
      4dkankan-common-mq/pom.xml
  29. 8 1
      4dkankan-common-mq/src/main/java/com/fdkankan/mq/message/BaseMQMessage.java
  30. 122 104
      4dkankan-common-mq/src/main/java/com/fdkankan/mq/message/BuildSceneMqMessage.java
  31. 30 0
      4dkankan-common-mq/src/main/java/com/fdkankan/mq/message/BuildSceneResultMqMessage.java
  32. 24 0
      4dkankan-common-mq/src/main/java/com/fdkankan/mq/message/MQBodyBean.java
  33. 173 0
      4dkankan-common-mq/src/main/java/com/fdkankan/mq/util/RocketMQProducer.java
  34. 6 5
      4dkankan-common-redis/src/main/java/com/fdkankan/redis/util/RedisUtil.java
  35. 6 0
      4dkankan-common/pom.xml
  36. 27 0
      4dkankan-common/src/main/java/com/fdkankan/common/constant/BuildStatus.java
  37. 5 4
      4dkankan-common/src/main/java/com/fdkankan/common/user/SSOLoginStore.java
  38. 15 3
      4dkankan-common/src/main/java/com/fdkankan/common/util/ComputerUtil.java
  39. 3 7
      4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/AppAuthFilter.java
  40. 2 3
      4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/TokenFilter.java

+ 6 - 0
4dkankan-center-auth/pom.xml

@@ -27,6 +27,12 @@
 
 		<dependency>
 			<groupId>com.fdkankan</groupId>
+			<artifactId>4dkankan-common-redis</artifactId>
+			<version>2.0.0</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.fdkankan</groupId>
 			<artifactId>4dkankan-pom</artifactId>
 			<version>2.0.0</version>
 		</dependency>

+ 3 - 0
4dkankan-center-auth/src/main/java/com/fdkankan/auth/AuthApplication.java

@@ -3,11 +3,14 @@ package com.fdkankan.auth;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.stereotype.Component;
 
 @SpringBootApplication
 @EnableScheduling
 @MapperScan("com.fdkankan.auth.mapper")
+@ComponentScan(basePackages = {"com.fdkankan.auth","com.fdkankan.redis"})
 public class AuthApplication {
 
 	public static void main(String[] args) {

+ 3 - 3
4dkankan-center-auth/src/main/java/com/fdkankan/auth/schedul/DeveloperSchedul.java

@@ -4,9 +4,9 @@ import com.alibaba.fastjson.JSON;
 import com.fdkankan.auth.entity.TmDeveloper;
 import com.fdkankan.auth.service.ITmDeveloperService;
 import com.fdkankan.common.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -21,7 +21,7 @@ public class DeveloperSchedul {
     private ITmDeveloperService tmDeveloperService;
 
     @Autowired
-    private RedisTemplate redisTemplate;
+    private RedisUtil redisUtil;
 
 
     /**
@@ -33,7 +33,7 @@ public class DeveloperSchedul {
         List<TmDeveloper> list = tmDeveloperService.list();
         list.stream().forEach(tmDeveloper -> {
             String key = String.format(RedisKey.TM_DEVELOPER, tmDeveloper.getAppId());
-            redisTemplate.opsForValue().set(key, JSON.toJSONString(tmDeveloper));
+            redisUtil.set(key, JSON.toJSONString(tmDeveloper));
         });
         log.info("-----从mysql中加载开发者信息表到redis缓存定时任务执行结束------");
 

+ 5 - 0
4dkankan-center-modeling/pom.xml

@@ -95,6 +95,11 @@
 			<artifactId>lombok</artifactId>
 		</dependency>
 
+		<dependency>
+			<groupId>cn.hutool</groupId>
+			<artifactId>hutool-all</artifactId>
+		</dependency>
+
 		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
 <!--		<dependency>-->
 <!--			<groupId>com.fasterxml.jackson.core</groupId>-->

+ 70 - 70
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/config/MQProducerConfig.java

@@ -1,70 +1,70 @@
-package com.fdkankan.modeling.config;
-
-import org.apache.rocketmq.client.exception.MQClientException;
-import org.apache.rocketmq.client.producer.DefaultMQProducer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class MQProducerConfig {
-
-    private static Logger log = LoggerFactory.getLogger(MQProducerConfig.class);
-
-    @Value("${rocketmq.name-srv-addr}")
-    private String nameSrvAddr;
-    @Value("${rocketmq.producer.group.testGrop}")
-    private String producerGroupName;
-    /**
-     * 消息最大大小,默认4M
-     */
-    @Value("${rocketmq.producer.maxMessageSize}")
-    private Integer maxMessageSize;
-    /**
-     * 消息发送超时时间,默认3秒
-     */
-    @Value("${rocketmq.producer.sendMsgTimeout}")
-    private Integer sendMsgTimeout;
-    /**
-     * 消息发送失败重试次数,默认2次
-     */
-    @Value("${rocketmq.producer.retryTimesWhenSendFailed}")
-    private Integer retryTimesWhenSendFailed;
-
-    /**
-     * 初始化向rocketmq发送普通消息的生产者
-     */
-    @Bean("ModelingProducer")
-    public DefaultMQProducer testProducer() throws MQClientException {
-        /*
-         * 一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例<br>
-         * 注意:ProducerGroupName需要由应用来保证唯一<br>
-         * ProducerGroup这个概念发送普通的消息时,作用不大,但是发送分布式事务消息时,比较关键,
-         * 因为服务器会回查这个Group下的任意一个Producer
-         */
-        DefaultMQProducer producer = new DefaultMQProducer(producerGroupName);
-        producer.setInstanceName(producerGroupName);
-        producer.setNamesrvAddr(nameSrvAddr);
-        //设置 lnstanceName,当一个 Jvm 需要启动多个 Producer 的时候,通过设置不同的 InstanceName来区分,不设置的话系统使用默认名称“DEFAULT”
-//        producer.setInstanceName(properties.getProducerInstanceName());
-        producer.setVipChannelEnabled(false);
-        //发送消息超时时间,默认3000
-        producer.setSendMsgTimeout(sendMsgTimeout);
-        //发送消息失败重试次数,默认2
-        producer.setRetryTimesWhenSendAsyncFailed(retryTimesWhenSendFailed);
-        //消息最大长度 默认1024*1024*4(4M)
-        producer.setMaxMessageSize(maxMessageSize);
-        /*
-         * Producer对象在使用之前必须要调用start初始化,初始化一次即可<br>
-         * 注意:切记不可以在每次发送消息时,都调用start方法
-         */
-        producer.start();
-        log.info("RocketMq " + this + " Started.");
-        return producer;
-    }
-
-
-
-}
+//package com.fdkankan.modeling.config;
+//
+//import org.apache.rocketmq.client.exception.MQClientException;
+//import org.apache.rocketmq.client.producer.DefaultMQProducer;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//
+//@Configuration
+//public class MQProducerConfig {
+//
+//    private static Logger log = LoggerFactory.getLogger(MQProducerConfig.class);
+//
+//    @Value("${rocketmq.name-srv-addr}")
+//    private String nameSrvAddr;
+//    @Value("${rocketmq.producer.group.testGrop}")
+//    private String producerGroupName;
+//    /**
+//     * 消息最大大小,默认4M
+//     */
+//    @Value("${rocketmq.producer.maxMessageSize}")
+//    private Integer maxMessageSize;
+//    /**
+//     * 消息发送超时时间,默认3秒
+//     */
+//    @Value("${rocketmq.producer.sendMsgTimeout}")
+//    private Integer sendMsgTimeout;
+//    /**
+//     * 消息发送失败重试次数,默认2次
+//     */
+//    @Value("${rocketmq.producer.retryTimesWhenSendFailed}")
+//    private Integer retryTimesWhenSendFailed;
+//
+//    /**
+//     * 初始化向rocketmq发送普通消息的生产者
+//     */
+//    @Bean("ModelingProducer")
+//    public DefaultMQProducer testProducer() throws MQClientException {
+//        /*
+//         * 一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例<br>
+//         * 注意:ProducerGroupName需要由应用来保证唯一<br>
+//         * ProducerGroup这个概念发送普通的消息时,作用不大,但是发送分布式事务消息时,比较关键,
+//         * 因为服务器会回查这个Group下的任意一个Producer
+//         */
+//        DefaultMQProducer producer = new DefaultMQProducer(producerGroupName);
+//        producer.setInstanceName(producerGroupName);
+//        producer.setNamesrvAddr(nameSrvAddr);
+//        //设置 lnstanceName,当一个 Jvm 需要启动多个 Producer 的时候,通过设置不同的 InstanceName来区分,不设置的话系统使用默认名称“DEFAULT”
+////        producer.setInstanceName(properties.getProducerInstanceName());
+//        producer.setVipChannelEnabled(false);
+//        //发送消息超时时间,默认3000
+//        producer.setSendMsgTimeout(sendMsgTimeout);
+//        //发送消息失败重试次数,默认2
+//        producer.setRetryTimesWhenSendAsyncFailed(retryTimesWhenSendFailed);
+//        //消息最大长度 默认1024*1024*4(4M)
+//        producer.setMaxMessageSize(maxMessageSize);
+//        /*
+//         * Producer对象在使用之前必须要调用start初始化,初始化一次即可<br>
+//         * 注意:切记不可以在每次发送消息时,都调用start方法
+//         */
+//        producer.start();
+//        log.info("RocketMq " + this + " Started.");
+//        return producer;
+//    }
+//
+//
+//
+//}

+ 61 - 61
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/config/MQReceiverConfig.java

@@ -1,61 +1,61 @@
-package com.fdkankan.modeling.config;
-
-import com.fdkankan.modeling.receiver.BuildSceneReceiver;
-import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
-import org.apache.rocketmq.client.exception.MQClientException;
-import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
-import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-@Component
-public class MQReceiverConfig {
-    private static Logger logger = LoggerFactory.getLogger("programLog");
-
-    @Value("${rocketmq.name-srv-addr}")
-    private String nameSrvAddr;
-
-    @Value("${rocketmq.consumer.testGrop}")
-    private String consumerGroupName;
-
-    @Value("${rocketmq.topic.testGrop}")
-    private String topicName;
-
-    @Value("${rocketmq.tag.testGrop}")
-    private String tagName;
-
-    @Autowired
-    private BuildSceneReceiver buildSceneReceiver;
-
-    @PostConstruct
-    public void CalUserTradeAmountConsumer() throws MQClientException {
-        // Instantiate with specified consumer group name.
-        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroupName);
-
-        // Specify name server addresses.
-        consumer.setNamesrvAddr(nameSrvAddr);
-        consumer.setInstanceName(consumerGroupName);
-        //广播
-        consumer.setMessageModel(MessageModel.BROADCASTING);
-        //一次最大消费多少数量消息,与List<MessageExt>数组数量有关,默认为1
-        //  consumer.setConsumeThreadMax(batchMaxSize);
-        //设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费
-        //如果非第一次启动,那么按照上次消费的位置继续消费
-        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
-
-        // Subscribe one or more topics to consume.
-        consumer.subscribe(topicName, tagName);
-
-        // Register callback to execute on arrival of messages fetched from brokers.
-        consumer.registerMessageListener(buildSceneReceiver);
-
-        //Launch the consumer instance.
-        consumer.start();
-    }
-
-}
+//package com.fdkankan.modeling.config;
+//
+//import com.fdkankan.modeling.receiver.BuildSceneReceiver;
+//import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
+//import org.apache.rocketmq.client.exception.MQClientException;
+//import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
+//import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//
+//import javax.annotation.PostConstruct;
+//
+//@Component
+//public class MQReceiverConfig {
+//    private static Logger logger = LoggerFactory.getLogger("programLog");
+//
+//    @Value("${rocketmq.name-srv-addr}")
+//    private String nameSrvAddr;
+//
+//    @Value("${rocketmq.consumer.testGrop}")
+//    private String consumerGroupName;
+//
+//    @Value("${rocketmq.topic.testGrop}")
+//    private String topicName;
+//
+//    @Value("${rocketmq.tag.testGrop}")
+//    private String tagName;
+//
+//    @Autowired
+//    private BuildSceneReceiver buildSceneReceiver;
+//
+//    @PostConstruct
+//    public void CalUserTradeAmountConsumer() throws MQClientException {
+//        // Instantiate with specified consumer group name.
+//        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroupName);
+//
+//        // Specify name server addresses.
+//        consumer.setNamesrvAddr(nameSrvAddr);
+//        consumer.setInstanceName(consumerGroupName);
+//        //广播
+//        consumer.setMessageModel(MessageModel.BROADCASTING);
+//        //一次最大消费多少数量消息,与List<MessageExt>数组数量有关,默认为1
+//        //  consumer.setConsumeThreadMax(batchMaxSize);
+//        //设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费
+//        //如果非第一次启动,那么按照上次消费的位置继续消费
+//        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
+//
+//        // Subscribe one or more topics to consume.
+//        consumer.subscribe(topicName, tagName);
+//
+//        // Register callback to execute on arrival of messages fetched from brokers.
+//        consumer.registerMessageListener(buildSceneReceiver);
+//
+//        //Launch the consumer instance.
+//        consumer.start();
+//    }
+//
+//}

+ 1 - 1
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/feign/UserFeign.java

@@ -38,7 +38,7 @@ public class UserFeign {
         return JSONObject.parseObject(JSONObject.toJSONString(userData), User.class);
     }
 
-    public int updateUserUsedSpaceBySceneNum(Long userId, String projectNum) {
+    public int updateUserUsedSpaceBySceneNum(String projectNum) {
         ScenePro sceneProEntity = sceneProService.findBySceneNum(projectNum);
         if(sceneProEntity == null) {
             log.info("该场景不存在无法扣除容量,场景码为:" + projectNum);

+ 672 - 0
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/receiver/BuildSceneMQListener.java

@@ -0,0 +1,672 @@
+package com.fdkankan.modeling.receiver;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.util.ComputerUtil;
+import com.fdkankan.common.util.UploadToOssUtil;
+import com.fdkankan.modeling.constants.RedisKey;
+import com.fdkankan.modeling.constants.SysConstants;
+import com.fdkankan.modeling.entity.SceneFileBuild;
+import com.fdkankan.modeling.entity.ScenePro;
+import com.fdkankan.modeling.entity.SceneProExt;
+import com.fdkankan.modeling.push.PushMessageConfig;
+import com.fdkankan.modeling.utils.DingDingUtils;
+import com.fdkankan.modeling.utils.PushMsgUtil;
+import com.fdkankan.mq.message.BuildSceneMqMessage;
+import com.fdkankan.mq.message.BuildSceneResultMqMessage;
+import com.fdkankan.mq.util.RocketMQProducer;
+import com.fdkankan.platform.api.vo.User;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.utils.constant.ConstantFilePath;
+import com.fdkankan.utils.constant.ConstantUrl;
+import com.fdkankan.utils.utils.CreateObjUtil;
+import com.fdkankan.utils.utils.FileUtil;
+import com.fdkankan.utils.utils.FileUtils;
+import com.taobao.api.ApiException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.rocketmq.spring.annotation.MessageModel;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.*;
+
+import static com.fdkankan.modeling.push.PushMessageConfig.*;
+
+
+@Slf4j
+@Component
+@RocketMQMessageListener(
+        consumerGroup = "${rocketmq.consumer.group}",
+        topic = "${rocketmq.build-scene.topicName.topic-modeling-a}",
+        messageModel = MessageModel.BROADCASTING)
+public class BuildSceneMQListener implements RocketMQListener<String> {
+
+    @Value("${rocketmq.consumer.group}")
+    private String consumerGroup;
+
+    @Value("${rocketmq.build-scene.topicName.topic-modeling-a}")
+    private String topicName;
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    RedisTemplate redisTemplate;
+
+    private RestTemplate restTemplate = new RestTemplate();
+
+    @Value("${4dkk.laserService.host}")
+    private String laserHost;
+
+    @Value("${oss.type}")
+    private String ossType;
+
+    @Value("${oss.url.prefix}")
+    private String prefixAli;
+
+    @Resource
+    private UploadToOssUtil uploadUtils;
+
+    @Autowired
+    RocketMQProducer rocketMQProducer;
+
+    @Value("${rocketmq.build-scene-result.topicName.topic-modeling-a}")
+    private String buildSceneResultTopic;
+
+    @Override
+    public void onMessage(String message) {
+
+        BuildSceneMqMessage buildSceneMqMessage = JSONObject.parseObject(message, BuildSceneMqMessage.class);
+        log.info("开始处理消息,消费者组:{},主题名:{}, 消息内容:{}", consumerGroup, topicName, message);
+
+        process(buildSceneMqMessage);
+
+
+    }
+
+    public void process(BuildSceneMqMessage message) {
+        final ExecutorService exec = Executors.newFixedThreadPool(1);
+        Callable<String> call = (Callable<String>) () -> {
+            //开始执行耗时操作
+            try {
+                String key = RedisKey.SCENE_BUILDING + message.getSceneNum();
+                // 获取缓存锁,防止重复消费
+                Long building = redisUtil.incr(key, 1);
+                if (building.compareTo(1L) != 0) {
+                    log.error("场景正在构建中,退出构建,当前服务器id:{},参数:{}", SysConstants.hostName, JSONObject.toJSONString(message));
+                } else {
+                    redisTemplate.expire(key, Duration.of(SysConstants.modelTimeOut, ChronoUnit.HOURS));
+                }
+                //休眠2秒等待数据入库
+                Thread.sleep(2000L);
+                try {
+                    FileUtils.writeFile("/opt/hosts/running.txt", DateUtil.formatDateTime(new Date()));
+                    String tomcatLog = "scenenum:" + message.getSceneNum() + "\ntime:" + DateUtil.formatDateTime(new Date()) +
+                            " action:create hostname:" + SysConstants.hostName;
+                    //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
+                    FileWriter writer = new FileWriter("/mnt/elastic_log/tomcat" + "_" + message.getSceneNum() + ".log", true);
+                    writer.write(tomcatLog);
+                    writer.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+                buildScene(message);
+                redisUtil.del(key);
+                try {
+                    FileUtils.deleteFile("/opt/hosts/running.txt");
+                    String tomcatLog = "scenenum:" + message.getSceneNum() + "\ntime:" + DateUtil.formatDateTime(new Date()) +
+                            " action:delete hostname:" + SysConstants.hostName;
+                    //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
+                    FileWriter writer = new FileWriter("/mnt/elastic_log/tomcat" + "_" + message.getSceneNum() + "log", true);
+                    writer.write(tomcatLog);
+                    writer.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                this.handFail("计算失败", message);
+            }
+            log.info("场景生成好了***");
+            return "success";
+        };
+        Future<String> future = exec.submit(call);
+        try {
+            future.get(SysConstants.modelTimeOut, TimeUnit.HOURS); //任务处理超时时间设为 24个小时
+        } catch (TimeoutException ex) {
+            ex.printStackTrace();
+            StringWriter trace=new StringWriter();
+            ex.printStackTrace(new PrintWriter(trace));
+            log.error("超时了");
+            log.error(trace.toString());
+            FileUtils.deleteFile("/opt/hosts/running.txt");
+            future.cancel(true);
+            handFail("计算超时",message);
+        } catch (Exception e) {
+            e.printStackTrace();
+            StringWriter trace=new StringWriter();
+            e.printStackTrace(new PrintWriter(trace));
+            log.error(trace.toString());
+            FileUtils.deleteFile("/opt/hosts/running.txt");
+            future.cancel(true);
+            handFail("计算失败",message);
+        }
+
+    }
+
+    private void buildScene(BuildSceneMqMessage message){
+        boolean buildSuccess = Boolean.FALSE;
+        String projectNum = null;
+        SceneFileBuild sceneFileBuildEntity = null;
+        Long computeTime = null;//计算耗时
+        com.alibaba.fastjson.JSONObject videosJson = null;
+        buildSceneResultTopic = StrUtil.isNotBlank(message.getResultReceiverMqName()) ?
+                message.getResultReceiverMqName() : buildSceneResultTopic;
+        //该场景使用的容量
+        Long space = 0L;
+        //支付状态
+        int payStatus = 0;
+        String unicode = message.getUnicode();
+        String path = message.getPath();
+        String prefix = message.getPrefix();
+        String imgsName = message.getImgsName();
+        projectNum = message.getSceneNum();
+        String userName = message.getUserName();
+        //不同的相机不同的方法
+        String cameraType = message.getCameraType();
+        String algorithm = message.getAlgorithm();
+        String fileId = message.getFileId();
+        String cameraName = message.getCameraName();
+        //0表示有4k图,1表示没有
+        String resolution = message.getResolution();
+        //判断调用V2还是V3版本的算法
+        String buildType = ObjectUtils.isEmpty(message.getBuildType()) ? "V2" : message.getBuildType();
+        String sceneName = message.getSceneName();
+        String webSite = message.getWebSite();
+        Date createTime = message.getSceneProCreateTime();
+        Long userId = message.getUserId();
+        String dataSource = message.getDataSource();
+        Integer sceneStatus = message.getSceneStatus();
+        Integer sceneProPayStatus = message.getPayStatus();
+        Long sceneProId = message.getSceneProId();
+        String thumb = message.getThumb();
+
+        try{
+            if(StringUtils.equals(message.getIsStandardization(),"1")){
+                //表示标定算法
+                ComputerUtil.computerCalibration(message.getPath());
+                return;
+            }
+
+            Map<String, String> dataMap = ComputerUtil.getTypeString(cameraType, algorithm,
+                    resolution);
+            String splitType = dataMap.get("splitType");
+            String skyboxType = dataMap.get("skyboxType");
+            String dataDescribe = dataMap.get("dataDescribe");
+
+            log.info("用的算法是:"+algorithm);
+            log.info("用的相机是:"+ (Integer.parseInt(cameraType) < 4 ? "单球目" : "双球目(八目)"));
+            Map<String,String> map = new HashMap<>();
+
+            //4表示硬件部研发的双球目相机,其余为旧版本相机
+            if(Integer.parseInt(cameraType) < 3){
+
+                for(int i = 0;i<5;++i){
+                    try{
+                        FileUtils.downLoadFromUrl(prefix+imgsName+"?m="+new Date().getTime(), imgsName,
+                                path + File.separator + "capture");
+                        FileUtils.decompress(path + File.separator + "capture" +File.separator+imgsName,
+                                path + File.separator + "capture") ;
+                        break;
+                    }
+                    catch(Exception e){
+                        e.printStackTrace();
+                        StringWriter trace=new StringWriter();
+                        e.printStackTrace(new PrintWriter(trace));
+                        log.error(trace.toString());
+                        if(i<4)
+                        {
+                            FileUtils.deleteFile(path + File.separator + "capture" +File.separator+imgsName);
+                            FileUtils.delFolder(path + File.separator + "capture" +File.separator+"images");
+                        }
+                        Thread.sleep(10000);
+                    }
+                }
+
+                FileUtils.deleteFile(path + File.separator + "capture" +File.separator+"zip.Zip");
+
+                String data = FileUtils.readFile(path + File.separator + "capture" +File.separator+"data.fdage");
+                JSONObject dataJson = new JSONObject();
+                if(data!=null){
+                    dataJson = JSONObject.parseObject(data);
+                    if(dataJson.containsKey("imgs")){
+                        splitType = "SPLIT_V4";
+                    }
+                }
+                //生成project.json和data.json供算法部使用
+                ComputerUtil.createJson(path, splitType, skyboxType, dataDescribe, projectNum, path);
+                //计算模型并返回需要上传oss的文件集合
+                map = ComputerUtil.computer(projectNum, path, buildType);
+
+                uploadUtils.uploadMulFiles(map);
+                log.info("双目上完oss结束修改数据:"+projectNum);
+            } else {
+
+                //休眠1秒,否则可能获取不到场景资源
+                Thread.sleep(1000);
+                if(sceneProId == null){
+                    log.info(projectNum + ":场景不存在");
+                    handFail("场景不存在",message);
+                    return;
+                }
+
+                long start = System.currentTimeMillis();
+
+                //cameraType=5为新版本双目, cameraType=6为小红屋新版本双目
+                if(Integer.parseInt(cameraType) == 5 || Integer.parseInt(cameraType) == 6){
+                    path = ConstantFilePath.BUILD_MODEL_PATH + unicode;
+
+                    //下载zip包,并解压
+                    FileUtils.downLoadFromUrl(prefix + "/" + imgsName + "?m=" + System.currentTimeMillis(), imgsName, path + File.separator + "capture");
+                    FileUtils.decompress(path + File.separator + "capture" + File.separator + imgsName,
+                            path + File.separator + "capture") ;
+                    FileUtil.delFile(path + File.separator + "capture" + File.separator + imgsName);
+                }else if(Integer.parseInt(cameraType) == 14 ) {
+                    CreateObjUtil.ossUtilCp(ConstantFilePath.OSS_PREFIX + cameraName.replace("4DKKPRO_", "")
+                                    .replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator
+                                    + unicode + File.separator,
+                            ConstantFilePath.BUILD_MODEL_LASER_PATH + cameraName.replace("4DKKPRO_", "")
+                                    .replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator
+                                    + unicode + File.separator + "capture");
+                    path = ConstantFilePath.BUILD_MODEL_LASER_PATH + cameraName.replace("4DKKPRO_", "").replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator + unicode;
+                } else if(Integer.parseInt(cameraType) >= 4 ) {
+                    CreateObjUtil.ossUtilCp(ConstantFilePath.OSS_PREFIX + cameraName.replace("4DKKPRO_", "")
+                                    .replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator
+                                    + unicode + File.separator,
+                            ConstantFilePath.BUILD_MODEL_PATH + cameraName.replace("4DKKPRO_", "")
+                                    .replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator
+                                    + unicode + File.separator + "capture");
+                    path = ConstantFilePath.BUILD_MODEL_PATH + cameraName.replace("4DKKPRO_", "").replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator + unicode;
+                }
+                String data = FileUtils.readFile(path + File.separator + "capture" +File.separator+"data.fdage");
+                //获取data.fdage的内容
+                JSONObject dataJson = new JSONObject();
+                if(data!=null){
+                    dataJson = JSONObject.parseObject(data);
+                }
+                //判断是否计算过资源,若计算过删除缓存
+                File caches = new File(path + File.separator + "caches");
+                if(caches.exists()){
+                    for(File deleteFile : caches.listFiles()){
+                        if(new File(path + "_images").exists()){
+                            if(deleteFile.isDirectory()){
+                                FileUtils.delAllFile(deleteFile.getAbsolutePath());
+                            }else {
+                                FileUtils.deleteFile(deleteFile.getAbsolutePath());
+                            }
+                        }
+                        else if(!deleteFile.getAbsolutePath().contains("images")){
+                            if(deleteFile.isDirectory()){
+                                FileUtils.delAllFile(deleteFile.getAbsolutePath());
+                            }else {
+                                FileUtils.deleteFile(deleteFile.getAbsolutePath());
+                            }
+                        }
+                    }
+                }
+                if(new File(path + File.separator + "results").exists()){
+                    FileUtils.delAllFile(path + File.separator + "results");
+                }
+
+                //生成project.json和data.json供算法部使用
+                log.info("path:" + path);
+
+                if(dataJson.containsKey("videoVersion") && StringUtils.isNotEmpty(dataJson.getString("videoVersion")) && Integer.parseInt(dataJson.getString("videoVersion")) < 4){
+                    //v2版本使用4k算法
+                    skyboxType = "SKYBOX_V6";
+                }
+
+                ComputerUtil.createJson(path, splitType, skyboxType, dataDescribe, projectNum, path);
+                //计算模型并返回需要上传oss的文件集合
+                map = ComputerUtil.computer(projectNum, path, buildType);
+
+                if(Integer.parseInt(cameraType) == 5 || Integer.parseInt(cameraType) == 6){
+                    map.put(path + File.separator + "capture/stitch_params.txt", "data/data" + projectNum + "/stitch_params.txt");
+                }
+                map.put(path + File.separator + "capture/Up.xml", "data/data" + projectNum + "/Up.xml");
+                map.put(path + File.separator + "capture/Up2.xml", "data/data" + projectNum + "/Up2.xml");
+
+                if(Integer.parseInt(cameraType) == 13){
+                    //转台相机
+                    map.put(path + File.separator + "capture/Up.txt", "data/data" + projectNum + "/Up.txt");
+                    map.put(path + File.separator + "capture/Up2.txt", "data/data" + projectNum + "/Up2.txt");
+                }
+
+                uploadUtils.uploadMulFiles(map);
+                payStatus = 1;
+
+                File spaceFile = null;
+                for (String key : map.keySet()) {
+                    spaceFile = new File(key);
+                    if(spaceFile.exists()){
+                        space += spaceFile.length();
+                    }
+                }
+
+                log.info("八目上完oss结束修改数据:"+projectNum);
+
+                //获取upload中的video视频名称
+                String uploadData = FileUtils.readFile(path + File.separator + "results" +File.separator+"upload.json");
+                com.alibaba.fastjson.JSONObject uploadJson = null;
+                JSONArray array = null;
+                if(uploadData!=null) {
+                    uploadJson = com.alibaba.fastjson.JSONObject.parseObject(uploadData);
+                    array = uploadJson.getJSONArray("upload");
+                }
+                com.alibaba.fastjson.JSONObject fileJson = null;
+                String fileName = "";
+
+                //读取videos_hdr_param.json, 保存点位视频的value
+                Map<String, Object> videoMap = new HashMap<>();
+                String videosHdr = FileUtils.readFile(path + File.separator + "results/videos/videos_hdr_param.json");
+                JSONArray videoArray = null;
+                if(StringUtils.isNotEmpty(videosHdr)){
+                    videoArray = com.alibaba.fastjson.JSONObject.parseObject(videosHdr).getJSONArray("hdr_param");
+                }
+                if(videoArray != null){
+                    for(int i = 0, len = videoArray.size(); i < len; i++) {
+                        videoMap.put(videoArray.getJSONObject(i).getString("name"), videoArray.getJSONObject(i).getString("value"));
+                        if(videoArray.getJSONObject(i).containsKey("fov")){
+                            videoMap.put(videoArray.getJSONObject(i).getString("name") + "_fov", videoArray.getJSONObject(i).getString("fov"));
+                        }
+                    }
+                }
+
+                //计算ts文件的大小,并拼接成json格式
+                JSONArray jsonArray = new JSONArray();
+                com.alibaba.fastjson.JSONObject videoJson = null;
+                videosJson = new com.alibaba.fastjson.JSONObject();
+                long videoSize = 0L;
+                for(int i = 0, len = array.size(); i < len; i++) {
+                    fileJson = array.getJSONObject(i);
+                    fileName = fileJson.getString("file");
+                    if(fileJson.getIntValue("clazz") == 11 && fileName.contains(".mp4") && !fileName.contains("-ios.mp4")){
+                        videoJson = new com.alibaba.fastjson.JSONObject();
+                        videoJson.put("id", fileName.substring(
+                                0, fileName.lastIndexOf(".")).replace("videos/", ""));
+
+                        //如果ts文件存在,就计算ts大小
+                        if(new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).exists()){
+                            videoSize = new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).length();
+                            videoJson.put("tsSize", videoSize);
+                        }
+                        if(videoMap.containsKey(videoJson.get("id"))){
+                            videoJson.put("value", videoMap.get(videoJson.get("id")));
+                        }
+                        if(videoMap.containsKey(videoJson.get("id") + "_fov")){
+                            videoJson.put("blend_fov", videoMap.get(videoJson.get("id") + "_fov"));
+                        }else {
+                            videoJson.put("blend_fov", 7);
+                        }
+                        jsonArray.add(videoJson);
+                    }
+                }
+
+                videosJson.put("data", jsonArray);
+                if(dataJson.containsKey("videoVersion") && StringUtils.isNotEmpty(dataJson.getString("videoVersion")) && Integer.parseInt(dataJson.getString("videoVersion")) >= 4){
+                    videosJson.put("version", 3);
+                    if("oss".equals(ossType)){
+                        videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up.xml");
+                    }
+                    if("s3".equals(ossType)){
+                        videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up.xml");
+                    }
+                    if(Integer.parseInt(cameraType) == 13){
+                        //转台相机
+                        videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
+                    }
+                }else {
+                    videosJson.put("version", 1);
+                    if("oss".equals(ossType)){
+                        videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up2.xml");
+                    }
+                    if("s3".equals(ossType)){
+                        videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up2.xml");
+                    }
+
+                    if(Integer.parseInt(cameraType) == 13){
+                        //转台相机
+                        videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
+                    }
+                }
+
+                if(Integer.parseInt(cameraType) == 5 || Integer.parseInt(cameraType) == 6){
+                    videosJson.put("version", 1);
+                    if("oss".equals(ossType)){
+                        videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/stitch_params.txt");
+                    }
+                    if("s3".equals(ossType)){
+                        videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/stitch_params.txt");
+                    }
+                }
+
+                computeTime = (System.currentTimeMillis() - start) / 1000;
+
+                //更新scene.json里面的video数据
+                StringBuffer dataBuf = new StringBuffer()
+                        .append("data").append(File.separator)
+                        .append("data").append(projectNum)
+                        .append(File.separator);
+                StringBuffer dataBuffer = new StringBuffer(ConstantFilePath.SCENE_PATH).append(dataBuf.toString());
+                String strsceneInfos = FileUtils.readFile(dataBuffer.toString() + "scene.json");
+                com.alibaba.fastjson.JSONObject scenejson = new com.alibaba.fastjson.JSONObject();
+                if(strsceneInfos!=null){
+                    scenejson = com.alibaba.fastjson.JSONObject.parseObject(strsceneInfos);
+                }
+                scenejson.put("videos", videosJson.toJSONString());
+                FileUtils.writeFile(dataBuffer.toString() + "scene.json", scenejson.toString());
+
+                if (sceneFileBuildEntity != null){
+                    sceneFileBuildEntity.setBuildStatus(3);
+                }
+
+                //根据data.fdage推送计算完成的消息
+                log.info("推送消息,渠道是 {}, 手机token是 {}", dataJson.get("pushChannel"), dataJson.get("pushToken"));
+                if(dataJson.containsKey("pushChannel") && dataJson.containsKey("pushToken")){
+                    try{
+                        if(!"s3".equals(ossType)){
+                            PushMessageConfig demo = null;
+                            if(dataJson.getIntValue("pushChannel") == 0){
+
+                                if(Integer.parseInt(cameraType) == 10 || Integer.parseInt(cameraType) == 13){
+                                    //ios
+                                    log.info("IOS_KEY:{}, IOS_SECRET:{}", IOS_KEY_Z, IOS_SECRET_Z);
+                                    demo = new PushMessageConfig(IOS_KEY_Z, IOS_SECRET_Z);
+                                    demo.sendIOSUnicast(dataJson.getString("pushToken"),
+                                            "四维看看Minion", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
+                                            webSite);
+                                }else {
+                                    //ios
+                                    log.info("IOS_KEY:{}, IOS_SECRET:{}", IOS_KEY, IOS_SECRET);
+                                    demo = new PushMessageConfig(IOS_KEY, IOS_SECRET);
+                                    demo.sendIOSUnicast(dataJson.getString("pushToken"),
+                                            "四维看看Pro", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
+                                            webSite);
+                                }
+
+                            }else {
+                                if(Integer.parseInt(cameraType) == 10 || Integer.parseInt(cameraType) == 13){
+                                    //ios
+                                    //安卓
+                                    log.info("ANDROID_KEY:{}, ANDROID_SECRET:{}", ANDROID_KEY_Z, ANDROID_SECRET_Z);
+                                    demo = new PushMessageConfig(ANDROID_KEY_Z, ANDROID_SECRET_Z);
+                                    demo.sendAndroidUnicast2(dataJson.getString("pushToken"),
+                                            "四维看看Minion", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
+                                            webSite);
+                                }else {
+                                    //安卓
+                                    log.info("ANDROID_KEY:{}, ANDROID_SECRET:{}", ANDROID_KEY, ANDROID_SECRET);
+                                    demo = new PushMessageConfig(ANDROID_KEY, ANDROID_SECRET);
+                                    demo.sendAndroidUnicast(dataJson.getString("pushToken"),
+                                            "四维看看Pro", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
+                                            webSite);
+                                }
+                            }
+
+                        }else {
+                            PushMsgUtil.googlePushMsg(dataJson.getString("pushToken"),
+                                    sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
+                                    webSite);
+                        }
+                        log.info("消息推送结束!");
+                    }catch (Exception e){
+                        log.info("推送消息失败:");
+                        e.printStackTrace();
+                    }
+                }
+
+                //计算成功  激光转台相机推送
+                log.info("激光转台相机 同步 请求 ");
+                if(Integer.parseInt(cameraType) == 14){
+                    try {
+                        String title = "";
+                        if(StringUtils.isNotEmpty(sceneName)){
+                            title = sceneName;
+                        }
+//                        String dataSource = sceneProExt.getDataSource();
+                        String jgPath = dataSource;
+                        //创建目录
+                        if(dataSource.lastIndexOf("/")!=-1){
+                            jgPath = jgPath + "_laserData";
+                        }else{
+                            jgPath = jgPath.substring(0,jgPath.length()-1) + "_laserData";
+                        }
+
+                        FileUtils.createDir(jgPath+"/extras");
+
+                        log.info("生成 激光相机目录 " + jgPath);
+                        //生成data.json
+                        JSONObject jgDataJson = new JSONObject();
+                        jgDataJson.put("split_type", "SPLIT_V15");
+                        jgDataJson.put("skybox_type", "SKYBOX_V5");
+                        jgDataJson.put("extras", null);
+                        FileUtils.writeFile(jgPath + File.separator + "data.json", jgDataJson.toString());
+
+                        CreateObjUtil.cpfile(dataSource  + "/results/laserData/cover", jgPath+"/extras/");
+                        CreateObjUtil.cplaserfile(dataSource  + "/results/laserData", jgPath+File.separator);
+
+                        //激光相机
+                        String url = laserHost+"/indoor/{sceneCode}/api/init?path="
+                                + jgPath + File.separator + "laserData" + "&title="+ title
+                                + "&childName=" + cameraName + "&createTime=" +  createTime
+                                + "&snCode="+ cameraName;
+
+                        if(userId!=null){
+                            url = url + "&userId=" + userId;
+                        }
+
+                        if(StringUtils.isNotEmpty(userName)){
+                            url = url + "&phone=" + userName;
+                        }
+
+                        url = url.replace("{sceneCode}",projectNum);
+                        log.info("激光转台相机 同步 :" + url);
+                        com.alibaba.fastjson.JSONObject hotListJson =
+                                com.alibaba.fastjson.JSONObject.parseObject(restTemplate.getForObject(url,String.class));
+                        log.info("激光转台相机 同步结束 :" + hotListJson);
+                    }catch (Exception e){
+                        e.printStackTrace();
+                        handFail("激光转台相机同步失败",message);
+                    }
+                }
+            }
+
+            CreateObjUtil.deleteFile(path.replace(ConstantFilePath.BUILD_MODEL_PATH, "/") + "/capture");
+            buildSuccess = Boolean.TRUE;
+        } catch(Exception e){
+            log.error("计算大场景失败"+projectNum);
+            e.printStackTrace();
+            StringWriter trace=new StringWriter();
+            e.printStackTrace(new PrintWriter(trace));
+            log.error(trace.toString());
+            handFail("计算失败",message);
+        }finally {
+            //发送计算结果到mq,再由消费者消费并操作数据库
+            rocketMQProducer.sendOneWay(buildSceneResultTopic,
+                                        BuildSceneResultMqMessage.builder()
+                                        .buildSuccess(buildSuccess)
+                                        .cameraType(cameraType)
+                                        .computeTime(computeTime)
+                                        .fileId(fileId)
+                                        .payStatus(payStatus)
+                                        .scenenCode(projectNum)
+                                        .space(space)
+                                        .videosJson(videosJson.toJSONString())
+                                        .build());
+            try{
+                if(Objects.nonNull(sceneProId)){
+                    com.alibaba.fastjson.JSONObject statusJson = new com.alibaba.fastjson.JSONObject();
+                    //临时将-2改成1,app还没完全更新
+                    if(sceneStatus == -2){
+                        sceneStatus = 1;
+                    }else if(sceneStatus == -1){
+                        // 失败状态不予显示到客户端
+                        sceneStatus = 0;
+                    }
+                    statusJson.put("status", sceneStatus);
+                    statusJson.put("webSite", webSite);
+                    statusJson.put("sceneNum", projectNum);
+                    statusJson.put("thumb", thumb);
+                    statusJson.put("payStatus", payStatus);
+                    FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+projectNum+File.separator+"status.json", statusJson.toString());
+                    uploadUtils.upload(ConstantFilePath.SCENE_PATH+"data/data"+projectNum+File.separator+"status.json",
+                            "data/data"+projectNum+File.separator+"status.json");
+
+                    //上送日志
+                    uploadUtils.upload(dataSource+File.separator+"console.log",
+                            "build_log/"+projectNum+File.separator+"console.log");
+
+
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private void handFail(String reason,BuildSceneMqMessage message){
+        String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
+        handFail(reason,serverPath,message.getSceneNum());
+    }
+
+    private void handFail(String reason,String serverPath,String num){
+        // 释放缓存锁
+        redisTemplate.delete(RedisKey.SCENE_BUILDING + num);
+        CompletableFuture.runAsync(() -> {
+            try {
+                DingDingUtils.sendMsgToDingRobot(reason,serverPath,num);
+            } catch (ApiException | UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException apiException) {
+                apiException.printStackTrace();
+            }
+        });
+    }
+}

Файловите разлики са ограничени, защото са твърде много
+ 680 - 679
4dkankan-center-modeling/src/main/java/com/fdkankan/modeling/receiver/BuildSceneReceiver.java


+ 6 - 0
4dkankan-center-platform/pom.xml

@@ -29,6 +29,12 @@
 
       <dependency>
           <groupId>com.fdkankan</groupId>
+          <artifactId>4dkankan-common-redis</artifactId>
+          <version>2.0.0</version>
+      </dependency>
+
+      <dependency>
+          <groupId>com.fdkankan</groupId>
           <artifactId>4dkankan-pay</artifactId>
           <version>2.0.0</version>
       </dependency>

+ 4 - 3
4dkankan-center-platform/src/main/java/com/fdkankan/platform/agent/controller/api/AgentLoginController.java

@@ -7,6 +7,7 @@ import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.redis.util.RedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
@@ -22,8 +23,8 @@ public class AgentLoginController  {
 
     @Autowired
     private IAgentService agentService;
-    @Resource
-    private RedisTemplate<String,String> redisTemplate;
+    @Autowired
+    RedisUtil redisUtil;
 
     /**
      * 代理商登录
@@ -45,7 +46,7 @@ public class AgentLoginController  {
         if(userName == null){
             throw new BusinessException(ErrorCode.TOKEN_ILLEGAL);
         }
-        redisTemplate.delete(userName);
+        redisUtil.del(userName);
         return ServerCode.SUCCESS.message();
     }
 }

+ 11 - 10
4dkankan-center-platform/src/main/java/com/fdkankan/platform/agent/service/impl/AgentServiceImpl.java

@@ -25,6 +25,7 @@ import com.fdkankan.platform.goods.entity.CameraDetail;
 import com.fdkankan.platform.goods.service.ICameraDetailService;
 import com.fdkankan.platform.goods.service.ICameraService;
 import com.fdkankan.platform.order.service.IVirtualOrderService;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,8 +51,8 @@ import java.util.stream.Collectors;
 @Service
 public class AgentServiceImpl extends ServiceImpl<IAgentMapper, Agent> implements IAgentService {
 
-    @Resource
-    private  RedisTemplate<String,String> redisTemplate;
+    @Autowired
+    RedisUtil redisUtil;
     @Autowired
     private ICameraService cameraService;
     @Autowired
@@ -82,9 +83,9 @@ public class AgentServiceImpl extends ServiceImpl<IAgentMapper, Agent> implement
             throw new BusinessException(ErrorCode.PASSWORD_ERROR);
         }
         String key = SsoUtil.PREFIX_CACHE_AGENT + agent.getAgentId();
-        redisTemplate.delete(key);
+        redisUtil.del(key);
         String token = JwtUtil.createJWT(-1, key,"agent");
-        redisTemplate.opsForValue().set(key,token,21600, TimeUnit.SECONDS);
+        redisUtil.set(key,token,21600);
         JSONObject obj = new JSONObject();
         obj.put("token", token);
         return obj;
@@ -168,8 +169,8 @@ public class AgentServiceImpl extends ServiceImpl<IAgentMapper, Agent> implement
 
     @Override
     public AgentTotalAmountVo searchAgentListStatistics(RequestAgent param) {
-        if(redisTemplate.hasKey("AgentSearchListTotalAmount")){
-            String jsonObject = redisTemplate.opsForValue().get("AgentSearchListTotalAmount");
+        if(redisUtil.hasKey("AgentSearchListTotalAmount")){
+            String jsonObject = redisUtil.get("AgentSearchListTotalAmount");
             return JSONObject.parseObject(jsonObject, AgentTotalAmountVo.class);
         }
         List<Agent> list = this.list(getQueryWrapper(param));
@@ -189,7 +190,7 @@ public class AgentServiceImpl extends ServiceImpl<IAgentMapper, Agent> implement
             totalAmountVo.setTotalSubExtract(totalAmountVo.getTotalSubExtract() + agentVo.getSubExtract());
             totalAmountVo.setTotalSubRecharge(totalAmountVo.getTotalSubRecharge() + agentVo.getSubRecharge());
         }
-        redisTemplate.opsForValue().set("AgentSearchListTotalAmount",JSONObject.toJSONString(totalAmountVo),7200 ,TimeUnit.SECONDS);
+        redisUtil.set("AgentSearchListTotalAmount",JSONObject.toJSONString(totalAmountVo),7200);
         return totalAmountVo;
     }
 
@@ -200,8 +201,8 @@ public class AgentServiceImpl extends ServiceImpl<IAgentMapper, Agent> implement
 
     @Override
     public AgentDetailTotalAmount searchAgentListDetailStatistics(RequestAgent param) {
-        if(redisTemplate.hasKey("AgentSearchListDetailTotalAmount")){
-            String jsonObject = redisTemplate.opsForValue().get("AgentSearchListDetailTotalAmount");
+        if(redisUtil.hasKey("AgentSearchListDetailTotalAmount")){
+            String jsonObject = redisUtil.get("AgentSearchListDetailTotalAmount");
             return JSONObject.parseObject(jsonObject, AgentDetailTotalAmount.class);
         }
         AgentDetailTotalAmount totalAmount = new AgentDetailTotalAmount();
@@ -217,7 +218,7 @@ public class AgentServiceImpl extends ServiceImpl<IAgentMapper, Agent> implement
             totalAmount.setTotalLessPoint(totalAmount.getTotalLessPoint() + vo.getLessPoint());
             totalAmount.setTotalExtract(totalAmount.getTotalExtract().add(vo.getExtract()));
         }
-        redisTemplate.opsForValue().set("AgentSearchListTotalAmount",JSONObject.toJSONString(totalAmount),7200 ,TimeUnit.SECONDS);
+        redisUtil.set("AgentSearchListTotalAmount",JSONObject.toJSONString(totalAmount),7200);
         return totalAmount;
     }
 

+ 5 - 4
4dkankan-center-platform/src/main/java/com/fdkankan/platform/order/service/impl/OrderServiceImpl.java

@@ -33,6 +33,7 @@ import com.fdkankan.platform.user.request.*;
 import com.fdkankan.platform.user.service.IUserIncrementService;
 import com.fdkankan.platform.user.service.IUserService;
 import com.fdkankan.platform.user.vo.*;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.DateTime;
 import org.springframework.beans.BeanUtils;
@@ -56,8 +57,8 @@ import java.util.stream.Collectors;
 @Service
 public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implements IOrderService {
 
-    @Resource
-    private RedisTemplate<String,String> redisTemplate;
+    @Autowired
+    RedisUtil redisUtil;
     @Autowired
     private IOrderItemService orderItemService;
     @Autowired
@@ -356,7 +357,7 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
         switch (order.getPayType()){
             // 微信
             case 0:
-                String orderSnE = redisTemplate.opsForValue().get(orderSn);
+                String orderSnE = redisUtil.get(orderSn);
                 log.warn("out_trade_no:" + orderSnE);
                 if (StringUtils.isNotEmpty(orderSnE)){
                     Map<String, String> data = new HashMap<String, String>();
@@ -365,7 +366,7 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
                     WXPay wxPay = new WXPay(config);
                     Map<String, String> resp = wxPay.orderQuery(data);
                     if (resp.get("trade_state") != null && resp.get("trade_state").equals(WXPayConstants.SUCCESS)) {
-                        redisTemplate.delete(orderSnE);
+                        redisUtil.del(orderSnE);
                         String pngPath = ConstantFilePath.BASE_PATH + ConstantFilePath.WEIXIN_QRCODE_FOLDER + orderSn + ".png";
                         FileUtils.deleteFile(pngPath);
                         success = true;

+ 12 - 11
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/LoginService.java

@@ -13,6 +13,7 @@ import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.platform.user.entity.User;
 import com.fdkankan.platform.user.request.RequestUser;
 import com.fdkankan.platform.user.vo.SSOUserVo;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -24,8 +25,8 @@ import javax.annotation.Resource;
 @Service
 public class LoginService {
 
-    @Resource
-    private RedisTemplate<String,String> redisTemplate;
+    @Autowired
+    RedisUtil redisUtil;
     @Autowired
     private  IUserService userService;
     @Autowired
@@ -56,7 +57,7 @@ public class LoginService {
             throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
         }
         //验证码校验
-        String codeValue = redisTemplate.opsForValue().get(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum());
+        String codeValue = redisUtil.get(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum());
         if (StringUtils.isEmpty(codeValue)){
             throw new BusinessException(ErrorCode.V_CODE_ERROR);
         }
@@ -80,8 +81,8 @@ public class LoginService {
         JSONArray removeArray = new JSONArray();
         JSONObject tokenJson = new JSONObject();
         Long time = 0L;
-        if(redisTemplate.hasKey(SsoUtil.USER_TOKEN + phone)){
-            tokenArray = JSONArray.parseArray(redisTemplate.opsForValue().get(SsoUtil.USER_TOKEN + phone));
+        if(redisUtil.hasKey(SsoUtil.USER_TOKEN + phone)){
+            tokenArray = JSONArray.parseArray(redisUtil.get(SsoUtil.USER_TOKEN + phone));
             for(int i = 0, len = tokenArray.size(); i < len; i++){
                 JSONObject json = tokenArray.getJSONObject(i);
                 time = json.getLong("time");
@@ -96,12 +97,12 @@ public class LoginService {
             tokenJson.put("token", token);
             tokenJson.put("time", System.currentTimeMillis());
             tokenArray.add(tokenJson);
-            redisTemplate.opsForValue().set(SsoUtil.USER_TOKEN + phone, tokenArray.toString());
+            redisUtil.set(SsoUtil.USER_TOKEN + phone, tokenArray.toString());
         }else {
             tokenJson.put("token", token);
             tokenJson.put("time", System.currentTimeMillis());
             tokenArray.add(tokenJson);
-            redisTemplate.opsForValue().set(SsoUtil.USER_TOKEN + phone, tokenArray.toString());
+            redisUtil.set(SsoUtil.USER_TOKEN + phone, tokenArray.toString());
         }
     }
 
@@ -125,7 +126,7 @@ public class LoginService {
         if (ssoUser == null){
             throw new BusinessException(ErrorCode.USER_NOT_LOGIN);
         }
-        String codeValue = redisTemplate.opsForValue().get(SsoUtil.PREFIX_MSG_AUTH_CODE + ssoUser.getUserName());
+        String codeValue = redisUtil.get(SsoUtil.PREFIX_MSG_AUTH_CODE + ssoUser.getUserName());
         if (StringUtils.isEmpty(codeValue)){
             throw new BusinessException(ErrorCode.V_CODE_ERROR);
         }
@@ -163,10 +164,10 @@ public class LoginService {
         if (StringUtils.isEmpty(uuid)){
             throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
         }
-        if (!redisTemplate.hasKey(uuid)){
+        if (!redisUtil.hasKey(uuid)){
             throw new BusinessException(ErrorCode.USER_NOT_LOGIN);
         }
-        String childName = redisTemplate.opsForValue().get(uuid);
+        String childName = redisUtil.get(uuid);
         SSOUser dbUser = new SSOUser();
         dbUser.setUserName(childName);
 
@@ -177,7 +178,7 @@ public class LoginService {
         object.put("token", token);
         object.put("childName", childName);
         object.put("to", 1);
-        redisTemplate.delete(uuid);
+        redisUtil.del(uuid);
         //删除二维码图片
         FileUtils.deleteFile(ConstantFilePath.LOGIN_QR_CODE_PATH + uuid + ".png");
         return object;

+ 7 - 6
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/MsgService.java

@@ -8,6 +8,7 @@ import com.fdkankan.common.sms.SmsService;
 import com.fdkankan.common.util.PatternUtils;
 import com.fdkankan.common.util.SsoUtil;
 import com.fdkankan.platform.user.request.RequestUser;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -20,8 +21,8 @@ import java.util.concurrent.TimeUnit;
 @Service
 public class MsgService {
 
-    @Resource
-    private RedisTemplate<String,String> redisTemplate;
+    @Autowired
+    private RedisUtil redisUtil;
     @Autowired
     private IUserService userService;
     @Autowired
@@ -42,7 +43,7 @@ public class MsgService {
             throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
         }
         String key = SsoUtil.PREFIX_MSG_NOT_CODE + param.getPhoneNum();
-        Long time = redisTemplate.opsForValue().getOperations().getExpire(key);
+        Long time = redisUtil.getExpire(key);
         if(time!=null && time >0){
             throw  new BusinessException(ErrorCode.V_CODE_TIME_NOT_OUT.code(),String.valueOf(time));
         }
@@ -64,9 +65,9 @@ public class MsgService {
             }
         }
         //短信验证码,5分钟有效
-        redisTemplate.opsForValue().set(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum(), code, 300, TimeUnit.SECONDS);
+        redisUtil.set(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum(), code, 300);
         //短信60秒内不能重发
-        redisTemplate.opsForValue().set(SsoUtil.PREFIX_MSG_NOT_CODE + param.getPhoneNum(), code, 60, TimeUnit.SECONDS);
+        redisUtil.set(SsoUtil.PREFIX_MSG_NOT_CODE + param.getPhoneNum(), code, 60);
         return ServerCode.SUCCESS.message();
     }
 
@@ -86,7 +87,7 @@ public class MsgService {
                 SendMailAcceUtils.sendMail(param.getEmail(), SendMailAcceUtils.CN_CODE_SUBJECT, SendMailAcceUtils.CN_CODE_MSG.replace("${code}", code), null);
                 break;
         }
-        redisTemplate.opsForValue().set(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum(), code, 300, TimeUnit.SECONDS);
+        redisUtil.set(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum(), code, 300);
         return ServerCode.SUCCESS.message();
     }
 }

+ 10 - 9
4dkankan-center-platform/src/main/java/com/fdkankan/platform/user/service/RegisterService.java

@@ -14,6 +14,7 @@ import com.fdkankan.common.validation.Variable;
 import com.fdkankan.common.user.SSOLoginHelper;
 import com.fdkankan.platform.user.entity.User;
 import com.fdkankan.platform.user.request.RequestUser;
+import com.fdkankan.redis.util.RedisUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -29,8 +30,8 @@ public class RegisterService {
 
     @Value("${admin.register.validCode}")
     private  String registerValidCode;
-    @Resource
-    private RedisTemplate<String,String> redisTemplate;
+    @Autowired
+    private RedisUtil redisUtil;
     @Autowired
     private  IUserService userService;
     @Autowired
@@ -51,7 +52,7 @@ public class RegisterService {
         //验证码校验
         String msgAuthCode = param.getMsgAuthCode();
         if (!StringUtils.equals(msgAuthCode, registerValidCode)) {
-            String codeValue = redisTemplate.opsForValue().get(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum());
+            String codeValue = (String)redisUtil.get(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum());
             if (StringUtils.isEmpty(codeValue)) {
                 throw new BusinessException(ErrorCode.V_CODE_ERROR);
             }
@@ -91,7 +92,7 @@ public class RegisterService {
         userEntity.setIsNotice(1);
         userService.save(userEntity);
         //删除验证码缓存
-        redisTemplate.delete(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum());
+        redisUtil.del(SsoUtil.PREFIX_MSG_AUTH_CODE + param.getPhoneNum());
     }
 
     public String changePassword(RequestUser param) {
@@ -116,16 +117,16 @@ public class RegisterService {
 
     private void removeAllToken(String phone){
         //删除缓存
-        redisTemplate.delete(SsoUtil.PREFIX_MSG_AUTH_CODE + phone);
+        redisUtil.del(SsoUtil.PREFIX_MSG_AUTH_CODE + phone);
         JSONArray tokenArray = new JSONArray();
-        if(redisTemplate.hasKey(SsoUtil.USER_TOKEN + phone)){
-            tokenArray = JSONArray.parseArray(redisTemplate.opsForValue().get(SsoUtil.USER_TOKEN + phone));
+        if(redisUtil.hasKey(SsoUtil.USER_TOKEN + phone)){
+            tokenArray = JSONArray.parseArray((String)redisUtil.get(SsoUtil.USER_TOKEN + phone));
             for(int i = 0, len = tokenArray.size(); i < len; i++){
                 JSONObject json = tokenArray.getJSONObject(i);
                 ssoLoginHelper.logout(json.getString("token"));
             }
-            redisTemplate.delete(SsoUtil.USER_TOKEN + phone);
-            redisTemplate.delete(SsoUtil.PREFIX_CACHE_CAMERA + phone);
+            redisUtil.del(SsoUtil.USER_TOKEN + phone);
+            redisUtil.del(SsoUtil.PREFIX_CACHE_CAMERA + phone);
         }
     }
 }

+ 1 - 1
4dkankan-center-scene/src/main/java/com/fdkankan/scene/SceneApplication.java

@@ -12,7 +12,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 @EnableFeignClients("com.fdkankan.*.api.feign")
 @EnableDiscoveryClient
 @EnableScheduling
-@ComponentScan(basePackages = {"com.fdkankan.common", "com.fdkankan.scene","com.fdkankan.redis"})
+@ComponentScan(basePackages = {"com.fdkankan.common", "com.fdkankan.scene","com.fdkankan.redis","com.fdkankan.mq"})
 @MapperScan("com.fdkankan.**.mapper")
 public class SceneApplication {
 

+ 85 - 32
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/TestController.java

@@ -1,24 +1,38 @@
 package com.fdkankan.scene.controller;
 
+import cn.hutool.core.lang.TypeReference;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.ConstantFilePath;
 import com.fdkankan.common.util.MatrixToImageWriterUtil;
+import com.fdkankan.mq.message.BaseBuildSceneMessage;
+import com.fdkankan.mq.message.BuildSceneResultMqMessage;
+import com.fdkankan.mq.message.MQBodyBean;
+import com.fdkankan.mq.util.RocketMQProducer;
 import com.fdkankan.platform.api.feign.PlatformClient;
+import com.fdkankan.platform.api.vo.Camera;
 import com.fdkankan.platform.api.vo.User;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.service.ISceneService;
+import com.fdkankan.scene.vo.SceneVO;
 import com.google.common.collect.Lists;
+import org.apache.poi.ss.formula.functions.T;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.common.message.Message;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.io.File;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
+@RefreshScope
 @RestController
 @RequestMapping("/api/device")
 public class TestController {
@@ -47,12 +61,8 @@ public class TestController {
 //                ConstantFilePath.SCENE_PATH + "images/images" + "123123" + "/QRShareLogo.png");
     }
 
-    @Autowired
-    RedisTemplate<String, String> redisTemplate1;
-
     @GetMapping("/testSetStr")
     public void testSetStr() throws Exception {
-        redisTemplate1.opsForValue().set("abc", "sdfasdfdsghfh");
     }
 
     @GetMapping("/testGetStr")
@@ -62,45 +72,45 @@ public class TestController {
         return "123";
     }
 
+    @Autowired
+    RedisTemplate<String, String> redisTemplate;
+
     @GetMapping("/testSetObject")
     public boolean testSetObject() throws Exception {
         User user = new User();
         user.setCity("珠海");
         user.setId(123l);
-        return redisUtil.set("testSetObject", user);
+
+        String jsons = JSON.toJSONString(user);
+
+        redisTemplate.opsForValue().set("test:66", jsons);
+        redisTemplate.opsForValue().set("test:67", jsons);
+
+
+        return true;
     }
 
+//
     @GetMapping("/testGetObject")
     public User testGetObject() throws Exception {
-        User user = new User();
-        user.setCity("珠海");
-        user.setId(123l);
-        return (User)redisUtil.get("testSetObject");
+        String test12 = redisTemplate.opsForValue().get("test66");
+        User user = JSONObject.parseObject(test12, User.class);
+        return user;
     }
 
+
     @GetMapping("/testSetList")
     public boolean testSetList() throws Exception {
 
-        List<User> users = Lists.newArrayList();
-        User user1 = new User();
-        user1.setCity("珠海");
-        user1.setId(123l);
-
-        User user2 = new User();
-        user2.setCity("广州");
-        user2.setId(124l);
-
-        users.add(user1);
-        users.add(user2);
-
-
-        return redisUtil.lRightPushAll("testList1", users);
+        List<String> users = Lists.newArrayList();
+        users.add("sdfsdf");
+        users.add("dfgdfg");
+        return redisUtil.lRightPushAll("test5595jj", users);
     }
 
     @GetMapping("/testGetList")
-    public List<User> testGetList() throws Exception {
-//        List<User> testList = (List<User>) redisUtil.lGet("testList1", 0, -1);
-        return redisUtil.lGet("testList1", 0, -1);
+    public List<String> testGetList() throws Exception {
+        return redisUtil.lGet("test5595jj", 0, -1);
     }
 
     @GetMapping("/testSetMap")
@@ -120,12 +130,14 @@ public class TestController {
         userMap.put("user2", user2);
 
 
-        return redisUtil.hmset("userMap", userMap);
+//        return redisUtil.hmset("userMap", userMap);
+        return true;
     }
 
     @GetMapping("/testGetMap")
     public Map<String ,User> testGetMap() throws Exception {
-        return redisUtil.hmget("userMap");
+        return null;
+//        return redisUtil.hmget("userMap");
     }
 
     @Autowired
@@ -136,4 +148,45 @@ public class TestController {
         sceneService.updatePv();
     }
 
+    @Autowired
+    RocketMQProducer rocketMQProducer;
+
+    @GetMapping("/testMQ")
+    public SendResult testMQ(){
+        SceneVO body = SceneVO.builder().buildType("123").childName("sdfsdfsdf").dataSource("sadfdhgf").id(1213L).build();
+        SendResult sendResult = rocketMQProducer.syncSend("abc", "tag2", UUID.randomUUID().toString(), body, 5000l);
+        return sendResult;
+    }
+
+    @GetMapping("/testAsynMQ")
+    public void testAsynMQ(){
+        SceneVO body = SceneVO.builder().buildType("123").childName("sdfsdfsdf").dataSource("sadfdhgf").id(1213L).build();
+        rocketMQProducer.asyncSend("abc","tag3", UUID.randomUUID().toString(), body,null,5000l);
+    }
+
+    @GetMapping("/testsenOnway")
+    public void testsenOnway(){
+        SceneVO body = SceneVO.builder().buildType("123").childName("sdfsdfsdf").dataSource("sadfdhgf").id(1213L).build();
+        rocketMQProducer.sendOneWay("qqq","tag6", UUID.randomUUID().toString(), body);
+    }
+
+    @Value("${rocketmq.build-scene.topicName.topic-modeling-a}")
+    private String topicModelingA;
+
+    @RefreshScope
+    @GetMapping("/testsenOnway1")
+    public void testsenOnway1(){
+        SceneVO body = SceneVO.builder().buildType("123").childName("sdfsdfsdf").dataSource("sadfdhgf").id(1213L).build();
+        rocketMQProducer.sendOneWay(topicModelingA, null);
+    }
+
+    @RefreshScope
+    @GetMapping("/testResult")
+    public void testResult(){
+//        rocketMQProducer.sendOneWay("topic_modeling_a_result", BuildSceneResultMqMessage.builder().buildSuccess(true).cameraType("3").build());
+        String dsfsdf = (String) redisUtil.get("dsfsdf");
+        System.out.println(2134);
+
+    }
+
 }

+ 122 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/BuildSceneResultMQListener.java

@@ -0,0 +1,122 @@
+package com.fdkankan.scene.listener;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.BuildStatus;
+import com.fdkankan.common.response.ResultData;
+import com.fdkankan.mq.message.BuildSceneResultMqMessage;
+import com.fdkankan.platform.api.feign.PlatformClient;
+import com.fdkankan.platform.api.vo.CameraDetail;
+import com.fdkankan.platform.api.vo.UserIncrement;
+import com.fdkankan.scene.entity.SceneFileBuild;
+import com.fdkankan.scene.entity.ScenePro;
+import com.fdkankan.scene.entity.SceneProExt;
+import com.fdkankan.scene.service.ISceneFileBuildService;
+import com.fdkankan.scene.service.ISceneProExtService;
+import com.fdkankan.scene.service.ISceneProService;
+import com.fdkankan.scene.service.ISceneService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.spring.annotation.MessageModel;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+
+@Slf4j
+@Component
+@RocketMQMessageListener(
+        consumerGroup = "${rocketmq.consumer.group}",
+        topic = "${rocketmq.build-scene-result.topicName.topic-modeling-a}",
+        messageModel = MessageModel.CLUSTERING)
+public class BuildSceneResultMQListener implements RocketMQListener<String> {
+
+    @Value("${rocketmq.consumer.group}")
+    private String consumerGroup;
+
+    @Value("${rocketmq.build-scene-result.topicName.topic-modeling-a}")
+    private String buildSceneResultTopic;
+
+    @Autowired
+    ISceneService sceneService;
+    @Autowired
+    ISceneFileBuildService sceneFileBuildService;
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    ISceneProExtService sceneProExtService;
+    @Autowired
+    PlatformClient platformClient;
+
+
+    @Override
+    public void onMessage(String message) {
+
+        BuildSceneResultMqMessage resultMqMessage = JSONObject.parseObject(message, BuildSceneResultMqMessage.class);
+        log.info("开始处理消息,消费者组:{},主题名:{}, 消息内容:{}", consumerGroup, buildSceneResultTopic, message);
+        process(resultMqMessage);
+    }
+
+    private void process(BuildSceneResultMqMessage message){
+        int cameraType = Integer.valueOf(message.getCameraType());
+        String sceneCode = message.getScenenCode();
+        String fileId = message.getFileId();
+        Long space = message.getSpace();
+        Integer payStatus = message.getPayStatus();
+        String videosJson = message.getVideosJson();
+        Long computeTime = message.getComputeTime();
+        Boolean buildSuccess = message.getBuildSuccess();
+        if(!buildSuccess){//建模失败,修改状态为失败状态
+
+            sceneService.updateStatus(sceneCode, -1);
+
+            SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId);
+            sceneFileBuild.setBuildStatus(BuildStatus.fail.code());
+            sceneFileBuildService.updateById(sceneFileBuild);
+
+            return;
+        }
+
+        //建模成功
+        if(cameraType < 3){
+            sceneService.updateTime(sceneCode, space, payStatus);
+        }else{
+
+            sceneProService.updateTime(sceneCode, space, payStatus, videosJson, computeTime);
+
+            SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId);
+            sceneFileBuild.setBuildStatus(BuildStatus.success.code());
+            sceneFileBuildService.updateById(sceneFileBuild);
+
+            //更改相机容量
+            ScenePro scenePro = sceneProService.findBySceneNum(sceneCode);
+            if(Objects.nonNull(scenePro)){
+                SceneProExt sceneProExt = sceneProExtService.findBySceneProId(scenePro.getId());
+                ResultData<CameraDetail> resultData = platformClient.updateCameraDetailByCameraIdAndSpace(scenePro.getCameraId(), sceneProExt.getSpace());
+                if(resultData.getCode() != 200){
+                    log.info("调用platform服务updateCameraDetailByCameraIdAndSpace失败,参数{},{}" ,scenePro.getCameraId(), sceneProExt.getSpace());
+                    return ;
+                }
+                CameraDetail cameraDetail = JSONObject.parseObject(JSONObject.toJSONString(resultData.getData()), CameraDetail.class);
+
+                UserIncrement userIncrement = platformClient.getUserIncrementByCameraId(scenePro.getCameraId());
+                if(userIncrement == null || userIncrement.getIsExpired() == 1){
+                    // 新上传的场景,如果总容量小于使用容量,则该大场景保留在临时存储空间30天
+                    if (cameraDetail.getTotalSpace().compareTo(cameraDetail.getUsedSpace()) == -1){
+                        List<Long> ids = new ArrayList<>();
+                        ids.add(scenePro.getId());
+                        sceneProService.tempScenes(ids);
+                    }
+                }
+            }
+
+        }
+
+
+    }
+
+}

+ 32 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/TestMQListener.java

@@ -0,0 +1,32 @@
+package com.fdkankan.scene.listener;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.rocketmq.spring.annotation.MessageModel;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * 设置消息监听
+ * 监听组:监听topic:监听tag(默认监听topic下所有)
+ * 监听消费模式:默认负载均衡:CLUSTERING(每一个消息只发给一个消费者)、广播模式:BROADCASTING(发送给所有消费者)
+ *
+ */
+@Slf4j
+@Component
+//@RocketMQMessageListener(
+//        consumerGroup = "${rocketmq.consumer.group}",
+//        topic = "topic_modeling_a_result",
+////        selectorExpression = "${rocketmq.consumer.tags}",
+//        messageModel = MessageModel.BROADCASTING)
+public class TestMQListener implements RocketMQListener<String> {
+
+    @Override
+    public void onMessage(String message) {
+
+        System.out.println(message);
+
+    }
+}

+ 0 - 7
4dkankan-center-scene/src/main/java/com/fdkankan/scene/rocketmq/MQLogFormat.java

@@ -1,7 +0,0 @@
-package com.fdkankan.scene.rocketmq;
-
-public interface MQLogFormat {
-
-    String mqConsumerLogFormat = "MQ|consumer|groupName:%s|topic:%s|tag:%s|message:%s"; //消费者开始消费日志
-    String mqProducerLogFormat = "MQ|producer|topic:%s|tag:%s|keys:%s|message:%s"; //消费者开始消费日志
-}

+ 0 - 92
4dkankan-center-scene/src/main/java/com/fdkankan/scene/rocketmq/producer/MqSendMessage.java

@@ -1,92 +0,0 @@
-package com.fdkankan.scene.rocketmq.producer;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.scene.rocketmq.MQLogFormat;
-import org.apache.rocketmq.client.exception.MQBrokerException;
-import org.apache.rocketmq.client.exception.MQClientException;
-import org.apache.rocketmq.client.producer.DefaultMQProducer;
-import org.apache.rocketmq.common.message.Message;
-import org.apache.rocketmq.remoting.exception.RemotingException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-
-@Component
-public class MqSendMessage {
-    private static Logger log = LoggerFactory.getLogger("programLog");
-
-    @Resource(name = "testProducer")
-    protected DefaultMQProducer testProducer;
-
-    @Value("${rocketmq.topic.testGrop}")
-    private String topicName;
-
-    @Value("${rocketmq.tag.testGrop}")
-    private String tagName;
-
-
-    public void sendMessage(Object context){
-        long currentTimeMillis = System.currentTimeMillis();
-        String keys = topicName + "_"+ currentTimeMillis;
-        Message msg = new Message(
-                topicName,
-                tagName,
-                // keys 每条消息唯一
-                keys,
-                JSONObject.toJSONString(context).getBytes());
-        try {
-            testProducer.send(msg);
-            log.info(String.format(MQLogFormat.mqProducerLogFormat, topicName, tagName, keys, JSON.toJSONString(context)));
-            log.info("SendMQ|messageContent|推送成功:"+ JSONObject.toJSONString(context) + "_" + currentTimeMillis);
-        } catch (MQClientException e) {
-            log.info("testProducer|sendMessage|MQClientException");
-            log.error("testProducer|sendMessage|" + e.getMessage(), e);
-        } catch (RemotingException e) {
-            log.info("testProducer|sendMessage|RemotingException");
-            log.error("testProducer|sendMessage|" + e.getMessage(), e);
-        } catch (InterruptedException e) {
-            log.info("testProducer|sendMessage|InterruptedException");
-            log.error("testProducer|sendMessage|" + e.getMessage(), e);
-        } catch (MQBrokerException e) {
-            log.info("testProducer|sendMessage|MQBrokerException");
-            log.error("testProducer|sendMessage|" + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * rabbit.queue.laser=QUEUE_LASER_A   老代码中有区分,先暂时这样写
-     * @param topicName
-     * @param context
-     */
-    public void sendMessageLaser(String topicName, Object context){
-        long currentTimeMillis = System.currentTimeMillis();
-        String keys = topicName + "_"+ currentTimeMillis;
-        Message msg = new Message(
-                topicName,
-                tagName,
-                // keys 每条消息唯一
-                keys,
-                JSONObject.toJSONString(context).getBytes());
-        try {
-            testProducer.send(msg);
-            log.info(String.format(MQLogFormat.mqProducerLogFormat, topicName, tagName, keys, JSON.toJSONString(context)));
-            log.info("SendMQ|messageContent|推送成功:"+ JSONObject.toJSONString(context) + "_" + currentTimeMillis);
-        } catch (MQClientException e) {
-            log.info("testProducer|sendMessage|MQClientException");
-            log.error("testProducer|sendMessage|" + e.getMessage(), e);
-        } catch (RemotingException e) {
-            log.info("testProducer|sendMessage|RemotingException");
-            log.error("testProducer|sendMessage|" + e.getMessage(), e);
-        } catch (InterruptedException e) {
-            log.info("testProducer|sendMessage|InterruptedException");
-            log.error("testProducer|sendMessage|" + e.getMessage(), e);
-        } catch (MQBrokerException e) {
-            log.info("testProducer|sendMessage|MQBrokerException");
-            log.error("testProducer|sendMessage|" + e.getMessage(), e);
-        }
-    }
-}

+ 0 - 70
4dkankan-center-scene/src/main/java/com/fdkankan/scene/rocketmq/producer/Producer.java

@@ -1,70 +0,0 @@
-package com.fdkankan.scene.rocketmq.producer;
-
-import org.apache.rocketmq.client.exception.MQClientException;
-import org.apache.rocketmq.client.producer.DefaultMQProducer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class Producer {
-
-    private static Logger log = LoggerFactory.getLogger("programLog");
-
-    @Value("${rocketmq.name-srv-addr}")
-    private String nameSrvAddr;
-    @Value("${rocketmq.producer.group.testGrop}")
-    private String producerGroupName;
-    /**
-     * 消息最大大小,默认4M
-     */
-    @Value("${rocketmq.producer.maxMessageSize}")
-    private Integer maxMessageSize;
-    /**
-     * 消息发送超时时间,默认3秒
-     */
-    @Value("${rocketmq.producer.sendMsgTimeout}")
-    private Integer sendMsgTimeout;
-    /**
-     * 消息发送失败重试次数,默认2次
-     */
-    @Value("${rocketmq.producer.retryTimesWhenSendFailed}")
-    private Integer retryTimesWhenSendFailed;
-
-    /**
-     * 初始化向rocketmq发送普通消息的生产者
-     */
-    @Bean("testProducer")
-    public DefaultMQProducer testProducer() throws MQClientException {
-        /*
-         * 一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例<br>
-         * 注意:ProducerGroupName需要由应用来保证唯一<br>
-         * ProducerGroup这个概念发送普通的消息时,作用不大,但是发送分布式事务消息时,比较关键,
-         * 因为服务器会回查这个Group下的任意一个Producer
-         */
-        DefaultMQProducer producer = new DefaultMQProducer(producerGroupName);
-        producer.setInstanceName(producerGroupName);
-        producer.setNamesrvAddr(nameSrvAddr);
-        //设置 lnstanceName,当一个 Jvm 需要启动多个 Producer 的时候,通过设置不同的 InstanceName来区分,不设置的话系统使用默认名称“DEFAULT”
-//        producer.setInstanceName(properties.getProducerInstanceName());
-        producer.setVipChannelEnabled(false);
-        //发送消息超时时间,默认3000
-        producer.setSendMsgTimeout(sendMsgTimeout);
-        //发送消息失败重试次数,默认2
-        producer.setRetryTimesWhenSendAsyncFailed(retryTimesWhenSendFailed);
-        //消息最大长度 默认1024*1024*4(4M)
-        producer.setMaxMessageSize(maxMessageSize);
-        /*
-         * Producer对象在使用之前必须要调用start初始化,初始化一次即可<br>
-         * 注意:切记不可以在每次发送消息时,都调用start方法
-         */
-        producer.start();
-        log.info("RocketMq " + this + " Started.");
-        return producer;
-    }
-
-
-
-}

+ 2 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/ISceneProService.java

@@ -171,5 +171,7 @@ public interface ISceneProService extends IService<ScenePro> {
 
     ResultData rebuildReduceSpaceBySceneNum(String sceneNum) throws Exception;
 
+    void tempScenes(List<Long> ids);
+
 
 }

+ 21 - 16
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneFileBuildServiceImpl.java

@@ -15,6 +15,7 @@ import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.user.SSOUser;
 import com.fdkankan.common.util.*;
 import com.fdkankan.mq.message.BuildSceneMqMessage;
+import com.fdkankan.mq.util.RocketMQProducer;
 import com.fdkankan.platform.api.feign.PlatformClient;
 import com.fdkankan.platform.api.vo.Camera;
 import com.fdkankan.platform.api.vo.CameraDetail;
@@ -22,7 +23,6 @@ import com.fdkankan.platform.api.vo.Company;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.scene.entity.*;
 import com.fdkankan.scene.mapper.ISceneFileBuildMapper;
-import com.fdkankan.scene.rocketmq.producer.MqSendMessage;
 import com.fdkankan.scene.service.*;
 import com.fdkankan.scene.vo.ResponseSceneFile;
 import lombok.extern.slf4j.Slf4j;
@@ -81,6 +81,12 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     @Value("${unCalculated.company.ids:#{null}}")
     private String[] unCalculatedCompanyIds;
 
+    @Value("${rocketmq.build-scene.topicName:topic-modeling-a}")
+    private String topicModelingA;
+
+    @Value("${rocketmq.build-scene:topicName:topic-laser-a}")
+    private String topicLaserA;
+
     @Autowired
     PlatformClient platformClient;
 
@@ -107,7 +113,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
     @Autowired
     ISceneResourceCooperationService sceneResourceCooperationService;
     @Autowired
-    MqSendMessage mqSendMessage;
+    RocketMQProducer mqProducer;
     @Autowired
     RedisUtil redisUtil;
 
@@ -271,7 +277,6 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 ResponseSceneFile responseSceneFile = new ResponseSceneFile();
                 responseSceneFile.setFileId(fileId);
                 //可以重复上传,文件id保存50年(因为该redis工具无法设置永久保存)
-                // TODO: 2022/1/5
                 redisUtil.set(fileId, folderName, 1537920000);
                 return responseSceneFile;
             }
@@ -819,7 +824,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
         //删除oss的houst_floor.json
         uploadToOssUtil.delete("data/data"+sceneNum+File.separator+"houst_floor.json");
 
-        mqSendMessage.sendMessage(scene.getMqMsg());
+        mqProducer.sendOneWay(topicModelingA, scene.getMqMsg());
 
         Map<String, String> map = new HashMap<>();
         map.put("sceneNum", sceneNum);
@@ -1042,9 +1047,9 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         //激光转台 八目相机占用 10 和 11
         if(jsonObject.getJSONObject("cam").getIntValue("type") == 10){
-            mqSendMessage.sendMessageLaser("TOPIC_LASER_A", scene.getMqMsg());
+            mqProducer.sendOneWay(topicLaserA, scene.getMqMsg());
         }else  if(scene != null){
-            mqSendMessage.sendMessage(scene.getMqMsg());
+            mqProducer.sendOneWay(topicModelingA, scene.getMqMsg());
         }
     }
 
@@ -1062,7 +1067,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 //生成标定数据
                 ComputerUtil.createCalibrationData(calPath, filePath);
                 //开始标定计算
-                mqSendMessage.sendMessage(calPath);
+                mqProducer.sendOneWay(topicModelingA, calPath);
 
             }else if(jsonObject.get("calibration") != null && jsonObject.getString("calibration").equals("2")){
                 String mac = filePath.replace(ConstantFilePath.BUILD_MODEL_PATH, "").split("/")[0];
@@ -1077,8 +1082,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                 //生成标定数据
                 ComputerUtil.createCalibrationData(calPath, filePath);
                 //开始标定计算
-                mqSendMessage.sendMessage(calPath);
-
+                mqProducer.sendOneWay(topicModelingA, calPath);
             }else {
 
                 String sceneNum = "";
@@ -1317,7 +1321,7 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
                     return;
                 }
                 if(sceneProPO != null){
-                    mqSendMessage.sendMessage(sceneProPO.getMqMsg());
+                    mqProducer.sendOneWay(topicModelingA, sceneProPO.getMqMsg());
                 }
 
             }
@@ -1402,16 +1406,10 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
             scenePro.setThumb(ConstantUrl.DEFAULT_SCENE_PIC);
         }
         scenePro.setThumb(scenePro.getThumb().concat("?t=")+System.currentTimeMillis());
-//        String parametr = ComputerUtil.getMQMsg(projectNum, cameraName, unicode, cameraType, fileId, prefix, imgsName, isModel,
-//                userName, algorithm, resolution, buildType, path);
-        BuildSceneMqMessage buildSceneMqMessage = ComputerUtil.getBuildSceneMqMessage(projectNum, cameraName, unicode, cameraType, fileId, prefix, imgsName, isModel,
-                userName, algorithm, resolution, buildType, path);
-
 
         if(!ObjectUtils.isEmpty(userName)){
             scenePro.setUserId(userId);
         }
-        sceneProPO.setMqMsg(buildSceneMqMessage);
 
         if(sceneShootCount == null)
         {
@@ -1572,6 +1570,13 @@ public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper
 
         }
 
+        BuildSceneMqMessage buildSceneMqMessage =ComputerUtil.getBuildSceneMqMessage(
+                projectNum, cameraName, unicode, cameraType, fileId, prefix, imgsName, isModel,
+                userName, algorithm, resolution, buildType, path, scenePro.getId(), scenePro.getSceneName(),
+                scenePro.getWebSite(), scenePro.getCreateTime(), scenePro.getUserId(),
+                sceneProExt.getDataSource(), sceneProExt.getSceneStatus(), sceneProExt.getPayStatus(), scenePro.getThumb());
+
+        sceneProPO.setMqMsg(buildSceneMqMessage);
         BeanUtil.copyProperties(sceneProExt, sceneProPO);
         BeanUtil.copyProperties(scenePro, sceneProPO);
 

+ 22 - 7
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneProServiceImpl.java

@@ -4414,14 +4414,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         }
         SceneProExt sceneProExt = sceneProExtService.findBySceneProId(scenePro.getId());
 
-        // TODO: 2021/12/31  feign 调用  修改相机已使用用量
         platformClient.updateCameraDetailByCameraIdAndSpace(scenePro.getCameraId(), sceneProExt.getSpace());
-//        CameraDetailEntity detailEntity = cameraDetailService.findByCameraId(sceneProEntity.getCameraId());
-//        detailEntity.setUsedSpace(detailEntity.getUsedSpace().subtract(sceneProEntity.getSpace()));
-//        if(detailEntity.getUsedSpace().signum() < 0){
-//            detailEntity.setUsedSpace(new BigInteger("0"));
-//        }
-//        cameraDetailService.update(detailEntity);
 
         sceneProExt.setSpace(Long.parseLong("0"));
         sceneProExt.setUpdateTime(Calendar.getInstance().getTime());
@@ -4430,6 +4423,28 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         return ResultData.ok();
     }
 
+    @Override
+    public void tempScenes(List<Long> lockedIds) {
+        if (lockedIds == null || lockedIds.size() == 0){
+            return;
+        }
+        for (Long id : lockedIds){
+            SceneProExt sceneProExt = sceneProExtService.findBySceneProId(id);
+            sceneProExt.setPayStatus(-2);
+            sceneProExtService.updateById(sceneProExt);
+
+            ScenePro sceneProEntity = this.getById(id);
+            try{
+                Map<String, Object> map = new HashMap<>();
+                map.put("payStatus", -2);
+                FileUtils.writeJsonFile(ConstantFilePath.SCENE_PATH + "data/data" + sceneProEntity.getSceneCode() + "/scene.json", map);
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+
+        }
+    }
+
     private void dealTour(SceneEditVO base, JSONObject scenejson, Map<String,String> map,
                           StringBuffer dataBuffer, StringBuffer imagesBuffer) throws IOException {
         if(!StrUtil.isEmpty(base.getTourList())){

+ 1 - 1
4dkankan-center-scene/src/main/resources/bootstrap.yml

@@ -21,7 +21,7 @@ spring:
             group: DEFAULT_GROUP
             refresh: true
 
-          - data-id: common-mq-config.yaml
+          - data-id: common-mq-config2.yaml
             group: DEFAULT_GROUP
             refresh: true
 

+ 21 - 11
4dkankan-common-mq/pom.xml

@@ -27,21 +27,31 @@
             <artifactId>spring-core</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>com.alibaba.rocketmq</groupId>
-            <artifactId>rocketmq-common</artifactId>
-            <version>3.6.2.Final</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.alibaba.rocketmq</groupId>-->
+<!--            <artifactId>rocketmq-common</artifactId>-->
+<!--            <version>3.6.2.Final</version>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>org.apache.rocketmq</groupId>-->
+<!--            <artifactId>rocketmq-client</artifactId>-->
+<!--            <version>4.5.1</version>-->
+<!--        </dependency>-->
+
         <dependency>
             <groupId>org.apache.rocketmq</groupId>
-            <artifactId>rocketmq-client</artifactId>
-            <version>4.5.1</version>
+            <artifactId>rocketmq-spring-boot-starter</artifactId>
+            <version>2.1.1</version>
         </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>org.apache.rocketmq</groupId>-->
-<!--            <artifactId>rocketmq-spring-boot-starter</artifactId>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 8 - 1
4dkankan-common-mq/src/main/java/com/fdkankan/mq/message/BaseMQMessage.java

@@ -1,8 +1,15 @@
 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;
 
-public class BaseMQMessage implements Serializable {
+@Data
+public class BaseBuildSceneMessage implements Serializable{
     /**
      * 0:第一次计算;1:重新构建
      */

+ 122 - 104
4dkankan-common-mq/src/main/java/com/fdkankan/mq/message/BuildSceneMqMessage.java

@@ -1,6 +1,14 @@
 package com.fdkankan.mq.message;
 
-public class BuildSceneMqMessage extends BaseMQMessage {
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+public class BuildSceneMqMessage extends BaseBuildSceneMessage {
 
     private String unicode;
     private String path;
@@ -20,108 +28,118 @@ public class BuildSceneMqMessage extends BaseMQMessage {
     //判断调用V2还是V3版本的算法
     private String buildType;
 
-    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;
-    }
+    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;
+//    }
 
 }

+ 30 - 0
4dkankan-common-mq/src/main/java/com/fdkankan/mq/message/BuildSceneResultMqMessage.java

@@ -0,0 +1,30 @@
+package com.fdkankan.mq.message;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BuildSceneResultMqMessage {
+
+    private String cameraType;
+
+    private String scenenCode;
+
+    private Long space;
+
+    private Integer payStatus;
+
+    private String videosJson;
+
+    private Long computeTime;
+
+    private String fileId;
+
+    private Boolean buildSuccess;
+
+}

+ 24 - 0
4dkankan-common-mq/src/main/java/com/fdkankan/mq/message/MQBodyBean.java

@@ -0,0 +1,24 @@
+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 org.springframework.messaging.support.MessageBuilder;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class MQBodyBean implements Serializable {
+
+    private String id;
+
+    private Object content;
+
+    private Date date;
+}

+ 173 - 0
4dkankan-common-mq/src/main/java/com/fdkankan/mq/util/RocketMQProducer.java

@@ -0,0 +1,173 @@
+package com.fdkankan.mq.util;
+
+import cn.hutool.core.util.StrUtil;
+import org.apache.rocketmq.client.producer.SendCallback;
+import org.apache.rocketmq.client.producer.SendResult;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.Message;
+import org.springframework.messaging.support.MessageBuilder;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+
+@Component
+public class RocketMQProducer {
+
+    @Autowired
+    RocketMQTemplate rocketMQTemplate;
+
+    /**
+     * 同步发送
+     * @param topic 主题名
+     * @param body 消息体
+     * @return
+     */
+    public SendResult syncSend(String topic, Object body){
+        return this.syncSend(topic, null, null, body, null);
+    }
+
+    /**
+     * 同步发送
+     * @param topic 主题名
+     * @param tag  tag
+     * @param body 消息体
+     * @return
+     */
+    public SendResult syncSend(String topic, String tag, Object body){
+        return this.syncSend(topic, tag, null, body, null);
+    }
+
+    /**
+     * 同步发送
+     * @param topic 主题名
+     * @param tag  tag
+     * @param key key
+     * @param body 消息体
+     * @return
+     */
+    public SendResult syncSend(String topic, String tag, String key, Object body){
+        return this.syncSend(topic, tag, key, body, null);
+    }
+
+    /**
+     * 同步发送
+     * @param topic 主题名
+     * @param tag  tag
+     * @param key key
+     * @param body 消息体
+     * @param sendMsgTimeOut 发送消息超时时间
+     * @return
+     */
+    public SendResult syncSend(String topic, String tag, String key, Object body, Long sendMsgTimeOut){
+        if(StrUtil.isNotEmpty(tag)){
+            topic = topic + ":" + tag;
+        }
+        MessageBuilder messageBuilder = MessageBuilder.withPayload(body);
+        if(StrUtil.isNotEmpty(key)){
+            messageBuilder.setHeader("KEYS", key);
+        }
+        Message message = messageBuilder.build();
+
+        sendMsgTimeOut = Objects.isNull(sendMsgTimeOut) ? rocketMQTemplate.getProducer().getSendMsgTimeout() : sendMsgTimeOut;
+
+        return rocketMQTemplate.syncSend(topic, message, sendMsgTimeOut);
+    }
+
+    /**
+     * 异步发送消息
+     * @param topic 主题名
+     * @param body 消息体
+     * @param sendCallback 回调函数
+     */
+    public void asyncSend(String topic, Object body, SendCallback sendCallback){
+        this.asyncSend(topic, null, null, body, sendCallback, null);
+    }
+
+    /**
+     * 异步发送消息
+     * @param topic 主题名
+     * @param tag tag
+     * @param body 消息体
+     * @param sendCallback 回调函数
+     */
+    public void asyncSend(String topic, String tag, Object body, SendCallback sendCallback){
+        this.asyncSend(topic, tag, null, body, sendCallback, null);
+    }
+
+    /**
+     * 异步发送消息
+     * @param topic 主题名
+     * @param tag tag
+     * @param key key
+     * @param body 消息体
+     * @param sendCallback 回调函数
+     */
+    public void asyncSend(String topic, String tag, String key, Object body, SendCallback sendCallback){
+        this.asyncSend(topic, tag, key, body, sendCallback, null);
+    }
+
+    /**
+     * 异步发送消息
+     * @param topic 主题名
+     * @param tag tag
+     * @param key key
+     * @param body 消息体
+     * @param sendCallback 回调函数
+     * @param sendMsgTimeOut 发送消息超时时间
+     */
+    public void asyncSend(String topic, String tag, String key, Object body, SendCallback sendCallback, Long sendMsgTimeOut){
+        if(StrUtil.isNotEmpty(tag)){
+            topic = topic + ":" + tag;
+        }
+        MessageBuilder messageBuilder = MessageBuilder.withPayload(body);
+        if(StrUtil.isNotEmpty(key)){
+            messageBuilder.setHeader("KEYS", key);
+        }
+        Message message = messageBuilder.build();
+
+        sendMsgTimeOut = Objects.isNull(sendMsgTimeOut) ? rocketMQTemplate.getProducer().getSendMsgTimeout() : sendMsgTimeOut;
+
+        rocketMQTemplate.asyncSend(topic, message, sendCallback, sendMsgTimeOut);
+    }
+
+    /**
+     * 反向发送消息,生产者只管发送,不管发送结果
+     * @param topic 主题名
+     * @param body 消息体
+     */
+    public void sendOneWay(String topic, Object body){
+        this.sendOneWay(topic, null, null, body);
+    }
+
+    /**
+     * 反向发送消息,生产者只管发送,不管发送结果
+     * @param topic 主题名
+     * @param tag tag
+     * @param body 消息体
+     */
+    public void sendOneWay(String topic, String tag, Object body){
+        this.sendOneWay(topic, tag, null, body);
+    }
+
+    /**
+     * 反向发送消息,生产者只管发送,不管发送结果
+     * @param topic 主题名
+     * @param tag tag
+     * @param key key
+     * @param body 消息体
+     */
+    public void sendOneWay(String topic, String tag, String key, Object body){
+        if(StrUtil.isNotEmpty(tag)){
+            topic = topic + ":" + tag;
+        }
+        MessageBuilder messageBuilder = MessageBuilder.withPayload(body);
+        if(StrUtil.isNotEmpty(key)){
+            messageBuilder.setHeader("KEYS", key);
+        }
+        Message message = messageBuilder.build();
+
+        rocketMQTemplate.sendOneWay(topic, message);
+    }
+
+}

+ 6 - 5
4dkankan-common-redis/src/main/java/com/fdkankan/redis/util/RedisUtil.java

@@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit;
 
 @Component
 @Slf4j
-public class RedisUtil<K, V> {
+public class RedisUtil<K, V>{
 
     @Autowired
     private RedisTemplate redisTemplate;
@@ -43,6 +43,7 @@ public class RedisUtil<K, V> {
      * @return 时间(秒) 返回0代表为永久有效
      */
     public long getExpire(String key) {
+        redisTemplate.getExpire(key, TimeUnit.SECONDS);
         return redisTemplate.getExpire(key, TimeUnit.SECONDS);
     }
     /**
@@ -81,8 +82,8 @@ public class RedisUtil<K, V> {
      * @param key 键
      * @return 值
      */
-    public Object get(String key) {
-        return key == null ? null : redisTemplate.opsForValue().get(key);
+    public String get(String key) {
+        return key == null ? null : (String) redisTemplate.opsForValue().get(key);
     }
     /**
      * 普通缓存放入
@@ -91,7 +92,7 @@ public class RedisUtil<K, V> {
      * @param value 值
      * @return true成功 false失败
      */
-    public boolean set(String key, Object value) {
+    public boolean set(String key, String value) {
         try {
             redisTemplate.opsForValue().set(key, value);
             return true;
@@ -108,7 +109,7 @@ public class RedisUtil<K, V> {
      * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
      * @return true成功 false 失败
      */
-    public boolean set(String key, Object value, long time) {
+    public boolean set(String key, String value, long time) {
         try {
             if (time > 0) {
                 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);

+ 6 - 0
4dkankan-common/pom.xml

@@ -238,6 +238,12 @@
             <artifactId>4dkankan-common-mq</artifactId>
             <version>2.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-common-redis</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
 
 
     </dependencies>

+ 27 - 0
4dkankan-common/src/main/java/com/fdkankan/common/constant/BuildStatus.java

@@ -0,0 +1,27 @@
+package com.fdkankan.common.constant;
+
+public enum BuildStatus {
+
+    nobuild(0, "未建模"),
+    request(1, "请求建模"),
+    waiting(2, "打包失败"),
+    success(3, "建模成功"),
+    fail(-1, "建模失败");
+
+    private Integer code;
+    private String message;
+
+    private BuildStatus(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+}

+ 5 - 4
4dkankan-common/src/main/java/com/fdkankan/common/user/SSOLoginStore.java

@@ -2,6 +2,7 @@ package com.fdkankan.common.user;
 
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.util.SsoUtil;
+import com.fdkankan.redis.util.RedisUtil;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
@@ -12,7 +13,7 @@ import java.util.concurrent.TimeUnit;
 public class SSOLoginStore {
 
     @Resource
-    private RedisTemplate<String,String> redisTemplate;
+    private RedisUtil redisUtil;
     /**
      * get
      *
@@ -22,7 +23,7 @@ public class SSOLoginStore {
     public  SSOUser get(String sessionId) {
 
         String redisKey = redisKey(sessionId);
-        String objectValue = redisTemplate.opsForValue().get(redisKey);
+        String objectValue = (String) redisUtil.get(redisKey);
         if (objectValue != null) {
             return JSONObject.parseObject(objectValue, SSOUser.class);
         }
@@ -36,7 +37,7 @@ public class SSOLoginStore {
      */
     public  void remove(String sessionId) {
         String redisKey = redisKey(sessionId);
-        redisTemplate.delete(redisKey);
+        redisUtil.del(redisKey);
     }
 
     /**
@@ -47,7 +48,7 @@ public class SSOLoginStore {
      */
     public  void put(String sessionId, SSOUser ssoUser) {
         String redisKey = redisKey(sessionId);
-        redisTemplate.opsForValue().set(redisKey, JSONObject.toJSONString(ssoUser), 216000, TimeUnit.SECONDS);
+        redisUtil.set(redisKey, JSONObject.toJSONString(ssoUser), 216000);
     }
 
     private static String redisKey(String sessionId){

+ 15 - 3
4dkankan-common/src/main/java/com/fdkankan/common/util/ComputerUtil.java

@@ -1,5 +1,6 @@
 package com.fdkankan.common.util;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 //import com.fdkankan.base.mq.ModelingMsgProducer;
@@ -567,9 +568,12 @@ public class ComputerUtil {
 //    }
 
 
-    public static BuildSceneMqMessage getBuildSceneMqMessage(String projectNum, String cameraName, String unicode, Long cameraType, String fileId,
-                                               String prefix, String imgsName, String isModel, String userName,
-                                               String algorithm, Integer resolution, String buildType, String path) {
+    public static BuildSceneMqMessage getBuildSceneMqMessage(String projectNum, String cameraName, String unicode,
+                                                             Long cameraType, String fileId,String prefix, String imgsName,
+                                                             String isModel, String userName,String algorithm, Integer resolution,
+                                                             String buildType, String path, Long sceneProId, String sceneName, String webSite,
+                                                             Date sceneProCreateTime, Long userId, String dataSource,
+                                                             Integer sceneStatus, Integer PayStatus, String thumb) {
         BuildSceneMqMessage mqMsg = new BuildSceneMqMessage();
         mqMsg.setSceneNum(projectNum);
         mqMsg.setCameraName(cameraName);
@@ -584,6 +588,14 @@ public class ComputerUtil {
         mqMsg.setResolution(String.valueOf(resolution));
         mqMsg.setBuildType(buildType);
         mqMsg.setPath(path);
+        mqMsg.setSceneName(sceneName);
+        mqMsg.setWebSite(webSite);
+        mqMsg.setSceneProCreateTime(sceneProCreateTime);
+        mqMsg.setUserId(userId);
+        mqMsg.setDataSource(dataSource);
+        mqMsg.setSceneStatus(sceneStatus);
+        mqMsg.setPayStatus(PayStatus);
+        mqMsg.setCreateTime(DateUtil.format(Calendar.getInstance().getTime(), DateExtUtil.dateStyle));
         return mqMsg;
     }
 

+ 3 - 7
4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/AppAuthFilter.java

@@ -3,24 +3,20 @@ package com.fdkankan.gateway.filter;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
-import com.alibaba.fastjson.JSON;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.RedisKey;
-import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.DataUtils;
 import com.fdkankan.common.util.SHAUtils;
 import com.fdkankan.gateway.dto.TmDeveloperDto;
-import com.fdkankan.gateway.dto.User;
+import com.fdkankan.redis.util.RedisUtil;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilter;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.core.Ordered;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Mono;
@@ -35,7 +31,7 @@ import java.util.Map;
 public class AppAuthFilter implements GatewayFilter, Ordered {
 
     @Autowired
-    private RedisTemplate redisTemplate;
+    RedisUtil redisUtil;
 
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
@@ -48,7 +44,7 @@ public class AppAuthFilter implements GatewayFilter, Ordered {
             Long timeStamp = DataUtils.getLongReturnNullIfNotExit(params.get("timeStamp"));
             log.info("鉴权流程获取到的appid={},请求路径:{}" , appId , exchange.getRequest().getURI());
             //先获取校验app id的合法性
-            String developerJson = (String) redisTemplate.opsForValue().get(String.format(RedisKey.TM_DEVELOPER, appId));
+            String developerJson = (String)redisUtil.get(String.format(RedisKey.TM_DEVELOPER, appId));
             if(StrUtil.isBlank(developerJson)){
                 throw new BusinessException(ErrorCode.APP_ID_ILLEGAL);
             }

+ 2 - 3
4dkankan-gateway/src/main/java/com/fdkankan/gateway/filter/TokenFilter.java

@@ -6,6 +6,7 @@ import com.fdkankan.common.constant.RedisKey;
 import com.fdkankan.common.constant.ServerCode;
 import com.fdkankan.common.response.ResultData;
 import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.redis.util.RedisUtil;
 import io.jsonwebtoken.Claims;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,10 +44,8 @@ public class TokenFilter implements GlobalFilter, Ordered {
     @Value("${tokenCheck:check}")
     private String tokenCheck;
 
-//    @Resource
-//    private RedisUtil redisUtil;
     @Autowired
-    private RedisTemplate redisTemplate;
+    private RedisUtil redisUtil;
 
     static {
         List<String> userPermissions = new ArrayList<>();