xiewj 1 deň pred
rodič
commit
4870413b5f

+ 1 - 1
720yun_fd_base/gis_domain/src/main/java/com/gis/domain/dto/DeleteSceneDTO.java

@@ -8,6 +8,6 @@ import java.util.List;
  * @date 2024/4/7
  */
 @Data
-public class DeleteSceneDTO {
+public class NumListDTO {
     private List<String> numList;
 }

+ 3 - 0
720yun_fd_base/gis_mapper/src/main/java/com/gis/mapper/WorkMapper.java

@@ -61,4 +61,7 @@ public interface WorkMapper extends BaseMapper<WorkEntity> {
 
     @Select("select * from tb_work where is_delete=0 and sn_code = #{snCode} ")
     List<WorkEntity> getWorkSceneBySn(String snCode);
+
+    @Update("update tb_work set is_delete = #{delete} where num = #{num}")
+    int updateDeleted(String num, Integer delete);
 }

+ 2 - 0
720yun_fd_base/gis_service/src/main/java/com/gis/service/WorkService.java

@@ -85,4 +85,6 @@ public interface WorkService extends IService<WorkEntity> {
     boolean updateOfflineStatusAndUrl(String id, int offlineStatus,String url);
 
     void removeByNums(List<String> numList);
+    // 0代表未删除 , 1代表已经删除,默认写0
+    int updateDeleted(String num,Integer delete);
 }

+ 8 - 0
720yun_fd_base/gis_service/src/main/java/com/gis/service/impl/WorkServiceImpl.java

@@ -2111,4 +2111,12 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper, WorkEntity> impleme
         wrapper.in(WorkEntity::getNum, numList);
         remove(wrapper);
     }
+
+    @Override
+    public int updateDeleted(String num, Integer delete) {
+        if (ObjectUtil.isEmpty(num)) {
+            return 0;
+        }
+       return getBaseMapper().updateDeleted(num, delete);
+    }
 }

+ 2 - 5
720yun_fd_consumer/src/main/java/com/gis/listener/container/DeleteQueueListener.java

@@ -2,10 +2,7 @@ package com.gis.listener.container;
 
 import com.alibaba.fastjson.JSONObject;
 import com.gis.common.annotation.LogAnnotation;
-import com.gis.domain.dto.DeleteSceneDTO;
-import com.gis.domain.dto.DoSliceDTO;
-import com.gis.domain.entity.WorkEntity;
-import com.gis.service.FodderService;
+import com.gis.domain.dto.NumListDTO;
 import com.gis.service.WorkService;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
@@ -42,7 +39,7 @@ public class DeleteQueueListener implements ChannelAwareMessageListener {
             String msg = new String(message.getBody(), StandardCharsets.UTF_8);
             String messageId = message.getMessageProperties().getMessageId();
             log.info("场景DeleteQueue开始,id:{},deliveryTag:{},消息体:{}", messageId,deliveryTag,msg);
-            DeleteSceneDTO dto = JSONObject.parseObject(msg, DeleteSceneDTO.class);
+            NumListDTO dto = JSONObject.parseObject(msg, NumListDTO.class);
             if (dto != null && dto.getNumList() != null) {
                workService.removeByNums(dto.getNumList());
             }

+ 28 - 2
720yun_fd_consumer/src/main/java/com/gis/listener/container/RabbitMQConfig.java

@@ -41,6 +41,10 @@ public class RabbitMQConfig {
     @Value("${queue.qjkk-delete-scene}")
     String qjkkDeleteScene;
 
+    @Value("${queue.pano-recover-scene}")
+    String panoRecoverScene;
+
+
     @Autowired
     QueueNameService queueNameService;
     @Autowired
@@ -57,6 +61,9 @@ public class RabbitMQConfig {
     WorkOfflineListener workOfflineListener;
     @Autowired
     DeleteQueueListener deleteQueueListener;
+    @Autowired
+    RecoverQueueListener recoverQueueListener;
+
 
     @Bean
     public Queue doSliceQueue() {
@@ -93,6 +100,11 @@ public class RabbitMQConfig {
     }
 
     @Bean
+    public Queue recoverQueue() {
+        return new Queue(panoRecoverScene, true, false, false);
+    }
+
+    @Bean
     public SimpleMessageListenerContainer doSliceQueueContainer(ConnectionFactory connectionFactory) {
         SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
         log.info("doSliceQueue 启动,监听队列-{},动态伸缩启动-{}", doSliceQueue, !isDynamic);
@@ -176,14 +188,28 @@ public class RabbitMQConfig {
     @Bean
     public SimpleMessageListenerContainer deleteSceneContainer(ConnectionFactory connectionFactory) {
         SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
-        log.info("workOfflineListener 启动,监听队列-{},动态伸缩启动-{}", qjkkDeleteScene, !isDynamic);
+        log.info("deleteSceneListener 启动,监听队列-{},动态伸缩启动-{}", qjkkDeleteScene, !isDynamic);
         container.setQueueNames(qjkkDeleteScene);
         container.setMessageListener(deleteQueueListener);
         container.setAutoStartup(!isDynamic); // 根据配置决定是否自动启动
         container.setPrefetchCount(1);
         container.setBatchSize(3);
         container.setAcknowledgeMode(AcknowledgeMode.MANUAL);
-        container.setErrorHandler(t -> log.error("workOfflineListener  监听器发生异常", t));
+        container.setErrorHandler(t -> log.error("deleteSceneListener  监听器发生异常", t));
+        return container;
+    }
+
+    @Bean
+    public SimpleMessageListenerContainer recoverQueueContainer(ConnectionFactory connectionFactory) {
+        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
+        log.info("recoverQueueListener 启动,监听队列-{},动态伸缩启动-{}", panoRecoverScene, !isDynamic);
+        container.setQueueNames(panoRecoverScene);
+        container.setMessageListener(recoverQueueListener);
+        container.setAutoStartup(!isDynamic); // 根据配置决定是否自动启动
+        container.setPrefetchCount(1);
+        container.setBatchSize(3);
+        container.setAcknowledgeMode(AcknowledgeMode.MANUAL);
+        container.setErrorHandler(t -> log.error("recoverQueueListener  监听器发生异常", t));
         return container;
     }
 }

+ 56 - 0
720yun_fd_consumer/src/main/java/com/gis/listener/container/RecoverQueueListener.java

@@ -0,0 +1,56 @@
+package com.gis.listener.container;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gis.common.annotation.LogAnnotation;
+import com.gis.domain.dto.NumListDTO;
+import com.gis.service.WorkService;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * @author Xiewj
+ * @date 2025/3/19
+ */
+@Component
+@Slf4j
+public class RecoverQueueListener implements ChannelAwareMessageListener {
+
+    @Autowired
+    WorkService workService;
+
+
+    @Override
+    @LogAnnotation
+    public void onMessage(Message message, Channel channel) throws Exception {
+
+        if (ObjectUtils.isEmpty(message.getBody())) {
+            log.error("消息内容为空,退出构建,当前服务器id:{}" );
+            return;
+        }
+        long deliveryTag = message.getMessageProperties().getDeliveryTag();
+        try {
+            String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+            String messageId = message.getMessageProperties().getMessageId();
+            log.info("场景RecoverQueue开始,id:{},deliveryTag:{},消息体:{}", messageId,deliveryTag,msg);
+            NumListDTO dto = JSONObject.parseObject(msg, NumListDTO.class);
+            if (dto != null && dto.getNumList() != null) {
+                dto.getNumList().forEach(sceneCode->{
+                    log.info("场景{},恢复场景",sceneCode);
+                    workService.updateDeleted(sceneCode,0);
+                });
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("场景RecoverQueue报错{}",e.getMessage());
+        }finally {
+            channel.basicAck(deliveryTag, false);
+        }
+    }
+}

+ 1 - 0
720yun_fd_consumer/src/main/resources/application-pro.yml

@@ -84,6 +84,7 @@ queue:
     delete-scene: delete-scene
     update-scene-status: update-scene-status
     qjkk-delete-scene: qjkk-delete-scene
+    pano-recover-scene: pano-recover-scene
 
 config:
     bashPath: 720yun_fd_manage/

+ 1 - 0
720yun_fd_consumer/src/main/resources/application-proAws.yml

@@ -84,6 +84,7 @@ queue:
     delete-scene: delete-scene
     update-scene-status: update-scene-status
     qjkk-delete-scene: qjkk-delete-scene
+    pano-recover-scene: pano-recover-scene
 
 config:
     bashPath: 720yun_fd_manage/

+ 1 - 1
720yun_fd_consumer/src/main/resources/application-sit.yml

@@ -84,7 +84,7 @@ queue:
     delete-scene: delete-scene
     update-scene-status: update-scene-status
     qjkk-delete-scene: qjkk-delete-scene
-
+    pano-recover-scene: pano-recover-scene
 config:
     bashPath: 720yun_fd_manage/
 # application.yml

+ 1 - 0
720yun_fd_consumer/src/main/resources/application-sitAws.yml

@@ -82,6 +82,7 @@ queue:
     delete-scene: delete-scene
     update-scene-status: update-scene-status
     qjkk-delete-scene: qjkk-delete-scene
+    pano-recover-scene: pano-recover-scene
 
 config:
     bashPath: 720yun_fd_manage/

+ 1 - 0
720yun_fd_manage/src/main/resources/application-pro.yml

@@ -106,6 +106,7 @@ queue:
     delete-scene: delete-scene
     update-scene-status: update-scene-status
     qjkk-delete-scene: qjkk-delete-scene
+    pano-recover-scene: pano-recover-scene
 
 config:
     bashPath: ${project.name}/

+ 1 - 0
720yun_fd_manage/src/main/resources/application-proAws.yml

@@ -98,6 +98,7 @@ queue:
     delete-scene: delete-scene
     update-scene-status: update-scene-status
     qjkk-delete-scene: qjkk-delete-scene
+    pano-recover-scene: pano-recover-scene
 
 config:
     bashPath: ${project.name}/

+ 1 - 0
720yun_fd_manage/src/main/resources/application-sit.yml

@@ -98,6 +98,7 @@ queue:
     delete-scene: delete-scene
     update-scene-status: update-scene-status
     qjkk-delete-scene: qjkk-delete-scene
+    pano-recover-scene: pano-recover-scene
 
 config:
     bashPath: ${project.name}/

+ 1 - 0
720yun_fd_manage/src/main/resources/application-sitAws.yml

@@ -98,6 +98,7 @@ queue:
     delete-scene: delete-scene
     update-scene-status: update-scene-status
     qjkk-delete-scene: qjkk-delete-scene
+    pano-recover-scene: pano-recover-scene
 
 config:
     bashPath: ${project.name}/