lyhzzz 3 سال پیش
والد
کامیت
5b13172a69
47فایلهای تغییر یافته به همراه1676 افزوده شده و 3 حذف شده
  1. 2 0
      src/main/java/com/fdkankan/ucenter/common/RedisKeyUtil.java
  2. 53 0
      src/main/java/com/fdkankan/ucenter/config/OriginFilter.java
  3. 41 0
      src/main/java/com/fdkankan/ucenter/config/WebAppConfig.java
  4. 56 0
      src/main/java/com/fdkankan/ucenter/controller/app/AppCameraController.java
  5. 1 1
      src/main/java/com/fdkankan/ucenter/controller/AppController.java
  6. 64 0
      src/main/java/com/fdkankan/ucenter/controller/app/AppSceneController.java
  7. 59 0
      src/main/java/com/fdkankan/ucenter/controller/app/AppUserController.java
  8. 26 0
      src/main/java/com/fdkankan/ucenter/controller/app/SceneController.java
  9. 61 0
      src/main/java/com/fdkankan/ucenter/interceptor/AppInterceptor.java
  10. 60 0
      src/main/java/com/fdkankan/ucenter/interceptor/UcenterInterceptor.java
  11. 5 0
      src/main/java/com/fdkankan/ucenter/mapper/ICameraDetailMapper.java
  12. 6 0
      src/main/java/com/fdkankan/ucenter/mapper/ICameraMapper.java
  13. 3 0
      src/main/java/com/fdkankan/ucenter/mapper/IExpansionOrderMapper.java
  14. 7 0
      src/main/java/com/fdkankan/ucenter/mapper/IScenePlusMapper.java
  15. 4 0
      src/main/java/com/fdkankan/ucenter/mapper/ISceneProMapper.java
  16. 2 0
      src/main/java/com/fdkankan/ucenter/mapper/IUserIncrementMapper.java
  17. 3 0
      src/main/java/com/fdkankan/ucenter/service/ICameraDetailService.java
  18. 5 0
      src/main/java/com/fdkankan/ucenter/service/ICameraService.java
  19. 2 0
      src/main/java/com/fdkankan/ucenter/service/IExpansionOrderService.java
  20. 2 0
      src/main/java/com/fdkankan/ucenter/service/IScenePlusExtService.java
  21. 2 0
      src/main/java/com/fdkankan/ucenter/service/IScenePlusService.java
  22. 12 0
      src/main/java/com/fdkankan/ucenter/service/ISceneProService.java
  23. 4 0
      src/main/java/com/fdkankan/ucenter/service/IUserIncrementService.java
  24. 132 0
      src/main/java/com/fdkankan/ucenter/service/impl/AppCameraService.java
  25. 224 0
      src/main/java/com/fdkankan/ucenter/service/impl/AppSceneService.java
  26. 1 0
      src/main/java/com/fdkankan/ucenter/service/impl/AppService.java
  27. 66 0
      src/main/java/com/fdkankan/ucenter/service/impl/AppUserService.java
  28. 6 0
      src/main/java/com/fdkankan/ucenter/service/impl/CameraDetailServiceImpl.java
  29. 17 0
      src/main/java/com/fdkankan/ucenter/service/impl/CameraServiceImpl.java
  30. 5 0
      src/main/java/com/fdkankan/ucenter/service/impl/ExpansionOrderServiceImpl.java
  31. 1 1
      src/main/java/com/fdkankan/ucenter/service/impl/LoginService.java
  32. 12 0
      src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusExtServiceImpl.java
  33. 5 0
      src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusServiceImpl.java
  34. 121 1
      src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java
  35. 16 0
      src/main/java/com/fdkankan/ucenter/service/impl/UserIncrementServiceImpl.java
  36. 19 0
      src/main/java/com/fdkankan/ucenter/vo/request/AppSceneParam.java
  37. 39 0
      src/main/java/com/fdkankan/ucenter/vo/response/AppSceneVo.java
  38. 87 0
      src/main/java/com/fdkankan/ucenter/vo/response/CameraAppVo.java
  39. 79 0
      src/main/java/com/fdkankan/ucenter/vo/response/GoodsVo.java
  40. 272 0
      src/main/java/com/fdkankan/ucenter/vo/response/SceneInfoVo.java
  41. 2 0
      src/main/java/com/fdkankan/ucenter/vo/response/UserVo.java
  42. 8 0
      src/main/resources/mapper/ucenter/CameraDetailMapper.xml
  43. 9 0
      src/main/resources/mapper/ucenter/CameraMapper.xml
  44. 6 0
      src/main/resources/mapper/ucenter/ExpansionOrderMapper.xml
  45. 52 0
      src/main/resources/mapper/ucenter/ScenePlusMapper.xml
  46. 5 0
      src/main/resources/mapper/ucenter/SceneProMapper.xml
  47. 12 0
      src/main/resources/mapper/ucenter/UserIncrementMapper.xml

+ 2 - 0
src/main/java/com/fdkankan/ucenter/common/RedisKeyUtil.java

@@ -8,4 +8,6 @@ public class RedisKeyUtil {
     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:";
+
 }

+ 53 - 0
src/main/java/com/fdkankan/ucenter/config/OriginFilter.java

@@ -0,0 +1,53 @@
+package com.fdkankan.ucenter.config;
+
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+
+@Component("originFilter")
+@ServletComponentScan
+@WebFilter(urlPatterns = "/*", filterName = "shiroLoginFilter")
+public class OriginFilter implements Filter {
+
+	private FilterConfig config = null;
+
+	@Override
+	public void init(FilterConfig config) throws ServletException {
+		this.config = config;
+	}
+
+	@Override
+	public void destroy() {
+		this.config = null;
+	}
+
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		//指定允许其他域名访问
+		response.setHeader("Access-Control-Allow-Origin", "*");
+		// 允许请求的方法
+		response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,PUT");
+		// 多少秒内,不需要再发送预检验请求,可以缓存该结果
+		response.setHeader("Access-Control-Max-Age", "3600");
+		// 表明它允许跨域请求包含xxx头
+		response.setHeader("Access-Control-Allow-Headers",
+				"Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires,userAgent,User-Agent,version, " +
+				" Content-Type, content-type,X-E4M-With,Authorization,token,authorization");
+		response.setHeader("Access-Control-Allow-Credentials", "true");
+		if (request.getMethod().equals("OPTIONS")) {
+			response.setStatus(200);
+			response.getWriter().write("OPTIONS returns OK");
+			return;
+		}
+		filterChain.doFilter(servletRequest, response);
+	}
+}
+

+ 41 - 0
src/main/java/com/fdkankan/ucenter/config/WebAppConfig.java

@@ -0,0 +1,41 @@
+package com.fdkankan.ucenter.config;
+
+import com.fdkankan.ucenter.interceptor.AppInterceptor;
+import com.fdkankan.ucenter.interceptor.UcenterInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+@Configuration
+public class WebAppConfig implements WebMvcConfigurer {
+
+	@Autowired
+	UcenterInterceptor ucenterInterceptor;
+	@Autowired
+	AppInterceptor appInterceptor;
+
+	@Override
+	public void addCorsMappings(CorsRegistry registry) {
+		registry.addMapping("/**").allowCredentials(true).allowedHeaders("*").allowedOrigins("*").allowedMethods("*");
+
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		registry.addInterceptor(ucenterInterceptor).addPathPatterns("/**")
+				.excludePathPatterns("/**/api/sso/**","/**/api/app/**");
+		registry.addInterceptor(appInterceptor).addPathPatterns("/**/api/app/**");
+		WebMvcConfigurer.super.addInterceptors(registry);
+	}
+
+	@Override
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+		WebMvcConfigurer.super.addResourceHandlers(registry);
+	}
+
+}
+

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

@@ -0,0 +1,56 @@
+package com.fdkankan.ucenter.controller.app;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.service.impl.AppCameraService;
+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 AppCameraController {
+
+    @Autowired
+    private AppCameraService appCameraService;
+
+    @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(appCameraService.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(appCameraService.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");
+        appCameraService.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(appCameraService.getCameraInfo(childName,childPassword));
+    }
+}

+ 1 - 1
src/main/java/com/fdkankan/ucenter/controller/AppController.java

@@ -1,4 +1,4 @@
-package com.fdkankan.ucenter.controller;
+package com.fdkankan.ucenter.controller.app;
 
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.util.JwtUtil;

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

@@ -0,0 +1,64 @@
+package com.fdkankan.ucenter.controller.app;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.service.ISceneProService;
+import com.fdkankan.ucenter.service.impl.AppSceneService;
+import com.fdkankan.ucenter.service.impl.AppService;
+import com.fdkankan.ucenter.vo.request.AppSceneParam;
+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
+    AppSceneService appSceneService;
+    /**
+     * 获取云端场景
+     */
+    @PostMapping("/getAppAllSceneByPage")
+    public Result getAppAllSceneByPage(@RequestBody AppSceneParam param){
+        return Result.success( appSceneService.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(appSceneService.getSceneStatusByUnicode(appUserName,appPassword,unicode));
+    }
+
+    /**
+     * 通知服务器音频上传成功
+     * screencapMusic
+     * originalFileName     音频文件在阿里云的地址Url
+     * sceneNum             场景码
+     */
+    @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");
+        appSceneService.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");
+        appSceneService.deleteForCameraName(cameraId,sceneNum);
+        return Result.success();
+    }
+}

+ 59 - 0
src/main/java/com/fdkankan/ucenter/controller/app/AppUserController.java

@@ -0,0 +1,59 @@
+package com.fdkankan.ucenter.controller.app;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.service.IUserService;
+import com.fdkankan.ucenter.service.impl.AppService;
+import com.fdkankan.ucenter.service.impl.AppUserService;
+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/user")
+public class AppUserController {
+
+    @Autowired
+    AppUserService appUserService;
+
+    /**
+     * 获取用户信息
+     * 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( appUserService.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");
+        appUserService.updateNickName(nickName,phoneNum);
+        return Result.success(nickName );
+    }
+    /**
+     * 修改用户头像
+     * phoneNum  用户名
+     * head      头像
+     */
+    @PostMapping("/uploadHead")
+    public Result uploadHead(@RequestBody JSONObject param) throws Exception {
+        String phoneNum = param.get("phoneNum") == null ? null : param.getString("phoneNum");
+        String head = param.get("head") == null ? null : param.getString("head");
+        appUserService.uploadHead(phoneNum,head);
+        return Result.success();
+    }
+
+}

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

@@ -0,0 +1,26 @@
+package com.fdkankan.ucenter.controller.app;
+
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.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;
+
+    /**
+     * 获取指定场景信息
+     * @param num 场景码
+     */
+    @GetMapping("/getInfo")
+    public Result getInfo(@RequestParam(required = false) String num){
+        return Result.success( sceneProService.getInfo(num) );
+    }
+}

+ 61 - 0
src/main/java/com/fdkankan/ucenter/interceptor/AppInterceptor.java

@@ -0,0 +1,61 @@
+package com.fdkankan.ucenter.interceptor;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.ucenter.common.RedisKeyUtil;
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.constant.LoginConstant;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+@Slf4j
+public class AppInterceptor implements HandlerInterceptor {
+
+	@Autowired
+	private RedisUtil redisUtil;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		response.setContentType("text/html;charset=UTF-8");
+		String token = request.getHeader("token");
+		if(StringUtils.isEmpty(token)){
+			this.needLogin(request,response);
+			return false;
+		}
+		try {
+			String username = JwtUtil.getUsername(token);
+			String redisKey = RedisKeyUtil.PREFIX_CACHE_CAMERA + username;
+			if(redisUtil.hasKey(redisKey)){
+				redisUtil.expire(redisKey,21800L);
+				return true;
+			}
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		this.needLogin(request,response);
+		return false;
+	}
+
+	private void needLogin(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			String result = JSONObject.toJSONString(Result.failure(LoginConstant.FAILURE_CODE_3004, LoginConstant.FAILURE_MSG_3004));
+			response.getWriter().append(result);
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
+
+}
+

+ 60 - 0
src/main/java/com/fdkankan/ucenter/interceptor/UcenterInterceptor.java

@@ -0,0 +1,60 @@
+package com.fdkankan.ucenter.interceptor;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.ucenter.common.RedisKeyUtil;
+import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.constant.LoginConstant;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+@Slf4j
+public class UcenterInterceptor implements HandlerInterceptor {
+
+	@Autowired
+	private RedisUtil redisUtil;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		response.setContentType("text/html;charset=UTF-8");
+		String token = request.getHeader("token");
+		if(StringUtils.isEmpty(token)){
+			this.needLogin(request,response);
+			return false;
+		}
+		try {
+			String redisKey = String.format(RedisKey.TOKEN_V3,token);
+			if(redisUtil.hasKey(redisKey)){
+				redisUtil.expire(redisKey,2 * 60 * 60);
+				return true;
+			}
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		this.needLogin(request,response);
+		return false;
+	}
+
+	private void needLogin(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			String result = JSONObject.toJSONString(Result.failure(LoginConstant.FAILURE_CODE_3004, LoginConstant.FAILURE_MSG_3004));
+			response.getWriter().append(result);
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
+
+}
+

+ 5 - 0
src/main/java/com/fdkankan/ucenter/mapper/ICameraDetailMapper.java

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

+ 6 - 0
src/main/java/com/fdkankan/ucenter/mapper/ICameraMapper.java

@@ -4,8 +4,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.ucenter.entity.Camera;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fdkankan.ucenter.vo.request.CameraParam;
+import com.fdkankan.ucenter.vo.response.CameraAppVo;
 import com.fdkankan.ucenter.vo.response.CameraVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -19,4 +23,6 @@ import org.apache.ibatis.annotations.Mapper;
 public interface ICameraMapper extends BaseMapper<Camera> {
 
     Page<CameraVo> pageList(Page<CameraVo> page, CameraParam param);
+
+    List<CameraAppVo> getCameraInfo(@Param("childName") String childName, @Param("childPassword") String childPassword);
 }

+ 3 - 0
src/main/java/com/fdkankan/ucenter/mapper/IExpansionOrderMapper.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fdkankan.ucenter.vo.request.VirtualOrderParam;
 import com.fdkankan.ucenter.vo.response.ExpansionOrderVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -19,4 +20,6 @@ import org.apache.ibatis.annotations.Mapper;
 public interface IExpansionOrderMapper extends BaseMapper<ExpansionOrder> {
 
     Page<ExpansionOrderVo> pageList(Page<ExpansionOrderVo> page, VirtualOrderParam param);
+
+    Long getCount(@Param("userId") Long userId, @Param("cameraType") Integer cameraType);
 }

+ 7 - 0
src/main/java/com/fdkankan/ucenter/mapper/IScenePlusMapper.java

@@ -1,8 +1,12 @@
 package com.fdkankan.ucenter.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.ucenter.entity.ScenePlus;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.ucenter.vo.request.AppSceneParam;
+import com.fdkankan.ucenter.vo.response.AppSceneVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -15,4 +19,7 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
 
+    Page<AppSceneVo> pageList(Page<AppSceneVo> page, AppSceneParam param);
+
+    Long getCountByUserId(@Param("userId") Long userId, @Param("cameraType") Integer cameraType);
 }

+ 4 - 0
src/main/java/com/fdkankan/ucenter/mapper/ISceneProMapper.java

@@ -3,7 +3,9 @@ package com.fdkankan.ucenter.mapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.ucenter.entity.ScenePro;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.ucenter.vo.request.AppSceneParam;
 import com.fdkankan.ucenter.vo.request.SceneParam;
+import com.fdkankan.ucenter.vo.response.AppSceneVo;
 import com.fdkankan.ucenter.vo.response.GroupByCount;
 import com.fdkankan.ucenter.vo.response.SceneVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -26,4 +28,6 @@ public interface ISceneProMapper extends BaseMapper<ScenePro> {
     List<GroupByCount> findScenePlusNumByCameraIds(@Param("cameraIds") List<Long> cameraIdList);
 
     Page<SceneVo> pageListAndFolder(Page<SceneVo>page,SceneParam param);
+
+    Long getCountByUserId(@Param("userId") Long userId, @Param("cameraType") Integer cameraType);
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/mapper/IUserIncrementMapper.java

@@ -3,6 +3,7 @@ package com.fdkankan.ucenter.mapper;
 import com.fdkankan.ucenter.entity.UserIncrement;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -15,4 +16,5 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface IUserIncrementMapper extends BaseMapper<UserIncrement> {
 
+    Long getCount(@Param("userId") Long userId, @Param("cameraType") Integer cameraType, @Param("isBind") Integer isBind);
 }

+ 3 - 0
src/main/java/com/fdkankan/ucenter/service/ICameraDetailService.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.service;
 
 import com.fdkankan.ucenter.entity.CameraDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.ucenter.vo.response.CameraAppVo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -31,4 +32,6 @@ public interface ICameraDetailService extends IService<CameraDetail> {
     void updateCooperationByIds(List<Long> cameraIds, Long id);
 
     void addUsedSpace(HashMap<Long, Long> cameraMap);
+
+    List<CameraAppVo> getListByUserAndType(Long userId, Integer cameraType);
 }

+ 5 - 0
src/main/java/com/fdkankan/ucenter/service/ICameraService.java

@@ -4,6 +4,7 @@ import com.fdkankan.common.response.PageInfo;
 import com.fdkankan.ucenter.entity.Camera;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.ucenter.vo.request.CameraParam;
+import com.fdkankan.ucenter.vo.response.CameraAppVo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -37,4 +38,8 @@ public interface ICameraService extends IService<Camera> {
     void deleteCooperationUser(Long cameraId);
 
     Camera getBySnCodeAndPassword(String appUserName, String appPassword);
+
+    Camera getByChildName(String childName);
+
+    List<CameraAppVo> getCameraInfo(String childName, String childPassword);
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/service/IExpansionOrderService.java

@@ -16,4 +16,6 @@ import com.fdkankan.ucenter.vo.request.VirtualOrderParam;
 public interface IExpansionOrderService extends IService<ExpansionOrder> {
 
     PageInfo pageList(VirtualOrderParam param);
+
+    Long getCount(Long id, Integer cameraType);
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/service/IScenePlusExtService.java

@@ -19,4 +19,6 @@ public interface IScenePlusExtService extends IService<ScenePlusExt> {
     ScenePlusExt getByPlusId(Long plusId);
 
     HashMap<Long,ScenePlusExt> getByPlusIds(List<Long> plusIds);
+
+    ScenePlusExt getByUnicode(String unicode);
 }

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

@@ -20,6 +20,8 @@ public interface IScenePlusService extends IService<ScenePlus> {
 
     Long getCountByUserId(Long userId, List<Integer> sceneSourceList);
 
+    Long getCountByUserId(Long userId, Integer cameraType);
+
     List<ScenePlus> getListByCameraId(Long cameraId);
 
     void bindOrUnCamera(List<Long> cameraIds, Long id);

+ 12 - 0
src/main/java/com/fdkankan/ucenter/service/ISceneProService.java

@@ -2,10 +2,12 @@ package com.fdkankan.ucenter.service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.ucenter.entity.CameraDetail;
+import com.fdkankan.ucenter.entity.ScenePlus;
 import com.fdkankan.ucenter.entity.ScenePro;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.ucenter.vo.request.SceneParam;
 import com.fdkankan.ucenter.vo.response.GroupByCount;
+import com.fdkankan.ucenter.vo.response.SceneInfoVo;
 import com.fdkankan.ucenter.vo.response.SceneNumVo;
 
 import java.io.IOException;
@@ -38,6 +40,8 @@ public interface ISceneProService extends IService<ScenePro> {
 
     Long getCountByUserId(Long id, List<Integer> resourceList);
 
+    Long getCountByUserId(Long id, Integer cameraType) ;
+
     void deleteByIds(List<Long> sceneIds);
 
     JSONObject newList(SceneParam param, String username);
@@ -51,4 +55,12 @@ public interface ISceneProService extends IService<ScenePro> {
     void updateSceneJson(String type,String videos,String newNum,String sceneName,String webSite,String thumb,Long id) throws Exception;
 
     void delete(String sceneNum);
+
+    ScenePro getByUnicode(String unicode);
+
+    void deleteByList(List<ScenePro> proList, List<ScenePlus> plusList);
+
+    SceneInfoVo getInfo(String num);
+
+    void updateViewCount(String num);
 }

+ 4 - 0
src/main/java/com/fdkankan/ucenter/service/IUserIncrementService.java

@@ -27,4 +27,8 @@ public interface IUserIncrementService extends IService<UserIncrement> {
     Long getValidCountByCameraId(Long cameraId);
 
     void unbindCamera(List<Long> cameraIds);
+
+    Long getCount(Long userId, Integer cameraType, int isBind);
+
+    UserIncrement getByCameraId(Long cameraId);
 }

+ 132 - 0
src/main/java/com/fdkankan/ucenter/service/impl/AppCameraService.java

@@ -0,0 +1,132 @@
+package com.fdkankan.ucenter.service.impl;
+
+import com.fdkankan.common.constant.AppConstant;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.FileSizeUtil;
+import com.fdkankan.ucenter.constant.CameraConstant;
+import com.fdkankan.ucenter.constant.LoginConstant;
+import com.fdkankan.ucenter.entity.Camera;
+import com.fdkankan.ucenter.entity.CameraDetail;
+import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.entity.UserIncrement;
+import com.fdkankan.ucenter.service.*;
+import com.fdkankan.ucenter.vo.response.CameraAppVo;
+import com.fdkankan.ucenter.vo.response.GroupByCount;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigInteger;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class AppCameraService {
+
+    @Autowired
+    IUserService userService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    IUserIncrementService userIncrementService;
+
+
+    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);
+    }
+
+    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 = cameraService.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.bindCamera(cameraIds,user.getId());
+        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;
+    }
+
+    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 = cameraService.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);            //取消关联场景
+    }
+
+    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 = cameraService.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);
+    }
+}

+ 224 - 0
src/main/java/com/fdkankan/ucenter/service/impl/AppSceneService.java

@@ -0,0 +1,224 @@
+package com.fdkankan.ucenter.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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 com.fdkankan.ucenter.constant.LoginConstant;
+import com.fdkankan.ucenter.entity.*;
+import com.fdkankan.ucenter.mapper.IScenePlusMapper;
+import com.fdkankan.ucenter.service.*;
+import com.fdkankan.ucenter.vo.request.AppSceneParam;
+import com.fdkankan.ucenter.vo.response.AppSceneVo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class AppSceneService {
+    @Autowired
+    IUserService userService;
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    IScenePlusExtService scenePlusExtService;
+    @Autowired
+    ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    ISceneProEditService sceneProEditService;
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Resource
+    IScenePlusMapper scenePlusMapper;
+
+    public PageInfo pageList(AppSceneParam 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<AppSceneVo> page =  scenePlusMapper.pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
+        for (AppSceneVo 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);
+    }
+
+    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 = sceneProService.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;
+    }
+
+    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 = sceneProService.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.getByScenePlusId(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);
+        }
+
+    }
+
+    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 = sceneProService.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);
+        }
+        sceneProService.deleteByList(proList,plusList);
+    }
+}

+ 1 - 0
src/main/java/com/fdkankan/ucenter/service/impl/AppService.java

@@ -16,6 +16,7 @@ import com.fdkankan.ucenter.entity.CameraDetail;
 import com.fdkankan.ucenter.entity.User;
 import com.fdkankan.ucenter.service.*;
 import com.fdkankan.ucenter.vo.request.AppLoginParam;
+import com.fdkankan.ucenter.vo.request.AppSceneParam;
 import com.fdkankan.ucenter.vo.request.LoginParam;
 import com.fdkankan.ucenter.vo.response.LoginVo;
 import com.fdkankan.ucenter.vo.response.UserVo;

+ 66 - 0
src/main/java/com/fdkankan/ucenter/service/impl/AppUserService.java

@@ -0,0 +1,66 @@
+package com.fdkankan.ucenter.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.ucenter.constant.LoginConstant;
+import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.service.*;
+import com.fdkankan.ucenter.vo.response.UserVo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AppUserService {
+
+    @Autowired
+    IUserService userService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    ISceneProService sceneProService;
+    @Autowired
+    IScenePlusService scenePlusService;
+    @Autowired
+    IExpansionOrderService expansionOrderService;
+    @Autowired
+    IUserIncrementService userIncrementService;
+
+    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 = userService.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;
+    }
+
+    public void updateNickName(String nickName, String phoneNum) {
+        userService.updateNickName(nickName,phoneNum);
+    }
+
+    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());
+        userService.update(wrapper);
+    }
+}

+ 6 - 0
src/main/java/com/fdkankan/ucenter/service/impl/CameraDetailServiceImpl.java

@@ -8,6 +8,7 @@ import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.mapper.ICameraDetailMapper;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.ucenter.vo.response.CameraAppVo;
 import com.fdkankan.ucenter.vo.response.CameraSpaceVo;
 import org.joda.time.DateTime;
 import org.joda.time.Days;
@@ -146,4 +147,9 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
         }
         this.updateBatchById(list);
     }
+
+    @Override
+    public List<CameraAppVo> getListByUserAndType(Long userId, Integer cameraType) {
+        return this.getBaseMapper().getListByUserAndType(userId,cameraType);
+    }
 }

+ 17 - 0
src/main/java/com/fdkankan/ucenter/service/impl/CameraServiceImpl.java

@@ -12,6 +12,7 @@ import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.ucenter.util.DateUserUtil;
 import com.fdkankan.ucenter.vo.request.CameraParam;
+import com.fdkankan.ucenter.vo.response.CameraAppVo;
 import com.fdkankan.ucenter.vo.response.CameraSpaceVo;
 import com.fdkankan.ucenter.vo.response.CameraVo;
 import com.fdkankan.ucenter.vo.response.GroupByCount;
@@ -295,4 +296,20 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
         }
         return null;
     }
+
+    @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 List<CameraAppVo> getCameraInfo(String childName, String childPassword) {
+        return this.getBaseMapper().getCameraInfo(childName,childPassword);
+    }
 }

+ 5 - 0
src/main/java/com/fdkankan/ucenter/service/impl/ExpansionOrderServiceImpl.java

@@ -35,4 +35,9 @@ public class ExpansionOrderServiceImpl extends ServiceImpl<IExpansionOrderMapper
         Page<ExpansionOrderVo> page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
         return PageInfo.PageInfo(page);
     }
+
+    @Override
+    public Long getCount(Long userId, Integer cameraType) {
+        return this.getBaseMapper().getCount(userId,cameraType);
+    }
 }

+ 1 - 1
src/main/java/com/fdkankan/ucenter/service/impl/LoginService.java

@@ -239,7 +239,7 @@ public class LoginService {
     public String redisLogin(String userName,String value){
         String token = JwtUtil.createJWT(-1,userName,"user");
         String redisKey = String.format(RedisKey.TOKEN_V3,token);
-        redisUtil.set(redisKey, value);
+        redisUtil.set(redisKey, value,2 * 60 * 60);
         return token;
     }
 

+ 12 - 0
src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusExtServiceImpl.java

@@ -41,4 +41,16 @@ public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, Sc
         list.forEach(entity -> map.put(entity.getPlusId(),entity));
         return map;
     }
+
+    @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;
+    }
 }

+ 5 - 0
src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusServiceImpl.java

@@ -53,6 +53,11 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
         return this.count(wrapper);
     }
 
+    @Override
+    public Long getCountByUserId(Long userId, Integer cameraType) {
+        return this.getBaseMapper().getCountByUserId(userId,cameraType);
+    }
+
 
     @Override
     public List<ScenePlus> getListByCameraId(Long cameraId) {

+ 121 - 1
src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java

@@ -12,6 +12,8 @@ import com.fdkankan.common.util.CreateObjUtil;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.fyun.oss.UploadToOssUtil;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.constant.CameraConstant;
 import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.entity.*;
@@ -21,11 +23,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.ucenter.util.DateUserUtil;
 import com.fdkankan.ucenter.vo.request.SceneParam;
 import com.fdkankan.ucenter.vo.response.GroupByCount;
+import com.fdkankan.ucenter.vo.response.SceneInfoVo;
 import com.fdkankan.ucenter.vo.response.SceneNumVo;
 import com.fdkankan.ucenter.vo.response.SceneVo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
@@ -76,6 +80,10 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     IScene3dNumService scene3dNumService;
     @Autowired
     ISceneProEditService sceneProEditService;
+    @Autowired
+    ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    RedisUtil redisUtil;
 
     @Override
     public HashMap<String, SceneNumVo> findSceneNumber(String token) {
@@ -249,6 +257,11 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     }
 
     @Override
+    public Long getCountByUserId(Long id, Integer cameraType) {
+        return this.getBaseMapper().getCountByUserId(id,cameraType);
+    }
+
+    @Override
     public void deleteByIds(List<Long> sceneIds) {
         LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(ScenePro::getId,sceneIds)
@@ -517,7 +530,8 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         this.deleteByList(proList,plusList);
     }
 
-    private void deleteByList(List<ScenePro> proList,List<ScenePlus> plusList) {
+    @Override
+    public void deleteByList(List<ScenePro> proList,List<ScenePlus> plusList) {
         HashMap<Long ,Long >cameraMap = new HashMap<>();
         if(proList.size() >0){
             for (ScenePro scenePro : proList) {
@@ -540,4 +554,110 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
             cameraDetailService.addUsedSpace(cameraMap);
         }
     }
+
+    @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 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.getByScenePlusId(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);
+        }
+    }
 }

+ 16 - 0
src/main/java/com/fdkankan/ucenter/service/impl/UserIncrementServiceImpl.java

@@ -137,4 +137,20 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
                 .in(UserIncrement::getCameraId,cameraIds);
         this.update(wrapper);
     }
+
+    @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;
+    }
 }

+ 19 - 0
src/main/java/com/fdkankan/ucenter/vo/request/AppSceneParam.java

@@ -0,0 +1,19 @@
+package com.fdkankan.ucenter.vo.request;
+
+import com.fdkankan.common.request.RequestBase;
+import lombok.Data;
+
+@Data
+public class AppSceneParam 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;
+
+}

+ 39 - 0
src/main/java/com/fdkankan/ucenter/vo/response/AppSceneVo.java

@@ -0,0 +1,39 @@
+package com.fdkankan.ucenter.vo.response;
+
+import com.fdkankan.ucenter.util.DateUserUtil;
+import lombok.Data;
+
+@Data
+public class AppSceneVo {
+    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);
+    }
+}

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

@@ -0,0 +1,87 @@
+package com.fdkankan.ucenter.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;
+}

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

@@ -0,0 +1,79 @@
+package com.fdkankan.ucenter.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;
+
+}

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

@@ -0,0 +1,272 @@
+package com.fdkankan.ucenter.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;
+}

+ 2 - 0
src/main/java/com/fdkankan/ucenter/vo/response/UserVo.java

@@ -20,4 +20,6 @@ public class UserVo {
     private Integer cameraLogin;
 
     private Long sceneCount;
+    private Long expansionTotal;
+
 }

+ 8 - 0
src/main/resources/mapper/ucenter/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.ucenter.mapper.ICameraDetailMapper">
 
+    <select id="getListByUserAndType" resultType="com.fdkankan.ucenter.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/ucenter/CameraMapper.xml

@@ -27,4 +27,13 @@
         </if>
         order by c.activated_time desc
     </select>
+    <select id="getCameraInfo" resultType="com.fdkankan.ucenter.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>

+ 6 - 0
src/main/resources/mapper/ucenter/ExpansionOrderMapper.xml

@@ -19,4 +19,10 @@
         </if>
 
     </select>
+
+    <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>

+ 52 - 0
src/main/resources/mapper/ucenter/ScenePlusMapper.xml

@@ -2,4 +2,56 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.ucenter.mapper.IScenePlusMapper">
 
+    <select id="pageList" resultType="com.fdkankan.ucenter.vo.response.AppSceneVo">
+        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>
+    <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>
+    </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/ucenter/SceneProMapper.xml

@@ -51,6 +51,11 @@
         ORDER BY create_time desc
         ) as scene_tb
     </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>
 
     <sql id="HasFolder">
         <if test="param.hasFolder == 1">

+ 12 - 0
src/main/resources/mapper/ucenter/UserIncrementMapper.xml

@@ -2,4 +2,16 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.ucenter.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>