dengsixing 3 lat temu
rodzic
commit
d95dad7cd5

+ 5 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/bean/SceneJsonBean.java

@@ -181,5 +181,10 @@ public class SceneJsonBean {
      */
     private Integer tours;
 
+    /**
+     * 是否有场景关联(0-否,1-是)
+     */
+    private Integer linkScenes;
+
 
 }

+ 6 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -642,6 +642,12 @@ public class SceneEditController extends BaseController {
     }
 
     @CheckCooperationPermit
+    @PostMapping(value = "/styles/delete")
+    public ResultData deleteStyles(@RequestBody @Validated DeleteLinkSceneStylesParamVO param) throws Exception {
+        return sceneEditInfoService.deleteStyles(param);
+    }
+
+    @CheckCooperationPermit
     @PostMapping(value = "/linkPan/list")
     public ResultData listLinkPan(@RequestParam(value = "num") String num) throws Exception {
         return sceneEditInfoService.listLinkPan(num);

+ 126 - 126
4dkankan-center-scene/src/main/java/com/fdkankan/scene/listener/RabbitMqListener.java

@@ -1,131 +1,131 @@
-//package com.fdkankan.scene.listener;
-//
-//import com.alibaba.fastjson.JSONObject;
-//import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
-//import com.fdkankan.rabbitmq.bean.BuildSceneFailDTMqMessage;
-//import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
-//import com.fdkankan.scene.service.IBuildSceneDTService;
-//import com.fdkankan.scene.service.IBuildScenePostService;
-//import com.fdkankan.scene.service.IBuildScenePreService;
-//import com.fdkankan.scene.service.impl.BuildSceneDTServiceImpl;
-//import com.rabbitmq.client.Channel;
-//import java.nio.charset.StandardCharsets;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.amqp.core.Message;
-//import org.springframework.amqp.rabbit.annotation.Queue;
-//import org.springframework.amqp.rabbit.annotation.RabbitListener;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.beans.factory.annotation.Value;
-//import org.springframework.stereotype.Component;
-//
-///**
-// * <p>
-// * TODO
-// * </p>
-// *
-// * @author dengsixing
-// * @since 2022/4/19
-// **/
-//@Slf4j
-//@Component
-//public class RabbitMqListener {
-//    @Value("${queue.modeling.modeling-pre}")
-//    private String queueModelingPre;
-//    @Value("${queue.modeling.modeling-post}")
-//    private String queueModelingPost;
-//    @Value("${queue.modeling.modeling-dt}")
-//    private String queueModelingDt;
-//
-//    @Autowired
-//    IBuildScenePreService buildScenePreService;
-//    @Autowired
-//    IBuildScenePostService buildScenePostService;
-//    @Autowired
-//    IBuildSceneDTService buildSceneDTService;
-//
-//
-//
-//    /**
-//     * 开启了手动确认模式,如果没有手动确认,消费者不会重试,当服务重启时会再次消费,因为rabbitmq认为你还没有处理完你的业务
-//     * queuesToDeclare = @Queue("${queue.modeling.modeling-test}"),  如果队列不不存在会自动创建队列
-//     * concurrency = "3"    设置消费线程数,每个线程每次只拉取一条消息消费
-//     */
-////    @RabbitListener(
-////        queuesToDeclare = @Queue("${queue.modeling.modeling-test}"),
-////        concurrency = "1"
-////    )
-////    public void receiveMessageDsx(Channel channel, Message message) throws Exception {
-////        channel.queueDeclare();
-////        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
-////        log.info("开始消费消息-" + msg + "-" + Thread.currentThread().getId());
-////        Thread.sleep(5000L);
-////        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-////        log.info("结束消息-" + Thread.currentThread().getId());
-////    }
-//
-//
-//    /**
-//     * 场景计算前置资源准备处理
-//     * @param channel
-//     * @param message
-//     * @throws Exception
-//     */
+package com.fdkankan.scene.listener;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
+import com.fdkankan.rabbitmq.bean.BuildSceneFailDTMqMessage;
+import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
+import com.fdkankan.scene.service.IBuildSceneDTService;
+import com.fdkankan.scene.service.IBuildScenePostService;
+import com.fdkankan.scene.service.IBuildScenePreService;
+import com.fdkankan.scene.service.impl.BuildSceneDTServiceImpl;
+import com.rabbitmq.client.Channel;
+import java.nio.charset.StandardCharsets;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/19
+ **/
+@Slf4j
+@Component
+public class RabbitMqListener {
+    @Value("${queue.modeling.modeling-pre}")
+    private String queueModelingPre;
+    @Value("${queue.modeling.modeling-post}")
+    private String queueModelingPost;
+    @Value("${queue.modeling.modeling-dt}")
+    private String queueModelingDt;
+
+    @Autowired
+    IBuildScenePreService buildScenePreService;
+    @Autowired
+    IBuildScenePostService buildScenePostService;
+    @Autowired
+    IBuildSceneDTService buildSceneDTService;
+
+
+
+    /**
+     * 开启了手动确认模式,如果没有手动确认,消费者不会重试,当服务重启时会再次消费,因为rabbitmq认为你还没有处理完你的业务
+     * queuesToDeclare = @Queue("${queue.modeling.modeling-test}"),  如果队列不不存在会自动创建队列
+     * concurrency = "3"    设置消费线程数,每个线程每次只拉取一条消息消费
+     */
 //    @RabbitListener(
-//        queuesToDeclare = @Queue("${queue.modeling.modeling-pre}"),
-//        concurrency = "${maxThread.modeling.modeling-pre}"
+//        queuesToDeclare = @Queue("${queue.modeling.modeling-test}"),
+//        concurrency = "1"
 //    )
-//    public void buildScenePreHandler(Channel channel, Message message) throws Exception {
-//        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
-//        String correlationId = (String) correlation;
+//    public void receiveMessageDsx(Channel channel, Message message) throws Exception {
+//        channel.queueDeclare();
 //        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
-//        log.info("场景计算资源准备开始,队列名:{},id:{},消息体:{}", queueModelingPre, correlationId, msg);
-//        BuildSceneCallMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneCallMessage.class);
-//        Thread.sleep(2000L);
-//        buildScenePreService.buildScenePre(buildSceneMessage);
+//        log.info("开始消费消息-" + msg + "-" + Thread.currentThread().getId());
+//        Thread.sleep(5000L);
 //        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+//        log.info("结束消息-" + Thread.currentThread().getId());
 //    }
-//
-//    /**
-//     * 场景计算后置结果处理
-//     * @param channel
-//     * @param message
-//     * @throws Exception
-//     */
-//    @RabbitListener(
-//        queuesToDeclare = @Queue("${queue.modeling.modeling-post}"),
-//        concurrency = "${maxThread.modeling.modeling-post}"
-//    )
-//    public void buildScenePostHandler(Channel channel, Message message) throws Exception {
-//        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
-//        String correlationId = (String) correlation;
-//        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
-//        log.info("场景计算结果处理开始,队列名:{},id:{},消息体:{}", queueModelingPost, correlationId, msg);
-//        BuildSceneResultMqMessage resultMessage = JSONObject.parseObject(msg, BuildSceneResultMqMessage.class);
-//        Thread.sleep(2000L);
-//        buildScenePostService.buildScenePost(resultMessage);
-//        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-//    }
-//
-//    /**
-//     * 场景计算发送钉钉消息
-//     * @param channel
-//     * @param message
-//     * @throws Exception
-//     */
-//    @RabbitListener(
-//        queuesToDeclare = @Queue("${queue.modeling.modeling-dt}"),
-//        concurrency = "${maxThread.modeling.modeling-dt}"
-//    )
-//    public void buildSceneDTHandler(Channel channel, Message message) throws Exception {
-//        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
-//        String correlationId = (String) correlation;
-//        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
-//        log.info("发送钉钉消息处理,队列名:{},id:{},消息体:{}", queueModelingDt, correlationId, msg);
-//        BuildSceneFailDTMqMessage dtMessage = JSONObject.parseObject(msg, BuildSceneFailDTMqMessage.class);
-//        buildSceneDTService.handFail(dtMessage.getReason(), dtMessage.getServerPath(),
-//            dtMessage.getNum(), dtMessage.getHostName(), BuildSceneDTServiceImpl.contentExt);
-//        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-//    }
-//
-//
-//}
+
+
+    /**
+     * 场景计算前置资源准备处理
+     * @param channel
+     * @param message
+     * @throws Exception
+     */
+    @RabbitListener(
+        queuesToDeclare = @Queue("${queue.modeling.modeling-pre}"),
+        concurrency = "${maxThread.modeling.modeling-pre}"
+    )
+    public void buildScenePreHandler(Channel channel, Message message) throws Exception {
+        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
+        String correlationId = (String) correlation;
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        log.info("场景计算资源准备开始,队列名:{},id:{},消息体:{}", queueModelingPre, correlationId, msg);
+        BuildSceneCallMessage buildSceneMessage = JSONObject.parseObject(msg, BuildSceneCallMessage.class);
+        Thread.sleep(2000L);
+        buildScenePreService.buildScenePre(buildSceneMessage);
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+    }
+
+    /**
+     * 场景计算后置结果处理
+     * @param channel
+     * @param message
+     * @throws Exception
+     */
+    @RabbitListener(
+        queuesToDeclare = @Queue("${queue.modeling.modeling-post}"),
+        concurrency = "${maxThread.modeling.modeling-post}"
+    )
+    public void buildScenePostHandler(Channel channel, Message message) throws Exception {
+        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
+        String correlationId = (String) correlation;
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        log.info("场景计算结果处理开始,队列名:{},id:{},消息体:{}", queueModelingPost, correlationId, msg);
+        BuildSceneResultMqMessage resultMessage = JSONObject.parseObject(msg, BuildSceneResultMqMessage.class);
+        Thread.sleep(2000L);
+        buildScenePostService.buildScenePost(resultMessage);
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+    }
+
+    /**
+     * 场景计算发送钉钉消息
+     * @param channel
+     * @param message
+     * @throws Exception
+     */
+    @RabbitListener(
+        queuesToDeclare = @Queue("${queue.modeling.modeling-dt}"),
+        concurrency = "${maxThread.modeling.modeling-dt}"
+    )
+    public void buildSceneDTHandler(Channel channel, Message message) throws Exception {
+        Object correlation = message.getMessageProperties().getHeader("spring_returned_message_correlation");
+        String correlationId = (String) correlation;
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        log.info("发送钉钉消息处理,队列名:{},id:{},消息体:{}", queueModelingDt, correlationId, msg);
+        BuildSceneFailDTMqMessage dtMessage = JSONObject.parseObject(msg, BuildSceneFailDTMqMessage.class);
+        buildSceneDTService.handFail(dtMessage.getReason(), dtMessage.getServerPath(),
+            dtMessage.getNum(), dtMessage.getHostName(), BuildSceneDTServiceImpl.contentExt);
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+    }
+
+
+}

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

@@ -76,6 +76,8 @@ public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
     ResultData deleteLinkPan(DeleteLinkPanParamVO param) throws Exception;
 
+    ResultData deleteStyles(DeleteLinkSceneStylesParamVO param) throws Exception;
+
 
 
 

+ 78 - 36
4dkankan-center-scene/src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -244,10 +244,6 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
             sceneEditInfoExt.setFloorPlanCompass(0f);
         }
 
-//        if(sceneEditControls == null){
-//            sceneEditControls = new SceneEditControls();
-//        }
-
         //生成sceneJson
         SceneJsonBean sceneJson = new SceneJsonBean();
         BeanUtil.copyProperties(sceneEditInfoExt, sceneJson);
@@ -255,9 +251,6 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         SceneEditControlsVO sceneEditControlsVO = BeanUtil.copyProperties(sceneEditControls, SceneEditControlsVO.class);
         sceneJson.setControls(sceneEditControlsVO);
         sceneJson.setNum(num);
-//        if(StrUtil.isNotEmpty(sceneEditInfo.getFloorPlanPath())){
-//            sceneJson.setFloorPlanPaths(sceneEditInfo.getFloorPlanPath().split(","));
-//        }
         sceneJson.setCreateTime(scenePlus.getCreateTime());
 
         sceneJson.setSceneResolution(scenePlusExt.getSceneResolution());
@@ -269,9 +262,8 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         //处理热点数据,生成hot.json
         this.publicHotData(num, sceneEditInfo);
 
-        // TODO: 2022/3/2 这里的逻辑放在上传球幕视频接口中做了,这里先暂时注释掉,以后要删除
-        //处理球幕视频
-//        this.buildVideo(sceneEditInfo, sceneProExt.getDataSource(), sceneNum);
+        //发布场景关联相关数据
+        this.publicLinkSceneData(num);
 
         //本地写sceneJson文件
         String localSceneJsonPath = String.format(ConstantFilePath.SCENE_DATA_PATH_V4, num) + "scene.json";
@@ -305,13 +297,6 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
         sceneEditInfoExtService.saveOrUpdate(sceneEditInfoExt);
 
-//        sceneEditControls.setEditInfoId(sceneEditInfo.getId());
-//        if(sceneEditControls.getId() == null){
-//            sceneEditControlsService.save(sceneEditControls);
-//        }else{
-//            sceneEditControlsService.updateById(sceneEditControls);
-//        }
-
         // todo 调用v3接口同步场景缩略图url---------------------------------start
         String url = fkankanMiniHost + URL_UPGRADE_TO_V4_RESULT_SYNC;
         fdkankanMiniClient.upgradeToV4ResultSync(url,
@@ -323,6 +308,32 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         return ResultData.ok();
     }
 
+    public void publicLinkSceneData(String num) throws IOException {
+
+        String imgEditPath = String.format(UploadFilePath.IMG_EDIT_PATH, num);
+        String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
+        String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
+
+        //生成link-scene.json并上传到发布目录
+        String linkPanKey = String.format(RedisKey.SCENE_LINKPAN_DATA, num);
+        Map<String, String> linkPanMap = redisUtil.hmget(linkPanKey);
+        if(CollUtil.isEmpty(linkPanMap)){
+            return;
+        }
+        JSONArray linkPanArr = new JSONArray();
+        linkPanMap.values().stream().forEach(linkPan->{
+            linkPanArr.add(JSON.parseObject(linkPan));
+        });
+        String linkScenePath = dataViewPath + "link-scene.json";
+        uploadToOssUtil.upload(linkPanArr.toString().getBytes(), linkScenePath);
+
+        //删除发布目录中的场景关联切图目录
+        uploadToOssUtil.deleteFile(imgViewPath + "panorama_edit");
+        //拷贝编辑目录到发布目录
+        uploadToOssUtil.copyFiles(imgEditPath + "panorama_edit",imgViewPath + "panorama_edit");
+
+    }
+
     private void buildVideo(SceneEditInfo sceneEditInfo, String path, String num) throws Exception{
         if(CommonStatus.NO.equals(sceneEditInfo.getBuildVideoStatus())){
             return;
@@ -1838,6 +1849,25 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     }
 
     @Override
+    public ResultData deleteStyles(DeleteLinkSceneStylesParamVO param) throws Exception {
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
+        if (scenePlus == null)
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+
+        List<String> idList = param.getIdList();
+
+        this.syncLinkPanStylesFromFileToRedis(param.getNum());
+
+        String key = String.format(RedisKey.SCENE_LINKPAN_STYLES, param.getNum());
+        redisUtil.hdel(key, idList.toArray());
+
+        //写入本地文件,作为备份
+        this.writeLinkScene(param.getNum());
+
+        return ResultData.ok();
+    }
+
+    @Override
     public ResultData deleteLinkPan(DeleteLinkPanParamVO param) throws Exception {
 
         ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
@@ -1917,13 +1947,15 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         }
         result.put("tags", tags);
 
-        //查询缓存是否包含icons
+        //封装styles数据
+        List<JSONObject> styles = Lists.newArrayList();
         key = String.format(RedisKey.SCENE_LINKPAN_STYLES, num);
-        Set<String> styles = redisUtil.sGet(key);
-        if(CollUtil.isEmpty(styles)){
-            styles = Sets.newHashSet();
+        Map<String, String> styleMap = redisUtil.hmget(key);
+        if(CollUtil.isNotEmpty(styleMap)){
+            styleMap.values().stream().forEach(style->{
+                styles.add(JSON.parseObject(style));
+            });
         }
-//        List<String> styleList = this.sortStyles(tags, styles);
         result.put("styles", styles);
 
         return ResultData.ok(result);
@@ -2008,8 +2040,14 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
         jsonObject.put("tags", tagJsonArr);
 
         String stylesKey = String.format(RedisKey.SCENE_LINKPAN_STYLES, num);
-        Set<String> stylesList = redisUtil.sGet(stylesKey);
-        jsonObject.put("styles", stylesList);
+        Map<String, String> styleMap = redisUtil.hmget(stylesKey);
+        List<JSONObject> styleList = Lists.newArrayList();
+        if(CollUtil.isNotEmpty(styleMap)){
+            styleMap.values().stream().forEach(style->{
+                styleList.add(JSONObject.parseObject(style));
+            });
+        }
+        jsonObject.put("styles", styleList);
 
         String linkScenePath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "link-scene.json";
         String lockKey = String.format(RedisLockKey.LOCK_LINK_SCENE_JSON, num);
@@ -2018,7 +2056,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
             return;
         }
         try{
-            FileUtils.writeFile(linkScenePath, jsonObject.toJSONString());
+            cn.hutool.core.io.FileUtil.writeUtf8String(jsonObject.toJSONString(), linkScenePath);
         }finally {
             redisLockUtil.unlockLua(lockKey);
         }
@@ -2033,17 +2071,15 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
             return;
         }
 
-        String key = String.format(RedisKey.SCENE_LINKPAN_STYLES, num);
-        redisUtil.sSet(key, styles.toArray());
-
-
-//        Map<String, String> addOrUpdateMap = new HashMap<>();
-//        hotDataList.stream().forEach(hotData -> {
-//            addOrUpdateMap.put(hotData.getSid(), hotData.getHotData());
-//        });
+        Map<String, String> styleMap = new HashMap<>();
+        styles.stream().forEach(style->{
+            JSONObject jsonObject = JSON.parseObject(style);
+            String id = jsonObject.getString("id");
+            styleMap.put(id, style);
+        });
 
-        //处理新增和修改数据
-//        this.addOrUpdateHotData(num, addOrUpdateMap);
+        String key = String.format(RedisKey.SCENE_LINKPAN_STYLES, num);
+        redisUtil.hmset(key, styleMap);
     }
 
     /**
@@ -2080,7 +2116,13 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
             if(CollUtil.isEmpty(stylesArr)){
                 return;
             }
-            redisUtil.sSet(key,  stylesArr.toJavaList(String.class).toArray());
+            Map<String, String> styleMap = new HashMap<>();
+            for (Object style : stylesArr) {
+                JSONObject styleObj = (JSONObject)style;
+                String id = styleObj.getString("id");
+                styleMap.put(id, styleObj.toJSONString());
+            }
+            redisUtil.hmset(key, styleMap);
         }finally {
             redisLockUtil.unlockLua(lockKey);
         }

+ 27 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/DeleteLinkSceneStylesParamVO.java

@@ -0,0 +1,27 @@
+package com.fdkankan.scene.vo;
+
+import java.util.List;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * <p>
+ * 删除场景关联图标参数类
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/2/8
+ **/
+@Data
+public class DeleteLinkSceneStylesParamVO {
+
+    @NotBlank(message = "场景码不能为空")
+    private String num;
+
+    @NotNull(message = "idList不能为空")
+    private List<String> idList;
+
+
+
+}

+ 5 - 0
4dkankan-center-scene/src/main/java/com/fdkankan/scene/vo/SceneInfoVO.java

@@ -171,6 +171,11 @@ public class SceneInfoVO {
      */
     private String mosaics;
 
+    /**
+     * 是否有场景关联(0-否,1-是)
+     */
+    private Integer linkScenes;
+
 
 
 

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

@@ -33,7 +33,7 @@ spring:
             refresh: true
       discovery:
         server-addr: 120.24.144.164:8848
-        namespace: 4dkankan-dev
+        namespace: 4dkankan-test
     sentinel:
       transport:
         dashboard: 120.24.144.164:8888