ソースを参照

相机协作相关

lyhzzz 3 年 前
コミット
d5e9983418
64 ファイル変更1893 行追加42 行削除
  1. 61 0
      src/main/java/com/fdkankan/user/common/CameraTypeEnum.java
  2. 86 5
      src/main/java/com/fdkankan/user/controller/CameraController.java
  3. 25 0
      src/main/java/com/fdkankan/user/controller/FolderController.java
  4. 25 0
      src/main/java/com/fdkankan/user/controller/SceneCooperationController.java
  5. 3 3
      src/main/java/com/fdkankan/user/entity/CameraSpace.java
  6. 66 0
      src/main/java/com/fdkankan/user/entity/Folder.java
  7. 3 3
      src/main/java/com/fdkankan/user/entity/SceneCooperation.java
  8. 5 6
      src/main/java/com/fdkankan/user/entity/ScenePlus.java
  9. 5 6
      src/main/java/com/fdkankan/user/entity/ScenePlusExt.java
  10. 78 0
      src/main/java/com/fdkankan/user/entity/SceneResource.java
  11. 54 0
      src/main/java/com/fdkankan/user/entity/SceneResourceCamera.java
  12. 54 0
      src/main/java/com/fdkankan/user/entity/SceneResourceCooperation.java
  13. 1 1
      src/main/java/com/fdkankan/user/generate/AutoGenerate.java
  14. 4 0
      src/main/java/com/fdkankan/user/mapper/ICameraMapper.java
  15. 1 0
      src/main/java/com/fdkankan/user/mapper/ICameraSpaceMapper.java
  16. 18 0
      src/main/java/com/fdkankan/user/mapper/IFolderMapper.java
  17. 6 0
      src/main/java/com/fdkankan/user/mapper/ISceneProMapper.java
  18. 18 0
      src/main/java/com/fdkankan/user/mapper/ISceneResourceCameraMapper.java
  19. 18 0
      src/main/java/com/fdkankan/user/mapper/ISceneResourceCooperationMapper.java
  20. 22 0
      src/main/java/com/fdkankan/user/mapper/ISceneResourceMapper.java
  21. 11 0
      src/main/java/com/fdkankan/user/service/ICameraDetailService.java
  22. 20 0
      src/main/java/com/fdkankan/user/service/ICameraService.java
  23. 3 0
      src/main/java/com/fdkankan/user/service/ICameraSpaceService.java
  24. 16 0
      src/main/java/com/fdkankan/user/service/IFolderService.java
  25. 10 0
      src/main/java/com/fdkankan/user/service/ISceneCooperationService.java
  26. 6 0
      src/main/java/com/fdkankan/user/service/IScenePlusExtService.java
  27. 8 0
      src/main/java/com/fdkankan/user/service/IScenePlusService.java
  28. 15 0
      src/main/java/com/fdkankan/user/service/ISceneProService.java
  29. 21 0
      src/main/java/com/fdkankan/user/service/ISceneResourceCameraService.java
  30. 19 0
      src/main/java/com/fdkankan/user/service/ISceneResourceCooperationService.java
  31. 21 0
      src/main/java/com/fdkankan/user/service/ISceneResourceService.java
  32. 5 0
      src/main/java/com/fdkankan/user/service/ISceneService.java
  33. 9 0
      src/main/java/com/fdkankan/user/service/IUserIncrementService.java
  34. 3 0
      src/main/java/com/fdkankan/user/service/IUserService.java
  35. 69 5
      src/main/java/com/fdkankan/user/service/impl/CameraDetailServiceImpl.java
  36. 252 3
      src/main/java/com/fdkankan/user/service/impl/CameraServiceImpl.java
  37. 10 0
      src/main/java/com/fdkankan/user/service/impl/CameraSpaceServiceImpl.java
  38. 87 1
      src/main/java/com/fdkankan/user/service/impl/FdkkLaserService.java
  39. 20 0
      src/main/java/com/fdkankan/user/service/impl/FolderServiceImpl.java
  40. 143 2
      src/main/java/com/fdkankan/user/service/impl/SceneCooperationServiceImpl.java
  41. 24 0
      src/main/java/com/fdkankan/user/service/impl/ScenePlusExtServiceImpl.java
  42. 32 0
      src/main/java/com/fdkankan/user/service/impl/ScenePlusServiceImpl.java
  43. 171 7
      src/main/java/com/fdkankan/user/service/impl/SceneProServiceImpl.java
  44. 48 0
      src/main/java/com/fdkankan/user/service/impl/SceneResourceCameraServiceImpl.java
  45. 30 0
      src/main/java/com/fdkankan/user/service/impl/SceneResourceCooperationServiceImpl.java
  46. 34 0
      src/main/java/com/fdkankan/user/service/impl/SceneResourceServiceImpl.java
  47. 12 0
      src/main/java/com/fdkankan/user/service/impl/SceneServiceImpl.java
  48. 29 0
      src/main/java/com/fdkankan/user/service/impl/UserIncrementServiceImpl.java
  49. 10 0
      src/main/java/com/fdkankan/user/service/impl/UserServiceImpl.java
  50. 33 0
      src/main/java/com/fdkankan/user/util/DateUserUtil.java
  51. 13 0
      src/main/java/com/fdkankan/user/vo/request/CameraParam.java
  52. 7 0
      src/main/java/com/fdkankan/user/vo/request/FolderParam.java
  53. 14 0
      src/main/java/com/fdkankan/user/vo/request/SceneCooperationParam.java
  54. 2 0
      src/main/java/com/fdkankan/user/vo/response/CameraSpaceVo.java
  55. 37 0
      src/main/java/com/fdkankan/user/vo/response/CameraVo.java
  56. 9 0
      src/main/java/com/fdkankan/user/vo/response/DataGroupByCount.java
  57. 10 0
      src/main/java/com/fdkankan/user/vo/response/GroupByCount.java
  58. 25 0
      src/main/resources/mapper/user/CameraMapper.xml
  59. 10 0
      src/main/resources/mapper/user/CameraSpaceMapper.xml
  60. 5 0
      src/main/resources/mapper/user/FolderMapper.xml
  61. 18 0
      src/main/resources/mapper/user/SceneProMapper.xml
  62. 5 0
      src/main/resources/mapper/user/SceneResourceCameraMapper.xml
  63. 5 0
      src/main/resources/mapper/user/SceneResourceCooperationMapper.xml
  64. 9 0
      src/main/resources/mapper/user/SceneResourceMapper.xml

+ 61 - 0
src/main/java/com/fdkankan/user/common/CameraTypeEnum.java

@@ -0,0 +1,61 @@
+package com.fdkankan.user.common;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum CameraTypeEnum {
+    DOUBLE_EYE(0,"KK-","4DKKLITE_","旧双目相机"),
+    FDKK_PRO(1,"KK-","4DKKPRO_","四维看看pro八目相机"),
+    FDKK_LITE(2,"KK-","4DKKLITE_","四维看看lite"),
+    ZHIHOUSE_REDHOUSE(5,"KK-","4DKKLITE_","指房宝小红屋相机"),
+    DOUBLE_EYE_TURN(9,"KJ-","4DKKLITE_","双目转台"),
+    LASER_TURN(10,"SS-","4DKKLA_","激光转台");
+
+
+    private int type;
+    private String sceneNumPrefix;
+    private String wifiNamePrefix;
+    private String desc;
+
+    public int getType() {
+        return type;
+    }
+
+    public String getSceneNumPrefix() {
+        return sceneNumPrefix;
+    }
+
+    public String getWifiNamePrefix() {
+        return wifiNamePrefix;
+    }
+
+
+    static Map<Integer,CameraTypeEnum> typeMaps = new HashMap<>(5);
+    static Map<String,Integer> typePrefixMap = new HashMap<>(5);
+
+    static{
+        for (CameraTypeEnum typeEnum : CameraTypeEnum.values()) {
+            typeMaps.put(typeEnum.getType(),typeEnum);
+            typePrefixMap.put(typeEnum.getWifiNamePrefix(),typeEnum.getType());
+        }
+    }
+
+    CameraTypeEnum(Integer type, String sceneNumPrefix, String wifiNamePrefix, String desc) {
+        this.type = type;
+        this.sceneNumPrefix = sceneNumPrefix;
+        this.wifiNamePrefix = wifiNamePrefix;
+        this.desc = desc;
+    }
+
+    public static String getSceneNumPrefixByType(Integer type){
+        if(typeMaps.containsKey(type)){
+            return typeMaps.get(type).getSceneNumPrefix();
+        }
+        return "";
+    }
+
+    public static Integer getTypeByWifiNamePrefix(String wifiNamePrefix){
+        return typePrefixMap.get(wifiNamePrefix);
+    }
+
+}

+ 86 - 5
src/main/java/com/fdkankan/user/controller/CameraController.java

@@ -1,13 +1,18 @@
 package com.fdkankan.user.controller;
 package com.fdkankan.user.controller;
 
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.user.common.Result;
 import com.fdkankan.user.common.Result;
+import com.fdkankan.user.constant.LoginConstant;
+import com.fdkankan.user.entity.User;
 import com.fdkankan.user.service.ICameraDetailService;
 import com.fdkankan.user.service.ICameraDetailService;
+import com.fdkankan.user.service.ICameraService;
+import com.fdkankan.user.service.ISceneResourceService;
+import com.fdkankan.user.vo.request.CameraParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 @RestController
 @RestController
 @RequestMapping("/api/user/camera")
 @RequestMapping("/api/user/camera")
@@ -15,6 +20,10 @@ public class CameraController {
 
 
     @Autowired
     @Autowired
     ICameraDetailService cameraDetailService;
     ICameraDetailService cameraDetailService;
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    ISceneResourceService sceneResourceService;
 
 
     /**
     /**
      * 获取设备到期数量
      * 获取设备到期数量
@@ -22,7 +31,79 @@ public class CameraController {
     @PostMapping("/deadlineNumber")
     @PostMapping("/deadlineNumber")
     public Result deadlineNumber(@RequestHeader String token){
     public Result deadlineNumber(@RequestHeader String token){
         String username = JwtUtil.getUsername(token);
         String username = JwtUtil.getUsername(token);
-        cameraDetailService.deadlineNumber(username);
+        return Result.success(cameraDetailService.deadlineNumber(username));
+    }
+
+    /**
+     * 分页列表
+     */
+    @PostMapping("/listNew")
+    public Result listNew(@RequestBody CameraParam param ,@RequestHeader String token){
+        String username = JwtUtil.getUsername(token);
+        param.setUserName(username);
+        return Result.success(cameraService.pageList(param));
+    }
+
+    /**
+     * 获取用户设备到期信息
+     */
+    @PostMapping("/deadline")
+    public Result deadline(@RequestHeader String token){
+        String username = JwtUtil.getUsername(token);
+        return Result.success(cameraService.deadline(username));
+    }
+
+    /**
+     * 用户解绑设备
+     */
+    @PostMapping("/unbind")
+    public Result unbind(@RequestBody JSONObject jsonObject,@RequestHeader String token){
+        String username = JwtUtil.getUsername(token);
+        cameraService.unbind(jsonObject.getLong("cameraId"),jsonObject.getString("ids"),username);
+        return Result.success();
+    }
+
+    /**
+     *用户绑定设备
+     */
+    @PostMapping("/add")
+    public Result add(@RequestBody JSONObject jsonObject,@RequestHeader String token){
+        String username = JwtUtil.getUsername(token);
+        cameraService.bind(jsonObject.getInteger("cameraType"),jsonObject.getString("snCode"),username);
+        return Result.success();
+    }
+
+    /**
+     * 添加相机协作用户
+     */
+    @PostMapping("/saveCooperationUser")
+    public Result saveCooperationUser(@RequestBody JSONObject jsonObject,@RequestHeader String token){
+        String username = JwtUtil.getUsername(token);
+        if(jsonObject.getString("userName").equals(username)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3025, LoginConstant.FAILURE_MSG_3025);
+        }
+        cameraService.saveCooperationUser(jsonObject.getString("ids"),
+                jsonObject.getLong("cameraId"),jsonObject.getString("resourceIds"),jsonObject.getString("userName"));
         return Result.success();
         return Result.success();
     }
     }
+
+    /**
+     * 删除相机协作用户
+     */
+    @PostMapping("/deleteCooperationUser")
+    public Result deleteCooperationUser(@RequestBody JSONObject jsonObject){
+        cameraService.deleteCooperationUser(jsonObject.getLong("cameraId"));
+        return Result.success();
+    }
+
+    /**
+     * 根据相机id获取场景资源集合
+     */
+    @PostMapping("/sceneResourceByCameraId")
+    public Result sceneResourceByCameraId(@RequestBody JSONObject jsonObject){
+        if(jsonObject.get("cameraId") == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        return Result.success(sceneResourceService.sceneResourceByCameraId(jsonObject.getLong("cameraId")));
+    }
 }
 }

+ 25 - 0
src/main/java/com/fdkankan/user/controller/FolderController.java

@@ -0,0 +1,25 @@
+package com.fdkankan.user.controller;
+
+
+import com.fdkankan.user.service.IFolderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 文件夹表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-07
+ */
+@RestController
+@RequestMapping("/api/user/folder")
+public class FolderController {
+
+    @Autowired
+    IFolderService folderService;
+}
+

+ 25 - 0
src/main/java/com/fdkankan/user/controller/SceneCooperationController.java

@@ -0,0 +1,25 @@
+package com.fdkankan.user.controller;
+
+import com.fdkankan.user.common.Result;
+import com.fdkankan.user.entity.SceneCooperation;
+import com.fdkankan.user.service.ISceneCooperationService;
+import com.fdkankan.user.vo.request.SceneCooperationParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/user/scene/cooperation")
+public class SceneCooperationController {
+
+    @Autowired
+    ISceneCooperationService sceneCooperationService;
+
+    @PostMapping("/sceneResourceList")
+    public Result sceneResourceList(@RequestBody SceneCooperationParam param){
+        sceneCooperationService.sceneResourceList(param);
+        return Result.success();
+    }
+}

+ 3 - 3
src/main/java/com/fdkankan/user/entity/CameraSpace.java

@@ -68,20 +68,20 @@ public class CameraSpace implements Serializable {
      * 创建时间
      * 创建时间
      */
      */
     @TableField("create_time")
     @TableField("create_time")
-    private Date createTime;
+    private String createTime;
 
 
     /**
     /**
      * 记录的状态,A: 生效,I: 禁用
      * 记录的状态,A: 生效,I: 禁用
      */
      */
     @TableField("rec_status")
     @TableField("rec_status")
-    @TableLogic
+    @TableLogic(value = "A",delval = "I")
     private String recStatus;
     private String recStatus;
 
 
     /**
     /**
      * 更新时间
      * 更新时间
      */
      */
     @TableField("update_time")
     @TableField("update_time")
-    private Date updateTime;
+    private String updateTime;
 
 
     /**
     /**
      * 扩容订单集合
      * 扩容订单集合

+ 66 - 0
src/main/java/com/fdkankan/user/entity/Folder.java

@@ -0,0 +1,66 @@
+package com.fdkankan.user.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 2022-07-07
+ */
+@Getter
+@Setter
+@TableName("t_folder")
+public class Folder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 文件夹名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 文件夹类型,0看看我的场景,1看看协作场景,2看见我的场景,3看见协作场景
+     */
+    @TableField("type")
+    private Integer type;
+
+    /**
+     * 上层文件夹id
+     */
+    @TableField("parent_id")
+    private Long parentId;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 3 - 3
src/main/java/com/fdkankan/user/entity/SceneCooperation.java

@@ -41,13 +41,13 @@ public class SceneCooperation implements Serializable {
     private Long userId;
     private Long userId;
 
 
     @TableField("create_time")
     @TableField("create_time")
-    private Date createTime;
+    private String createTime;
 
 
     @TableField("update_time")
     @TableField("update_time")
-    private Date updateTime;
+    private String updateTime;
 
 
     @TableField("rec_status")
     @TableField("rec_status")
-    @TableLogic
+    @TableLogic(value = "A",delval = "I")
     private String recStatus;
     private String recStatus;
 
 
 
 

+ 5 - 6
src/main/java/com/fdkankan/user/entity/ScenePlus.java

@@ -1,9 +1,7 @@
 package com.fdkankan.user.entity;
 package com.fdkankan.user.entity;
 
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 import lombok.Getter;
 import lombok.Getter;
@@ -97,18 +95,19 @@ public class ScenePlus implements Serializable {
      * 创建时间
      * 创建时间
      */
      */
     @TableField("create_time")
     @TableField("create_time")
-    private Date createTime;
+    private String createTime;
 
 
     /**
     /**
      * 更新时间
      * 更新时间
      */
      */
     @TableField("update_time")
     @TableField("update_time")
-    private Date updateTime;
+    private String updateTime;
 
 
     /**
     /**
      * 0-有效,1-删除, 2-禁用
      * 0-有效,1-删除, 2-禁用
      */
      */
     @TableField("tb_status")
     @TableField("tb_status")
+    @TableLogic(value = "0",delval = "1")
     private Integer tbStatus;
     private Integer tbStatus;
 
 
 
 

+ 5 - 6
src/main/java/com/fdkankan/user/entity/ScenePlusExt.java

@@ -1,9 +1,7 @@
 package com.fdkankan.user.entity;
 package com.fdkankan.user.entity;
 
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 import lombok.Getter;
 import lombok.Getter;
@@ -133,18 +131,19 @@ public class ScenePlusExt implements Serializable {
      * 创建时间
      * 创建时间
      */
      */
     @TableField("create_time")
     @TableField("create_time")
-    private Date createTime;
+    private String createTime;
 
 
     /**
     /**
      * 更新时间
      * 更新时间
      */
      */
     @TableField("update_time")
     @TableField("update_time")
-    private Date updateTime;
+    private String updateTime;
 
 
     /**
     /**
      * 0-有效,1-删除, 2-禁用
      * 0-有效,1-删除, 2-禁用
      */
      */
     @TableField("tb_status")
     @TableField("tb_status")
+    @TableLogic(value = "0",delval = "1")
     private Integer tbStatus;
     private Integer tbStatus;
 
 
 
 

+ 78 - 0
src/main/java/com/fdkankan/user/entity/SceneResource.java

@@ -0,0 +1,78 @@
+package com.fdkankan.user.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 2022-07-06
+ */
+@Getter
+@Setter
+@TableName("t_scene_resource")
+public class SceneResource implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 权限名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 英文名
+     */
+    @TableField("en_name")
+    private String enName;
+
+    /**
+     * 权限key
+     */
+    @TableField("key_word")
+    private String keyWord;
+
+    /**
+     * 权限图标
+     */
+    @TableField("icon")
+    private String icon;
+
+    /**
+     * 资源描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 版本(v3,v4)
+     */
+    @TableField("version")
+    private String version;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 54 - 0
src/main/java/com/fdkankan/user/entity/SceneResourceCamera.java

@@ -0,0 +1,54 @@
+package com.fdkankan.user.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 2022-07-05
+ */
+@Getter
+@Setter
+@TableName("t_scene_resource_camera")
+public class SceneResourceCamera implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景资源id
+     */
+    @TableField("scene_resource_id")
+    private Long sceneResourceId;
+
+    /**
+     * 协作相机的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 54 - 0
src/main/java/com/fdkankan/user/entity/SceneResourceCooperation.java

@@ -0,0 +1,54 @@
+package com.fdkankan.user.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 2022-07-05
+ */
+@Getter
+@Setter
+@TableName("t_scene_resource_cooperation")
+public class SceneResourceCooperation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景资源id
+     */
+    @TableField("scene_resource_id")
+    private Long sceneResourceId;
+
+    /**
+     * 协作用户的id
+     */
+    @TableField("scene_cooperation_id")
+    private Long sceneCooperationId;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/user/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
         String path =System.getProperty("user.dir") ;
 
 
         generate(path,"user", getTables(new String[]{
         generate(path,"user", getTables(new String[]{
-                "t_camera_space"
+                "t_folder"
         }));
         }));
 
 
 //        generate(path,"goods", getTables(new String[]{
 //        generate(path,"goods", getTables(new String[]{

+ 4 - 0
src/main/java/com/fdkankan/user/mapper/ICameraMapper.java

@@ -1,7 +1,10 @@
 package com.fdkankan.user.mapper;
 package com.fdkankan.user.mapper;
 
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.user.entity.Camera;
 import com.fdkankan.user.entity.Camera;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.user.vo.request.CameraParam;
+import com.fdkankan.user.vo.response.CameraVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 
 
 /**
 /**
@@ -15,4 +18,5 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 @Mapper
 public interface ICameraMapper extends BaseMapper<Camera> {
 public interface ICameraMapper extends BaseMapper<Camera> {
 
 
+    Page<CameraVo> pageList(Page<CameraVo> page, CameraParam param);
 }
 }

+ 1 - 0
src/main/java/com/fdkankan/user/mapper/ICameraSpaceMapper.java

@@ -20,4 +20,5 @@ import java.util.List;
 public interface ICameraSpaceMapper extends BaseMapper<CameraSpace> {
 public interface ICameraSpaceMapper extends BaseMapper<CameraSpace> {
 
 
     List<CameraSpaceVo> getVoListByCameraId(@Param("cameraId") Long cameraId);
     List<CameraSpaceVo> getVoListByCameraId(@Param("cameraId") Long cameraId);
+    List<CameraSpaceVo> getVoListByCameraIds(@Param("cameraIds") List<Long> cameraIds);
 }
 }

+ 18 - 0
src/main/java/com/fdkankan/user/mapper/IFolderMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.user.mapper;
+
+import com.fdkankan.user.entity.Folder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 文件夹表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-07
+ */
+@Mapper
+public interface IFolderMapper extends BaseMapper<Folder> {
+
+}

+ 6 - 0
src/main/java/com/fdkankan/user/mapper/ISceneProMapper.java

@@ -2,7 +2,11 @@ package com.fdkankan.user.mapper;
 
 
 import com.fdkankan.user.entity.ScenePro;
 import com.fdkankan.user.entity.ScenePro;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.user.vo.response.GroupByCount;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -15,4 +19,6 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 @Mapper
 public interface ISceneProMapper extends BaseMapper<ScenePro> {
 public interface ISceneProMapper extends BaseMapper<ScenePro> {
 
 
+    List<GroupByCount> findSceneProNumByCameraIds(@Param("cameraIds") List<Long> cameraIdList);
+    List<GroupByCount> findScenePlusNumByCameraIds(@Param("cameraIds") List<Long> cameraIdList);
 }
 }

+ 18 - 0
src/main/java/com/fdkankan/user/mapper/ISceneResourceCameraMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.user.mapper;
+
+import com.fdkankan.user.entity.SceneResourceCamera;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景资源和相机关联表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-05
+ */
+@Mapper
+public interface ISceneResourceCameraMapper extends BaseMapper<SceneResourceCamera> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/user/mapper/ISceneResourceCooperationMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.user.mapper;
+
+import com.fdkankan.user.entity.SceneResourceCooperation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景资源和协作用户关联表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-05
+ */
+@Mapper
+public interface ISceneResourceCooperationMapper extends BaseMapper<SceneResourceCooperation> {
+
+}

+ 22 - 0
src/main/java/com/fdkankan/user/mapper/ISceneResourceMapper.java

@@ -0,0 +1,22 @@
+package com.fdkankan.user.mapper;
+
+import com.fdkankan.user.entity.SceneResource;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-06
+ */
+@Mapper
+public interface ISceneResourceMapper extends BaseMapper<SceneResource> {
+
+    List<SceneResource> sceneResourceByCameraId(@Param("cameraId") Long cameraId);
+}

+ 11 - 0
src/main/java/com/fdkankan/user/service/ICameraDetailService.java

@@ -3,6 +3,9 @@ package com.fdkankan.user.service;
 import com.fdkankan.user.entity.CameraDetail;
 import com.fdkankan.user.entity.CameraDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 
+import java.util.HashMap;
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 相机子表 服务类
  * 相机子表 服务类
@@ -18,4 +21,12 @@ public interface ICameraDetailService extends IService<CameraDetail> {
     Long getCountByUserId(Long userId);
     Long getCountByUserId(Long userId);
 
 
     Integer deadlineNumber(String username);
     Integer deadlineNumber(String username);
+
+    void unbindCamera(List<Long> cameraIds,String userName);
+
+    void bindCamera(List<Long> cameraIds,Long userId);
+
+    HashMap<Long, CameraDetail> getByCameraIds(List<Long> cameraIds);
+
+    void updateCooperationByIds(List<Long> cameraIds, Long id);
 }
 }

+ 20 - 0
src/main/java/com/fdkankan/user/service/ICameraService.java

@@ -1,8 +1,13 @@
 package com.fdkankan.user.service;
 package com.fdkankan.user.service;
 
 
+import com.alibaba.fastjson.JSONArray;
+import com.fdkankan.common.response.PageInfo;
 import com.fdkankan.user.entity.Camera;
 import com.fdkankan.user.entity.Camera;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.user.entity.SceneResource;
+import com.fdkankan.user.vo.request.CameraParam;
 
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -18,4 +23,19 @@ public interface ICameraService extends IService<Camera> {
     Camera getBySnCode(String snCode);
     Camera getBySnCode(String snCode);
 
 
     List<Camera> getCameraLikeSnCode(String trim);
     List<Camera> getCameraLikeSnCode(String trim);
+
+    PageInfo pageList(CameraParam param);
+
+    HashMap<String, Object> deadline(String username);
+
+    void unbind(Long cameraId, String ids,String userName);
+
+    void bind(Integer cameraType, String snCode, String username);
+
+    void saveCooperationUser(String ids, Long cameraId,String resourceIds, String username);
+
+    HashMap<Long, Camera> getByIds(List<Long> cameraIds);
+
+    void deleteCooperationUser(Long cameraId);
+
 }
 }

+ 3 - 0
src/main/java/com/fdkankan/user/service/ICameraSpaceService.java

@@ -4,6 +4,7 @@ import com.fdkankan.user.entity.CameraSpace;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.user.vo.response.CameraSpaceVo;
 import com.fdkankan.user.vo.response.CameraSpaceVo;
 
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -17,4 +18,6 @@ import java.util.List;
 public interface ICameraSpaceService extends IService<CameraSpace> {
 public interface ICameraSpaceService extends IService<CameraSpace> {
 
 
     List<CameraSpaceVo> getVoListByCameraId(Long cameraId);
     List<CameraSpaceVo> getVoListByCameraId(Long cameraId);
+
+    HashMap<Long, CameraSpaceVo> getVoListByCameraIds(List<Long> cameraIdList);
 }
 }

+ 16 - 0
src/main/java/com/fdkankan/user/service/IFolderService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.user.service;
+
+import com.fdkankan.user.entity.Folder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 文件夹表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-07
+ */
+public interface IFolderService extends IService<Folder> {
+
+}

+ 10 - 0
src/main/java/com/fdkankan/user/service/ISceneCooperationService.java

@@ -1,7 +1,11 @@
 package com.fdkankan.user.service;
 package com.fdkankan.user.service;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.user.entity.SceneCooperation;
 import com.fdkankan.user.entity.SceneCooperation;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.user.entity.ScenePlus;
+import com.fdkankan.user.entity.ScenePro;
+import com.fdkankan.user.vo.request.SceneCooperationParam;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -16,4 +20,10 @@ import java.util.List;
 public interface ISceneCooperationService extends IService<SceneCooperation> {
 public interface ISceneCooperationService extends IService<SceneCooperation> {
 
 
     Integer getCooperationSceneNum(Long userId, List<Integer> sceneSourceList);
     Integer getCooperationSceneNum(Long userId, List<Integer> sceneSourceList);
+
+    void deleteCooperationList(List<ScenePro> sceneProList, List<ScenePlus> scenePlusList) ;
+
+    void saveBatchByList(List<ScenePro> sceneProList, List<ScenePlus> scenePlusList, Long userId ,List<Long>resourceIds);
+
+    JSONObject sceneResourceList(SceneCooperationParam param);
 }
 }

+ 6 - 0
src/main/java/com/fdkankan/user/service/IScenePlusExtService.java

@@ -3,6 +3,9 @@ package com.fdkankan.user.service;
 import com.fdkankan.user.entity.ScenePlusExt;
 import com.fdkankan.user.entity.ScenePlusExt;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 
+import java.util.HashMap;
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  *  服务类
  *  服务类
@@ -13,4 +16,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
  */
 public interface IScenePlusExtService extends IService<ScenePlusExt> {
 public interface IScenePlusExtService extends IService<ScenePlusExt> {
 
 
+    ScenePlusExt getByPlusId(Long plusId);
+
+    HashMap<Long,ScenePlusExt> getByPlusIds(List<Long> plusIds);
 }
 }

+ 8 - 0
src/main/java/com/fdkankan/user/service/IScenePlusService.java

@@ -16,4 +16,12 @@ import java.util.List;
 public interface IScenePlusService extends IService<ScenePlus> {
 public interface IScenePlusService extends IService<ScenePlus> {
 
 
     Integer getCountByUserId(Long userId, List<Integer> sceneSourceList);
     Integer getCountByUserId(Long userId, List<Integer> sceneSourceList);
+
+    List<ScenePlus> getListByCameraId(Long cameraId);
+
+    void bindOrUnCamera(List<Long> cameraIds, Long id);
+
+    List<ScenePlus> getListByCameraIds(List<Long> cameraIds);
+
+    List<ScenePlus> getListByNums(List<String> numList);
 }
 }

+ 15 - 0
src/main/java/com/fdkankan/user/service/ISceneProService.java

@@ -1,10 +1,13 @@
 package com.fdkankan.user.service;
 package com.fdkankan.user.service;
 
 
+import com.fdkankan.user.entity.CameraDetail;
 import com.fdkankan.user.entity.ScenePro;
 import com.fdkankan.user.entity.ScenePro;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.user.vo.response.GroupByCount;
 import com.fdkankan.user.vo.response.SceneNumVo;
 import com.fdkankan.user.vo.response.SceneNumVo;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
+import java.util.List;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -17,4 +20,16 @@ import java.util.HashMap;
 public interface ISceneProService extends IService<ScenePro> {
 public interface ISceneProService extends IService<ScenePro> {
 
 
     HashMap<String, SceneNumVo> findSceneNumber(String token);
     HashMap<String, SceneNumVo> findSceneNumber(String token);
+
+    HashMap<Long, GroupByCount>findSceneNumByCameraIds(List<Long> cameraIdList);
+
+    void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId, int payStatus);
+
+    List<ScenePro> getListByCameraId(Long cameraId);
+
+    void bindOrUnCamera(List<Long> cameraIds, Long id);
+
+    List<ScenePro> getListByCameraIds(List<Long> cameraIds);
+
+    List<ScenePro> getListByNums(List<String> numList);
 }
 }

+ 21 - 0
src/main/java/com/fdkankan/user/service/ISceneResourceCameraService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.user.service;
+
+import com.fdkankan.user.entity.SceneResourceCamera;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源和相机关联表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-05
+ */
+public interface ISceneResourceCameraService extends IService<SceneResourceCamera> {
+
+    void deleteByCameraIds(List<Long> cameraIds);
+
+    void saveBatchByCameraIds(List<Long> cameraIds, List<Long> resourceIdList);
+}

+ 19 - 0
src/main/java/com/fdkankan/user/service/ISceneResourceCooperationService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.user.service;
+
+import com.fdkankan.user.entity.SceneResourceCooperation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源和协作用户关联表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-05
+ */
+public interface ISceneResourceCooperationService extends IService<SceneResourceCooperation> {
+
+    void deleteBatchByCooperationIds(List<Long> ids);
+}

+ 21 - 0
src/main/java/com/fdkankan/user/service/ISceneResourceService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.user.service;
+
+import com.fdkankan.user.entity.SceneResource;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-06
+ */
+public interface ISceneResourceService extends IService<SceneResource> {
+
+    List<SceneResource> sceneResourceByCameraId(Long cameraId);
+
+    List<SceneResource> getByVersion(List<String> versionList);
+}

+ 5 - 0
src/main/java/com/fdkankan/user/service/ISceneService.java

@@ -3,6 +3,8 @@ package com.fdkankan.user.service;
 import com.fdkankan.user.entity.Scene;
 import com.fdkankan.user.entity.Scene;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 场景表 服务类
  * 场景表 服务类
@@ -14,4 +16,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface ISceneService extends IService<Scene> {
 public interface ISceneService extends IService<Scene> {
 
 
     Integer getCountByUserId(Long userId);
     Integer getCountByUserId(Long userId);
+
+
+    void bindOrUnCamera(List<Long> cameraIds, Long id);
 }
 }

+ 9 - 0
src/main/java/com/fdkankan/user/service/IUserIncrementService.java

@@ -5,6 +5,9 @@ import com.fdkankan.user.entity.UserIncrement;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.user.vo.request.IncrementParam;
 import com.fdkankan.user.vo.request.IncrementParam;
 
 
+import java.util.HashMap;
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 用户增值权益表 服务类
  * 用户增值权益表 服务类
@@ -18,4 +21,10 @@ public interface IUserIncrementService extends IService<UserIncrement> {
     Long getCountByUserId(Long userId, int type);
     Long getCountByUserId(Long userId, int type);
 
 
     Page pageList(IncrementParam param);
     Page pageList(IncrementParam param);
+
+    HashMap<Long, UserIncrement> findByCameraIds(List<Long> cameraIdList);
+
+    Long getValidCountByCameraId(Long cameraId);
+
+    void unbindCamera(List<Long> cameraIds);
 }
 }

+ 3 - 0
src/main/java/com/fdkankan/user/service/IUserService.java

@@ -8,6 +8,7 @@ import com.fdkankan.user.vo.request.ShipAddressParam;
 import com.fdkankan.user.vo.request.UserParam;
 import com.fdkankan.user.vo.request.UserParam;
 import com.fdkankan.user.vo.response.UserVo;
 import com.fdkankan.user.vo.response.UserVo;
 
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -45,4 +46,6 @@ public interface IUserService extends IService<User> {
     void updateNickName(String nickName, String userName);
     void updateNickName(String nickName, String userName);
 
 
     void updateUserDetail(UserParam param, String userName);
     void updateUserDetail(UserParam param, String userName);
+
+    HashMap<Long, User> getByIds(List<Long> userIds);
 }
 }

+ 69 - 5
src/main/java/com/fdkankan/user/service/impl/CameraDetailServiceImpl.java

@@ -2,21 +2,26 @@ package com.fdkankan.user.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.constant.Constant;
+import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.TbStatus;
 import com.fdkankan.common.constant.TbStatus;
-import com.fdkankan.user.entity.CameraDetail;
-import com.fdkankan.user.entity.User;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.user.common.CameraTypeEnum;
+import com.fdkankan.user.entity.*;
 import com.fdkankan.user.mapper.ICameraDetailMapper;
 import com.fdkankan.user.mapper.ICameraDetailMapper;
-import com.fdkankan.user.service.ICameraDetailService;
+import com.fdkankan.user.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.user.service.ICameraSpaceService;
-import com.fdkankan.user.service.IUserService;
 import com.fdkankan.user.vo.response.CameraSpaceVo;
 import com.fdkankan.user.vo.response.CameraSpaceVo;
 import org.joda.time.DateTime;
 import org.joda.time.DateTime;
 import org.joda.time.Days;
 import org.joda.time.Days;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -33,6 +38,16 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
     IUserService userService;
     IUserService userService;
     @Autowired
     @Autowired
     ICameraSpaceService cameraSpaceService;
     ICameraSpaceService cameraSpaceService;
+    @Autowired
+    FdkkLaserService fdkkLaserService;
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    ISceneCooperationService sceneCooperationService;
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    IScenePlusService scenePlusService;
 
 
     @Override
     @Override
     public CameraDetail getByCameraId(Long cameraId) {
     public CameraDetail getByCameraId(Long cameraId) {
@@ -46,6 +61,16 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
     }
     }
 
 
     @Override
     @Override
+    public HashMap<Long, CameraDetail> getByCameraIds(List<Long> cameraIds) {
+        LambdaQueryWrapper<CameraDetail> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(CameraDetail::getCameraId,cameraIds);
+        List<CameraDetail> list = this.list(wrapper);
+        HashMap<Long, CameraDetail> map = new HashMap<>();
+        list.forEach(entity -> map.put(entity.getCameraId(),entity));
+        return map;
+    }
+
+    @Override
     public Long getCountByUserId(Long userId) {
     public Long getCountByUserId(Long userId) {
         LambdaQueryWrapper<CameraDetail> wrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<CameraDetail> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(CameraDetail::getUserId,userId);
         wrapper.eq(CameraDetail::getUserId,userId);
@@ -70,4 +95,43 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
         }
         }
         return number;
         return number;
     }
     }
+
+    @Override
+    public void unbindCamera(List<Long> cameraIds,String username) {
+        HashMap<Long, CameraDetail> detailMap = this.getByCameraIds(cameraIds);
+        HashMap<Long, Camera> cameraMap = cameraService.getByIds(cameraIds);
+        List<CameraDetail> detailIds = new ArrayList<>();
+        for (Long cameraId : detailMap.keySet()) {
+            CameraDetail cameraDetail = detailMap.get(cameraId);
+            cameraDetail.setUserId(null);
+            cameraDetail.setCooperationUser(null);
+            cameraDetail.setTotalSpace(Long.parseLong(Constant.EXPANSION_SPACE_VALUE_1G ) * 10L);
+            sceneProService.lockOrUnLockBySpace(cameraDetail,cameraId,-2);     //封存场景
+            detailIds.add(cameraDetail);
+        }
+        //恢复10G基本容量
+        this.updateBatchById(detailIds);
+
+        //删除场景协作信息
+        List<ScenePro> sceneProList = sceneProService.getListByCameraIds(cameraIds);
+        List<ScenePlus> scenePlusList = scenePlusService.getListByCameraIds(cameraIds);
+        sceneCooperationService.deleteCooperationList(sceneProList,scenePlusList);
+        fdkkLaserService.disableCooperation(detailMap, cameraMap);
+    }
+
+    @Override
+    public void bindCamera(List<Long> cameraIds,Long userId) {
+        LambdaUpdateWrapper<CameraDetail> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.in(CameraDetail::getCameraId)
+                .set(CameraDetail::getUserId,userId);
+        this.update(wrapper);
+    }
+
+    @Override
+    public void updateCooperationByIds(List<Long> cameraIds, Long userId) {
+        LambdaUpdateWrapper<CameraDetail> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.in(CameraDetail::getCameraId)
+                .set(CameraDetail::getCooperationUser,userId);
+        this.update(wrapper);
+    }
 }
 }

+ 252 - 3
src/main/java/com/fdkankan/user/service/impl/CameraServiceImpl.java

@@ -1,13 +1,31 @@
 package com.fdkankan.user.service.impl;
 package com.fdkankan.user.service.impl;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.fdkankan.user.entity.Camera;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.common.response.PageInfo;
+import com.fdkankan.common.util.DateUtil;
+import com.fdkankan.common.util.FileSizeUtil;
+import com.fdkankan.user.common.CameraTypeEnum;
+import com.fdkankan.user.entity.*;
 import com.fdkankan.user.mapper.ICameraMapper;
 import com.fdkankan.user.mapper.ICameraMapper;
-import com.fdkankan.user.service.ICameraService;
+import com.fdkankan.user.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.user.util.DateUserUtil;
+import com.fdkankan.user.vo.request.CameraParam;
+import com.fdkankan.user.vo.response.CameraSpaceVo;
+import com.fdkankan.user.vo.response.CameraVo;
+import com.fdkankan.user.vo.response.GroupByCount;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.joda.time.Days;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
 
 
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -20,6 +38,27 @@ import java.util.List;
 @Service
 @Service
 public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
 public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
 
 
+    @Autowired
+    IUserService userService;
+    @Autowired
+    FdkkLaserService fdkkLaserService;
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    ICameraSpaceService cameraSpaceService;
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    ISceneService sceneService;
+    @Autowired
+    ISceneResourceCameraService sceneResourceCameraService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    ISceneCooperationService sceneCooperationService;
+
     @Override
     @Override
     public Camera getBySnCode(String snCode) {
     public Camera getBySnCode(String snCode) {
         LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
@@ -37,4 +76,214 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
         wrapper.like(Camera::getSnCode,snCode);
         wrapper.like(Camera::getSnCode,snCode);
         return this.list(wrapper);
         return this.list(wrapper);
     }
     }
+
+    @Override
+    public HashMap<Long, Camera> getByIds(List<Long> cameraIds) {
+        LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(Camera::getId,cameraIds);
+        List<Camera> list = this.list(wrapper);
+        HashMap<Long, Camera> map = new HashMap<>();
+        list.forEach(entity -> map.put(entity.getId(),entity));
+        return map;
+    }
+
+    @Override
+    public PageInfo pageList(CameraParam param) {
+        User user = userService.getByUserName(param.getUserName());
+        param.setUserId(user.getId());
+        Page<CameraVo> page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
+        List<Long> cameraIdList = page.getRecords().parallelStream().map(CameraVo::getId).collect(Collectors.toList());
+        HashMap<Long,GroupByCount> sceneNumMap = new HashMap<>();      //场景数量,最后拍摄时间
+        HashMap<Long, CameraSpaceVo> cameraSpaceMap = new HashMap<>();   //到期时间
+        HashMap<Long, UserIncrement> incrementMap = new HashMap<>();   //到期时间,是否过期
+        if(cameraIdList.size() >0){
+            sceneNumMap =  sceneProService.findSceneNumByCameraIds(cameraIdList);
+            cameraSpaceMap = cameraSpaceService.getVoListByCameraIds(cameraIdList);
+            incrementMap = userIncrementService.findByCameraIds(cameraIdList);
+        }
+        for (CameraVo responseCamera : page.getRecords()) {
+            responseCamera.setCameraType(param.getCameraType());
+            if (responseCamera.getType() != 0){
+                responseCamera.setUsedSpaceStr(FileSizeUtil.formatFileSize(Long.parseLong(responseCamera.getUsedSpace())));
+                responseCamera.setTotalSpaceStr(FileSizeUtil.formatFileSize(Long.parseLong(responseCamera.getTotalSpace())));
+                String usedSpace = String.valueOf(FileSizeUtil.formetFileSize(Long.parseLong(responseCamera.getUsedSpace()), FileSizeUtil.SIZETYPE_GB));
+                String totalSpace = String.valueOf(FileSizeUtil.formetFileSize(Long.parseLong(responseCamera.getTotalSpace()), FileSizeUtil.SIZETYPE_GB));
+                responseCamera.setUsedSpace(usedSpace);
+                responseCamera.setTotalSpace(totalSpace);
+            }
+            if(cameraSpaceMap.get(responseCamera.getId()) !=null){
+                responseCamera.setSpace((long)FileSizeUtil.formetFileSize(cameraSpaceMap.get(responseCamera.getId()).getSpace().longValue(), FileSizeUtil.SIZETYPE_GB));
+                responseCamera.setSpaceStr(FileSizeUtil.formatFileSize(cameraSpaceMap.get(responseCamera.getId()).getSpace().longValue()));
+                responseCamera.setSpaceEndStr(DateUtil.date2String(cameraSpaceMap.get(responseCamera.getId()).getSpaceEndTime(), DateUtil.YYYY_MM_DD_DATE_FORMAT));
+                if(Days.daysBetween(new DateTime(), new DateTime(cameraSpaceMap.get(responseCamera.getId()).getSpaceEndTime())).getDays() < 7){
+                    responseCamera.setIsExpire(true);
+                }
+            }
+            if(incrementMap.get(responseCamera.getId()) != null){
+                responseCamera.setUserIncrementId(incrementMap.get(responseCamera.getId()).getId());
+                responseCamera.setSpaceEndStr(DateUserUtil.getDayTime(incrementMap.get(responseCamera.getId()).getIncrementEndTime()));
+                String dayTime = incrementMap.get(responseCamera.getId()).getIncrementEndTime();
+                Integer surplusDate = Days.daysBetween(new DateTime(), new DateTime( DateUserUtil.getDate(dayTime))).getDays();
+                if(surplusDate < 31){
+                    responseCamera.setIsExpire(true);
+                    responseCamera.setSurplusDate(surplusDate);
+                }else {
+                    responseCamera.setIsExpire(false);
+                }
+            }
+
+
+            if(responseCamera.getType() == 10){
+                Map<String, String> params = new HashMap<>();
+                params.put("snCode", responseCamera.getSnCode());
+                responseCamera.setSceneNum(fdkkLaserService.getLaserSceneNum(params));
+            }else{
+                Integer sceneNum = sceneNumMap.get(responseCamera.getId()) == null ? 0 : Math.toIntExact(sceneNumMap.get(responseCamera.getId()).getCount());
+                String lastTime = sceneNumMap.get(responseCamera.getId()) == null ? "" : sceneNumMap.get(responseCamera.getId()).getLastTime();
+                responseCamera.setSceneNum(sceneNum);
+                responseCamera.setLastTime(lastTime);
+            }
+        }
+        return PageInfo.PageInfo(page);
+    }
+
+    @Override
+    public HashMap<String, Object> deadline(String username) {
+        //7天内过期的集合
+        List<CameraSpaceVo> cameraSpaceList = new ArrayList<>();
+        //所有期限的集合
+        List<CameraSpaceVo> cameraSpaceAll = new ArrayList<>();
+        User user = userService.getByUserName(username);
+        CameraParam param = new CameraParam();
+        param.setPageNum(1);
+        param.setPageSize(100);
+        param.setUserId(user.getId());
+        Page<CameraVo> page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
+        List<Long> cameraIdList = page.getRecords().parallelStream().map(CameraVo::getId).collect(Collectors.toList());
+        if(cameraIdList.size() >0){
+            HashMap<Long, CameraSpaceVo> cameraSpaceMap = cameraSpaceService.getVoListByCameraIds(cameraIdList);
+            for (CameraVo responseCamera : page.getRecords()) {
+                CameraSpaceVo cameraSpace = cameraSpaceMap.get(responseCamera.getId());
+                if(cameraSpace != null){
+                    DateTime dateTime  = new DateTime(cameraSpace.getSpaceEndTime());
+                    cameraSpace.setSnCode(responseCamera.getSnCode());
+                    cameraSpace.setUsedSpace(Double.parseDouble(responseCamera.getUsedSpace()));
+                    cameraSpace.setUsedSpaceStr(responseCamera.getUsedSpaceStr());
+                    cameraSpace.setTotalSpace(Double.parseDouble(responseCamera.getTotalSpace()));
+                    cameraSpace.setTotalSpaceStr(responseCamera.getTotalSpaceStr());
+
+                    Long space = cameraSpace.getSpace();
+                    cameraSpace.setSpace((long)FileSizeUtil.formetFileSize(space, FileSizeUtil.SIZETYPE_GB));
+                    cameraSpace.setSpaceStr(FileSizeUtil.formatFileSize(space));
+                    cameraSpace.setSpaceEndStr(DateUtil.date2String(cameraSpace.getSpaceEndTime(), DateUtil.YYYY_MM_DD_DATE_FORMAT));
+
+                    if(Days.daysBetween(new DateTime(), dateTime).getDays() < 7){
+                        cameraSpaceList.add(cameraSpace);
+                        cameraSpaceAll.add(cameraSpace);
+                        continue;
+                    }
+                    cameraSpaceAll.add(cameraSpace);
+                }
+            }
+        }
+        HashMap<String,Object> map = new HashMap<>();
+        map.put("nickName", user.getNickName());
+
+        if(cameraSpaceList.size() > 0){
+            map.put("isExpire", true);
+            Collections.sort(cameraSpaceList);
+            map.put("cameraList", cameraSpaceList);
+            return map;
+        }
+
+        map.put("isExpire", false);
+        Collections.sort(cameraSpaceAll);
+        map.put("cameraList", cameraSpaceAll);
+        return map;
+    }
+
+    @Override
+    public void unbind(Long cameraId, String ids,String userName) {
+        if(cameraId != null){
+            ids = cameraId.toString();
+        }
+        String[] split = ids.split(",");
+        List<Long> cameraIds = new ArrayList<>();
+        for (String id : split) {
+            cameraIds.add(Long.valueOf(id));
+        }
+        cameraDetailService.unbindCamera(cameraIds,userName);         //取消相机用户关联
+        userIncrementService.unbindCamera(cameraIds);                   //取消关联用户权益
+        sceneService.bindOrUnCamera(cameraIds,null);                //取消关联场景
+        sceneProService.bindOrUnCamera(cameraIds,null);             //取消关联场景
+        scenePlusService.bindOrUnCamera(cameraIds,null);            //取消关联场景
+        sceneResourceCameraService.deleteByCameraIds(cameraIds);            //删除协作相机
+
+    }
+
+    @Override
+    public void bind(Integer cameraType, String snCodes, String username) {
+        User user = userService.getByUserName(username);
+        String[] snCodeArr = snCodes.split(",");
+        List<String> snCodeList = Arrays.asList(snCodeArr);
+        LambdaUpdateWrapper<Camera> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.in(Camera::getSnCode,snCodeList);
+        List<Camera> list = this.list(wrapper);
+        List<Long> cameraIds = list.parallelStream().map(Camera::getId).collect(Collectors.toList());
+        cameraDetailService.bindCamera(cameraIds,user.getId());
+        sceneService.bindOrUnCamera(cameraIds,user.getId());
+        sceneProService.bindOrUnCamera(cameraIds,user.getId());
+        scenePlusService.bindOrUnCamera(cameraIds,user.getId());
+    }
+
+    @Override
+    public void saveCooperationUser(String ids, Long id,String resourceIds, String username) {
+        if (id != null) {
+            ids = id.toString();
+        }
+        String[] split = ids.split(",");
+        List<Long> cameraIds = new ArrayList<>();
+        for (String cameraId : split) {
+            cameraIds.add(Long.valueOf(cameraId));
+        }
+        HashMap<Long, CameraDetail> detailMap = cameraDetailService.getByCameraIds(cameraIds);
+        HashMap<Long, Camera> cameraMap = this.getByIds(cameraIds);
+        User user = userService.getByUserName(username);
+        cameraDetailService.updateCooperationByIds(cameraIds, user.getId());
+        sceneResourceCameraService.deleteByCameraIds(cameraIds);
+
+        //保存相机和场景资源的关联关系你
+        List<Long> resourceIdList = new ArrayList<>();
+        if (StringUtils.isNotEmpty(resourceIds)) {
+            for (String rId : resourceIds.split(",")) {
+                resourceIdList.add(Long.valueOf(rId));
+            }
+            sceneResourceCameraService.saveBatchByCameraIds(cameraIds,resourceIdList);
+        }
+
+        List<ScenePro> sceneProList = sceneProService.getListByCameraIds(cameraIds);
+        List<ScenePlus> scenePlusList = scenePlusService.getListByCameraIds(cameraIds);
+        sceneCooperationService.deleteCooperationList(sceneProList,scenePlusList);
+
+        sceneCooperationService.saveBatchByList(sceneProList,scenePlusList,user.getId(),resourceIdList);
+
+        fdkkLaserService.disableCooperation(detailMap, cameraMap);
+        fdkkLaserService.enableCameraCooperation(detailMap, cameraMap, username);
+    }
+
+    @Override
+    public void deleteCooperationUser(Long cameraId) {
+        List<Long> cameraIds = new ArrayList<>();
+        cameraIds.add(cameraId);
+        HashMap<Long, CameraDetail> detailMap = cameraDetailService.getByCameraIds(cameraIds);
+        HashMap<Long, Camera> cameraMap = this.getByIds(cameraIds);
+        cameraDetailService.updateCooperationByIds(cameraIds, null);
+        sceneResourceCameraService.deleteByCameraIds(cameraIds);
+
+        List<ScenePro> sceneProList = sceneProService.getListByCameraIds(cameraIds);
+        List<ScenePlus> scenePlusList = scenePlusService.getListByCameraIds(cameraIds);
+        sceneCooperationService.deleteCooperationList(sceneProList,scenePlusList);
+        fdkkLaserService.disableCooperation(detailMap, cameraMap);
+
+    }
 }
 }

+ 10 - 0
src/main/java/com/fdkankan/user/service/impl/CameraSpaceServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.user.service.impl;
 package com.fdkankan.user.service.impl;
 
 
+import cn.hutool.core.lang.hash.Hash;
 import com.fdkankan.user.entity.CameraSpace;
 import com.fdkankan.user.entity.CameraSpace;
 import com.fdkankan.user.mapper.ICameraSpaceMapper;
 import com.fdkankan.user.mapper.ICameraSpaceMapper;
 import com.fdkankan.user.service.ICameraSpaceService;
 import com.fdkankan.user.service.ICameraSpaceService;
@@ -7,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.user.vo.response.CameraSpaceVo;
 import com.fdkankan.user.vo.response.CameraSpaceVo;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -24,4 +26,12 @@ public class CameraSpaceServiceImpl extends ServiceImpl<ICameraSpaceMapper, Came
     public List<CameraSpaceVo> getVoListByCameraId(Long cameraId) {
     public List<CameraSpaceVo> getVoListByCameraId(Long cameraId) {
         return this.getBaseMapper().getVoListByCameraId(cameraId);
         return this.getBaseMapper().getVoListByCameraId(cameraId);
     }
     }
+
+    @Override
+    public HashMap<Long, CameraSpaceVo> getVoListByCameraIds(List<Long> cameraIdList) {
+        HashMap<Long, CameraSpaceVo> map= new HashMap<>();
+        List<CameraSpaceVo> voListByCameraIds = this.getBaseMapper().getVoListByCameraIds(cameraIdList);
+        voListByCameraIds.forEach(entity ->map.put(entity.getCameraId(),entity));
+        return map;
+    }
 }
 }

+ 87 - 1
src/main/java/com/fdkankan/user/service/impl/FdkkLaserService.java

@@ -1,9 +1,16 @@
 package com.fdkankan.user.service.impl;
 package com.fdkankan.user.service.impl;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.Constant;
+import com.fdkankan.user.common.CameraTypeEnum;
 import com.fdkankan.user.common.Result;
 import com.fdkankan.user.common.Result;
+import com.fdkankan.user.entity.Camera;
+import com.fdkankan.user.entity.CameraDetail;
+import com.fdkankan.user.entity.User;
+import com.fdkankan.user.service.IUserService;
 import com.fdkankan.user.vo.response.SceneNumVo;
 import com.fdkankan.user.vo.response.SceneNumVo;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpHeaders;
@@ -12,12 +19,27 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.client.RestTemplate;
 
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Service
 @Service
 @Slf4j
 @Slf4j
 public class FdkkLaserService {
 public class FdkkLaserService {
-    @Value("${4dkk.laserService.host}")
+
+
+    @Autowired
+    IUserService userService;
+
+    @Value("${4dkk.laserService.basePath}")
     private String laserHost;
     private String laserHost;
     private final String GET_LASER_SCENE_USER_URL="/laser/4dage/getSceneNum";
     private final String GET_LASER_SCENE_USER_URL="/laser/4dage/getSceneNum";
+    private final String GET_LASER_SCENE_CNT_URL="/laser/4dage/scene/getSceneNumByCamera";
+    private final String DISABLE_COOPERATION_SCENE_URL="/laser/4dage/scene/cooperation/disable";
+    private final String ENABLE_COOPERATION_CAMERA_URL="/laser/4dage/scene/cooperation/cameraSave";
+
+
     private RestTemplate restTemplate = new RestTemplate();
     private RestTemplate restTemplate = new RestTemplate();
 
 
     /**
     /**
@@ -45,4 +67,68 @@ public class FdkkLaserService {
         }
         }
         return sceneNumVo ;
         return sceneNumVo ;
     }
     }
+
+    public Integer getLaserSceneNum(Map<String, String> params){
+        String url = laserHost + GET_LASER_SCENE_CNT_URL;
+        log.info("获取激光转台相机场景数,url:{},params:{}",GET_LASER_SCENE_CNT_URL, JSONObject.toJSONString(params));
+        ResponseEntity<Result> responseEntity = restTemplate.postForEntity(url,params, Result.class);
+        log.info("获取激光转台相机场景数,url:{},params:{},结果:{}",url, JSONObject.toJSONString(params),JSONObject.toJSONString(responseEntity.getBody()));
+        if(responseEntity.getStatusCode() != HttpStatus.OK || responseEntity.getBody().getCode() != HttpStatus.OK.value()){
+            log.error("自研激光转台相机协作失败!");
+        }
+        return (Integer) responseEntity.getBody().getData();
+    }
+
+    public void disableCooperation(HashMap<Long,CameraDetail> detailMap,HashMap<Long,Camera> cameraMap ){
+        this.disableCooperation(getCooperationParam(detailMap,cameraMap,null));
+    }
+    public void enableCameraCooperation(HashMap<Long,CameraDetail> detailMap,HashMap<Long,Camera> cameraMap ,String username){
+        this.enableCameraCooperation(getCooperationParam(detailMap,cameraMap,username));
+    }
+
+    public void disableCooperation(List<Map<String, String>> params) {
+        if(params.size() <=0){
+            return;
+        }
+        String url = laserHost + DISABLE_COOPERATION_SCENE_URL;
+        log.info("自研激光转台取消协作,url:{},params:{}",DISABLE_COOPERATION_SCENE_URL, JSONObject.toJSONString(params));
+        ResponseEntity<Result> responseEntity = restTemplate.postForEntity(url,params, Result.class);
+        log.info("自研激光转台相机同步,url:{},params:{},结果:{}",url, JSONObject.toJSONString(params),JSONObject.toJSONString(responseEntity.getBody()));
+        if(responseEntity.getStatusCode() != HttpStatus.OK || responseEntity.getBody().getCode() != HttpStatus.OK.value()){
+            log.error("激光场景状态同步失败!");
+        }
+    }
+
+    public  List<Map<String, String>> getCooperationParam(HashMap<Long,CameraDetail> detailMap,HashMap<Long,Camera> cameraMap ,String username){
+        List<Map<String, String>> laserParams = new ArrayList<>();
+        List<Long> userIds = new ArrayList<>();
+        for (Long aLong : detailMap.keySet()) {
+            if(detailMap.get(aLong).getCooperationUser()!=null){
+                userIds.add(detailMap.get(aLong).getCooperationUser());
+            }
+        }
+        HashMap<Long, User> userMap = userService.getByIds(userIds);
+        for (Long cameraId : detailMap.keySet()) {
+            CameraDetail cameraDetail = detailMap.get(cameraId);
+            if (cameraDetail.getType() == CameraTypeEnum.LASER_TURN.getType()) {
+                Camera cameraEntity = cameraMap.get(cameraId);
+                Map<String, String> param = new HashMap<>();
+                param.put("snCode", cameraEntity.getSnCode());
+                String name = userMap.get(cameraDetail.getCooperationUser()) == null ?null : userMap.get(cameraDetail.getCooperationUser()).getUserName();
+                param.put("cooperationUserName", name);
+                laserParams.add(param);
+            }
+        }
+      return laserParams;
+    }
+
+    public void enableCameraCooperation(List<Map<String, String>> params) {
+        String url = laserHost + ENABLE_COOPERATION_CAMERA_URL;
+        log.info("自研激光转台相机协作,url:{},params:{}",ENABLE_COOPERATION_CAMERA_URL, JSONObject.toJSONString(params));
+        ResponseEntity<Result> responseEntity = restTemplate.postForEntity(url,params, Result.class);
+        log.info("自研激光转台相机协作,url:{},params:{},结果:{}",url, JSONObject.toJSONString(params),JSONObject.toJSONString(responseEntity.getBody()));
+        if(responseEntity.getStatusCode() != HttpStatus.OK || responseEntity.getBody().getCode() != HttpStatus.OK.value()){
+            log.error("自研激光转台相机协作失败!");
+        }
+    }
 }
 }

+ 20 - 0
src/main/java/com/fdkankan/user/service/impl/FolderServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.user.service.impl;
+
+import com.fdkankan.user.entity.Folder;
+import com.fdkankan.user.mapper.IFolderMapper;
+import com.fdkankan.user.service.IFolderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 文件夹表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-07
+ */
+@Service
+public class FolderServiceImpl extends ServiceImpl<IFolderMapper, Folder> implements IFolderService {
+
+}

+ 143 - 2
src/main/java/com/fdkankan/user/service/impl/SceneCooperationServiceImpl.java

@@ -1,12 +1,25 @@
 package com.fdkankan.user.service.impl;
 package com.fdkankan.user.service.impl;
 
 
-import com.fdkankan.user.entity.SceneCooperation;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.SceneConstant;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.user.constant.LoginConstant;
+import com.fdkankan.user.entity.*;
 import com.fdkankan.user.mapper.ISceneCooperationMapper;
 import com.fdkankan.user.mapper.ISceneCooperationMapper;
-import com.fdkankan.user.service.ISceneCooperationService;
+import com.fdkankan.user.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.user.vo.request.SceneCooperationParam;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
 
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -19,10 +32,138 @@ import java.util.List;
 @Service
 @Service
 public class SceneCooperationServiceImpl extends ServiceImpl<ISceneCooperationMapper, SceneCooperation> implements ISceneCooperationService {
 public class SceneCooperationServiceImpl extends ServiceImpl<ISceneCooperationMapper, SceneCooperation> implements ISceneCooperationService {
 
 
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    FdkkLaserService fdkkLaserService;
+    @Autowired
+    ISceneResourceCooperationService sceneResourceCooperationService;
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    ISceneResourceService sceneResourceService;
+
     @Override
     @Override
     public Integer getCooperationSceneNum(Long userId, List<Integer> sceneSourceList) {
     public Integer getCooperationSceneNum(Long userId, List<Integer> sceneSourceList) {
         Integer cooperationSceneProNum = this.getBaseMapper().getCooperationSceneProNum(userId, sceneSourceList);
         Integer cooperationSceneProNum = this.getBaseMapper().getCooperationSceneProNum(userId, sceneSourceList);
         Integer cooperationScenePlusNum = this.getBaseMapper().getCooperationScenePlusNum(userId, sceneSourceList);
         Integer cooperationScenePlusNum = this.getBaseMapper().getCooperationScenePlusNum(userId, sceneSourceList);
         return cooperationSceneProNum + cooperationScenePlusNum;
         return cooperationSceneProNum + cooperationScenePlusNum;
     }
     }
+
+    @Override
+    public void deleteCooperationList(List<ScenePro> sceneProList,List<ScenePlus> scenePlusList) {
+        if(!CollectionUtils.isEmpty(sceneProList)){
+            List<String> numList = sceneProList.stream().map(ScenePro::getNum).collect(Collectors.toList());
+            List<String> numList2 = scenePlusList.stream().map(ScenePlus::getNum).collect(Collectors.toList());
+            numList.addAll(numList2);
+            LambdaQueryWrapper<SceneCooperation> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(SceneCooperation::getSceneNum,numList);
+            List<SceneCooperation> list = this.list(wrapper);
+            List<Long> ids = list.stream().map(SceneCooperation::getId).collect(Collectors.toList());
+            if(ids.size() >0){
+                sceneResourceCooperationService.removeByIds(ids);
+                sceneResourceCooperationService.deleteBatchByCooperationIds(ids);
+            }
+        }
+    }
+
+    @Override
+    public void saveBatchByList(List<ScenePro> sceneProList, List<ScenePlus> scenePlusList, Long userId,List<Long> resourceIdList) {
+        List<SceneCooperation> list = new ArrayList<>();
+        for (ScenePro scenePro : sceneProList) {
+            SceneCooperation sceneCooperationEntity = new SceneCooperation();
+            sceneCooperationEntity.setUserId(userId);
+            sceneCooperationEntity.setSceneNum(scenePro.getNum());
+            list.add(sceneCooperationEntity);
+        }
+        for (ScenePlus scenePlus : scenePlusList) {
+            SceneCooperation sceneCooperationEntity = new SceneCooperation();
+            sceneCooperationEntity.setUserId(userId);
+            sceneCooperationEntity.setSceneNum(scenePlus.getNum());
+            list.add(sceneCooperationEntity);
+        }
+        this.saveBatch(list);
+
+        if(resourceIdList.size() >0){
+            List<SceneResourceCooperation> resourceCooperationList = new ArrayList<>();
+            for (SceneCooperation sceneCooperation : list) {
+                for (Long resourceId : resourceIdList) {
+                    SceneResourceCooperation sceneResourceCooperation = new SceneResourceCooperation();
+                    sceneResourceCooperation.setSceneResourceId(resourceId);
+                    sceneResourceCooperation.setSceneCooperationId(sceneCooperation.getId());
+                    resourceCooperationList.add(sceneResourceCooperation);
+                }
+            }
+            if(resourceCooperationList.size() >0){
+                sceneResourceCooperationService.saveBatch(resourceCooperationList);
+            }
+        }
+    }
+
+    @Override
+    public JSONObject sceneResourceList(SceneCooperationParam param) {
+        JSONObject jsonObject = new JSONObject();
+        List<SceneResource> exclude = new ArrayList<>();
+        SceneResource excludeEntity = new SceneResource();
+        excludeEntity.setKeyWord("data");
+        exclude.add(excludeEntity);
+        jsonObject.put("exclude", exclude);
+
+        if(param.getCameraId() != null){
+            Camera cameraEntity = cameraService.getById(param.getCameraId());
+            if(cameraEntity != null){
+                CameraDetail cameraDetailEntity = cameraDetailService.getByCameraId(cameraEntity.getId());
+                if(cameraDetailEntity.getCompanyId() != null && cameraDetailEntity.getCompanyId() == 1){
+                    jsonObject.put("exclude", new ArrayList<>());
+                }
+            }
+        }
+        List<ScenePro> sceneProList;
+        List<ScenePlus> scenePlusList;
+
+        //如果是场景协作,判断是V3的场景还是V4的场景,如果是v4场景,则查询v4的菜单资源
+        if(param.getType() != null && param.getType() == 1){
+            if(StringUtils.isEmpty(param.getSceneNum()) && CollectionUtils.isEmpty(param.getNumList())){
+                throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+            }
+            List<String> numList = param.getNumList();
+            if(numList == null){
+                numList= new ArrayList<>();
+                numList.add(param.getSceneNum());
+            }
+            sceneProList = sceneProService.getListByNums(numList);
+            scenePlusList = scenePlusService.getListByNums(numList);
+            if(CollectionUtils.isEmpty(sceneProList) && CollectionUtils.isEmpty(scenePlusList)){
+                throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
+            }
+        }else {
+            //如果是相机协作,判断这个相机id下有没有V4的场景,如果有,则列出对应的菜单资源
+            if(ObjectUtils.isEmpty(param.getCameraId()) && CollectionUtils.isEmpty(param.getCameraIdList())){
+                throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+            }
+            List<Long> cameraIdList = param.getCameraIdList();
+            if(cameraIdList == null){
+                cameraIdList= new ArrayList<>();
+                cameraIdList.add(param.getCameraId());
+            }
+
+            sceneProList = sceneProService.getListByCameraIds(cameraIdList);
+            scenePlusList = scenePlusService.getListByCameraIds(cameraIdList);
+        }
+        List<String> versionList = Lists.newArrayList();
+        if(sceneProList.size() >0){
+            versionList.add("v3");
+        }
+        if(scenePlusList.size() >0){
+            versionList.add("v4");
+        }
+        List<SceneResource> results = sceneResourceService.getByVersion(versionList);
+        jsonObject.put("include", results);
+        return jsonObject;
+
+    }
 }
 }

+ 24 - 0
src/main/java/com/fdkankan/user/service/impl/ScenePlusExtServiceImpl.java

@@ -1,11 +1,15 @@
 package com.fdkankan.user.service.impl;
 package com.fdkankan.user.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.user.entity.ScenePlusExt;
 import com.fdkankan.user.entity.ScenePlusExt;
 import com.fdkankan.user.mapper.IScenePlusExtMapper;
 import com.fdkankan.user.mapper.IScenePlusExtMapper;
 import com.fdkankan.user.service.IScenePlusExtService;
 import com.fdkankan.user.service.IScenePlusExtService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.HashMap;
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  *  服务实现类
  *  服务实现类
@@ -17,4 +21,24 @@ import org.springframework.stereotype.Service;
 @Service
 @Service
 public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, ScenePlusExt> implements IScenePlusExtService {
 public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, ScenePlusExt> implements IScenePlusExtService {
 
 
+    @Override
+    public ScenePlusExt getByPlusId(Long plusId) {
+        LambdaQueryWrapper<ScenePlusExt> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePlusExt::getPlusId,plusId);
+        List<ScenePlusExt> list = this.list(wrapper);
+        if(list != null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public HashMap<Long, ScenePlusExt> getByPlusIds(List<Long> plusIds) {
+        LambdaQueryWrapper<ScenePlusExt> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ScenePlusExt::getPlusId,plusIds);
+        List<ScenePlusExt> list = this.list(wrapper);
+        HashMap<Long,ScenePlusExt> map = new HashMap<>();
+        list.forEach(entity -> map.put(entity.getPlusId(),entity));
+        return map;
+    }
 }
 }

+ 32 - 0
src/main/java/com/fdkankan/user/service/impl/ScenePlusServiceImpl.java

@@ -1,7 +1,9 @@
 package com.fdkankan.user.service.impl;
 package com.fdkankan.user.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.user.entity.ScenePlus;
 import com.fdkankan.user.entity.ScenePlus;
+import com.fdkankan.user.entity.ScenePro;
 import com.fdkankan.user.mapper.IScenePlusMapper;
 import com.fdkankan.user.mapper.IScenePlusMapper;
 import com.fdkankan.user.service.IScenePlusService;
 import com.fdkankan.user.service.IScenePlusService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -27,4 +29,34 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         wrapper.eq(ScenePlus::getSceneSource, sceneSourceList);
         wrapper.eq(ScenePlus::getSceneSource, sceneSourceList);
         return Math.toIntExact(this.count(wrapper));
         return Math.toIntExact(this.count(wrapper));
     }
     }
+
+
+    @Override
+    public List<ScenePlus> getListByCameraId(Long cameraId) {
+        LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePlus::getCameraId,cameraId);
+        return this.list(wrapper);
+    }
+
+    @Override
+    public void bindOrUnCamera(List<Long> cameraIds, Long userId) {
+        LambdaUpdateWrapper<ScenePlus> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(ScenePlus::getUserId,userId)
+                .in(ScenePlus::getCameraId,cameraIds);
+        this.update(wrapper);
+    }
+
+    @Override
+    public List<ScenePlus> getListByCameraIds(List<Long> cameraIds) {
+        LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ScenePlus::getCameraId,cameraIds);
+        return this.list(wrapper);
+    }
+
+    @Override
+    public List<ScenePlus> getListByNums(List<String> numList) {
+        LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ScenePlus::getNum,numList);
+        return this.list(wrapper);
+    }
 }
 }

+ 171 - 7
src/main/java/com/fdkankan/user/service/impl/SceneProServiceImpl.java

@@ -1,21 +1,25 @@
 package com.fdkankan.user.service.impl;
 package com.fdkankan.user.service.impl;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.constant.ConstantFilePath;
+import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.common.util.JwtUtil;
-import com.fdkankan.user.entity.ScenePlus;
-import com.fdkankan.user.entity.ScenePro;
-import com.fdkankan.user.entity.User;
+import com.fdkankan.fyun.oss.UploadToOssUtil;
+import com.fdkankan.user.entity.*;
 import com.fdkankan.user.mapper.ISceneProMapper;
 import com.fdkankan.user.mapper.ISceneProMapper;
 import com.fdkankan.user.service.*;
 import com.fdkankan.user.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.user.util.DateUserUtil;
+import com.fdkankan.user.vo.response.GroupByCount;
 import com.fdkankan.user.vo.response.SceneNumVo;
 import com.fdkankan.user.vo.response.SceneNumVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
+import java.io.File;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -38,6 +42,12 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     ISceneService sceneService;
     ISceneService sceneService;
     @Autowired
     @Autowired
     FdkkLaserService fdkkLaserService;
     FdkkLaserService fdkkLaserService;
+    @Autowired
+    UploadToOssUtil uploadToOssUtil;
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    IScenePlusExtService scenePlusExtService;
 
 
     @Override
     @Override
     public HashMap<String, SceneNumVo> findSceneNumber(String token) {
     public HashMap<String, SceneNumVo> findSceneNumber(String token) {
@@ -69,4 +79,158 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         sceneNumVo.setTotalNum(sceneNumVo.getSceneNum() + sceneNumVo.getCooperationSceneNum());
         sceneNumVo.setTotalNum(sceneNumVo.getSceneNum() + sceneNumVo.getCooperationSceneNum());
         return sceneNumVo;
         return sceneNumVo;
     }
     }
+
+
+    @Override
+    public HashMap<Long,GroupByCount> findSceneNumByCameraIds(List<Long> cameraIdList) {
+        HashMap<Long,GroupByCount> map = new HashMap<>();
+        List<GroupByCount> result = this.getBaseMapper().findSceneProNumByCameraIds(cameraIdList);
+        List<GroupByCount> result2 = this.getBaseMapper().findScenePlusNumByCameraIds(cameraIdList);
+        result.forEach(entity ->map.put(entity.getId(),entity));
+        for (GroupByCount groupByCount : result2) {
+            if (map.get(groupByCount.getId()) != null) {
+                Long totalCount = map.get(groupByCount.getId()).getCount() + groupByCount.getCount();
+                String lastTime = DateUserUtil.getLastTime(map.get(groupByCount.getId()).getLastTime(), groupByCount.getLastTime());
+                groupByCount.setCount(totalCount);
+                groupByCount.setLastTime(lastTime);
+            }
+            map.put(groupByCount.getId(),groupByCount);
+        }
+        return map;
+    }
+
+    @Override
+    public void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId, int payStatus) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<ScenePlus> plusWr = new LambdaQueryWrapper<>();
+        Long count = 0L;
+        if(payStatus == 1){ //解封,判断用户权益,用户会员权益无限容量
+            count = userIncrementService.getValidCountByCameraId(cameraId);
+            wrapper.orderByAsc(ScenePro::getCreateTime);
+            plusWr.orderByAsc(ScenePlus::getCreateTime);
+        }else {
+            wrapper.orderByDesc(ScenePro::getCreateTime);
+            plusWr.orderByDesc(ScenePlus::getCreateTime);
+        }
+        wrapper.eq(ScenePro::getCameraId,cameraId)
+                .eq(ScenePro::getPayStatus,payStatus)
+                .eq(ScenePro::getSceneScheme,4)
+                .eq(ScenePro::getIsUpgrade,0);
+        plusWr.eq(ScenePlus::getCameraId,cameraId)
+                .eq(ScenePlus::getPayStatus,payStatus);
+        List<ScenePro> list = this.list(wrapper);
+        List<ScenePlus> plusList = scenePlusService.list(plusWr);
+        Long beyondSpace = Math.abs(cameraDetail.getUsedSpace() - cameraDetail.getTotalSpace());
+        Long accumulateSpace = 0L;
+        List<Long> lockedIds = new ArrayList<>();
+        if(payStatus == 1){
+            getScenePlusLockedIds(lockedIds,plusList,count,beyondSpace,accumulateSpace);
+            getSceneLockedIds(lockedIds,list,count,beyondSpace,accumulateSpace);
+        }else {
+            getSceneLockedIds(lockedIds,list,count,beyondSpace,accumulateSpace);
+            getScenePlusLockedIds(lockedIds,plusList,count,beyondSpace,accumulateSpace);
+        }
+
+        lockOrUnLockScenes(lockedIds,payStatus);
+    }
+    private void getSceneLockedIds(List<Long> lockedIds ,List<ScenePro> list,Long count,Long beyondSpace,Long accumulateSpace){
+        if (list != null && list.size() > 0){
+            for (ScenePro scenePro : list){
+                accumulateSpace += scenePro.getSpace();
+                if (count ==0 && accumulateSpace.compareTo(beyondSpace) > 0){
+                    break;
+                }
+                lockedIds.add(scenePro.getId());
+            }
+        }
+    }
+    private void getScenePlusLockedIds(List<Long> lockedIds ,List<ScenePlus> list,Long count,Long beyondSpace,Long accumulateSpace){
+        if (list != null && list.size() > 0){
+            List<Long> plusIds = list.parallelStream().map(ScenePlus::getId).collect(Collectors.toList());
+            HashMap<Long, ScenePlusExt> byPlusIds = scenePlusExtService.getByPlusIds(plusIds);
+            for (ScenePlus scenePlus : list){
+                ScenePlusExt scenePlusExt = byPlusIds.get(scenePlus.getId());
+                accumulateSpace += scenePlusExt.getSpace();
+                if (count ==0 && accumulateSpace.compareTo(beyondSpace) > 0){
+                    break;
+                }
+                lockedIds.add(scenePlus.getId());
+            }
+        }
+    }
+
+
+    // payStatus 为 -2 封存,为 1 解封
+    private void lockOrUnLockScenes(List<Long> lockedIds,Integer payStatus) {
+        if (lockedIds == null || lockedIds.size() == 0){
+            return;
+        }
+        LambdaUpdateWrapper<ScenePro> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(ScenePro::getPayStatus,payStatus)
+                .eq(ScenePro::getIsUpgrade,0)
+                .in(ScenePro::getId,lockedIds);
+        this.update(updateWrapper);
+
+        LambdaUpdateWrapper<ScenePlus> updatePlusWrapper = new LambdaUpdateWrapper<>();
+        updatePlusWrapper.set(ScenePlus::getPayStatus,payStatus)
+                .in(ScenePlus::getId,lockedIds);
+        scenePlusService.update(updatePlusWrapper);
+
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ScenePro::getId,lockedIds);
+        List<ScenePro> list = this.list(wrapper);
+        for (ScenePro scenePro : list) {
+            try{
+                Map<String, Object> map = new HashMap<>();
+                map.put("payStatus", payStatus);
+                FileUtils.writeJsonFile(ConstantFilePath.SCENE_PATH + "data/data" + scenePro.getNum() + "/scene.json", map);
+                JSONObject statusJson = new JSONObject();
+                //临时将-2改成1,app还没完全更新
+                statusJson.put("status", scenePro.getStatus() == -2 ? 1 : scenePro.getStatus());
+                statusJson.put("webSite", scenePro.getWebSite());
+                statusJson.put("sceneNum", scenePro.getNum());
+                statusJson.put("thumb", scenePro.getThumb());
+                statusJson.put("payStatus", scenePro.getPayStatus());
+                FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+scenePro.getNum()+ File.separator+"status.json", statusJson.toString());
+                uploadToOssUtil.upload(ConstantFilePath.SCENE_PATH+"data/data"+scenePro.getNum()+File.separator+"status.json",
+                        "data/data"+scenePro.getNum()+File.separator+"status.json");
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+    @Override
+    public List<ScenePro> getListByCameraId(Long cameraId) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePro::getCameraId,cameraId)
+                .eq(ScenePro::getIsUpgrade,0);
+        return this.list(wrapper);
+    }
+
+    @Override
+    public void bindOrUnCamera(List<Long> cameraIds, Long userId) {
+        LambdaUpdateWrapper<ScenePro> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.in(ScenePro::getCameraId,cameraIds)
+                .eq(ScenePro::getIsUpgrade,0)
+                .set(ScenePro::getUserId,userId);
+        this.update(wrapper);
+    }
+
+    @Override
+    public List<ScenePro> getListByCameraIds(List<Long> cameraIds) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ScenePro::getCameraId,cameraIds)
+                .eq(ScenePro::getIsUpgrade,0);
+        return this.list(wrapper);
+    }
+
+    @Override
+    public List<ScenePro> getListByNums(List<String> numList) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ScenePro::getNum,numList)
+                .eq(ScenePro::getIsUpgrade,0);
+        return this.list(wrapper);
+    }
 }
 }

+ 48 - 0
src/main/java/com/fdkankan/user/service/impl/SceneResourceCameraServiceImpl.java

@@ -0,0 +1,48 @@
+package com.fdkankan.user.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.user.entity.SceneResourceCamera;
+import com.fdkankan.user.mapper.ISceneResourceCameraMapper;
+import com.fdkankan.user.service.ISceneResourceCameraService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源和相机关联表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-05
+ */
+@Service
+public class SceneResourceCameraServiceImpl extends ServiceImpl<ISceneResourceCameraMapper, SceneResourceCamera> implements ISceneResourceCameraService {
+
+
+    @Override
+    public void deleteByCameraIds(List<Long> cameraIds) {
+        LambdaQueryWrapper<SceneResourceCamera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(SceneResourceCamera::getCameraId,cameraIds);
+        this.remove(wrapper);
+    }
+
+    @Override
+    public void saveBatchByCameraIds(List<Long> cameraIds, List<Long> resourceIdList) {
+        List<SceneResourceCamera> saveSceneResourceCameraList = new ArrayList<>();
+        SceneResourceCamera sceneResourceCameraEntity = null;
+        for (Long cameraId : cameraIds) {
+            for (Long resourceId : resourceIdList) {
+                sceneResourceCameraEntity = new SceneResourceCamera();
+                sceneResourceCameraEntity.setSceneResourceId(resourceId);
+                sceneResourceCameraEntity.setCameraId(cameraId);
+                saveSceneResourceCameraList.add(sceneResourceCameraEntity);
+            }
+        }
+        if(saveSceneResourceCameraList.size() >0){
+            this.saveBatch(saveSceneResourceCameraList);
+        }
+    }
+}

+ 30 - 0
src/main/java/com/fdkankan/user/service/impl/SceneResourceCooperationServiceImpl.java

@@ -0,0 +1,30 @@
+package com.fdkankan.user.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.user.entity.SceneResourceCooperation;
+import com.fdkankan.user.mapper.ISceneResourceCooperationMapper;
+import com.fdkankan.user.service.ISceneResourceCooperationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源和协作用户关联表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-05
+ */
+@Service
+public class SceneResourceCooperationServiceImpl extends ServiceImpl<ISceneResourceCooperationMapper, SceneResourceCooperation> implements ISceneResourceCooperationService {
+
+
+    @Override
+    public void deleteBatchByCooperationIds(List<Long> cooperationIds) {
+        LambdaQueryWrapper<SceneResourceCooperation> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(SceneResourceCooperation::getSceneCooperationId,cooperationIds);
+        this.remove(wrapper);
+    }
+}

+ 34 - 0
src/main/java/com/fdkankan/user/service/impl/SceneResourceServiceImpl.java

@@ -0,0 +1,34 @@
+package com.fdkankan.user.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.user.entity.SceneResource;
+import com.fdkankan.user.mapper.ISceneResourceMapper;
+import com.fdkankan.user.service.ISceneResourceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 场景资源表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-06
+ */
+@Service
+public class SceneResourceServiceImpl extends ServiceImpl<ISceneResourceMapper, SceneResource> implements ISceneResourceService {
+
+    @Override
+    public List<SceneResource> sceneResourceByCameraId(Long cameraId) {
+        return getBaseMapper().sceneResourceByCameraId(cameraId);
+    }
+
+    @Override
+    public List<SceneResource> getByVersion(List<String> versionList) {
+        LambdaQueryWrapper<SceneResource> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(SceneResource::getVersion,versionList);
+        return this.list(wrapper);
+    }
+}

+ 12 - 0
src/main/java/com/fdkankan/user/service/impl/SceneServiceImpl.java

@@ -1,12 +1,15 @@
 package com.fdkankan.user.service.impl;
 package com.fdkankan.user.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.user.entity.Scene;
 import com.fdkankan.user.entity.Scene;
 import com.fdkankan.user.mapper.ISceneMapper;
 import com.fdkankan.user.mapper.ISceneMapper;
 import com.fdkankan.user.service.ISceneService;
 import com.fdkankan.user.service.ISceneService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 场景表 服务实现类
  * 场景表 服务实现类
@@ -24,4 +27,13 @@ public class SceneServiceImpl extends ServiceImpl<ISceneMapper, Scene> implement
         wrapper.eq(Scene::getUserId,userId);
         wrapper.eq(Scene::getUserId,userId);
         return Math.toIntExact(this.count(wrapper));
         return Math.toIntExact(this.count(wrapper));
     }
     }
+
+
+    @Override
+    public void bindOrUnCamera(List<Long> cameraIds, Long userId) {
+        LambdaUpdateWrapper<Scene> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(Scene::getUserId,userId)
+                .in(Scene::getCameraId,cameraIds);
+        this.update(wrapper);
+    }
 }
 }

+ 29 - 0
src/main/java/com/fdkankan/user/service/impl/UserIncrementServiceImpl.java

@@ -3,6 +3,7 @@ package com.fdkankan.user.service.impl;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.common.constant.TbStatus;
 import com.fdkankan.common.constant.TbStatus;
 import com.fdkankan.common.util.DateUtil;
 import com.fdkankan.common.util.DateUtil;
@@ -22,6 +23,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.ObjectUtils;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -109,4 +112,30 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
         }
         }
         return result;
         return result;
     }
     }
+
+    @Override
+    public HashMap<Long, UserIncrement> findByCameraIds(List<Long> cameraIdList) {
+        HashMap<Long, UserIncrement> map = new HashMap<>();
+        LambdaQueryWrapper<UserIncrement> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(UserIncrement::getCameraId,cameraIdList);
+        List<UserIncrement> list = this.list(wrapper);
+        list.forEach(entity -> map.put(entity.getCameraId(),entity));
+        return map;
+    }
+
+    @Override
+    public Long getValidCountByCameraId(Long cameraId) {
+        LambdaQueryWrapper<UserIncrement> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(UserIncrement::getCameraId,cameraId);
+        wrapper.gt(UserIncrement::getIncrementEndTime, DateUtil.date2String(new Date(),DateUtil.DEFAULT_DATE_FORMAT));
+        return this.count(wrapper);
+    }
+
+    @Override
+    public void unbindCamera(List<Long> cameraIds) {
+        LambdaUpdateWrapper<UserIncrement> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(UserIncrement::getCameraId,null)
+                .in(UserIncrement::getCameraId,cameraIds);
+        this.update(wrapper);
+    }
 }
 }

+ 10 - 0
src/main/java/com/fdkankan/user/service/impl/UserServiceImpl.java

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
 
 
 import java.io.File;
 import java.io.File;
 import java.util.Date;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Set;
 import java.util.Set;
 
 
@@ -232,4 +233,13 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
         this.update(wrapper);
         this.update(wrapper);
     }
     }
 
 
+    @Override
+    public HashMap<Long, User> getByIds(List<Long> userIds) {
+        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(User::getId,userIds);
+        List<User> list = this.list(wrapper);
+        HashMap<Long,User> map = new HashMap<>();
+        list.forEach(entity -> map.put(entity.getId(),entity));
+        return map;
+    }
 }
 }

+ 33 - 0
src/main/java/com/fdkankan/user/util/DateUserUtil.java

@@ -0,0 +1,33 @@
+package com.fdkankan.user.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DateUserUtil {
+
+    public static final String DEF_FMT = "yyyy-MM-dd HH:mm:ss";
+    public static final String DAY_FMT = "yyyy-MM-dd";
+
+    public static String getLastTime(String time1,String time2){
+        return getDate(time1).getTime() >getDate(time2).getTime() ? time1 : time2;
+    }
+
+    public static Date getDate(String time){
+        try {
+            return new SimpleDateFormat(DEF_FMT).parse(time);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new Date();
+    }
+
+    public static String getDayTime(String time) {
+        try {
+            Date date = new SimpleDateFormat(DEF_FMT).parse(time);
+            return new SimpleDateFormat(DAY_FMT).format(date);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+       return "";
+    }
+}

+ 13 - 0
src/main/java/com/fdkankan/user/vo/request/CameraParam.java

@@ -0,0 +1,13 @@
+package com.fdkankan.user.vo.request;
+
+import com.fdkankan.common.request.RequestBase;
+import lombok.Data;
+
+@Data
+public class CameraParam extends RequestBase {
+    private String cameraType;      //4  看看,9 看见 ,10 深时
+    private String childName;       //相机sn码
+    private Integer selecttype;     // 1,查询协作者,2查询相机
+    private String userName;
+    private Long userId;
+}

+ 7 - 0
src/main/java/com/fdkankan/user/vo/request/FolderParam.java

@@ -0,0 +1,7 @@
+package com.fdkankan.user.vo.request;
+
+import lombok.Data;
+
+@Data
+public class FolderParam {
+}

+ 14 - 0
src/main/java/com/fdkankan/user/vo/request/SceneCooperationParam.java

@@ -0,0 +1,14 @@
+package com.fdkankan.user.vo.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SceneCooperationParam {
+    private Long cameraId;
+    private Integer type;
+    private String sceneNum;
+    private List<String> numList;
+    private List<Long> cameraIdList;
+}

+ 2 - 0
src/main/java/com/fdkankan/user/vo/response/CameraSpaceVo.java

@@ -37,6 +37,8 @@ public class CameraSpaceVo implements Serializable, Comparable<CameraSpaceVo> {
 
 
     private String snCode;
     private String snCode;
 
 
+    private Long cameraId;
+
     @Override
     @Override
     public int compareTo(CameraSpaceVo o) {
     public int compareTo(CameraSpaceVo o) {
         if (o.getSpaceEndTime() != null) {
         if (o.getSpaceEndTime() != null) {

+ 37 - 0
src/main/java/com/fdkankan/user/vo/response/CameraVo.java

@@ -0,0 +1,37 @@
+package com.fdkankan.user.vo.response;
+
+import lombok.Data;
+
+@Data
+public class CameraVo {
+    private Long id;
+    private String snCode;          //相机snCode
+    private String childName;
+
+    private Long space;
+    private String spaceStr;
+    private String usedSpace;       //使用容量
+    private String usedSpaceStr ="";
+    private String totalSpace;      //总容量
+    private String totalSpaceStr ="";
+
+    private String spaceEndTime;    //到期时间
+    private String spaceEndStr;
+
+    private Long  cooperationUser;          //协作者
+    private String cooperationUserName;
+
+    private Integer sceneNum;          //场景数量
+    private String lastTime;        //最后拍摄时间
+
+    private String pic;             //相机图片
+
+    private String cameraType;
+    private Integer balance;
+    private Integer type;
+
+    private Boolean isExpire;
+
+    private Long userIncrementId;
+    private Integer surplusDate;
+}

+ 9 - 0
src/main/java/com/fdkankan/user/vo/response/DataGroupByCount.java

@@ -0,0 +1,9 @@
+package com.fdkankan.user.vo.response;
+
+import lombok.Data;
+
+@Data
+public class DataGroupByCount {
+    private String groupKey;
+    private Long count;
+}

+ 10 - 0
src/main/java/com/fdkankan/user/vo/response/GroupByCount.java

@@ -0,0 +1,10 @@
+package com.fdkankan.user.vo.response;
+
+import lombok.Data;
+
+@Data
+public class GroupByCount {
+    private Long id;
+    private Long count;
+    private String lastTime;
+}

+ 25 - 0
src/main/resources/mapper/user/CameraMapper.xml

@@ -2,4 +2,29 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.user.mapper.ICameraMapper">
 <mapper namespace="com.fdkankan.user.mapper.ICameraMapper">
 
 
+    <select id="pageList" resultType="com.fdkankan.user.vo.response.CameraVo">
+        select c.id,c.sn_code,c.child_name ,d.balance,d.type , d.total_space,d.used_space,
+        u.id as cooperationUser,u.user_name as cooperationUserName,g.pic,g.id
+        from t_camera c
+        left join t_camera_detail d on c.id = d.camera_id
+        left join t_user u on d.cooperation_user = u.id
+        left join t_goods g on d.goods_id = g.id
+        WHERE c.rec_status = 'A'
+        <if test="param.selecttype !=null and param.selecttype == 2 and param.childName !=null and param.childName!='' ">
+            and c.child_name like CONCAT('%',#{param.childName},'%')
+        </if>
+        <if test="param.selecttype !=null and param.selecttype == 1 and param.childName !=null and param.childName!=''">
+            and u.user_name like CONCAT('%',#{param.childName},'%')
+        </if>
+        <if test="param.userId !=null ">
+            and d.user_id = #{param.userId}
+        </if>
+        <if test="param.cameraType!=null and param.cameraType == 4">
+            and d.type in (0,1,2)
+        </if>
+        <if test="param.cameraType!=null and param.cameraType >= 9">
+            and d.type = #{param.cameraType}
+        </if>
+        order by c.activated_time desc
+    </select>
 </mapper>
 </mapper>

+ 10 - 0
src/main/resources/mapper/user/CameraSpaceMapper.xml

@@ -8,4 +8,14 @@
             where s.rec_status = 'A' and s.space_type = 2 and s.camera_id = #{cameraId} and TIMESTAMPDIFF(MINUTE, NOW(), s.space_end_time) &gt; -1
             where s.rec_status = 'A' and s.space_type = 2 and s.camera_id = #{cameraId} and TIMESTAMPDIFF(MINUTE, NOW(), s.space_end_time) &gt; -1
             ORDER BY s.space_end_time
             ORDER BY s.space_end_time
     </select>
     </select>
+    <select id="getVoListByCameraIds" resultType="com.fdkankan.user.vo.response.CameraSpaceVo">
+        select s.id, s.space_end_time, c.child_name, s.space,s.camera_id from t_camera_space s
+            LEFT JOIN t_camera c on s.camera_id = c.id
+            where s.rec_status = 'A' and s.space_type = 2 and s.camera_id in
+            <foreach item="cameraId" collection="cameraIds" open="(" separator="," close=")">
+                #{cameraId}
+            </foreach>
+            and TIMESTAMPDIFF(MINUTE, NOW(), s.space_end_time) &gt; -1
+            ORDER BY s.space_end_time
+    </select>
 </mapper>
 </mapper>

+ 5 - 0
src/main/resources/mapper/user/FolderMapper.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.user.mapper.IFolderMapper">
+
+</mapper>

+ 18 - 0
src/main/resources/mapper/user/SceneProMapper.xml

@@ -2,4 +2,22 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.user.mapper.ISceneProMapper">
 <mapper namespace="com.fdkankan.user.mapper.ISceneProMapper">
 
 
+    <select id="findSceneProNumByCameraIds" resultType="com.fdkankan.user.vo.response.GroupByCount">
+        SELECT camera_id as id,count(id)  as count ,max(create_time) as lastTime FROM t_scene_pro
+        WHERE rec_status = 'A' AND camera_id is not null AND is_upgrade = 0
+        and camera_id in
+        <foreach item="cameraId" collection="cameraIds" open="(" separator="," close=")">
+            #{cameraId}
+        </foreach>
+        GROUP BY camera_id
+    </select>
+    <select id="findScenePlusNumByCameraIds" resultType="com.fdkankan.user.vo.response.GroupByCount">
+        SELECT camera_id as id,count(id)  as count ,max(create_time) as lastTime FROM t_scene_plus
+        WHERE tb_status = 0 AND camera_id is not null
+        and camera_id in
+        <foreach item="cameraId" collection="cameraIds" open="(" separator="," close=")">
+            #{cameraId}
+        </foreach>
+        GROUP BY camera_id
+    </select>
 </mapper>
 </mapper>

+ 5 - 0
src/main/resources/mapper/user/SceneResourceCameraMapper.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.user.mapper.ISceneResourceCameraMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/user/SceneResourceCooperationMapper.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.user.mapper.ISceneResourceCooperationMapper">
+
+</mapper>

+ 9 - 0
src/main/resources/mapper/user/SceneResourceMapper.xml

@@ -0,0 +1,9 @@
+<?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.user.mapper.ISceneResourceMapper">
+
+    <select id="sceneResourceByCameraId" resultType="com.fdkankan.user.entity.SceneResource">
+        SELECT a.* FROM `t_scene_resource` a LEFT JOIN `t_scene_resource_camera` b ON a.id = b.scene_resource_id
+        WHERE b.rec_status = 'A' and b.camera_id = #{cameraId}
+    </select>
+</mapper>