Browse Source

设备,场景管理

lyhzzz 2 years ago
parent
commit
75981237ec
71 changed files with 2962 additions and 4 deletions
  1. 5 0
      pom.xml
  2. 36 0
      src/main/java/com/fdkankan/agent/common/BaseController.java
  3. 10 0
      src/main/java/com/fdkankan/agent/common/FilePath.java
  4. 43 0
      src/main/java/com/fdkankan/agent/common/PageInfo.java
  5. 9 0
      src/main/java/com/fdkankan/agent/common/RequestBase.java
  6. 25 0
      src/main/java/com/fdkankan/agent/common/ResultCode.java
  7. 82 0
      src/main/java/com/fdkankan/agent/common/ResultData.java
  8. 32 0
      src/main/java/com/fdkankan/agent/common/util/DateUtils.java
  9. 140 0
      src/main/java/com/fdkankan/agent/common/util/JwtUtil.java
  10. 22 0
      src/main/java/com/fdkankan/agent/config/MybatisPlusPageConfig.java
  11. 32 0
      src/main/java/com/fdkankan/agent/config/WebAppConfig.java
  12. 44 0
      src/main/java/com/fdkankan/agent/controller/CameraController.java
  13. 74 0
      src/main/java/com/fdkankan/agent/controller/LoginController.java
  14. 33 0
      src/main/java/com/fdkankan/agent/controller/SceneController.java
  15. 105 0
      src/main/java/com/fdkankan/agent/entity/AgentNew.java
  16. 87 0
      src/main/java/com/fdkankan/agent/entity/Camera.java
  17. 154 0
      src/main/java/com/fdkankan/agent/entity/CameraDetail.java
  18. 117 0
      src/main/java/com/fdkankan/agent/entity/ScenePlus.java
  19. 174 0
      src/main/java/com/fdkankan/agent/entity/ScenePlusExt.java
  20. 237 0
      src/main/java/com/fdkankan/agent/entity/ScenePro.java
  21. 141 0
      src/main/java/com/fdkankan/agent/entity/User.java
  22. 22 0
      src/main/java/com/fdkankan/agent/exception/BusinessException.java
  23. 35 0
      src/main/java/com/fdkankan/agent/exception/GlobalExceptionHandler.java
  24. 4 4
      src/main/java/com/fdkankan/agent/generate/AutoGenerate.java
  25. 20 0
      src/main/java/com/fdkankan/agent/httpClient/address/FdkkAddressSource.java
  26. 20 0
      src/main/java/com/fdkankan/agent/httpClient/address/LaserAddressSource.java
  27. 34 0
      src/main/java/com/fdkankan/agent/httpClient/client/FdKKClient.java
  28. 28 0
      src/main/java/com/fdkankan/agent/httpClient/client/LaserClient.java
  29. 11 0
      src/main/java/com/fdkankan/agent/httpClient/request/FdkkLoginRequest.java
  30. 13 0
      src/main/java/com/fdkankan/agent/httpClient/request/LaserSceneMoveParam.java
  31. 15 0
      src/main/java/com/fdkankan/agent/httpClient/request/LaserSceneParam.java
  32. 9 0
      src/main/java/com/fdkankan/agent/httpClient/response/FdkkLoginVo.java
  33. 11 0
      src/main/java/com/fdkankan/agent/httpClient/response/FdkkResponse.java
  34. 25 0
      src/main/java/com/fdkankan/agent/httpClient/response/FdkkUserVo.java
  35. 152 0
      src/main/java/com/fdkankan/agent/httpClient/service/LaserService.java
  36. 90 0
      src/main/java/com/fdkankan/agent/interceptor/TokenInterceptor.java
  37. 18 0
      src/main/java/com/fdkankan/agent/mapper/IAgentNewMapper.java
  38. 18 0
      src/main/java/com/fdkankan/agent/mapper/ICameraDetailMapper.java
  39. 22 0
      src/main/java/com/fdkankan/agent/mapper/ICameraMapper.java
  40. 18 0
      src/main/java/com/fdkankan/agent/mapper/IScenePlusExtMapper.java
  41. 18 0
      src/main/java/com/fdkankan/agent/mapper/IScenePlusMapper.java
  42. 22 0
      src/main/java/com/fdkankan/agent/mapper/ISceneProMapper.java
  43. 18 0
      src/main/java/com/fdkankan/agent/mapper/IUserMapper.java
  44. 38 0
      src/main/java/com/fdkankan/agent/request/CameraParam.java
  45. 20 0
      src/main/java/com/fdkankan/agent/request/SceneParam.java
  46. 21 0
      src/main/java/com/fdkankan/agent/response/CameraDetailVo.java
  47. 25 0
      src/main/java/com/fdkankan/agent/response/SceneVo.java
  48. 19 0
      src/main/java/com/fdkankan/agent/service/IAgentNewService.java
  49. 19 0
      src/main/java/com/fdkankan/agent/service/ICameraDetailService.java
  50. 18 0
      src/main/java/com/fdkankan/agent/service/ICameraService.java
  51. 16 0
      src/main/java/com/fdkankan/agent/service/IScenePlusExtService.java
  52. 16 0
      src/main/java/com/fdkankan/agent/service/IScenePlusService.java
  53. 18 0
      src/main/java/com/fdkankan/agent/service/ISceneProService.java
  54. 16 0
      src/main/java/com/fdkankan/agent/service/IUserService.java
  55. 29 0
      src/main/java/com/fdkankan/agent/service/impl/AgentNewServiceImpl.java
  56. 47 0
      src/main/java/com/fdkankan/agent/service/impl/CameraDetailServiceImpl.java
  57. 30 0
      src/main/java/com/fdkankan/agent/service/impl/CameraServiceImpl.java
  58. 20 0
      src/main/java/com/fdkankan/agent/service/impl/ScenePlusExtServiceImpl.java
  59. 20 0
      src/main/java/com/fdkankan/agent/service/impl/ScenePlusServiceImpl.java
  60. 45 0
      src/main/java/com/fdkankan/agent/service/impl/SceneProServiceImpl.java
  61. 20 0
      src/main/java/com/fdkankan/agent/service/impl/UserServiceImpl.java
  62. 157 0
      src/main/java/com/fdkankan/agent/util/Dateutils.java
  63. 25 0
      src/main/java/com/fdkankan/agent/util/SceneStatusUtil.java
  64. 5 0
      src/main/resources/mapper/agent/AgentNewMapper.xml
  65. 5 0
      src/main/resources/mapper/agent/CameraDetailMapper.xml
  66. 35 0
      src/main/resources/mapper/agent/CameraMapper.xml
  67. 5 0
      src/main/resources/mapper/agent/ScenePlusExtMapper.xml
  68. 5 0
      src/main/resources/mapper/agent/ScenePlusMapper.xml
  69. 53 0
      src/main/resources/mapper/agent/SceneProMapper.xml
  70. 5 0
      src/main/resources/mapper/agent/UserMapper.xml
  71. 5 0
      src/main/resources/mapper/ucenter/AgentNewMapper.xml

+ 5 - 0
pom.xml

@@ -17,6 +17,11 @@
     </parent>
     </parent>
 
 
     <dependencies>
     <dependencies>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-common-utils</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
 
 
         <dependency>
         <dependency>
             <groupId>com.fdkankan</groupId>
             <groupId>com.fdkankan</groupId>

+ 36 - 0
src/main/java/com/fdkankan/agent/common/BaseController.java

@@ -0,0 +1,36 @@
+package com.fdkankan.agent.common;
+
+import com.fdkankan.agent.common.util.JwtUtil;
+import com.fdkankan.agent.entity.AgentNew;
+import com.fdkankan.agent.service.IAgentNewService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+public class BaseController {
+
+    @Autowired
+    protected HttpServletRequest request;
+
+    @Autowired
+    protected HttpServletResponse response;
+
+    @Autowired
+    IAgentNewService agentNewService;
+
+
+    protected String getToken(){
+        return request.getHeader("token");
+    }
+    protected AgentNew getAgent(){
+        String userName = JwtUtil.getUserName(getToken());
+        List<AgentNew> agentnews = agentNewService.getByUserName(userName);
+        for (AgentNew agentnew : agentnews) {
+            return agentnew;
+        }
+        return  null;
+    }
+
+}

+ 10 - 0
src/main/java/com/fdkankan/agent/common/FilePath.java

@@ -0,0 +1,10 @@
+package com.fdkankan.agent.common;
+
+public class FilePath {
+
+    public final static String OSS_FILE_PATH = "smart-site/file/";
+    public final static String OSS_BIM_PATH = "bim/project_%s/%s";
+    public final static String LOCAL_FILE_PATH = "/home/smart-site/file/";
+
+
+}

+ 43 - 0
src/main/java/com/fdkankan/agent/common/PageInfo.java

@@ -0,0 +1,43 @@
+package com.fdkankan.agent.common;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PageInfo<T> {
+
+    private long pageNum;
+
+    private long pageSize;
+
+    private long total;
+
+    private T list;
+
+    public static PageInfo PageInfo(Page page){
+        return PageInfo.builder()
+            .pageNum(page.getCurrent())
+            .pageSize(page.getSize())
+            .total(page.getTotal())
+            .list(page.getRecords())
+            .build();
+    }
+    public static PageInfo PageInfo(Long currentPage, Long pageSize, Long total, List<?> list){
+        return PageInfo.builder()
+            .pageNum(currentPage)
+            .pageSize(pageSize)
+            .total(total)
+            .list(list)
+            .build();
+    }
+
+
+}

+ 9 - 0
src/main/java/com/fdkankan/agent/common/RequestBase.java

@@ -0,0 +1,9 @@
+package com.fdkankan.agent.common;
+
+import lombok.Data;
+
+@Data
+public class RequestBase {
+    private Integer pageNum = 1;
+    private Integer pageSize = 10;
+}

+ 25 - 0
src/main/java/com/fdkankan/agent/common/ResultCode.java

@@ -0,0 +1,25 @@
+package com.fdkankan.agent.common;
+
+public enum ResultCode {
+    SUCCESS(0,"操作成功"),
+    ERROR(-1,"操作失败"),
+
+    PARAM_MISS(4001,"参数缺少"),
+    NOT_PERM(4002,"没有权限"),
+    USER_NOT_EXIST(4003,"用户不存在"),
+    USER_EXIST(4004,"用户已添加"),
+    AGENT_USER_EMPTY(4005,"经销商不存在"),
+    USER_NOT_LOGIN(4008,"用户未登录"),
+    FD_ERROR(4009,"四维登录失败"),
+    DEL_MINE(4010,"删除自己"),
+
+    ;
+    public int code;
+    public String msg;
+
+    ResultCode(int code , String msg){
+        this.code = code;
+        this.msg = msg;
+    }
+
+}

+ 82 - 0
src/main/java/com/fdkankan/agent/common/ResultData.java

@@ -0,0 +1,82 @@
+package com.fdkankan.agent.common;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Calendar;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResultData<T> implements Serializable {
+    /**
+     * 状态码
+     */
+    private int code;
+    /**
+     * 响应信息
+     */
+    private String message;
+    /**
+     * 后端返回结果
+     */
+    private T data;
+    /**
+     * 后端返回结果
+     */
+    private Boolean success;
+    /**
+     * 响应时间戳
+     */
+    private long timestamp = Calendar.getInstance().getTimeInMillis();
+
+    public static ResultData ok() {
+        return ok(null);
+    }
+
+    public static ResultData ok(Object data) {
+        return ok(ResultCode.SUCCESS.msg, data);
+    }
+
+    public static ResultData ok(String msg, Object data) {
+        return base(ResultCode.SUCCESS.code, msg, data, true);
+    }
+
+    public static ResultData ok(int page, int pageSize, int total, Object data) {
+        return ok(new PageInfo(page, pageSize, total, data));
+    }
+
+    public static ResultData error( String msg) {
+        return error(ResultCode.ERROR.code, msg, null);
+    }
+    public static ResultData error(int code, String msg) {
+        return error(code, msg, null);
+    }
+
+    public static ResultData error(int code, String msg, Object data) {
+        return base(code, msg, data, false);
+    }
+
+    public static ResultData error(ResultCode errorCode, Object data) {
+        return base(errorCode.code, errorCode.msg, data, false);
+    }
+
+    public static ResultData error(ResultCode errorCode) {
+        return error(errorCode.code, errorCode.msg);
+    }
+    public static String errorString(ResultCode errorCode) {
+        return JSONObject.toJSONString(error(errorCode.code, errorCode.msg));
+    }
+
+    private static ResultData base(int code, String msg, Object data, Boolean success) {
+        ResultData rd = new ResultData();
+        rd.setCode(code);
+        rd.setMessage(msg);
+        rd.setData(data);
+        rd.setSuccess(success);
+        return rd;
+    }
+}

+ 32 - 0
src/main/java/com/fdkankan/agent/common/util/DateUtils.java

@@ -0,0 +1,32 @@
+package com.fdkankan.agent.common.util;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+public class DateUtils {
+
+
+    public static Date getData(String time) {
+        try {
+            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return new Date();
+    }
+    public static String getData(Date time) {
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time);
+    }
+
+    public static Date dateAddOne(Date date,int day) {
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(date);
+        calendar.add(calendar.DATE,day);
+        date=calendar.getTime();
+        return date;
+
+    }
+}

+ 140 - 0
src/main/java/com/fdkankan/agent/common/util/JwtUtil.java

@@ -0,0 +1,140 @@
+package com.fdkankan.agent.common.util;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.JwtBuilder;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+public class JwtUtil {
+
+    //生成签名的时候使用的秘钥secret
+    private static final String SECRET = "XX#$%()(#*!()!KL<><MQLMNQNQJQK&sdfkjsdrow32234545fdf>?N<:{LWPW";
+
+    /**
+     * 用户登录成功后生成Jwt
+     * 使用Hs256算法  私匙使用用户密码
+     *
+     * @param ttlMillis jwt过期时间
+     * @param userName  用户名
+     * @return
+     */
+    public static String createJWT(long ttlMillis, String userName, String loginType) {
+        //指定签名的时候使用的签名算法,也就是header那部分,jjwt已经将这部分内容封装好了。
+        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+
+        //生成JWT的时间
+        long nowMillis = System.currentTimeMillis();
+        Date now = new Date(nowMillis);
+
+        //创建payload的私有声明(根据特定的业务需要添加,如果要拿这个做验证,一般是需要和jwt的接收方提前沟通好验证方式的)
+        Map<String, Object> claims = new HashMap<String, Object>();
+        claims.put("userName", userName);
+        claims.put("loginType", loginType);
+
+        //下面就是在为payload添加各种标准声明和私有声明了
+        //这里其实就是new一个JwtBuilder,设置jwt的body
+        JwtBuilder builder = Jwts.builder()
+                //如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的
+                .setClaims(claims)
+                //设置jti(JWT ID):是JWT的唯一标识,根据业务需要,这个可以设置为一个不重复的值,主要用来作为一次性token,从而回避重放攻击。
+                .setId(UUID.randomUUID().toString())
+                //iat: jwt的签发时间
+                .setIssuedAt(now)
+                //代表这个JWT的主体,即它的所有人,这个是一个json格式的字符串,可以存放什么userid,roldid之类的,作为什么用户的唯一标志。
+                .setSubject(userName)
+                //设置签名使用的签名算法和签名使用的秘钥
+                .signWith(signatureAlgorithm, SECRET);
+
+        if (ttlMillis >= 0) {
+            long expMillis = nowMillis + ttlMillis;
+            Date exp = new Date(expMillis);
+            //设置过期时间
+            builder.setExpiration(exp);
+        }/*else{
+            //设置过期时间半小时
+            DateTime expDate = new DateTime().plusMinutes(30);
+            builder.setExpiration(expDate.toDate());
+        }*/
+        return builder.compact();
+    }
+
+
+    /**
+     * Token的解密
+     * @param token 加密后的token
+     * @return
+     */
+    public static Claims parseJWT(String token) {
+        //得到DefaultJwtParser
+        Claims claims = Jwts.parser()
+                //设置签名的秘钥
+                .setSigningKey(SECRET)
+                //设置需要解析的jwt
+                .parseClaimsJws(token).getBody();
+        return claims;
+    }
+
+
+    /**
+     * 校验token
+     * 在这里可以使用官方的校验,我这里校验的是token中携带的密码于数据库一致的话就校验通过
+     * @param token
+     * @param userName
+     * @return
+     */
+    public static Boolean isVerify(String token, String userName) {
+
+        try {
+            //得到DefaultJwtParser
+            Claims claims = Jwts.parser()
+                //设置签名的秘钥
+                .setSigningKey(SECRET)
+                //设置需要解析的jwt
+                .parseClaimsJws(token).getBody();
+
+            if (claims.get("userName").equals(userName)) {
+                return true;
+            }
+        }catch (Exception e){
+            return false;
+        }
+        return false;
+    }
+
+    /**
+     * 获得token中的信息无需secret解密也能获得
+     *
+     * @return token中包含的用户名
+     */
+    public static String getUserName(String token) {
+        try {
+            DecodedJWT jwt = JWT.decode(token);
+            return jwt.getClaim("userName").asString();
+        } catch (JWTDecodeException e) {
+            return null;
+        }
+    }
+    /**
+     * 获得token中的信息无需secret解密也能获得
+     *
+     * @return token中包含的用户名
+     */
+    public static String getLoginType(String token) {
+        try {
+            DecodedJWT jwt = JWT.decode(token);
+            return jwt.getClaim("loginType").asString();
+        } catch (JWTDecodeException e) {
+            return null;
+        }
+    }
+
+
+}

+ 22 - 0
src/main/java/com/fdkankan/agent/config/MybatisPlusPageConfig.java

@@ -0,0 +1,22 @@
+package com.fdkankan.agent.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class MybatisPlusPageConfig {
+
+    /**
+     * mybatisPlus配置分页插件
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
+    }
+}

+ 32 - 0
src/main/java/com/fdkankan/agent/config/WebAppConfig.java

@@ -0,0 +1,32 @@
+package com.fdkankan.agent.config;
+
+import com.fdkankan.agent.interceptor.TokenInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+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
+	TokenInterceptor tokenInterceptor;
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		registry.addInterceptor(tokenInterceptor).addPathPatterns("/**")
+				.excludePathPatterns(
+						"/**/test/**",
+						"/**/fdLogin/**");
+		WebMvcConfigurer.super.addInterceptors(registry);
+	}
+
+	@Override
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+		WebMvcConfigurer.super.addResourceHandlers(registry);
+	}
+
+}
+

+ 44 - 0
src/main/java/com/fdkankan/agent/controller/CameraController.java

@@ -0,0 +1,44 @@
+package com.fdkankan.agent.controller;
+
+
+import com.fdkankan.agent.common.BaseController;
+import com.fdkankan.agent.common.ResultData;
+import com.fdkankan.agent.common.util.JwtUtil;
+import com.fdkankan.agent.entity.AgentNew;
+import com.fdkankan.agent.request.CameraParam;
+import com.fdkankan.agent.service.IAgentNewService;
+import com.fdkankan.agent.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;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机主表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@RestController
+@RequestMapping("/agent/camera")
+public class CameraController extends BaseController {
+
+    @Autowired
+    ICameraService cameraService;
+    @Autowired
+    IAgentNewService agentNewService;
+
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody CameraParam param){
+        param.setAgentId(getAgent().getId());
+        return ResultData.ok(cameraService.pageList(param));
+    }
+}
+

+ 74 - 0
src/main/java/com/fdkankan/agent/controller/LoginController.java

@@ -0,0 +1,74 @@
+package com.fdkankan.agent.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.agent.common.BaseController;
+import com.fdkankan.agent.common.ResultCode;
+import com.fdkankan.agent.common.ResultData;
+import com.fdkankan.agent.entity.AgentNew;
+import com.fdkankan.agent.exception.BusinessException;
+import com.fdkankan.agent.httpClient.client.FdKKClient;
+import com.fdkankan.agent.httpClient.request.FdkkLoginRequest;
+import com.fdkankan.agent.httpClient.response.FdkkLoginVo;
+import com.fdkankan.agent.httpClient.response.FdkkResponse;
+import com.fdkankan.agent.service.IAgentNewService;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+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;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/agent")
+public class LoginController extends BaseController {
+
+    @Resource
+    FdKKClient fdKKClient;
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Autowired
+    IAgentNewService iAgentNewService;
+
+    @PostMapping("/fdLogin")
+    public ResultData fdLogin(@RequestBody FdkkLoginRequest request){
+        try {
+            FdkkResponse<FdkkLoginVo> fdkkLoginVo = fdKKClient.fdkkLogin(request);
+            if(fdkkLoginVo.getCode() == 0){
+                List<AgentNew> agentNews = iAgentNewService.getByUserName(request.getPhoneNum());
+                if(agentNews.size() <=0){
+                    throw new BusinessException(ResultCode.AGENT_USER_EMPTY);
+                }
+                return ResultData.ok(fdkkLoginVo.getData());
+            }
+            return ResultData.error(fdkkLoginVo.getCode(),fdkkLoginVo.getMsg());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        throw new BusinessException(ResultCode.FD_ERROR);
+    }
+
+    @PostMapping("/fdLogout")
+    public ResultData fdLogout(){
+        String fdToken = String.format(RedisKey.TOKEN_V3,getToken());
+        redisUtil.del(fdToken);
+        return ResultData.ok();
+    }
+
+    /**
+     * 四维场景列表
+     */
+    @PostMapping("/getUserInfo")
+    public ResultData getUserInfo(){
+        try {
+            return ResultData.ok(fdKKClient.getUserInfo(new JSONObject(), getToken()).getData());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+    }
+}

+ 33 - 0
src/main/java/com/fdkankan/agent/controller/SceneController.java

@@ -0,0 +1,33 @@
+package com.fdkankan.agent.controller;
+
+
+import com.fdkankan.agent.common.BaseController;
+import com.fdkankan.agent.common.ResultData;
+import com.fdkankan.agent.request.SceneParam;
+import com.fdkankan.agent.service.ISceneProService;
+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;
+
+/**
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@RestController
+@RequestMapping("/agent/scene")
+public class SceneController extends BaseController {
+
+    @Autowired
+    ISceneProService sceneProService;
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody SceneParam param){
+        param.setAgentId(getAgent().getId());
+        return ResultData.ok(sceneProService.pageList(param));
+    }
+}
+

+ 105 - 0
src/main/java/com/fdkankan/agent/entity/AgentNew.java

@@ -0,0 +1,105 @@
+package com.fdkankan.agent.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-11-09
+ */
+@Getter
+@Setter
+@TableName("t_agent_new")
+public class AgentNew implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 经销商表
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 经销商名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 联系人名称
+     */
+    @TableField("nick_name")
+    private String nickName;
+
+    /**
+     * 用户名称
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 创建人id
+     */
+    @TableField("sys_user_id")
+    private Integer sysUserId;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 场景下载次数
+     */
+    @TableField("down_total_num")
+    private Integer downTotalNum;
+
+    /**
+     * 场景使用次数
+     */
+    @TableField("down_use_num")
+    private Integer downUseNum;
+
+    /**
+     * 高级会员次数
+     */
+    @TableField("high_total_num")
+    private Integer highTotalNum;
+
+    /**
+     * 高级会员使用次数
+     */
+    @TableField("high_use_num")
+    private Integer highUseNum;
+
+    /**
+     * 专业会员个数
+     */
+    @TableField("major_total_num")
+    private Integer majorTotalNum;
+
+    /**
+     * 专业会员个数
+     */
+    @TableField("major_use_num")
+    private Integer majorUseNum;
+
+
+}

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

@@ -0,0 +1,87 @@
+package com.fdkankan.agent.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-11-09
+ */
+@Getter
+@Setter
+@TableName("t_camera")
+public class Camera implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 相机的Mac地址
+     */
+    @TableField("child_name")
+    private String childName;
+
+    /**
+     * 激活时间
+     */
+    @TableField("activated_time")
+    private Date activatedTime;
+
+    /**
+     * 相机密码
+     */
+    @TableField("child_password")
+    private String childPassword;
+
+    /**
+     * sn码
+     */
+    @TableField("sn_code")
+    private String snCode;
+
+    /**
+     * wifi名称
+     */
+    @TableField("wifi_name")
+    private String wifiName;
+
+    /**
+     * wifi密码
+     */
+    @TableField("wifi_password")
+    private String wifiPassword;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 154 - 0
src/main/java/com/fdkankan/agent/entity/CameraDetail.java

@@ -0,0 +1,154 @@
+package com.fdkankan.agent.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-11-09
+ */
+@Getter
+@Setter
+@TableName("t_camera_detail")
+public class CameraDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 余额
+     */
+    @TableField("balance")
+    private String balance;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 0表示客户,1表示员工,2表示赠送,3表示其他,4经销商销售
+     */
+    @TableField("own")
+    private Integer own;
+
+    /**
+     * 订单号
+     */
+    @TableField("order_sn")
+    private String orderSn;
+
+    /**
+     * 0表示本国,1表示国外
+     */
+    @TableField("country")
+    private Integer country;
+
+    /**
+     * 经销商
+     */
+    @TableField("agency")
+    private String agency;
+
+    /**
+     * 相机类型,0表示双目,1四维看看pro,2 四维看看lite,9 双目转台,10 激光转台
+     */
+    @TableField("type")
+    private Integer type;
+
+    /**
+     * 总容量
+     */
+    @TableField("total_space")
+    private Long totalSpace;
+
+    /**
+     * 已使用容量
+     */
+    @TableField("used_space")
+    private Long usedSpace;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 商品表t_goods的id
+     */
+    @TableField("goods_id")
+    private Long goodsId;
+
+    /**
+     * 企业表t_company的id
+     */
+    @TableField("company_id")
+    private Long companyId;
+
+    /**
+     * 代理商架构管理t_agent_framework的id
+     */
+    @TableField("agent_framework_id")
+    private Long agentFrameworkId;
+
+    /**
+     * 相机协作用户id
+     */
+    @TableField("cooperation_user")
+    private Long cooperationUser;
+
+    /**
+     * 设备地址(追溯管理后台)
+     */
+    @TableField("address")
+    private String address;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("user_camera_version")
+    private String userCameraVersion;
+
+    @TableField("app_version")
+    private String appVersion;
+
+    @TableField("last_request_time")
+    private Date lastRequestTime;
+
+    @TableField("out_time")
+    private Date outTime;
+
+    @TableField("agent_id")
+    private Integer agentId;
+}

+ 117 - 0
src/main/java/com/fdkankan/agent/entity/ScenePlus.java

@@ -0,0 +1,117 @@
+package com.fdkankan.agent.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-11-09
+ */
+@Getter
+@Setter
+@TableName("t_scene_plus")
+public class ScenePlus implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景码
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 相机id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 手机id
+     */
+    @TableField("phone_id")
+    private String phoneId;
+
+    /**
+     * 场景名称
+     */
+    @TableField("title")
+    private String title;
+
+    /**
+     * 场景描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 场景状态:0-未建好,1--已建好,-1-计算出错,-2--不在官网显示
+     */
+    @TableField("scene_status")
+    private Integer sceneStatus;
+
+    /**
+     * 场景来源:相机拍摄10以内表示,1表示八目,2双目,3转台,4 激光  其他来源10以上,11:一键换装,12:123看房,13文通虚拟场景
+     */
+    @TableField("scene_source")
+    private Integer sceneSource;
+
+    /**
+     * 支付状态:0表示未付款,1表示付款了,-1表示欠费,-2表示容量不足
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 场景类型  0-其他,1-文博,2-地产,3-电商,4-餐饮,5-家居,99-一件换装虚拟房源
+     */
+    @TableField("scene_type")
+    private Integer sceneType;
+
+    /**
+     * 是否推荐:0-否,1-是
+     */
+    @TableField("recommend")
+    private Integer recommend;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * A-有效,I-无效
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+
+}

+ 174 - 0
src/main/java/com/fdkankan/agent/entity/ScenePlusExt.java

@@ -0,0 +1,174 @@
+package com.fdkankan.agent.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-11-09
+ */
+@Getter
+@Setter
+@TableName("t_scene_plus_ext")
+public class ScenePlusExt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * t_scene_plus主键
+     */
+    @TableField("plus_id")
+    private Long plusId;
+
+    /**
+     * 场景数据目录
+     */
+    @TableField("data_source")
+    private String dataSource;
+
+    /**
+     * 场景链接
+     */
+    @TableField("web_site")
+    private String webSite;
+
+    /**
+     * 缩略图链接
+     */
+    @TableField("thumb")
+    private String thumb;
+
+    /**
+     * 方案:1-双目,2-转台,3-六目,4-八目,10-获取4k图,11-获取2k,12-获取1k
+     */
+    @TableField("scene_scheme")
+    private Integer sceneScheme;
+
+    /**
+     * 使用用量
+     */
+    @TableField("space")
+    private Long space;
+
+    /**
+     * 云服务器类型
+     */
+    @TableField("ecs")
+    private String ecs;
+
+    /**
+     * 点位数量
+     */
+    @TableField("shoot_count")
+    private Integer shootCount;
+
+    /**
+     * 浏览次数
+     */
+    @TableField("view_count")
+    private Integer viewCount;
+
+    /**
+     * gps定位
+     */
+    @TableField("gps")
+    private String gps;
+
+    /**
+     * 算法类型(slam、sfm)
+     */
+    @TableField("algorithm")
+    private String algorithm;
+
+    /**
+     * 固件版本
+     */
+    @TableField("firmware_version")
+    private String firmwareVersion;
+
+    /**
+     * 算法类型(V2,V3)
+     */
+    @TableField("build_type")
+    private String buildType;
+
+    /**
+     * 分辨率(2k,4k)
+     */
+    @TableField("scene_resolution")
+    private String sceneResolution;
+
+    /**
+     * 场景来源,lite:双目lite相机,pro:八目相机,minion:双面转台相机,laser:激光相机,virtual:虚拟场景,sketch:图片建模场景
+     */
+    @TableField("scene_from")
+    private String sceneFrom;
+
+    /**
+     * 切图方式(tiles:瓦片图,face:切片图,pan:全景图 ,local:本地切片,cube:立体图)
+     */
+    @TableField("scene_kind")
+    private String sceneKind;
+
+    /**
+     * 点位视频
+     */
+    @TableField("videos")
+    private String videos;
+
+    /**
+     * oss桶名
+     */
+    @TableField("yun_file_bucket")
+    private String yunFileBucket;
+
+    /**
+     * 算法计算完成时间
+     */
+    @TableField("algorithm_time")
+    private Date algorithmTime;
+
+    /**
+     * 计算耗时
+     */
+    @TableField("compute_time")
+    private Long computeTime;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * A-有效,I-无效
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("is_obj")
+    private Integer isObj;
+
+
+}

+ 237 - 0
src/main/java/com/fdkankan/agent/entity/ScenePro.java

@@ -0,0 +1,237 @@
+package com.fdkankan.agent.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>
+ * pro场景表
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Getter
+@Setter
+@TableName("t_scene_pro")
+public class ScenePro implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 场景名称
+     */
+    @TableField("scene_name")
+    private String sceneName;
+
+    /**
+     * 场景描述
+     */
+    @TableField("scene_dec")
+    private String sceneDec;
+
+    /**
+     * 场景的链接地址
+     */
+    @TableField("web_site")
+    private String webSite;
+
+    /**
+     * 场景缩略图
+     */
+    @TableField("thumb")
+    private String thumb;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 0表示未建好,1表示建好,-1表示出错,-2表示不要在官网上显示
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 原始的大场景数据(七牛)
+     */
+    @TableField("data_source")
+    private String dataSource;
+
+    /**
+     * 用户表t_user的id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 0表示未付款,1表示付款了,-1表示欠费,-2表示容量不足
+     */
+    @TableField("pay_status")
+    private Integer payStatus;
+
+    /**
+     * 相机主表t_camera的id
+     */
+    @TableField("camera_id")
+    private Long cameraId;
+
+    /**
+     * 手机id
+     */
+    @TableField("phone_id")
+    private String phoneId;
+
+    /**
+     * 场景logo
+     */
+    @TableField("scene_logo")
+    private String sceneLogo;
+
+    /**
+     * 大场景序号
+     */
+    @TableField("num")
+    private String num;
+
+    /**
+     * 0表示其他,1表示文博,2表示地产,3表示电商,4表示餐饮,5表示家居,99一件换装虚拟房源
+     */
+    @TableField("scene_type")
+    private Integer sceneType;
+
+    /**
+     * 1表示推荐,0表示正常
+     */
+    @TableField("recommend")
+    private Integer recommend;
+
+    /**
+     * 浏览次数
+     */
+    @TableField("view_count")
+    private Integer viewCount;
+
+    /**
+     * 拍摄数量 ps:点位数量
+     */
+    @TableField("shoot_count")
+    private Integer shootCount;
+
+    /**
+     * 所有资源文件名
+     */
+    @TableField("files_name")
+    private String filesName;
+
+    /**
+     * 点位视频
+     */
+    @TableField("videos")
+    private String videos;
+
+    /**
+     * 要gps定位
+     */
+    @TableField("gps")
+    private String gps;
+
+    /**
+     * 方案:1是双目,2是转台,3是六目,4是八目,10获取4k图,11获取2k,12获取1k
+     */
+    @TableField("scene_scheme")
+    private Integer sceneScheme;
+
+    /**
+     * 记录的状态,A: 生效,I: 禁用
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 算法类型
+     */
+    @TableField("algorithm")
+    private String algorithm;
+
+    /**
+     * 服务器的服务商
+     */
+    @TableField("ecs")
+    private String ecs;
+
+    /**
+     * 使用容量
+     */
+    @TableField("space")
+    private Long space;
+
+    /**
+     * 固件版本
+     */
+    @TableField("firmware_version")
+    private String firmwareVersion;
+
+    /**
+     * 调用V2还是V3的算法
+     */
+    @TableField("build_type")
+    private String buildType;
+
+    /**
+     * 计算时间(秒为单位)
+     */
+    @TableField("compute_time")
+    private Long computeTime;
+
+    /**
+     * 场景来源,相机拍摄10以内表示,1表示八目,2双目,3转台,4 激光  其他来源10以上,11:一键换装,12:123看房,13文通虚拟场景,14上传的matterport场景
+     */
+    @TableField("scene_source")
+    private Integer sceneSource;
+
+    /**
+     * 大场景序号(随心装场景码)
+     */
+    @TableField("vrnum")
+    private String vrnum;
+
+    @TableField("unicode")
+    private String unicode;
+
+    @TableField("mosaics")
+    private String mosaics;
+
+    /**
+     * 是否已升级v4(0-否,1-是)
+     */
+    @TableField("is_upgrade")
+    private Integer isUpgrade;
+
+    /**
+     * 是否是obj场景
+     */
+    @TableField("is_obj")
+    private Integer isObj;
+
+
+}

+ 141 - 0
src/main/java/com/fdkankan/agent/entity/User.java

@@ -0,0 +1,141 @@
+package com.fdkankan.agent.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-11-09
+ */
+@Getter
+@Setter
+@TableName("t_user")
+public class User implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 头像对应的链接地址
+     */
+    @TableField("head")
+    private String head;
+
+    /**
+     * 用户密码
+     */
+    @TableField("password")
+    private String password;
+
+    /**
+     * 用户邮箱
+     */
+    @TableField("email")
+    private String email;
+
+    /**
+     * 注册时间
+     */
+    @TableField("register_time")
+    private Date registerTime;
+
+    /**
+     * 用户名
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 昵称
+     */
+    @TableField("nick_name")
+    private String nickName;
+
+    /**
+     * 0表示禁言(bbs)
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 0表示拒绝通知,1表示接受通知
+     */
+    @TableField("is_notice")
+    private Integer isNotice;
+
+    /**
+     * 机构名称
+     */
+    @TableField("organization_name")
+    private String organizationName;
+
+    /**
+     * 主页链接
+     */
+    @TableField("main_page")
+    private String mainPage;
+
+    /**
+     * 所在国家,默认是86
+     */
+    @TableField("country")
+    private String country;
+
+    /**
+     * 所在省份
+     */
+    @TableField("province")
+    private String province;
+
+    /**
+     * 所在城市
+     */
+    @TableField("city")
+    private String city;
+
+    /**
+     * 可下载场景总数
+     */
+    @TableField("download_num_total")
+    private Integer downloadNumTotal;
+
+    /**
+     * 已下载场景总数
+     */
+    @TableField("download_num")
+    private Integer downloadNum;
+
+    /**
+     * 创建时间
+     */
+    @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;
+
+
+}

+ 22 - 0
src/main/java/com/fdkankan/agent/exception/BusinessException.java

@@ -0,0 +1,22 @@
+package com.fdkankan.agent.exception;
+
+import com.fdkankan.agent.common.ResultCode;
+import lombok.Data;
+
+/**
+ * 自定义业务异常类
+ */
+@Data
+public class BusinessException extends RuntimeException {
+    private int code;
+    private String message;
+
+    public BusinessException(Integer code, String msg){
+        this.code = code;
+        this.message = msg;
+    }
+    public BusinessException(ResultCode errorCode) {
+        this.code = errorCode.code;
+        this.message = errorCode.msg;
+    }
+}

+ 35 - 0
src/main/java/com/fdkankan/agent/exception/GlobalExceptionHandler.java

@@ -0,0 +1,35 @@
+package com.fdkankan.agent.exception;
+
+import com.fdkankan.agent.common.ResultData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * 全局异常处理器
+ */
+@RestControllerAdvice
+@Slf4j
+public class GlobalExceptionHandler {
+
+    /**
+     * 处理未知异常
+     */
+    @ResponseBody
+    @ExceptionHandler(value = Exception.class)
+    public ResultData exceptionHandler(Exception e) throws Exception {
+        log.error("服务错误:", e);
+        return ResultData.error( 500, "系统错误");
+    }
+
+    /**
+     * 处理业务异常
+     */
+    @ResponseBody
+    @ExceptionHandler(value = BusinessException.class)
+    public ResultData businessExceptionHandler(BusinessException e) {
+        log.error("业务异常code:{},message:{}", e.getCode(), e.getMessage());
+        return ResultData.error(e.getCode(), e.getMessage());
+    }
+}

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

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

+ 20 - 0
src/main/java/com/fdkankan/agent/httpClient/address/FdkkAddressSource.java

@@ -0,0 +1,20 @@
+package com.fdkankan.agent.httpClient.address;
+
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FdkkAddressSource implements AddressSource {
+
+    @Value("${4dkk.fdService.basePath}")
+    private String basePath;
+
+
+    @Override
+    public ForestAddress getAddress(ForestRequest forestRequest) {
+        return new ForestAddress("","",null,basePath);
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/agent/httpClient/address/LaserAddressSource.java

@@ -0,0 +1,20 @@
+package com.fdkankan.agent.httpClient.address;
+
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class LaserAddressSource implements AddressSource {
+
+    @Value("${4dkk.laserService.basePath}")
+    private String basePath;
+
+
+    @Override
+    public ForestAddress getAddress(ForestRequest forestRequest) {
+        return new ForestAddress("","",null,basePath);
+    }
+}

+ 34 - 0
src/main/java/com/fdkankan/agent/httpClient/client/FdKKClient.java

@@ -0,0 +1,34 @@
+package com.fdkankan.agent.httpClient.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.annotation.Address;
+import com.dtflys.forest.annotation.Header;
+import com.dtflys.forest.annotation.JSONBody;
+import com.dtflys.forest.annotation.Post;
+import com.fdkankan.agent.httpClient.address.FdkkAddressSource;
+import com.fdkankan.agent.httpClient.request.FdkkLoginRequest;
+import com.fdkankan.agent.httpClient.response.FdkkLoginVo;
+import com.fdkankan.agent.httpClient.response.FdkkResponse;
+
+/**
+ * 获取,调用4dkk服务
+ */
+@Address(source = FdkkAddressSource.class)
+public interface FdKKClient {
+
+    /**
+     * 登录
+     */
+    @Post("/api/sso/user/login")
+    FdkkResponse<FdkkLoginVo> fdkkLogin(@JSONBody FdkkLoginRequest fdkkLoginRequest);
+
+    /**
+     * 获取用户详情
+     */
+    @Post("/api/user/getUserInfo")
+    FdkkResponse getUserInfo(@JSONBody JSONObject jsonObject, @Header("token") String token);
+
+
+
+
+}

+ 28 - 0
src/main/java/com/fdkankan/agent/httpClient/client/LaserClient.java

@@ -0,0 +1,28 @@
+package com.fdkankan.agent.httpClient.client;
+
+import com.dtflys.forest.annotation.*;
+import com.fdkankan.agent.httpClient.address.LaserAddressSource;
+import com.fdkankan.agent.httpClient.request.LaserSceneMoveParam;
+import com.fdkankan.agent.httpClient.request.LaserSceneParam;
+import com.fdkankan.agent.httpClient.response.FdkkResponse;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 获取,调用4dkk服务
+ */
+@Address(source = LaserAddressSource.class)
+public interface LaserClient {
+
+    /**
+     * 获取深时场景数据
+     */
+    @Post("/laser/4dage/managerSceneList")
+    FdkkResponse sceneList(@JSONBody LaserSceneParam param);
+    /**
+     * 相机迁移
+     */
+    @Post("/laser/4dage/scene/migrate")
+    FdkkResponse migrate(@JSONBody LaserSceneMoveParam param);
+}

+ 11 - 0
src/main/java/com/fdkankan/agent/httpClient/request/FdkkLoginRequest.java

@@ -0,0 +1,11 @@
+package com.fdkankan.agent.httpClient.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class FdkkLoginRequest {
+    private String phoneNum;
+    private String password;
+}

+ 13 - 0
src/main/java/com/fdkankan/agent/httpClient/request/LaserSceneMoveParam.java

@@ -0,0 +1,13 @@
+package com.fdkankan.agent.httpClient.request;
+
+import lombok.Data;
+
+@Data
+public class LaserSceneMoveParam {
+
+    private String phone;
+    private String sceneCode;
+    private String snCode;
+    private String toSnCode;
+    private Integer userId;
+}

+ 15 - 0
src/main/java/com/fdkankan/agent/httpClient/request/LaserSceneParam.java

@@ -0,0 +1,15 @@
+package com.fdkankan.agent.httpClient.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class LaserSceneParam {
+    private Integer pageNum;
+    private Integer pageSize;
+    private Integer selectType = 1;
+    private List<String> sceneCodes;
+    private String title;
+    private Integer status;
+}

+ 9 - 0
src/main/java/com/fdkankan/agent/httpClient/response/FdkkLoginVo.java

@@ -0,0 +1,9 @@
+package com.fdkankan.agent.httpClient.response;
+
+import lombok.Data;
+
+@Data
+public class FdkkLoginVo {
+    private String token;
+    private FdkkUserVo user;
+}

+ 11 - 0
src/main/java/com/fdkankan/agent/httpClient/response/FdkkResponse.java

@@ -0,0 +1,11 @@
+package com.fdkankan.agent.httpClient.response;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+@Data
+public class FdkkResponse<T> {
+    private Integer code;
+    private String msg;
+    private JSONObject data;
+}

+ 25 - 0
src/main/java/com/fdkankan/agent/httpClient/response/FdkkUserVo.java

@@ -0,0 +1,25 @@
+package com.fdkankan.agent.httpClient.response;
+
+import lombok.Data;
+
+@Data
+public class FdkkUserVo {
+    private Long id ;
+    private String userName;                    //用户名
+    private String head;                        //头像
+    private String nickName;                    //昵称
+    private String email;                       //邮箱
+    private Integer availableSpace;             //可用空间
+    private Long cameraCount;                   //已绑相机
+    private Integer downloadNum;                //已下载场景总数
+    private Integer downloadNumTotal;           //总的下载场景总数
+    private Long incrementBindNum;              //已绑定的会员权益数量
+    private Long incrementNum;                  //会员权益数量
+
+    private Long cameraId;
+    private Integer cameraLogin;
+
+    private Long sceneCount;
+    private Long expansionTotal;
+
+}

+ 152 - 0
src/main/java/com/fdkankan/agent/httpClient/service/LaserService.java

@@ -0,0 +1,152 @@
+package com.fdkankan.agent.httpClient.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.agent.common.PageInfo;
+import com.fdkankan.agent.entity.Camera;
+import com.fdkankan.agent.entity.CameraDetail;
+import com.fdkankan.agent.httpClient.client.LaserClient;
+import com.fdkankan.agent.httpClient.request.LaserSceneMoveParam;
+import com.fdkankan.agent.httpClient.request.LaserSceneParam;
+import com.fdkankan.agent.httpClient.response.FdkkResponse;
+import com.fdkankan.agent.request.SceneParam;
+import com.fdkankan.agent.response.SceneVo;
+import com.fdkankan.agent.service.ICameraDetailService;
+import com.fdkankan.agent.service.ICameraService;
+import com.fdkankan.agent.service.IUserService;
+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.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class LaserService {
+
+    @Resource
+    LaserClient laserClient;
+    @Value("${4dkk.laserService.basePath}")
+    private String basePath;
+    @Autowired
+    IUserService userService;
+    @Autowired
+    ICameraDetailService cameraDetailService;
+    @Autowired
+    ICameraService cameraService;
+
+
+    public PageInfo pageList(SceneParam param) {
+        LaserSceneParam laserSceneParam = getLaserSceneParam(param);
+        FdkkResponse response = laserClient.sceneList(laserSceneParam);
+        JSONObject jsonObject =response.getData();
+        if(jsonObject == null){
+            Page<SceneVo> voPage = new Page<>(param.getPageNum(),param.getPageSize());
+            voPage.setRecords(new ArrayList<>());
+            voPage.setTotal(0);
+            return PageInfo.PageInfo(voPage);
+        }
+        JSONArray list = jsonObject.getJSONArray("list");
+        long total =jsonObject.getLong("total");
+
+        List<SceneVo> sceneVoList = new ArrayList<>();
+        String newBasePath = basePath;
+        //String newBasePath = basePath.contains("uat")? basePath += "/uat" : basePath;
+        newBasePath = newBasePath.contains("dev")? newBasePath += "/dev" : newBasePath;
+        for (Object o : list) {
+            String res = JSONObject.toJSONString(o);
+            SceneVo vo = JSONObject.parseObject(res,SceneVo.class);
+            //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中
+            JSONObject obj = (JSONObject) o;
+            vo.setStatusString(getLaserStatus(vo.getStatus()));
+            vo.setStatus(toFdStatus(vo.getStatus()));
+            if(vo.getStatus() == -3){
+                vo.setPayStatus(-1);
+            }else {
+                vo.setPayStatus(1);
+            }
+            vo.setSceneName(obj.getString("title"));
+            vo.setUserName(obj.getString("phone"));
+            vo.setThumb(newBasePath +"/index.html?m="+vo.getNum() );
+            vo.setPayStatus(1);
+            sceneVoList.add(vo);
+        }
+
+        Page<SceneVo> voPage = new Page<>(param.getPageNum(),param.getPageSize());
+        voPage.setRecords(sceneVoList);
+        voPage.setTotal(total);
+        return PageInfo.PageInfo(voPage);
+    }
+
+    private LaserSceneParam getLaserSceneParam(SceneParam param) {
+        if(StringUtils.isNotBlank(param.getUserName())){
+            List<CameraDetail> cameraDetails = cameraDetailService.getByUserName(param.getAgentId(),param.getUserName());
+            param.setSnCodes(this.setSnCodes(cameraDetails));
+        }
+        if(StringUtils.isNotBlank(param.getUserName()) && StringUtils.isBlank(param.getSnCode()) &&
+                (param.getSnCodes() == null || param.getSnCodes().size() <=0)){
+            param.setSnCode("phoneEmptySelect");
+        }
+        LaserSceneParam newParam = new LaserSceneParam();
+        BeanUtils.copyProperties(param,newParam);
+        newParam.setTitle(param.getSceneName());
+        return newParam;
+    }
+
+    private List<String> setSnCodes(List<CameraDetail> cameraDetails) {
+        if(cameraDetails != null && cameraDetails.size() >0){
+            Set<Long> cameraIds = cameraDetails.stream()
+                    .filter(entity -> entity.getGoodsId() == 10).map(CameraDetail::getCameraId).collect(Collectors.toSet());
+            if(cameraIds.size() >0){
+                List<Camera> cameraList = cameraService.listByIds(cameraIds);
+                return cameraList.stream().map(Camera::getSnCode).collect(Collectors.toList());
+            }
+        }
+        return null;
+    }
+
+    private Integer toFdStatus(Integer status) {
+        //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中
+        switch (status){
+            case 0 :
+            case 4 :
+                return 0;
+            case 2 : return -2;
+            case 3 : return -3;
+            default: return -1;
+        }
+    }
+
+    public static String getLaserStatus(Integer status){
+        //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中
+        switch (status){
+            case -1 : return "场景已删除";
+            case 0 : return "计算中";
+            case 1 : return "计算失败";
+            case 2 : return "计算成功";
+            case 3 : return "封存";
+            case 4 : return "生成OBJ中";
+            default: return "";
+        }
+    }
+
+    public void move(String num, String snCode, String toSnCode) {
+        LaserSceneMoveParam param = new LaserSceneMoveParam();
+        param.setSceneCode(num);
+        param.setSnCode(snCode);
+        param.setToSnCode(toSnCode);
+        laserClient.migrate(param);
+    }
+
+
+
+
+
+}

+ 90 - 0
src/main/java/com/fdkankan/agent/interceptor/TokenInterceptor.java

@@ -0,0 +1,90 @@
+package com.fdkankan.agent.interceptor;
+
+
+import cn.hutool.http.ContentType;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.agent.common.ResultCode;
+import com.fdkankan.agent.common.ResultData;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpHeaders;
+import org.apache.tomcat.util.http.MimeHeaders;
+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;
+import java.lang.reflect.Field;
+
+@Component
+@Slf4j
+public class TokenInterceptor implements HandlerInterceptor {
+
+	@Autowired
+	private RedisUtil redisUtil;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		response.setHeader(HttpHeaders.CONTENT_TYPE, ContentType.JSON.getValue());
+		String token = request.getHeader("token");
+		if( request.getMethod().equals("GET")){
+			if(StringUtils.isBlank(token)){
+				return true;
+			}
+		}
+		if(StringUtils.isEmpty(token)){
+			this.needLogin(request,response);
+			return false;
+		}
+		try {
+			String fdToken = String.format(RedisKey.TOKEN_V3,token);
+			if( redisUtil.hasKey(fdToken)){
+				redisUtil.expire(fdToken,6 * 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(ResultData.error(ResultCode.USER_NOT_LOGIN));
+			response.getWriter().append(result);
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
+
+
+	/**
+	 * 修改header信息,key-value键值对儿加入到header中
+	 */
+	private void reflectSetparam(HttpServletRequest request,String key,String value){
+		Class<? extends HttpServletRequest> requestClass = request.getClass();
+		System.out.println("request实现类="+requestClass.getName());
+		try {
+			Field request1 = requestClass.getDeclaredField("request");
+			request1.setAccessible(true);
+			Object o = request1.get(request);
+			Field coyoteRequest = o.getClass().getDeclaredField("coyoteRequest");
+			coyoteRequest.setAccessible(true);
+			Object o1 = coyoteRequest.get(o);
+			System.out.println("coyoteRequest实现类="+o1.getClass().getName());
+			Field headers = o1.getClass().getDeclaredField("headers");
+			headers.setAccessible(true);
+			MimeHeaders o2 = (MimeHeaders)headers.get(o1);
+			o2.addValue(key).setString(value);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}
+

+ 18 - 0
src/main/java/com/fdkankan/agent/mapper/IAgentNewMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.AgentNew;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Mapper
+public interface IAgentNewMapper extends BaseMapper<AgentNew> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/agent/mapper/ICameraDetailMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.CameraDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 相机子表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Mapper
+public interface ICameraDetailMapper extends BaseMapper<CameraDetail> {
+
+}

+ 22 - 0
src/main/java/com/fdkankan/agent/mapper/ICameraMapper.java

@@ -0,0 +1,22 @@
+package com.fdkankan.agent.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.agent.entity.Camera;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.agent.request.CameraParam;
+import com.fdkankan.agent.response.CameraDetailVo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 相机主表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Mapper
+public interface ICameraMapper extends BaseMapper<Camera> {
+
+    Page<CameraDetailVo> pageList(Page<Object> page, CameraParam param);
+}

+ 18 - 0
src/main/java/com/fdkankan/agent/mapper/IScenePlusExtMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.ScenePlusExt;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Mapper
+public interface IScenePlusExtMapper extends BaseMapper<ScenePlusExt> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/agent/mapper/IScenePlusMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.ScenePlus;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景主表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Mapper
+public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
+
+}

+ 22 - 0
src/main/java/com/fdkankan/agent/mapper/ISceneProMapper.java

@@ -0,0 +1,22 @@
+package com.fdkankan.agent.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.agent.entity.ScenePro;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.agent.request.SceneParam;
+import com.fdkankan.agent.response.SceneVo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * pro场景表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Mapper
+public interface ISceneProMapper extends BaseMapper<ScenePro> {
+
+    Page<SceneVo> pageList(Page<SceneVo> page, SceneParam param);
+}

+ 18 - 0
src/main/java/com/fdkankan/agent/mapper/IUserMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.User;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 用户信息表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Mapper
+public interface IUserMapper extends BaseMapper<User> {
+
+}

+ 38 - 0
src/main/java/com/fdkankan/agent/request/CameraParam.java

@@ -0,0 +1,38 @@
+package com.fdkankan.agent.request;
+
+import com.fdkankan.agent.common.RequestBase;
+import com.fdkankan.agent.util.Dateutils;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CameraParam extends RequestBase {
+    private Long id;                            //设备id
+    private Long userId;                        //用户id
+    private String snCode;                      //相机snCode
+    private String userName;                    //账号
+    private Integer outType = 4;                    //出库类型 0表示正常销售,1表示员工自用,2表示礼品赠送,3表示其他
+    private Integer type;                       //设备类型  0旧双目相机,1 四维看看 ,2 四维看看lite,9四维看见,10四维深时
+    private Integer agentId;
+
+    private List<String> activatedTime;
+    private String activatedStartTime;          //激活时间
+    private String activatedEndTime;            //激活时间
+
+
+
+    public String getActivatedStartTime() {
+        if(activatedTime != null && activatedTime.size() >1){
+            return Dateutils.getStartTime(activatedTime.get(0));
+        }
+        return Dateutils.getStartTime(activatedStartTime);
+    }
+
+    public String getActivatedEndTime() {
+        if(activatedTime != null && activatedTime.size() >1){
+            return Dateutils.getEndTime(activatedTime.get(1));
+        }
+        return Dateutils.getEndTime(activatedEndTime);
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/agent/request/SceneParam.java

@@ -0,0 +1,20 @@
+package com.fdkankan.agent.request;
+
+import com.fdkankan.agent.common.RequestBase;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SceneParam extends RequestBase {
+    private String num;
+    private String sceneName;   //场景标题
+    private String snCode;      //sn码
+    private String userName;    //绑定账号
+    private Integer type = 0;   //0 看看,1看见,2深时
+    private Integer companyId;
+
+    private Integer agentId;
+
+    private List<String> snCodes;
+}

+ 21 - 0
src/main/java/com/fdkankan/agent/response/CameraDetailVo.java

@@ -0,0 +1,21 @@
+package com.fdkankan.agent.response;
+
+import lombok.Data;
+
+@Data
+public class CameraDetailVo {
+    private Long id;                    //相机id
+    private String snCode;              //snCode
+    private String activatedTime;       //激活时间
+    private String outTime;             //出库时间
+
+    private String wifiName;            //wifi名称
+    private String type;                //相机类型,0表示双目,1四维看看pro,2 四维看看lite,9 双目转台,10 激光转台
+    private String outType;             //出库类型
+    private String companyName;         //客户名称
+    private String userName;            //绑定账号
+
+    private String orderSn;
+
+
+}

+ 25 - 0
src/main/java/com/fdkankan/agent/response/SceneVo.java

@@ -0,0 +1,25 @@
+package com.fdkankan.agent.response;
+
+import lombok.Data;
+
+@Data
+public class SceneVo {
+    private String sceneName;       //场景标题
+    private String num;             //场景码
+    private String createTime;      //拍摄时间
+    private String snCode;          //相机sn码
+    private String sceneSize;       //场景大小
+    private Boolean isCopy = false;          //是否复制
+    private String copyTime;        //复制时间
+    private String userName;        //绑定账号
+    private Integer viewCount;      //浏览量
+    private Integer status;         //状态
+    private String statusString;    //中文状态
+    private Integer payStatus;      //
+    private String sceneVersion;   //场景版本
+
+    private String thumb;           //场景链接
+
+    private String algorithmTime;  //v4场景计算完成时间
+
+}

+ 19 - 0
src/main/java/com/fdkankan/agent/service/IAgentNewService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.AgentNew;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+public interface IAgentNewService extends IService<AgentNew> {
+
+    List<AgentNew> getByUserName(String phoneNum);
+}

+ 19 - 0
src/main/java/com/fdkankan/agent/service/ICameraDetailService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.CameraDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机子表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+public interface ICameraDetailService extends IService<CameraDetail> {
+
+    List<CameraDetail> getByUserName(Integer agentId,String userName);
+}

+ 18 - 0
src/main/java/com/fdkankan/agent/service/ICameraService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.Camera;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.agent.request.CameraParam;
+
+/**
+ * <p>
+ * 相机主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+public interface ICameraService extends IService<Camera> {
+
+    Object pageList(CameraParam param);
+}

+ 16 - 0
src/main/java/com/fdkankan/agent/service/IScenePlusExtService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.ScenePlusExt;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+public interface IScenePlusExtService extends IService<ScenePlusExt> {
+
+}

+ 16 - 0
src/main/java/com/fdkankan/agent/service/IScenePlusService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.ScenePlus;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 场景主表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+public interface IScenePlusService extends IService<ScenePlus> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/agent/service/ISceneProService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.ScenePro;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.agent.request.SceneParam;
+
+/**
+ * <p>
+ * pro场景表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+public interface ISceneProService extends IService<ScenePro> {
+
+    Object pageList(SceneParam param);
+}

+ 16 - 0
src/main/java/com/fdkankan/agent/service/IUserService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.User;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 用户信息表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+public interface IUserService extends IService<User> {
+
+}

+ 29 - 0
src/main/java/com/fdkankan/agent/service/impl/AgentNewServiceImpl.java

@@ -0,0 +1,29 @@
+package com.fdkankan.agent.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.agent.entity.AgentNew;
+import com.fdkankan.agent.mapper.IAgentNewMapper;
+import com.fdkankan.agent.service.IAgentNewService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Service
+public class AgentNewServiceImpl extends ServiceImpl<IAgentNewMapper, AgentNew> implements IAgentNewService {
+
+    @Override
+    public List<AgentNew> getByUserName(String phoneNum) {
+        LambdaQueryWrapper<AgentNew> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(AgentNew::getUserName,phoneNum);
+        return this.list(wrapper);
+    }
+}

+ 47 - 0
src/main/java/com/fdkankan/agent/service/impl/CameraDetailServiceImpl.java

@@ -0,0 +1,47 @@
+package com.fdkankan.agent.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.agent.entity.CameraDetail;
+import com.fdkankan.agent.entity.User;
+import com.fdkankan.agent.mapper.ICameraDetailMapper;
+import com.fdkankan.agent.mapper.IUserMapper;
+import com.fdkankan.agent.service.ICameraDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.agent.service.IUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 相机子表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Service
+public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, CameraDetail> implements ICameraDetailService {
+
+    @Autowired
+    IUserService userService;
+
+    @Override
+    public List<CameraDetail> getByUserName(Integer agentId,String userName) {
+        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(User::getUserName,userName);
+        List<User> list = userService.list(wrapper);
+        if(list.size() >0){
+            List<Long> userIds = list.stream().map(User::getId).collect(Collectors.toList());
+            if(userIds.size() >0){
+                LambdaQueryWrapper<CameraDetail> dtW = new LambdaQueryWrapper<>();
+                dtW.in(CameraDetail::getUserId,userIds);
+                dtW.eq(CameraDetail::getAgentId,agentId);
+                return this.list(dtW);
+            }
+        }
+        return null;
+    }
+}

+ 30 - 0
src/main/java/com/fdkankan/agent/service/impl/CameraServiceImpl.java

@@ -0,0 +1,30 @@
+package com.fdkankan.agent.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.agent.common.PageInfo;
+import com.fdkankan.agent.entity.Camera;
+import com.fdkankan.agent.mapper.ICameraMapper;
+import com.fdkankan.agent.request.CameraParam;
+import com.fdkankan.agent.response.CameraDetailVo;
+import com.fdkankan.agent.service.ICameraService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 相机主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Service
+public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
+
+
+    @Override
+    public Object pageList(CameraParam param) {
+        Page<CameraDetailVo> voPage = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
+        return PageInfo.PageInfo(voPage);
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/agent/service/impl/ScenePlusExtServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.agent.service.impl;
+
+import com.fdkankan.agent.entity.ScenePlusExt;
+import com.fdkankan.agent.mapper.IScenePlusExtMapper;
+import com.fdkankan.agent.service.IScenePlusExtService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Service
+public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, ScenePlusExt> implements IScenePlusExtService {
+
+}

+ 20 - 0
src/main/java/com/fdkankan/agent/service/impl/ScenePlusServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.agent.service.impl;
+
+import com.fdkankan.agent.entity.ScenePlus;
+import com.fdkankan.agent.mapper.IScenePlusMapper;
+import com.fdkankan.agent.service.IScenePlusService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 场景主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Service
+public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
+
+}

+ 45 - 0
src/main/java/com/fdkankan/agent/service/impl/SceneProServiceImpl.java

@@ -0,0 +1,45 @@
+package com.fdkankan.agent.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.agent.common.PageInfo;
+import com.fdkankan.agent.entity.ScenePro;
+import com.fdkankan.agent.httpClient.service.LaserService;
+import com.fdkankan.agent.mapper.ISceneProMapper;
+import com.fdkankan.agent.request.SceneParam;
+import com.fdkankan.agent.response.SceneVo;
+import com.fdkankan.agent.service.ISceneProService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.agent.util.SceneStatusUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * pro场景表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Service
+public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
+
+    @Autowired
+    LaserService laserService;
+
+    @Override
+    public Object pageList(SceneParam param) {
+        if(param.getType() == 2){  //深时
+            return laserService.pageList(param);
+        }
+        Page<SceneVo> page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
+//        for (SceneVo record : page.getRecords()) {
+//            record.setStatusString(SceneStatusUtil.getStatusString(record));
+//        }
+        return PageInfo.PageInfo(page);
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/agent/service/impl/UserServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.agent.service.impl;
+
+import com.fdkankan.agent.entity.User;
+import com.fdkankan.agent.mapper.IUserMapper;
+import com.fdkankan.agent.service.IUserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户信息表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-11-09
+ */
+@Service
+public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements IUserService {
+
+}

+ 157 - 0
src/main/java/com/fdkankan/agent/util/Dateutils.java

@@ -0,0 +1,157 @@
+package com.fdkankan.agent.util;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+public class Dateutils {
+
+    public static int  DAY =  Calendar.DAY_OF_MONTH;
+    public static int  WEEK =  Calendar.WEEK_OF_MONTH;
+    public static int  MONTH =  Calendar.MONTH;
+
+    /**
+     * 获取指定时间区间的所有数据(包含日期和月份)
+     * @param dBegin
+     * @param dEnd
+     * @param rule 日历规则 如:Calendar.DAY_OF_MONTH
+     * @return
+     */
+    public static List<Date> findDates(Date dBegin, Date dEnd, int rule) {
+        List<Date> lDate = new ArrayList<>();
+        if (dEnd.before(dBegin)){
+            return lDate;
+        }
+        Calendar calBegin = Calendar.getInstance();
+        // 使用给定的 Date 设置此 Calendar 的时间
+        calBegin.setTime(dBegin);
+        Calendar calEnd = Calendar.getInstance();
+        // 使用给定的 Date 设置此 Calendar 的时间
+        calEnd.setTime(dEnd);
+        // 测试此日期是否在指定日期之后
+        while (dEnd.after(calBegin.getTime())) {
+            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
+            Date time = calBegin.getTime();
+            if(rule == Calendar.WEEK_OF_MONTH){
+                time = getMonday(time);
+            }
+            lDate.add(time);
+            calBegin.add(rule, 1);
+        }
+        return lDate;
+    }
+    public static List<String> findDatesStr(Date dBegin, Date dEnd, int rule) {
+        List<String> datesStr = new ArrayList<>();
+        List<Date> dates = findDates(dBegin, dEnd, rule);
+        for (Date date : dates) {
+            String day ;
+            if(rule == MONTH){
+                day =getMonthDate(date);
+            }else {
+                day = getDayDate(date);
+            }
+            datesStr.add(day);
+        }
+        return datesStr;
+    }
+    public static Date getDate(String date) {
+        try {
+            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new Date();
+    }
+    public static Date getMonday(Date date) {
+        Calendar calBegin = Calendar.getInstance();
+        calBegin.setTime(date);
+        calBegin.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);    //周一
+        return calBegin.getTime();
+    }
+
+    public static String getDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
+    }
+
+    public static String getMonthDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM").format(date);
+    }
+    public static Date getMonthDate(String date) {
+        try {
+            return new SimpleDateFormat("yyyy-MM").parse(date);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new Date();
+    }
+
+    public static String getDayDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(date);
+    }
+    public static String getDayZeroDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(date) +" 00:00:00";
+    }
+
+
+    public static String getHalfYearStr() {
+        return new SimpleDateFormat("yyyy-MM-dd").format(getHalfYear())+" 00:00:00";
+    }
+    public static Date getHalfYear() {
+        Calendar c = Calendar.getInstance();
+        c.setTime(new Date());
+        c.add(Calendar.MONTH, -6);
+        return c.getTime();
+    }
+
+    public static  String getLastMonTh(Date date){
+        Calendar ca = Calendar.getInstance();
+        ca.setTime(date);
+        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
+        return new SimpleDateFormat("yyyy-MM-dd").format(ca.getTime()) +" 23:59:59";
+    }
+
+    public static String formatStartTime(String startTime) {
+        if(StringUtils.isBlank(startTime)){
+            startTime = Dateutils.getHalfYearStr();
+        }
+        if(startTime.length() <12){  //月,开始时间到1号 0点
+            startTime +=  " 00:00:00";
+        }
+        return startTime;
+    }
+    public static String formatEndTime(String endTime) {
+        if(StringUtils.isBlank(endTime)){
+            endTime = Dateutils.getDate(new Date());
+        }
+        if(endTime.length() <12 ){  //月,开始时间到1号 0点
+            endTime +=  " 23:59:59";
+        }
+        return endTime;
+    }
+
+
+    public static String getStartTime(String startTime) {
+        if(StringUtils.isBlank(startTime)){
+            return null;
+        }
+        if(startTime.length() > 12){
+            return startTime;
+        }
+        return startTime +" 00:00:00";
+    }
+
+    public static String getEndTime(String endTime) {
+        if(StringUtils.isBlank(endTime)){
+            return null;
+        }
+        if(endTime.length() > 12){
+            return endTime;
+        }
+        return endTime +" 23:59:59";
+    }
+
+}

+ 25 - 0
src/main/java/com/fdkankan/agent/util/SceneStatusUtil.java

@@ -0,0 +1,25 @@
+package com.fdkankan.agent.util;
+
+
+import com.fdkankan.agent.response.SceneVo;
+
+public class SceneStatusUtil {
+
+    public static String getStatusString(SceneVo vo){
+        if(vo == null || vo.getPayStatus() == null){
+            return "";
+        }
+        switch (vo.getStatus()){
+            case 0 : return "计算中";
+            case 1 :
+            case -2 :
+                if(vo.getPayStatus() != 1){
+                    return  "封存";
+                }
+                return "计算成功";
+            case -1 : return "计算失败";
+            default: return "";
+        }
+
+    }
+}

+ 5 - 0
src/main/resources/mapper/agent/AgentNewMapper.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.agent.mapper.IAgentNewMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/agent/CameraDetailMapper.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.agent.mapper.ICameraDetailMapper">
+
+</mapper>

+ 35 - 0
src/main/resources/mapper/agent/CameraMapper.xml

@@ -0,0 +1,35 @@
+<?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.agent.mapper.ICameraMapper">
+
+    <select id="pageList" resultType="com.fdkankan.agent.response.CameraDetailVo">
+        select c.id ,c.sn_code,c.activated_time ,d.create_time as outTime ,d.type,d.own as outType  ,u.user_name, c.wifi_name,
+        d.order_sn
+        from t_camera c
+        left join t_camera_detail d on c.id = d.camera_id
+        left join t_user u on d.user_id = u.id
+        where c.rec_status = 'A' and d.agent_id = #{param.agentId}
+        <if test="param.userId !=null ">
+            and d.user_id = #{param.userId}
+        </if>
+        <if test="param.outType !=null ">
+            and d.own = #{param.outType}
+        </if>
+        <if test="param.type !=null ">
+            and d.type = #{param.type}
+        </if>
+        <if test="param.snCode !=null and param.snCode != '' ">
+            and c.sn_code like concat ('%',#{param.snCode},'%')
+        </if>
+        <if test="param.userName !=null and param.userName != '' ">
+            and u.user_name like  concat('%',#{param.userName},'%')
+        </if>
+        <if test="param.activatedStartTime !=null and param.activatedStartTime != '' ">
+            and c.activated_time &gt;= #{param.activatedStartTime}
+        </if>
+        <if test="param.activatedEndTime !=null and param.activatedEndTime != '' ">
+            and c.activated_time &lt;= #{param.activatedEndTime}
+        </if>
+        order by c.activated_time desc
+    </select>
+</mapper>

+ 5 - 0
src/main/resources/mapper/agent/ScenePlusExtMapper.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.agent.mapper.IScenePlusExtMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/agent/ScenePlusMapper.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.agent.mapper.IScenePlusMapper">
+
+</mapper>

+ 53 - 0
src/main/resources/mapper/agent/SceneProMapper.xml

@@ -0,0 +1,53 @@
+<?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.agent.mapper.ISceneProMapper">
+
+    <select id="pageList" resultType="com.fdkankan.agent.response.SceneVo">
+        SELECT * FROM(
+        select s.scene_name ,s.num,s.create_time,c.sn_code,s.space as sceneSize
+        ,u.user_name,s.view_count,s.status,s.pay_status,'v3' as scene_version ,s.web_site as thumb
+        ,null as algorithmTime
+        from t_scene_pro s
+        <include refid="commonWhere"></include>
+        <if test="param.sceneName != null and param.sceneName!='' ">
+            and s.scene_name like concat ('%',#{param.sceneName},'%')
+        </if>
+        and is_upgrade = 0
+        UNION
+        select s.title as sceneName ,s.num,s.create_time,c.sn_code,e.space as sceneSize
+        ,u.user_name,e.view_count,s.scene_status as status,s.pay_status,'v4' as scene_version,e.web_site as thumb
+        ,algorithm_time
+        from t_scene_plus s
+        left join t_scene_plus_ext e on s.id = e.plus_id
+        <include refid="commonWhere"></include>
+        <if test="param.sceneName != null and param.sceneName!='' ">
+            and s.title like concat ('%',#{param.sceneName},'%')
+        </if>
+        ) as tb
+        order by create_time desc
+    </select>
+
+    <sql id="commonWhere">
+        left join t_user u on s.user_id = u.id
+        left join t_camera c on s.camera_id = c.id
+        left join t_camera_detail d on c.id = d.camera_id
+        left join t_company co on d.company_id = co.id
+        where s.rec_status = 'A' and d.agent_id = #{param.agentId}
+        <if test="param.snCode != null and param.snCode !='' ">
+            and c.sn_code like concat ('%',#{param.snCode},'%')
+        </if>
+        <if test="param.userName != null and param.userName !='' ">
+            and u.user_name like concat ('%',#{param.userName},'%')
+        </if>
+        <if test="param.type !=null and param.type == 0">
+            and s.scene_source in (1,2,12,13,14)
+        </if>
+        <if test="param.type !=null and param.type == 1">
+            and s.scene_source = 3
+        </if>
+        <if test="param.companyId !=null ">
+            and co.id = #{param.companyId}
+        </if>
+    </sql>
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/agent/UserMapper.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.agent.mapper.IUserMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/ucenter/AgentNewMapper.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.ucenter.mapper.IAgentNewMapper">
+
+</mapper>