Parcourir la source

v1.4.0修改内容

lyhzzz il y a 2 ans
Parent
commit
dc7f1d9a4d
100 fichiers modifiés avec 3766 ajouts et 443 suppressions
  1. 12 1
      README.md
  2. 8 7
      pom.xml
  3. 29 0
      src/main/java/com/fdkankan/fusion/common/ResultCode.java
  4. 39 0
      src/main/java/com/fdkankan/fusion/common/enums/IdPreEnum.java
  5. 10 0
      src/main/java/com/fdkankan/fusion/common/util/IdUtils.java
  6. 0 145
      src/main/java/com/fdkankan/fusion/common/util/JwtUtil.java
  7. 7 0
      src/main/java/com/fdkankan/fusion/common/util/PatternEnum.java
  8. 11 0
      src/main/java/com/fdkankan/fusion/common/util/RedisKeyUtil.java
  9. 33 0
      src/main/java/com/fdkankan/fusion/config/MenuInit.java
  10. 56 56
      src/main/java/com/fdkankan/fusion/config/OriginFilter.java
  11. 154 0
      src/main/java/com/fdkankan/fusion/config/SaTokenConfigure.java
  12. 51 0
      src/main/java/com/fdkankan/fusion/config/StpInterfaceImpl.java
  13. 26 0
      src/main/java/com/fdkankan/fusion/config/ThreadPoolConfig.java
  14. 37 37
      src/main/java/com/fdkankan/fusion/config/WebAppConfig.java
  15. 7 15
      src/main/java/com/fdkankan/fusion/controller/BaseController.java
  16. 2 2
      src/main/java/com/fdkankan/fusion/controller/CaseController.java
  17. 18 0
      src/main/java/com/fdkankan/fusion/controller/CaseFilesController.java
  18. 2 4
      src/main/java/com/fdkankan/fusion/controller/HotIconController.java
  19. 45 3
      src/main/java/com/fdkankan/fusion/controller/LoginController.java
  20. 2 4
      src/main/java/com/fdkankan/fusion/controller/ModelController.java
  21. 6 0
      src/main/java/com/fdkankan/fusion/controller/SceneController.java
  22. 47 1
      src/main/java/com/fdkankan/fusion/controller/TestController.java
  23. 21 0
      src/main/java/com/fdkankan/fusion/controller/TmAttachmentController.java
  24. 84 0
      src/main/java/com/fdkankan/fusion/controller/TmCameraController.java
  25. 99 0
      src/main/java/com/fdkankan/fusion/controller/TmDepartmentController.java
  26. 42 0
      src/main/java/com/fdkankan/fusion/controller/TmMessageController.java
  27. 21 0
      src/main/java/com/fdkankan/fusion/controller/TmPermissionController.java
  28. 109 0
      src/main/java/com/fdkankan/fusion/controller/TmProjectController.java
  29. 21 0
      src/main/java/com/fdkankan/fusion/controller/TmRoleController.java
  30. 21 0
      src/main/java/com/fdkankan/fusion/controller/TmRolePermissionController.java
  31. 21 0
      src/main/java/com/fdkankan/fusion/controller/TmSceneController.java
  32. 91 0
      src/main/java/com/fdkankan/fusion/controller/TmUserController.java
  33. 21 0
      src/main/java/com/fdkankan/fusion/controller/TmUserRoleController.java
  34. 7 0
      src/main/java/com/fdkankan/fusion/entity/CaseEntity.java
  35. 95 0
      src/main/java/com/fdkankan/fusion/entity/TmAttachment.java
  36. 83 0
      src/main/java/com/fdkankan/fusion/entity/TmCamera.java
  37. 118 0
      src/main/java/com/fdkankan/fusion/entity/TmDepartment.java
  38. 77 0
      src/main/java/com/fdkankan/fusion/entity/TmMessage.java
  39. 67 0
      src/main/java/com/fdkankan/fusion/entity/TmPermission.java
  40. 186 0
      src/main/java/com/fdkankan/fusion/entity/TmProject.java
  41. 89 0
      src/main/java/com/fdkankan/fusion/entity/TmRole.java
  42. 60 0
      src/main/java/com/fdkankan/fusion/entity/TmRolePermission.java
  43. 107 0
      src/main/java/com/fdkankan/fusion/entity/TmScene.java
  44. 106 0
      src/main/java/com/fdkankan/fusion/entity/TmUser.java
  45. 68 0
      src/main/java/com/fdkankan/fusion/entity/TmUserRole.java
  46. 1 1
      src/main/java/com/fdkankan/fusion/generate/AutoGenerate.java
  47. 78 0
      src/main/java/com/fdkankan/fusion/httpClient/FdService.java
  48. 50 0
      src/main/java/com/fdkankan/fusion/httpClient/client/FdKKClient.java
  49. 0 35
      src/main/java/com/fdkankan/fusion/httpClient/client/FdKKNewClient.java
  50. 0 18
      src/main/java/com/fdkankan/fusion/httpClient/client/OverallClient.java
  51. 34 0
      src/main/java/com/fdkankan/fusion/httpClient/request/FdkkCameraParam.java
  52. 29 1
      src/main/java/com/fdkankan/fusion/httpClient/request/FdkkLoginRequest.java
  53. 4 0
      src/main/java/com/fdkankan/fusion/httpClient/request/LaserSceneParam.java
  54. 3 0
      src/main/java/com/fdkankan/fusion/httpClient/response/FdkkLoginVo.java
  55. 90 90
      src/main/java/com/fdkankan/fusion/interceptor/TokenInterceptor.java
  56. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmAttachmentMapper.java
  57. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmCameraMapper.java
  58. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmDepartmentMapper.java
  59. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmMessageMapper.java
  60. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmPermissionMapper.java
  61. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmProjectMapper.java
  62. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmRoleMapper.java
  63. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmRolePermissionMapper.java
  64. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmSceneMapper.java
  65. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmUserMapper.java
  66. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ITmUserRoleMapper.java
  67. 15 0
      src/main/java/com/fdkankan/fusion/request/CommonDto.java
  68. 12 0
      src/main/java/com/fdkankan/fusion/request/MessageReqDto.java
  69. 19 0
      src/main/java/com/fdkankan/fusion/request/ProjectRandCodeDto.java
  70. 15 0
      src/main/java/com/fdkankan/fusion/request/ProjectRequest.java
  71. 50 0
      src/main/java/com/fdkankan/fusion/request/ProjectRequestDto.java
  72. 2 0
      src/main/java/com/fdkankan/fusion/request/ScenePram.java
  73. 13 0
      src/main/java/com/fdkankan/fusion/response/BindCameraDto.java
  74. 64 0
      src/main/java/com/fdkankan/fusion/response/CameraVo.java
  75. 13 0
      src/main/java/com/fdkankan/fusion/response/ProjectRandCodeVo.java
  76. 29 0
      src/main/java/com/fdkankan/fusion/response/UserAddRequest.java
  77. 2 0
      src/main/java/com/fdkankan/fusion/service/ICaseFilesService.java
  78. 4 0
      src/main/java/com/fdkankan/fusion/service/ICaseService.java
  79. 1 1
      src/main/java/com/fdkankan/fusion/service/IModelService.java
  80. 2 0
      src/main/java/com/fdkankan/fusion/service/ISceneService.java
  81. 18 0
      src/main/java/com/fdkankan/fusion/service/ITmAttachmentService.java
  82. 38 0
      src/main/java/com/fdkankan/fusion/service/ITmCameraService.java
  83. 31 0
      src/main/java/com/fdkankan/fusion/service/ITmDepartmentService.java
  84. 20 0
      src/main/java/com/fdkankan/fusion/service/ITmMessageService.java
  85. 16 0
      src/main/java/com/fdkankan/fusion/service/ITmPermissionService.java
  86. 43 0
      src/main/java/com/fdkankan/fusion/service/ITmProjectService.java
  87. 19 0
      src/main/java/com/fdkankan/fusion/service/ITmRolePermissionService.java
  88. 16 0
      src/main/java/com/fdkankan/fusion/service/ITmRoleService.java
  89. 16 0
      src/main/java/com/fdkankan/fusion/service/ITmSceneService.java
  90. 23 0
      src/main/java/com/fdkankan/fusion/service/ITmUserRoleService.java
  91. 40 0
      src/main/java/com/fdkankan/fusion/service/ITmUserService.java
  92. 7 1
      src/main/java/com/fdkankan/fusion/service/impl/CaseFilesServiceImpl.java
  93. 21 5
      src/main/java/com/fdkankan/fusion/service/impl/CaseServiceImpl.java
  94. 2 3
      src/main/java/com/fdkankan/fusion/service/impl/ModelServiceImpl.java
  95. 41 13
      src/main/java/com/fdkankan/fusion/service/impl/SceneService.java
  96. 27 0
      src/main/java/com/fdkankan/fusion/service/impl/TmAttachmentServiceImpl.java
  97. 219 0
      src/main/java/com/fdkankan/fusion/service/impl/TmCameraServiceImpl.java
  98. 158 0
      src/main/java/com/fdkankan/fusion/service/impl/TmDepartmentServiceImpl.java
  99. 67 0
      src/main/java/com/fdkankan/fusion/service/impl/TmMessageServiceImpl.java
  100. 0 0
      src/main/java/com/fdkankan/fusion/service/impl/TmPermissionServiceImpl.java

+ 12 - 1
README.md

@@ -27,4 +27,15 @@
     t_case_settings 表
     新增接口    /caseSettings/info              //设置列表
                 /caseSettings/saveOrUpdate      //新增或修改
-~~~~
+~~~~
+
+###**v1.4.0**
+~~~~
+1.登录修改返回
+    http://120.25.146.52:3090/project/193/interface/api/6602
+2.新增根据场景码获取四维token
+    http://120.25.146.52:3090/project/193/interface/api/9800
+3.新增用户管理
+    http://120.25.146.52:3090/project/193/interface/api/9802
+4.
+~~~~

+ 8 - 7
pom.xml

@@ -111,16 +111,17 @@
         </dependency>
 
 
+        <!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
         <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt</artifactId>
-            <version>0.9.1</version>
+            <groupId>cn.dev33</groupId>
+            <artifactId>sa-token-spring-boot-starter</artifactId>
+            <version>1.34.0</version>
         </dependency>
-
+        <!-- Sa-Token 整合 jwt -->
         <dependency>
-            <groupId>com.auth0</groupId>
-            <artifactId>java-jwt</artifactId>
-            <version>3.10.3</version>
+            <groupId>cn.dev33</groupId>
+            <artifactId>sa-token-jwt</artifactId>
+            <version>1.34.0</version>
         </dependency>
 
     </dependencies>

+ 29 - 0
src/main/java/com/fdkankan/fusion/common/ResultCode.java

@@ -3,9 +3,38 @@ package com.fdkankan.fusion.common;
 public enum ResultCode {
     SUCCESS(0,"操作成功"),
     ERROR(-1,"操作失败"),
+    SYSTEM_ERROR(500,"系统错误"),
+
+    USER_IS_REGISTER(3008,"用户已存在,可直接登录。"),
+    PASSWORD_ERROR(3014,"账号或密码不正确"),
 
     MISSING_REQUIRED_PARAMETERS(4001,"参数缺少"),
     USER_NOT_LOGIN(4008,"用户未登录"),
+    NOT_ROLE(4009,"没有角色"),
+    NOT_PERMISSION(4010,"没有权限"),
+    NOT_DEPT(4011,"没有部门"),
+    USER_EXIST(4012,"用户已存在"),
+    USER_NOT_EXIST(4013,"用户不存在"),
+    USER_PASSWORD_ERROR(4014,"两次密码不一致,请重新输入"),
+    USER_NOT_LOGIN_PERM(4015,"当前账号无权限,请联系相关管理员处理"),
+    PROJECT_NOT_EXITS(4016,"火调项目不存在"),
+    PROJECT_KEY_NOT_EXITS(4017,"链接未授权或已失效,无法访问"),
+    PROJECT_PASSWORD_NOT_EXITS(4018,"访问密码缺失"),
+    PROJECT_PASSWORD_ERROR(4019,"密码错误,请重新输入。"),
+    ROTE_ERROR(4020,"路由解析失败"),
+    RAND_ERROR(4021,"访问密码只能是4位字母或数字"),
+    RAND_NOT_EXIST(4022,"访问密码为生成"),
+
+    USER_HAVE_CAMERA(6000,"该用户已绑定相机,请先绑定至其他用户,再修改该用户所属架构。"),
+    DEPT_NAME_EXITS(6001,"部门名称已存在"),
+    DEPT_DEL_ERROR1(6002,"存在下级组织时,不可删除"),
+    DEPT_DEL_ERROR2(6003,"存在下级用户时,不可删除"),
+    CAMERA_NOT_EXITS(6004,"相机不存在"),
+    CAMERA_EXITS(6005,"相机已绑定,不可重复绑定"),
+    DEPT_NOT_EXITS(6006,"部门不存在"),
+    PROJECT_EXITS(6007,"火调项目已经存在,无需重复添加"),
+    PROJECT_CASE_NOT_EXITS(6007,"火调项目未关联案件"),
+
 
     UPLOAD_ERROR(7001,"文件上传失败"),
     UPLOAD_FILE_NO_EXIST(7002,"上传文件不存在"),

+ 39 - 0
src/main/java/com/fdkankan/fusion/common/enums/IdPreEnum.java

@@ -0,0 +1,39 @@
+package com.fdkankan.fusion.common.enums;
+
+/**
+ * 2 * @Author: Abner
+ * 3 * @Date: 2021/2/18 15:17
+ * 4
+ */
+public enum IdPreEnum {
+
+    USER_PRE("USER0001" , "用户ID前缀"),
+    CAMERA_PRE("CAMERA01" , "相机ID前缀"),
+    SCENE_PRE("SCENE001" , "场景ID前缀"),
+    PROJECT_PRE("PROJECT0" , "火调项目ID前缀"),
+    TEACH_PRE("TEACH001" , "教育平台ID前缀"),
+    ATTACHMENT_PRE("ATTACH01" , "附件ID前缀"),
+    USER_ROLE_PRE("USERROLE" , "用户角色ID前缀"),
+    MESSAGE_PRE("MS000001" , "留言ID前缀"),
+    DEPARTMENT_PRE("DEP00001" , "部门ID前缀"),
+    ;
+
+    private String pre;
+
+    private String desc;
+
+    ;
+
+    IdPreEnum(String pre, String desc) {
+        this.pre = pre;
+        this.desc = desc;
+    }
+
+    public String getPre() {
+        return pre;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 10 - 0
src/main/java/com/fdkankan/fusion/common/util/IdUtils.java

@@ -0,0 +1,10 @@
+package com.fdkankan.fusion.common.util;
+
+import cn.hutool.core.util.IdUtil;
+
+public class IdUtils {
+
+    public static  String genId(String pre){
+        return pre + IdUtil.getSnowflake(0).nextId();
+    }
+}

+ 0 - 145
src/main/java/com/fdkankan/fusion/common/util/JwtUtil.java

@@ -1,145 +0,0 @@
-package com.fdkankan.fusion.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;
-        }
-    }
-
-    public static void main(String[] args) {
-        long start = System.currentTimeMillis();
-        System.out.println(getUsername("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxODgxOTI3MjIwOCIsImxvZ2luVHlwZSI6InVzZXIiLCJ1c2VyTmFtZSI6IjE4ODE5MjcyMjA4IiwiaWF0IjoxNjcxNDIzMzcwLCJqdGkiOiI2MjQzN2MyMC0xNzM5LTQxNWItOWJhOC02MzdjY2YzMGQyZTUifQ.W2vp3xwggP6W5g2fpj84BD7ChaqbIH-xjMjBFO2qVXo"));
-        System.out.println(System.currentTimeMillis() - start);
-    }
-
-}

+ 7 - 0
src/main/java/com/fdkankan/fusion/common/util/PatternEnum.java

@@ -0,0 +1,7 @@
+package com.fdkankan.fusion.common.util;
+
+public class PatternEnum {
+
+    public static final String RAND_CODE_PATTERN = "^[A-Za-z0-9]{4}$";
+
+}

+ 11 - 0
src/main/java/com/fdkankan/fusion/common/util/RedisKeyUtil.java

@@ -2,7 +2,18 @@ package com.fdkankan.fusion.common.util;
 
 public class RedisKeyUtil {
 
+    public static Long tokenTime = 2 * 60 * 60L;
+    public static Long projectRandCodeKeyTime = 14 * 24 * 60 * 60L ;
     public static String mergerVideoKey = "fusion:merger:video:";
     public static String modelUpload = "fusion:model:upload:";
     public static String modelCancelUpload = "fusion:model:cancel:upload:";
+    public static String MANAGE_PERM_USER  = "fusion:manage_perm_user:%s";
+    public static String MANAGE_ROLE_USER = "fusion:manage_role_user:%s";
+    public static String fdToken = "token#%s";
+    public static String MANAGE_MENU = "fusion:menu";
+    public static String fusionLoginToken = "fusion:token:%s";
+    public static String fusionLoginUser = "fusion:user:%s";
+    public static String RAND_CODE_KEY = "fusion:project:rand_key:%s";
+
+
 }

+ 33 - 0
src/main/java/com/fdkankan/fusion/config/MenuInit.java

@@ -0,0 +1,33 @@
+package com.fdkankan.fusion.config;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.entity.TmPermission;
+import com.fdkankan.fusion.service.ITmPermissionService;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+
+@Component
+@Slf4j
+public class MenuInit {
+
+    @Autowired
+    ITmPermissionService tmPermissionService;
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    @PostConstruct
+    public void initMenu(){
+        List<TmPermission> list = tmPermissionService.list();
+        String result = JSONObject.toJSONString(list);
+        redisUtil.set(RedisKeyUtil.MANAGE_MENU,result );
+        log.info("项目启动加载系统菜单权限至redis:{}",result);
+    }
+}

+ 56 - 56
src/main/java/com/fdkankan/fusion/config/OriginFilter.java

@@ -1,56 +1,56 @@
-package com.fdkankan.fusion.config;
-
-import org.apache.commons.lang3.StringUtils;
-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 {
-
-		HttpServletRequest request = (HttpServletRequest) servletRequest;
-		HttpServletResponse response = (HttpServletResponse) servletResponse;
-		response.setHeader("x-frame-options", "SAMEORIGIN");
-		// 不使用*,自动适配跨域域名,避免携带Cookie时失效
-		String origin = request.getHeader("Origin");
-		if (StringUtils.isNotBlank(origin)) {
-			response.setHeader("Access-Control-Allow-Origin", origin); }
-		// 自适应所有自定义头
-		String headers = request.getHeader("Access-Control-Request-Headers");
-		if(StringUtils.isNotBlank(headers)) {
-			response.setHeader("Access-Control-Allow-Headers", headers);
-			response.setHeader("Access-Control-Expose-Headers", headers);
-		}
-		// 允许跨域的请求方法类型
-		response.setHeader("Access-Control-Allow-Methods", "*");
-		// 预检命令(OPTIONS)缓存时间,单位:秒
-		response.setHeader("Access-Control-Max-Age", "3600");
-		// 明确许可客户端发送Cookie,不允许删除字段即可
-		response.setHeader("Access-Control-Allow-Credentials", "true");
-		filterChain.doFilter(request, response);
-	}
-}
-
+//package com.fdkankan.fusion.config;
+//
+//import org.apache.commons.lang3.StringUtils;
+//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 {
+//
+//		HttpServletRequest request = (HttpServletRequest) servletRequest;
+//		HttpServletResponse response = (HttpServletResponse) servletResponse;
+//		response.setHeader("x-frame-options", "SAMEORIGIN");
+//		// 不使用*,自动适配跨域域名,避免携带Cookie时失效
+//		String origin = request.getHeader("Origin");
+//		if (StringUtils.isNotBlank(origin)) {
+//			response.setHeader("Access-Control-Allow-Origin", origin); }
+//		// 自适应所有自定义头
+//		String headers = request.getHeader("Access-Control-Request-Headers");
+//		if(StringUtils.isNotBlank(headers)) {
+//			response.setHeader("Access-Control-Allow-Headers", headers);
+//			response.setHeader("Access-Control-Expose-Headers", headers);
+//		}
+//		// 允许跨域的请求方法类型
+//		response.setHeader("Access-Control-Allow-Methods", "*");
+//		// 预检命令(OPTIONS)缓存时间,单位:秒
+//		response.setHeader("Access-Control-Max-Age", "3600");
+//		// 明确许可客户端发送Cookie,不允许删除字段即可
+//		response.setHeader("Access-Control-Allow-Credentials", "true");
+//		filterChain.doFilter(request, response);
+//	}
+//}
+//

+ 154 - 0
src/main/java/com/fdkankan/fusion/config/SaTokenConfigure.java

@@ -0,0 +1,154 @@
+package com.fdkankan.fusion.config;
+
+import cn.dev33.satoken.context.SaHolder;
+import cn.dev33.satoken.exception.NotLoginException;
+import cn.dev33.satoken.exception.NotPermissionException;
+import cn.dev33.satoken.exception.NotRoleException;
+import cn.dev33.satoken.filter.SaServletFilter;
+import cn.dev33.satoken.jwt.StpLogicJwtForMixin;
+import cn.dev33.satoken.router.SaRouter;
+import cn.dev33.satoken.stp.StpLogic;
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.oss.HttpMethod;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.controller.LoginController;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.httpClient.FdService;
+import com.fdkankan.fusion.httpClient.response.FdkkLoginVo;
+import com.fdkankan.fusion.service.ITmPermissionService;
+import com.fdkankan.fusion.service.ITmUserService;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+
+@Configuration
+@Slf4j
+public class SaTokenConfigure {
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    FdService fdService;
+    // 注册Sa-Token的拦截器
+    @Bean
+    public SaServletFilter getSaServletFilter() {
+        return new SaServletFilter()
+                // 指定 拦截路由 与 放行路由
+                .addInclude("/**").addExclude("/**/test/**","/**/inner/**")
+                // 认证函数: 每次请求执行
+                .setAuth(obj -> {
+                    String share = SaHolder.getRequest().getHeader("share");
+                    if(StringUtils.isNotBlank(share) && "1".equals(share)){ //分享请求头
+                        return;
+                    }
+                    // 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
+                    SaRouter.match("/**", "/fdLogin", r ->checkLogin() );
+                    String menu = redisUtil.get(RedisKey.MANAGE_MENU);
+                    if(StringUtils.isBlank(menu)){
+                        SaRouter.match("/**", r -> StpUtil.checkRole("super-admin"));
+                        return;
+                    }
+
+                    JSONArray menuArray = JSONObject.parseArray(menu);
+                    for (Object o : menuArray) {
+                        JSONObject jsonObject = (JSONObject)  o;
+                        String url = jsonObject.getString("url");
+                        String perm = jsonObject.getString("perms");
+                        if(StringUtils.isEmpty(url) || StringUtils.isEmpty(perm)){
+                            continue;
+                        }
+                        if(StpUtil.hasRole("super-admin")){
+                            continue;
+                        }
+                        SaRouter.match(url, r -> StpUtil.checkPermission(perm));
+                    }
+                })
+
+                // 异常处理函数:每次认证函数发生异常时执行此函数
+                .setError(e -> {
+                    SaHolder.getResponse().setHeader("Content-Type", "application/json;charset=UTF-8");
+                    ResultData aj ;
+                    if (e instanceof NotLoginException) {	// 如果是未登录异常
+                        NotLoginException ee = (NotLoginException) e;
+                        aj = ResultData.error(ResultCode.USER_NOT_LOGIN);
+                    }
+                    else if(e instanceof NotRoleException) {		// 如果是角色异常
+                        NotRoleException ee = (NotRoleException) e;
+                        aj =  ResultData.error(ResultCode.NOT_ROLE);
+                    }
+                    else if(e instanceof NotPermissionException) {	// 如果是权限异常
+                        NotPermissionException ee = (NotPermissionException) e;
+                        aj =  ResultData.error(ResultCode.NOT_PERMISSION);
+                    }
+                    else if(e instanceof BusinessException) {	// 如果是权限异常
+                        BusinessException ee = (BusinessException) e;
+                        aj = ResultData.error(ee.getCode(),ee.getMessage());
+                    }
+                    else {	// 普通异常, 输出:500 + 异常信息
+                        aj = ResultData.error(ResultCode.SYSTEM_ERROR);
+                    }
+                    return JSONObject.toJSONString(aj);
+                })
+                // 前置函数:在每次认证函数之前执行
+                .setBeforeAuth(r -> {
+                    // ---------- 设置一些安全响应头 ----------
+                    SaHolder.getResponse()
+                            .setHeader("Access-Control-Allow-Origin", "*")
+                            .setHeader("Access-Control-Allow-Methods", "*")
+                            .setHeader("Access-Control-Max-Age", "3600")
+                            .setHeader("Access-Control-Allow-Headers", "*")
+                            .setServer("4dkk");
+
+                    // 跳过对 OPTIONS 请求的检查,否则这里会鉴权失败,导致 springboot 配置的 addCorsMappings 跨域不执行
+                    if (SaHolder.getRequest().getMethod().equals(HttpMethod.OPTIONS.toString())) {
+                        SaRouter.back();
+                    }
+                });
+
+    }
+
+    private void checkLogin(){
+        if(!redisUtil.hasKey(String.format(RedisKeyUtil.fusionLoginToken,StpUtil.getTokenValue()))){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        redisUtil.expire(String.format(RedisKeyUtil.fusionLoginToken,StpUtil.getTokenValue()),21600);
+
+        if(!redisUtil.hasKey(String.format(RedisKeyUtil.fusionLoginUser,StpUtil.getLoginId()))){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        String value = redisUtil.get(String.format(RedisKeyUtil.fusionLoginUser,StpUtil.getLoginId()));
+        FdkkLoginVo fdkkLoginVo = JSONObject.parseObject(value, FdkkLoginVo.class);
+        if(fdkkLoginVo.getTmUser().getStatus() == 0){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN_PERM);
+        }
+        redisUtil.expire(String.format(RedisKeyUtil.fusionLoginUser,StpUtil.getLoginId()),21600);
+
+        //校验fdtoken
+        if(!redisUtil.hasKey(String.format(RedisKeyUtil.fdToken,fdService.getFdToken()))){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        redisUtil.expire(String.format(RedisKeyUtil.fdToken,fdService.getFdToken()),21600);
+        StpUtil.checkLogin();
+    }
+
+
+    //Sa-Token    整合 jwt
+    //Stateless   无状态模式 纯jwt
+    //Mixin       混入模式 jwt 与 Redis 逻辑混合
+    //Simple      简单模式   Token风格替换
+    @Bean
+    public StpLogic getStpLogicJwt() {
+        return new StpLogicJwtForMixin();
+    }
+}
+

+ 51 - 0
src/main/java/com/fdkankan/fusion/config/StpInterfaceImpl.java

@@ -0,0 +1,51 @@
+package com.fdkankan.fusion.config;
+
+import cn.dev33.satoken.stp.StpInterface;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+public class StpInterfaceImpl implements StpInterface {
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Override
+    public List<String> getPermissionList(Object loginId, String loginType) {
+        String redisKey = String.format(RedisKeyUtil.MANAGE_PERM_USER, loginId);
+        String permString = redisUtil.get(redisKey);
+        if(StringUtils.isBlank(permString)){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        JSONArray jsonArray = JSONObject.parseArray(permString);
+        List<String> permList = jsonArray.toJavaList(String.class)
+                .parallelStream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
+        //从redis 中获取登录用户权限
+        return permList;
+    }
+
+    @Override
+    public List<String> getRoleList(Object loginId, String loginType) {
+        //从redis 中获取登录用户角色
+        String redisKey = String.format(RedisKeyUtil.MANAGE_ROLE_USER, loginId);
+        String roleString = redisUtil.get(redisKey);
+        if(StringUtils.isBlank(roleString)){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        JSONArray jsonArray = JSONObject.parseArray(roleString);
+        List<String> roleList = jsonArray.toJavaList(String.class)
+                .parallelStream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
+        return roleList;
+    }
+}

+ 26 - 0
src/main/java/com/fdkankan/fusion/config/ThreadPoolConfig.java

@@ -0,0 +1,26 @@
+package com.fdkankan.fusion.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+
+@Configuration
+@EnableAsync
+public class ThreadPoolConfig {
+
+    @Bean("taskExecutor")
+    public Executor taskExecutor() {
+        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+        taskExecutor.setCorePoolSize(10);
+        taskExecutor.setMaxPoolSize(50);
+        taskExecutor.setQueueCapacity(200);
+        taskExecutor.setKeepAliveSeconds(60);
+        taskExecutor.setThreadNamePrefix("Thread-");
+        taskExecutor.setAwaitTerminationSeconds(60);
+        return taskExecutor;
+    }
+}
+

+ 37 - 37
src/main/java/com/fdkankan/fusion/config/WebAppConfig.java

@@ -1,37 +1,37 @@
-package com.fdkankan.fusion.config;
-
-import com.fdkankan.fusion.interceptor.TokenInterceptor;
-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
-	TokenInterceptor tokenInterceptor;
-
-	@Override
-	public void addCorsMappings(CorsRegistry registry) {
-		registry.addMapping("/**").allowCredentials(true).allowedHeaders("*").allowedOrigins("*").allowedMethods("*");
-
-	}
-
-	@Override
-	public void addInterceptors(InterceptorRegistry registry) {
-		registry.addInterceptor(tokenInterceptor).addPathPatterns("/**")
-				.excludePathPatterns("/**/fdLogin/**","/test/**","/**/api/**");
-		WebMvcConfigurer.super.addInterceptors(registry);
-	}
-
-	@Override
-	public void addResourceHandlers(ResourceHandlerRegistry registry) {
-		WebMvcConfigurer.super.addResourceHandlers(registry);
-	}
-
-}
-
+//package com.fdkankan.fusion.config;
+//
+//import com.fdkankan.fusion.interceptor.TokenInterceptor;
+//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
+//	TokenInterceptor tokenInterceptor;
+//
+//	@Override
+//	public void addCorsMappings(CorsRegistry registry) {
+//		registry.addMapping("/**").allowCredentials(true).allowedHeaders("*").allowedOrigins("*").allowedMethods("*");
+//
+//	}
+//
+//	@Override
+//	public void addInterceptors(InterceptorRegistry registry) {
+//		registry.addInterceptor(tokenInterceptor).addPathPatterns("/**")
+//				.excludePathPatterns("/**/fdLogin/**","/test/**","/**/api/**");
+//		WebMvcConfigurer.super.addInterceptors(registry);
+//	}
+//
+//	@Override
+//	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+//		WebMvcConfigurer.super.addResourceHandlers(registry);
+//	}
+//
+//}
+//

+ 7 - 15
src/main/java/com/fdkankan/fusion/controller/BaseController.java

@@ -1,7 +1,7 @@
 package com.fdkankan.fusion.controller;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.fusion.common.util.JwtUtil;
 import com.fdkankan.fusion.httpClient.response.FdkkUserVo;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
@@ -32,23 +32,15 @@ public class BaseController {
 
 
     protected String getToken(){
-        return request.getHeader("token");
+        return StpUtil.getTokenValue();
     }
     protected String getUserName(){
-        return JwtUtil.getUsername(getToken());
+       return (String)StpUtil.getExtra("userName");
     }
     protected String getNickName(){
-        try {
-            String fdToken = String.format(RedisKey.TOKEN_V3,getToken());
-            if(redisUtil.hasKey(fdToken)){
-                String jsonObj = redisUtil.get(fdToken);
-                FdkkUserVo fdkkUserVo = JSONObject.parseObject(jsonObj, FdkkUserVo.class);
-                return fdkkUserVo.getNickName();
-            }
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        return null;
+        return (String)StpUtil.getExtra("nickName");
+    }
+    protected String getDeptId(){
+        return (String)StpUtil.getExtra("deptId");
     }
-
 }

+ 2 - 2
src/main/java/com/fdkankan/fusion/controller/CaseController.java

@@ -24,7 +24,7 @@ public class CaseController extends BaseController{
 
     @PostMapping("/list")
     public ResultData list(@RequestBody CaseParam param ){
-        return ResultData.ok(caseService.pageList(param,getToken()));
+        return ResultData.ok(caseService.pageList(param,getUserName()));
     }
 
     /**
@@ -39,7 +39,7 @@ public class CaseController extends BaseController{
 
     @PostMapping("/addOrUpdate")
     public ResultData addOrUpdate(@RequestBody CaseParam param){
-        caseService.addOrUpdate(param,getToken());
+        caseService.addOrUpdate(param,getUserName());
         return ResultData.ok();
     }
 

+ 18 - 0
src/main/java/com/fdkankan/fusion/controller/CaseFilesController.java

@@ -9,6 +9,7 @@ import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.common.ResultData;
 import com.fdkankan.fusion.entity.CaseFiles;
 import com.fdkankan.fusion.service.ICaseFilesService;
+import com.fdkankan.fusion.service.ICaseService;
 import com.fdkankan.fusion.service.impl.UploadService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +17,8 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 /**
  * <p>
  *  前端控制器
@@ -31,6 +34,8 @@ public class CaseFilesController extends BaseController{
     @Autowired
     ICaseFilesService caseFilesService;
     @Autowired
+    ICaseService caseService;
+    @Autowired
     UploadService uploadService;
     @Value("${spring.profiles.active}")
     private String environment;
@@ -63,6 +68,10 @@ public class CaseFilesController extends BaseController{
         String url = uploadService.uploadFile(file, false, String.format(FilePath.File_OSS_PATH,environment,caseFiles.getFilesId() + "/"));
         caseFiles.setFilesUrl(url);
         caseFilesService.saveOrUpdate(caseFiles);
+        //上传认定书,修改案例状态
+        if(filesTypeId == 4){
+            caseService.updateIdenTityStatus(caseId,1);
+        }
         return ResultData.ok();
     }
     @PostMapping("/updateTitle")
@@ -86,7 +95,16 @@ public class CaseFilesController extends BaseController{
         if(caseFiles.getFilesId() == null ){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
+        CaseFiles caseFiles1 = caseFilesService.getById(caseFiles.getFilesId());
         caseFilesService.removeById(caseFiles.getFilesId());
+
+        //删除认定书,案件修改为未认定
+        if(caseFiles1 != null && caseFiles1.getFilesTypeId() == 4){
+            List<CaseFiles> caseFilesList = caseFilesService.getByCaseId(caseFiles1.getCaseId());
+            if(caseFilesList == null || caseFilesList.size() <=0){
+                caseService.updateIdenTityStatus(caseFiles1.getCaseId(),0);
+            }
+        }
         return ResultData.ok();
     }
 

+ 2 - 4
src/main/java/com/fdkankan/fusion/controller/HotIconController.java

@@ -3,7 +3,6 @@ package com.fdkankan.fusion.controller;
 
 import com.fdkankan.fusion.common.FilePath;
 import com.fdkankan.fusion.common.ResultCode;
-import com.fdkankan.fusion.common.util.JwtUtil;
 import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.common.ResultData;
 import com.fdkankan.fusion.entity.HotIcon;
@@ -45,8 +44,7 @@ public class HotIconController extends BaseController{
         if(caseId!=null){
             return ResultData.ok(hotIconService.getListByCaseId(caseId));
         }
-        String username = JwtUtil.getUsername(getToken());
-        return ResultData.ok(hotIconService.getListByUserName(username));
+        return ResultData.ok(hotIconService.getListByUserName(getUserName()));
     }
 
     @PostMapping("/add")
@@ -58,7 +56,7 @@ public class HotIconController extends BaseController{
 
         String iconUrl = uploadService.uploadFile(file, true, String.format(FilePath.ICON_OSS_PATH,environment,""));
 
-        String username = JwtUtil.getUsername(getToken());
+        String username = getUserName();
         HotIcon hotIcon = new HotIcon();
         hotIcon.setIconTitle(iconTitle);
         hotIcon.setIconUrl(iconUrl);

+ 45 - 3
src/main/java/com/fdkankan/fusion/controller/LoginController.java

@@ -1,14 +1,24 @@
 package com.fdkankan.fusion.controller;
 
+import cn.dev33.satoken.stp.SaLoginConfig;
+import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.util.Base64Converter;
+import com.fdkankan.common.util.SecurityUtil;
+import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.common.ResultData;
 import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.entity.TmUser;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.httpClient.FdService;
 import com.fdkankan.fusion.httpClient.client.FdKKClient;
 import com.fdkankan.fusion.httpClient.request.FdkkLoginRequest;
 import com.fdkankan.fusion.httpClient.response.FdkkLoginVo;
 import com.fdkankan.fusion.httpClient.response.FdkkResponse;
+import com.fdkankan.fusion.service.ITmUserService;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -18,25 +28,57 @@ import javax.annotation.Resource;
 @RequestMapping
 public class LoginController extends BaseController{
 
-
     @Resource
     FdKKClient fdKKClient;
     @Autowired
     RedisUtil redisUtil;
+    @Autowired
+    ITmUserService tmUserService;
+    @Autowired
+    FdService fdService;
 
     @PostMapping("/fdLogin")
     public ResultData fdLogin(@RequestBody FdkkLoginRequest request){
+        if(StringUtils.isBlank(request.getPhoneNum()) || StringUtils.isBlank(request.getPassword())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        TmUser tmUser = tmUserService.getByUserName(request.getPhoneNum());
+        if(tmUser == null){
+            throw new BusinessException(ResultCode.PASSWORD_ERROR);
+        }
+        if(tmUser.getStatus() == 0){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN_PERM);
+        }
+        //对前端传的密码解密
         FdkkResponse<FdkkLoginVo> fdkkLoginVo = fdKKClient.fdkkLogin(request);
         if(fdkkLoginVo.getCode() == 0){
-            return ResultData.ok(fdkkLoginVo.getData());
+            FdkkLoginVo data = fdkkLoginVo.getData();
+            StpUtil.login(tmUser.getId(), SaLoginConfig
+                    .setExtra("userId",tmUser.getId())
+                    //.setExtra("fdToken",data.getToken())
+                    .setExtra("userName",data.getUser().getUserName())
+                    .setExtra("deptId",tmUser.getDeptId())
+                    .setExtra("nickName",data.getUser().getNickName()));
+            data.setFdToken(data.getToken());
+            data.setToken(StpUtil.getTokenValue());
+            tmUserService.setRoleAndPermToRedis(tmUser);
+            data.setTmUser(tmUser);
+            redisUtil.set(String.format(RedisKeyUtil.fusionLoginToken,data.getToken()),JSONObject.toJSONString(data),RedisKeyUtil.tokenTime);
+            redisUtil.set(String.format(RedisKeyUtil.fusionLoginUser,tmUser.getId()),JSONObject.toJSONString(data),RedisKeyUtil.tokenTime);
+            return ResultData.ok(data);
         }
         return ResultData.error(fdkkLoginVo.getCode(),fdkkLoginVo.getMsg());
     }
 
     @PostMapping("/fdLogout")
     public ResultData fdLogout(){
-        String fdToken = String.format(RedisKey.TOKEN_V3,getToken());
+        String fusionLoginToken = String.format(RedisKeyUtil.fusionLoginToken,StpUtil.getTokenValue());
+        String fusionLoginUser = String.format(RedisKeyUtil.fusionLoginUser,StpUtil.getLoginId());
+        String fdToken = String.format(RedisKey.TOKEN_V3,fdService.getFdToken());
+        redisUtil.del(fusionLoginToken);
+        redisUtil.del(fusionLoginUser);
         redisUtil.del(fdToken);
+        StpUtil.logout();
         return ResultData.ok();
     }
 }

+ 2 - 4
src/main/java/com/fdkankan/fusion/controller/ModelController.java

@@ -4,7 +4,6 @@ package com.fdkankan.fusion.controller;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.common.ResultData;
-import com.fdkankan.fusion.common.util.JwtUtil;
 import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.entity.Model;
 import com.fdkankan.fusion.exception.BusinessException;
@@ -37,8 +36,7 @@ public class ModelController extends BaseController{
 
     @PostMapping("/uploadObj")
     public ResultData uploadObj(@RequestParam(required = false) MultipartFile file) throws Exception {
-        String username = JwtUtil.getUsername(getToken());
-        return ResultData.ok(modelService.uploadObj(file,username));
+        return ResultData.ok(modelService.uploadObj(file,getUserName()));
     }
 
     @GetMapping("/uploadObjProgress")
@@ -54,7 +52,7 @@ public class ModelController extends BaseController{
 
     @PostMapping("/list")
     public ResultData list(@RequestBody ModelPram param){
-        return ResultData.ok(modelService.pageList(param,getToken()));
+        return ResultData.ok(modelService.pageList(param,getUserName()));
     }
 
     @GetMapping("/getInfo")

+ 6 - 0
src/main/java/com/fdkankan/fusion/controller/SceneController.java

@@ -17,4 +17,10 @@ public class SceneController extends BaseController{
     public ResultData list(@RequestBody ScenePram param){
         return ResultData.ok(sceneService.pageList(param,getToken()));
     }
+
+    @GetMapping("/getFdTokenByNum")
+    public Object getFdTokenByNum(@RequestParam(required = false) String num){
+
+        return sceneService.getFdTokenByNum(num);
+    }
 }

+ 47 - 1
src/main/java/com/fdkankan/fusion/controller/TestController.java

@@ -3,22 +3,36 @@ package com.fdkankan.fusion.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.fusion.common.ResultData;
 import com.fdkankan.fusion.common.util.ShellUtil;
+import com.fdkankan.fusion.entity.CaseEntity;
+import com.fdkankan.fusion.entity.CaseNumEntity;
 import com.fdkankan.fusion.entity.FusionMeter;
-import com.fdkankan.fusion.service.IFusionMeterService;
+import com.fdkankan.fusion.entity.TmProject;
+import com.fdkankan.fusion.service.*;
 import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.concurrent.ThreadPoolExecutor;
 
 @RestController
+@RequestMapping("/test")
 public class TestController {
 
     @Autowired
     RedisUtil redisUtil;
     @Autowired
     IFusionMeterService meterService;
+    @Autowired
+    ITmProjectService tmProjectService;
+    @Autowired
+    ITmUserService tmUserService;
+    @Autowired
+    ICaseService caseService;
+    @Autowired
+    ICaseNumService caseNumService;
 
     @RequestMapping("/test")
     public ResultData test(){
@@ -28,6 +42,38 @@ public class TestController {
         return ResultData.ok();
     }
 
+    @RequestMapping("/projectAddCase")
+    public ResultData projectAddCase(){
+        List<TmProject> list = tmProjectService.list();
+        for (TmProject project : list) {
+            LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(CaseEntity::getTmProjectId,project.getId());
+            CaseEntity caseEntity = caseService.getOne(wrapper);
+            if(caseEntity == null){
+                caseEntity = new CaseEntity();
+                caseEntity.setCaseTitle(project.getProjectName());
+                caseEntity.setType(1);
+                caseEntity.setTmProjectId(project.getId());
+                caseService.save(caseEntity);
+            }
+            if(StringUtils.isNotBlank(project.getSceneNum())){
+                CaseNumEntity caseNumEntity = new CaseNumEntity();
+                caseNumEntity.setCaseId(caseEntity.getCaseId());
+                caseNumEntity.setNumType(null);
+                caseNumEntity.setNum(project.getSceneNum());
+                if(project.getSceneNum().contains("KK-")){
+                    caseNumEntity.setNumType(0);
+                }
+                if(project.getSceneNum().contains("KJ-")){
+                    caseNumEntity.setNumType(1);
+                }
+                caseNumService.save(caseNumEntity);
+            }
+
+
+        }
+        return ResultData.ok();
+    }
 
 
 }

+ 21 - 0
src/main/java/com/fdkankan/fusion/controller/TmAttachmentController.java

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

+ 84 - 0
src/main/java/com/fdkankan/fusion/controller/TmCameraController.java

@@ -0,0 +1,84 @@
+package com.fdkankan.fusion.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.response.BindCameraDto;
+import com.fdkankan.fusion.service.ITmCameraService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 相机关联关系表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@RestController
+@RequestMapping("/web/camera")
+public class TmCameraController {
+
+    @Autowired
+    ITmCameraService tmCameraService;
+
+    /**
+     * 获取相机详情
+     */
+    @GetMapping("/getCameraDetail")
+    public ResultData getCameraDetail(@RequestParam(required = false) String snCode) {
+        return ResultData.ok(tmCameraService.getDetail(snCode));
+    }
+
+    /**
+     * 获取用户的相机列表
+     * @param pageNum   页码
+     * @param pageSize  每页大小
+     * @param snCode    sn码
+     * @param deptId    所属架构ID
+     * @param type      查询类型 1场景同步里面查询相机 2,相机管理列表
+     */
+    @GetMapping("/getUserCameraList")
+    public ResultData getUserCameraList(
+                                            @RequestParam(value = "pageNum", required = false,defaultValue = "1") Long pageNum,
+                                            @RequestParam(value = "pageSize", required = false,defaultValue = "10") Long pageSize,
+                                            @RequestParam(value = "snCode" , required = false) String snCode,
+                                            @RequestParam(value = "deptId", required = false) String deptId,
+                                            @RequestParam(value = "type", required = false) int type
+    ) {
+       return ResultData.ok(tmCameraService.pageList(pageNum,pageSize,snCode,deptId,type));
+    }
+
+    /**
+     * 绑定相机/切换绑定
+     */
+    @PostMapping(value = "/bindNew")
+    public ResultData bindNew(@RequestBody BindCameraDto param){
+        tmCameraService.bind(param);
+        return ResultData.ok("绑定成功");
+    }
+    /**
+     * 解绑相机
+     */
+    @PostMapping(value = "/unbind")
+    public ResultData unbind(@RequestBody BindCameraDto param){
+        tmCameraService.unBind(param);
+        return ResultData.ok("解绑成功");
+    }
+
+    /**
+     * 编辑
+     */
+    @PostMapping(value = "/edit")
+    public ResultData edit(@RequestBody BindCameraDto param){
+        tmCameraService.edit(param);
+        return ResultData.ok();
+    }
+}
+

+ 99 - 0
src/main/java/com/fdkankan/fusion/controller/TmDepartmentController.java

@@ -0,0 +1,99 @@
+package com.fdkankan.fusion.controller;
+
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.util.ObjectUtil;
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.entity.TmDepartment;
+import com.fdkankan.fusion.service.ITmDepartmentService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-27
+ */
+@RestController
+@RequestMapping("/web/department")
+public class TmDepartmentController {
+
+    @Autowired
+    private ITmDepartmentService departmentService;
+
+    @GetMapping("/getAll")
+    public ResultData getAll(){
+        List<TmDepartment> list = departmentService.list();
+        List<TmDepartment> resultList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(list)){
+            list.stream().filter(dept -> StringUtils.equals(dept.getParentId() , "0"))
+                    .peek(dept -> dept.setChildList(getChildList(dept , list))).collect(Collectors.toList());
+            resultList.addAll(list);
+        }
+        return ResultData.ok(resultList);
+    }
+
+    private  List<TmDepartment> getChildList(TmDepartment indexDept , List<TmDepartment> deptList){
+        if(CollectionUtils.isEmpty(deptList) || null == indexDept){
+            return null;
+        }
+        return deptList.stream().filter(dept -> StringUtils.equals(dept.getParentId() , indexDept.getId()))
+                .peek(dept -> dept.setChildList(getChildList(dept , deptList))).collect(Collectors.toList());
+    }
+
+    /**
+     * 根据部门编号获取详细信息
+     */
+    @GetMapping(value = "deptId/{deptId}")
+    public ResultData getInfo(@PathVariable String deptId)
+    {
+        return ResultData.ok(departmentService.getById(deptId));
+    }
+
+    /**
+     * 获取部门下拉树列表
+     */
+    @GetMapping("/treeselect")
+    public ResultData treeselect() {
+
+        return ResultData.ok(departmentService.getDeptList());
+    }
+
+    /**
+     * 新增部门
+     */
+    @PostMapping("/add")
+    public ResultData add(@Validated @RequestBody TmDepartment dept) {
+        departmentService.insertDept(dept);
+        return ResultData.ok();
+    }
+
+    /**
+     * 修改部门
+     */
+    @PostMapping("/edit")
+    public ResultData edit(@Validated @RequestBody TmDepartment dept) {
+        departmentService.updateDept(dept);
+        return ResultData.ok();
+    }
+
+    /**
+     * 删除部门
+     */
+    @PostMapping("/del/{deptId}")
+    public ResultData remove(@PathVariable String deptId) {
+        departmentService.deleteDeptById(deptId);
+        return ResultData.ok();
+    }
+}
+

+ 42 - 0
src/main/java/com/fdkankan/fusion/controller/TmMessageController.java

@@ -0,0 +1,42 @@
+package com.fdkankan.fusion.controller;
+
+
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.request.MessageReqDto;
+import com.fdkankan.fusion.service.ITmMessageService;
+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;
+
+/**
+ * <p>
+ * 留言信息表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@RestController
+@RequestMapping("/web/message")
+public class TmMessageController {
+
+
+    @Autowired
+    private ITmMessageService messageService;
+
+    @PostMapping(value = "/addNew")
+    public ResultData addNew(@RequestBody MessageReqDto body){
+        messageService.addNew(body);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/getList")
+    public ResultData getList(@RequestBody MessageReqDto messageReqDto) {
+
+        return ResultData.ok(messageService.pageList(messageReqDto));
+    }
+}
+

+ 21 - 0
src/main/java/com/fdkankan/fusion/controller/TmPermissionController.java

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

+ 109 - 0
src/main/java/com/fdkankan/fusion/controller/TmProjectController.java

@@ -0,0 +1,109 @@
+package com.fdkankan.fusion.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.entity.TmProject;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.request.CommonDto;
+import com.fdkankan.fusion.request.ProjectRandCodeDto;
+import com.fdkankan.fusion.request.ProjectRequest;
+import com.fdkankan.fusion.request.ProjectRequestDto;
+import com.fdkankan.fusion.service.ITmProjectService;
+import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <p>
+ * 火调项目信息表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@RestController
+@RequestMapping("/web/fireProject")
+public class TmProjectController {
+
+    @Autowired
+    ITmProjectService tmProjectService;
+
+    /**
+     * 获取项目列表
+     */
+    @PostMapping("/queryProject")
+    public ResultData queryProject(@RequestBody ProjectRequestDto tmProject) {
+        return ResultData.ok( tmProjectService.pageList(tmProject));
+    }
+
+    /**
+     * 根据临时密码获取项目号
+     */
+    @GetMapping("/getDetailWithoutAuth")
+    public ResultData getDetailWithoutAuth( ProjectRequest param ) {
+        return ResultData.ok(tmProjectService.getDetailWithoutAuth(param));
+    }
+
+    /**
+     * 获取临时密码
+     * @param projectId 项目id
+     * @param roteUrl 路由
+     */
+    @GetMapping("/getRandCode")
+    public ResultData getRandCode( @RequestParam(required = false) String projectId,
+                                   @RequestParam(required = false) String roteUrl) {
+        return ResultData.ok(tmProjectService.getRandCode(projectId,roteUrl));
+    }
+
+    @PostMapping(value = "/updateRandomCode")
+    public ResultData updateRandomCode(@RequestBody ProjectRandCodeDto projectRandCodeDto){
+        tmProjectService.updateRandomCode(projectRandCodeDto);
+        return ResultData.ok();
+    }
+
+    /**
+     * 新增火调项目
+     */
+    @PostMapping(value = "/addNewProject")
+    public ResultData addNewProject(@RequestBody TmProject tmProject){
+        tmProjectService.addNewProject(tmProject);
+        return ResultData.ok("新增成功");
+
+    }
+    @PostMapping(value = "/updateProject")
+    public ResultData updateProject(@RequestBody TmProject tmProject){
+        tmProjectService.updateProject(tmProject);
+        return ResultData.ok();
+    }
+
+    /**
+     * 批量设置火调项目为教学项目
+     */
+    @PostMapping(value = "/setTeach")
+    public ResultData setTeach(@RequestBody CommonDto commonDto){
+        commonDto.setStatus(1);
+        tmProjectService.setOrUnTeach(commonDto);
+        return ResultData.ok();
+
+    }
+    /**
+     * 批量撤销设置教学火调项目
+     */
+    @PostMapping(value = "/setUnTeach")
+    public ResultData setUnTeach(@RequestBody CommonDto commonDto){
+        commonDto.setStatus(0);
+        tmProjectService.setOrUnTeach(commonDto);
+        return ResultData.ok();
+
+    }
+}
+

+ 21 - 0
src/main/java/com/fdkankan/fusion/controller/TmRoleController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.fusion.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 角色表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@RestController
+@RequestMapping("/fusion/tmRole")
+public class TmRoleController {
+
+}
+

+ 21 - 0
src/main/java/com/fdkankan/fusion/controller/TmRolePermissionController.java

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

+ 21 - 0
src/main/java/com/fdkankan/fusion/controller/TmSceneController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.fusion.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 场景关联关系表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@RestController
+@RequestMapping("/fusion/tmScene")
+public class TmSceneController {
+
+}
+

+ 91 - 0
src/main/java/com/fdkankan/fusion/controller/TmUserController.java

@@ -0,0 +1,91 @@
+package com.fdkankan.fusion.controller;
+
+
+import cn.dev33.satoken.stp.StpInterface;
+import cn.dev33.satoken.stp.StpLogic;
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.entity.TmUser;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.response.UserAddRequest;
+import com.fdkankan.fusion.service.ITmUserService;
+import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 用户信息表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@RestController
+@RequestMapping("/web/user")
+public class TmUserController {
+
+    @Autowired
+    ITmUserService tmUserService;
+    @Autowired
+    RedisUtil redisUtil;
+
+    /**
+     * 获取权限集合
+     */
+    @GetMapping("/getPerInfo")
+    public ResultData getPerInfo() {
+        return ResultData.ok(StpUtil.getPermissionList());
+    }
+
+    /**
+     * 获取登录用户的信息
+     */
+    @GetMapping("/getUserInfo")
+    public ResultData getUserInfo() {
+        String vale = redisUtil.get(String.format(RedisKeyUtil.fusionLoginToken, StpUtil.getTokenValue()));
+        return ResultData.ok(JSONObject.parseObject(vale));
+    }
+
+    @PostMapping("/addUser")
+    public ResultData addUser(@RequestBody UserAddRequest param){
+        tmUserService.addUser(param);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/editUser")
+    public ResultData editUser(@RequestBody UserAddRequest param){
+        tmUserService.editUser(param);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/changePassword")
+    public ResultData changePassword(@RequestBody UserAddRequest param){
+        tmUserService.changePassword(param);
+        return ResultData.ok();
+    }
+
+    @GetMapping("/getMsgAuthCode")
+    public ResultData getMsgAuthCode(@RequestParam(name = "phoneNum") String phoneNum) {
+        return ResultData.ok( tmUserService.getMsgAuthCode(phoneNum));
+    }
+
+    @PostMapping("/changeStatus")
+    public ResultData changeStatus(@RequestBody UserAddRequest param){
+        tmUserService.changeStatus(param);
+        return ResultData.ok();
+    }
+    @PostMapping("/delUser")
+    public ResultData delUser(@RequestBody UserAddRequest param){
+        tmUserService.delUser(param);
+        return ResultData.ok();
+    }
+}
+

+ 21 - 0
src/main/java/com/fdkankan/fusion/controller/TmUserRoleController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.fusion.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 用户角色关系表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@RestController
+@RequestMapping("/fusion/tmUserRole")
+public class TmUserRoleController {
+
+}
+

+ 7 - 0
src/main/java/com/fdkankan/fusion/entity/CaseEntity.java

@@ -50,5 +50,12 @@ public class CaseEntity implements Serializable {
     @TableField("update_time")
     private String updateTime;
 
+    /**
+     * 0刑侦案件,1火调案件
+     */
+    @TableField("type")
+    private Integer type;
 
+    @TableField("tm_project_id")
+    private String tmProjectId;
 }

+ 95 - 0
src/main/java/com/fdkankan/fusion/entity/TmAttachment.java

@@ -0,0 +1,95 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_attachment")
+public class TmAttachment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一ID
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 附件名称
+     */
+    @TableField("file_name")
+    private String fileName;
+
+    /**
+     * 附件类型
+     */
+    @TableField("attachment_type")
+    private String attachmentType;
+
+    /**
+     * 文件类型:1->照片;2->文件
+     */
+    @TableField("type")
+    private Integer type;
+
+    /**
+     * 附件的oss路径
+     */
+    @TableField("file_oss_url")
+    private String fileOssUrl;
+
+    /**
+     * 附件所属的部门ID
+     */
+    @TableField("dept_id")
+    private String deptId;
+
+    /**
+     * 附件上传人ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 最新更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 是否删除: 0->未删除;1->已删除
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 附件所属的火调项目ID
+     */
+    @TableField("project_id")
+    private String projectId;
+
+
+}

+ 83 - 0
src/main/java/com/fdkankan/fusion/entity/TmCamera.java

@@ -0,0 +1,83 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 相机关联关系表
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_camera")
+public class TmCamera implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一ID
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 相机编码
+     */
+    @TableField("camera_sn")
+    private String cameraSn;
+
+    /**
+     * 是否被删除:0->未被删除;1->已被删除
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 所属用户的部门id
+     */
+    @TableField("dept_id")
+    private String deptId;
+
+    /**
+     * 所属用户的id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 最新更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 四维看看相机ID
+     */
+    @TableField("fd_camera_id")
+    private Long fdCameraId;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+
+}

+ 118 - 0
src/main/java/com/fdkankan/fusion/entity/TmDepartment.java

@@ -0,0 +1,118 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-27
+ */
+@Getter
+@Setter
+@TableName("tm_department")
+public class TmDepartment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private String id;
+
+    /**
+     * 父类id
+     */
+    @TableField("parent_id")
+    private String parentId;
+
+    /**
+     * 祖级列表
+     */
+    @TableField("ancestors")
+    private String ancestors;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 是否删除:0: 未删除,1: 已删除
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 组织类型 1总队,2支队,3大队
+     */
+    @TableField("dept_type")
+    private Integer deptType;
+
+    /**
+     * 部门名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 排序
+     */
+    @TableField("level")
+    private Integer level;
+
+    /**
+     * 负责人
+     */
+    @TableField("leader")
+    private String leader;
+
+    /**
+     * 联系电话
+     */
+    @TableField("phone")
+    private String phone;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+    /**
+     * 创建人ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+
+    @TableField(exist = false)
+    private List<TmDepartment> childList;
+
+    /** 父部门名称 */
+    @TableField(exist = false)
+    private String parentName;
+
+    /**
+     * 子菜单
+     */
+    @TableField(exist = false)
+    private List<TmDepartment> children;
+}

+ 77 - 0
src/main/java/com/fdkankan/fusion/entity/TmMessage.java

@@ -0,0 +1,77 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 留言信息表
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_message")
+public class TmMessage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一ID
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 留言内容
+     */
+    @TableField("content")
+    private String content;
+
+    /**
+     * 留言所属的火调项目ID
+     */
+    @TableField("project_id")
+    private String projectId;
+
+    /**
+     * 留言用户ID
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 最新更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 是否删除:0->未删除;1->已删除
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+
+}

+ 67 - 0
src/main/java/com/fdkankan/fusion/entity/TmPermission.java

@@ -0,0 +1,67 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_permission")
+public class TmPermission implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 权限标识
+     */
+    @TableField("perms")
+    private String perms;
+
+    /**
+     * 模块
+     */
+    @TableField("module")
+    private String module;
+
+    /**
+     * 备注
+     */
+    @TableField("reamrk")
+    private String reamrk;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,0: 生效,1: 禁用
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private String isDelete;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    @TableField("url")
+    private String url;
+}

+ 186 - 0
src/main/java/com/fdkankan/fusion/entity/TmProject.java

@@ -0,0 +1,186 @@
+package com.fdkankan.fusion.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+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 java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 火调项目信息表
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_project")
+public class TmProject implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一ID
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 项目编号
+     */
+    @TableField("project_sn")
+    private String projectSn;
+
+    /**
+     * 起火对象名称
+     */
+    @TableField("project_name")
+    private String projectName;
+
+    /**
+     * 起火对象地址
+     */
+    @TableField("project_address")
+    private String projectAddress;
+
+    /**
+     * 起火场所
+     */
+    @TableField("project_site")
+    private String projectSite;
+
+    /**
+     * 起火场所层级编码
+     */
+    @TableField("project_site_code")
+    private String projectSiteCode;
+
+    /**
+     * 承办单位ID
+     */
+    @TableField("dept_id")
+    private String deptId;
+
+    /**
+     * 承办单位名称
+     */
+    @TableField("organizer_dept_name")
+    private String organizerDeptName;
+
+    /**
+     * 承办人员
+     */
+    @TableField("organizer_users")
+    private String organizerUsers;
+
+    /**
+     * 事故日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JSONField(format = "yyyy-MM-dd")
+    @TableField("accident_date")
+    private Date accidentDate;
+
+    /**
+     * 事故原因
+     */
+    @TableField("fire_reason")
+    private String fireReason;
+
+    /**
+     * 场景码
+     */
+    @TableField("scene_num")
+    private String sceneNum;
+
+    /**
+     * 项目状态描述
+     */
+    @TableField("status_desc")
+    private String statusDesc;
+
+    /**
+     * 是否是教学项目: 0->不是;1->是
+     */
+    @TableField("is_teached")
+    private Integer isTeached;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 创建者名称
+     */
+    @TableField("creator_name")
+    private String creatorName;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 编辑者ID
+     */
+    @TableField("editor_id")
+    private String editorId;
+
+    /**
+     * 创建者名称
+     */
+    @TableField("editor_name")
+    private String editorName;
+
+    /**
+     * 编辑时间
+     */
+    @TableField("edit_time")
+    private Date editTime;
+
+    /**
+     * 最新更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 是否删除: 0->未删除;1->已删除
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 状态: 0->未认定;1已认定
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 创建者部门ID
+     */
+    @TableField("creator_dept_id")
+    private String creatorDeptId;
+
+    /**
+     * 场景链接
+     */
+    @TableField("vr_link")
+    private String vrLink;
+
+    @TableField(exist = false)
+    private Integer caseId;
+}

+ 89 - 0
src/main/java/com/fdkankan/fusion/entity/TmRole.java

@@ -0,0 +1,89 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 角色表
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_role")
+public class TmRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 角色描述
+     */
+    @TableField("role_desc")
+    private String roleDesc;
+
+    /**
+     * 角色名
+     */
+    @TableField("role_name")
+    private String roleName;
+
+    /**
+     * 角色key
+     */
+    @TableField("role_key")
+    private String roleKey;
+
+    /**
+     * 排序
+     */
+    @TableField("sort")
+    private Integer sort;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,0: 生效,1: 禁用
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private String isDelete;
+
+    /**
+     * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限
+     */
+    @TableField("dataScope")
+    private String dataScope;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+
+}

+ 60 - 0
src/main/java/com/fdkankan/fusion/entity/TmRolePermission.java

@@ -0,0 +1,60 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_role_permission")
+public class TmRolePermission implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("role_id")
+    private String roleId;
+
+    @TableField("permission_id")
+    private String permissionId;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 记录的状态,0: 生效,1: 禁用
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private String isDelete;
+
+    /**
+     * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限
+     */
+    @TableField("dataScope")
+    private Integer dataScope;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+
+}

+ 107 - 0
src/main/java/com/fdkankan/fusion/entity/TmScene.java

@@ -0,0 +1,107 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 场景关联关系表
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_scene")
+public class TmScene implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一主键
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 场景码
+     */
+    @TableField("scene_num")
+    private String sceneNum;
+
+    /**
+     * 所属部门ID
+     */
+    @TableField("dept_id")
+    private String deptId;
+
+    /**
+     * 所属用户的ID
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 所属相机ID
+     */
+    @TableField("camera_id")
+    private String cameraId;
+
+    /**
+     * 是否删除: 0->未删除;1->已删除
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 最新更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 拍摄日期
+     */
+    @TableField("video_create_time")
+    private Date videoCreateTime;
+
+    /**
+     * 场景标题
+     */
+    @TableField("title")
+    private String title;
+
+    /**
+     * 场景封面照片
+     */
+    @TableField("cover_image")
+    private String coverImage;
+
+    /**
+     * 场景浏览链接
+     */
+    @TableField("vr_link")
+    private String vrLink;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+
+}

+ 106 - 0
src/main/java/com/fdkankan/fusion/entity/TmUser.java

@@ -0,0 +1,106 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 用户信息表
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_user")
+public class TmUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private String id;
+
+    /**
+     * 部门id
+     */
+    @TableField("dept_id")
+    private String deptId;
+
+    /**
+     * 头像对应的链接地址
+     */
+    @TableField("avatar")
+    private String avatar;
+
+    /**
+     * 用户密码
+     */
+    @TableField("password")
+    private String password;
+
+    /**
+     * 用户名
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 昵称
+     */
+    @TableField("nick_name")
+    private String nickName;
+
+    /**
+     * 是否禁用:1->可用;0->禁用
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 是否删除,0: 未删除,1: 已删除
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private Boolean isDelete;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 0:否 1:是
+     */
+    @TableField("is_admin")
+    private Integer isAdmin;
+
+    @TableField(exist = false)
+    private List<String> roleIdList;
+    @TableField(exist = false)
+    private List<String> roleList;
+    @TableField(exist = false)
+    private List<String> permsList;
+
+}

+ 68 - 0
src/main/java/com/fdkankan/fusion/entity/TmUserRole.java

@@ -0,0 +1,68 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 用户角色关系表
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Getter
+@Setter
+@TableName("tm_user_role")
+public class TmUserRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private String id;
+
+    /**
+     * 用户表id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 角色表id
+     */
+    @TableField("role_id")
+    private String roleId;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 是否删除,0: 未删除,1: 已经删除
+     */
+    @TableField("is_delete")
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 创建者ID
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+
+}

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

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
 
         generate(path,"fusion", getTables(new String[]{
-                "t_case_settings",
+                "tm_attachment","tm_camera","tm_message","tm_permission","tm_project","tm_role","tm_role_permission","tm_scene","tm_user","tm_user_role"
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 78 - 0
src/main/java/com/fdkankan/fusion/httpClient/FdService.java

@@ -0,0 +1,78 @@
+package com.fdkankan.fusion.httpClient;
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.entity.TmCamera;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.httpClient.client.FdKKClient;
+import com.fdkankan.fusion.httpClient.request.FdkkCameraParam;
+import com.fdkankan.fusion.httpClient.response.FdkkLoginVo;
+import com.fdkankan.fusion.httpClient.response.FdkkResponse;
+import com.fdkankan.fusion.response.CameraVo;
+import com.fdkankan.redis.util.RedisUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class FdService {
+
+    @Autowired
+    RedisUtil redisUtil;
+    @Autowired
+    FdKKClient fdKKClient;
+
+    public String getFdToken(String fusionToken){
+        String jsObj = redisUtil.get(String.format(RedisKeyUtil.fusionLoginToken, fusionToken));
+        FdkkLoginVo vo = JSONObject.parseObject(jsObj, FdkkLoginVo.class);
+        if(vo == null){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        return vo.getFdToken();
+    }
+    public String getFdToken(){
+        String jsObj = redisUtil.get(String.format(RedisKeyUtil.fusionLoginToken, StpUtil.getTokenValue()));
+        FdkkLoginVo vo = JSONObject.parseObject(jsObj, FdkkLoginVo.class);
+        if(vo == null){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        return vo.getFdToken();
+    }
+
+    public String getFdTokenByUserName(String userName) {
+        return null;
+    }
+
+
+    public FdkkResponse fdkkUnbind(List<TmCamera> cameras) {
+        List<Long> cameraIds = cameras.stream().map(TmCamera::getFdCameraId).collect(Collectors.toList());
+        String ids = StringUtils.join(cameraIds, ",");
+        FdkkCameraParam request = new FdkkCameraParam(ids);
+        return fdKKClient.fdkkUnbind(request,this.getFdToken());
+    }
+
+    public FdkkResponse<CameraVo> getCameraDetail(String snCode) {
+        FdkkCameraParam request = new FdkkCameraParam(snCode,snCode);
+        return fdKKClient.fdkkCameraDetail(request,getFdToken());
+    }
+
+    public FdkkResponse<List<CameraVo>> getCameraDetails(List<String> snCodes) {
+        FdkkCameraParam request = new FdkkCameraParam(snCodes);
+        return fdKKClient.fdkkCameraDetails(request,getFdToken());
+    }
+
+    public FdkkResponse fdkKBind(String cameraSn) {
+        FdkkCameraParam request = new FdkkCameraParam(cameraSn,cameraSn);
+        return fdKKClient.fdkKBind(request,getFdToken());
+    }
+
+
+    public Object getFdTokenByNum(String num) {
+        return fdKKClient.getFdTokenByNum(num,getFdToken());
+    }
+}

+ 50 - 0
src/main/java/com/fdkankan/fusion/httpClient/client/FdKKClient.java

@@ -4,12 +4,15 @@ import com.alibaba.fastjson.JSONObject;
 import com.dtflys.forest.annotation.*;
 import com.fdkankan.fusion.common.PageInfo;
 import com.fdkankan.fusion.httpClient.address.FdkkAddressSource;
+import com.fdkankan.fusion.httpClient.request.FdkkCameraParam;
 import com.fdkankan.fusion.httpClient.request.FdkkLoginRequest;
 import com.fdkankan.fusion.httpClient.response.FdkkLoginVo;
 import com.fdkankan.fusion.httpClient.response.FdkkResponse;
 import com.fdkankan.fusion.request.ScenePram;
+import com.fdkankan.fusion.response.CameraVo;
 
 import java.util.HashMap;
+import java.util.List;
 
 /**
  * 获取,调用4dkk服务
@@ -28,6 +31,22 @@ public interface FdKKClient {
     @Post("/api/sso/user/logout")
     FdkkResponse<FdkkLoginVo> fdkkLogout(@Header("token") String token);
     /**
+     * 注册账号
+     */
+    @Post("/api/sso/user/register")
+    FdkkResponse fdkkRegister(@JSONBody FdkkLoginRequest fdkkLoginRequest);
+    /**
+     * 修改密码
+     */
+    @Post("/api/sso/user/changePassword")
+    FdkkResponse fdkkChangePassword(@JSONBody FdkkLoginRequest fdkkLoginRequest);
+    /**
+     * 修改密码
+     */
+    @Post("/api/sso/user/getMsgAuthCode")
+    FdkkResponse fdkkGetMsgAuthCode(@JSONBody FdkkLoginRequest fdkkLoginRequest);
+
+    /**
      * 校验token
      */
     @Post("/api/user/checkToken")
@@ -49,4 +68,35 @@ public interface FdKKClient {
      */
     @Get("/api/scene/querySceneDataSource")
     String querySceneDataSource(@Query("num") String num);
+
+    /**
+     * 绑定相机
+     */
+    @Post("/fd/api/user/camera/add")
+    FdkkResponse fdkKBind(@JSONBody FdkkCameraParam param,@Header("token")  String token);
+
+    /**
+     * 解绑相机
+     */
+    @Post("/api/user/camera/unbind")
+    FdkkResponse fdkkUnbind(@JSONBody FdkkCameraParam param,@Header("token")  String token);
+
+    /**
+     * 获取相机详情
+     */
+    @Post("/api/user/camera/detail")
+    FdkkResponse<CameraVo> fdkkCameraDetail(@JSONBody FdkkCameraParam param, @Header("token")  String token);
+
+    /**
+     * 获取相机详情
+     */
+    @Post("/fd/api/user/camera/details")
+    FdkkResponse<List<CameraVo>> fdkkCameraDetails(@JSONBody FdkkCameraParam param, @Header("token")  String token);
+
+    /**
+     * 获取dataSource
+     */
+    @Get("/fd/api/user/scene/getTokenByNum")
+    String getFdTokenByNum(@Query("num") String num, @Header("token")  String token);
+
 }

+ 0 - 35
src/main/java/com/fdkankan/fusion/httpClient/client/FdKKNewClient.java

@@ -1,35 +0,0 @@
-package com.fdkankan.fusion.httpClient.client;
-
-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.fusion.httpClient.address.NewFdkkAddressSource;
-import com.fdkankan.fusion.httpClient.request.FdkkLoginRequest;
-import com.fdkankan.fusion.httpClient.response.FdkkLoginVo;
-import com.fdkankan.fusion.httpClient.response.FdkkResponse;
-import com.fdkankan.fusion.request.ScenePram;
-
-/**
- * 获取,调用4dkk服务
- */
-@Address(source = NewFdkkAddressSource.class)
-public interface FdKKNewClient {
-
-    /**
-     * 登录
-     */
-    @Post("/ucenter/sso/user/login")
-    FdkkResponse<FdkkLoginVo> fdkkLogin(@JSONBody FdkkLoginRequest fdkkLoginRequest);
-    /**
-     * 校验token
-     */
-    @Post("/ucenter/user/checkToken")
-    FdkkResponse checkToken(@Header("token")  String token);
-
-    /**
-     * 获取v4场景数据
-     */
-    @Post("/ucenter/fusion/scene/list")
-    FdkkResponse sceneList(@JSONBody ScenePram param, @Header("token") String token);
-}

+ 0 - 18
src/main/java/com/fdkankan/fusion/httpClient/client/OverallClient.java

@@ -1,18 +0,0 @@
-package com.fdkankan.fusion.httpClient.client;
-
-import com.alibaba.fastjson.JSONObject;
-import com.dtflys.forest.annotation.*;
-import com.fdkankan.fusion.httpClient.address.OverallAddressSource;
-
-/**
- * 获取,调用全景看看服务
- */
-@Address(source = OverallAddressSource.class)
-public interface OverallClient {
-
-    @Post("/manage/age/list")
-    JSONObject list(@JSONBody JSONObject param, @Header("token") String token);
-
-    @Post("/manage/age/remove/{id}")
-    JSONObject delete(@Var("id") String id, @Header("token") String token);
-}

+ 34 - 0
src/main/java/com/fdkankan/fusion/httpClient/request/FdkkCameraParam.java

@@ -0,0 +1,34 @@
+package com.fdkankan.fusion.httpClient.request;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class FdkkCameraParam {
+    private Long cameraId;
+    private String ids;
+    private String childName;
+    private List<String> childNames = new ArrayList<>();
+    private String snCode;
+
+    public FdkkCameraParam(Long cameraId) {
+        this.cameraId = cameraId;
+    }
+
+    public FdkkCameraParam(String ids) {
+        this.ids = ids;
+    }
+
+    public FdkkCameraParam(String childName, String snCode) {
+        this.childName = childName;
+        this.snCode = snCode;
+    }
+
+    public FdkkCameraParam(List<String> childNames) {
+        this.childNames = childNames;
+    }
+}

+ 29 - 1
src/main/java/com/fdkankan/fusion/httpClient/request/FdkkLoginRequest.java

@@ -1,11 +1,39 @@
 package com.fdkankan.fusion.httpClient.request;
 
+import com.fdkankan.common.util.SecurityUtil;
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Data
-@AllArgsConstructor
+@NoArgsConstructor
 public class FdkkLoginRequest {
     private String phoneNum;
     private String password;
+    private String confirmPwd;
+    private String msgAuthCode = "2a22bac40f44af4d3b5fdc20ea706fc5";
+    private String areaNum ="86";
+
+    public FdkkLoginRequest(String phoneNum) {
+        this.phoneNum = phoneNum;
+    }
+
+    public FdkkLoginRequest(String phoneNum, String password) {
+        this.phoneNum = phoneNum;
+        this.password = password;
+    }
+
+    public FdkkLoginRequest(String phoneNum, String password, String confirmPwd) {
+        this.phoneNum = phoneNum;
+        this.password = password;
+        this.confirmPwd = confirmPwd;
+    }
+
+    public FdkkLoginRequest(String phoneNum, String password, String confirmPwd, String msgAuthCode) {
+        this.phoneNum = phoneNum;
+        this.password = password;
+        this.confirmPwd = confirmPwd;
+        this.msgAuthCode = msgAuthCode;
+    }
+
 }

+ 4 - 0
src/main/java/com/fdkankan/fusion/httpClient/request/LaserSceneParam.java

@@ -2,6 +2,7 @@ package com.fdkankan.fusion.httpClient.request;
 
 import lombok.Data;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Data
@@ -12,4 +13,7 @@ public class LaserSceneParam {
     private List<String> sceneCodes;
     private String title;
     private Integer status;
+    private List<String> snCodes = new ArrayList<>();
+    private Integer sceneSource = 4;
+
 }

+ 3 - 0
src/main/java/com/fdkankan/fusion/httpClient/response/FdkkLoginVo.java

@@ -1,9 +1,12 @@
 package com.fdkankan.fusion.httpClient.response;
 
+import com.fdkankan.fusion.entity.TmUser;
 import lombok.Data;
 
 @Data
 public class FdkkLoginVo {
     private String token;
+    private String fdToken;
     private FdkkUserVo user;
+    private TmUser tmUser;
 }

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

@@ -1,90 +1,90 @@
-package com.fdkankan.fusion.interceptor;
-
-
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.fusion.common.ResultCode;
-import com.fdkankan.fusion.common.ResultData;
-import com.fdkankan.fusion.common.util.RedisKeyUtil;
-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.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.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.Enumeration;
-
-@Component
-@Slf4j
-public class TokenInterceptor 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)){
-			String share = request.getHeader("share");
-			if(StringUtils.isNotBlank(share) && "1".equals(share) && request.getMethod().equals("GET")){
-				return true;
-			}
-			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();
-		}
-	}
-}
-
+//package com.fdkankan.fusion.interceptor;
+//
+//
+//import com.alibaba.fastjson.JSONObject;
+//import com.fdkankan.fusion.common.ResultCode;
+//import com.fdkankan.fusion.common.ResultData;
+//import com.fdkankan.fusion.common.util.RedisKeyUtil;
+//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.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.HttpServletRequestWrapper;
+//import javax.servlet.http.HttpServletResponse;
+//import java.io.IOException;
+//import java.lang.reflect.Field;
+//import java.util.Enumeration;
+//
+//@Component
+//@Slf4j
+//public class TokenInterceptor 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)){
+//			String share = request.getHeader("share");
+//			if(StringUtils.isNotBlank(share) && "1".equals(share) && request.getMethod().equals("GET")){
+//				return true;
+//			}
+//			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/fusion/mapper/ITmAttachmentMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmAttachment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmAttachmentMapper extends BaseMapper<TmAttachment> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmCameraMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmCamera;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 相机关联关系表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmCameraMapper extends BaseMapper<TmCamera> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmDepartmentMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmDepartment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-27
+ */
+@Mapper
+public interface ITmDepartmentMapper extends BaseMapper<TmDepartment> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmMessageMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmMessage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 留言信息表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmMessageMapper extends BaseMapper<TmMessage> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmPermissionMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmPermission;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmPermissionMapper extends BaseMapper<TmPermission> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmProjectMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmProject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 火调项目信息表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmProjectMapper extends BaseMapper<TmProject> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmRoleMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 角色表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmRoleMapper extends BaseMapper<TmRole> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmRolePermissionMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmRolePermission;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmRolePermissionMapper extends BaseMapper<TmRolePermission> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmSceneMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmScene;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 场景关联关系表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmSceneMapper extends BaseMapper<TmScene> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmUserMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmUser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 用户信息表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmUserMapper extends BaseMapper<TmUser> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ITmUserRoleMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.TmUserRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 用户角色关系表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Mapper
+public interface ITmUserRoleMapper extends BaseMapper<TmUserRole> {
+
+}

+ 15 - 0
src/main/java/com/fdkankan/fusion/request/CommonDto.java

@@ -0,0 +1,15 @@
+package com.fdkankan.fusion.request;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class CommonDto implements Serializable {
+
+    //@ApiModelProperty(value = "ID,多个ID通过逗号分隔")
+    private String ids;
+
+    private Integer status = 0;
+}

+ 12 - 0
src/main/java/com/fdkankan/fusion/request/MessageReqDto.java

@@ -0,0 +1,12 @@
+package com.fdkankan.fusion.request;
+
+import com.fdkankan.fusion.common.RequestBase;
+import lombok.Data;
+
+@Data
+public class MessageReqDto extends RequestBase {
+
+    private String projectId;
+
+    private String content;
+}

+ 19 - 0
src/main/java/com/fdkankan/fusion/request/ProjectRandCodeDto.java

@@ -0,0 +1,19 @@
+package com.fdkankan.fusion.request;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@NoArgsConstructor
+@Data
+public class ProjectRandCodeDto implements Serializable {
+
+    //@ApiModelProperty(value = "火调项目ID")
+    private String projectId;
+
+    //@ApiModelProperty(value = "访问密码")
+    private String randCode;
+
+    private String roteUrl;
+}

+ 15 - 0
src/main/java/com/fdkankan/fusion/request/ProjectRequest.java

@@ -0,0 +1,15 @@
+package com.fdkankan.fusion.request;
+
+import com.fdkankan.fusion.common.RequestBase;
+import lombok.Data;
+
+/**
+ * Created by owen on 2020/2/18 0018 17:09
+ */
+@Data
+public class ProjectRequest extends RequestBase {
+
+    private String projectId;
+    private String randCode;
+    private int type =1;
+}

+ 50 - 0
src/main/java/com/fdkankan/fusion/request/ProjectRequestDto.java

@@ -0,0 +1,50 @@
+package com.fdkankan.fusion.request;
+
+import com.fdkankan.fusion.common.RequestBase;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class ProjectRequestDto extends RequestBase {
+
+    //@ApiModelProperty(value = "项目编号")
+    private String projectSn;
+
+    //@ApiModelProperty(value = "起火对象名称")
+    private String projectName;
+
+    //@ApiModelProperty(value = "起火对象地址")
+    private String projectAdrress;
+
+    //@ApiModelProperty(value = "起火场所")
+    private String projectSite;
+
+    //@ApiModelProperty(value = "起火场所编码")
+    private String projectSiteCode;
+
+    //@ApiModelProperty(value = "承办单位ID")
+    private String deptId;
+
+    //@ApiModelProperty(value = "承办单位名称")
+    private String organizerDeptName;
+
+    //@ApiModelProperty(value = "承办人员")
+    private String organizerUsers;
+
+    //@ApiModelProperty(value = "事故日期")
+    private LocalDate accidentDate;
+
+    //@ApiModelProperty(value = "事故原因")
+    private String fireReason;
+
+    //@ApiModelProperty(value = "项目状态")
+    private String status;
+
+    //@ApiModelProperty(value = "是否是教学项目: 0->不是;1->是")
+    private Integer isTeached;
+
+    //@ApiModelProperty(value = "查血类型:1->非教学栏目查询 , 2->教学类别查询")
+    private Integer queryType;
+
+}

+ 2 - 0
src/main/java/com/fdkankan/fusion/request/ScenePram.java

@@ -13,6 +13,8 @@ public class ScenePram extends RequestBase {
     private Integer haveVoid = 0;
     private Integer status; //
 
+    private List<String> snCodes;
+
     public String getSceneName() {
         return sceneName== null ?null :sceneName.trim();
     }

+ 13 - 0
src/main/java/com/fdkankan/fusion/response/BindCameraDto.java

@@ -0,0 +1,13 @@
+package com.fdkankan.fusion.response;
+
+import lombok.Data;
+
+@Data
+public class BindCameraDto {
+
+    private String cameraSn;
+
+    private String deptId;
+
+    private String userId;
+}

+ 64 - 0
src/main/java/com/fdkankan/fusion/response/CameraVo.java

@@ -0,0 +1,64 @@
+package com.fdkankan.fusion.response;
+
+import lombok.Data;
+
+@Data
+public class CameraVo {
+    private Long id;
+    private String snCode;          //相机snCode
+    private String childName;
+
+    private String unit;
+    private Long space;
+    private String spaceStr;
+    private String usedSpace;       //使用容量
+    private String usedSpaceStr ="";
+    private String totalSpace;      //总容量
+    private String totalSpaceStr ="";
+
+    private String spaceEndTime;    //到期时间
+    private String spaceEndStr;
+
+    private Long  cooperationUser;          //协作者
+    private String cooperationUserName;
+
+    private Integer sceneNum;          //场景数量
+    private String lastTime;        //最后拍摄时间
+
+    private String pic;             //相机图片
+
+    private String cameraType;
+    private Integer balance;
+    private Integer type;
+
+    private Boolean isExpire;
+
+    private Long userIncrementId;
+    private Integer surplusDate;
+
+    private Long goodsId;
+
+
+    /**"相机容量表id", name = "spaceId*/
+    private Long spaceId;
+    /**"国际,0国内,1国际", name = "country*/
+    private Integer country;
+
+    /**"用户id", name = "userId*/
+    private Long userId;
+
+    /**"激活时间", name = "activatedTime*/
+    private String activatedTime;
+
+    /**"昵称", name = "nickName*/
+    private String nickName;
+
+    private Integer own;
+
+    private String memberLevels;
+
+    private String deptId;
+
+    private String deptName;
+
+}

+ 13 - 0
src/main/java/com/fdkankan/fusion/response/ProjectRandCodeVo.java

@@ -0,0 +1,13 @@
+package com.fdkankan.fusion.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectRandCodeVo {
+    private String randCode;
+    private String roteUrl;
+}

+ 29 - 0
src/main/java/com/fdkankan/fusion/response/UserAddRequest.java

@@ -0,0 +1,29 @@
+package com.fdkankan.fusion.response;
+
+import com.fdkankan.fusion.common.RequestBase;
+import lombok.Data;
+
+@Data
+public class UserAddRequest extends RequestBase {
+
+    private String id;
+
+    private String userName;
+
+    private String nickName;
+
+    private String password;
+
+    private String deptId;
+
+    private String roleId;
+
+    private String searchKey;
+
+    private String confirmPwd;
+
+    private String code;
+
+    //状态:1->可用;0->禁用
+    private Integer status;
+}

+ 2 - 0
src/main/java/com/fdkankan/fusion/service/ICaseFilesService.java

@@ -16,4 +16,6 @@ import java.util.List;
 public interface ICaseFilesService extends IService<CaseFiles> {
 
     List<CaseFiles> allList(Integer caseId, Integer caseFilesTypeId);
+
+    List<CaseFiles> getByCaseId(Integer caseId);
 }

+ 4 - 0
src/main/java/com/fdkankan/fusion/service/ICaseService.java

@@ -31,4 +31,8 @@ public interface ICaseService extends IService<CaseEntity> {
     List<SceneVo> sceneList(CaseParam param, String token);
 
     List<CaseEntity> getByIds(List<Integer> caseIdIds);
+
+    CaseEntity getByTmProjectId(String projectId);
+
+    void updateIdenTityStatus(Integer caseId, Integer status);
 }

+ 1 - 1
src/main/java/com/fdkankan/fusion/service/IModelService.java

@@ -21,7 +21,7 @@ public interface IModelService extends IService<Model> {
 
     Model uploadObj(MultipartFile file, String username) throws Exception;
 
-    PageInfo pageList(ModelPram param, String token);
+    PageInfo pageList(ModelPram param, String username);
 
     void delete(Integer modelId);
 

+ 2 - 0
src/main/java/com/fdkankan/fusion/service/ISceneService.java

@@ -11,4 +11,6 @@ public interface ISceneService {
     PageInfo pageList(ScenePram param, String token);
 
     List<SceneVo> getSceneListAndModel(ScenePram param);
+
+    Object getFdTokenByNum(String num);
 }

+ 18 - 0
src/main/java/com/fdkankan/fusion/service/ITmAttachmentService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmAttachment;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmAttachmentService extends IService<TmAttachment> {
+
+    void deleteByProjectId(String projectId);
+
+}

+ 38 - 0
src/main/java/com/fdkankan/fusion/service/ITmCameraService.java

@@ -0,0 +1,38 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmCamera;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.fusion.response.BindCameraDto;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 相机关联关系表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmCameraService extends IService<TmCamera> {
+
+    List<TmCamera> getByUserId(String userId);
+
+    void unBind(List<TmCamera> cameras);
+
+    Object getDetail(String snCode);
+
+    TmCamera getBySnCode(String snCode);
+
+    Object pageList(Long pageNum, Long pageSize, String snCode, String deptId, Integer type);
+
+    void bind(BindCameraDto param);
+
+    void unBind(BindCameraDto param);
+
+    void edit(BindCameraDto param);
+
+    List<TmCamera> getByDeptIds(List<String> deptIds);
+
+    List<TmCamera> getByDeptIds();
+}

+ 31 - 0
src/main/java/com/fdkankan/fusion/service/ITmDepartmentService.java

@@ -0,0 +1,31 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmDepartment;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-27
+ */
+public interface ITmDepartmentService extends IService<TmDepartment> {
+
+    List<TmDepartment> getDeptList();
+
+    List<TmDepartment> getDeptList(String parentId);
+
+    void insertDept(TmDepartment dept);
+
+    void updateDept(TmDepartment dept);
+
+    void deleteDeptById(String deptId);
+
+    List<String> getDeptIds();
+
+    String getDeptId();
+}

+ 20 - 0
src/main/java/com/fdkankan/fusion/service/ITmMessageService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmMessage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.fusion.request.MessageReqDto;
+
+/**
+ * <p>
+ * 留言信息表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmMessageService extends IService<TmMessage> {
+
+    void addNew(MessageReqDto body);
+
+    Object pageList(MessageReqDto messageReqDto);
+}

+ 16 - 0
src/main/java/com/fdkankan/fusion/service/ITmPermissionService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmPermission;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmPermissionService extends IService<TmPermission> {
+
+}

+ 43 - 0
src/main/java/com/fdkankan/fusion/service/ITmProjectService.java

@@ -0,0 +1,43 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.CaseEntity;
+import com.fdkankan.fusion.entity.TmProject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.fusion.request.CommonDto;
+import com.fdkankan.fusion.request.ProjectRandCodeDto;
+import com.fdkankan.fusion.request.ProjectRequest;
+import com.fdkankan.fusion.request.ProjectRequestDto;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 火调项目信息表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmProjectService extends IService<TmProject> {
+
+    Object pageList(ProjectRequestDto tmProject);
+
+    Object getDetailWithoutAuth(ProjectRequest param);
+
+    Object getRandCode(String projectId,String roteUrl);
+
+    void updateRandomCode(ProjectRandCodeDto projectRandCodeDto);
+
+    void addNewProject(TmProject tmProject);
+
+    void updateProject(TmProject tmProject);
+
+    void setOrUnTeach(CommonDto commonDto);
+
+    TmProject getByProjectSn(String projectSn);
+
+    HashMap<String, CaseEntity> getCaseMap(List<String> ids);
+
+    void updateIdenTityStatus(String tmProjectId, Integer status);
+}

+ 19 - 0
src/main/java/com/fdkankan/fusion/service/ITmRolePermissionService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmRolePermission;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmRolePermissionService extends IService<TmRolePermission> {
+
+    List<TmRolePermission> getByRoleIds(List<String> roleIds);
+}

+ 16 - 0
src/main/java/com/fdkankan/fusion/service/ITmRoleService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmRole;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 角色表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmRoleService extends IService<TmRole> {
+
+}

+ 16 - 0
src/main/java/com/fdkankan/fusion/service/ITmSceneService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmScene;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 场景关联关系表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmSceneService extends IService<TmScene> {
+
+}

+ 23 - 0
src/main/java/com/fdkankan/fusion/service/ITmUserRoleService.java

@@ -0,0 +1,23 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmUserRole;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 用户角色关系表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmUserRoleService extends IService<TmUserRole> {
+
+    List<TmUserRole> getByUserId(String id);
+
+    void add(String userId, String roleId);
+
+    void updateByUserId(String userId, String roleId);
+}

+ 40 - 0
src/main/java/com/fdkankan/fusion/service/ITmUserService.java

@@ -0,0 +1,40 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.TmUser;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.fusion.httpClient.response.FdkkResponse;
+import com.fdkankan.fusion.response.UserAddRequest;
+import org.apache.catalina.User;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 用户信息表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+public interface ITmUserService extends IService<TmUser> {
+
+    void setRoleAndPermToRedis(TmUser tmUser);
+
+    TmUser getByUserName(String phoneNum);
+
+    void addUser(UserAddRequest param);
+
+    void editUser(UserAddRequest param);
+
+    void changePassword(UserAddRequest param);
+
+    FdkkResponse getMsgAuthCode(String phoneNum);
+
+    void changeStatus(UserAddRequest param);
+
+    void delUser(UserAddRequest param);
+
+    List<TmUser> getByDeptId(String deptId);
+
+    TmUser getLoginUser();
+}

+ 7 - 1
src/main/java/com/fdkankan/fusion/service/impl/CaseFilesServiceImpl.java

@@ -2,7 +2,6 @@ package com.fdkankan.fusion.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.fusion.common.ResultCode;
-import com.fdkankan.fusion.common.util.JwtUtil;
 import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.common.ResultData;
 import com.fdkankan.fusion.entity.CaseFiles;
@@ -38,4 +37,11 @@ public class CaseFilesServiceImpl extends ServiceImpl<ICaseFilesMapper, CaseFile
         wrapper.orderByDesc(CaseFiles::getCreateTime);
         return this.list(wrapper);
     }
+
+    @Override
+    public List<CaseFiles> getByCaseId(Integer caseId) {
+        LambdaQueryWrapper<CaseFiles> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CaseFiles::getCaseId,caseId);
+        return this.list();
+    }
 }

+ 21 - 5
src/main/java/com/fdkankan/fusion/service/impl/CaseServiceImpl.java

@@ -1,12 +1,12 @@
 package com.fdkankan.fusion.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.entity.Model;
 import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.common.PageInfo;
-import com.fdkankan.fusion.common.util.JwtUtil;
 import com.fdkankan.fusion.entity.CaseEntity;
 import com.fdkankan.fusion.mapper.ICaseMapper;
 import com.fdkankan.fusion.request.CaseParam;
@@ -44,15 +44,17 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
     IModelService modelService;
     @Autowired
     IFusionNumService fusionNumService;
+    @Autowired
+    ITmProjectService tmProjectService;
 
     @Override
-    public PageInfo pageList(CaseParam param,String token) {
-        String userName = JwtUtil.getUsername(token);
+    public PageInfo pageList(CaseParam param,String userName) {
         LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
         if(StringUtils.isNotBlank(param.getCaseTitle())){
             wrapper.like(CaseEntity::getCaseTitle,param.getCaseTitle());
         }
         wrapper.eq(CaseEntity::getUserName,userName);
+        wrapper.eq(CaseEntity::getType,0);
         wrapper.orderByDesc(CaseEntity::getCreateTime);
         Page<CaseEntity> page = this.page( new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
         return PageInfo.PageInfo(page);
@@ -150,8 +152,7 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
     }
 
     @Override
-    public void addOrUpdate(CaseParam param, String token) {
-        String userName = JwtUtil.getUsername(token);
+    public void addOrUpdate(CaseParam param, String userName) {
         if(StringUtils.isEmpty(param.getCaseTitle())){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
@@ -198,4 +199,19 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
         wrapper.in(CaseEntity::getCaseId,caseIdIds);
         return this.list(wrapper);
     }
+
+    @Override
+    public CaseEntity getByTmProjectId(String projectId) {
+        LambdaQueryWrapper<CaseEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CaseEntity::getTmProjectId,projectId);
+        return this.getOne(wrapper);
+    }
+
+    @Override
+    public void updateIdenTityStatus(Integer caseId, Integer status) {
+        CaseEntity caseEntity = this.getById(caseId);
+        if(caseEntity != null && StringUtils.isNotBlank(caseEntity.getTmProjectId())){
+            tmProjectService.updateIdenTityStatus(caseEntity.getTmProjectId(),status);
+        }
+    }
 }

+ 2 - 3
src/main/java/com/fdkankan/fusion/service/impl/ModelServiceImpl.java

@@ -268,10 +268,9 @@ public class ModelServiceImpl extends ServiceImpl<IModelMapper, Model> implement
     }
 
     @Override
-    public PageInfo pageList(ModelPram param, String token) {
-        String username = JwtUtil.getUsername(token);
+    public PageInfo pageList(ModelPram param, String userName) {
         LambdaQueryWrapper<Model> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(Model::getUserName,username);
+        wrapper.eq(Model::getUserName,userName);
         wrapper.eq(Model::getType,3);
         wrapper.notIn(Model::getCreateStatus,-2);
         if(param.getStatus()!=null){    //参数2为成功,数据库中成功为1

+ 41 - 13
src/main/java/com/fdkankan/fusion/service/impl/SceneService.java

@@ -1,16 +1,18 @@
 package com.fdkankan.fusion.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.common.util.SecurityUtil;
 import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.common.ResultData;
-import com.fdkankan.fusion.common.util.JwtUtil;
 import com.fdkankan.fusion.entity.Model;
+import com.fdkankan.fusion.entity.TmCamera;
 import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.common.PageInfo;
+import com.fdkankan.fusion.httpClient.FdService;
 import com.fdkankan.fusion.httpClient.client.FdKKClient;
-import com.fdkankan.fusion.httpClient.client.FdKKNewClient;
 import com.fdkankan.fusion.httpClient.client.LaserClient;
 import com.fdkankan.fusion.httpClient.request.LaserSceneParam;
 import com.fdkankan.fusion.httpClient.response.FdkkResponse;
@@ -20,6 +22,8 @@ import com.fdkankan.fusion.response.SceneProEntityVo;
 import com.fdkankan.fusion.response.SceneVo;
 import com.fdkankan.fusion.service.IModelService;
 import com.fdkankan.fusion.service.ISceneService;
+import com.fdkankan.fusion.service.ITmCameraService;
+import com.fdkankan.fusion.service.ITmDepartmentService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +31,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -40,6 +45,12 @@ public class SceneService implements ISceneService {
     LaserClient laserClient;
     @Autowired
     IModelService modelService;
+    @Autowired
+    FdService fdService;
+    @Autowired
+    ITmDepartmentService tmDepartmentService;
+    @Autowired
+    ITmCameraService tmCameraService;
 
     @Override
     public List<SceneVo> getSceneListAndModel(ScenePram param) {
@@ -67,17 +78,24 @@ public class SceneService implements ISceneService {
         if(param.getType() == null){
            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
+        List<TmCamera> tmCameraList = tmCameraService.getByDeptIds();
+        List<String> snCodes = tmCameraList.stream().map(TmCamera::getCameraSn).collect(Collectors.toList());
+        if(CollectionUtil.isEmpty(snCodes)){
+            snCodes = Arrays.asList("no_snCode");
+        }
+        param.setSnCodes(snCodes);
         List<SceneVo> sceneVoList = new ArrayList<>();
         long total = 0;
         if(param.getType() == 0 || param.getType() == 1 || param.getType() == 4){      //看看,看见 ,深时obj
             //获取四维(看看,看见)场景数据
             FdkkResponse fdkkResponse = null;
-            if(param.getNumList() == null || param.getNumList().size()<=0){
-                param.setStatus(2);
-                fdkkResponse = fdKKClient.sceneList(param,token);
-            }else {
-                fdkkResponse = fdKKClient.sceneList(param);
-            }
+//            if(param.getNumList() == null || param.getNumList().size()<=0){
+//                param.setStatus(2);
+//                fdkkResponse = fdKKClient.sceneList(param,fdService.getFdToken(token));
+//            }else {
+//                fdkkResponse = fdKKClient.sceneList(param);
+//            }
+            fdkkResponse = fdKKClient.sceneList(param);
             if(fdkkResponse.getCode() !=0){
                 throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg());
             }
@@ -93,6 +111,7 @@ public class SceneService implements ISceneService {
             laserSceneParam.setPageNum(param.getPageNum());
             laserSceneParam.setPageSize(param.getPageSize());
             laserSceneParam.setStatus(param.getStatus());
+            laserSceneParam.setSnCodes(snCodes);
             if(StringUtils.isNotBlank(param.getSceneName())){
                 laserSceneParam.setTitle(param.getSceneName());
             }
@@ -100,11 +119,12 @@ public class SceneService implements ISceneService {
                 laserSceneParam.setSceneCodes(param.getNumList());
             }
             FdkkResponse fdkkResponse = null;
-            if(param.getNumList() == null || param.getNumList().size()<=0){
-                fdkkResponse = laserClient.sceneList(laserSceneParam, token);
-            }else {
-                fdkkResponse = laserClient.sceneList(laserSceneParam);
-            }
+//            if(param.getNumList() == null || param.getNumList().size()<=0){
+//                fdkkResponse = laserClient.sceneList(laserSceneParam, fdService.getFdToken(token));
+//            }else {
+//                fdkkResponse = laserClient.sceneList(laserSceneParam);
+//            }
+            fdkkResponse = laserClient.sceneList(laserSceneParam);
             if(fdkkResponse.getCode() !=200){
                 throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg());
             }
@@ -208,4 +228,12 @@ public class SceneService implements ISceneService {
         }
         return status;
     }
+
+    @Override
+    public Object getFdTokenByNum(String num) {
+        if(StringUtils.isBlank(num)){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        return fdService.getFdTokenByNum(num);
+    }
 }

+ 27 - 0
src/main/java/com/fdkankan/fusion/service/impl/TmAttachmentServiceImpl.java

@@ -0,0 +1,27 @@
+package com.fdkankan.fusion.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.fusion.entity.TmAttachment;
+import com.fdkankan.fusion.mapper.ITmAttachmentMapper;
+import com.fdkankan.fusion.service.ITmAttachmentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Service
+public class TmAttachmentServiceImpl extends ServiceImpl<ITmAttachmentMapper, TmAttachment> implements ITmAttachmentService {
+
+    @Override
+    public void deleteByProjectId(String projectId) {
+        LambdaQueryWrapper<TmAttachment> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TmAttachment::getProjectId,projectId);
+        this.remove(wrapper);
+    }
+}

+ 219 - 0
src/main/java/com/fdkankan/fusion/service/impl/TmCameraServiceImpl.java

@@ -0,0 +1,219 @@
+package com.fdkankan.fusion.service.impl;
+import java.util.*;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.fusion.common.PageInfo;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.enums.IdPreEnum;
+import com.fdkankan.fusion.common.util.IdUtils;
+import com.fdkankan.fusion.entity.TmCamera;
+import com.fdkankan.fusion.entity.TmDepartment;
+import com.fdkankan.fusion.entity.TmUser;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.httpClient.FdService;
+import com.fdkankan.fusion.httpClient.client.FdKKClient;
+import com.fdkankan.fusion.httpClient.request.FdkkCameraParam;
+import com.fdkankan.fusion.httpClient.response.FdkkResponse;
+import com.fdkankan.fusion.mapper.ITmCameraMapper;
+import com.fdkankan.fusion.response.BindCameraDto;
+import com.fdkankan.fusion.response.CameraVo;
+import com.fdkankan.fusion.service.ITmCameraService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.fusion.service.ITmDepartmentService;
+import com.fdkankan.fusion.service.ITmUserService;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 相机关联关系表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Service
+public class TmCameraServiceImpl extends ServiceImpl<ITmCameraMapper, TmCamera> implements ITmCameraService {
+
+    @Autowired
+    FdService fdService;
+    @Autowired
+    ITmDepartmentService tmDepartmentService;
+    @Autowired
+    ITmUserService tmUserService;
+
+    @Override
+    public List<TmCamera> getByUserId(String userId) {
+        LambdaQueryWrapper<TmCamera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TmCamera::getUserId,userId);
+        return list(wrapper);
+    }
+
+    @Override
+    public TmCamera getBySnCode(String snCode) {
+        LambdaQueryWrapper<TmCamera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TmCamera::getCameraSn,snCode);
+        return getOne(wrapper);
+    }
+
+    @Override
+    public void bind(BindCameraDto param) {
+        if(StringUtils.isNoneBlank(param.getCameraSn(),param.getDeptId(),param.getUserId())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        TmUser tmUser = tmUserService.getById(param.getUserId());
+        if(tmUser == null || tmUser.getStatus() == 0){
+            throw new BusinessException(ResultCode.USER_NOT_EXIST);
+        }
+        TmDepartment tmDepartment = tmDepartmentService.getById(param.getDeptId());
+        if(tmDepartment == null){
+            throw new BusinessException(ResultCode.DEPT_NOT_EXITS);
+        }
+        TmCamera tmCamera = this.getBySnCode(param.getCameraSn());
+        if(tmCamera != null){
+            throw new BusinessException(ResultCode.CAMERA_EXITS);
+        }
+        FdkkResponse<CameraVo> fdkkResponse = fdService.getCameraDetail(param.getCameraSn());
+        if(fdkkResponse.getCode() !=0 || fdkkResponse.getData() == null){
+            throw new BusinessException(ResultCode.CAMERA_NOT_EXITS);
+        }
+        FdkkResponse fdkkResponse2 =  fdService.fdkKBind(param.getCameraSn());
+        if(fdkkResponse2.getCode() != 0){
+            throw new BusinessException(fdkkResponse2.getCode(),fdkkResponse2.getMsg());
+        }
+        tmCamera = new TmCamera();
+        tmCamera.setId(IdUtils.genId(IdPreEnum.CAMERA_PRE.getPre()));
+        tmCamera.setCameraSn(param.getCameraSn());
+        tmCamera.setDeptId(param.getDeptId());
+        tmCamera.setUserId(param.getUserId());
+        tmCamera.setFdCameraId(fdkkResponse.getData().getId());
+        tmCamera.setCreatorId((String) StpUtil.getLoginId());
+        this.save(tmCamera);
+
+    }
+
+    @Override
+    public void unBind(BindCameraDto param) {
+        if(StringUtils.isBlank(param.getCameraSn())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        TmCamera tmCamera = this.getBySnCode(param.getCameraSn());
+        if(tmCamera == null){
+            throw new BusinessException(ResultCode.CAMERA_NOT_EXITS);
+        }
+        this.unBind(Arrays.asList(tmCamera));
+    }
+
+    @Override
+    public void unBind(List<TmCamera> cameras) {
+        if(CollectionUtil.isNotEmpty(cameras)){
+            //四维解绑相机
+            List<String> tmCameraIds = cameras.stream().map(TmCamera::getId).collect(Collectors.toList());
+            FdkkResponse fdkkResponse = fdService.fdkkUnbind(cameras);
+            if(fdkkResponse.getCode() == 0 ){
+                this.removeByIds(tmCameraIds);
+            }else {
+                throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg());
+            }
+
+        }
+    }
+
+    @Override
+    public void edit(BindCameraDto param) {
+        if(StringUtils.isNoneBlank(param.getCameraSn(),param.getUserId())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        TmUser tmUser = tmUserService.getById(param.getUserId());
+        if(tmUser == null || tmUser.getStatus() == 0){
+            throw new BusinessException(ResultCode.USER_NOT_EXIST);
+        }
+        TmCamera tmCamera = this.getBySnCode(param.getCameraSn());
+        if(tmCamera == null){
+            throw new BusinessException(ResultCode.CAMERA_NOT_EXITS);
+        }
+        LambdaUpdateWrapper<TmCamera> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(TmCamera::getCameraSn,param.getCameraSn());
+        wrapper.set(TmCamera::getUserId,param.getUserId());
+        this.update(wrapper);
+    }
+
+    @Override
+    public Object getDetail(String snCode) {
+        if(StringUtils.isBlank(snCode)){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+
+        TmCamera tmCamera = this.getBySnCode(snCode);
+        if(tmCamera == null){
+            throw new BusinessException(ResultCode.CAMERA_NOT_EXITS);
+        }
+        return fdService.getCameraDetail(snCode);
+    }
+
+    @Override
+    public Object pageList(Long pageNum, Long pageSize, String snCode, String deptId, Integer type) {
+        LambdaQueryWrapper<TmCamera> wrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(snCode)) {
+            wrapper.like(TmCamera::getCameraSn,snCode);
+        }
+        if(StringUtils.isNotBlank(deptId)){
+            wrapper.eq(TmCamera::getDeptId,deptId);
+        }
+        List<String> deptIds = tmDepartmentService.getDeptIds();
+        wrapper.in(TmCamera::getDeptId,deptIds);
+        wrapper.orderByDesc(TmCamera::getCreateTime);
+        Page<TmCamera> page = this.page(new Page<>(pageNum, pageSize), wrapper);
+        List<String> snCodes = page.getRecords().stream().map(TmCamera::getCameraSn).collect(Collectors.toList());
+        FdkkResponse<List<CameraVo>> fdkkResponse = fdService.getCameraDetails(snCodes);
+
+        HashMap<String,String> deptIdMap = new HashMap<>();
+        HashMap<String,String> deptNameMap = new HashMap<>();
+        for (TmCamera record : page.getRecords()) {
+            deptIdMap.put(record.getCameraSn(),record.getDeptId());
+        }
+        Set<String> strings = deptIdMap.keySet();
+        List<TmDepartment> departments = tmDepartmentService.listByIds(strings);
+        for (TmDepartment department : departments) {
+            deptNameMap.put(department.getId(),department.getName());
+        }
+
+        List<CameraVo> list =  fdkkResponse.getData();
+        for (CameraVo cameraVo : list) {
+            String deptIdO = deptIdMap.get(cameraVo.getSnCode());
+            cameraVo.setDeptId(deptIdO);
+            cameraVo.setDeptName(deptNameMap.get(deptIdO));
+        }
+        Page<CameraVo> objectPage = new Page<>(pageNum, pageSize);
+        objectPage.setRecords(list);
+        objectPage.setTotal(page.getTotal());
+        return PageInfo.PageInfo(objectPage);
+    }
+
+    @Override
+    public List<TmCamera> getByDeptIds() {
+        List<String> deptIds = tmDepartmentService.getDeptIds();
+
+        return getByDeptIds(deptIds);
+    }
+
+    @Override
+    public List<TmCamera> getByDeptIds(List<String> deptIds) {
+        if(CollectionUtil.isEmpty(deptIds)){
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<TmCamera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(TmCamera::getDeptId,deptIds);
+        return this.list(wrapper);
+    }
+}

+ 158 - 0
src/main/java/com/fdkankan/fusion/service/impl/TmDepartmentServiceImpl.java

@@ -0,0 +1,158 @@
+package com.fdkankan.fusion.service.impl;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.enums.IdPreEnum;
+import com.fdkankan.fusion.entity.TmDepartment;
+import com.fdkankan.fusion.entity.TmUser;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.mapper.ITmDepartmentMapper;
+import com.fdkankan.fusion.service.ITmDepartmentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.fusion.service.ITmUserService;
+import org.apache.catalina.User;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-27
+ */
+@Service
+public class TmDepartmentServiceImpl extends ServiceImpl<ITmDepartmentMapper, TmDepartment> implements ITmDepartmentService {
+
+    @Autowired
+    ITmUserService tmUserService;
+
+    @Override
+    public void insertDept(TmDepartment dept) {
+        if(!checkDeptNameUnique(dept.getName(),null)){
+            throw new BusinessException(ResultCode.DEPT_NAME_EXITS);
+        }
+        //TmDepartment info = this.getById(dept.getParentId());
+        dept.setId(IdPreEnum.DEPARTMENT_PRE.getPre() +IdUtil.getSnowflake(1).nextId() );
+        //dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
+        dept.setCreatorId((String) StpUtil.getLoginId());
+        this.save(dept);
+    }
+
+    @Override
+    public void updateDept(TmDepartment dept) {
+        if(!checkDeptNameUnique(dept.getName(),dept.getId())){
+            throw new BusinessException(ResultCode.DEPT_NAME_EXITS);
+        }
+        dept.setCreateTime(null);
+        dept.setUpdateTime(null);
+        this.updateById(dept);
+    }
+
+    @Override
+    public void deleteDeptById(String deptId) {
+        List<TmDepartment> deptList = this.getDeptListByParentId(deptId);
+        if(deptList .size() >0){
+            throw new BusinessException(ResultCode.DEPT_DEL_ERROR1);
+        }
+        List<TmUser> userList = tmUserService.getByDeptId(deptId);
+        if(userList.size() >0){
+            throw new BusinessException(ResultCode.DEPT_DEL_ERROR2);
+        }
+        this.removeById(deptId);
+    }
+
+    private boolean checkDeptNameUnique(String name, String id) {
+        LambdaQueryWrapper<TmDepartment> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TmDepartment::getName,name);
+        if(StringUtils.isNotBlank(id)){
+            wrapper.ne(TmDepartment::getId,id);
+        }
+        List<TmDepartment> list = this.list(wrapper);
+        if(list.size() >0){
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public List<TmDepartment> getDeptList() {
+        String userId  =(String) StpUtil.getLoginId();
+        TmUser tmUser = tmUserService.getById(userId);
+        if(tmUser == null){
+            return new ArrayList<>();
+        }
+        return getDeptList(tmUser.getDeptId());
+    }
+
+    public List<TmDepartment> getDeptList(String deptId) {
+        TmDepartment dept = this.getById(deptId);
+        if(dept == null){
+            return new ArrayList<>();
+        }
+        if("0".equals(dept.getId())){
+            return this.getDeptListByParentId(deptId);
+        }
+        dept.setChildren(this.getDeptListByParentId(deptId));
+        return Arrays.asList(dept);
+    }
+
+
+    public List<TmDepartment> getDeptListByParentId(String parentId) {
+        LambdaQueryWrapper<TmDepartment> queryWrapper = new LambdaQueryWrapper<>();
+        if(parentId == null){
+            queryWrapper.isNull(TmDepartment::getParentId);
+        }else {
+            queryWrapper.eq(TmDepartment::getParentId,parentId);
+        }
+        queryWrapper.orderByDesc(TmDepartment::getCreateTime);
+        List<TmDepartment> list = this.list(queryWrapper);
+        if(list.size() <=0){
+            return list;
+        }
+        for (TmDepartment deptVo : list) {
+            deptVo.setChildren(getDeptListByParentId(deptVo.getId()));
+        }
+        return list;
+    }
+
+    @Override
+    public List<String> getDeptIds() {
+        List<String> Ids = new ArrayList<>();
+        List<TmDepartment> deptList = this.getDeptList();
+        getDeptIds(deptList,Ids);
+        return Ids;
+    }
+
+    @Override
+    public String getDeptId() {
+        String userId  =(String) StpUtil.getLoginId();
+        TmUser tmUser = tmUserService.getById(userId);
+        if(tmUser == null){
+            return null;
+        }
+        return tmUser.getDeptId();
+    }
+
+    public void getDeptIds(List<TmDepartment> departments, List<String > Ids) {
+        for (TmDepartment department : departments) {
+            Ids.add(department.getId());
+            if(department.getChildren() != null && department.getChildren().size() >0){
+                this.getDeptIds(department.getChildren(),Ids);
+            }
+        }
+    }
+}

+ 67 - 0
src/main/java/com/fdkankan/fusion/service/impl/TmMessageServiceImpl.java

@@ -0,0 +1,67 @@
+package com.fdkankan.fusion.service.impl;
+import java.util.Date;
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.fusion.common.PageInfo;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.enums.IdPreEnum;
+import com.fdkankan.fusion.common.util.IdUtils;
+import com.fdkankan.fusion.entity.TmMessage;
+import com.fdkankan.fusion.entity.TmProject;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.mapper.ITmMessageMapper;
+import com.fdkankan.fusion.request.MessageReqDto;
+import com.fdkankan.fusion.service.ITmMessageService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.fusion.service.ITmProjectService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 留言信息表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-07-28
+ */
+@Service
+public class TmMessageServiceImpl extends ServiceImpl<ITmMessageMapper, TmMessage> implements ITmMessageService {
+
+    @Autowired
+    ITmProjectService tmProjectService;
+
+    @Override
+    public void addNew(MessageReqDto body) {
+        if(StringUtils.isBlank(body.getProjectId()) || StringUtils.isBlank(body.getContent())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        TmProject tmProject = tmProjectService.getById(body.getProjectId());
+        if(null == tmProject){
+            throw new BusinessException(ResultCode.PROJECT_NOT_EXITS);
+        }
+        TmMessage tmMessage = new TmMessage();
+        tmMessage.setId(IdUtils.genId(IdPreEnum.MESSAGE_PRE.getPre()));
+        tmMessage.setContent(body.getContent());
+        tmMessage.setProjectId(body.getProjectId());
+        tmMessage.setUserId((String) StpUtil.getLoginId());
+        tmMessage.setCreatorId((String) StpUtil.getLoginId());
+        this.save(tmMessage);
+
+
+    }
+
+    @Override
+    public Object pageList(MessageReqDto messageReqDto) {
+        if( StringUtils.isBlank(messageReqDto.getContent())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        LambdaQueryWrapper<TmMessage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TmMessage::getProjectId,messageReqDto.getProjectId());
+        Page<TmMessage> page = this.page(new Page<>(messageReqDto.getPageNum(), messageReqDto.getPageSize()), wrapper);
+        return PageInfo.PageInfo(page);
+    }
+}

+ 0 - 0
src/main/java/com/fdkankan/fusion/service/impl/TmPermissionServiceImpl.java


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff