Jelajahi Sumber

增加内部接口

dsx 1 tahun lalu
induk
melakukan
316f30fb1c
24 mengubah file dengan 643 tambahan dan 20 penghapusan
  1. 90 10
      LOG_PATH_IS_UNDEFINED/job-executor/logs/log_info.log
  2. 18 3
      LOG_PATH_IS_UNDEFINED/job-executor/logs/log_warn.log
  3. 6 0
      pom.xml
  4. 21 0
      src/main/java/com/fdkankan/job/controller/CameraController.java
  5. 112 0
      src/main/java/com/fdkankan/job/controller/InnerApiController.java
  6. 1 1
      src/main/java/com/fdkankan/job/controller/SceneCopyLogController.java
  7. 87 0
      src/main/java/com/fdkankan/job/entity/Camera.java
  8. 2 2
      src/main/java/com/fdkankan/job/entity/SceneCopyLog.java
  9. 48 0
      src/main/java/com/fdkankan/job/listener/RabbitMqListener.java
  10. 18 0
      src/main/java/com/fdkankan/job/mapper/ICameraMapper.java
  11. 1 1
      src/main/java/com/fdkankan/job/mapper/ISceneCopyLogMapper.java
  12. 16 0
      src/main/java/com/fdkankan/job/service/ICameraService.java
  13. 12 0
      src/main/java/com/fdkankan/job/service/IInnerApiService.java
  14. 1 1
      src/main/java/com/fdkankan/job/service/ISceneCopyLogService.java
  15. 2 0
      src/main/java/com/fdkankan/job/service/IScenePlusService.java
  16. 20 0
      src/main/java/com/fdkankan/job/service/impl/CameraServiceImpl.java
  17. 145 0
      src/main/java/com/fdkankan/job/service/impl/InnerApiServiceImpl.java
  18. 1 1
      src/main/java/com/fdkankan/job/service/impl/SceneCopyLogServiceImpl.java
  19. 5 1
      src/main/java/com/fdkankan/job/service/impl/ScenePlusServiceImpl.java
  20. 8 0
      src/main/resources/bootstrap-prod-eur.yml
  21. 8 0
      src/main/resources/bootstrap-prod.yml
  22. 8 0
      src/main/resources/bootstrap-test-eur.yml
  23. 8 0
      src/main/resources/bootstrap-test.yml
  24. 5 0
      src/main/resources/mapper/job/CameraMapper.xml

File diff ditekan karena terlalu besar
+ 90 - 10
LOG_PATH_IS_UNDEFINED/job-executor/logs/log_info.log


+ 18 - 3
LOG_PATH_IS_UNDEFINED/job-executor/logs/log_warn.log

@@ -1,3 +1,18 @@
-2023-07-06 17:49:03.716 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[common-logback-config.yaml] & group[DEFAULT_GROUP]
-2023-07-06 17:49:03.747 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
-2023-07-06 17:49:03.778 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test-eur.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:23:58.543 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:23:58.578 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:26:54.848 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:26:54.880 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:28:02.305 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:28:02.336 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:28:45.727 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:28:45.761 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:29:42.125 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:29:42.158 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:30:14.733 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:30:14.764 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:46:25.946 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:46:25.982 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:48:37.390 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:48:37.423 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]
+2024-01-16 14:50:44.727 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor] & group[DEFAULT_GROUP]
+2024-01-16 14:50:44.758 [main] WARN  c.a.cloud.nacos.client.NacosPropertySourceBuilder - Ignore the empty nacos configuration and get it based on dataId[4dkankan-center-job-executor-test.yaml] & group[DEFAULT_GROUP]

+ 6 - 0
pom.xml

@@ -177,6 +177,12 @@
             <version>3.0.0-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-sms</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
+
     </dependencies>
 
     <dependencyManagement>

+ 21 - 0
src/main/java/com/fdkankan/job/controller/CameraController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.job.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 相机主表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-05
+ */
+@RestController
+@RequestMapping("/job/camera")
+public class CameraController {
+
+}
+

+ 112 - 0
src/main/java/com/fdkankan/job/controller/InnerApiController.java

@@ -0,0 +1,112 @@
+package com.fdkankan.job.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.job.entity.Camera;
+import com.fdkankan.job.entity.SceneCopyLog;
+import com.fdkankan.job.entity.ScenePlus;
+import com.fdkankan.job.entity.ScenePlusExt;
+import com.fdkankan.job.service.*;
+import com.fdkankan.web.response.ResultData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Slf4j
+@RestController
+@RequestMapping("/job/_inner")
+public class InnerApiController {
+
+    @Autowired
+    private IInnerApiService innerApiService;
+    @Autowired
+    private ICameraService cameraService;
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private ISceneCopyLogService sceneCopyLogService;
+
+    /**
+     * 场景计算通知
+     * @param num
+     * @param phone
+     * @return
+     */
+    @GetMapping("/sceneBuildNotice")
+    public ResultData sceneBuildNotice(@RequestParam(value = "num") String num, @RequestParam(value = "phone") String phone){
+        return innerApiService.sceneBuildNotice(num, phone);
+    }
+
+    @PostMapping("/batchMoveSceneByCamera")
+    public ResultData sceneBuildNotice(@RequestBody Map<String, Object> params) throws InterruptedException {
+        String snCode = (String) params.get("snCode");
+        List<String> numList = (List<String>) params.get("numList");
+        if(StrUtil.isEmpty(snCode) && CollUtil.isEmpty(numList)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
+        }
+
+        Camera camera = null;
+        Long cameraId = null;
+        if(StrUtil.isNotEmpty(snCode)){
+            camera = cameraService.getOne(new LambdaQueryWrapper<Camera>().eq(Camera::getSnCode, snCode));
+            if(Objects.isNull(camera)){
+                throw new BusinessException(ErrorCode.FAILURE_CODE_7010);
+            }
+            cameraId = camera.getId();
+        }
+
+        LambdaQueryWrapper<ScenePlus> wrapper =  new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePlus::getSceneStatus, -2);
+//        wrapper.eq(ScenePlus::getPhoneId, snCode);
+        if(Objects.nonNull(cameraId)){
+            wrapper.eq(ScenePlus::getCameraId, cameraId);
+        }
+        if(CollUtil.isNotEmpty(numList)){
+            wrapper.in(ScenePlus::getNum, numList);
+        }
+
+        List<ScenePlus> list = scenePlusService.list(wrapper);
+        if(CollUtil.isEmpty(list)){
+            return ResultData.ok("查询不到场景");
+        }
+
+        String urlFormat = "https://www.4dkankan.com/api/scene/file/copyDataAndBuild?dataSource=%s&sceneVer=V4&sourceBucket=4dkankan";
+        for (ScenePlus scenePlus : list) {
+            try {
+                List<SceneCopyLog> sceneCopyLogList = sceneCopyLogService.list(new LambdaQueryWrapper<SceneCopyLog>().eq(SceneCopyLog::getNewNum, scenePlus.getNum()));
+                if(CollUtil.isNotEmpty(sceneCopyLogList)){
+                    continue;
+                }
+                ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+                String url = String.format(urlFormat, scenePlusExt.getDataSource());
+                String res = HttpUtil.get(url);
+                ResultData resultData = JSON.parseObject(res, ResultData.class);
+                if(resultData.getCode() != 0){
+                    throw new RuntimeException("接口返回错误");
+                }
+                Thread.sleep(5000L);
+            }catch (Exception e){
+                log.error("迁移失败,num:{}", scenePlus.getNum());
+            }
+        }
+
+        return ResultData.ok();
+
+    }
+
+
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/job/controller/SceneCopyLogController.java

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
  * </p>
  *
  * @author 
- * @since 2023-07-12
+ * @since 2023-12-06
  */
 @RestController
 @RequestMapping("/job/sceneCopyLog")

+ 87 - 0
src/main/java/com/fdkankan/job/entity/Camera.java

@@ -0,0 +1,87 @@
+package com.fdkankan.job.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 相机主表
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-05
+ */
+@Getter
+@Setter
+@TableName("t_camera")
+public class Camera implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 相机的Mac地址
+     */
+    @TableField("child_name")
+    private String childName;
+
+    /**
+     * 激活时间
+     */
+    @TableField("activated_time")
+    private Date activatedTime;
+
+    /**
+     * 相机密码
+     */
+    @TableField("child_password")
+    private String childPassword;
+
+    /**
+     * sn码
+     */
+    @TableField("sn_code")
+    private String snCode;
+
+    /**
+     * wifi名称
+     */
+    @TableField("wifi_name")
+    private String wifiName;
+
+    /**
+     * wifi密码
+     */
+    @TableField("wifi_password")
+    private String wifiPassword;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+
+}

+ 2 - 2
src/main/java/com/fdkankan/job/entity/SceneCopyLog.java

@@ -16,7 +16,7 @@ import lombok.Setter;
  * </p>
  *
  * @author 
- * @since 2023-07-12
+ * @since 2023-12-06
  */
 @Getter
 @Setter
@@ -38,7 +38,7 @@ public class SceneCopyLog implements Serializable {
     private Integer copyUserId;
 
     @TableField("rec_status")
-    @TableLogic(value = "A", delval = "I")
+    @TableLogic
     private String recStatus;
 
     @TableField("create_time")

+ 48 - 0
src/main/java/com/fdkankan/job/listener/RabbitMqListener.java

@@ -0,0 +1,48 @@
+package com.fdkankan.job.listener;
+
+import com.alibaba.fastjson.JSON;
+import com.fdkankan.job.service.IInnerApiService;
+import com.rabbitmq.client.Channel;
+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.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/4/19
+ **/
+@Slf4j
+@Component
+public class RabbitMqListener {
+
+    private final static String QUEUE_SCENE_BUILD_NOTICE = "job-scene-build-notice";
+
+    @Autowired
+    private IInnerApiService innerApiService;
+
+
+    @RabbitListener(
+        queuesToDeclare = @Queue(QUEUE_SCENE_BUILD_NOTICE)
+    )
+    public void sceneBuildNotice(Channel channel, Message message) throws Exception {
+        String messageId = message.getMessageProperties().getMessageId();
+        String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+        log.info("开始消费消息:{}", msg);
+        innerApiService.sceneBuildNoticeListenerHandler(JSON.parseObject(msg));
+        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+        log.info("结束消费消息,id:{}", messageId);
+    }
+
+
+
+
+}

+ 18 - 0
src/main/java/com/fdkankan/job/mapper/ICameraMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.job.mapper;
+
+import com.fdkankan.job.entity.Camera;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 相机主表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-05
+ */
+@Mapper
+public interface ICameraMapper extends BaseMapper<Camera> {
+
+}

+ 1 - 1
src/main/java/com/fdkankan/job/mapper/ISceneCopyLogMapper.java

@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
  * </p>
  *
  * @author 
- * @since 2023-07-12
+ * @since 2023-12-06
  */
 @Mapper
 public interface ISceneCopyLogMapper extends BaseMapper<SceneCopyLog> {

+ 16 - 0
src/main/java/com/fdkankan/job/service/ICameraService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.job.service;
+
+import com.fdkankan.job.entity.Camera;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 相机主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-05
+ */
+public interface ICameraService extends IService<Camera> {
+
+}

+ 12 - 0
src/main/java/com/fdkankan/job/service/IInnerApiService.java

@@ -0,0 +1,12 @@
+package com.fdkankan.job.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.web.response.ResultData;
+
+import java.util.Map;
+
+public interface IInnerApiService {
+    public ResultData sceneBuildNotice(String num, String phone);
+
+    public void sceneBuildNoticeListenerHandler(JSONObject param) throws Exception;
+}

+ 1 - 1
src/main/java/com/fdkankan/job/service/ISceneCopyLogService.java

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * </p>
  *
  * @author 
- * @since 2023-07-12
+ * @since 2023-12-06
  */
 public interface ISceneCopyLogService extends IService<SceneCopyLog> {
 

+ 2 - 0
src/main/java/com/fdkankan/job/service/IScenePlusService.java

@@ -20,4 +20,6 @@ public interface IScenePlusService extends IService<ScenePlus> {
 
     List<SceneBean> listCleanOss4DeletedScene(int cleanOrigMonth);
 
+    ScenePlus getByNum(String num);
+
 }

+ 20 - 0
src/main/java/com/fdkankan/job/service/impl/CameraServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.job.service.impl;
+
+import com.fdkankan.job.entity.Camera;
+import com.fdkankan.job.mapper.ICameraMapper;
+import com.fdkankan.job.service.ICameraService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 相机主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-05
+ */
+@Service
+public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
+
+}

+ 145 - 0
src/main/java/com/fdkankan/job/service/impl/InnerApiServiceImpl.java

@@ -0,0 +1,145 @@
+package com.fdkankan.job.service.impl;
+
+import cn.hutool.core.util.PhoneUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.dysmsapi20170525.Client;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.SceneSource;
+import com.fdkankan.common.constant.SceneStatus;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.job.entity.ScenePlus;
+import com.fdkankan.job.entity.ScenePlusExt;
+import com.fdkankan.job.service.IInnerApiService;
+import com.fdkankan.job.service.IScenePlusExtService;
+import com.fdkankan.job.service.IScenePlusService;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.fdkankan.sms.SmsService;
+import com.fdkankan.web.response.ResultData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Service
+public class InnerApiServiceImpl implements IInnerApiService {
+
+    @Value("${4dkk.laserService.basePath}")
+    private String laserHost;
+
+    private final static String SMS_TEM_SCENE_BUILD_NOTICE = "场景码:%s,计算结果:%s";
+
+    private final static String QUEUE_SCENE_BUILD_NOTICE = "job-scene-build-notice";
+
+    private final static String SMS_TEM_CODE_SCENE_BUILD_NOTICE = "SMS_464050961";
+
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private RabbitMqProducer rabbitMqProducer;
+    @Autowired
+    private SmsService smsService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+
+    @Override
+    public ResultData sceneBuildNotice(String num, String phone) {
+
+        //校验手机格式
+        if(!PhoneUtil.isMobile(phone)){
+            throw new BusinessException(ErrorCode.PHONE_VIOLATION);
+        }
+
+        ScenePlus scenePlus = scenePlusService.getByNum(num);
+        if(Objects.isNull(scenePlus)){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
+        }
+
+        JSONObject result = new JSONObject();
+        result.put("num", num);
+        result.put("phone", phone);
+
+        if(scenePlus.getSceneStatus() == SceneStatus.SUCCESS.code() || scenePlus.getSceneStatus() == SceneStatus.NO_DISPLAY.code()){
+            result.put("status", scenePlus.getSceneStatus());
+            result.put("msg", "计算成功");
+            return ResultData.ok(result);
+        }
+
+        if(scenePlus.getSceneStatus() == SceneStatus.FAILD.code()){
+            result.put("status", scenePlus.getSceneStatus());
+            result.put("msg", "计算失败,失败原因请看场景计算报警群消息");
+            return ResultData.ok(result);
+        }
+
+        rabbitMqProducer.sendByWorkQueue(QUEUE_SCENE_BUILD_NOTICE, result);
+
+        return ResultData.ok("计算中,已开启计算监听,请留意手机短信");
+    }
+
+    @Override
+    public void sceneBuildNoticeListenerHandler(JSONObject param) throws Exception {
+        String num = param.getString("num");
+        String phone = param.getString("phone");
+
+        ScenePlus scenePlus = scenePlusService.getByNum(num);
+        if(scenePlus.getSceneStatus() == SceneStatus.wait.code()){
+            try {
+                Thread.sleep(6*1000L);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+            rabbitMqProducer.sendByWorkQueue(QUEUE_SCENE_BUILD_NOTICE, param);
+            return;
+        }
+        Map<String, String> params = new HashMap<>();
+        params.put("num", num);
+        params.put("title", scenePlus.getTitle());
+        String msg;
+        if(scenePlus.getSceneStatus() == SceneStatus.FAILD.code()){
+            msg = "计算失败,失败原因请看钉钉群【四维看看-计算失败】。";
+        }else {
+            msg = "计算成功";
+//            ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+//            if(scenePlus.getSceneSource() == SceneSource.JG.code() || scenePlus.getSceneSource() == SceneSource.SG.code()){
+//                msg = msg.concat(",点云场景链接:").concat(laserHost).concat("/uat/index.html?m=").concat(num);
+//                if(scenePlusExt.getIsObj() == CommonStatus.YES.code().intValue()){
+//                    msg = msg.concat(",mesh场景链接:").concat(scenePlusExt.getWebSite());
+//                }
+//            }else{
+//                msg = msg.concat(",场景链接:").concat(scenePlusExt.getWebSite());
+//            }
+
+        }
+        params.put("msg", msg);
+        smsService.sendSms(phone, JSON.toJSONString(params), SMS_TEM_CODE_SCENE_BUILD_NOTICE);
+    }
+
+
+    public static void main(String[] args) throws Exception {
+//        final boolean mobile = PhoneUtil.isMobile("+8615899973805");
+//        System.out.println(mobile);
+        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
+                // 必填,您的 AccessKey ID
+                .setAccessKeyId("LTAIUrvuHqj8pvry")
+                // 必填,您的 AccessKey Secret
+                .setAccessKeySecret("JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4");
+        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
+        config.endpoint = "dysmsapi.aliyuncs.com";
+        Client client = new Client(config);
+
+        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
+                .setPhoneNumbers("15899973805")
+                .setSignName("四维看看").setTemplateCode("SMS_179150247").setTemplateParam("{\"code\":123}");
+        SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());
+
+    }
+}

+ 1 - 1
src/main/java/com/fdkankan/job/service/impl/SceneCopyLogServiceImpl.java

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
  * </p>
  *
  * @author 
- * @since 2023-07-12
+ * @since 2023-12-06
  */
 @Service
 public class SceneCopyLogServiceImpl extends ServiceImpl<ISceneCopyLogMapper, SceneCopyLog> implements ISceneCopyLogService {

+ 5 - 1
src/main/java/com/fdkankan/job/service/impl/ScenePlusServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.job.service.impl;
 
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.job.dto.SceneBean;
 import com.fdkankan.job.entity.ScenePlus;
 import com.fdkankan.job.mapper.IScenePlusMapper;
@@ -38,5 +39,8 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         return this.baseMapper.selectCleanOrigSceneDeleted(time);
     }
 
-
+    @Override
+    public ScenePlus getByNum(String num) {
+        return this.getOne(new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getNum, num));
+    }
 }

+ 8 - 0
src/main/resources/bootstrap-prod-eur.yml

@@ -36,5 +36,13 @@ spring:
           - data-id: common-scaling.yaml
             group: DEFAULT_GROUP
             refresh: true
+
+          - data-id: forest-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: sms-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
       discovery:
         namespace: ${spring.cloud.nacos.namespace}

+ 8 - 0
src/main/resources/bootstrap-prod.yml

@@ -36,6 +36,14 @@ spring:
           - data-id: common-scaling.yaml
             group: DEFAULT_GROUP
             refresh: true
+
+          - data-id: forest-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: sms-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
       discovery:
         namespace: ${spring.cloud.nacos.namespace}
 

+ 8 - 0
src/main/resources/bootstrap-test-eur.yml

@@ -36,6 +36,14 @@ spring:
           - data-id: common-scaling.yaml
             group: DEFAULT_GROUP
             refresh: true
+
+          - data-id: forest-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: sms-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
       discovery:
         namespace: ${spring.cloud.nacos.namespace}
 

+ 8 - 0
src/main/resources/bootstrap-test.yml

@@ -36,6 +36,14 @@ spring:
           - data-id: common-scaling.yaml
             group: DEFAULT_GROUP
             refresh: true
+
+          - data-id: forest-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: sms-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
       discovery:
         namespace: ${spring.cloud.nacos.namespace}
 

+ 5 - 0
src/main/resources/mapper/job/CameraMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.job.mapper.ICameraMapper">
+
+</mapper>