Browse Source

Merge branch 'test'

lyhzzz 2 years ago
parent
commit
8a7f0ee3d4
57 changed files with 1433 additions and 42 deletions
  1. 7 0
      pom.xml
  2. 3 0
      src/main/java/com/fdkankan/manage/ManageApplication.java
  3. 1 0
      src/main/java/com/fdkankan/manage/common/CacheUtil.java
  4. 2 1
      src/main/java/com/fdkankan/manage/common/OssPath.java
  5. 31 0
      src/main/java/com/fdkankan/manage/common/SceneBuildProcessLogEnum.java
  6. 13 0
      src/main/java/com/fdkankan/manage/common/ShellCmd.java
  7. 127 0
      src/main/java/com/fdkankan/manage/common/ShellUtil.java
  8. 1 1
      src/main/java/com/fdkankan/manage/config/SaTokenConfigure.java
  9. 43 0
      src/main/java/com/fdkankan/manage/constant/ImportExcelType.java
  10. 19 0
      src/main/java/com/fdkankan/manage/controller/BaseController.java
  11. 21 0
      src/main/java/com/fdkankan/manage/controller/MqBackupController.java
  12. 54 0
      src/main/java/com/fdkankan/manage/controller/ToolsController.java
  13. 1 1
      src/main/java/com/fdkankan/manage/controller/UserController.java
  14. 63 0
      src/main/java/com/fdkankan/manage/entity/CameraIncrementLog.java
  15. 68 0
      src/main/java/com/fdkankan/manage/entity/MqBackup.java
  16. 81 0
      src/main/java/com/fdkankan/manage/entity/SceneBuildProcessLog.java
  17. 62 0
      src/main/java/com/fdkankan/manage/factory/CustomerRelaHandler.java
  18. 62 0
      src/main/java/com/fdkankan/manage/factory/DeviceInHandler.java
  19. 101 0
      src/main/java/com/fdkankan/manage/factory/DeviceOutHandler.java
  20. 9 0
      src/main/java/com/fdkankan/manage/factory/ExcelHandlerFactory.java
  21. 10 0
      src/main/java/com/fdkankan/manage/factory/ImportExcelHandler.java
  22. 4 3
      src/main/java/com/fdkankan/manage/generate/AutoGenerate.java
  23. 1 0
      src/main/java/com/fdkankan/manage/httpClient/param/LaserSceneParam.java
  24. 21 0
      src/main/java/com/fdkankan/manage/httpClient/param/TakeLookParam.java
  25. 16 8
      src/main/java/com/fdkankan/manage/httpClient/service/LaserService.java
  26. 30 3
      src/main/java/com/fdkankan/manage/httpClient/vo/OverallParam.java
  27. 45 0
      src/main/java/com/fdkankan/manage/inner/controller/InnerController.java
  28. 18 0
      src/main/java/com/fdkankan/manage/mapper/ICameraIncrementLogMapper.java
  29. 18 0
      src/main/java/com/fdkankan/manage/mapper/IMqBackupMapper.java
  30. 18 0
      src/main/java/com/fdkankan/manage/mapper/ISceneBuildProcessLogMapper.java
  31. 19 0
      src/main/java/com/fdkankan/manage/service/ICameraIncrementLogService.java
  32. 23 0
      src/main/java/com/fdkankan/manage/service/IMqBackupService.java
  33. 17 0
      src/main/java/com/fdkankan/manage/service/ISceneBuildProcessLogService.java
  34. 2 0
      src/main/java/com/fdkankan/manage/service/IScenePlusService.java
  35. 4 1
      src/main/java/com/fdkankan/manage/service/ISceneProService.java
  36. 10 0
      src/main/java/com/fdkankan/manage/service/IToolsApiService.java
  37. 45 0
      src/main/java/com/fdkankan/manage/service/impl/CameraIncrementLogServiceImpl.java
  38. 11 4
      src/main/java/com/fdkankan/manage/service/impl/CameraServiceImpl.java
  39. 3 0
      src/main/java/com/fdkankan/manage/service/impl/ExcelServiceImpl.java
  40. 97 0
      src/main/java/com/fdkankan/manage/service/impl/MqBackupServiceImpl.java
  41. 34 0
      src/main/java/com/fdkankan/manage/service/impl/SceneBuildProcessLogServiceImpl.java
  42. 18 0
      src/main/java/com/fdkankan/manage/service/impl/ScenePlusServiceImpl.java
  43. 85 9
      src/main/java/com/fdkankan/manage/service/impl/SceneProServiceImpl.java
  44. 20 0
      src/main/java/com/fdkankan/manage/service/impl/ToolsApiServiceImpl.java
  45. 10 1
      src/main/java/com/fdkankan/manage/service/impl/UserIncrementServiceImpl.java
  46. 42 3
      src/main/java/com/fdkankan/manage/test/TestController.java
  47. 3 0
      src/main/java/com/fdkankan/manage/util/Dateutils.java
  48. 8 1
      src/main/java/com/fdkankan/manage/util/ExcelUtil.java
  49. 2 2
      src/main/java/com/fdkankan/manage/vo/response/AgentNewLogVo.java
  50. 7 0
      src/main/java/com/fdkankan/manage/vo/response/SceneVo.java
  51. 4 0
      src/main/resources/bootstrap-test.yml
  52. 1 1
      src/main/resources/mapper/manage/AgentNewLogMapper.xml
  53. 5 0
      src/main/resources/mapper/manage/CameraIncrementLogMapper.xml
  54. 1 1
      src/main/resources/mapper/manage/CameraMapper.xml
  55. 5 0
      src/main/resources/mapper/manage/MqBackupMapper.xml
  56. 5 0
      src/main/resources/mapper/manage/SceneBuildProcessLogMapper.xml
  57. 2 2
      src/main/resources/mapper/manage/SceneProMapper.xml

+ 7 - 0
pom.xml

@@ -149,6 +149,13 @@
       <artifactId>javax.mail</artifactId>
       <version>1.5.4</version>
     </dependency>
+
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-utils-rabbitmq</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
+    </dependency>
+
   </dependencies>
 
   <build>

+ 3 - 0
src/main/java/com/fdkankan/manage/ManageApplication.java

@@ -21,6 +21,8 @@ public class ManageApplication implements CommandLineRunner {
 
     @Value("${fyun.type}")
     private String uploadType;
+    @Value("${fyun.bucket}")
+    private String bucket;
 
     public static void main(String[] args) {
         SpringApplication.run(ManageApplication.class, args);
@@ -29,6 +31,7 @@ public class ManageApplication implements CommandLineRunner {
     @Override
     public void run(String... args) throws Exception {
         CacheUtil.uploadType = uploadType;
+        CacheUtil.bucket = bucket;
 
     }
 }

+ 1 - 0
src/main/java/com/fdkankan/manage/common/CacheUtil.java

@@ -6,6 +6,7 @@ import com.fdkankan.manage.vo.request.OrderParam;
 public class CacheUtil {
 
     public static String uploadType;
+    public static String bucket;
     public static OrderParam orderParam = new OrderParam();
     public static AgentNewLogParam agentParam = new AgentNewLogParam();
 

+ 2 - 1
src/main/java/com/fdkankan/manage/common/OssPath.java

@@ -5,7 +5,8 @@ public class OssPath {
     public final static String invoiceOssDir = "manage/invoice/";
     public final static String v3_statusPath = "data/data%s/status.json";
     public final static String v4_statusPath = "scene_view_data/%s/data/status.json";
-    public final static String localStatusPath = System.getProperty("java.io.tmpdir") +"status.json";   //获取临时文件目录
+    public final static String localStatusPath = "/home/backend/4dkankan_v4/manage/%s";   //获取临时文件目录
+    public final static String localFdagePath = "/home/backend/4dkankan_v4/manage/%s";   //获取临时文件目录
 
     public final static String default_head ="manage/user/newHead.png";
 

+ 31 - 0
src/main/java/com/fdkankan/manage/common/SceneBuildProcessLogEnum.java

@@ -0,0 +1,31 @@
+package com.fdkankan.manage.common;
+
+import com.fdkankan.manage.entity.SceneBuildProcessLog;
+
+public enum SceneBuildProcessLogEnum {
+
+    PRE_ERROR("pre","场景计算资源准备错误"),
+    CALL_ERROR("call","算法计算错误"),
+    POST_ERROR("post","场景计算结果处理错误"),
+    NOT_KNOW_ERROR("not_know","未知原因错误");
+
+
+    private String process;
+    private String remark;
+
+
+    SceneBuildProcessLogEnum(String process, String remark) {
+        this.process = process;
+        this.remark = remark;
+    }
+
+    public static String getReason(String process) {
+        switch (process){
+            case "pre" : return PRE_ERROR.remark;
+            case "call" : return CALL_ERROR.remark;
+            case "post" : return POST_ERROR.remark;
+            default: return NOT_KNOW_ERROR.remark;
+        }
+    }
+
+}

+ 13 - 0
src/main/java/com/fdkankan/manage/common/ShellCmd.java

@@ -0,0 +1,13 @@
+package com.fdkankan.manage.common;
+
+public class ShellCmd {
+
+	/**
+	 * oss文件上传命令 bash /opt/ossutil/fyun-upload.sh {bucket} {srcPath} {destPath} {fyunType} {opType}
+	 * opType: file or folder
+	 * fyunType : oss ,aws
+	 */
+	public static final String FYUN_UPLOAD = "sudo bash /opt/ossutil/fyun-upload.sh %s %s /%s %s %s";
+	public static final String FYUN_DOWN = "sudo bash /opt/ossutil/fyun-download.sh %s /%s %s %s %s";
+
+}

+ 127 - 0
src/main/java/com/fdkankan/manage/common/ShellUtil.java

@@ -0,0 +1,127 @@
+package com.fdkankan.manage.common;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.BufferedReader;
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+@Slf4j
+public class ShellUtil {
+
+    /**
+     * 执行系统命令, 返回执行结果
+     * @param cmd 需要执行的命令
+     */
+    public static void execCmd(String cmd) {
+        StringBuilder result = new StringBuilder();
+
+        Process process = null;
+        BufferedReader bufrIn = null;
+        BufferedReader bufrError = null;
+        long startTime = System.currentTimeMillis();
+
+        try {
+            // 执行命令, 返回一个子进程对象(命令在子进程中执行)
+            log.info("执行cmd:{}",cmd);
+            process = Runtime.getRuntime().exec(cmd);
+            // 获取命令执行结果, 有两个结果: 正常的输出 和 错误的输出(PS: 子进程的输出就是主进程的输入)
+            //处理InputStream的线程
+            threadRun(process);
+            // 方法阻塞, 等待命令执行完成(成功会返回0)
+            process.waitFor();
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            closeStream(bufrIn);
+            closeStream(bufrError);
+            // 销毁子进程
+            if (process != null) {
+                process.destroy();
+            }
+        }
+        // 返回执行结果
+        log.info("执行cmd:{},结果:{},耗时:{}", cmd,result.toString(),System.currentTimeMillis() -startTime);
+    }
+
+    private static void threadRun(Process process) {
+        new Thread() {
+            @Override
+            public void run() {
+                BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
+                String line = null;
+                try {
+                    while((line = in.readLine()) != null) {
+                       log.debug("output: " + line);
+                    }
+                }
+                catch (IOException e) {
+                    e.printStackTrace();
+                }
+                finally {
+                    try {
+                        in.close();
+                    }
+                    catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }.start();
+        new Thread() {
+            @Override
+            public void run() {
+                BufferedReader err = new BufferedReader(new InputStreamReader(process.getErrorStream()));
+                String line = null;
+                try {
+                    while((line = err.readLine()) != null) {
+                        log.debug("err: " + line);
+                    }
+                }
+                catch (IOException e) {
+                    e.printStackTrace();
+                }
+                finally {
+                    try {
+                        err.close();
+                    }
+                    catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }.start();
+    }
+
+    private static void closeStream(Closeable stream) {
+        if (stream != null) {
+            try {
+                stream.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+    /**
+     * oss文件上传命令 bash /opt/ossutil/fyun-upload.sh {bucket} {srcPath} {destPath} {fyunType} {opType}
+     * opType: file or folder
+     *  //@param bucket     桶名
+     * @param srcPath    源文件路径
+     * @param destPath   目标文件路径
+     *  //@param fyunType   oss or aws
+     */
+    public static void yunUpload(String srcPath,String destPath){
+        String opType = srcPath.contains(".")? "file":"folder" ;
+        String cmd = String.format(ShellCmd.FYUN_UPLOAD, CacheUtil.bucket,srcPath,destPath,CacheUtil.uploadType,opType);
+        execCmd(cmd);
+    }
+    public static void yunDownload(String srcPath,String destPath){
+        String opType = srcPath.contains(".")? "file":"folder" ;
+        String cmd = String.format(ShellCmd.FYUN_DOWN,CacheUtil.bucket,srcPath,destPath,CacheUtil.uploadType,opType);
+        execCmd(cmd);
+    }
+
+}

+ 1 - 1
src/main/java/com/fdkankan/manage/config/SaTokenConfigure.java

@@ -45,7 +45,7 @@ public class SaTokenConfigure {
     public SaServletFilter getSaServletFilter() {
         return new SaServletFilter()
                 // 指定 拦截路由 与 放行路由
-                .addInclude("/**").addExclude("/**/reMyselfPassword","/test/**")
+                .addInclude("/**").addExclude("/**/reMyselfPassword","/**/test/**","/**/inner/**")
                 // 认证函数: 每次请求执行
                 .setAuth(obj -> {
                     log.info("---------- 进入Sa-Token全局认证 -----------");

+ 43 - 0
src/main/java/com/fdkankan/manage/constant/ImportExcelType.java

@@ -0,0 +1,43 @@
+package com.fdkankan.manage.constant;
+
+import com.fdkankan.common.constant.FileBizType;
+
+/**
+ * 文件业务类型
+ */
+public enum ImportExcelType {
+
+    DEVICE_IN(0, "deviceIn"),
+    DEVICE_OUT(1, "deviceOut"),
+    CUSTOMER_RELA(2, "customerRela"),
+    ;
+
+    private Integer code;
+    private String message;
+
+    private ImportExcelType(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+    public static ImportExcelType get(Integer code){
+        ImportExcelType[] values = ImportExcelType.values();
+        Integer enumValue = null;
+        for(ImportExcelType eachValue : values){
+            enumValue = eachValue.code();
+            if(enumValue.equals(code)){
+                return eachValue;
+            }
+        }
+        return null;
+    }
+
+}

+ 19 - 0
src/main/java/com/fdkankan/manage/controller/BaseController.java

@@ -2,11 +2,13 @@ package com.fdkankan.manage.controller;
 
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.interfaces.DecodedJWT;
+import com.fdkankan.manage.common.ResultData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
 
 @Component
 public class BaseController {
@@ -19,6 +21,9 @@ public class BaseController {
     protected String getToken(){
         return request.getHeader("token");
     }
+    protected String getSign(){
+        return request.getHeader("sign");
+    }
 
     protected Long getUserId(){
         String token = request.getHeader("token");
@@ -26,4 +31,18 @@ public class BaseController {
         return jwt.getClaim("userId").asLong();
     }
 
+    public Boolean checkSign(){
+        try {
+            String sign = getSign();
+            Long time = new Date().getTime();
+            Long signLong = Long.valueOf(sign);
+            if(time -signLong >1000 * 10){
+                return false;
+            }
+        }catch (Exception e){
+            return false;
+        }
+        return true;
+    }
+
 }

+ 21 - 0
src/main/java/com/fdkankan/manage/controller/MqBackupController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.manage.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+@RestController
+@RequestMapping("/manage/mqBackup")
+public class MqBackupController {
+
+}
+

+ 54 - 0
src/main/java/com/fdkankan/manage/controller/ToolsController.java

@@ -0,0 +1,54 @@
+package com.fdkankan.manage.controller;
+
+import com.dtflys.forest.annotation.Post;
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.service.IMqBackupService;
+import com.fdkankan.manage.service.IToolsApiService;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.UnsupportedEncodingException;
+
+/**
+ * 工具接口
+ */
+@RestController
+@RequestMapping("/service/manage/tools")
+public class ToolsController {
+
+    @Autowired
+    private IMqBackupService mqBackupService;
+
+    /**
+     * 将指定队列的消息出队
+     * @param queue 队列名称
+     * @param needRequeue 是否需要从新入队(0-否,1-是),如果选择了是,则需要调用入队接口从新将消息入队
+     * @return
+     * @throws UnsupportedEncodingException
+     */
+    @PostMapping("/getRabbitMqMsg")
+    public ResultData getRabbitMqMsg(
+            @RequestParam(value = "queue") String queue,
+            @RequestParam(value = "needRequeue") Integer needRequeue) throws UnsupportedEncodingException {
+        return mqBackupService.getRabbitMqMsg(queue, needRequeue);
+    }
+
+    /**
+     * 将指定队列的消息从新入队
+     * @param queue 队列名称
+     * @return
+     * @throws UnsupportedEncodingException
+     */
+    @PostMapping("/rabbitmqRequeue")
+    public ResultData rabbitmqRequeue(
+            @RequestParam(value = "queue") String queue) throws UnsupportedEncodingException {
+        return mqBackupService.rabbitmqRequeue(queue);
+    }
+
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/manage/controller/UserController.java

@@ -58,7 +58,7 @@ public class UserController {
     }
 
     /**
-     *  权益延期
+     *  权益延期  续费
      *  id      权益id
      *  year    延期年限
      */

+ 63 - 0
src/main/java/com/fdkankan/manage/entity/CameraIncrementLog.java

@@ -0,0 +1,63 @@
+package com.fdkankan.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-01
+ */
+@Getter
+@Setter
+@TableName("t_camera_increment_log")
+public class CameraIncrementLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 相机Id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 0 绑定,1未绑定
+     */
+    @TableField("operation_type")
+    private Integer operationType;
+
+    /**
+     * 操作userId
+     */
+    @TableField("operation_user")
+    private Long operationUser;
+
+    /**
+     * 权益Id
+     */
+    @TableField("increment_id")
+    private Long incrementId;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 68 - 0
src/main/java/com/fdkankan/manage/entity/MqBackup.java

@@ -0,0 +1,68 @@
+package com.fdkankan.manage.entity;
+
+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-01-05
+ */
+@Getter
+@Setter
+@TableName("t_mq_backup")
+public class MqBackup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private Long id;
+
+    /**
+     * 队列名
+     */
+    @TableField("queue")
+    private String queue;
+
+    /**
+     * 消息体
+     */
+    @TableField("msg")
+    private String msg;
+
+    /**
+     * 是否重新需要回队(0-否,1-是)
+     */
+    @TableField("need_requeue")
+    private Integer needRequeue;
+
+    /**
+     * 是否已重新回队(0-否,1-是)
+     */
+    @TableField("requeue")
+    private Integer requeue;
+
+    @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;
+
+
+}

+ 81 - 0
src/main/java/com/fdkankan/manage/entity/SceneBuildProcessLog.java

@@ -0,0 +1,81 @@
+package com.fdkankan.manage.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-01-28
+ */
+@Getter
+@Setter
+@TableName("t_scene_build_process_log")
+public class SceneBuildProcessLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 计算流程(pre-前置处理,call-计算,post-后置处理)
+     */
+    @TableField("process")
+    private String process;
+
+    /**
+     * mq消息队列名称
+     */
+    @TableField("queue_name")
+    private String queueName;
+
+    /**
+     * 处理状态(0-处理中,1-成功,-1-失败)
+     */
+    @TableField("state")
+    private Integer state;
+
+    /**
+     * 失败原因
+     */
+    @TableField("reason")
+    private String reason;
+
+    /**
+     * 创建时间
+     */
+    @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;
+
+
+}

+ 62 - 0
src/main/java/com/fdkankan/manage/factory/CustomerRelaHandler.java

@@ -0,0 +1,62 @@
+package com.fdkankan.manage.factory;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.constant.CameraOutTypeEnum;
+import com.fdkankan.manage.entity.AgentNew;
+import com.fdkankan.manage.exception.BusinessException;
+import com.fdkankan.manage.service.ICameraService;
+import com.fdkankan.manage.service.IExcelService;
+import com.fdkankan.manage.vo.request.CameraInOutParam;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@Component("customerRela")
+public class CustomerRelaHandler implements ImportExcelHandler{
+
+    @Autowired
+    private IExcelService excelService;
+    @Autowired
+    private ICameraService cameraService;
+
+    @Override
+    public int importExcel(List<HashMap<Integer, String>> excelRowList) {
+
+        if(CollUtil.isEmpty(excelRowList)){
+            return 0;
+        }
+
+        List<Integer> errorIndex = new ArrayList<>();
+        List<CameraInOutParam> companyParams = new ArrayList<>();
+
+        Integer index = 0;
+        for (HashMap<Integer, String> map : excelRowList) {
+            index ++;
+            if(index == 0 && !map.get(0).equals("客户关联模板")){
+                throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);
+            }
+            if(index <4){
+                continue;
+            }
+            CameraInOutParam param = new CameraInOutParam();
+            param.setCompanyName(map.get(0));
+            param.setSnCode(map.get(1));
+            if(StringUtils.isBlank(param.getSnCode()) || StringUtils.isBlank(param.getCompanyName())){
+                errorIndex.add(index -3 );
+            }
+            companyParams.add(param);
+        }
+        excelService.toExcelError(errorIndex);
+
+        if(companyParams.size() <=0){
+            throw new BusinessException(ResultCode.COMPANY_TEMPLATE_EMPTY);
+        }
+
+        return cameraService.updateCompany(companyParams);
+    }
+}

+ 62 - 0
src/main/java/com/fdkankan/manage/factory/DeviceInHandler.java

@@ -0,0 +1,62 @@
+package com.fdkankan.manage.factory;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.constant.CameraOutTypeEnum;
+import com.fdkankan.manage.entity.AgentNew;
+import com.fdkankan.manage.exception.BusinessException;
+import com.fdkankan.manage.service.ICameraService;
+import com.fdkankan.manage.service.IExcelService;
+import com.fdkankan.manage.vo.request.CameraInOutParam;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@Slf4j
+@Component("deviceIn")
+public class DeviceInHandler implements ImportExcelHandler{
+
+    @Autowired
+    private IExcelService excelService;
+    @Autowired
+    private ICameraService cameraService;
+
+    @Override
+    public int importExcel(List<HashMap<Integer, String>> excelRowList) {
+
+        if(CollUtil.isEmpty(excelRowList)){
+            return 0;
+        }
+
+        List<String> wifiNameList = new ArrayList<>();
+        List<Integer> errorIndex = new ArrayList<>();
+        Integer index = 0;
+        for (HashMap<Integer, String> map : excelRowList) {
+            index ++;
+            if(index == 0 && !map.get(0).equals("设备入库模板")){
+                throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);
+            }
+            if(index <4){   //从第四行开始
+                continue;
+            }
+            String wifiName = map.get(0);
+            if(StringUtils.isBlank(wifiName)){
+                errorIndex.add(index -3);
+            }
+            wifiNameList.add(wifiName);
+        }
+
+        excelService.toExcelError(errorIndex);
+
+        if(wifiNameList.size() <=0){
+            throw new BusinessException(ResultCode.IN_TEMPLATE_EMPTY);
+        }
+
+        return cameraService.ins(wifiNameList);
+    }
+}

+ 101 - 0
src/main/java/com/fdkankan/manage/factory/DeviceOutHandler.java

@@ -0,0 +1,101 @@
+package com.fdkankan.manage.factory;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.constant.CameraOutTypeEnum;
+import com.fdkankan.manage.entity.AgentNew;
+import com.fdkankan.manage.exception.BusinessException;
+import com.fdkankan.manage.service.IAgentNewService;
+import com.fdkankan.manage.service.ICameraService;
+import com.fdkankan.manage.service.IExcelService;
+import com.fdkankan.manage.vo.request.CameraInOutParam;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@Slf4j
+@Component("deviceOut")
+public class DeviceOutHandler implements ImportExcelHandler{
+
+    @Autowired
+    private IAgentNewService agentNewService;
+    @Autowired
+    private IExcelService excelService;
+    @Autowired
+    private ICameraService cameraService;
+
+    @Override
+    public int importExcel(List<HashMap<Integer, String>> excelRowList) {
+
+        if(CollUtil.isEmpty(excelRowList)){
+            return 0;
+        }
+
+        List<CameraInOutParam> params = new ArrayList<>();
+        List<Integer> errorIndex = new ArrayList<>();
+
+        Integer index = 0;
+        for (HashMap<Integer, String> map : excelRowList) {
+            index ++;
+            if(index == 0 && !map.get(0).equals("设备出库模板")){
+                throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);
+            }
+            if(index <4){
+                continue;
+            }
+            String snCode = map.get(0);
+            String outTypeString = map.get(1);
+            String companyName = map.get(2);
+            String orderSn = map.get(3);
+            String agentName = map.get(4);
+            CameraOutTypeEnum outTypeEnum = CameraOutTypeEnum.getByMsg(outTypeString);
+            if(outTypeEnum == null || StringUtils.isBlank(snCode)){
+                log.error("outError-->出库错误:出库类型为空或snCode为空:snCode:{},outType:{},companyName:{},orderSn:{},agentName:{}"
+                        ,snCode,outTypeString,companyName,orderSn,agentName);
+                errorIndex.add(index -3);
+            }
+            CameraInOutParam param = new CameraInOutParam();
+            if(outTypeEnum != null){
+                int outType = outTypeEnum.getCode();
+                param.setOutType(outType);
+            }
+            if(param.getOutType() != null && param.getOutType() == 4 && StringUtils.isBlank(agentName)){
+                log.error("outError-->出库错误:经销商为空错误:snCode:{},outType:{},companyName:{},orderSn:{},agentName:{}"
+                        ,snCode,outTypeString,companyName,orderSn,agentName);
+                errorIndex.add(index -3);
+            }
+            if(param.getOutType() != null && param.getOutType() != 4 && StringUtils.isNotBlank(agentName)){
+                log.error("outError-->出库错误:出库类型错误:snCode:{},outType:{},companyName:{},orderSn:{},agentName:{}"
+                        ,snCode,outTypeString,companyName,orderSn,agentName);
+                errorIndex.add(index -3);
+            }
+            if(StringUtils.isNotBlank(agentName)){
+                AgentNew agentNew = agentNewService.getByName(agentName);
+                if(agentNew == null){
+                    log.error("outError-->出库错误:代理商不存在:snCode:{},outType:{},companyName:{},orderSn:{},agentName:{}"
+                            ,snCode,outTypeString,companyName,orderSn,agentName);
+                    errorIndex.add(index -3);
+                }else {
+                    param.setAgentId(agentNew.getId());
+                }
+            }
+            param.setCompanyName(companyName);
+            param.setOrderSn(orderSn);
+            param.setSnCode(snCode);
+            params.add(param);
+        }
+
+        excelService.toExcelError(errorIndex);
+
+        if(params.size() <=0){
+            throw new BusinessException(ResultCode.OUT_TEMPLATE_EMPTY);
+        }
+
+        return cameraService.outs(params);
+    }
+}

+ 9 - 0
src/main/java/com/fdkankan/manage/factory/ExcelHandlerFactory.java

@@ -0,0 +1,9 @@
+package com.fdkankan.manage.factory;
+
+import cn.hutool.extra.spring.SpringUtil;
+
+public class ExcelHandlerFactory {
+    public static ImportExcelHandler getHandler(String name){
+        return SpringUtil.getBean(name);
+    }
+}

+ 10 - 0
src/main/java/com/fdkankan/manage/factory/ImportExcelHandler.java

@@ -0,0 +1,10 @@
+package com.fdkankan.manage.factory;
+
+import java.util.HashMap;
+import java.util.List;
+
+public interface ImportExcelHandler {
+
+    int importExcel(List<HashMap<Integer, String>> excelRowList);
+
+}

+ 4 - 3
src/main/java/com/fdkankan/manage/generate/AutoGenerate.java

@@ -18,7 +18,8 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"manage", getTables(new String[]{
-                "t_folder_scene",
+                "t_camera_increment_log",
+                "t_mq_backup",
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -46,8 +47,8 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://rm-wz90w10465iiwwv098o.mysql.rds.aliyuncs.com:3306/4dkankan_v4_prod",
-                "root","D2719bd0cae1a005")
+        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan_v4",
+                "root","4Dage@4Dage#@168")
                 .globalConfig(builder -> {
                     builder.author("")               //作者
                             .outputDir(path+"\\src\\main\\java")    //输出路径(写到java目录)

+ 1 - 0
src/main/java/com/fdkankan/manage/httpClient/param/LaserSceneParam.java

@@ -15,6 +15,7 @@ public class LaserSceneParam {
     private List<String> snCodes = new ArrayList<>();
 
     private List<String> sceneCodes;
+    private String sceneCode;
     private String startTime;
     private String endTime;
 

+ 21 - 0
src/main/java/com/fdkankan/manage/httpClient/param/TakeLookParam.java

@@ -1,6 +1,9 @@
 package com.fdkankan.manage.httpClient.param;
 
+import com.fdkankan.manage.util.Dateutils;
+import com.fdkankan.manage.util.FiledUtil;
 import com.fdkankan.manage.vo.request.RequestBase;
+import jodd.util.StringUtil;
 import lombok.Data;
 
 @Data
@@ -9,4 +12,22 @@ public class TakeLookParam extends RequestBase {
     private String roomTitle;
     private String roomUserName;
     private Integer isShow;
+
+    private String field;
+
+    private String order;
+
+    public String getField() {
+        if(StringUtil.isNotBlank(field)){
+            return FiledUtil.upperCharToUnderLine(field);
+        }
+        return "create_time";
+    }
+
+    public String getOrder() {
+        if(StringUtil.isNotBlank(order) && order.contains("end")){
+            return order.split("end")[0];
+        }
+        return "DESC";
+    }
 }

+ 16 - 8
src/main/java/com/fdkankan/manage/httpClient/service/LaserService.java

@@ -3,12 +3,10 @@ package com.fdkankan.manage.httpClient.service;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fdkankan.manage.common.CacheUtil;
-import com.fdkankan.manage.common.PageInfo;
-import com.fdkankan.manage.common.Result;
-import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.common.*;
 import com.fdkankan.manage.entity.Camera;
 import com.fdkankan.manage.entity.CameraDetail;
+import com.fdkankan.manage.entity.SceneBuildProcessLog;
 import com.fdkankan.manage.entity.User;
 import com.fdkankan.manage.exception.BusinessException;
 import com.fdkankan.manage.httpClient.client.LaserClient;
@@ -16,9 +14,7 @@ import com.fdkankan.manage.httpClient.param.LaserSceneMoveParam;
 import com.fdkankan.manage.httpClient.param.LaserSceneParam;
 import com.fdkankan.manage.httpClient.param.SSDownSceneParam;
 import com.fdkankan.manage.httpClient.vo.FdkkResponse;
-import com.fdkankan.manage.service.ICameraDetailService;
-import com.fdkankan.manage.service.ICameraService;
-import com.fdkankan.manage.service.IUserService;
+import com.fdkankan.manage.service.*;
 import com.fdkankan.manage.vo.request.SceneParam;
 import com.fdkankan.manage.vo.response.SSDownSceneVo;
 import com.fdkankan.manage.vo.response.SceneVo;
@@ -48,6 +44,10 @@ public class LaserService {
     ICameraDetailService cameraDetailService;
     @Autowired
     ICameraService cameraService;
+    @Autowired
+    ISceneBuildProcessLogService sceneBuildProcessLogService;
+    @Autowired
+    IScenePlusService scenePlusService;
 
 
     public PageInfo pageList(SceneParam param) {
@@ -89,6 +89,14 @@ public class LaserService {
                 vo.setThumb(newBasePath +"/index.html?m="+vo.getNum() );
                 vo.setPayStatus(1);
                 vo.setIsObj(obj.getInteger("buildObjStatus"));
+                if(vo.getStatus() == -1){  //计算失败
+                    SceneBuildProcessLog sceneBuildProcessLog = sceneBuildProcessLogService.getByNum(vo.getNum());
+                    if(sceneBuildProcessLog != null){
+                        vo.setSceneBuildProcessLog(sceneBuildProcessLog);
+                        vo.setBuildErrorReason(SceneBuildProcessLogEnum.getReason(sceneBuildProcessLog.getProcess()));
+                        vo.setDataSource(scenePlusService.getDataSourceByNum(vo.getNum()));
+                    }
+                }
                 sceneVoList.add(vo);
             }
 
@@ -132,7 +140,7 @@ public class LaserService {
             param.setSnCode("phoneEmptySelect");
         }
         if(StringUtils.isNotBlank(param.getNum())){
-            newParam.setSceneCodes(Arrays.asList(param.getNum()));
+            newParam.setSceneCode(param.getNum());
         }
         BeanUtils.copyProperties(param,newParam);
         newParam.setTitle(param.getSceneName());

+ 30 - 3
src/main/java/com/fdkankan/manage/httpClient/vo/OverallParam.java

@@ -1,10 +1,13 @@
 package com.fdkankan.manage.httpClient.vo;
 
+import com.fdkankan.manage.util.Dateutils;
 import com.fdkankan.manage.util.FiledUtil;
 import jodd.util.StringUtil;
 import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
 
+import java.util.List;
+
 @Data
 public class OverallParam {
     private String id;
@@ -13,11 +16,17 @@ public class OverallParam {
     private String searchKey;
     private String userId;
 
+    private List<String> timeList;
+    private String startTime;
+    private String endTime;
+    private String sceneCodes;
+    private String workId;
+
 
     private String sceneName;
     private String userName;
 
-    private String filed;
+    private String field;
 
     private String order;
 
@@ -39,8 +48,8 @@ public class OverallParam {
     }
 
     public String getOrderBy() {
-        if(StringUtil.isNotBlank(filed)){
-            return FiledUtil.upperCharToUnderLine(filed);
+        if(StringUtil.isNotBlank(field)){
+            return FiledUtil.upperCharToUnderLine(field);
         }
         return "time";
     }
@@ -52,4 +61,22 @@ public class OverallParam {
         return "DESC";
     }
 
+    public String getStartTime() {
+        if(timeList != null && timeList.size() >1){
+            return Dateutils.getStartTime(timeList.get(0));
+        }
+        return Dateutils.getStartTime(startTime);
+    }
+
+    public String getEndTime() {
+        if(timeList != null && timeList.size() >1){
+            return Dateutils.getEndTime(timeList.get(1));
+        }
+        return Dateutils.getEndTime(endTime);
+    }
+
+    public String getWorkId() {
+
+        return sceneCodes;
+    }
 }

+ 45 - 0
src/main/java/com/fdkankan/manage/inner/controller/InnerController.java

@@ -0,0 +1,45 @@
+package com.fdkankan.manage.inner.controller;
+
+import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.controller.BaseController;
+import com.fdkankan.manage.exception.BusinessException;
+import com.fdkankan.manage.service.ICommonService;
+import com.fdkankan.manage.service.ISceneProService;
+import com.fdkankan.manage.vo.request.SceneParam;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/6/7
+ **/
+@RestController
+@RequestMapping("/service/manage/inner")
+public class InnerController extends BaseController {
+
+    @Autowired
+    private ISceneProService sceneProService;
+
+    @PostMapping("/move")
+    public ResultData move(@RequestBody SceneParam param){
+        if(!checkSign()){
+            return ResultData.error(-1,"签名错误");
+        }
+
+        if(StringUtils.isEmpty(param.getNum()) || StringUtils.isEmpty(param.getSnCode())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        sceneProService.move(param);
+        return ResultData.ok();
+    }
+
+}

+ 18 - 0
src/main/java/com/fdkankan/manage/mapper/ICameraIncrementLogMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.mapper;
+
+import com.fdkankan.manage.entity.CameraIncrementLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-01
+ */
+@Mapper
+public interface ICameraIncrementLogMapper extends BaseMapper<CameraIncrementLog> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/manage/mapper/IMqBackupMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.mapper;
+
+import com.fdkankan.manage.entity.MqBackup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+@Mapper
+public interface IMqBackupMapper extends BaseMapper<MqBackup> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/manage/mapper/ISceneBuildProcessLogMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.mapper;
+
+import com.fdkankan.manage.entity.SceneBuildProcessLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景计算流程状态表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-28
+ */
+@Mapper
+public interface ISceneBuildProcessLogMapper extends BaseMapper<SceneBuildProcessLog> {
+
+}

+ 19 - 0
src/main/java/com/fdkankan/manage/service/ICameraIncrementLogService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.CameraIncrementLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-01
+ */
+public interface ICameraIncrementLogService extends IService<CameraIncrementLog> {
+
+    void saveLog(Long cameraId, Long incrementId, Long userId, Integer operationType);
+
+    void saveUnbindLog(Long cameraId);
+}

+ 23 - 0
src/main/java/com/fdkankan/manage/service/IMqBackupService.java

@@ -0,0 +1,23 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.entity.MqBackup;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.io.UnsupportedEncodingException;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+public interface IMqBackupService extends IService<MqBackup> {
+
+    ResultData getRabbitMqMsg(String queue, int needRequeue) throws UnsupportedEncodingException;
+
+    ResultData rabbitmqRequeue(String queue) throws UnsupportedEncodingException;
+
+}

+ 17 - 0
src/main/java/com/fdkankan/manage/service/ISceneBuildProcessLogService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.SceneBuildProcessLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 场景计算流程状态表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-28
+ */
+public interface ISceneBuildProcessLogService extends IService<SceneBuildProcessLog> {
+
+    SceneBuildProcessLog getByNum(String num);
+}

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

@@ -25,4 +25,6 @@ public interface IScenePlusService extends IService<ScenePlus> {
     HashMap<Long, Long> getCountGroupByUserId(List<Long> userIdList,Integer isObj);
 
     HashMap<Long, Long> getCountGroupByCameraId(ArrayList<Long> longs);
+
+    String getDataSourceByNum(String num);
 }

+ 4 - 1
src/main/java/com/fdkankan/manage/service/ISceneProService.java

@@ -47,4 +47,7 @@ public interface ISceneProService extends IService<ScenePro> {
     Long getSsObjCount(List<String> asList, String startTime);
 
     HashMap<String, String> getSnCodeByNumList(Set<String> numList);
-}
+
+    void updateFdage(String oldSnCode,String newSnCode,String dataSource);
+
+    }

+ 10 - 0
src/main/java/com/fdkankan/manage/service/IToolsApiService.java

@@ -0,0 +1,10 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.common.ResultData;
+
+import java.io.UnsupportedEncodingException;
+
+public interface IToolsApiService {
+
+
+}

+ 45 - 0
src/main/java/com/fdkankan/manage/service/impl/CameraIncrementLogServiceImpl.java

@@ -0,0 +1,45 @@
+package com.fdkankan.manage.service.impl;
+
+import com.fdkankan.manage.entity.CameraIncrementLog;
+import com.fdkankan.manage.entity.UserIncrement;
+import com.fdkankan.manage.mapper.ICameraIncrementLogMapper;
+import com.fdkankan.manage.service.ICameraIncrementLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.manage.service.IUserIncrementService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-02-01
+ */
+@Service
+public class CameraIncrementLogServiceImpl extends ServiceImpl<ICameraIncrementLogMapper, CameraIncrementLog> implements ICameraIncrementLogService {
+
+    @Override
+    public void saveLog(Long cameraId, Long incrementId, Long userId, Integer operationType) {
+        CameraIncrementLog cameraIncrementLog = new CameraIncrementLog();
+        cameraIncrementLog.setCameraId(cameraId);
+        cameraIncrementLog.setOperationType(operationType);
+        cameraIncrementLog.setOperationUser(userId);
+        cameraIncrementLog.setIncrementId(incrementId);
+        this.save(cameraIncrementLog);
+
+    }
+
+    @Autowired
+    IUserIncrementService userIncrementService;
+
+    @Override
+    public void saveUnbindLog(Long cameraId) {
+        UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
+        if(userIncrement != null){
+            this.saveLog(cameraId,userIncrement.getId(),null,1);
+        }
+        this.saveLog(cameraId,null,null,3);
+    }
+}

+ 11 - 4
src/main/java/com/fdkankan/manage/service/impl/CameraServiceImpl.java

@@ -19,6 +19,7 @@ import com.fdkankan.manage.vo.request.CameraInOutParam;
 import com.fdkankan.manage.vo.request.CameraParam;
 import com.fdkankan.manage.vo.response.CameraDataVo;
 import com.fdkankan.manage.vo.response.CameraDetailVo;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -36,6 +37,7 @@ import java.util.stream.Collectors;
  * @since 2022-06-16
  */
 @Service
+@Slf4j
 public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
 
     @Autowired
@@ -54,8 +56,8 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
     ICompanyService companyService;
     @Autowired
     IExcelService excelService;
-    @Value("${fyun.type}")
-    private String ossType;
+    @Autowired
+    IOrderService orderService;
 
     @Override
     public List<Camera> getListByCameraIdList(List<Long> cameraIdList) {
@@ -279,6 +281,7 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
                     continue;
                 }
                 if(!dbOrderSn.contains(sn)){
+                    log.error("excel-export-error-->:订单号不存在不存在:index:{},orderSn:{}",index+3,sn);
                     errorList.add(index);
                 }
             }
@@ -314,12 +317,14 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
         for (String snCode : snCodeList) {
             index ++;
             if(StringUtils.isBlank(snCode)){
+                log.error("excel-export-error-->:index:{},snCode不存在:snCode:{}",index+3,snCode);
                 errorList.add(index);
             }
             if(map.get(snCode) == null){
                 map.put(snCode,1);
             }else {
                 map.put(snCode,2);
+                log.error("excel-export-error-->:index:{},snCode已存在:snCode:{}",index+3,snCode);
                 errorList.add(index);
             }
         }
@@ -329,6 +334,7 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
         for (String snCode : snCodeList) {
             index2 ++;
             if(!dbSnCode.contains(snCode)){
+                log.error("excel-export-error-->:index:{},snCode未入库:snCode:{}",index2+3,snCode);
                 errorList.add(index2);
             }
         }
@@ -336,8 +342,6 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
 
     }
 
-@Autowired
-IOrderService orderService;
 
     @Override
     public void updateCamera(CameraInOutParam param) {
@@ -420,6 +424,8 @@ IOrderService orderService;
             index ++;
             if(StringUtils.isNotBlank(companyParam.getCompanyName())){
                 if(companyNameMap.get(companyParam.getCompanyName()) == null){
+                    log.error("outError-->出库错误:客户名称不存在:snCode:{},outType:{},companyName:{},orderSn:{},agentName:{}"
+                            ,companyParam.getSnCode(),companyParam.getOutType(),companyParam.getCompanyName(),companyParam.getOrderSn(),companyParam.getAgentId());
                     errorList.add(index);
                 }
                 companyParam.setCompanyId(companyNameMap.get(companyParam.getCompanyName()));
@@ -456,6 +462,7 @@ IOrderService orderService;
         for (String snCode : snCodeList) {
             Camera camera = snCodeMap.get(snCode);
             if(camera == null || detailMap.get(camera.getId()) ==null){
+                log.error("excel-export-error-->:相机未入库:snCode:{}",snCode);
                 errorList.add(snCodeList.indexOf(snCode) );
             }
         }

+ 3 - 0
src/main/java/com/fdkankan/manage/service/impl/ExcelServiceImpl.java

@@ -100,6 +100,9 @@ public class ExcelServiceImpl implements IExcelService {
         Integer index = 0;
         for (HashMap<Integer, String> map : excelRowList) {
             index ++;
+            if(map.isEmpty()){
+                continue;
+            }
             if(type == 0){      //入库
                 if(index == 0 && !map.get(0).equals("设备入库模板")){
                     throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);

+ 97 - 0
src/main/java/com/fdkankan/manage/service/impl/MqBackupServiceImpl.java

@@ -0,0 +1,97 @@
+package com.fdkankan.manage.service.impl;
+import java.util.Calendar;
+import java.util.Date;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.RecStatus;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.entity.MqBackup;
+import com.fdkankan.manage.mapper.IMqBackupMapper;
+import com.fdkankan.manage.service.IMqBackupService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.GetResponse;
+import org.springframework.amqp.rabbit.core.ChannelCallback;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+@Service
+public class MqBackupServiceImpl extends ServiceImpl<IMqBackupMapper, MqBackup> implements IMqBackupService {
+
+    @Autowired
+    private RabbitTemplate rabbitTemplate;
+    @Autowired
+    private RabbitMqProducer rabbitMqProducer;
+
+    @Override
+    public ResultData getRabbitMqMsg(String queue, int needRequeue) throws UnsupportedEncodingException {
+        if(needRequeue != CommonStatus.YES.code() && needRequeue != CommonStatus.NO.code()){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
+        }
+        boolean exit = false;
+        do {
+            GetResponse getResponse = rabbitTemplate.execute(channel -> channel.basicGet(queue, true));
+            if(Objects.nonNull(getResponse)){
+                byte[] body = getResponse.getBody();
+                MqBackup mqBackup = new MqBackup();
+                mqBackup.setQueue(queue);
+                mqBackup.setMsg(new String(body, StandardCharsets.UTF_8.name()));
+                mqBackup.setNeedRequeue(needRequeue);
+                mqBackup.setCreateTime(Calendar.getInstance().getTime());
+                this.save(mqBackup);
+            }else{
+                exit = true;
+            }
+        }while (!exit);
+
+        return ResultData.ok();
+    }
+
+    @Override
+    public ResultData rabbitmqRequeue(String queue) throws UnsupportedEncodingException {
+
+        int index = 0;
+        int size = 500;
+        boolean exit = false;
+        do {
+            List<MqBackup> list = this.list(new LambdaQueryWrapper<MqBackup>()
+                    .eq(MqBackup::getQueue, queue)
+                    .eq(MqBackup::getNeedRequeue, CommonStatus.YES.code().intValue())
+                    .eq(MqBackup::getRequeue, CommonStatus.NO.code().intValue()).last("limit " + index + "," + size));
+            if(CollUtil.isNotEmpty(list)){
+                list.stream().forEach(mqBackup -> {
+                    rabbitMqProducer.sendByWorkQueue(mqBackup.getQueue(), JSON.parseObject(mqBackup.getMsg()));
+                    mqBackup.setRequeue(CommonStatus.YES.code().intValue());
+                    mqBackup.setRecStatus(RecStatus.DISABLE.code());
+                    this.updateById(mqBackup);
+                    this.removeById(mqBackup);
+                });
+                index += size;
+            }else{
+                exit = true;
+            }
+        }while (!exit);
+        return ResultData.ok();
+    }
+
+}

+ 34 - 0
src/main/java/com/fdkankan/manage/service/impl/SceneBuildProcessLogServiceImpl.java

@@ -0,0 +1,34 @@
+package com.fdkankan.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.manage.entity.SceneBuildProcessLog;
+import com.fdkankan.manage.mapper.ISceneBuildProcessLogMapper;
+import com.fdkankan.manage.service.ISceneBuildProcessLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景计算流程状态表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-28
+ */
+@Service
+public class SceneBuildProcessLogServiceImpl extends ServiceImpl<ISceneBuildProcessLogMapper, SceneBuildProcessLog> implements ISceneBuildProcessLogService {
+
+    @Override
+    public SceneBuildProcessLog getByNum(String num) {
+        LambdaQueryWrapper<SceneBuildProcessLog> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SceneBuildProcessLog::getNum,num);
+        wrapper.eq(SceneBuildProcessLog::getState,-1);
+        List<SceneBuildProcessLog> list = this.list(wrapper);
+        if(list == null || list.size() <=0 ){
+            return null;
+        }
+        return list.get(0);
+    }
+}

+ 18 - 0
src/main/java/com/fdkankan/manage/service/impl/ScenePlusServiceImpl.java

@@ -32,6 +32,8 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
     ISceneProService sceneProService;
     @Autowired
     LaserService laserService;
+    @Autowired
+    IScenePlusExtService scenePlusExtService;
 
     @Override
     public ScenePlus getByNum(String sceneNum) {
@@ -67,4 +69,20 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         result.forEach(entity ->map.put(entity.getId(),entity.getCount()));
         return map;
     }
+
+    @Override
+    public String getDataSourceByNum(String num) {
+        ScenePro scenePro = sceneProService.getByNum(num);
+        if(scenePro != null ){
+            return scenePro.getDataSource();
+        }
+        ScenePlus plus = this.getByNum(num);
+        if(plus != null){
+            ScenePlusExt plusExt = scenePlusExtService.getByPlusId(plus.getId());
+            if(plusExt.getDataSource() != null){
+                return plusExt.getDataSource();
+            }
+        }
+        return null;
+    }
 }

+ 85 - 9
src/main/java/com/fdkankan/manage/service/impl/SceneProServiceImpl.java

@@ -9,17 +9,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.common.constant.SceneConstant;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
-import com.fdkankan.manage.common.OssPath;
-import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.common.*;
 import com.fdkankan.manage.exception.BusinessException;
-import com.fdkankan.manage.common.PageInfo;
 import com.fdkankan.common.util.*;
 import com.fdkankan.manage.httpClient.client.FdKKClient;
 import com.fdkankan.manage.httpClient.service.LaserService;
-import com.fdkankan.manage.common.CameraConstant;
 import com.fdkankan.manage.entity.*;
 import com.fdkankan.manage.mapper.ISceneProMapper;
 import com.fdkankan.manage.service.*;
+import com.fdkankan.manage.util.Dateutils;
 import com.fdkankan.manage.util.SceneStatusUtil;
 import com.fdkankan.manage.vo.request.SceneParam;
 import com.fdkankan.manage.vo.response.CameraDataVo;
@@ -80,6 +78,8 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     FdKKClient fdKKClient;
     @Autowired
     IFolderSceneService folderSceneService;
+    @Autowired
+    ISceneBuildProcessLogService sceneBuildProcessLogService;
 
 
     @Override
@@ -281,6 +281,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
      * 从oss中获取文件,并重写,上传替换
      */
     private void updateOssStatus(String path,Integer payStatus) {
+        String localPath = String.format(OssPath.localStatusPath, path);
         try {
             if(!fYunFileServiceInterface.fileExist(path)){
                 return;
@@ -292,13 +293,13 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             JSONObject jsonObject = JSONObject.parseObject(data);
             jsonObject.put("payStatus",payStatus);
             String json = JSONUtil.toJsonStr(jsonObject);
-            FileUtils.writeFile(OssPath.localStatusPath ,json);
-            log.info("updateOssStatus--localPath:{},ossPath:{}",OssPath.localStatusPath,path);
-            fYunFileServiceInterface.uploadFile(OssPath.localStatusPath,path);
+            FileUtils.writeFile(localPath,json);
+            log.info("updateOssStatus--localPath:{},ossPath:{}",localPath,path);
+            fYunFileServiceInterface.uploadFile(localPath,path);
         }catch (Exception e){
             e.printStackTrace();
         }finally {
-            FileUtil.del(OssPath.localStatusPath);
+            FileUtil.del(localPath);
         }
     }
 
@@ -327,6 +328,13 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
                     record.setIsCopy(true);
                 }
             }
+            if(record.getStatus() == -1){  //计算失败
+                SceneBuildProcessLog sceneBuildProcessLog = sceneBuildProcessLogService.getByNum(record.getNum());
+                if(sceneBuildProcessLog != null){
+                    record.setSceneBuildProcessLog(sceneBuildProcessLog);
+                    record.setBuildErrorReason(SceneBuildProcessLogEnum.getReason(sceneBuildProcessLog.getProcess()));
+                }
+            }
         }
         return PageInfo.PageInfo(page);
     }
@@ -353,9 +361,11 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 
         Long sceneCameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId();
         Long space = scenePro == null ? 0 :scenePro.getSpace();
+        String dataSource = scenePro == null ? null :scenePro.getDataSource();
         if(scenePlus !=null){
             ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
             space = scenePlusExt.getSpace();
+            dataSource = scenePlusExt.getDataSource();
         }
         space = space == null ? 0 :space;
         Long newUseSpace = space + cameraDetail.getUsedSpace();
@@ -431,7 +441,70 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         if(cameraDetail.getType() == 10){       //深时场景
             laserService.move(param.getNum(),oldCamera.getSnCode(),camera.getSnCode(),cameraDetail.getUserId());
         }
+        updateFdage(oldCamera.getSnCode(),param.getSnCode(),dataSource);
+    }
+
+    @Override
+    public void updateFdage(String oldSnCode,String newSnCode,String dataSource) {
+        String localPath = String.format(OssPath.localFdagePath,dataSource)+"/data.fdage";
+        try {
+            String fdagePaht =  dataSource.replace("/mnt/data","home") +"/data.fdage";
+            String fileContent = fYunFileServiceInterface.getFileContent(fdagePaht);
+            String newJson = fileContent.replaceAll("(?i)"+oldSnCode,newSnCode.toLowerCase());
+            FileUtils.writeFile(localPath ,newJson);
+            log.info("updateFdage--localPath:{},ossPath:{}",localPath,fdagePaht);
+            String localPathBack = localPath+"_"+oldSnCode+"-"+newSnCode+"_"+Dateutils.getDateN(new Date())+".back";
+            String fdagePathBack = fdagePaht+"_"+oldSnCode+"-"+newSnCode+"_"+Dateutils.getDateN(new Date())+".back";
+
+            fYunFileServiceInterface.downloadFile(fdagePaht,localPathBack);
+            fYunFileServiceInterface.uploadFile(localPathBack,fdagePathBack);
+            fYunFileServiceInterface.uploadFile(localPath,fdagePaht);
+        }catch (Exception e){
+            log.error("updateFdage-error:oldSnCode:{},newSnCode:{},dataSource:{}",oldSnCode,newSnCode,dataSource);
+            log.error("updateFdage-error:",e);
+        }finally {
+            FileUtil.del(localPath);
+        }
+    }
+
+    public void updateFdageNewDataSource(String oldSnCode,String newSnCode,String dataSource) {
+        String localPath = String.format(OssPath.localFdagePath,dataSource);
+        try {
+            String localPathFdage = String.format(OssPath.localFdagePath,dataSource)+"/data.fdage";
+
+            String homeData =  dataSource.replace("/mnt/data","home");
+            ShellUtil.yunDownload(homeData,localPath);
+
+            String fileContent = FileUtils.readFile(localPathFdage);
+            String newJson = fileContent.replaceAll("(?i)"+oldSnCode,newSnCode.toLowerCase());
+            FileUtils.writeFile(localPathFdage ,newJson);
+
+            String oldFdagePaht =  dataSource.replace("/mnt/data","home") ;
+            String newFdagePaht =  oldFdagePaht.replaceAll("(?i)"+oldSnCode,newSnCode.toLowerCase()) ;
+            ShellUtil.yunUpload(localPath,newFdagePaht);
+
+            log.info("updateFdage--localPath:{},ossPath:{}",localPath,newFdagePaht);
+            String newDataSource = dataSource.replaceAll("(?i)"+oldSnCode,newSnCode.toLowerCase()) ;
+            this.updateDataSource(dataSource,newDataSource);
+            fYunFileServiceInterface.deleteFolder(oldFdagePaht);
+        }catch (Exception e){
+            log.error("updateFdage-error:oldSnCode:{},newSnCode:{},dataSource:{}",oldSnCode,newSnCode,dataSource);
+            log.error("updateFdage-error:",e);
+        }finally {
+            FileUtil.del(localPath);
+        }
+    }
+
+    private void updateDataSource(String dataSource, String newDataSource) {
+        LambdaUpdateWrapper<ScenePro> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(ScenePro::getDataSource,dataSource);
+        wrapper.set(ScenePro::getDataSource,newDataSource);
+        this.update(wrapper);
 
+        LambdaUpdateWrapper<ScenePlusExt> wrapperPlus = new LambdaUpdateWrapper<>();
+        wrapperPlus.eq(ScenePlusExt::getDataSource,dataSource);
+        wrapperPlus.set(ScenePlusExt::getDataSource,newDataSource);
+        scenePlusExtService.update(wrapperPlus);
     }
 
     @Override
@@ -462,8 +535,10 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 
     @Override
     public void deleteByNum(String num) {
+        Integer sceneSource = null;
         ScenePro scenePro = this.getByNum(num);
         if(scenePro!=null){
+            sceneSource = scenePro.getSceneSource();
             this.removeById(scenePro.getId());
         }
         Scene scene = sceneService.getByNum(num);
@@ -472,10 +547,11 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         }
         ScenePlus scenePlus = scenePlusService.getByNum(num);
         if(scenePlus!=null){
+            sceneSource = scenePlus.getSceneSource();
             scenePlusService.removeById(scenePlus.getId());
             scenePlusExtService.delByPlus(scenePlus.getId());
         }
-        if(num.contains("SS")){
+        if(sceneSource != null && sceneSource == 4){
             laserService.delete(num);
         }
     }

+ 20 - 0
src/main/java/com/fdkankan/manage/service/impl/ToolsApiServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.manage.service.impl;
+
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.service.IToolsApiService;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.GetResponse;
+import org.springframework.amqp.rabbit.core.ChannelCallback;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.Objects;
+
+@Service
+public class ToolsApiServiceImpl implements IToolsApiService {
+
+
+}

+ 10 - 1
src/main/java/com/fdkankan/manage/service/impl/UserIncrementServiceImpl.java

@@ -42,6 +42,8 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
     IUserService userService;
     @Autowired
     IAgentNewLogService agentNewLogService;
+    @Autowired
+    ICameraIncrementLogService cameraIncrementLogService;
 
     @Override
     public Long getValidCountByUserId(Long userId) {
@@ -124,6 +126,12 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
         userIncrement.setIncrementEndTime(DateUtil.date2String(delay,DateUtil.DEFAULT_DATE_FORMAT));
         userIncrement.setUpdateTime(null);
         this.updateById(userIncrement);
+
+        UserIncrementParam param = new UserIncrementParam();
+        param.setUserId(userIncrement.getUserId());
+        param.setCount(incrementType.getDownloadNum());
+        userService.addDownNum(param);
+
         agentNewLogService.addByUserIncrement(userIncrement);
     }
 
@@ -169,8 +177,10 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
         }
     }
 
+
     @Override
     public void unbindCamera(Long cameraId) {
+        cameraIncrementLogService.saveUnbindLog(cameraId);
         LambdaUpdateWrapper<UserIncrement> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(UserIncrement::getCameraId,cameraId);
         if("local".equals(CacheUtil.uploadType)){
@@ -179,7 +189,6 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
             wrapper.set(UserIncrement::getCameraId,null);
             this.update(wrapper);
         }
-
     }
 
     @Override

+ 42 - 3
src/main/java/com/fdkankan/manage/test/TestController.java

@@ -1,27 +1,66 @@
 package com.fdkankan.manage.test;
 
 import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.manage.common.OssPath;
+import com.fdkankan.manage.common.ResultCode;
 import com.fdkankan.manage.common.ResultData;
 import com.fdkankan.common.util.SecurityUtil;
 import com.fdkankan.manage.common.FilePath;
+import com.fdkankan.manage.exception.BusinessException;
 import com.fdkankan.manage.httpClient.service.LaserService;
+import com.fdkankan.manage.service.ISceneProService;
 import com.fdkankan.manage.util.Dateutils;
+import com.fdkankan.manage.util.ExcelUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.*;
 
+@Slf4j
 @RestController
+@RequestMapping("/test")
 public class TestController {
 
+    @Autowired
+    ISceneProService sceneProService;
+
     @RequestMapping("/test")
-    public ResultData test(){
+    public ResultData test(@RequestParam(required = false) String oldSnCode,
+                           @RequestParam(required = false)String newSnCode,
+                           @RequestParam(required = false)String dataSource){
+       sceneProService.updateFdage(oldSnCode, newSnCode, dataSource);
         return ResultData.ok();
     }
 
-    public static void main(String[] args) {
-        System.out.println( SecurityUtil.MD5("E\u0005\u0015\u000EG107"));
+    /**
+     * 导入excel
+     * type 0 入库模板, 1出库模板 ,2 客户关联模板
+     */
+    @PostMapping("/uploadExcel")
+    public ResultData uploadExcel(@RequestParam(required = false) MultipartFile file) throws IOException {
+        String originalFilename = file.getOriginalFilename();
+        assert originalFilename != null;
+        String fileType=originalFilename.substring(originalFilename.lastIndexOf(".")+1);
+        if (!fileType.equalsIgnoreCase("xlsx")) {
+            throw new BusinessException(ResultCode.FILE_TYPE_ERROR);
+        }
+        List<HashMap<Integer, String>> excelRowList = new ArrayList<>();
+        try {
+            excelRowList = ExcelUtil.getExcelRowList(file);
+        }catch (Exception e){
+            throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);
+        }
+        System.out.println(excelRowList);
+        return ResultData.ok();
     }
 
 }

+ 3 - 0
src/main/java/com/fdkankan/manage/util/Dateutils.java

@@ -79,6 +79,9 @@ public class Dateutils {
     public static String getDate(Date date) {
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
     }
+    public static String getDateN(Date date) {
+        return new SimpleDateFormat("yyyyMMddHHmmss").format(date);
+    }
 
     public static String getMonthDate(Date date) {
         return new SimpleDateFormat("yyyy-MM").format(date);

+ 8 - 1
src/main/java/com/fdkankan/manage/util/ExcelUtil.java

@@ -42,12 +42,19 @@ public class ExcelUtil {
 
   private static  String fommartNum(String value){
         try {
-            return Double.valueOf(value).intValue() +"";
+            if(isNumeric2(value) && value.contains(".")){
+                return Double.valueOf(value).intValue() +"";
+            }
         }catch (Exception e){
             return value;
         }
+        return value;
   }
 
+    public static boolean isNumeric2(String str) {
+        return str != null && str.matches("-?\\d+(\\.\\d+)?");
+    }
+
 
     //获取WorkBook对象
     private static Workbook getExcelWorkBook(MultipartFile multipartFile) throws IOException {

+ 2 - 2
src/main/java/com/fdkankan/manage/vo/response/AgentNewLogVo.java

@@ -8,9 +8,9 @@ public class AgentNewLogVo {
 
     @ExcelProperty("经销商名称")
     private String  agentName;
-    @ExcelProperty("专业会员(年)销售数")
+    @ExcelProperty("专业会员(年)销售数")
     private Integer  majorNum = 0;
-    @ExcelProperty("高级会员(月)销售数")
+    @ExcelProperty("高级会员(月)销售数")
     private Integer  highNum = 0;
     @ExcelProperty("场景下载销售数量")
     private Integer  downNum = 0;

+ 7 - 0
src/main/java/com/fdkankan/manage/vo/response/SceneVo.java

@@ -1,5 +1,6 @@
 package com.fdkankan.manage.vo.response;
 
+import com.fdkankan.manage.entity.SceneBuildProcessLog;
 import lombok.Data;
 
 @Data
@@ -24,4 +25,10 @@ public class SceneVo {
 
     private Integer isObj =1 ;
 
+    private SceneBuildProcessLog sceneBuildProcessLog;
+
+    private String buildErrorReason;
+
+    private String dataSource;
+
 }

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

@@ -32,6 +32,10 @@ spring:
             group: DEFAULT_GROUP
             refresh: true
 
+          - data-id: common-rabbitmq-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
       discovery:
         server-addr: ${spring.cloud.nacos.config.server-addr}
         namespace: ${spring.cloud.nacos.config.namespace}

+ 1 - 1
src/main/resources/mapper/manage/AgentNewLogMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.fdkankan.manage.mapper.IAgentNewLogMapper">
 
     <select id="listGroup" resultType="com.fdkankan.manage.vo.response.AgentLogGVo" >
-        select agent_id,type,sum(count)as num from t_agent_new_log
+        select agent_id,type,sum(count * total_time )as num from t_agent_new_log
         <if test="startTime != null and startTime !='' ">
             where create_time between #{startTime} and #{endTime}
         </if>

+ 5 - 0
src/main/resources/mapper/manage/CameraIncrementLogMapper.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.manage.mapper.ICameraIncrementLogMapper">
+
+</mapper>

+ 1 - 1
src/main/resources/mapper/manage/CameraMapper.xml

@@ -50,7 +50,7 @@
         <if test="param.bindStatus !=null and param.bindStatus ==1 ">
             and u.user_name is not null
         </if>
-        order by c.activated_time desc
+        order by  c.activated_time desc ,c.id desc
     </select>
     <select id="getByOutSnCodes" resultType="com.fdkankan.manage.entity.Camera">
         select * from t_camera c left join t_camera_detail d on c.id = d.camera_id

+ 5 - 0
src/main/resources/mapper/manage/MqBackupMapper.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.manage.mapper.IMqBackupMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/manage/SceneBuildProcessLogMapper.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.manage.mapper.ISceneBuildProcessLogMapper">
+
+</mapper>

+ 2 - 2
src/main/resources/mapper/manage/SceneProMapper.xml

@@ -31,7 +31,7 @@
         SELECT * FROM(
         select s.scene_name ,s.num,s.create_time,c.sn_code,s.space as sceneSize
         ,u.user_name,s.view_count,s.status,s.pay_status,'v3' as scene_version ,s.web_site as thumb
-        ,null as algorithmTime
+        ,null as algorithmTime,data_source
         from t_scene_pro s
         <include refid="commonWhere"></include>
         <if test="param.sceneName != null and param.sceneName!='' ">
@@ -41,7 +41,7 @@
         UNION
         select s.title as sceneName ,s.num,s.create_time,c.sn_code,e.space as sceneSize
         ,u.user_name,e.view_count,s.scene_status as status,s.pay_status,'v4' as scene_version,e.web_site as thumb
-        ,algorithm_time
+        ,algorithm_time,data_source
         from t_scene_plus s
         left join t_scene_plus_ext e on s.id = e.plus_id
         <include refid="commonWhere"></include>