Browse Source

app文档接口完毕

lyhzzz 3 years ago
parent
commit
9b406ab738
96 changed files with 4184 additions and 316 deletions
  1. 35 59
      pom.xml
  2. 3 0
      src/main/java/com/fdkankan/app/common/RedisKeyUtil.java
  3. 97 0
      src/main/java/com/fdkankan/app/constant/CameraConstant.java
  4. 3 0
      src/main/java/com/fdkankan/app/constant/LoginConstant.java
  5. 54 0
      src/main/java/com/fdkankan/app/controller/AppSceneController.java
  6. 56 0
      src/main/java/com/fdkankan/app/controller/CameraController.java
  7. 21 0
      src/main/java/com/fdkankan/app/controller/GoodsController.java
  8. 77 8
      src/main/java/com/fdkankan/app/controller/LoginController.java
  9. 22 0
      src/main/java/com/fdkankan/app/controller/SceneController.java
  10. 28 0
      src/main/java/com/fdkankan/app/controller/SsoUserController.java
  11. 20 0
      src/main/java/com/fdkankan/app/controller/TestController.java
  12. 54 0
      src/main/java/com/fdkankan/app/controller/UserController.java
  13. 5 8
      src/main/java/com/fdkankan/app/entity/Camera.java
  14. 5 8
      src/main/java/com/fdkankan/app/entity/CameraDetail.java
  15. 139 0
      src/main/java/com/fdkankan/app/entity/ExpansionOrder.java
  16. 112 0
      src/main/java/com/fdkankan/app/entity/Goods.java
  17. 115 0
      src/main/java/com/fdkankan/app/entity/IncrementOrder.java
  18. 54 0
      src/main/java/com/fdkankan/app/entity/SceneCooperation.java
  19. 173 0
      src/main/java/com/fdkankan/app/entity/SceneEditInfo.java
  20. 6 10
      src/main/java/com/fdkankan/app/entity/ScenePlus.java
  21. 13 11
      src/main/java/com/fdkankan/app/entity/ScenePlusExt.java
  22. 4 8
      src/main/java/com/fdkankan/app/entity/ScenePro.java
  23. 281 0
      src/main/java/com/fdkankan/app/entity/SceneProEdit.java
  24. 54 0
      src/main/java/com/fdkankan/app/entity/SceneResourceCooperation.java
  25. 6 9
      src/main/java/com/fdkankan/app/entity/User.java
  26. 99 0
      src/main/java/com/fdkankan/app/entity/UserIncrement.java
  27. 3 20
      src/main/java/com/fdkankan/app/generate/AutoGenerate.java
  28. 6 1
      src/main/java/com/fdkankan/app/mapper/ICameraDetailMapper.java
  29. 7 2
      src/main/java/com/fdkankan/app/mapper/ICameraMapper.java
  30. 20 0
      src/main/java/com/fdkankan/app/mapper/IExpansionOrderMapper.java
  31. 18 0
      src/main/java/com/fdkankan/app/mapper/IGoodsMapper.java
  32. 18 0
      src/main/java/com/fdkankan/app/mapper/IIncrementOrderMapper.java
  33. 18 0
      src/main/java/com/fdkankan/app/mapper/ISceneCooperationMapper.java
  34. 18 0
      src/main/java/com/fdkankan/app/mapper/ISceneEditInfoMapper.java
  35. 1 1
      src/main/java/com/fdkankan/app/mapper/IScenePlusExtMapper.java
  36. 3 1
      src/main/java/com/fdkankan/app/mapper/IScenePlusMapper.java
  37. 18 0
      src/main/java/com/fdkankan/app/mapper/ISceneProEditMapper.java
  38. 13 1
      src/main/java/com/fdkankan/app/mapper/ISceneProMapper.java
  39. 18 0
      src/main/java/com/fdkankan/app/mapper/ISceneResourceCooperationMapper.java
  40. 20 0
      src/main/java/com/fdkankan/app/mapper/IUserIncrementMapper.java
  41. 1 1
      src/main/java/com/fdkankan/app/mapper/IUserMapper.java
  42. 12 2
      src/main/java/com/fdkankan/app/service/ICameraDetailService.java
  43. 16 2
      src/main/java/com/fdkankan/app/service/ICameraService.java
  44. 17 0
      src/main/java/com/fdkankan/app/service/IExpansionOrderService.java
  45. 16 0
      src/main/java/com/fdkankan/app/service/IGoodsService.java
  46. 16 0
      src/main/java/com/fdkankan/app/service/IIncrementOrderService.java
  47. 21 0
      src/main/java/com/fdkankan/app/service/ISceneCooperationService.java
  48. 17 0
      src/main/java/com/fdkankan/app/service/ISceneEditInfoService.java
  49. 4 2
      src/main/java/com/fdkankan/app/service/IScenePlusExtService.java
  50. 11 2
      src/main/java/com/fdkankan/app/service/IScenePlusService.java
  51. 17 0
      src/main/java/com/fdkankan/app/service/ISceneProEditService.java
  52. 32 2
      src/main/java/com/fdkankan/app/service/ISceneProService.java
  53. 19 0
      src/main/java/com/fdkankan/app/service/ISceneResourceCooperationService.java
  54. 25 0
      src/main/java/com/fdkankan/app/service/IUserIncrementService.java
  55. 13 5
      src/main/java/com/fdkankan/app/service/IUserService.java
  56. 79 7
      src/main/java/com/fdkankan/app/service/impl/CameraDetailServiceImpl.java
  57. 160 10
      src/main/java/com/fdkankan/app/service/impl/CameraServiceImpl.java
  58. 24 0
      src/main/java/com/fdkankan/app/service/impl/ExpansionOrderServiceImpl.java
  59. 20 0
      src/main/java/com/fdkankan/app/service/impl/GoodsServiceImpl.java
  60. 20 0
      src/main/java/com/fdkankan/app/service/impl/IncrementOrderServiceImpl.java
  61. 201 31
      src/main/java/com/fdkankan/app/service/impl/LoginService.java
  62. 50 0
      src/main/java/com/fdkankan/app/service/impl/SceneCooperationServiceImpl.java
  63. 33 0
      src/main/java/com/fdkankan/app/service/impl/SceneEditInfoServiceImpl.java
  64. 13 1
      src/main/java/com/fdkankan/app/service/impl/ScenePlusExtServiceImpl.java
  65. 47 3
      src/main/java/com/fdkankan/app/service/impl/ScenePlusServiceImpl.java
  66. 33 0
      src/main/java/com/fdkankan/app/service/impl/SceneProEditServiceImpl.java
  67. 475 6
      src/main/java/com/fdkankan/app/service/impl/SceneProServiceImpl.java
  68. 29 0
      src/main/java/com/fdkankan/app/service/impl/SceneResourceCooperationServiceImpl.java
  69. 57 0
      src/main/java/com/fdkankan/app/service/impl/UserIncrementServiceImpl.java
  70. 91 30
      src/main/java/com/fdkankan/app/service/impl/UserServiceImpl.java
  71. 1 1
      src/main/java/com/fdkankan/app/util/DateUserUtil.java
  72. 10 0
      src/main/java/com/fdkankan/app/vo/request/AppLoginParam.java
  73. 2 0
      src/main/java/com/fdkankan/app/vo/request/LoginParam.java
  74. 13 0
      src/main/java/com/fdkankan/app/vo/request/RegisterParam.java
  75. 19 0
      src/main/java/com/fdkankan/app/vo/request/SceneParam.java
  76. 87 0
      src/main/java/com/fdkankan/app/vo/response/CameraAppVo.java
  77. 38 0
      src/main/java/com/fdkankan/app/vo/response/GoodsSkuVo.java
  78. 79 0
      src/main/java/com/fdkankan/app/vo/response/GoodsVo.java
  79. 10 0
      src/main/java/com/fdkankan/app/vo/response/GroupByCount.java
  80. 272 0
      src/main/java/com/fdkankan/app/vo/response/SceneInfoVo.java
  81. 39 0
      src/main/java/com/fdkankan/app/vo/response/SceneVo.java
  82. 10 1
      src/main/java/com/fdkankan/app/vo/response/UserVo.java
  83. 40 2
      src/main/resources/bootstrap.yml
  84. 129 61
      src/main/resources/logback-spring.xml
  85. 8 0
      src/main/resources/mapper/app/CameraDetailMapper.xml
  86. 9 0
      src/main/resources/mapper/app/CameraMapper.xml
  87. 10 0
      src/main/resources/mapper/app/ExpansionOrderMapper.xml
  88. 5 0
      src/main/resources/mapper/app/GoodsMapper.xml
  89. 5 0
      src/main/resources/mapper/app/IncrementOrderMapper.xml
  90. 5 0
      src/main/resources/mapper/app/SceneCooperationMapper.xml
  91. 5 0
      src/main/resources/mapper/app/SceneEditInfoMapper.xml
  92. 5 0
      src/main/resources/mapper/app/ScenePlusMapper.xml
  93. 5 0
      src/main/resources/mapper/app/SceneProEditMapper.xml
  94. 71 0
      src/main/resources/mapper/app/SceneProMapper.xml
  95. 5 0
      src/main/resources/mapper/app/SceneResourceCooperationMapper.xml
  96. 16 0
      src/main/resources/mapper/app/UserIncrementMapper.xml

+ 35 - 59
pom.xml

@@ -3,47 +3,34 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-
-    <groupId>com.fdkankan.ucenter</groupId>
-    <artifactId>4dkankan-center-user</artifactId>
-    <version>1.0-SNAPSHOT</version>
     <packaging>jar</packaging>
-
-
     <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.12.RELEASE</version>
-        <relativePath/>
+        <groupId>com.fdkankan</groupId>
+        <artifactId>4dkankan-parent</artifactId>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
 
-    <dependencies>
+    <artifactId>4dkankan-center-app</artifactId>
 
+    <dependencies>
 
         <dependency>
             <groupId>com.fdkankan</groupId>
-            <artifactId>4dkankan-utils-fyun</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
+            <artifactId>4dkankan-common-utils</artifactId>
+            <version>ZJ-2.0.0-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>com.fdkankan</groupId>
             <artifactId>4dkankan-utils-redis</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fdkankan</groupId>
-            <artifactId>4dkankan-utils-mongodb</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
+            <version>ZJ-2.0.0-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>com.fdkankan</groupId>
             <artifactId>4dkankan-utils-db</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
+            <version>ZJ-2.0.0-SNAPSHOT</version>
         </dependency>
-
         <dependency>
             <groupId>com.fdkankan</groupId>
             <artifactId>4dkankan-utils-sms</artifactId>
@@ -52,60 +39,56 @@
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
         </dependency>
+
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-aop</artifactId>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>com.alibaba.cloud</groupId>
-            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
-            <version>2.2.7.RELEASE</version>
+            <groupId>com.yomahub</groupId>
+            <artifactId>tlog-web-spring-boot-starter</artifactId>
+            <version>1.3.6</version>
         </dependency>
 
         <dependency>
-            <groupId>com.alibaba.cloud</groupId>
-            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
-            <version>2.2.7.RELEASE</version>
+            <groupId>com.yomahub</groupId>
+            <artifactId>tlog-feign-spring-boot-starter</artifactId>
+            <version>1.3.6</version>
         </dependency>
 
+        <!--        htt请求工具-->
         <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>1.2.83</version>
+            <groupId>com.dtflys.forest</groupId>
+            <artifactId>forest-spring-boot-starter</artifactId>
+            <version>1.5.19</version>
         </dependency>
 
-
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
+            <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-
-
-        <!--htt请求工具-->
         <dependency>
-            <groupId>com.dtflys.forest</groupId>
-            <artifactId>forest-spring-boot-starter</artifactId>
-            <version>1.5.24</version>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
-
-        <!--    分布式日志追踪-->
         <dependency>
-            <groupId>com.yomahub</groupId>
-            <artifactId>tlog-web-spring-boot-starter</artifactId>
-            <version>1.3.6</version>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+            <version>2.2.7.RELEASE</version>
         </dependency>
 
         <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>easyexcel</artifactId>
-            <version>3.1.0</version>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+            <version>2.2.7.RELEASE</version>
         </dependency>
 
 
+
     </dependencies>
 
     <build>
@@ -122,15 +105,8 @@
                     <testFailureIgnore>true</testFailureIgnore>
                 </configuration>
             </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>8</source>
-                    <target>8</target>
-                </configuration>
-            </plugin>
         </plugins>
 
     </build>
+
 </project>

+ 3 - 0
src/main/java/com/fdkankan/app/common/RedisKeyUtil.java

@@ -6,4 +6,7 @@ public class RedisKeyUtil {
     public static final String PREFIX_MSG_AUTH_CODE = "msg:auth:code:";
 
     public static final String PREFIX_CACHE_CAMERA = "camera:";
+    public static final String SCENE_UNUSED_NUMS = "4dkankan:scene:nums";
+    public static final String SCENE_NUMS_LOADING = "4dkankan:scene:nums:loading";
+    public static final String SCENE_VIEW_COUNT = "4dkankan:scene:nums:view_count:";
 }

+ 97 - 0
src/main/java/com/fdkankan/app/constant/CameraConstant.java

@@ -0,0 +1,97 @@
+package com.fdkankan.app.constant;
+
+// 6001-7000 相机状态码
+public class CameraConstant {
+
+    public static final String IMPORT_ERROR_NUM = "第{n}行存在错误,";
+
+    public static final int FAILURE_CODE_6001 = 6001;
+    public static final String FAILURE_MSG_6001 = "sn码重复";
+
+    public static final int FAILURE_CODE_6002 = 6002;
+    public static final String FAILURE_MSG_6002 = "退充值超过了充值总额";
+
+    public static final int FAILURE_CODE_6003 = 6003;
+    public static final String FAILURE_MSG_6003 = "该相机未被绑定,请前往 我的相机 先绑定相机后再进行授权 ";
+
+    public static final int FAILURE_CODE_6004 = 6004;
+    public static final String FAILURE_MSG_6004 = "表示相机的点数超过了10万";
+
+    public static final int FAILURE_CODE_6005 = 6005;
+    public static final String FAILURE_MSG_6005 = "无权操作该相机";
+
+    public static final int FAILURE_CODE_6006 = 6006;
+    public static final String FAILURE_MSG_6006 = "不支持重复绑定";
+
+    public static final int FAILURE_CODE_6007 = 6007;
+    public static final String FAILURE_MSG_6007 = "八目相机不支持解除绑定";
+
+    public static final int FAILURE_CODE_6008 = 6008;
+    public static final String FAILURE_MSG_6008 = "相机容量不足";
+
+    public static final int FAILURE_CODE_6009 = 6009;
+    public static final String FAILURE_MSG_6009 = "data.fdage文件不存在";
+
+    public static final int FAILURE_CODE_6010 = 6010;
+    public static final String FAILURE_MSG_6010 = "该序列号已被绑定";
+
+    public static final int FAILURE_CODE_6011 = 6011;
+    public static final String FAILURE_MSG_6011 = "查询不到企业相机列表";
+
+    public static final int FAILURE_CODE_6012 = 6012;
+    public static final String FAILURE_MSG_6012 = "相机未绑定用户";
+
+    public static final int FAILURE_CODE_6013 = 6013;
+    public static final String FAILURE_MSG_6013 = "必须输入需迁相机所绑定用户的验证码";
+
+    public static final int FAILURE_CODE_6014 = 6014;
+    public static final String FAILURE_MSG_6014 = "必须输入目标相机所绑定用户的验证码";
+
+    public static final int FAILURE_CODE_6015 = 6015;
+    public static final String FAILURE_MSG_6015 = "该相机已添加协作者,请先取消协作后再添加";
+
+    public static final int FAILURE_CODE_6016 = 6016;
+    public static final String FAILURE_MSG_6016 = "部分相机已添加协作者,请先取消协作后再添加";
+
+    public static final int FAILURE_CODE_6017 = 6017;
+    public static final String FAILURE_MSG_6017 = "设备已出库,不可删除";
+
+    public static final int FAILURE_CODE_6018 = 6018;
+    public static final String FAILURE_MSG_6018 = "设备类型不存在";
+
+    public static final int FAILURE_CODE_6019 = 6019;
+    public static final String FAILURE_MSG_6019 = "sn码未填写";
+
+    public static final int FAILURE_CODE_6020 = 6020;
+    public static final String FAILURE_MSG_6020 = "sn码不存在";
+
+    public static final int FAILURE_CODE_6021 = 6021;
+    public static final String FAILURE_MSG_6021 = "出库类型未填写";
+
+    public static final int FAILURE_CODE_6022 = 6022;
+    public static final String FAILURE_MSG_6022 = "出库类型不存在";
+
+    public static final int FAILURE_CODE_6023 = 6023;
+    public static final String FAILURE_MSG_6023 = "经销商未填写";
+
+    public static final int FAILURE_CODE_6024 = 6024;
+    public static final String FAILURE_MSG_6024 = "经销商类型不存在";
+
+    public static final int FAILURE_CODE_6025 = 6025;
+    public static final String FAILURE_MSG_6025 = "sn码未出库";
+
+    public static final int FAILURE_CODE_6026 = 6026;
+    public static final String FAILURE_MSG_6026 = "客户名称未填写";
+
+    public static final int FAILURE_CODE_6027 = 6027;
+    public static final String FAILURE_MSG_6027 = "客户名称不存在";
+
+    public static final int FAILURE_CODE_6028 = 6028;
+    public static final String FAILURE_MSG_6028 = "相机类型不正确!";
+
+    public static final int FAILURE_CODE_6029 = 6029;
+    public static final String FAILURE_MSG_6029 = "相机不存在!";
+
+    public static final int FAILURE_CODE_6030 = 6030;
+    public static final String FAILURE_MSG_6030 = "绑定相机类型有误,请先切换相机类型后再绑定";
+}

+ 3 - 0
src/main/java/com/fdkankan/app/constant/LoginConstant.java

@@ -112,4 +112,7 @@ public class LoginConstant {
     public static final int FAILURE_CODE_3034 = 3034;
     public static final String FAILURE_MSG_3034 = "服务器繁忙,请重试!";
 
+    public static final int FAILURE_CODE_3035 = 3035;
+    public static final String FAILURE_MSG_3035 = "登录二维码已失效,请重新获取";
+
 }

+ 54 - 0
src/main/java/com/fdkankan/app/controller/AppSceneController.java

@@ -0,0 +1,54 @@
+package com.fdkankan.app.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.app.common.Result;
+import com.fdkankan.app.service.ISceneProService;
+import com.fdkankan.app.vo.request.SceneParam;
+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/app/scene")
+public class AppSceneController {
+
+    @Autowired
+    ISceneProService sceneProService;
+
+    @PostMapping("/getAppAllSceneByPage")
+    public Result getAppAllSceneByPage(@RequestBody SceneParam param){
+        return Result.success( sceneProService.pageList(param));
+    }
+
+    @PostMapping("/getSceneStatusByUnicode")
+    public Result getSceneStatusByUnicode(@RequestBody JSONObject param){
+        String appUserName = param.get("appUserName") == null ? null : param.getString("appUserName");
+        String appPassword = param.get("appPassword") == null ? null : param.getString("appPassword");
+        String unicode = param.get("unicode") == null ? null : param.getString("unicode");
+        return Result.success(sceneProService.getSceneStatusByUnicode(appUserName,appPassword,unicode));
+    }
+
+    /**
+     * 通知服务器音频上传成功
+     */
+    @PostMapping("/getScreencapVoice")
+    public Result getScreencapVoice(@RequestBody JSONObject param) throws Exception {
+        String screencapMusic = param.get("screencapMusic") == null ? null : param.getString("screencapMusic");
+        String originalFileName = param.get("originalFileName") == null ? null : param.getString("originalFileName");
+        String sceneNum = param.get("sceneNum") == null ? null : param.getString("sceneNum");
+        sceneProService.getScreencapVoice(screencapMusic,originalFileName,sceneNum);
+        return Result.success();
+    }
+    /**
+     * 通知服务器音频上传成功
+     */
+    @PostMapping("/deleteForCameraName")
+    public Result deleteForCameraName(@RequestBody JSONObject param){
+        Long cameraId = param.get("cameraId") == null ? null : param.getLong("cameraId");
+        String sceneNum = param.get("sceneNum") == null ? null : param.getString("sceneNum");
+        sceneProService.deleteForCameraName(cameraId,sceneNum);
+        return Result.success();
+    }
+}

+ 56 - 0
src/main/java/com/fdkankan/app/controller/CameraController.java

@@ -0,0 +1,56 @@
+package com.fdkankan.app.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.app.common.Result;
+import com.fdkankan.app.service.ICameraService;
+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/app/camera")
+public class CameraController {
+
+    @Autowired
+    private ICameraService cameraService;
+
+    @PostMapping("/getCamerasForUser")
+    public Result getCamerasForUser(@RequestBody JSONObject param ){
+        String userName = param.get("userName") == null ? null : param.getString("userName");
+        Integer cameraType = param.get("cameraType") == null ? null : param.getInteger("cameraType");
+
+        return Result.success(cameraService.getCameraForUser(userName,cameraType));
+    }
+
+    /**
+     * 绑定相机
+     */
+    @PostMapping("/bindCamera")
+    public Result bindCamera(@RequestBody JSONObject param ){
+        String userName = param.get("userName") == null ? null : param.getString("userName");
+        String snCode = param.get("snCode") == null ? null : param.getString("snCode");
+
+        return Result.success(cameraService.bindCamera(userName,snCode));
+    }
+    /**
+     * 解绑相机
+     */
+    @PostMapping("/unbind")
+    public Result unbind(@RequestBody JSONObject param ){
+        String userName = param.get("userName") == null ? null : param.getString("userName");
+        String childName = param.get("childName") == null ? null : param.getString("childName");
+        cameraService.unbindCamera(userName,childName);
+        return Result.success();
+    }
+    /**
+     * 获取相机信息
+     */
+    @PostMapping("/getCameraInfo")
+    public Result getCameraInfo(@RequestBody JSONObject param ){
+        String childName = param.get("childName") == null ? null : param.getString("childName");
+        String childPassword = param.get("childPassword") == null ? null : param.getString("childPassword");
+        return Result.success(cameraService.getCameraInfo(childName,childPassword));
+    }
+}

+ 21 - 0
src/main/java/com/fdkankan/app/controller/GoodsController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.app.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 商品主表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@RestController
+@RequestMapping("/app/goods")
+public class GoodsController {
+
+}
+

+ 77 - 8
src/main/java/com/fdkankan/app/controller/LoginController.java

@@ -1,23 +1,19 @@
 package com.fdkankan.app.controller;
 
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.app.common.Result;
 import com.fdkankan.app.service.impl.LoginService;
+import com.fdkankan.app.vo.request.AppLoginParam;
 import com.fdkankan.app.vo.request.LoginParam;
+import com.fdkankan.app.vo.request.RegisterParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-
-/**
- * 登录
- */
 @RestController
 @RequestMapping("/api/sso/app")
 public class LoginController {
 
     @Autowired
-    LoginService loginService;
+    private LoginService loginService;
 
     /**
      * 登录
@@ -25,9 +21,82 @@ public class LoginController {
      * password 密码
      */
     @PostMapping("/userLogin")
-    public Result login(@RequestBody LoginParam param){
+    public Result userLogin(@RequestBody LoginParam param){
         return Result.success(loginService.login(param));
     }
 
+    /**
+     * app扫码登录
+     * appUserName  相机设备嘛
+     * appPassword  相机密码
+     * uuid
+     */
+    @PostMapping("/login")
+    public Result login(@RequestBody AppLoginParam param){
+        loginService.appLogin(param);
+        return Result.success();
+    }
+    /**
+     * app登录
+     * appUserName  相机设备嘛
+     * appPassword  相机密码
+     */
+    @PostMapping("/login2")
+    public Result login2(@RequestBody AppLoginParam param){
+        return Result.success(loginService.login2(param));
+    }
+
+    @PostMapping("/quickLogin")
+    public Result quickLogin(@RequestBody LoginParam param){
+        return  Result.success(loginService.quickLogin(param));
+    }
+
+    /**
+     * 注册
+     * @param param
+     * @return
+     */
+    @PostMapping("/register")
+    public Result register(RegisterParam param){
+        param.setConfirmPwd(param.getPassword());
+        loginService.register(param);
+        return Result.success();
+    }
+
+    /**
+     * 登出
+     */
+    @RequestMapping(value = "/logout", method = RequestMethod.POST)
+    public Result logout(@RequestHeader String token) {
+        loginService.logout(token);
+        return Result.success();
+    }
+
+    /**
+     * app 获取随机昵称
+     */
+    @PostMapping("/getNickName")
+    public Result getNickName(){
+        return Result.success(loginService.getNickName());
+    }
+
+    /**
+     * 检测手机号码是否注册
+     */
+    @PostMapping("/checkUserName")
+    public Result checkUserName(@RequestBody AppLoginParam param){
+        loginService.checkUser(param.getAppUserName(),false);
+        return Result.success();
+    }
+
+    /**
+     * 重置密码
+     */
+    @PostMapping("/resetPassword")
+    public Result resetPassword(@RequestBody RegisterParam param){
+        param.setConfirmPwd(param.getPassword());
+        loginService.changePassword(param);
+        return Result.success();
+    }
 }
 

+ 22 - 0
src/main/java/com/fdkankan/app/controller/SceneController.java

@@ -0,0 +1,22 @@
+package com.fdkankan.app.controller;
+
+import com.fdkankan.app.common.Result;
+import com.fdkankan.app.service.ISceneProService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/scene")
+public class SceneController {
+
+    @Autowired
+    ISceneProService sceneProService;
+
+    @GetMapping("/getInfo")
+    public Result getAppAllSceneByPage(@RequestParam(required = false) String num){
+        return Result.success( sceneProService.getInfo(num) );
+    }
+}

+ 28 - 0
src/main/java/com/fdkankan/app/controller/SsoUserController.java

@@ -0,0 +1,28 @@
+package com.fdkankan.app.controller;
+
+import com.fdkankan.app.common.Result;
+import com.fdkankan.app.service.impl.LoginService;
+import com.fdkankan.app.vo.request.LoginParam;
+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/sso/user")
+public class SsoUserController {
+
+    @Autowired
+    LoginService loginService;
+    /**
+     *  获取验证码
+     *  areaNum  区号
+     *  phoneNum 手机号码
+     */
+    @PostMapping("/getMsgAuthCode")
+    public Result getMsgAuthCode(@RequestBody LoginParam param) throws Exception {
+        loginService.getMsgAuthCode(param.getAreaNum(),param.getPhoneNum());
+        return Result.success();
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/app/controller/TestController.java

@@ -0,0 +1,20 @@
+package com.fdkankan.app.controller;
+
+import com.fdkankan.app.common.Result;
+import com.fdkankan.app.service.ISceneProService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class TestController {
+
+    @Autowired
+    ISceneProService sceneProService;
+
+    @GetMapping("/test")
+    public Result test(@RequestParam(required = false) String num){
+        return Result.success( );
+    }
+}

+ 54 - 0
src/main/java/com/fdkankan/app/controller/UserController.java

@@ -0,0 +1,54 @@
+package com.fdkankan.app.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.app.common.Result;
+import com.fdkankan.app.service.IUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/app/user")
+public class UserController {
+
+    @Autowired
+    IUserService userService;
+
+    /**
+     * 获取用户信息
+     * phoneNum     用户名
+     * cameraType   相机类型
+     */
+    @PostMapping("/getUserInfo")
+    public Result getUserInfo(@RequestBody JSONObject param){
+        String phoneNum = param.get("phoneNum") == null ? null : param.getString("phoneNum");
+        Integer cameraType = param.get("cameraType") == null ? null : param.getInteger("cameraType");
+        return Result.success( userService.getUserInfo(phoneNum,cameraType));
+    }
+
+    /**
+     * 修改昵称
+     * phoneNum  用户名
+     * nickName  昵称
+     */
+    @PostMapping("/updateNickName")
+    public Result updateNickName(@RequestBody JSONObject param){
+        String phoneNum = param.get("phoneNum") == null ? null : param.getString("phoneNum");
+        String nickName = param.get("nickName") == null ? null : param.getString("nickName");
+        userService.updateNickName(phoneNum,nickName);
+        return Result.success(nickName );
+    }
+    /**
+     * 修改用户头像
+     * phoneNum  用户名
+     * head      头像
+     */
+    @PostMapping("/uploadHead")
+    public Result uploadHead(@RequestBody JSONObject param){
+        String phoneNum = param.get("phoneNum") == null ? null : param.getString("phoneNum");
+        String head = param.get("head") == null ? null : param.getString("head");
+        userService.uploadHead(phoneNum,head);
+        return Result.success();
+    }
+
+}

+ 5 - 8
src/main/java/com/fdkankan/app/entity/Camera.java

@@ -1,22 +1,19 @@
 package com.fdkankan.app.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 com.baomidou.mybatisplus.annotation.*;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+import java.util.Date;
+
 /**
  * <p>
  * 相机主表
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Getter
 @Setter

+ 5 - 8
src/main/java/com/fdkankan/app/entity/CameraDetail.java

@@ -1,22 +1,19 @@
 package com.fdkankan.app.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 com.baomidou.mybatisplus.annotation.*;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+import java.util.Date;
+
 /**
  * <p>
  * 相机子表
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Getter
 @Setter

+ 139 - 0
src/main/java/com/fdkankan/app/entity/ExpansionOrder.java

@@ -0,0 +1,139 @@
+package com.fdkankan.app.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 扩容订单表(八目相机)
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Getter
+@Setter
+@TableName("t_expansion_order")
+public class ExpansionOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 订单号
+     */
+    @TableField("order_sn")
+    private String orderSn;
+
+    /**
+     * 金额
+     */
+    @TableField("amount")
+    private BigDecimal amount;
+
+    /**
+     * 支付宝的交易号或者微信支付订单号
+     */
+    @TableField("number")
+    private String number;
+
+    /**
+     * 付款方式,0表示微信,1表示支付宝,2表示paypal,3表示其他
+     */
+    @TableField("pay_type")
+    private Integer payType;
+
+    /**
+     * 状态,0或-1表示未付款,-2表示已退款,1表示已付款
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 状态,1表示充值,0表示系统赠送,2表示升级套餐
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 交易时间
+     */
+    @TableField("trade_time")
+    private Date tradeTime;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 期限,月为单位
+     */
+    @TableField("month")
+    private Integer month;
+
+    /**
+     * 期限,年为单位
+     */
+    @TableField("years")
+    private Integer years;
+
+    /**
+     * 延期,天为单位
+     */
+    @TableField("delay")
+    private Integer delay;
+
+    /**
+     * 容量大小
+     */
+    @TableField("unit_size")
+    private Integer unitSize;
+
+    /**
+     * 容量单位,"GB", "TB", "PB"
+     */
+    @TableField("unit")
+    private String unit;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 0表示国内订单,1表示国外订单
+     */
+    @TableField("abroad")
+    private Integer abroad;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private String createTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 112 - 0
src/main/java/com/fdkankan/app/entity/Goods.java

@@ -0,0 +1,112 @@
+package com.fdkankan.app.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.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 商品主表
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Getter
+@Setter
+@TableName("t_goods")
+public class Goods implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 商品名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 商品描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 商品编号
+     */
+    @TableField("goods_sn")
+    private String goodsSn;
+
+    /**
+     * 商品状态,上架下架
+     */
+    @TableField("goods_status")
+    private String goodsStatus;
+
+    /**
+     * 商品图片
+     */
+    @TableField("image_url")
+    private String imageUrl;
+
+    /**
+     * 商品图片2
+     */
+    @TableField("pic")
+    private String pic;
+
+    /**
+     * 快递价格
+     */
+    @TableField("express_price")
+    private BigDecimal expressPrice;
+
+    /**
+     * 排序
+     */
+    @TableField("sort")
+    private Integer sort;
+
+    /**
+     * 价格
+     */
+    @TableField("goods_price")
+    private BigDecimal goodsPrice;
+
+    /**
+     * 价格(美元)
+     */
+    @TableField("goods_dollar_price")
+    private BigDecimal goodsDollarPrice;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 115 - 0
src/main/java/com/fdkankan/app/entity/IncrementOrder.java

@@ -0,0 +1,115 @@
+package com.fdkankan.app.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 增值权益订单表
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Getter
+@Setter
+@TableName("t_increment_order")
+public class IncrementOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 订单号
+     */
+    @TableField("order_sn")
+    private String orderSn;
+
+    /**
+     * 金额
+     */
+    @TableField("amount")
+    private BigDecimal amount;
+
+    /**
+     * 支付宝的交易号或者微信支付订单号
+     */
+    @TableField("number")
+    private String number;
+
+    /**
+     * 付款方式,0表示微信,1表示支付宝,2表示paypal,3表示其他
+     */
+    @TableField("pay_type")
+    private Integer payType;
+
+    /**
+     * 状态,0或-1表示未付款,-2表示已退款,1表示已付款
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 状态,1表示新增值权益,2表示续费增值权益  3表示增值权益1月
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 交易时间
+     */
+    @TableField("trade_time")
+    private Date tradeTime;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 增值权益表t_user_increment的id,status为2时才有
+     */
+    @TableField("increment_id")
+    private Long incrementId;
+
+    /**
+     * 购买数量
+     */
+    @TableField("count")
+    private Integer count;
+
+    /**
+     * 0表示国内订单,1表示国外订单
+     */
+    @TableField("abroad")
+    private Integer abroad;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private String createTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 54 - 0
src/main/java/com/fdkankan/app/entity/SceneCooperation.java

@@ -0,0 +1,54 @@
+package com.fdkankan.app.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-19
+ */
+@Getter
+@Setter
+@TableName("t_scene_cooperation")
+public class SceneCooperation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("scene_num")
+    private String sceneNum;
+
+    /**
+     * 协作的用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 173 - 0
src/main/java/com/fdkankan/app/entity/SceneEditInfo.java

@@ -0,0 +1,173 @@
+package com.fdkankan.app.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Getter
+@Setter
+@TableName("t_scene_edit_info")
+public class SceneEditInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("scene_pro_id")
+    private Long sceneProId;
+
+    @TableField("scene_plus_id")
+    private Long scenePlusId;
+
+    /**
+     * 地面logo名称
+     */
+    @TableField("floor_logo")
+    private String floorLogo;
+
+    /**
+     * 地面logo大小
+     */
+    @TableField("floor_logo_size")
+    private Integer floorLogoSize;
+
+    /**
+     * 地面logo文件名称
+     */
+    @TableField("floor_logo_file")
+    private String floorLogoFile;
+
+    /**
+     * 背景音乐名称
+     */
+    @TableField("music")
+    private String music;
+
+    /**
+     * 背景音乐文件名称
+     */
+    @TableField("music_file")
+    private String musicFile;
+
+    /**
+     * 浏览密码
+     */
+    @TableField("scene_password")
+    private String scenePassword;
+
+    /**
+     * 场景标题
+     */
+    @TableField("title")
+    private String title;
+
+    /**
+     * 场景描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 用户是否上传户型图(0-否,1-是)
+     */
+    @TableField("floor_plan_user")
+    private Integer floorPlanUser;
+
+    /**
+     * 是否有热点数据(0-否,1-是)
+     */
+    @TableField("tags")
+    private Integer tags;
+
+    /**
+     * 版本
+     */
+    @TableField("version")
+    private Integer version;
+
+    /**
+     * 是否上传模型
+     */
+    @TableField("is_upload_obj")
+    private Integer isUploadObj;
+
+    /**
+     * 重新建模的版本
+     */
+    @TableField("floor_edit_ver")
+    private Integer floorEditVer;
+
+    /**
+     * 正式发布重新建模的版本
+     */
+    @TableField("floor_publish_ver")
+    private Integer floorPublishVer;
+
+    /**
+     * 空间视频数据
+     */
+    @TableField("box_videos")
+    private String boxVideos;
+
+    /**
+     * 空间贴图数据
+     */
+    @TableField("box_photos")
+    private String boxPhotos;
+
+    /**
+     * 是否需要处理球幕视频
+     */
+    @TableField("build_video_status")
+    private Integer buildVideoStatus;
+
+    /**
+     * 初始点信息
+     */
+    @TableField("entry")
+    private String entry;
+
+    /**
+     * 加载logo名
+     */
+    @TableField("loading_logo")
+    private String loadingLogo;
+
+    /**
+     * 加载logo文件名
+     */
+    @TableField("loading_logo_file")
+    private String loadingLogoFile;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private String createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField("update_time")
+    private String updateTime;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 6 - 10
src/main/java/com/fdkankan/app/entity/ScenePlus.java

@@ -1,19 +1,18 @@
 package com.fdkankan.app.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
-
-import java.io.Serializable;
-
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+
 /**
  * <p>
  * 场景主表
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Getter
 @Setter
@@ -103,12 +102,9 @@ public class ScenePlus implements Serializable {
     @TableField("update_time")
     private String updateTime;
 
-    /**
-     * 0-有效,1-删除, 2-禁用
-     */
-    @TableField("tb_status")
-    @TableLogic(value = "0",delval = "1")
-    private Integer tbStatus;
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
 
 
 }

+ 13 - 11
src/main/java/com/fdkankan/app/entity/ScenePlusExt.java

@@ -1,19 +1,18 @@
 package com.fdkankan.app.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
-
-import java.io.Serializable;
-
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+
 /**
  * <p>
  * 
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-19
  */
 @Getter
 @Setter
@@ -104,7 +103,7 @@ public class ScenePlusExt implements Serializable {
     private String buildType;
 
     /**
-     * 全景图加载方式,tiles/1k:1k瓦片图,tiles/2:2k瓦片图,tiles/4k:4k瓦片图,pan:全景图 ,local:本地切片,cube:立体图
+     * 分辨率(2k,4k)
      */
     @TableField("scene_resolution")
     private String sceneResolution;
@@ -116,6 +115,12 @@ public class ScenePlusExt implements Serializable {
     private String sceneFrom;
 
     /**
+     * 切图方式(tiles:瓦片图,face:切片图,pan:全景图 ,local:本地切片,cube:立体图)
+     */
+    @TableField("scene_kind")
+    private String sceneKind;
+
+    /**
      * 点位视频
      */
     @TableField("videos")
@@ -139,12 +144,9 @@ public class ScenePlusExt implements Serializable {
     @TableField("update_time")
     private String updateTime;
 
-    /**
-     * 0-有效,1-删除, 2-禁用
-     */
-    @TableField("tb_status")
-    @TableLogic(value = "0",delval = "1")
-    private Integer tbStatus;
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
 
 
 }

+ 4 - 8
src/main/java/com/fdkankan/app/entity/ScenePro.java

@@ -1,22 +1,18 @@
 package com.fdkankan.app.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 com.baomidou.mybatisplus.annotation.*;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+
 /**
  * <p>
  * pro场景表
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Getter
 @Setter

+ 281 - 0
src/main/java/com/fdkankan/app/entity/SceneProEdit.java

@@ -0,0 +1,281 @@
+package com.fdkankan.app.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * pro场景编辑数据表
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Getter
+@Setter
+@TableName("t_scene_pro_edit")
+public class SceneProEdit implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * pro场景id
+     */
+    @TableField("pro_id")
+    private Long proId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private String createTime;
+
+    /**
+     * 大场景的密钥
+     */
+    @TableField("scene_key")
+    private String sceneKey;
+
+    /**
+     * 展示页面密码,0不需要,1需要
+     */
+    @TableField("need_key")
+    private Integer needKey;
+
+    /**
+     * 版本
+     */
+    @TableField("version")
+    private Integer version;
+
+    /**
+     * 表示缩略图是否存在
+     */
+    @TableField("thumb_status")
+    private Integer thumbStatus;
+
+    /**
+     * 地面点位标志
+     */
+    @TableField("marker_logo")
+    private String markerLogo;
+
+    /**
+     * 0表示默认,1表示自己上传
+     */
+    @TableField("floor_logo")
+    private String floorLogo;
+
+    /**
+     * 标记大小
+     */
+    @TableField("floor_logo_size")
+    private Integer floorLogoSize;
+
+    /**
+     * 要上传的热点的id集合,用逗号隔开
+     */
+    @TableField("hots_ids")
+    private String hotsIds;
+
+    /**
+     * 表示初始点信息
+     */
+    @TableField("entry")
+    private String entry;
+
+    /**
+     * 背景音乐名称
+     */
+    @TableField("bg_music")
+    private String bgMusic;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private String updateTime;
+
+    /**
+     * 普通录屏文件地址
+     */
+    @TableField("screencap_voice_src")
+    private String screencapVoiceSrc;
+
+    /**
+     * 录音文件地址
+     */
+    @TableField("screencap_voice_sound")
+    private String screencapVoiceSound;
+
+    /**
+     * 同步录音地址
+     */
+    @TableField("screencap_voice_soundsync")
+    private String screencapVoiceSoundsync;
+
+    /**
+     * 选择的类型,sound为screencapVoiceSound,file为screencapVoiceSrc,soundsync为screencap_voice_soundsync
+     */
+    @TableField("screencap_voice_type")
+    private String screencapVoiceType;
+
+    /**
+     * 录屏文件地址
+     */
+    @TableField("play_data")
+    private String playData;
+
+    /**
+     * 重新建模的版本
+     */
+    @TableField("floor_edit_ver")
+    private Integer floorEditVer;
+
+    /**
+     * 正式发布重新建模的版本
+     */
+    @TableField("floor_publish_ver")
+    private Integer floorPublishVer;
+
+    /**
+     * 录屏图片存放文件
+     */
+    @TableField("screencap_thumb")
+    private String screencapThumb;
+
+    /**
+     * 分享的logo和生成二维码的logo
+     */
+    @TableField("share_logo")
+    private String shareLogo;
+
+    /**
+     * 小地图浏览
+     */
+    @TableField("map_visi")
+    private Integer mapVisi;
+
+    /**
+     * 自动导览
+     */
+    @TableField("tour_visi")
+    private Integer tourVisi;
+
+    /**
+     * vr模式
+     */
+    @TableField("vr_visi")
+    private Integer vrVisi;
+
+    /**
+     * 展示页面是否显示标尺
+     */
+    @TableField("ruler_visi")
+    private Integer rulerVisi;
+
+    /**
+     * 展示页面cad图在平面图是否显示
+     */
+    @TableField("cad_img_visi")
+    private Integer cadImgVisi;
+
+    /**
+     * cad平面图
+     */
+    @TableField("floor_plan_png")
+    private String floorPlanPng;
+
+    /**
+     * cad平面图参数
+     */
+    @TableField("cad_info")
+    private String cadInfo;
+
+    @TableField("pano_visi")
+    private Integer panoVisi;
+
+    @TableField("m2d_visi")
+    private Integer m2dVisi;
+
+    @TableField("m3d_visi")
+    private Integer m3dVisi;
+
+    @TableField("measure_visi")
+    private Integer measureVisi;
+
+    /**
+     * 肖安需求,场景于场景之间的关联
+     */
+    @TableField("link_scene")
+    private String linkScene;
+
+    @TableField("overlay")
+    private String overlay;
+
+    /**
+     * 是否显示底部logo,1显示,0不显示
+     */
+    @TableField("show_logo_bottom")
+    private Boolean showLogoBottom;
+
+    /**
+     * 全景图版本号
+     */
+    @TableField("images_version")
+    private Integer imagesVersion;
+
+    /**
+     * 上传的背景音乐
+     */
+    @TableField("bg_music_name")
+    private String bgMusicName;
+
+    @TableField("jump_scene")
+    private Boolean jumpScene;
+
+    /**
+     * 旋转角度
+     */
+    @TableField("floor_plan_angle")
+    private String floorPlanAngle;
+
+    /**
+     * 场景下载次数
+     */
+    @TableField("download_num")
+    private Integer downloadNum;
+
+    /**
+     * 绿幕抠图json数据
+     */
+    @TableField("videos_user")
+    private String videosUser;
+
+    /**
+     * 大场景序号(随心装场景码)
+     */
+    @TableField("vr_num")
+    private String vrNum;
+
+    /**
+     * 随心装封面图
+     */
+    @TableField("vr_thumb")
+    private String vrThumb;
+
+
+}

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

@@ -0,0 +1,54 @@
+package com.fdkankan.app.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-19
+ */
+@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 Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 6 - 9
src/main/java/com/fdkankan/app/entity/User.java

@@ -1,22 +1,19 @@
 package com.fdkankan.app.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 com.baomidou.mybatisplus.annotation.*;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+import java.util.Date;
+
 /**
  * <p>
  * 用户信息表
  * </p>
  *
  * @author 
- * @since 2022-07-01
+ * @since 2022-07-15
  */
 @Getter
 @Setter
@@ -50,7 +47,7 @@ public class User implements Serializable {
      * 注册时间
      */
     @TableField("register_time")
-    private String registerTime;
+    private Date registerTime;
 
     /**
      * 用户名

+ 99 - 0
src/main/java/com/fdkankan/app/entity/UserIncrement.java

@@ -0,0 +1,99 @@
+package com.fdkankan.app.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户增值权益表
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Getter
+@Setter
+@TableName("t_user_increment")
+public class UserIncrement implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 权益包标识
+     */
+    @TableField("key_word")
+    private String keyWord;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 会员权益类型Id
+     */
+    @TableField("increment_type_id")
+    private Integer incrementTypeId;
+
+    /**
+     * 结束时间
+     */
+    @TableField("increment_end_time")
+    private Date incrementEndTime;
+
+    /**
+     * 是否过期(1过期,0未过期)
+     */
+    @TableField("is_expired")
+    private Integer isExpired;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private String createTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private String updateTime;
+
+    /**
+     * 扩容订单集合
+     */
+    @TableField("order_sn")
+    private String orderSn;
+
+    /**
+     * 生效时间
+     */
+    @TableField("increment_start_time")
+    private Date incrementStartTime;
+
+    @TableField("download_num")
+    private Integer downloadNum;
+
+
+}

+ 3 - 20
src/main/java/com/fdkankan/app/generate/AutoGenerate.java

@@ -17,27 +17,10 @@ public class AutoGenerate {
 
         String path =System.getProperty("user.dir") ;
 
-        generate(path,"user", getTables(new String[]{
-                "t_folder"
+        generate(path,"app", getTables(new String[]{
+                "t_goods",
         }));
 
-//        generate(path,"goods", getTables(new String[]{
-//                        "t_camera","t_camera_detail","t_camera_out","t_camera_space","t_camera_version",
-//                        "t_company","t_goods","t_goods_sku","t_cart","t_goods_spec",
-//                        "t_goods_spec_value","t_goods_spu_spec","t_sn_code"
-//        }));
-//
-//        generate(path,"order", getTables(new String[]{
-//                        "t_increment_order","t_invoice","t_order","t_order_item",
-//                        "t_pre_sale","t_space_sdk","t_trade_log","t_commerce_order","t_download_order","t_expansion_order"
-//        }));
-//        generate(path,"order", getTables(new String[]{
-//                        "t_virtual_order"
-//        }));
-//
-//        generate(path,"user", getTables(new String[]{
-//                        "t_user","t_user_increment","t_manager","t_province","t_increment_type","t_intercom_message","t_receiver_info"
-//        }));
     }
 
     public static List<String> getTables(String [] tableNames){
@@ -80,7 +63,7 @@ public class AutoGenerate {
                             .enableLombok()
                             .logicDeleteColumnName("rec_status")
                             .enableTableFieldAnnotation()
-                            //.superClass(BaseEntity.class)
+//                            .superClass(BaseEntity.class)
 
                             .controllerBuilder()
                             .formatFileName("%sController")

+ 6 - 1
src/main/java/com/fdkankan/app/mapper/ICameraDetailMapper.java

@@ -2,7 +2,11 @@ package com.fdkankan.app.mapper;
 
 import com.fdkankan.app.entity.CameraDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.app.vo.response.CameraAppVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -10,9 +14,10 @@ import org.apache.ibatis.annotations.Mapper;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Mapper
 public interface ICameraDetailMapper extends BaseMapper<CameraDetail> {
 
+    List<CameraAppVo> getListByUserAndType(@Param("userId") Long userId, @Param("cameraType") Integer cameraType);
 }

+ 7 - 2
src/main/java/com/fdkankan/app/mapper/ICameraMapper.java

@@ -1,9 +1,12 @@
 package com.fdkankan.app.mapper;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.app.entity.Camera;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.app.vo.response.CameraAppVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -11,8 +14,10 @@ import org.apache.ibatis.annotations.Mapper;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Mapper
 public interface ICameraMapper extends BaseMapper<Camera> {
+
+    List<CameraAppVo> getCameraInfo(@Param("childName") String childName, @Param("childPassword") String childPassword);
 }

+ 20 - 0
src/main/java/com/fdkankan/app/mapper/IExpansionOrderMapper.java

@@ -0,0 +1,20 @@
+package com.fdkankan.app.mapper;
+
+import com.fdkankan.app.entity.ExpansionOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 扩容订单表(八目相机) Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Mapper
+public interface IExpansionOrderMapper extends BaseMapper<ExpansionOrder> {
+
+    Long getCount(@Param("userId") Long userId, @Param("cameraType") Integer cameraType);
+}

+ 18 - 0
src/main/java/com/fdkankan/app/mapper/IGoodsMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.app.mapper;
+
+import com.fdkankan.app.entity.Goods;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 商品主表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Mapper
+public interface IGoodsMapper extends BaseMapper<Goods> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/app/mapper/IIncrementOrderMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.app.mapper;
+
+import com.fdkankan.app.entity.IncrementOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 增值权益订单表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Mapper
+public interface IIncrementOrderMapper extends BaseMapper<IncrementOrder> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/app/mapper/ISceneCooperationMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.app.mapper;
+
+import com.fdkankan.app.entity.SceneCooperation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Mapper
+public interface ISceneCooperationMapper extends BaseMapper<SceneCooperation> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/app/mapper/ISceneEditInfoMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.app.mapper;
+
+import com.fdkankan.app.entity.SceneEditInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Mapper
+public interface ISceneEditInfoMapper extends BaseMapper<SceneEditInfo> {
+
+}

+ 1 - 1
src/main/java/com/fdkankan/app/mapper/IScenePlusExtMapper.java

@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-19
  */
 @Mapper
 public interface IScenePlusExtMapper extends BaseMapper<ScenePlusExt> {

+ 3 - 1
src/main/java/com/fdkankan/app/mapper/IScenePlusMapper.java

@@ -3,6 +3,7 @@ package com.fdkankan.app.mapper;
 import com.fdkankan.app.entity.ScenePlus;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -10,9 +11,10 @@ import org.apache.ibatis.annotations.Mapper;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Mapper
 public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
 
+    Long getCountByUserId(@Param("userId") Long userId, @Param("cameraType") Integer cameraType);
 }

+ 18 - 0
src/main/java/com/fdkankan/app/mapper/ISceneProEditMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.app.mapper;
+
+import com.fdkankan.app.entity.SceneProEdit;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * pro场景编辑数据表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Mapper
+public interface ISceneProEditMapper extends BaseMapper<SceneProEdit> {
+
+}

+ 13 - 1
src/main/java/com/fdkankan/app/mapper/ISceneProMapper.java

@@ -1,7 +1,11 @@
 package com.fdkankan.app.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.app.entity.ScenePro;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.app.vo.request.SceneParam;
+import com.fdkankan.app.vo.response.GroupByCount;
+import com.fdkankan.app.vo.response.SceneVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -13,9 +17,17 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Mapper
 public interface ISceneProMapper extends BaseMapper<ScenePro> {
 
+    Long getCountByUserId(@Param("userId") Long userId, @Param("cameraType") Integer cameraType);
+
+    Page<SceneVo> pageList(Page<SceneVo> page, SceneParam param);
+
+    List<GroupByCount> findSceneProNumByCameraIds(@Param("cameraIds") List<Long> cameraIdList);
+
+    List<GroupByCount> findScenePlusNumByCameraIds(@Param("cameraIds") List<Long> cameraIdList);
+
 }

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

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

+ 20 - 0
src/main/java/com/fdkankan/app/mapper/IUserIncrementMapper.java

@@ -0,0 +1,20 @@
+package com.fdkankan.app.mapper;
+
+import com.fdkankan.app.entity.UserIncrement;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 用户增值权益表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Mapper
+public interface IUserIncrementMapper extends BaseMapper<UserIncrement> {
+
+    Long getCount(@Param("userId") Long userId, @Param("cameraType") Integer cameraType, @Param("isBind") Integer isBind);
+}

+ 1 - 1
src/main/java/com/fdkankan/app/mapper/IUserMapper.java

@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
  * </p>
  *
  * @author 
- * @since 2022-07-01
+ * @since 2022-07-15
  */
 @Mapper
 public interface IUserMapper extends BaseMapper<User> {

+ 12 - 2
src/main/java/com/fdkankan/app/service/ICameraDetailService.java

@@ -2,6 +2,7 @@ package com.fdkankan.app.service;
 
 import com.fdkankan.app.entity.CameraDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.app.vo.response.CameraAppVo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -12,10 +13,19 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 public interface ICameraDetailService extends IService<CameraDetail> {
 
-    Long getCountByUserId(Long userId);
+    Long getCountByUserId(Long id);
 
+    CameraDetail getByCameraId(Long id);
+
+    List<CameraAppVo> getListByUserAndType(Long userId, Integer cameraType);
+
+    void unbindCamera(List<Long> cameraIds);
+
+    HashMap<Long, CameraDetail> getByCameraIds(List<Long> cameraIds);
+
+    void addUsedSpace(HashMap<Long, Long> cameraMap);
 }

+ 16 - 2
src/main/java/com/fdkankan/app/service/ICameraService.java

@@ -1,8 +1,8 @@
 package com.fdkankan.app.service;
 
-import com.fdkankan.common.response.PageInfo;
 import com.fdkankan.app.entity.Camera;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.app.vo.response.CameraAppVo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -13,9 +13,23 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 public interface ICameraService extends IService<Camera> {
 
+    Camera getBySnCodeAndPassword(String appUserName, String appPassword);
 
+    List<CameraAppVo> getCameraForUser(String userName, Integer cameraType);
+
+    CameraAppVo bindCamera(String userName, String snCode);
+
+    Camera getBySnCode(String snCode);
+
+    void unbindCamera(String userName, String childName);
+
+    Camera getByChildName(String childName);
+
+    HashMap<Long, Camera> getByIds(List<Long> cameraIds);
+
+    CameraAppVo getCameraInfo(String childName, String childPassword);
 }

+ 17 - 0
src/main/java/com/fdkankan/app/service/IExpansionOrderService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.app.service;
+
+import com.fdkankan.app.entity.ExpansionOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 扩容订单表(八目相机) 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+public interface IExpansionOrderService extends IService<ExpansionOrder> {
+
+    Long getCount(Long userId, Integer cameraType);
+}

+ 16 - 0
src/main/java/com/fdkankan/app/service/IGoodsService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.app.service;
+
+import com.fdkankan.app.entity.Goods;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 商品主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+public interface IGoodsService extends IService<Goods> {
+
+}

+ 16 - 0
src/main/java/com/fdkankan/app/service/IIncrementOrderService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.app.service;
+
+import com.fdkankan.app.entity.IncrementOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 增值权益订单表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+public interface IIncrementOrderService extends IService<IncrementOrder> {
+
+}

+ 21 - 0
src/main/java/com/fdkankan/app/service/ISceneCooperationService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.app.service;
+
+import com.fdkankan.app.entity.SceneCooperation;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.app.entity.ScenePlus;
+import com.fdkankan.app.entity.ScenePro;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+public interface ISceneCooperationService extends IService<SceneCooperation> {
+
+    void deleteCooperationList(List<ScenePro> sceneProList, List<ScenePlus> scenePlusList);
+}

+ 17 - 0
src/main/java/com/fdkankan/app/service/ISceneEditInfoService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.app.service;
+
+import com.fdkankan.app.entity.SceneEditInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+public interface ISceneEditInfoService extends IService<SceneEditInfo> {
+
+    SceneEditInfo getByPlusId(Long plusId);
+}

+ 4 - 2
src/main/java/com/fdkankan/app/service/IScenePlusExtService.java

@@ -12,11 +12,13 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-19
  */
 public interface IScenePlusExtService extends IService<ScenePlusExt> {
 
     ScenePlusExt getByPlusId(Long plusId);
 
-    HashMap<Long,ScenePlusExt> getByPlusIds(List<Long> plusIds);
+    ScenePlusExt getByUnicode(String unicode);
+
+    HashMap<Long, ScenePlusExt> getByPlusIds(List<Long> plusIds);
 }

+ 11 - 2
src/main/java/com/fdkankan/app/service/IScenePlusService.java

@@ -11,10 +11,19 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 public interface IScenePlusService extends IService<ScenePlus> {
 
-    Long getCountByUserId(Long userId, List<Integer> sceneSourceList);
+    Long getCountByUserId(Long id, List<Integer> resourceList);
 
+    Long getCountByUserId(Long userId, Integer cameraType);
+
+    ScenePlus getByNum(String num);
+
+    ScenePlus getByUnicode(String unicode);
+
+    void bindOrUnCamera(List<Long> cameraIds, Long userId);
+
+    List<ScenePlus> getListByCameraIds(List<Long> cameraIds);
 }

+ 17 - 0
src/main/java/com/fdkankan/app/service/ISceneProEditService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.app.service;
+
+import com.fdkankan.app.entity.SceneProEdit;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * pro场景编辑数据表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+public interface ISceneProEditService extends IService<SceneProEdit> {
+
+    SceneProEdit getByProId(Long id);
+}

+ 32 - 2
src/main/java/com/fdkankan/app/service/ISceneProService.java

@@ -3,6 +3,10 @@ package com.fdkankan.app.service;
 import com.fdkankan.app.entity.CameraDetail;
 import com.fdkankan.app.entity.ScenePro;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.app.vo.request.SceneParam;
+import com.fdkankan.app.vo.response.GroupByCount;
+import com.fdkankan.app.vo.response.SceneInfoVo;
+import com.fdkankan.common.response.PageInfo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -13,9 +17,35 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 public interface ISceneProService extends IService<ScenePro> {
 
-    Long getCountByUserId(Long userId, List<Integer> resourceList);
+    Long getCountByUserId(Long id, List<Integer> resourceList);
+
+    Long getCountByUserId(Long id, Integer cameraType);
+
+    PageInfo pageList(SceneParam param);
+
+    SceneInfoVo getInfo(String num);
+
+    ScenePro getByNum(String num);
+
+    void updateViewCount(String num);
+
+    HashMap<String, Object> getSceneStatusByUnicode(String appUserName, String appPassword, String unicode);
+
+    ScenePro getByUnicode(String unicode);
+
+    void bindOrUnCamera(List<Long> cameraIds, Long userId);
+
+    void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId, int payStatus);
+
+    List<ScenePro> getListByCameraIds(List<Long> cameraIds);
+
+    HashMap<Long, GroupByCount> findSceneNumByCameraIds(List<Long> cameraIdList);
+
+    void getScreencapVoice(String screencapMusic, String originalFileName, String sceneNum) throws Exception;
+
+    void deleteForCameraName(Long cameraId, String sceneNum);
 }

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

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

+ 25 - 0
src/main/java/com/fdkankan/app/service/IUserIncrementService.java

@@ -0,0 +1,25 @@
+package com.fdkankan.app.service;
+
+import com.fdkankan.app.entity.UserIncrement;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 用户增值权益表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+public interface IUserIncrementService extends IService<UserIncrement> {
+
+    Long getCount(Long userId, Integer cameraType, int isBind);
+
+    UserIncrement getByCameraId(Long cameraId);
+
+    void unbindCamera(List<Long> cameraIds);
+
+    Long getValidCountByCameraId(Long cameraId);
+}

+ 13 - 5
src/main/java/com/fdkankan/app/service/IUserService.java

@@ -2,22 +2,30 @@ package com.fdkankan.app.service;
 
 import com.fdkankan.app.entity.User;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.app.vo.request.RegisterParam;
 import com.fdkankan.app.vo.response.UserVo;
 
-import java.util.HashMap;
-import java.util.List;
-
 /**
  * <p>
  * 用户信息表 服务类
  * </p>
  *
  * @author 
- * @since 2022-07-01
+ * @since 2022-07-15
  */
 public interface IUserService extends IService<User> {
 
     User getByUserName(String phoneNum);
 
-    HashMap<Long, User> getByIds(List<Long> userIds);
+    Long getCountByNickName(String nickName);
+
+    void register(RegisterParam param);
+
+    void updatePassword(String phoneNum, String pwdMd5);
+
+    UserVo getUserInfo(String phoneNum, Integer cameraType);
+
+    void updateNickName(String phoneNum, String nickName);
+
+    void uploadHead(String phoneNum, String head);
 }

+ 79 - 7
src/main/java/com/fdkankan/app/service/impl/CameraDetailServiceImpl.java

@@ -1,21 +1,23 @@
 package com.fdkankan.app.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-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.app.entity.*;
+import com.fdkankan.app.entity.Camera;
+import com.fdkankan.app.entity.CameraDetail;
+import com.fdkankan.app.entity.ScenePlus;
+import com.fdkankan.app.entity.ScenePro;
 import com.fdkankan.app.mapper.ICameraDetailMapper;
+import com.fdkankan.app.mapper.ISceneCooperationMapper;
 import com.fdkankan.app.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.joda.time.DateTime;
-import org.joda.time.Days;
+import com.fdkankan.app.vo.response.CameraAppVo;
+import com.fdkankan.common.constant.Constant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -23,11 +25,19 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Service
 public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, CameraDetail> implements ICameraDetailService {
 
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    ISceneCooperationService sceneCooperationService;
 
     @Override
     public Long getCountByUserId(Long userId) {
@@ -36,5 +46,67 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
         return this.count(wrapper);
     }
 
+    @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 CameraDetail getByCameraId(Long cameraId) {
+        LambdaQueryWrapper<CameraDetail> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CameraDetail::getCameraId,cameraId);
+        List<CameraDetail> list = this.list(wrapper);
+        if(list!=null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
 
+    @Override
+    public List<CameraAppVo> getListByUserAndType(Long userId, Integer cameraType) {
+        return this.getBaseMapper().getListByUserAndType(userId,cameraType);
+    }
+
+    @Override
+    public void unbindCamera(List<Long> cameraIds) {
+        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);
+    }
+
+    @Override
+    public void addUsedSpace(HashMap<Long, Long> cameraMap) {
+        Set<Long> cameraIds = cameraMap.keySet();
+        LambdaQueryWrapper<CameraDetail> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(CameraDetail::getCameraId,cameraIds);
+        List<CameraDetail> list = this.list(wrapper);
+        for (CameraDetail cameraDetail : list) {
+            long subSpace = cameraMap.get(cameraDetail.getCameraId()) == null ? 0L : cameraMap.get(cameraDetail.getCameraId());
+            long usedSpace = cameraDetail.getUsedSpace() - subSpace ;
+            cameraDetail.setUsedSpace(usedSpace < 0 ? 0L :usedSpace);
+            //解封封存场景
+            sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),1);
+        }
+        this.updateBatchById(list);
+    }
 }

+ 160 - 10
src/main/java/com/fdkankan/app/service/impl/CameraServiceImpl.java

@@ -1,22 +1,22 @@
 package com.fdkankan.app.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.app.constant.CameraConstant;
+import com.fdkankan.app.constant.LoginConstant;
 import com.fdkankan.app.entity.*;
 import com.fdkankan.app.mapper.ICameraMapper;
 import com.fdkankan.app.service.*;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.app.util.DateUserUtil;
+import com.fdkankan.app.vo.response.CameraAppVo;
+import com.fdkankan.app.vo.response.GroupByCount;
+import com.fdkankan.common.constant.AppConstant;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.FileSizeUtil;
 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 java.math.BigInteger;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -26,10 +26,160 @@ import java.util.stream.Collectors;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Service
 public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
 
+    @Autowired
+    IUserService userService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    IGoodsService goodsService;
+
+    @Override
+    public Camera getBySnCode(String snCode) {
+        LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Camera::getSnCode,snCode);
+        List<Camera> list = this.list(wrapper);
+        if(list != null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @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 Camera getByChildName(String childName) {
+        LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Camera::getChildName,childName);
+        List<Camera> list = this.list(wrapper);
+        if(list != null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public Camera getBySnCodeAndPassword(String appUserName, String appPassword) {
+        LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Camera::getChildName,appUserName)
+                .eq(Camera::getChildPassword,appPassword);
+        List<Camera> list = this.list(wrapper);
+        if(list != null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public List<CameraAppVo> getCameraForUser(String userName, Integer cameraType) {
+        if(StringUtils.isEmpty(userName) || cameraType == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        User user = userService.getByUserName(userName);
+        if(user == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
+        }
+        return cameraDetailService.getListByUserAndType(user.getId(),cameraType);
+    }
+
+    @Override
+    public CameraAppVo bindCamera(String userName, String snCode) {
+        User user = userService.getByUserName(userName);
+        if(user == null){
+            throw new BusinessException(AppConstant.FAILURE_CODE_4007, AppConstant.FAILURE_MSG_4007);
+        }
+        Camera camera = this.getBySnCode(snCode);
+        if(camera == null){
+            throw new BusinessException(AppConstant.FAILURE_CODE_4010, AppConstant.FAILURE_MSG_4010);
+        }
+        CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
+        if(cameraDetail == null){
+            throw new BusinessException(AppConstant.FAILURE_CODE_4010, AppConstant.FAILURE_MSG_4010);
+        }
+        if (cameraDetail.getUserId() != null){
+            throw new BusinessException(CameraConstant.FAILURE_CODE_6006, CameraConstant.FAILURE_MSG_6006);
+        }
+        List<Long> cameraIds = Collections.singletonList(camera.getId());
+
+        cameraDetail.setUserId(user.getId());
+        cameraDetailService.updateById(cameraDetail);
+        sceneProService.bindOrUnCamera(cameraIds,user.getId());
+        scenePlusService.bindOrUnCamera(cameraIds,user.getId());
+        CameraAppVo responseCamera = new CameraAppVo();
+        responseCamera.setChildName(camera.getChildName());
+
+        responseCamera.setUsedSpace(BigInteger.valueOf(cameraDetail.getUsedSpace()));
+        responseCamera.setTotalSpace(BigInteger.valueOf(cameraDetail.getTotalSpace()));
+        responseCamera.setUsedSpaceStr(FileSizeUtil.formatFileSize(cameraDetail.getUsedSpace()));
+        responseCamera.setTotalSpaceStr(FileSizeUtil.formatFileSize(cameraDetail.getTotalSpace()));
+        return responseCamera;
+    }
+
+    @Override
+    public void unbindCamera(String userName, String childName) {
+        User user = userService.getByUserName(userName);
+        if(user == null){
+            throw new BusinessException(AppConstant.FAILURE_CODE_4007, AppConstant.FAILURE_MSG_4007);
+        }
+        Camera camera = this.getByChildName(childName);
+        if(camera == null){
+            throw new BusinessException(AppConstant.FAILURE_CODE_4010, AppConstant.FAILURE_MSG_4010);
+        }
+        CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
+        if(cameraDetail == null){
+            throw new BusinessException(AppConstant.FAILURE_CODE_4010, AppConstant.FAILURE_MSG_4010);
+        }
+        if(!user.getId().equals(cameraDetail.getUserId())){
+            throw new BusinessException(CameraConstant.FAILURE_CODE_6005, CameraConstant.FAILURE_MSG_6005);
+        }
+        List<Long> cameraIds = Collections.singletonList(camera.getId());
+
+        cameraDetailService.unbindCamera(cameraIds);                     //取消相机用户关联
+        userIncrementService.unbindCamera(cameraIds);                   //取消关联用户权益
+        sceneProService.bindOrUnCamera(cameraIds,null);             //取消关联场景
+        scenePlusService.bindOrUnCamera(cameraIds,null);            //取消关联场景
+    }
+
+    @Override
+    public CameraAppVo getCameraInfo(String childName, String childPassword) {
+        if(StringUtils.isEmpty(childName) || StringUtils.isEmpty(childPassword)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        List<CameraAppVo> cameraAppVos = this.getBaseMapper().getCameraInfo(childName,childPassword);
+        if(cameraAppVos.size()<=0){
+            return null;
+        }
+        List<Long> cameraIdList = cameraAppVos.parallelStream().map(CameraAppVo::getId).collect(Collectors.toList());
+        //场景数量,最后拍摄时间
+        HashMap<Long, GroupByCount>  sceneNumMap =  sceneProService.findSceneNumByCameraIds(cameraIdList);
+        for (CameraAppVo vo : cameraAppVos) {
+            Long sceneCount = sceneNumMap.get(vo.getId()) == null ? 0L : sceneNumMap.get(vo.getId()).getCount();
+            vo.setSceneCount(Math.toIntExact(sceneCount));
 
+            UserIncrement userIncrementEntity = userIncrementService.getByCameraId(vo.getId());
+            if(userIncrementEntity != null){
+                vo.setUserIncrementId(userIncrementEntity.getId());
+                vo.setIsExpire(userIncrementEntity.getIsExpired());
+            }
+        }
+        return cameraAppVos.get(0);
+    }
 }

+ 24 - 0
src/main/java/com/fdkankan/app/service/impl/ExpansionOrderServiceImpl.java

@@ -0,0 +1,24 @@
+package com.fdkankan.app.service.impl;
+
+import com.fdkankan.app.entity.ExpansionOrder;
+import com.fdkankan.app.mapper.IExpansionOrderMapper;
+import com.fdkankan.app.service.IExpansionOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 扩容订单表(八目相机) 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Service
+public class ExpansionOrderServiceImpl extends ServiceImpl<IExpansionOrderMapper, ExpansionOrder> implements IExpansionOrderService {
+
+    @Override
+    public Long getCount(Long userId, Integer cameraType) {
+        return this.getBaseMapper().getCount(userId,cameraType);
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/app/service/impl/GoodsServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.app.service.impl;
+
+import com.fdkankan.app.entity.Goods;
+import com.fdkankan.app.mapper.IGoodsMapper;
+import com.fdkankan.app.service.IGoodsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 商品主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Service
+public class GoodsServiceImpl extends ServiceImpl<IGoodsMapper, Goods> implements IGoodsService {
+
+}

+ 20 - 0
src/main/java/com/fdkankan/app/service/impl/IncrementOrderServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.app.service.impl;
+
+import com.fdkankan.app.entity.IncrementOrder;
+import com.fdkankan.app.mapper.IIncrementOrderMapper;
+import com.fdkankan.app.service.IIncrementOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 增值权益订单表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Service
+public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper, IncrementOrder> implements IIncrementOrderService {
+
+}

+ 201 - 31
src/main/java/com/fdkankan/app/service/impl/LoginService.java

@@ -1,31 +1,34 @@
 package com.fdkankan.app.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.app.service.*;
-import com.fdkankan.common.constant.ConstantFilePath;
-import com.fdkankan.common.constant.ConstantRegex;
-import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.*;
-import com.fdkankan.redis.constant.RedisKey;
-import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.sms.SendMailAcceUtils;
-import com.fdkankan.sms.SmsService;
 import com.fdkankan.app.common.RedisKeyUtil;
 import com.fdkankan.app.constant.LoginConstant;
 import com.fdkankan.app.entity.Camera;
 import com.fdkankan.app.entity.CameraDetail;
 import com.fdkankan.app.entity.User;
+import com.fdkankan.app.service.*;
+import com.fdkankan.app.vo.request.AppLoginParam;
 import com.fdkankan.app.vo.request.LoginParam;
+import com.fdkankan.app.vo.request.RegisterParam;
 import com.fdkankan.app.vo.response.LoginVo;
 import com.fdkankan.app.vo.response.UserVo;
+import com.fdkankan.common.constant.AppConstant;
+import com.fdkankan.common.constant.CameraConstant;
+import com.fdkankan.common.constant.ConstantRegex;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.Base64Converter;
+import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.common.util.RandomUtil;
+import com.fdkankan.common.util.SecurityUtil;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.sms.SmsService;
 import org.apache.commons.lang3.StringUtils;
-import org.omg.PortableInterceptor.INACTIVE;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.Date;
 
 @Service
 public class LoginService {
@@ -35,20 +38,25 @@ public class LoginService {
     @Autowired
     private RedisUtil redisUtil;
     @Autowired
-    private ICameraService cameraService;
-    @Autowired
     private ICameraDetailService cameraDetailService;
     @Autowired
     ISceneProService sceneProService;
     @Autowired
     IScenePlusService scenePlusService;
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    private SmsService smsService;
+
+    @Value("${phone.code.cn}")
+    private String cnCode;
+
 
     public LoginVo login(LoginParam param) {
         if (StringUtils.isEmpty(param.getPassword()) || StringUtils.isEmpty(param.getPhoneNum())){
             throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
         }
-        String password = Base64Converter.decode(Base64Converter.subText(param.getPassword()));
-        String passwordCode = SecurityUtil.MD5(password);
+        String passwordCode = SecurityUtil.MD5(param.getPassword());
         User user = userService.getByUserName(param.getPhoneNum());
         if(user == null){
             throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
@@ -56,20 +64,19 @@ public class LoginService {
         if(!user.getPassword().equals(passwordCode)){
             throw new BusinessException(LoginConstant.FAILURE_CODE_3014, LoginConstant.FAILURE_MSG_3014);
         }
-        String token = this.redisLogin(user.getUserName(),JSONObject.toJSONString(user));
+        String token = this.redisLogin(user.getUserName(), 21800L);
 
+        return commonLogin(user,param,token);
+    }
+
+
+    private LoginVo commonLogin(User user, LoginParam param, String token){
         Long count = cameraDetailService.getCountByUserId(user.getId());
         if(param.getCameraType() == null){
             param.setCameraType(  4);
         }
-        List<Integer> resourceList = new ArrayList<>();
-        if(param.getCameraType() == 4){
-            resourceList = Arrays.asList(1,2,12,13,14);
-        }else {
-            resourceList = Collections.singletonList(3);
-        }
-        Long sceneProCount = sceneProService.getCountByUserId(user.getId(),resourceList);
-        Long scenePlusCount = scenePlusService.getCountByUserId(user.getId(),resourceList);
+        Long sceneProCount = sceneProService.getCountByUserId(user.getId(),param.getCameraType());
+        Long scenePlusCount = scenePlusService.getCountByUserId(user.getId(),param.getCameraType());
         UserVo userVo = new UserVo();
         userVo.setCameraCount(count);
         userVo.setSceneCount(sceneProCount + scenePlusCount);
@@ -80,16 +87,179 @@ public class LoginService {
         return vo;
     }
 
-    public void logout(String userName) {
-        String redisKey = RedisKeyUtil.PREFIX_CACHE_CAMERA+ userName;
-        redisUtil.del(redisKey);
-    }
-
-    public String redisLogin(String userName,String value){
+    public String redisLogin(String userName,Long time){
         String token = JwtUtil.createJWT(-1,userName,"app");
         String redisKey = RedisKeyUtil.PREFIX_CACHE_CAMERA+ userName;
-        redisUtil.set(redisKey, token,21600);
+        redisUtil.set(redisKey, token,time);
         return token;
     }
 
+    public void appLogin(AppLoginParam param) {
+        if(StringUtils.isEmpty(param.getAppUserName()) || StringUtils.isEmpty(param.getAppPassword())
+                || StringUtils.isEmpty(param.getUuid())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        commonCheckCamera(param);
+        redisUtil.set(param.getUuid(),param.getAppUserName(),60 * 5);
+    }
+
+    private void commonCheckCamera(AppLoginParam param){
+        Camera camera = cameraService.getBySnCodeAndPassword(param.getAppUserName(),param.getAppPassword());
+        if(camera == null){
+            throw new BusinessException(CameraConstant.FAILURE_6003);
+        }
+        CameraDetail detail = cameraDetailService.getByCameraId(camera.getId());
+        if (detail == null ){
+            throw new BusinessException(AppConstant.FAILURE_CODE_4012, AppConstant.FAILURE_MSG_4012);
+        }
+    }
+
+    public JSONObject login2(AppLoginParam param) {
+        if(StringUtils.isEmpty(param.getAppUserName()) || StringUtils.isEmpty(param.getAppPassword())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        commonCheckCamera(param);
+        String token = redisLogin(param.getAppUserName(), 604800L);
+        JSONObject obj = new JSONObject();
+        obj.put("token", token);
+        return obj;
+    }
+
+    public LoginVo quickLogin(LoginParam param) {
+        if(StringUtils.isEmpty(param.getPhoneNum()) || StringUtils.isEmpty(param.getMsgAuthCode())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        this.checkSms(param.getMsgAuthCode(),param.getPhoneNum(),true);
+
+        User user = userService.getByUserName(param.getPhoneNum());
+        if(user == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
+        }
+        String token = redisLogin(param.getPhoneNum(), 21600L);
+        return commonLogin(user,param,token);
+    }
+
+    private void checkSms(String msgAuthCode, String userName, boolean del) {
+        //验证码校验
+        String codeValue = redisUtil.get(RedisKeyUtil.PREFIX_MSG_AUTH_CODE + userName);
+        if (StringUtils.isEmpty(codeValue)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3006, LoginConstant.FAILURE_MSG_3006);
+        }
+        if (!codeValue.equals(msgAuthCode)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3006, LoginConstant.FAILURE_MSG_3006);
+        }
+        if(del){
+            redisUtil.del(RedisKeyUtil.PREFIX_MSG_AUTH_CODE + userName);
+        }
+    }
+
+    public void logout(String token) {
+        String username = JwtUtil.getUsername(token);
+        String redisKey = RedisKeyUtil.PREFIX_CACHE_CAMERA+ username;
+        if(redisUtil.hasKey(redisKey)){
+            redisUtil.del(redisKey);
+        }
+    }
+
+    public JSONObject getNickName() {
+        String nickName = null;
+        Long count = 0L;
+        do {
+            nickName = "mob" + RandomUtil.generateShortUuid();
+            count = userService.getCountByNickName(nickName);
+        } while (count > 0);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("nickName",nickName);
+        return jsonObject;
+    }
+
+    public void register(RegisterParam param) {
+        if (StringUtils.isEmpty(param.getPassword()) || StringUtils.isEmpty(param.getPhoneNum()) ||
+                StringUtils.isEmpty(param.getMsgAuthCode()) || StringUtils.isEmpty(param.getCountry()) || StringUtils.isEmpty(param.getConfirmPwd())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        if(!param.getPassword().matches(ConstantRegex.PASSWORD_REGEX)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3011, LoginConstant.FAILURE_MSG_3011);
+        }
+        if (!param.getConfirmPwd().equals(param.getPassword())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3009, LoginConstant.FAILURE_MSG_3009);
+        }
+        checkSms(param.getMsgAuthCode(),param.getPhoneNum(),true);
+        User user = userService.getByUserName(param.getPhoneNum());
+        if(user != null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3008, LoginConstant.FAILURE_MSG_3008);
+        }
+        userService.register(param);
+    }
+
+    public void checkUser(String phoneNum, boolean flg) {
+        if(StringUtils.isNotBlank(phoneNum)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        User user = userService.getByUserName(phoneNum);
+        if(user == null && flg){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
+        }
+        if(user != null && !flg){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3008, LoginConstant.FAILURE_MSG_3008);
+        }
+    }
+
+    public void changePassword(RegisterParam param) {
+        if (StringUtils.isEmpty(param.getPassword()) || StringUtils.isEmpty(param.getConfirmPwd()) ||
+                StringUtils.isEmpty(param.getMsgAuthCode())
+                || StringUtils.isEmpty(param.getPhoneNum())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        if (!param.getPassword().equals(param.getConfirmPwd())){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3009, LoginConstant.FAILURE_MSG_3009);
+        }
+        //对前端传的密码解密
+        String password = Base64Converter.decode(Base64Converter.subText(param.getPassword()));
+        //正则判断密码是否符合规则(8位以上并且数字英文组合)
+        if(!password.matches(ConstantRegex.PASSWORD_REGEX)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3011, LoginConstant.FAILURE_MSG_3011);
+        }
+        User user = userService.getByUserName(param.getPhoneNum());
+        if(user == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
+        }
+        checkSms(param.getMsgAuthCode(),param.getPhoneNum(),true);
+        String pwdMd5 = SecurityUtil.MD5(password);
+        userService.updatePassword(param.getPhoneNum(), pwdMd5);
+    }
+
+    public void getMsgAuthCode(String areaNum, String phoneNum) {
+        String redisKeyTime = RedisKeyUtil.PREFIX_MSG_NOT_CODE + phoneNum;      //重发验证
+        String redisKeyMsg = RedisKeyUtil.PREFIX_MSG_AUTH_CODE + phoneNum;      //验证码code
+
+        long value =  redisUtil.getExpire(redisKeyTime);
+        if(value != -2){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3033, String.valueOf(value));
+        }
+        String code = String.valueOf((int)((Math.random()*9+1)*100000));
+        if ("86".equals(areaNum)){
+            String sendCode = null;
+            try {
+                sendCode = smsService.sendSms(phoneNum, "{\"code\":\"" + code + "\"}", cnCode);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            if("isv.BUSINESS_LIMIT_CONTROL".equals(sendCode)){
+                throw new BusinessException(LoginConstant.FAILURE_CODE_3023, LoginConstant.FAILURE_MSG_3023);
+            }
+        }else{
+            try{
+                smsService.sendSMSMessage(areaNum + phoneNum, code);
+            }catch (Exception e){
+                e.printStackTrace();
+                throw new BusinessException(LoginConstant.FAILURE_CODE_3013, LoginConstant.FAILURE_MSG_3013);
+            }
+        }
+        if(redisUtil.hasKey(redisKeyMsg)){
+            redisUtil.del(redisKeyMsg);
+        }
+        redisUtil.set(redisKeyMsg,code,300);
+        redisUtil.set(redisKeyTime,String.valueOf(new Date().getTime()),60);
+    }
 }

+ 50 - 0
src/main/java/com/fdkankan/app/service/impl/SceneCooperationServiceImpl.java

@@ -0,0 +1,50 @@
+package com.fdkankan.app.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.app.entity.SceneCooperation;
+import com.fdkankan.app.entity.ScenePlus;
+import com.fdkankan.app.entity.ScenePro;
+import com.fdkankan.app.mapper.ISceneCooperationMapper;
+import com.fdkankan.app.service.ISceneCooperationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.app.service.ISceneResourceCooperationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Service
+public class SceneCooperationServiceImpl extends ServiceImpl<ISceneCooperationMapper, SceneCooperation> implements ISceneCooperationService {
+
+    @Autowired
+    ISceneResourceCooperationService sceneResourceCooperationService;
+
+
+    @Override
+    public void deleteCooperationList(List<ScenePro> sceneProList, List<ScenePlus> scenePlusList) {
+        if(CollectionUtils.isEmpty(sceneProList) && CollectionUtils.isEmpty(scenePlusList)){
+            return;
+        }
+        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){
+            this.removeByIds(ids);
+            sceneResourceCooperationService.deleteBatchByCooperationIds(ids);
+        }
+    }
+}

+ 33 - 0
src/main/java/com/fdkankan/app/service/impl/SceneEditInfoServiceImpl.java

@@ -0,0 +1,33 @@
+package com.fdkankan.app.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.app.entity.SceneEditInfo;
+import com.fdkankan.app.mapper.ISceneEditInfoMapper;
+import com.fdkankan.app.service.ISceneEditInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Service
+public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper, SceneEditInfo> implements ISceneEditInfoService {
+
+    @Override
+    public SceneEditInfo getByPlusId(Long plusId) {
+        LambdaQueryWrapper<SceneEditInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SceneEditInfo::getScenePlusId,plusId);
+        List<SceneEditInfo> list = this.list(wrapper);
+        if(list != null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+}

+ 13 - 1
src/main/java/com/fdkankan/app/service/impl/ScenePlusExtServiceImpl.java

@@ -16,7 +16,7 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-19
  */
 @Service
 public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, ScenePlusExt> implements IScenePlusExtService {
@@ -33,6 +33,18 @@ public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, Sc
     }
 
     @Override
+    public ScenePlusExt getByUnicode(String unicode) {
+        LambdaQueryWrapper<ScenePlusExt> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(ScenePlusExt::getDataSource,unicode);
+        wrapper.orderByDesc(ScenePlusExt::getCreateTime);
+        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);

+ 47 - 3
src/main/java/com/fdkankan/app/service/impl/ScenePlusServiceImpl.java

@@ -2,10 +2,13 @@ package com.fdkankan.app.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.app.entity.ScenePlus;
+import com.fdkankan.app.entity.ScenePlusExt;
 import com.fdkankan.app.mapper.IScenePlusMapper;
+import com.fdkankan.app.service.IScenePlusExtService;
 import com.fdkankan.app.service.IScenePlusService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -16,18 +19,59 @@ import java.util.List;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Service
 public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
 
+    @Autowired
+    IScenePlusExtService scenePlusExtService;
+
     @Override
     public Long getCountByUserId(Long userId, List<Integer> sceneSourceList) {
         LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(ScenePlus::getUserId, userId);
-        wrapper.in(ScenePlus::getSceneSource, sceneSourceList);
+        wrapper.eq(ScenePlus::getSceneSource, sceneSourceList);
         return this.count(wrapper);
     }
 
+    @Override
+    public Long getCountByUserId(Long userId, Integer cameraType) {
+        return this.getBaseMapper().getCountByUserId(userId,cameraType);
+    }
+
+    @Override
+    public ScenePlus getByNum(String num) {
+        LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePlus::getNum,num);
+        List<ScenePlus> list = this.list(wrapper);
+        if(list!= null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public ScenePlus getByUnicode(String unicode) {
+        ScenePlusExt scenePlusExt = scenePlusExtService.getByUnicode(unicode);
+        if(scenePlusExt != null){
+            return this.getById(scenePlusExt.getPlusId());
+        }
+        return null;
+    }
 
+    @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);
+    }
 }

+ 33 - 0
src/main/java/com/fdkankan/app/service/impl/SceneProEditServiceImpl.java

@@ -0,0 +1,33 @@
+package com.fdkankan.app.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.app.entity.SceneProEdit;
+import com.fdkankan.app.mapper.ISceneProEditMapper;
+import com.fdkankan.app.service.ISceneProEditService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * pro场景编辑数据表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-19
+ */
+@Service
+public class SceneProEditServiceImpl extends ServiceImpl<ISceneProEditMapper, SceneProEdit> implements ISceneProEditService {
+
+    @Override
+    public SceneProEdit getByProId(Long proId) {
+        LambdaQueryWrapper<SceneProEdit> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SceneProEdit::getProId,proId);
+        List<SceneProEdit> list = this.list(wrapper);
+        if(list != null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+}

+ 475 - 6
src/main/java/com/fdkankan/app/service/impl/SceneProServiceImpl.java

@@ -3,15 +3,27 @@ package com.fdkankan.app.service.impl;
 import com.alibaba.fastjson.JSONObject;
 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.fyun.oss.UploadToOssUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.app.common.RedisKeyUtil;
+import com.fdkankan.app.constant.LoginConstant;
 import com.fdkankan.app.entity.*;
 import com.fdkankan.app.mapper.ISceneProMapper;
 import com.fdkankan.app.service.*;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.app.util.DateUserUtil;
+import com.fdkankan.app.vo.request.SceneParam;
+import com.fdkankan.app.vo.response.GroupByCount;
+import com.fdkankan.app.vo.response.SceneInfoVo;
+import com.fdkankan.app.vo.response.SceneVo;
+import com.fdkankan.common.constant.ConstantFilePath;
+import com.fdkankan.common.constant.SceneConstant;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.response.PageInfo;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.redis.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -25,16 +37,473 @@ import java.util.stream.Collectors;
  * </p>
  *
  * @author 
- * @since 2022-07-04
+ * @since 2022-07-15
  */
 @Service
+@Slf4j
 public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
 
+    @Autowired
+    IUserService userService;
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    IScenePlusExtService scenePlusExtService;
+    @Autowired
+    ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    ISceneProEditService sceneProEditService;
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    RedisUtil redisUtil;
+
     @Override
     public Long getCountByUserId(Long userId, List<Integer> resourceList) {
         LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(ScenePro::getUserId,userId);
+        wrapper.eq(ScenePro::getIsUpgrade,0);
         wrapper.in(ScenePro::getSceneSource,resourceList);
         return this.count(wrapper);
     }
+
+    @Override
+    public Long getCountByUserId(Long id, Integer cameraType) {
+        return this.getBaseMapper().getCountByUserId(id,cameraType);
+    }
+
+    @Override
+    public PageInfo pageList(SceneParam param) {
+        if(StringUtils.isEmpty(param.getAppUserName()) && StringUtils.isEmpty(param.getPhoneNum()) ){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        Camera camera = cameraService.getBySnCodeAndPassword(param.getAppUserName(), param.getAppPassword());
+        if(camera == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3014, LoginConstant.FAILURE_MSG_3014);
+        }
+        CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
+        if(cameraDetail == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3014, LoginConstant.FAILURE_MSG_3014);
+        }
+        User user = userService.getByUserName(param.getPhoneNum());
+        if(user == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
+        }
+        //param.setUserId(user.getId());
+        param.setSnCode(camera.getSnCode());
+        Page<SceneVo> page =  this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
+        for (SceneVo record : page.getRecords()) {
+
+            if (record.getStatus() == -1) {
+                record.setStatus(0);
+            } else if (record.getStatus() == 500) {
+                record.setStatus(-1);
+            }
+            //相机的userId为空,表示相机的场景
+            if (cameraDetail.getUserId() == null || user.getId() == null) {
+                record.setSceneSourceType(0);
+            } else if (cameraDetail.getUserId().longValue() == user.getId().longValue()) {
+                //相机用户id等于该用户id,既为用户的场景
+                record.setSceneSourceType(1);
+            } else if (camera.getId() != null && cameraDetail.getCameraId().longValue() == camera.getId().longValue()) {
+                if (cameraDetail.getCooperationUser() == null) {
+                    //场景相机id等于该相机id
+                    record.setSceneSourceType(0);
+                } else if (cameraDetail.getCooperationUser().longValue() == user.getId().longValue()) {
+                    record.setSceneSourceType(2);
+                }
+            } else {
+                record.setSceneSourceType(0);
+            }
+        }
+        return PageInfo.PageInfo(page);
+    }
+
+    @Override
+    public ScenePro getByNum(String num) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ScenePro::getNum,num);
+        wrapper.eq(ScenePro::getIsUpgrade,0);
+        List<ScenePro> list = this.list(wrapper);
+        if(list!= null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public SceneInfoVo getInfo(String num) {
+        if(StringUtils.isEmpty(num)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        ScenePro scenePro = this.getByNum(num);
+        ScenePlus scenePlus = scenePlusService.getByNum(num);
+        if(scenePro == null && scenePlus == null){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
+        }
+        if(scenePro!=null && scenePro.getStatus() != 1 && scenePro.getStatus() != -2){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5033, SceneConstant.FAILURE_MSG_5033);
+        }
+        if(scenePlus!=null && scenePlus.getSceneStatus() != 1 && scenePlus.getSceneStatus() != -2){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5033, SceneConstant.FAILURE_MSG_5033);
+        }
+        if(scenePro!=null && scenePro.getPayStatus() != 1){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5034, SceneConstant.FAILURE_MSG_5034);
+        }
+        if(scenePlus!=null && scenePlus.getPayStatus() != 1){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5034, SceneConstant.FAILURE_MSG_5034);
+        }
+        SceneInfoVo infoVo = new SceneInfoVo();
+        if(scenePro!=null){
+            SceneProEdit sceneProEdit = sceneProEditService.getByProId(scenePro.getId());
+            if(sceneProEdit !=null){
+                BeanUtils.copyProperties(sceneProEdit, infoVo);
+            }
+            BeanUtils.copyProperties(scenePro,infoVo);
+            if(StringUtils.isNotEmpty(scenePro.getGps())){
+                infoVo.setGps(JSONObject.parseObject(scenePro.getGps()).toJSONString());
+            }
+            infoVo.setSceneKey("");
+            infoVo.setCreateDate(DateUserUtil.getDate(scenePro.getCreateTime()).getTime());
+        }else {
+            SceneEditInfo sceneEditInfo = sceneEditInfoService.getByPlusId(scenePlus.getId());
+            ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
+            if(sceneEditInfo != null){
+                BeanUtils.copyProperties(sceneEditInfo,infoVo);
+            }
+            if(scenePlusExt !=null){
+                BeanUtils.copyProperties(scenePlusExt,infoVo);
+            }
+            BeanUtils.copyProperties(scenePlus,infoVo);
+            infoVo.setSceneName(scenePlus.getTitle());
+            infoVo.setStatus(scenePlus.getSceneStatus());
+        }
+
+
+        if(StringUtils.isNotEmpty(infoVo.getEntry())){
+            infoVo.setEntry(JSONObject.parseObject(infoVo.getEntry()).toJSONString());
+        }
+        if(StringUtils.isEmpty(infoVo.getSceneKey())){
+            infoVo.setIsPublic(0);
+        }else {
+            infoVo.setIsPublic(1);
+        }
+
+        //查询是否有随心装场景
+        if(num.contains("vr-")){
+            infoVo.setVrNum(null);
+            infoVo.setVideosUser(null);
+            infoVo.setBgMusicName(null);
+            infoVo.setBgMusic(null);
+        }
+        this.updateViewCount(num);
+        return infoVo;
+    }
+
+    @Override
+    public void updateViewCount(String num) {
+        String redisKey = RedisKeyUtil.SCENE_VIEW_COUNT + num;
+        if(!redisUtil.hasKey(redisKey)){
+            Integer count = null;
+            ScenePro pro = this.getByNum(num);
+            if(pro !=null){
+                count = pro.getViewCount();
+            }else {
+                ScenePlus plus = scenePlusService.getByNum(num);
+                if(plus !=null){
+                    ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(plus.getId());
+                    count = scenePlusExt.getViewCount();
+                }
+            }
+            if(count !=null){
+                redisUtil.set(redisKey,String.valueOf(count));
+            }
+        }
+         if(redisUtil.hasKey(redisKey)){
+             redisUtil.incr(redisKey,1);
+         }
+    }
+
+    @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 HashMap<String, Object> getSceneStatusByUnicode(String appUserName, String appPassword, String unicode) {
+        if(StringUtils.isEmpty(appPassword) || StringUtils.isEmpty(appPassword) || StringUtils.isEmpty(unicode)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        Camera camera = cameraService.getBySnCodeAndPassword(appUserName, appPassword);
+        if(camera == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3014, LoginConstant.FAILURE_MSG_3014);
+        }
+        ScenePro scenePro = this.getByUnicode(unicode);
+        ScenePlusExt plusExt = scenePlusExtService.getByUnicode(unicode);
+        ScenePlus scenePlus = null;
+        if(plusExt !=null){
+            scenePlus = scenePlusService.getById(plusExt.getPlusId());
+        }
+        if(scenePro == null && scenePlus == null){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5009, SceneConstant.FAILURE_MSG_5009);
+        }
+        Integer payStatus = scenePro == null ? scenePlus.getPayStatus() : scenePro.getPayStatus();
+        if(payStatus == -2){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5006, SceneConstant.FAILURE_MSG_5006);
+        }
+        // 当计算时,返回给前端的状态为计算中
+        Integer status = scenePro == null ? scenePlus.getSceneStatus() : scenePro.getStatus();
+        if(status == -1){
+            status = 0;
+        }else if(status == 500){
+            status = -1;
+        }
+        String webSite = scenePro == null ? plusExt.getWebSite() : scenePro.getWebSite();
+        String sceneNum = scenePro == null ? scenePlus.getTitle() : scenePro.getSceneName();
+        String thumb = scenePro == null ? plusExt.getThumb() : scenePro.getThumb();
+        String dataSource = scenePro == null ? plusExt.getDataSource() : scenePro.getDataSource();
+        HashMap<String,Object> map = new HashMap<>();
+        map.put("status",status == -2 ? 1:status);
+        map.put("webSite",webSite);
+        map.put("sceneNum",sceneNum);
+        map.put("thumb",thumb);
+        map.put("dataSource",dataSource);
+        map.put("payStatus",payStatus);
+        map.put("recStatus","A");
+        return map;
+    }
+
+    @Override
+    public ScenePro getByUnicode(String unicode) {
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(ScenePro::getDataSource,unicode);
+        wrapper.eq(ScenePro::getIsUpgrade,0);
+        wrapper.orderByDesc(ScenePro::getCreateTime);
+        List<ScenePro> list = this.list(wrapper);
+        if(list !=null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @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 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);
+
+    }
+
+    @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 getScreencapVoice(String screencapMusic, String originalFileName, String sceneNum) throws Exception {
+        if(StringUtils.isEmpty(screencapMusic) || StringUtils.isEmpty(originalFileName) || StringUtils.isEmpty(sceneNum)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001,LoginConstant.FAILURE_MSG_3001);
+        }
+        ScenePro scenePro = this.getByNum(sceneNum);
+        ScenePlus scenePlus = scenePlusService.getByNum(sceneNum);
+        if(scenePro == null && scenePlus == null){
+           throw new BusinessException(SceneConstant.FAILURE_CODE_5005,SceneConstant.FAILURE_MSG_5005);
+        }
+        long time = System.currentTimeMillis();
+        Map<String, Object> map = new HashMap();
+        map.put("screencapVoiceSoundsyncFileName", screencapMusic + ".mp3");
+        map.put("screencapVoiceSoundsync", originalFileName + "?t=" + time);
+        log.info("微信上传的音频路径:" + originalFileName + "?t=" + time);
+        map.put("screencapVoiceType", "soundsync");
+
+        SceneProEdit sceneProEdit= null;
+        SceneEditInfo editInfo = null;
+        if(scenePro !=null){
+            sceneProEdit = sceneProEditService.getByProId(scenePro.getId());
+            Integer version = sceneProEdit.getVersion() + 1;
+            sceneProEdit.setVersion(version);
+            sceneProEdit.setScreencapVoiceSoundsync(originalFileName + "?t=" + time);
+            sceneProEdit.setScreencapVoiceType("soundsync");
+            map.put("version", version);
+        }else {
+            editInfo = sceneEditInfoService.getByPlusId(scenePlus.getId());
+            Integer version = editInfo.getVersion() + 1;
+            editInfo.setVersion(version);
+            //editInfo.setScreencapVoiceSoundsync(originalFileName + "?t=" + time);
+            //editInfo.setScreencapVoiceType("soundsync");
+            map.put("version", version);
+        }
+        StringBuilder dataBuffer = new StringBuilder(ConstantFilePath.SCENE_PATH)
+                .append("data").append(File.separator)
+                .append("data").append(sceneNum);
+        FileUtils.writeJsonFile(dataBuffer.append(File.separator).append("scene.json").toString(), map);
+
+        FileUtils.downLoadFromUrl(originalFileName + "?t=" + time, screencapMusic + ".mp3",
+                ConstantFilePath.SCENE_PATH+ "voice" + File.separator + "voice" + sceneNum);
+        if(sceneProEdit!=null){
+            sceneProEditService.updateById(sceneProEdit);
+        }
+        if(editInfo !=null){
+            sceneEditInfoService.updateById(editInfo);
+        }
+
+    }
+
+    @Override
+    public void deleteForCameraName(Long cameraId, String sceneNum) {
+        if(cameraId == null || StringUtils.isEmpty(sceneNum)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001,LoginConstant.FAILURE_MSG_3001);
+        }
+        ScenePro scenePro = this.getByNum(sceneNum);
+        ScenePlus scenePlus = scenePlusService.getByNum(sceneNum);
+        if(scenePro == null && scenePlus == null){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5005, SceneConstant.FAILURE_MSG_5005);
+        }
+        if(scenePro !=null && scenePro.getStatus() == 0){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5037, SceneConstant.FAILURE_MSG_5037);
+        }
+        if(scenePlus != null && scenePlus.getSceneStatus() == 0){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5037, SceneConstant.FAILURE_MSG_5037);
+        }
+        if(scenePro!=null && !scenePro.getCameraId().equals(cameraId)){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5010, SceneConstant.FAILURE_MSG_5010);
+        }
+        if(scenePlus!=null && !scenePlus.getCameraId().equals(cameraId)){
+            throw new BusinessException(SceneConstant.FAILURE_CODE_5010, SceneConstant.FAILURE_MSG_5010);
+        }
+        List<ScenePro> proList = new ArrayList<>();
+        if(scenePro!=null){
+            proList.add(scenePro);
+        }
+        List<ScenePlus> plusList = new ArrayList<>();
+        if(scenePlus!=null){
+            plusList.add(scenePlus);
+        }
+        this.deleteByList(proList,plusList);
+
+    }
+
+    private void deleteByList(List<ScenePro> proList,List<ScenePlus> plusList) {
+        HashMap<Long ,Long >cameraMap = new HashMap<>();
+        if(proList.size() >0){
+            for (ScenePro scenePro : proList) {
+                cameraMap.merge(scenePro.getCameraId(), scenePro.getSpace(), Long::sum);
+            }
+            List<Long> proIds = proList.parallelStream().map(ScenePro::getId).collect(Collectors.toList());
+            this.removeByIds(proIds);
+        }
+        if(plusList.size() >0){
+            List<Long> plusIds = plusList.parallelStream().map(ScenePlus::getId).collect(Collectors.toList());
+            HashMap<Long, ScenePlusExt> plusMap = scenePlusExtService.getByPlusIds(plusIds);
+
+            for (ScenePlus scenePlus : plusList) {
+                cameraMap.merge(scenePlus.getCameraId(), plusMap.get(scenePlus.getId()).getSpace(), Long::sum);
+            }
+            scenePlusService.removeByIds(plusIds);
+        }
+        //恢复相机使用容量
+        if(cameraMap.size() >0){
+            cameraDetailService.addUsedSpace(cameraMap);
+        }
+    }
 }

+ 29 - 0
src/main/java/com/fdkankan/app/service/impl/SceneResourceCooperationServiceImpl.java

@@ -0,0 +1,29 @@
+package com.fdkankan.app.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.app.entity.SceneResourceCooperation;
+import com.fdkankan.app.mapper.ISceneResourceCooperationMapper;
+import com.fdkankan.app.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-19
+ */
+@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);
+    }
+}

+ 57 - 0
src/main/java/com/fdkankan/app/service/impl/UserIncrementServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fdkankan.app.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.app.entity.UserIncrement;
+import com.fdkankan.app.mapper.IUserIncrementMapper;
+import com.fdkankan.app.service.IUserIncrementService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.util.DateUtil;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 用户增值权益表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-07-18
+ */
+@Service
+public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper, UserIncrement> implements IUserIncrementService {
+
+    @Override
+    public Long getCount(Long userId, Integer cameraType, int isBind) {
+        return this.getBaseMapper().getCount(userId,cameraType,isBind);
+    }
+
+    @Override
+    public UserIncrement getByCameraId(Long cameraId) {
+        LambdaQueryWrapper<UserIncrement> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(UserIncrement::getCameraId,cameraId);
+        List<UserIncrement> list = this.list(wrapper);
+        if(list !=null && list.size() >0){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public void unbindCamera(List<Long> cameraIds) {
+        LambdaUpdateWrapper<UserIncrement> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(UserIncrement::getCameraId,null)
+                .in(UserIncrement::getCameraId,cameraIds);
+        this.update(wrapper);
+    }
+
+    @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);
+    }
+}

+ 91 - 30
src/main/java/com/fdkankan/app/service/impl/UserServiceImpl.java

@@ -1,29 +1,23 @@
 package com.fdkankan.app.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.fdkankan.common.constant.*;
-import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.common.util.SecurityUtil;
-import com.fdkankan.common.validation.Variable;
-import com.fdkankan.fyun.qiniu.QiniuUpload;
 import com.fdkankan.app.constant.LoginConstant;
 import com.fdkankan.app.entity.User;
 import com.fdkankan.app.mapper.IUserMapper;
-import com.fdkankan.app.service.ICameraDetailService;
-import com.fdkankan.app.service.IUserService;
+import com.fdkankan.app.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.app.vo.request.RegisterParam;
 import com.fdkankan.app.vo.response.UserVo;
+import com.fdkankan.common.constant.ConstantUrl;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.SecurityUtil;
+import com.fdkankan.common.validation.Variable;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.io.File;
-import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
 
@@ -33,23 +27,21 @@ import java.util.Set;
  * </p>
  *
  * @author 
- * @since 2022-07-01
+ * @since 2022-07-15
  */
 @Service
 public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements IUserService {
 
     @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
     ICameraDetailService cameraDetailService;
-
-    private User getByEmail(String email){
-        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(User ::getEmail,email);
-        List<User> list = this.list(queryWrapper);
-        if(list == null || list.size()<=0){
-            return null;
-        }
-        return list.get(0);
-    }
+    @Autowired
+    IExpansionOrderService expansionOrderService;
+    @Autowired
+    IUserIncrementService userIncrementService;
 
     @Override
     public User getByUserName(String phoneNum) {
@@ -62,15 +54,84 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
         return null;
     }
 
+    @Override
+    public Long getCountByNickName(String nickName) {
+        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(User::getNickName,nickName);
+        return this.count(wrapper);
+    }
+
+    @Override
+    public void register(RegisterParam param) {
+        User userEntity = new User();
+        userEntity.setPassword(SecurityUtil.MD5(param.getPassword()));
+        userEntity.setEmail(param.getEmail());
+        userEntity.setUserName(param.getPhoneNum());
+        userEntity.setNickName(param.getPhoneNum());
+        userEntity.setHead(ConstantUrl.DEFAULT_USER_HEAD);
+        userEntity.setCountry(param.getCountry());
+        userEntity.setStatus(1);
+        userEntity.setIsNotice(1);
+        this.save(userEntity);
+    }
+
+    @Override
+    public void updatePassword(String phoneNum, String pwdMd5) {
+        LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(User::getPassword,pwdMd5)
+                .eq(User::getUserName,phoneNum);
+        this.update(wrapper);
+    }
+
+    @Override
+    public UserVo getUserInfo(String phoneNum, Integer cameraType) {
+        if(StringUtils.isEmpty(phoneNum) || cameraType == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        User user = this.getByUserName(phoneNum);
+        if(user == null){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
+        }
+        UserVo userVo = new UserVo();
+        BeanUtils.copyProperties(user,userVo);
+        Long cameraCount = cameraDetailService.getCountByUserId(user.getId());
+        Long proCount = sceneProService.getCountByUserId(user.getId(), cameraType);
+        Long plusCount = scenePlusService.getCountByUserId(user.getId(), cameraType);
+        Long expansionCount = expansionOrderService.getCount(user.getId(),cameraType);
+        Long incrementBindNum = userIncrementService.getCount(user.getId(),cameraType,1);
+
+        userVo.setCameraCount(cameraCount);
+        userVo.setSceneCount(plusCount + proCount);
+        userVo.setExpansionTotal(expansionCount);
+        userVo.setIncrementBindNum(incrementBindNum);
+        return userVo;
+    }
+
+    @Override
+    public void updateNickName(String phoneNum, String nickName) {
+        if (StringUtils.isEmpty(phoneNum) || StringUtils.isEmpty(nickName)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        //检验昵称敏感词
+        Set<String> set = Variable.sensitiveWord.getSensitiveWord(nickName, 1);
+        if (set != null && set.size() > 0){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3012, LoginConstant.FAILURE_MSG_3012);
+        }
 
+        LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(User::getUserName,phoneNum)
+                .set(User::getNickName,nickName);
+        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;
+    public void uploadHead(String phoneNum, String head) {
+        if (StringUtils.isEmpty(phoneNum) || StringUtils.isEmpty(head)){
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
+        }
+        LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(User::getUserName,phoneNum)
+                .set(User::getHead,head + "?t=" + System.currentTimeMillis());
+        this.update(wrapper);
     }
 }

+ 1 - 1
src/main/java/com/fdkankan/app/util/DateUserUtil.java

@@ -28,6 +28,6 @@ public class DateUserUtil {
         }catch (Exception e){
             e.printStackTrace();
         }
-       return "";
+       return time;
     }
 }

+ 10 - 0
src/main/java/com/fdkankan/app/vo/request/AppLoginParam.java

@@ -0,0 +1,10 @@
+package com.fdkankan.app.vo.request;
+
+import lombok.Data;
+
+@Data
+public class AppLoginParam {
+    private String appUserName;
+    private String appPassword;
+    private String uuid;
+}

+ 2 - 0
src/main/java/com/fdkankan/app/vo/request/LoginParam.java

@@ -4,7 +4,9 @@ import lombok.Data;
 
 @Data
 public class LoginParam {
+    private String areaNum;
     private String phoneNum;        //用户名
     private String password;        //密码
     private Integer cameraType;
+    private String msgAuthCode;
 }

+ 13 - 0
src/main/java/com/fdkankan/app/vo/request/RegisterParam.java

@@ -0,0 +1,13 @@
+package com.fdkankan.app.vo.request;
+
+import lombok.Data;
+
+@Data
+public class RegisterParam {
+    private String phoneNum;
+    private String password;
+    private String msgAuthCode;
+    private String country;
+    private String confirmPwd;
+    private String email;
+}

+ 19 - 0
src/main/java/com/fdkankan/app/vo/request/SceneParam.java

@@ -0,0 +1,19 @@
+package com.fdkankan.app.vo.request;
+
+import com.fdkankan.common.request.RequestBase;
+import lombok.Data;
+
+@Data
+public class SceneParam extends RequestBase {
+
+    private String appUserName;
+    private String appPassword;
+    private String phoneNum;
+    private String sceneName;
+    private Integer sceneType;          //场景类型0-其他1-文博2-地产3-电商4-餐饮5-家居
+    private Integer cameraType;
+
+    private Long userId;
+    private String snCode;
+
+}

+ 87 - 0
src/main/java/com/fdkankan/app/vo/response/CameraAppVo.java

@@ -0,0 +1,87 @@
+package com.fdkankan.app.vo.response;
+
+import lombok.Data;
+
+import java.math.BigInteger;
+import java.util.Date;
+
+/**
+ * Created by Hb_zzZ on 2019/6/10.
+ */
+@Data
+public class CameraAppVo extends GoodsVo {
+
+    /**"用户ID", name = "userId*/
+    private Long userId;
+
+    /**"用户名", name = "userName*/
+    private String userName;
+
+    /**"激活时间", name = "activatedTime*/
+    private Date activatedTime;
+
+    /**"相机的Mac地址", name = "childName*/
+    private String childName;
+
+    /**"订单号", name = "orderSn*/
+    private String orderSn;
+
+    /**"余额", name = "balance*/
+    private String balance;
+
+    /**"相机类型的id", name = "goodsId*/
+    private Long goodsId;
+
+    /**"相机拥有者类型", name = "own*/
+    private Integer own;
+
+    /**"wifi名称", name = "wifiName*/
+    private String wifiName;
+
+    /**"wifi密码", name = "wifiPassword*/
+    private String wifiPassword;
+
+    /**
+     * 商品名称
+     */
+    /**"商品名称", name = "name*/
+    private String name;
+
+    /**
+     * 商品图片
+     */
+    /**"商品图片", name = "imageUrl*/
+    private String imageUrl;
+    /**
+     * 商品图片2
+     */
+    /**"商品图片2", name = "pic*/
+    private String pic;
+
+    /**
+     * 相机类型,0表示双目,1表示专业八目,2表示商业八目,3表示企业八目
+     */
+    /**"相机类型,0表示双目,1表示专业八目,2表示商业八目,3表示企业八目", name = "type*/
+    private int type;
+
+    /**"总场景数", name = "sceneCount*/
+    private int sceneCount;
+
+    /**"总容量", name = "totalSpace*/
+    private BigInteger totalSpace;
+
+    /**"已使用容量", name = "usedSpace*/
+    private BigInteger usedSpace;
+
+    private String snCode;
+
+    private String usedSpaceStr;
+
+    private String totalSpaceStr;
+
+    private Long cooperationUser;
+
+    private Long userIncrementId;
+
+    private Integer isExpire = 0;
+}

+ 38 - 0
src/main/java/com/fdkankan/app/vo/response/GoodsSkuVo.java

@@ -0,0 +1,38 @@
+package com.fdkankan.app.vo.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class GoodsSkuVo implements Serializable {
+
+    private static final long serialVersionUID = -873854526108879341L;
+
+    private Long id;
+
+    private Long goodsId;
+
+    private String skuSn;
+
+    private String description;
+
+    private int stock;
+
+    private BigDecimal price;
+
+    private BigDecimal costPrice;
+
+    private BigDecimal dollarPrice;
+
+    private BigDecimal costDollarPrice;
+    //扩容专用
+    private String unit;
+    //扩容大小
+    private int unitSize;
+    //扩容期限,单位月
+    private int month;
+    //预计到期时间
+    private Long deadLine;
+}

+ 79 - 0
src/main/java/com/fdkankan/app/vo/response/GoodsVo.java

@@ -0,0 +1,79 @@
+package com.fdkankan.app.vo.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class GoodsVo  implements Serializable {
+
+    private static final long serialVersionUID = 1488438481056104795L;
+    private Long id;
+    /**
+     * 商品名称
+     */
+    /**"商品名称", name = "name*/
+    private String name;
+    /**
+     * 套餐
+     */
+	/**"套餐", name = "packageName*/
+    private String packageName;
+    /**
+     * 商品详情
+     */
+	/**"商品详情", name = "description*/
+    private String description;
+    /**
+     * 商品图片
+     */
+    /**"商品图片", name = "imageUrl*/
+    private String imageUrl;
+    /**
+     * 商品图片2
+     */
+    /**"商品图片2", name = "pic*/
+    private String pic;
+    /**
+     * 商品价格(RMB)
+     */
+    /**"商品价格(RMB)", name = "goodsPrice*/
+    private BigDecimal goodsPrice;
+    /**
+     * 商品价格(美元)
+     */
+    /**"商品价格(美元)", name = "goodsDollarPrice*/
+    private BigDecimal goodsDollarPrice;
+    /**
+     * 快递价格
+     */
+    /**"快递价格", name = "expressPrice*/
+    private BigDecimal expressPrice;
+    /**
+     * 商品编码
+     */
+    /**"商品编码", name = "goodsSn*/
+    private String goodsSn;
+    /**
+     * 商品状态,上架下架
+     */
+    /**"商品状态,上架下架", name = "goodsStatus*/
+    private String goodsStatus;
+    /**
+     * 排序
+     */
+    private int sort;
+    /**
+     * 规格描述
+     */
+    private String attributeList;
+    /**
+     * skus
+     */
+    private List<GoodsSkuVo> skuList;
+
+    private Long deadLine;
+
+}

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

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

+ 272 - 0
src/main/java/com/fdkankan/app/vo/response/SceneInfoVo.java

@@ -0,0 +1,272 @@
+package com.fdkankan.app.vo.response;
+
+import lombok.Data;
+
+import java.math.BigInteger;
+
+@Data
+public class SceneInfoVo {
+
+    private static final long serialVersionUID = 2454435822930272529L;
+
+    private Long id;
+
+    /**"场景缩略图", name = "thumb*/
+    private String thumb;
+
+    /**"大场景的密钥", name = "sceneKey*/
+    private String sceneKey;
+
+    /**"场景名称", name = "sceneName*/
+    private String sceneName;
+
+    /**"场景描述", name = "sceneDec*/
+    private String sceneDec;
+
+    /**"0表示其他,1表示文博,2表示地产,3表示电商,4表示餐饮,5表示家居", name = "sceneType*/
+    private int sceneType;
+
+    /**"场景封面图是否默认", name = "thumbImg*/
+    private int thumbImg;
+
+    /**"版本", name = "version*/
+    private int version;
+
+    /**"0表示默认,user表示自己上传", name = "markerLogo*/
+    private String markerLogo;
+
+    /**"0表示默认,user表示自己上传", name = "floorLogo*/
+    private String floorLogo;
+
+    /**"标记大小", name = "floorLogoSize*/
+    private int floorLogoSize;
+
+    /**"表示初始点信息", name = "entry*/
+    private String entry;
+
+    /**"创建时间", name = "createTime*/
+    private String createTime;
+
+    /**"拍摄数量", name = "shootCount*/
+    private int shootCount;
+
+    /**"0表示未建好,1表示建好,-1表示出错,-2表示不要在官网上显示", name = "status*/
+    private int status;
+
+    /**"模型贴图的风格", name = "sceneIndex*/
+    private int sceneIndex;
+
+    /**"背景音乐名称", name = "hasBGM*/
+    private String hasBGM;
+
+    /**"方案:1是双目,2是转台,3是六目", name = "cameraType*/
+    private int cameraType;
+
+    /**"是否公开,0公开,1加密", name = "isPublic*/
+    private int isPublic;
+
+    /**"要gps定位", name = "gps*/
+    private String gps;
+
+    /**"相机的Mac地址", name = "childName*/
+    private String childName;
+
+    /**"用户名", name = "userName*/
+    private String userName;
+
+    /**"昵称", name = "nickName*/
+    private String nickName;
+
+    /**"浏览次数", name = "viewCount*/
+    private int viewCount;
+
+    /**"场景的链接地址", name = "webSite*/
+    private String webSite;
+
+    /**"原始的大场景数据", name = "dataSource*/
+    private String dataSource;
+
+    /**"0表示未付款,1表示付款了,-1表示欠费(八目场景指锁住),-2表示临时空间(八目场景)", name = "payStatus*/
+    private int payStatus;
+
+    /**"手机id", name = "phoneId*/
+    private String phoneId;
+
+    /**"大场景序号", name = "num*/
+    private String num;
+
+    /**"1表示推荐,0表示正常", name = "recommend*/
+    private int recommend;
+
+    /**"表示缩略图是否存在", name = "thumbStatus*/
+    private int thumbStatus;
+
+    /**"要上传的热点的id集合,用逗号隔开", name = "hotsIds*/
+    private String hotsIds;
+
+    /**"大场景初始点的id", name = "initialPointId*/
+    private String initialPointId;
+
+    /**"风格", name = "style*/
+    private int style;
+
+    /**"方案:1是双目,2是转台,3是六目", name = "sceneScheme*/
+    private int sceneScheme;
+
+    /**"背景音乐名称", name = "bgMusic*/
+    private String bgMusic;
+
+    /**"用户id", name = "userId*/
+    private Long userId;
+
+    /**"相机id", name = "cameraId*/
+    private Long cameraId;
+
+    /**"使用容量", name = "space*/
+    private BigInteger space;
+
+    /**"创建日期时间戳", name = "createDate*/
+    private Long createDate;
+
+    /**"分享的logo和生成二维码的logo", name = "shareLogo*/
+    private String shareLogo;
+
+    /**"小地图浏览", name = "mapVisi*/
+    private int mapVisi;
+
+    /**"自动导览", name = "tourVisi*/
+    private int tourVisi;
+
+    /**"vr模式", name = "vrVisi*/
+    private int vrVisi;
+
+
+    /**
+     * 普通录屏文件地址
+     */
+    private String screencapVoiceSrc;
+
+    /**
+     * 录音文件地址
+     */
+    private String screencapVoiceSound;
+
+    /**
+     * 同步录音文件地址
+     */
+    private String screencapVoiceSoundsync;
+
+    /**
+     * 选择的类型,sound为screencapVoiceSound,file为screencapVoiceSrc
+     */
+    private String screencapVoiceType;
+
+    /**
+     * 录屏文件地址
+     */
+    private String playData;
+
+
+    /**
+     * 重新建模的版本
+     */
+    private int floorEditVer;
+
+    /**
+     * 正式发布重新建模的版本
+     */
+    private int floorPublishVer;
+
+    /**
+     * 录屏图片
+     */
+    private String screencapThumb;
+
+    /**
+     * cad平面图参数
+     */
+    private String cadInfo;
+
+    /**
+     * cad平面图参数
+     */
+    private String floorPlanPng;
+
+    /**
+     * 展示页面是否显示标尺
+     */
+    private int rulerVisi;
+
+    /**
+     * 展示页面cad图在平面图是否显示
+     */
+    private int cadImgVisi;
+
+    private int panoVisi;
+
+    private int m2dVisi;
+
+    private int m3dVisi;
+
+    private int measureVisi;
+
+    private String videos;
+
+    private String snCode;
+
+    private String overlay;
+
+    private Integer showLogoBottom;
+
+    private String recStatus;
+
+    private Integer needKey;
+
+    private String buildType;
+
+    private Integer imagesVersion;
+
+    private String bgMusicName;
+
+    /**
+     * 协作者用户id
+     */
+    private String cooperationUserId;
+
+    private String cooperationUserName;
+
+    private Integer sceneSource;
+
+    private boolean jumpScene;
+
+    /**
+     * 服务器的服务商
+     */
+    private String ecs;
+
+    /**
+     * 场景来源方式,为app提供,0相机,1用户,2协作者
+     */
+    private Integer sceneSourceType;
+
+    /**
+     * 随心装场景码
+     */
+    private String vrNum;
+
+    /**
+     * 随心装场景码
+     */
+    private String vrThumb;
+
+    /**
+     * 旋转角度
+     */
+    private String floorPlanAngle;
+
+    private Integer isFolder;
+
+    private String videosUser;
+
+    private Integer isUpgrade;
+}

+ 39 - 0
src/main/java/com/fdkankan/app/vo/response/SceneVo.java

@@ -0,0 +1,39 @@
+package com.fdkankan.app.vo.response;
+
+import com.fdkankan.app.util.DateUserUtil;
+import lombok.Data;
+
+@Data
+public class SceneVo {
+    private Long id;
+    private Long cameraId;
+    private String childName;
+    private Long cooperationUserId;
+    private String cooperationUserName;         //协作者
+    private Integer isFolder;                   //0 场景,1文件夹
+    private String num;
+    private String sceneName;
+    private String sceneDec;
+    private String snCode;
+    private Integer status;
+    private Integer payStatus;
+    private String thumb;
+    private String webSite;
+    private Integer isUpgrade;
+    private String createTime;
+    private Integer viewCount;
+
+    //文件夹相关
+    private String createTimeStr;
+    private String name;
+    private Long parentId;
+    private Long sceneNum;
+    private String type;
+
+    private Integer sceneSourceType;
+    private Long userId;
+
+    public String getCreateTime() {
+        return DateUserUtil.getDayTime(createTime);
+    }
+}

+ 10 - 1
src/main/java/com/fdkankan/app/vo/response/UserVo.java

@@ -9,7 +9,16 @@ public class UserVo {
     private String head;                        //头像
     private String nickName;                    //昵称
     private String email;                       //邮箱
+    private Integer availableSpace;             //可用空间
     private Long cameraCount;                //已绑相机
-    private Long sceneCount;                //已绑相机
+    private Integer downloadNum;                //已下载场景总数
+    private Integer downloadNumTotal;           //总的下载场景总数
+    private Long incrementBindNum;           //已绑定的会员权益数量
+    private Long incrementNum;               //会员权益数量
 
+    private Long cameraId;
+    private Integer cameraLogin;
+
+    private Long sceneCount;
+    private Long expansionTotal;
 }

+ 40 - 2
src/main/resources/bootstrap.yml

@@ -1,5 +1,43 @@
 spring:
-  profiles:
-    active: dev
+  application:
+    name: 4dkankan-center-app
+  cloud:
+    nacos:
+      config:
+        server-addr: 120.24.144.164:8848
+        file-extension: yaml
+        namespace: 4dkankan-qczj
+        extension-configs:
+          - data-id: 4dkankan-center-app.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+        shared-configs:
+          - data-id: common-db-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-redis-config-52.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-rabbitmq-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: other-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
+          - data-id: common-upload-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+      discovery:
+        server-addr: ${spring.cloud.nacos.config.server-addr}
+        namespace: 4dkankan-qczj
+
+
+
+
+
 
 

+ 129 - 61
src/main/resources/logback-spring.xml

@@ -16,7 +16,7 @@
 	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
 	<!-- 彩色日志格式 -->
 	<property name="CONSOLE_LOG_PATTERN"
-			  value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
+		value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
 
 	<!--输出到控制台 -->
 	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
@@ -38,7 +38,7 @@
 		<file>${log.path}/log_debug.log</file>
 		<!--日志文件输出格式 -->
 		<encoder>
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[%L] - %msg%n</pattern>
 			<charset>UTF-8</charset> <!-- 设置字符集 -->
 		</encoder>
 		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
@@ -60,13 +60,23 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_DEBUG_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="DEBUG_FILE"/>
+	</appender>
+
 	<!-- 时间滚动输出 level为 INFO 日志 -->
 	<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
 		<file>${log.path}/log_info.log</file>
 		<!--日志文件输出格式 -->
 		<encoder>
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[%L] - %msg%n</pattern>
 			<charset>UTF-8</charset>
 		</encoder>
 		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
@@ -88,13 +98,23 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_INFO_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="INFO_FILE"/>
+	</appender>
+
 	<!-- 时间滚动输出 level为 WARN 日志 -->
 	<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
 		<file>${log.path}/log_warn.log</file>
 		<!--日志文件输出格式 -->
 		<encoder>
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[%L] - %msg%n</pattern>
 			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
 		</encoder>
 		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
@@ -115,6 +135,16 @@
 		</filter>
 	</appender>
 
+	<appender name="ASYNC_WARN_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="WARN_FILE"/>
+	</appender>
+
 
 	<!-- 时间滚动输出 level为 ERROR 日志 -->
 	<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -122,7 +152,7 @@
 		<file>${log.path}/log_error.log</file>
 		<!--日志文件输出格式 -->
 		<encoder>
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[%L] - %msg%n</pattern>
 			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
 		</encoder>
 		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
@@ -143,84 +173,54 @@
 		</filter>
 	</appender>
 
-	<appender name="PROGRAM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<!-- 正在记录的日志文件的路径及文件名 -->
-		<file>${log.path}/program/log_program.log</file>
-		<!--日志文件输出格式 -->
-		<encoder>
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
-		</encoder>
-		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${log.path}/program/log-program-%d{yyyy-MM-dd}.%i.log
-			</fileNamePattern>
-			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-				<maxFileSize>100MB</maxFileSize>
-			</timeBasedFileNamingAndTriggeringPolicy>
-			<!--日志文件保留天数 -->
-			<maxHistory>15</maxHistory>
-		</rollingPolicy>
-		<!-- 此日志文件只记录ERROR级别的 -->
-		<filter class="ch.qos.logback.classic.filter.LevelFilter">
-			<onMatch>ACCEPT</onMatch>
-			<onMismatch>DENY</onMismatch>
-		</filter>
+	<appender name="ASYNC_ERROR_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
+		<appender-ref ref="ERROR_FILE"/>
 	</appender>
-	<logger name="programLog" level="INFO" additivity="true">
-		<appender-ref ref="PROGRAM_FILE"/>
-	</logger>
+
 
 	<appender name="VISIT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 		<!-- 正在记录的日志文件的路径及文件名 -->
 		<file>${log.path}/visit/log_visit.log</file>
 		<!--日志文件输出格式 -->
 		<encoder>
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[%L] - %msg%n</pattern>
 			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
 		</encoder>
 		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
 		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 			<fileNamePattern>${log.path}/visit/log-visit-%d{yyyy-MM-dd}.%i.log
 			</fileNamePattern>
+
 			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
 				<maxFileSize>100MB</maxFileSize>
 			</timeBasedFileNamingAndTriggeringPolicy>
 			<!--日志文件保留天数 -->
 			<maxHistory>15</maxHistory>
 		</rollingPolicy>
-		<!-- 此日志文件只记录ERROR级别的 -->
+		<!-- 此日志文件只记录info级别的 -->
 		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>info</level>
 			<onMatch>ACCEPT</onMatch>
 			<onMismatch>DENY</onMismatch>
 		</filter>
 	</appender>
-	<logger name="visitLog" level="INFO" additivity="true">
+	<appender name="ASYNC_VISIT_FILE" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">
+		<!--默认情况下,当BlockingQueue还有20%容量,他将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event。为了保持所有的events,设置该值为0。-->
+		<discardingThreshold>0</discardingThreshold>
+		<!--queue配置最大容量为256个events。如果队列被填满,应用程序线程被阻止记录新的events,直到工作线程有机会来转发一个或多个events。
+		因此队列深度需要根据业务场景进行相应的测试,做出相应的更改,以达到较好的性能。-->
+		<queueSize>2048</queueSize>
+		<includeCallerData>false</includeCallerData>
 		<appender-ref ref="VISIT_FILE"/>
-	</logger>
-
-
-	<!--  连接时长  -->
-	<appender name="timeLogger" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${log.path}/timeLogger.log</file>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<level>DEBUG</level>
-		</filter>
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-			<fileNamePattern>${log.path}/timeLogger/timeLogger-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
-			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-				<maxFileSize>100MB</maxFileSize>
-			</timeBasedFileNamingAndTriggeringPolicy>
-			<!--日志文件保留天数-->
-			<maxHistory>10</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
-			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
-		</encoder>
 	</appender>
-	<logger name="timeLogger" additivity="false" level="DEBUG">
-		<appender-ref ref="timeLogger"/>
+	<logger name="visitLog" level="INFO" additivity="false">
+		<appender-ref ref="ASYNC_VISIT_FILE"/>
 	</logger>
 
 	<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE,
@@ -232,12 +232,80 @@
 
 	<root level="info">
 		<appender-ref ref="CONSOLE" />
-		<appender-ref ref="DEBUG_FILE" />
-		<appender-ref ref="INFO_FILE" />
-		<appender-ref ref="WARN_FILE" />
-		<appender-ref ref="ERROR_FILE" />
+		<appender-ref ref="ASYNC_DEBUG_FILE" />
+		<appender-ref ref="ASYNC_INFO_FILE" />
+		<appender-ref ref="ASYNC_WARN_FILE" />
+		<appender-ref ref="ASYNC_ERROR_FILE" />
 	</root>
 
+	<springProfile name="dev">
+		<root level="info">
+			<appender-ref ref="CONSOLE" />
+			<appender-ref ref="ASYNC_DEBUG_FILE" />
+			<appender-ref ref="ASYNC_INFO_FILE" />
+			<appender-ref ref="ASYNC_WARN_FILE" />
+			<appender-ref ref="ASYNC_ERROR_FILE" />
+		</root>
+	</springProfile>
+
+	<springProfile name="test">
+		<root level="info">
+			<appender-ref ref="CONSOLE" />
+			<appender-ref ref="ASYNC_DEBUG_FILE" />
+			<appender-ref ref="ASYNC_INFO_FILE" />
+			<appender-ref ref="ASYNC_WARN_FILE" />
+			<appender-ref ref="ASYNC_ERROR_FILE" />
+		</root>
+	</springProfile>
+
+	<springProfile name="pro">
+		<root level="info">
+			<appender-ref ref="CONSOLE" />
+			<appender-ref ref="ASYNC_DEBUG_FILE" />
+			<appender-ref ref="ASYNC_INFO_FILE" />
+			<appender-ref ref="ASYNC_WARN_FILE" />
+			<appender-ref ref="ASYNC_ERROR_FILE" />
+		</root>
+	</springProfile>
+
+<!--	<springProfile name="dev">-->
+<!--		<root level="info">-->
+<!--			<appender-ref ref="CONSOLE" />-->
+<!--			<appender-ref ref="DEBUG_FILE" />-->
+<!--			<appender-ref ref="INFO_FILE" />-->
+<!--			<appender-ref ref="WARN_FILE" />-->
+<!--			<appender-ref ref="ERROR_FILE" />-->
+<!--			<appender-ref ref="ALL_FILE" />-->
+<!--		</root>-->
+<!--		&lt;!&ndash; <logger name="com.xusanduo.demo" level="debug"/>开发环境, 指定某包日志为debug级 &ndash;&gt;-->
+<!--	</springProfile>-->
+
+<!--	<springProfile name="test">-->
+<!--		<root level="info">-->
+<!--			<appender-ref ref="CONSOLE" />-->
+<!--			<appender-ref ref="DEBUG_FILE" />-->
+<!--			<appender-ref ref="INFO_FILE" />-->
+<!--			<appender-ref ref="WARN_FILE" />-->
+<!--			<appender-ref ref="ERROR_FILE" />-->
+<!--			<appender-ref ref="ALL_FILE" />-->
+<!--		</root>-->
+<!--		&lt;!&ndash; <logger name="com.xusanduo.demo" level="info"/> 测试环境, 指定某包日志为info级 &ndash;&gt;-->
+<!--	</springProfile>-->
+
+<!--	<springProfile name="pro">-->
+<!--		<root level="error">-->
+<!--			&lt;!&ndash; 生产环境最好不配置console写文件 &ndash;&gt;-->
+<!--			<appender-ref ref="CONSOLE" />-->
+<!--			<appender-ref ref="DEBUG_FILE" />-->
+<!--			<appender-ref ref="INFO_FILE" />-->
+<!--			<appender-ref ref="WARN_FILE" />-->
+<!--			<appender-ref ref="ERROR_FILE" />-->
+<!--			<appender-ref ref="ALL_FILE" />-->
+<!--		</root>-->
+<!--		&lt;!&ndash; <logger name="com.xusanduo.demo" level="warn"/> 生产环境, 指定某包日志为warn级 &ndash;&gt;-->
+<!--		&lt;!&ndash; <logger name="com.xusanduo.demo.MyApplication" level="info"/> 特定某个类打印info日志, 比如application启动成功后的提示语 &ndash;&gt;-->
+<!--	</springProfile>-->
+
 	<!--生产环境:输出到文件 -->
 	<!--<springProfile name="pro"> -->
 	<!--<root level="info"> -->

+ 8 - 0
src/main/resources/mapper/app/CameraDetailMapper.xml

@@ -2,4 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.app.mapper.ICameraDetailMapper">
 
+    <select id="getListByUserAndType" resultType="com.fdkankan.app.vo.response.CameraAppVo">
+        SELECT * FROM t_camera_detail d
+        LEFT JOIN t_camera c on d.camera_id = c.id
+        LEFT JOIN t_goods g on d.goods_id = g.id
+        WHERE d.rec_status = 'A'
+        and d.user_id = #{userId}
+        and d.goods_id = #{cameraType}
+    </select>
 </mapper>

+ 9 - 0
src/main/resources/mapper/app/CameraMapper.xml

@@ -2,4 +2,13 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.app.mapper.ICameraMapper">
 
+    <select id="getCameraInfo" resultType="com.fdkankan.app.vo.response.CameraAppVo">
+        select * from  t_camera c
+        left join t_camera_detail d on c.id = d.camera_id
+        left join t_goods g on d.goods_id = g.id
+        left join t_user u on d.user_id = u.id
+        where c.rec_status = 'A'
+        and c.child_name = #{childName}
+        and c.child_password = #{childPassword}
+    </select>
 </mapper>

+ 10 - 0
src/main/resources/mapper/app/ExpansionOrderMapper.xml

@@ -0,0 +1,10 @@
+<?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.app.mapper.IExpansionOrderMapper">
+
+    <select id="getCount" resultType="java.lang.Long">
+        select count(*) from t_expansion_order o left join t_camera_detail d on o.camera_id = d.camera_id
+        where o.rec_status = 'A'
+        and o.user_id = #{userId} and d.goods_id = #{cameraType}
+    </select>
+</mapper>

+ 5 - 0
src/main/resources/mapper/app/GoodsMapper.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.app.mapper.IGoodsMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/app/IncrementOrderMapper.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.app.mapper.IIncrementOrderMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/app/SceneCooperationMapper.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.app.mapper.ISceneCooperationMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/app/SceneEditInfoMapper.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.app.mapper.ISceneEditInfoMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/app/ScenePlusMapper.xml

@@ -2,4 +2,9 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.app.mapper.IScenePlusMapper">
 
+    <select id="getCountByUserId" resultType="java.lang.Long">
+         select count(*) from t_scene_plus s left join t_camera_detail d on s.camera_id = d.camera_id
+        where s.rec_status = 'A'
+         and s.user_id = #{userId} and d.goods_id = #{cameraType}
+    </select>
 </mapper>

+ 5 - 0
src/main/resources/mapper/app/SceneProEditMapper.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.app.mapper.ISceneProEditMapper">
+
+</mapper>

+ 71 - 0
src/main/resources/mapper/app/SceneProMapper.xml

@@ -2,4 +2,75 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.app.mapper.ISceneProMapper">
 
+    <select id="findSceneProNumByCameraIds" resultType="com.fdkankan.app.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.app.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>
+
+
+    <select id="getCountByUserId" resultType="java.lang.Long">
+        select count(*) from t_scene_pro s left join t_camera_detail d on s.camera_id = d.camera_id
+        where s.rec_status = 'A' and s.is_upgrade = 0
+        and s.user_id = #{userId} and d.goods_id = #{cameraType}
+    </select>
+    <select id="pageList" resultType="com.fdkankan.app.vo.response.SceneVo">
+        SELECT p.id ,null as name ,0 as isFolder,null as type,null as parentId ,p.create_time,num,scene_name,scene_dec,
+        p.status,pay_status,thumb,web_site,0 as is_upgrade,sn_code,view_count,u.user_name as cooperationUserName ,u.id as cooperationUserId,p.camera_id,p.user_id
+        FROM t_scene_pro p
+        <include refid="sceneJoinCamera"></include>
+        WHERE is_upgrade = 0 and  p.rec_status = 'A'
+        <include refid="commonWhere"></include>
+        <include refid="commonSceneWhere"></include>
+        <if test="param.sceneName !=null and param.sceneName !=''">
+            and  p.scene_name like CONCAT('%',#{param.sceneName},'%')
+        </if>
+        UNION
+        SELECT p.id as id ,null as name ,0 as isFolder,null as type,null as parentId,p.create_time ,num,title as scene_name,description as scene_dec,
+        scene_status as status,pay_status,thumb,web_site,1 as is_upgrade,sn_code,view_count,u.user_name as cooperationUserName,u.id as cooperationUserId,p.camera_id,p.user_id
+        FROM t_scene_plus p
+        LEFT JOIN t_scene_plus_ext e on p.id = e.plus_id
+        <include refid="sceneJoinCamera"></include>
+        WHERE  p.rec_status = 'A'
+        <include refid="commonWhere"></include>
+        <include refid="commonSceneWhere"></include>
+        <if test="param.sceneName !=null and param.sceneName !=''">
+            and  p.title like CONCAT('%',#{param.sceneName},'%')
+        </if>
+        ORDER BY create_time desc
+
+    </select>
+
+
+    <sql id="sceneJoinCamera">
+        LEFT JOIN t_camera c on p.camera_id = c.id
+        LEFT JOIN t_scene_cooperation coo on p.num = coo.scene_num
+		LEFT JOIN t_user u on coo.user_id = u.id
+    </sql>
+
+    <sql id="commonWhere">
+        <if test="param.userId != null ">
+            and p.user_id =#{param.userId}
+        </if>
+    </sql>
+
+    <sql id="commonSceneWhere">
+        <if test="param.snCode !=null and param.snCode !=''">
+            and c.sn_code like CONCAT('%',#{param.snCode},'%')
+        </if>
+        and coo.rec_status ='A'
+    </sql>
 </mapper>

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

+ 16 - 0
src/main/resources/mapper/app/UserIncrementMapper.xml

@@ -0,0 +1,16 @@
+<?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.app.mapper.IUserIncrementMapper">
+
+    <select id="getCount" resultType="java.lang.Long">
+        select count(*) from t_user_increment i left join t_camera_detail d on i.camera_id = d.camera_id
+        where i.rec_status = 'A'  and i.user_id = #{userId}
+        <if test="isBind == 1">
+            and d.goods_id = #{cameraType}
+       </if>
+        <if test="isBind == 0">
+            and i.camera_id is null
+        </if>
+
+    </select>
+</mapper>