xiewj hace 2 años
padre
commit
22fe6be61e
Se han modificado 100 ficheros con 2823 adiciones y 188 borrados
  1. 28 0
      pom.xml
  2. 5 1
      src/main/java/com/fdkankan/site/SmartSiteApplication.java
  3. 16 0
      src/main/java/com/fdkankan/site/common/BaseController.java
  4. 2 0
      src/main/java/com/fdkankan/site/common/FilePath.java
  5. 9 0
      src/main/java/com/fdkankan/site/common/PageInfo.java
  6. 8 0
      src/main/java/com/fdkankan/site/common/RequestBase.java
  7. 1 0
      src/main/java/com/fdkankan/site/common/ResultCode.java
  8. 60 0
      src/main/java/com/fdkankan/site/config/SaTokenConfigure.java
  9. 15 0
      src/main/java/com/fdkankan/site/config/SatokenTokenge.java
  10. 2 0
      src/main/java/com/fdkankan/site/controller/AppController.java
  11. 74 0
      src/main/java/com/fdkankan/site/controller/CommentController.java
  12. 2 0
      src/main/java/com/fdkankan/site/controller/FdkkController.java
  13. 41 9
      src/main/java/com/fdkankan/site/controller/LoginController.java
  14. 107 0
      src/main/java/com/fdkankan/site/controller/MarkingController.java
  15. 53 0
      src/main/java/com/fdkankan/site/controller/MenuController.java
  16. 5 0
      src/main/java/com/fdkankan/site/controller/ProjectController.java
  17. 2 0
      src/main/java/com/fdkankan/site/controller/ProjectLogController.java
  18. 23 6
      src/main/java/com/fdkankan/site/controller/ProjectTeamController.java
  19. 104 0
      src/main/java/com/fdkankan/site/controller/RoleController.java
  20. 2 0
      src/main/java/com/fdkankan/site/controller/SceneController.java
  21. 26 7
      src/main/java/com/fdkankan/site/controller/TestController.java
  22. 18 0
      src/main/java/com/fdkankan/site/controller/UploadController.java
  23. 38 0
      src/main/java/com/fdkankan/site/entity/BaseEntity.java
  24. 44 0
      src/main/java/com/fdkankan/site/entity/Comments.java
  25. 49 0
      src/main/java/com/fdkankan/site/entity/Marking.java
  26. 30 0
      src/main/java/com/fdkankan/site/entity/MarkingUser.java
  27. 70 0
      src/main/java/com/fdkankan/site/entity/Menu.java
  28. 1 9
      src/main/java/com/fdkankan/site/entity/Project.java
  29. 1 10
      src/main/java/com/fdkankan/site/entity/ProjectBim.java
  30. 1 11
      src/main/java/com/fdkankan/site/entity/ProjectLog.java
  31. 1 10
      src/main/java/com/fdkankan/site/entity/ProjectNum.java
  32. 16 18
      src/main/java/com/fdkankan/site/entity/ProjectTeam.java
  33. 52 0
      src/main/java/com/fdkankan/site/entity/Role.java
  34. 26 0
      src/main/java/com/fdkankan/site/entity/RoleMenu.java
  35. 33 0
      src/main/java/com/fdkankan/site/entity/User.java
  36. 32 0
      src/main/java/com/fdkankan/site/entity/UserRole.java
  37. 24 0
      src/main/java/com/fdkankan/site/entity/dto/CommentDTO.java
  38. 16 0
      src/main/java/com/fdkankan/site/entity/dto/MarkingDTO.java
  39. 20 0
      src/main/java/com/fdkankan/site/entity/dto/MenuDTO.java
  40. 16 0
      src/main/java/com/fdkankan/site/entity/dto/MenuIdsDTO.java
  41. 18 0
      src/main/java/com/fdkankan/site/entity/dto/ProjectTeamAddDTO.java
  42. 18 0
      src/main/java/com/fdkankan/site/entity/dto/ProjectTeamDTO.java
  43. 47 0
      src/main/java/com/fdkankan/site/entity/dto/RoleDTO.java
  44. 25 0
      src/main/java/com/fdkankan/site/entity/dto/UserDTO.java
  45. 21 0
      src/main/java/com/fdkankan/site/entity/dto/UserRoleDTO.java
  46. 23 0
      src/main/java/com/fdkankan/site/entity/vo/HotDataVO.java
  47. 12 0
      src/main/java/com/fdkankan/site/entity/vo/MediaVO.java
  48. 14 0
      src/main/java/com/fdkankan/site/entity/vo/PointVO.java
  49. 31 0
      src/main/java/com/fdkankan/site/entity/vo/RoleSelect.java
  50. 33 0
      src/main/java/com/fdkankan/site/entity/vo/TeamUserSelect.java
  51. 48 0
      src/main/java/com/fdkankan/site/entity/vo/TreeComments.java
  52. 40 0
      src/main/java/com/fdkankan/site/entity/vo/TreeSelect.java
  53. 27 0
      src/main/java/com/fdkankan/site/enums/MarkingStatus.java
  54. 3 0
      src/main/java/com/fdkankan/site/exception/BusinessException.java
  55. 10 1
      src/main/java/com/fdkankan/site/exception/GlobalExceptionHandler.java
  56. 44 0
      src/main/java/com/fdkankan/site/handler/MyMetaObjectHandler.java
  57. 2 1
      src/main/java/com/fdkankan/site/httpClient/response/FdkkUserVo.java
  58. 0 28
      src/main/java/com/fdkankan/site/interceptor/TokenInterceptor.java
  59. 19 0
      src/main/java/com/fdkankan/site/mapper/ICommentsMapper.java
  60. 19 0
      src/main/java/com/fdkankan/site/mapper/IMarkingMapper.java
  61. 19 0
      src/main/java/com/fdkankan/site/mapper/IMarkingUserMapper.java
  62. 19 0
      src/main/java/com/fdkankan/site/mapper/IMenuMapper.java
  63. 2 1
      src/main/java/com/fdkankan/site/mapper/IProjectBimMapper.java
  64. 2 1
      src/main/java/com/fdkankan/site/mapper/IProjectLogMapper.java
  65. 2 1
      src/main/java/com/fdkankan/site/mapper/IProjectMapper.java
  66. 2 1
      src/main/java/com/fdkankan/site/mapper/IProjectNumMapper.java
  67. 2 1
      src/main/java/com/fdkankan/site/mapper/IProjectTeamMapper.java
  68. 31 0
      src/main/java/com/fdkankan/site/mapper/IRoleMapper.java
  69. 19 0
      src/main/java/com/fdkankan/site/mapper/IRoleMenuMapper.java
  70. 23 0
      src/main/java/com/fdkankan/site/mapper/IUserMapper.java
  71. 18 0
      src/main/java/com/fdkankan/site/mapper/IUserRoleMapper.java
  72. 18 0
      src/main/java/com/fdkankan/site/mapper/RoleMapper.java
  73. 9 0
      src/main/java/com/fdkankan/site/request/CommentsSearchParam.java
  74. 14 0
      src/main/java/com/fdkankan/site/request/MarkingParam.java
  75. 19 0
      src/main/java/com/fdkankan/site/request/MarkingSearchParam.java
  76. 15 0
      src/main/java/com/fdkankan/site/request/MenuParam.java
  77. 13 0
      src/main/java/com/fdkankan/site/request/RoleParam.java
  78. 18 0
      src/main/java/com/fdkankan/site/request/RoleSearchParam.java
  79. 25 0
      src/main/java/com/fdkankan/site/service/ICommentsService.java
  80. 26 0
      src/main/java/com/fdkankan/site/service/IMarkingService.java
  81. 21 0
      src/main/java/com/fdkankan/site/service/IMarkingUserService.java
  82. 42 0
      src/main/java/com/fdkankan/site/service/IMenuService.java
  83. 15 3
      src/main/java/com/fdkankan/site/service/IProjectTeamService.java
  84. 19 0
      src/main/java/com/fdkankan/site/service/IRoleMenuService.java
  85. 32 0
      src/main/java/com/fdkankan/site/service/IRoleService.java
  86. 20 0
      src/main/java/com/fdkankan/site/service/IUserRoleService.java
  87. 20 0
      src/main/java/com/fdkankan/site/service/IUserService.java
  88. 152 0
      src/main/java/com/fdkankan/site/service/impl/CommentsServiceImpl.java
  89. 66 0
      src/main/java/com/fdkankan/site/service/impl/MarkingServiceImpl.java
  90. 27 0
      src/main/java/com/fdkankan/site/service/impl/MarkingUserServiceImpl.java
  91. 168 0
      src/main/java/com/fdkankan/site/service/impl/MenuServiceImpl.java
  92. 6 7
      src/main/java/com/fdkankan/site/service/impl/ProjectLogServiceImpl.java
  93. 20 20
      src/main/java/com/fdkankan/site/service/impl/ProjectServiceImpl.java
  94. 168 42
      src/main/java/com/fdkankan/site/service/impl/ProjectTeamServiceImpl.java
  95. 24 0
      src/main/java/com/fdkankan/site/service/impl/RoleMenuServiceImpl.java
  96. 83 0
      src/main/java/com/fdkankan/site/service/impl/RoleServiceImpl.java
  97. 25 0
      src/main/java/com/fdkankan/site/service/impl/UploadService.java
  98. 28 0
      src/main/java/com/fdkankan/site/service/impl/UserRoleServiceImpl.java
  99. 64 0
      src/main/java/com/fdkankan/site/service/impl/UserServiceImpl.java
  100. 0 0
      src/main/resources/application-local.yaml

+ 28 - 0
pom.xml

@@ -14,6 +14,9 @@
         <version>2.3.12.RELEASE</version>
         <relativePath/>
     </parent>
+    <properties>
+         <shiro.version>1.5.3</shiro.version>
+    </properties>
 
     <dependencies>
 
@@ -22,6 +25,16 @@
             <artifactId>4dkankan-utils-redis</artifactId>
             <version>2.0.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-sms</artifactId>
+            <version>2.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.yulichang</groupId>
+            <artifactId>mybatis-plus-join</artifactId>
+            <version>1.4.2</version>
+        </dependency>
 
         <dependency>
             <groupId>mysql</groupId>
@@ -116,6 +129,21 @@
             <version>3.10.3</version>
         </dependency>
 
+        <!--引入shrio-->
+        <!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
+        <dependency>
+            <groupId>cn.dev33</groupId>
+            <artifactId>sa-token-spring-boot-starter</artifactId>
+            <version>1.33.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.dev33</groupId>
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
+            <version>1.33.0</version>
+        </dependency>
+
+
     </dependencies>
 
     <build>

+ 5 - 1
src/main/java/com/fdkankan/site/SmartSiteApplication.java

@@ -1,5 +1,7 @@
 package com.fdkankan.site;
 
+import cn.dev33.satoken.SaManager;
+import com.github.yulichang.injector.MPJSqlInjector;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -7,15 +9,17 @@ import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
-@SpringBootApplication
 @EnableTransactionManagement//开启事务
 @EnableScheduling
 @ComponentScan(basePackages = {"com.fdkankan.*"})
 @MapperScan("com.fdkankan.**.mapper")
+@SpringBootApplication( )
 public class SmartSiteApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SmartSiteApplication.class, args);
+        System.out.println("启动成功:Sa-Token配置如下:" + SaManager.getConfig());
+
     }
 
 }

+ 16 - 0
src/main/java/com/fdkankan/site/common/BaseController.java

@@ -1,5 +1,10 @@
 package com.fdkankan.site.common;
 
+import cn.dev33.satoken.stp.StpUtil;
+import com.fdkankan.site.entity.User;
+import com.fdkankan.site.httpClient.response.FdkkLoginVo;
+import com.fdkankan.site.httpClient.response.FdkkUserVo;
+import com.fdkankan.site.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.propertyeditors.StringTrimmerEditor;
 import org.springframework.web.bind.WebDataBinder;
@@ -18,9 +23,20 @@ public class BaseController {
     @Autowired
     protected HttpServletResponse response;
 
+    @Autowired
+    IUserService userService;
 
     protected String getToken(){
         return request.getHeader("token");
     }
 
+
+    protected Integer getUserId(){
+        User user = userService.findByUserName(String.valueOf(StpUtil.getLoginId()));
+        return user.getUserId();
+    }
+    protected User getUser(){
+        User user = userService.findByUserName(String.valueOf(StpUtil.getLoginId()));
+        return user;
+    }
 }

+ 2 - 0
src/main/java/com/fdkankan/site/common/FilePath.java

@@ -4,6 +4,8 @@ public class FilePath {
 
     public final static String OSS_FILE_PATH = "smart-site/file/";
     public final static String OSS_BIM_PATH = "bim/project_%s/%s";
+    public final static String OSS_MEDIA_FILE_PATH = "bim/project_%s/%s/%s";
+
     public final static String LOCAL_FILE_PATH = "/home/smart-site/file/";
 
 

+ 9 - 0
src/main/java/com/fdkankan/site/common/PageInfo.java

@@ -1,5 +1,6 @@
 package com.fdkankan.site.common;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -30,6 +31,14 @@ public class PageInfo<T> {
             .list(page.getRecords())
             .build();
     }
+    public static PageInfo PageInfo(IPage page){
+        return PageInfo.builder()
+                .pageNum(page.getCurrent())
+                .pageSize(page.getSize())
+                .total(page.getTotal())
+                .list(page.getRecords())
+                .build();
+    }
     public static PageInfo PageInfo(Long currentPage, Long pageSize, Long total, List<?> list){
         return PageInfo.builder()
             .pageNum(currentPage)

+ 8 - 0
src/main/java/com/fdkankan/site/common/RequestBase.java

@@ -4,6 +4,14 @@ import lombok.Data;
 
 @Data
 public class RequestBase {
+    /**
+     * 页码
+     * @mock 1
+     */
     private Integer pageNum = 1;
+    /**
+     * 每页数量
+     * @mock 10
+     */
     private Integer pageSize = 10;
 }

+ 1 - 0
src/main/java/com/fdkankan/site/common/ResultCode.java

@@ -12,6 +12,7 @@ public enum ResultCode {
     USER_NOT_LOGIN(4008,"用户未登录"),
     FD_ERROR(4009,"四维登录失败"),
     DEL_MINE(4010,"删除自己"),
+    DEL_DEF_ROLE(4011,"默认角色不允许"),
 
 
     PROJECT_CREATER_NOT_EXIST(5001,"项目创建人不存在"),

+ 60 - 0
src/main/java/com/fdkankan/site/config/SaTokenConfigure.java

@@ -0,0 +1,60 @@
+package com.fdkankan.site.config;
+
+import cn.dev33.satoken.context.SaHolder;
+import cn.dev33.satoken.filter.SaServletFilter;
+import cn.dev33.satoken.interceptor.SaInterceptor;
+import cn.dev33.satoken.router.SaHttpMethod;
+import cn.dev33.satoken.router.SaRouter;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.strategy.SaStrategy;
+import cn.dev33.satoken.util.SaFoxUtil;
+import cn.dev33.satoken.util.SaResult;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.site.common.ResultCode;
+import com.fdkankan.site.common.ResultData;
+import com.fdkankan.site.exception.BusinessException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+/**
+ * [Sa-Token 权限认证] 配置类
+ */
+@Configuration
+public class SaTokenConfigure implements WebMvcConfigurer {
+   // 注册 Sa-Token 拦截器,打开注解式鉴权功能
+   @Autowired
+   private RedisUtil redisUtil;
+   @Override
+   public void addInterceptors(InterceptorRegistry registry) {
+      // 注册 Sa-Token 拦截器,打开注解式鉴权功能
+      registry.addInterceptor(new SaInterceptor( handler -> {
+         SaRouter
+                 .match("/**")
+                 .notMatch("/fdLogin")
+                 .check( r -> {
+                    if (!redisUtil.hasKey("token#"+StpUtil.getTokenInfo().tokenValue)) {
+                       StpUtil.logout();
+                       throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+                    }
+                 } );
+      })).addPathPatterns("/**");
+   }
+
+
+
+}
+
+

+ 15 - 0
src/main/java/com/fdkankan/site/config/SatokenTokenge.java

@@ -0,0 +1,15 @@
+package com.fdkankan.site.config;
+
+import cn.dev33.satoken.strategy.SaStrategy;
+import cn.dev33.satoken.util.SaFoxUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+@Configuration
+public class SatokenTokenge {
+
+}

+ 2 - 0
src/main/java/com/fdkankan/site/controller/AppController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.site.controller;
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
 import com.fdkankan.site.common.BaseController;
 import com.fdkankan.site.common.ResultCode;
 import com.fdkankan.site.common.ResultData;
@@ -21,6 +22,7 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/app")
+@SaCheckLogin
 public class AppController {
 
     @Autowired

+ 74 - 0
src/main/java/com/fdkankan/site/controller/CommentController.java

@@ -0,0 +1,74 @@
+package com.fdkankan.site.controller;
+
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.hutool.core.collection.CollectionUtil;
+import com.fdkankan.site.common.BaseController;
+import com.fdkankan.site.common.ResultCode;
+import com.fdkankan.site.common.ResultData;
+import com.fdkankan.site.common.util.VUtils;
+import com.fdkankan.site.entity.Comments;
+import com.fdkankan.site.entity.MarkingUser;
+import com.fdkankan.site.entity.Menu;
+import com.fdkankan.site.entity.Project;
+import com.fdkankan.site.entity.dto.CommentDTO;
+import com.fdkankan.site.enums.MarkingStatus;
+import com.fdkankan.site.request.CommentsSearchParam;
+import com.fdkankan.site.request.MenuParam;
+import com.fdkankan.site.service.ICommentsService;
+import com.fdkankan.site.service.IMenuService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 评论管理
+ */
+@RestController
+@RequestMapping("/comment")
+@Slf4j
+@SaCheckLogin
+public class CommentController extends BaseController {
+
+    @Autowired
+    ICommentsService commentsService;
+
+
+    /**
+     * 获取评论树结构
+     */
+    @PostMapping("/tree/all")
+    public ResultData treeAll(@RequestBody CommentsSearchParam param){
+        List<CommentDTO> commentDTOS = commentsService.findByMarkingId(param.getMarkingId());
+        return ResultData.ok(commentsService.buildTreeSelect(commentDTOS));
+    }
+
+    /**
+     * 回复评论
+     */
+    @PostMapping("/reply")
+    public ResultData Reply(@RequestBody Comments param){
+        VUtils.isTure(param.getParentId() == null).throwMessage(ResultCode.PARAM_MISS);
+        if (Optional.ofNullable(param.getCommentId()).isPresent()){
+            log.info("不为空修改");
+            commentsService.updateById(param);
+        } else {
+            log.info("为空");
+            commentsService.save(param);
+
+        }
+       return ResultData.ok();
+    }
+
+    @PostMapping("/del")
+    public ResultData del(@RequestBody Comments param){
+        VUtils.isTure(param.getCommentId() == null).throwMessage(ResultCode.PARAM_MISS);
+        commentsService.delComments(param.getCommentId(),getUserId());
+        return ResultData.ok();
+    }
+}

+ 2 - 0
src/main/java/com/fdkankan/site/controller/FdkkController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.site.controller;
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
 import com.fdkankan.site.common.ResultCode;
 import com.fdkankan.site.common.ResultData;
 import com.fdkankan.site.entity.Project;
@@ -25,6 +26,7 @@ import java.util.List;
 @RestController
 @RequestMapping("/fdkk")
 @Slf4j
+@SaCheckLogin
 public class FdkkController {
 
     @Autowired

+ 41 - 9
src/main/java/com/fdkankan/site/controller/LoginController.java

@@ -1,9 +1,14 @@
 package com.fdkankan.site.controller;
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.dev33.satoken.stp.SaLoginModel;
+import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.site.common.BaseController;
 import com.fdkankan.site.common.ResultCode;
 import com.fdkankan.site.common.ResultData;
+import com.fdkankan.site.entity.User;
 import com.fdkankan.site.exception.BusinessException;
 import com.fdkankan.site.httpClient.client.FdKKClient;
 import com.fdkankan.site.httpClient.request.FdkkLoginRequest;
@@ -11,6 +16,7 @@ import com.fdkankan.site.httpClient.response.FdkkLoginVo;
 import com.fdkankan.site.httpClient.response.FdkkResponse;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.site.service.impl.UserServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -21,6 +27,7 @@ import javax.annotation.Resource;
 
 @RestController
 @RequestMapping
+@SaCheckLogin
 public class LoginController extends BaseController {
 
 
@@ -29,24 +36,49 @@ public class LoginController extends BaseController {
     @Autowired
     RedisUtil redisUtil;
 
+    @Autowired
+    UserServiceImpl userService;
+
     @PostMapping("/fdLogin")
-    public ResultData fdLogin(@RequestBody FdkkLoginRequest request){
+    @SaIgnore
+    public ResultData fdLogin(@RequestBody FdkkLoginRequest request) {
         try {
             FdkkResponse<FdkkLoginVo> fdkkLoginVo = fdKKClient.fdkkLogin(request);
-            if(fdkkLoginVo.getCode() == 0){
-                return ResultData.ok(fdkkLoginVo.getData());
+            if (fdkkLoginVo.getCode() == 0) {
+                SaLoginModel saLoginModel = new SaLoginModel();
+                saLoginModel
+                        .setIsLastingCookie(false)
+                        .setToken(fdkkLoginVo.getData().getToken());
+                FdkkLoginVo data = fdkkLoginVo.getData();
+                User user = userService.findByUserName(data.getUser().getUserName(),data.getUser().getId());
+                StpUtil.login(user.getUserName(), saLoginModel);
+//                StpUtil.getSession().set("user",user);
+                return ResultData.ok(data);
             }
-            return ResultData.error(fdkkLoginVo.getCode(),fdkkLoginVo.getMsg());
-        }catch (Exception e){
+            return ResultData.error(fdkkLoginVo.getCode(), fdkkLoginVo.getMsg());
+        } catch (Exception e) {
             e.printStackTrace();
         }
         throw new BusinessException(ResultCode.FD_ERROR);
     }
 
+    // 查询 Token 信息  ---- http://localhost:8081/acc/tokenInfo
+    @RequestMapping("tokenInfo")
+    @SaIgnore
+    public ResultData tokenInfo() {
+        return ResultData.ok(getUserId());
+    }
+
+    @RequestMapping("isLogin")
+    public ResultData isLogin() {
+        return ResultData.ok(StpUtil.isLogin());
+    }
+
     @PostMapping("/fdLogout")
-    public ResultData fdLogout(){
-        String fdToken = String.format(RedisKey.TOKEN_V3,getToken());
+    public ResultData fdLogout() {
+        String fdToken = String.format(RedisKey.TOKEN_V3, getToken());
         redisUtil.del(fdToken);
+        StpUtil.logout();
         return ResultData.ok();
     }
 
@@ -54,10 +86,10 @@ public class LoginController extends BaseController {
      * 四维场景列表
      */
     @PostMapping("/getUserInfo")
-    public ResultData getUserInfo(){
+    public ResultData getUserInfo() {
         try {
             return ResultData.ok(fdKKClient.getUserInfo(new JSONObject(), getToken()).getData());
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
         throw new BusinessException(ResultCode.USER_NOT_LOGIN);

+ 107 - 0
src/main/java/com/fdkankan/site/controller/MarkingController.java

@@ -0,0 +1,107 @@
+package com.fdkankan.site.controller;
+
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.hutool.core.collection.CollectionUtil;
+import com.fdkankan.site.common.BaseController;
+import com.fdkankan.site.common.ResultCode;
+import com.fdkankan.site.common.ResultData;
+import com.fdkankan.site.common.util.VUtils;
+import com.fdkankan.site.entity.Comments;
+import com.fdkankan.site.entity.MarkingUser;
+import com.fdkankan.site.entity.ProjectTeam;
+import com.fdkankan.site.enums.MarkingStatus;
+import com.fdkankan.site.exception.BusinessException;
+import com.fdkankan.site.request.MarkingParam;
+import com.fdkankan.site.request.MarkingSearchParam;
+import com.fdkankan.site.service.IMarkingService;
+import com.fdkankan.site.service.IMarkingUserService;
+import com.fdkankan.site.service.IProjectTeamService;
+import com.fdkankan.sms.SmsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Optional;
+
+/**
+ * 标注管理
+ */
+@RestController
+@RequestMapping("/marking")
+@Slf4j
+@SaCheckLogin
+public class MarkingController  extends BaseController {
+
+    @Autowired
+    IMarkingService markingService;
+
+    @Autowired
+    IMarkingUserService markingUserService;
+
+    @Autowired
+    IProjectTeamService projectTeamService;
+
+    @Autowired
+    SmsService smsService;
+
+    @Value("${phone.code.cn}")
+    private String cnCode;
+    /**
+     * 标注列表
+     */
+    @PostMapping("/list")
+    public ResultData list(@RequestBody MarkingSearchParam param){
+        return ResultData.ok(markingService.pageList(param));
+    }
+    /**
+     * 删除
+     */
+    @PostMapping("/del")
+    public ResultData del(@RequestBody MarkingParam param){
+        VUtils.isTure(param.getMarkingId() == null).throwMessage(ResultCode.PARAM_MISS);
+        markingService.delMarking(param.getMarkingId(),getToken());
+        return ResultData.ok();
+    }
+    /**
+     * 新增或修改
+     */
+    @PostMapping("/addOrUpdate")
+    public ResultData addOrUpdate(@RequestBody MarkingParam param){
+        if (Optional.ofNullable(param.getMarkingId()).isPresent()){
+            // 写不为空的逻辑
+            log.info("不为空修改");
+            ProjectTeam byUserIdAndProjectId = projectTeamService.findByUserIdAndProjectId(getUserId(), param.getProjectId());
+            param.setLastUpdateBy(byUserIdAndProjectId.getNickName());
+            markingService.updateById(param);
+
+        } else {
+            // 写为空的逻辑
+            log.info("为空");
+            param.setMarkingStatus(MarkingStatus.PENDING.getState());
+            markingService.save(param);
+        }
+        if (CollectionUtil.isNotEmpty(param.getUserIds())) {
+            markingUserService.delByMarkingId(param.getMarkingId());
+            for (Integer userId : param.getUserIds()) {
+//                ProjectTeam projectTeam = projectTeamService.findByUserIdAndProjectId(userId, param.getProjectId());
+//                if (Optional.ofNullable(projectTeam).isPresent()&&Optional.ofNullable(projectTeam.getBindAccount()).isPresent()) {
+//                    try {
+//                        smsService.sendSms(projectTeam.getBindAccount(), "", cnCode);
+//                    } catch (Exception e) {
+//                        e.printStackTrace();
+//                    }
+//                }
+
+                MarkingUser markingUser=new MarkingUser();
+                markingUser.setUserId(userId);
+                markingUser.setMarkingId(param.getMarkingId());
+                markingUserService.save(markingUser);
+            }
+        }
+        return ResultData.ok();
+    }
+}

+ 53 - 0
src/main/java/com/fdkankan/site/controller/MenuController.java

@@ -0,0 +1,53 @@
+package com.fdkankan.site.controller;
+
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import com.fdkankan.site.common.BaseController;
+import com.fdkankan.site.common.ResultData;
+import com.fdkankan.site.entity.Menu;
+import com.fdkankan.site.request.MenuParam;
+import com.fdkankan.site.service.IMenuService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 菜单管理
+ */
+@RestController
+@RequestMapping("/menu")
+@Slf4j
+@SaCheckLogin
+public class MenuController extends BaseController {
+
+    @Autowired
+    IMenuService menuService;
+
+
+    /**
+     * 菜单列表
+     * @param param 参数1的名称或描述
+     * @return 响应描述
+     */
+    @PostMapping("/list")
+    public ResultData list(@RequestBody MenuParam param){
+        return ResultData.ok(menuService.pageList(param));
+    }
+    /**
+     * 获取全部菜单树列表
+     */
+    @PostMapping("/treeselect/all")
+    public ResultData treeselectAll( ){
+        List<Menu> menus = menuService.findAllMenu();
+        return ResultData.ok(menuService.buildMenuTreeSelect(menus));
+    }
+    /**
+     * 根据用户token获取菜单树列表
+     */
+    @PostMapping("/treeselect")
+    public ResultData treeselect( ){
+        List<Menu> menus = menuService.findMenuTreeByUserId(getUserId());
+        return ResultData.ok(menuService.buildMenuTreeSelect(menus));
+    }
+}

+ 5 - 0
src/main/java/com/fdkankan/site/controller/ProjectController.java

@@ -1,6 +1,8 @@
 package com.fdkankan.site.controller;
 
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.dev33.satoken.annotation.SaIgnore;
 import com.fdkankan.site.common.BaseController;
 import com.fdkankan.site.common.ResultCode;
 import com.fdkankan.site.common.ResultData;
@@ -30,6 +32,7 @@ import org.springframework.web.bind.annotation.*;
  */
 @RestController
 @RequestMapping("/project")
+@SaCheckLogin
 public class ProjectController extends BaseController {
 
     @Autowired
@@ -42,11 +45,13 @@ public class ProjectController extends BaseController {
     IProjectBimService projectBimService;
 
     @GetMapping("/userData")
+    @SaIgnore
     public ResultData userData(){
         return ResultData.ok(projectService.getUserData(getToken()));
     }
 
     @GetMapping("/info")
+    @SaIgnore
     public ResultData info(@RequestParam(required = false) Integer projectId,
                            @RequestParam(required = false) String sceneOrder){
         return ResultData.ok(projectService.getProjectInfo(projectId,sceneOrder,getToken()));

+ 2 - 0
src/main/java/com/fdkankan/site/controller/ProjectLogController.java

@@ -1,6 +1,7 @@
 package com.fdkankan.site.controller;
 
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
 import com.fdkankan.site.common.BaseController;
 import com.fdkankan.site.common.RequestBase;
 import com.fdkankan.site.common.ResultData;
@@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/projectLog")
+@SaCheckLogin
 public class ProjectLogController extends BaseController {
 
     @Autowired

+ 23 - 6
src/main/java/com/fdkankan/site/controller/ProjectTeamController.java

@@ -1,26 +1,30 @@
 package com.fdkankan.site.controller;
 
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.dev33.satoken.annotation.SaIgnore;
 import com.fdkankan.site.common.BaseController;
 import com.fdkankan.site.common.ResultCode;
 import com.fdkankan.site.common.ResultData;
 import com.fdkankan.site.common.util.VUtils;
 import com.fdkankan.site.entity.ProjectTeam;
+import com.fdkankan.site.entity.dto.ProjectTeamAddDTO;
+import com.fdkankan.site.entity.dto.ProjectTeamDTO;
 import com.fdkankan.site.request.ProjectTeamListParam;
 import com.fdkankan.site.service.IProjectTeamService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
- * <p>
- *  前端控制器
- * </p>
- *
+ *项目成员
  * @author 
  * @since 2022-10-10
  */
 @RestController
 @RequestMapping("/projectTeam")
+@SaCheckLogin
 public class ProjectTeamController extends BaseController {
 
     @Autowired
@@ -31,15 +35,21 @@ public class ProjectTeamController extends BaseController {
         param.setToken(getToken());
         return ResultData.ok(projectTeamService.pageList(param));
     }
-
+    @PostMapping("/select")
+    public ResultData select (@RequestBody ProjectTeamListParam param){
+        param.setToken(getToken());
+        List<ProjectTeamDTO> list = projectTeamService.listAll(param);
+        return ResultData.ok(projectTeamService.buildTreeSelect(list));
+    }
     @GetMapping("/checkUserName")
+    @SaIgnore
     public ResultData checkUserName (@RequestParam(required = false) String userName){
         VUtils.isTure(!projectTeamService.checkUserName(userName)).throwMessage(ResultCode.USER_NOT_EXIST);
         return ResultData.ok();
     }
 
     @PostMapping("/addUser")
-    public ResultData addUser (@RequestBody ProjectTeam param){
+    public ResultData addUser (@RequestBody ProjectTeamAddDTO param){
         return ResultData.ok(projectTeamService.addUser(param,getToken()));
     }
 
@@ -48,10 +58,17 @@ public class ProjectTeamController extends BaseController {
         projectTeamService.deleteUser(param,getToken());
         return ResultData.ok();
     }
+    @Deprecated()
     @PostMapping("/updateRemark")
     public ResultData updateRemark (@RequestBody ProjectTeam param){
         projectTeamService.updateRemark(param);
         return ResultData.ok();
     }
+    @PostMapping("/updateUser")
+    public ResultData updateUser (@RequestBody ProjectTeamAddDTO param){
+        projectTeamService.updateUser(param);
+        return ResultData.ok();
+    }
+
 }
 

+ 104 - 0
src/main/java/com/fdkankan/site/controller/RoleController.java

@@ -0,0 +1,104 @@
+package com.fdkankan.site.controller;
+
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.hutool.core.collection.CollectionUtil;
+import com.fdkankan.site.common.BaseController;
+import com.fdkankan.site.common.ResultCode;
+import com.fdkankan.site.common.ResultData;
+import com.fdkankan.site.common.util.VUtils;
+import com.fdkankan.site.entity.Project;
+import com.fdkankan.site.entity.ProjectTeam;
+import com.fdkankan.site.entity.Role;
+import com.fdkankan.site.entity.RoleMenu;
+import com.fdkankan.site.entity.dto.ProjectTeamDTO;
+import com.fdkankan.site.entity.dto.RoleDTO;
+import com.fdkankan.site.request.ProjectTeamListParam;
+import com.fdkankan.site.request.RoleParam;
+import com.fdkankan.site.request.RoleSearchParam;
+import com.fdkankan.site.service.IMarkingUserService;
+import com.fdkankan.site.service.IProjectTeamService;
+import com.fdkankan.site.service.IRoleMenuService;
+import com.fdkankan.site.service.IRoleService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 角色管理
+ */
+@RestController
+@RequestMapping("/role")
+@Slf4j
+@SaCheckLogin
+public class RoleController extends BaseController {
+
+    @Autowired
+    IRoleService roleService;
+
+    @Autowired
+    IProjectTeamService projectTeamService;
+    @Autowired
+    IRoleMenuService roleMenuService;
+
+    /**
+     * 角色列表
+     * @param param 参数1的名称或描述
+     * @return 响应描述
+     */
+    @PostMapping("/list")
+    public ResultData list(@RequestBody RoleSearchParam param){
+        return ResultData.ok(roleService.pageList(param));
+    }
+    /**
+     * 角色列表下拉数据
+     */
+    @PostMapping("/select")
+    public ResultData select (@RequestBody RoleSearchParam param){
+        List<RoleDTO> list = roleService.listAll(param);
+        return ResultData.ok( roleService.buildSelect(list));
+    }
+    /**
+     * 新增或修改
+     */
+    @PostMapping("/addOrUpdate")
+    public ResultData addOrUpdate(@RequestBody RoleParam param){
+        VUtils.isTure(param.isDefaultRole()).throwMessage(ResultCode.DEL_DEF_ROLE);
+        if (Optional.ofNullable(param.getRoleId()).isPresent()){
+            // 写不为空的逻辑
+            log.info("不为空修改");
+            param.setDefaultRole(false);
+            roleService.updateById(param);
+        } else {
+            // 写为空的逻辑
+            log.info("为空");
+            param.setDefaultRole(false);
+            roleService.save(param);
+        }
+        if (CollectionUtil.isNotEmpty(param.getMenuIds())) {
+            roleMenuService.delByRoleId(param.getRoleId());
+            for (Integer menuId : param.getMenuIds()) {
+                RoleMenu roleMenu=new RoleMenu();
+                roleMenu.setMenuId(menuId);
+                roleMenu.setRoleId(param.getRoleId());
+                roleMenuService.save(roleMenu);
+            }
+        }
+        return ResultData.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @PostMapping("/del")
+    public ResultData del(@RequestBody RoleParam param){
+        VUtils.isTure(param.getRoleId() == null).throwMessage(ResultCode.PARAM_MISS);
+        roleService.delRole(param.getRoleId());
+        return ResultData.ok();
+    }
+}

+ 2 - 0
src/main/java/com/fdkankan/site/controller/SceneController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.site.controller;
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
 import com.fdkankan.site.common.BaseController;
 import com.fdkankan.site.common.ResultData;
 import com.fdkankan.site.request.SceneParam;
@@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping("/scene")
+@SaCheckLogin
 public class SceneController extends BaseController {
 
     @Autowired

+ 26 - 7
src/main/java/com/fdkankan/site/controller/TestController.java

@@ -1,15 +1,22 @@
 package com.fdkankan.site.controller;
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.site.common.BaseController;
 import com.fdkankan.site.common.ResultCode;
 import com.fdkankan.site.common.ResultData;
+import com.fdkankan.site.entity.ProjectTeam;
+import com.fdkankan.site.entity.User;
 import com.fdkankan.site.exception.BusinessException;
 import com.fdkankan.site.httpClient.bim.BimCallBackDTO;
 import com.fdkankan.site.httpClient.bim.BimFaceVO;
 import com.fdkankan.site.httpClient.client.BimClient;
 import com.fdkankan.site.httpClient.bim.BimUploadParam;
 import com.fdkankan.site.httpClient.client.FdKKClient;
+import com.fdkankan.site.service.IProjectTeamService;
+import com.fdkankan.site.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -17,18 +24,30 @@ import javax.annotation.Resource;
 
 @RestController
 @RequestMapping("/test")
+@SaCheckLogin
 public class TestController extends BaseController {
 
     @Resource
     FdKKClient fdKKClient;
-
-
+    @Autowired
+    IProjectTeamService projectTeaml;
+    @Autowired
+    IUserService userService;
     @PostMapping("/test")
+    @SaIgnore
     public ResultData test(){
-        String url="http://" + request.getServerName() //服务器地址
-                + ":"
-                + request.getServerPort()           //端口号
-                + request.getRequestURI();
-        return ResultData.ok(url);
+//        for (ProjectTeam projectTeam : projectTeaml.list()) {
+//            User byUserName = userService.findByUserName(projectTeam.getUserName());
+//            if (ObjectUtil.isNotNull(byUserName)){
+//                projectTeam.setUserId(byUserName.getUserId());
+//            }else {
+//                User u=new User();
+//                u.setUserName(projectTeam.getUserName());
+//                 userService.save(u);
+//                projectTeam.setUserId(u.getUserId());
+//            }
+//            projectTeaml.updateById(projectTeam);
+//        }
+        return ResultData.ok( );
     }
 }

+ 18 - 0
src/main/java/com/fdkankan/site/controller/UploadController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.site.controller;
 
+import cn.dev33.satoken.annotation.SaCheckLogin;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.site.common.BaseController;
@@ -29,12 +30,14 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.File;
+import java.io.IOException;
 import java.util.List;
 import java.util.Objects;
 
 @Slf4j
 @RestController
 @RequestMapping("/upload")
+@SaCheckLogin
 public class UploadController extends BaseController {
 
     @Autowired
@@ -62,6 +65,21 @@ public class UploadController extends BaseController {
         return ResultData.ok(queryPath + FilePath.OSS_FILE_PATH + localFile.getName() );
     }
 
+    /**
+     * @api.name 通用上传OSS
+     * @undone
+     */
+    @PostMapping("/{projectId}/{type}/file/")
+    public ResultData uploadFire(@RequestParam("file") MultipartFile file,@PathVariable Integer projectId, @PathVariable String type) throws IOException {
+        if (!file.isEmpty()) {
+            // 上传文件路径
+            File localFile = uploadService.uploadFile(file);
+            String ossKey = String.format(FilePath.OSS_MEDIA_FILE_PATH,projectId,type,localFile.getName());
+            uploadToOssUtil.uploadOss(localFile.getPath(), ossKey);
+            return ResultData.ok(queryPath+ossKey );
+        }
+        return ResultData.error(ResultCode.UPLOAD_FILE_NO_EXIST);
+    }
     @PostMapping("/bim")
     public ResultData bim(@RequestParam(required = false) MultipartFile file,
                           @RequestParam(required = false)Integer projectId,

+ 38 - 0
src/main/java/com/fdkankan/site/entity/BaseEntity.java

@@ -0,0 +1,38 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+@Data
+public class BaseEntity implements Serializable {
+    @TableField("tb_status")
+    @TableLogic(value = "0",delval = "1")
+    private Integer tbStatus;
+
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
+    private LocalDateTime createTime;
+
+    @TableField(value = "update_time",fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
+    private LocalDateTime updateTime;
+
+    /** 创建者 */
+    @TableField(value = "create_by",fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 更新者 */
+    @TableField(value = "update_by",fill = FieldFill.UPDATE)
+    private String updateBy;
+}

+ 44 - 0
src/main/java/com/fdkankan/site/entity/Comments.java

@@ -0,0 +1,44 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2023/1/3
+ */
+@Data
+@TableName("t_comments")
+public class Comments extends BaseEntity{
+    /**
+     * 评论id
+     * */
+    @TableId(value = "comment_id", type = IdType.AUTO)
+    private Integer commentId;
+    /**
+     * 标注id
+     * */
+    @TableField(value = "marking_id")
+    private Integer markingId;
+    /**
+     * 评论内容
+     * */
+    @TableField(value = "content")
+    private String content;
+    /**
+     * 评论用户id
+     * */
+    @TableField(value = "user_id")
+    private Integer userId;
+    /**
+     * 回复节点id
+     * */
+    @TableField(value = "parent_id")
+    private Integer parentId;
+}

+ 49 - 0
src/main/java/com/fdkankan/site/entity/Marking.java

@@ -0,0 +1,49 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.fdkankan.site.entity.vo.HotDataVO;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+@Data
+@TableName("t_marking")
+public class Marking extends BaseEntity{
+   @TableId(value = "marking_id", type = IdType.AUTO)
+   private Integer markingId;
+   /**
+    * json 坐标数据
+    */
+   @TableField(value = "hot_data",typeHandler = FastjsonTypeHandler.class)
+   private HotDataVO hotData;
+   /**
+    * 项目id
+    */
+   @TableField(value = "project_id")
+   private Integer projectId;
+
+   /**
+    * 1,待处理 2进行中 3未解决 4已解决
+    */
+   @TableField(value = "marking_status")
+   private Integer markingStatus;
+   /**
+    * 标注名称
+    */
+   @TableField(value = "marking_title")
+   private String markingTitle;
+   /**
+    * 最后更新者
+    */
+   @TableField(value = "last_update_by")
+   private String lastUpdateBy;
+
+}

+ 30 - 0
src/main/java/com/fdkankan/site/entity/MarkingUser.java

@@ -0,0 +1,30 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.fdkankan.site.entity.vo.HotDataVO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+@Data
+@TableName("t_marking_users")
+@NoArgsConstructor
+@AllArgsConstructor
+public class MarkingUser extends BaseEntity{
+   @TableId(value = "marking_users_id", type = IdType.AUTO)
+   private Integer markingUsersId;
+
+   @TableField(value = "marking_id")
+   private Integer markingId;
+   @TableField(value = "user_id")
+   private Integer userId;
+
+}

+ 70 - 0
src/main/java/com/fdkankan/site/entity/Menu.java

@@ -0,0 +1,70 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 菜单权限表 sys_menu
+ *
+ * @author fdkk
+ */
+@Data
+@TableName("t_menu")
+public class Menu extends BaseEntity
+{
+
+    /**
+     * 项目表id
+     */
+    @TableId(value = "menu_id", type = IdType.AUTO)
+    private Integer menuId;
+
+    /** 菜单名称 */
+    @TableField("menu_name")
+    private String menuName;
+
+    /** 路由key */
+    @TableField("path")
+    private String path;
+
+    /** 父菜单ID */
+    @TableField("parent_id")
+    private Integer parentId;
+
+    /** 显示顺序 */
+    @TableField("order_num")
+    private String orderNum;
+
+
+    /** 类型(M目录 C菜单 F按钮) */
+    @TableField("menu_type")
+    private String menuType;
+
+
+    /** 显示状态(0显示 1隐藏) */
+    @TableField("visible")
+    private String visible;
+
+    /** 菜单状态(0显示 1隐藏) */
+    @TableField("status")
+    private String status;
+
+    /** 权限字符串 */
+    @TableField("perms")
+    private String perms;
+
+
+    /** 子菜单 */
+    @TableField(exist = false)
+    private List<Menu> children = new ArrayList<>();
+}

+ 1 - 9
src/main/java/com/fdkankan/site/entity/Project.java

@@ -21,7 +21,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_project")
-public class Project implements Serializable {
+public class Project extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
@@ -60,15 +60,7 @@ public class Project implements Serializable {
     @TableField("project_status")
     private Integer projectStatus;
 
-    @TableField("tb_status")
-    @TableLogic
-    private Integer tbStatus;
 
-    @TableField("create_time")
-    private String createTime;
-
-    @TableField("update_time")
-    private String updateTime;
 
 
 }

+ 1 - 10
src/main/java/com/fdkankan/site/entity/ProjectBim.java

@@ -23,7 +23,7 @@ import lombok.ToString;
 @Setter
 @ToString
 @TableName("t_project_bim")
-public class ProjectBim implements Serializable {
+public class ProjectBim  extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
@@ -73,15 +73,6 @@ public class ProjectBim implements Serializable {
     private String fileName;
 
 
-    @TableField("tb_status")
-    @TableLogic
-    private Integer tbStatus;
-
-    @TableField("create_time")
-    private String createTime;
-
-    @TableField("update_time")
-    private String updateTime;
 
     @TableField("user_name")
     private String userName;

+ 1 - 11
src/main/java/com/fdkankan/site/entity/ProjectLog.java

@@ -18,7 +18,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_project_log")
-public class ProjectLog implements Serializable {
+public class ProjectLog  extends BaseEntity{
 
     private static final long serialVersionUID = 1L;
 
@@ -43,15 +43,5 @@ public class ProjectLog implements Serializable {
     @TableField("num")
     private String num;
 
-    @TableField("tb_status")
-    @TableLogic
-    private Integer tbStatus;
-
-    @TableField("create_time")
-    private String createTime;
-
-    @TableField("update_time")
-    private String updateTime;
-
 
 }

+ 1 - 10
src/main/java/com/fdkankan/site/entity/ProjectNum.java

@@ -22,7 +22,7 @@ import org.apache.commons.lang3.StringUtils;
 @Getter
 @Setter
 @TableName("t_project_num")
-public class ProjectNum implements Serializable {
+public class ProjectNum   extends BaseEntity{
 
     private static final long serialVersionUID = 1L;
 
@@ -41,15 +41,6 @@ public class ProjectNum implements Serializable {
     @TableField("type")
     private Integer type;
 
-    @TableField("tb_status")
-    @TableLogic
-    private Integer tbStatus;
-
-    @TableField("create_time")
-    private String createTime;
-
-    @TableField("update_time")
-    private String updateTime;
 
     /**
      * 0,锁定,不可继续拍摄,可参照拍摄 1,未锁定,可继续拍摄,不可参照拍摄

+ 16 - 18
src/main/java/com/fdkankan/site/entity/ProjectTeam.java

@@ -21,7 +21,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_project_team")
-public class ProjectTeam implements Serializable {
+public class ProjectTeam  extends BaseEntity{
 
     private static final long serialVersionUID = 1L;
 
@@ -32,32 +32,30 @@ public class ProjectTeam implements Serializable {
     private Integer projectId;
 
     /**
-     * 账号
+     * 是否创建者,0否,1是
      */
-    @TableField("user_name")
-    private String userName;
+    @TableField("is_creater")
+    private Integer isCreater;
 
     /**
+     * 绑定账号
+     */
+    @TableField("bind_account")
+    private String bindAccount;
+
+    @TableField("user_id")
+    private Integer userId;
+    /**
      * 备注
      */
     @TableField("remark")
     private String remark;
 
     /**
-     * 是否创建者,0否,1是
+     * 用户名称
      */
-    @TableField("is_creater")
-    private Integer isCreater;
-
-    @TableField("tb_status")
-    @TableLogic
-    private Integer tbStatus;
-
-    @TableField("create_time")
-    private String createTime;
-
-    @TableField("update_time")
-    private String updateTime;
-
+    @TableField("nick_name")
+    private String nickName;
 
+//    private String userName;
 }

+ 52 - 0
src/main/java/com/fdkankan/site/entity/Role.java

@@ -0,0 +1,52 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+/**
+ * 角色表 sys_role
+ *
+ * @author fdkk
+ */
+@Data
+@TableName("t_role")
+public class Role extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 角色ID */
+    @TableId(value="role_id", type= IdType.AUTO)
+    private Integer roleId;
+
+    /**
+     * 项目id
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+
+    /** 角色名称 */
+    @TableField(value="role_name")
+    private String roleName;
+
+    /** 角色权限 */
+    @TableField(value="role_key")
+    private String roleKey;
+
+
+    /** 角色状态(0正常 1停用) */
+    @TableField(value="status")
+    private int status;
+
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+    /**
+     * 是否默认
+     */
+    @TableField("default_role")
+    private boolean defaultRole;
+}

+ 26 - 0
src/main/java/com/fdkankan/site/entity/RoleMenu.java

@@ -0,0 +1,26 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 角色和菜单关联 sys_role_menu
+ *
+ * @author fdkk
+ */
+@TableName("t_role_menu")
+@Data
+public class RoleMenu
+{
+    /** 角色ID */
+    @TableField(value = "role_id")
+    private Integer roleId;
+
+    /** 菜单ID */
+    @TableField(value = "menu_id")
+    private Integer menuId;
+
+}

+ 33 - 0
src/main/java/com/fdkankan/site/entity/User.java

@@ -0,0 +1,33 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+@Data
+@TableName("t_users")
+public class User extends BaseEntity{
+   @TableId(value = "user_id", type = IdType.AUTO)
+   private Integer userId;
+
+   /**
+    * 账号
+    */
+   @TableField("user_name")
+   private String userName;
+
+   @TableField("fdkk_id")
+   private Integer FdkkId;
+//   /**
+//    * 部门ID
+//    */
+//   private Long deptId;
+
+
+}

+ 32 - 0
src/main/java/com/fdkankan/site/entity/UserRole.java

@@ -0,0 +1,32 @@
+package com.fdkankan.site.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 用户和角色关联 t_user_role
+ *
+ * @author xiewj
+ * @date 2023年1月3日12:07:58
+ */
+@TableName("t_user_role")
+@Data
+public class UserRole
+{
+    /** 用户ID */
+    @TableField("user_id")
+    private Integer userId;
+
+    /** 角色ID */
+    @TableField("role_id")
+    private Integer roleId;
+
+    /**
+     * 项目id
+     */
+    @TableField(value = "project_id")
+    private Integer projectId;
+}

+ 24 - 0
src/main/java/com/fdkankan/site/entity/dto/CommentDTO.java

@@ -0,0 +1,24 @@
+package com.fdkankan.site.entity.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fdkankan.site.entity.Comments;
+import com.fdkankan.site.entity.Marking;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class CommentDTO extends Comments {
+   private String userName;
+
+
+   /** 子评论*/
+   @TableField(exist = false)
+   private List<CommentDTO> children = new ArrayList<>();
+
+}

+ 16 - 0
src/main/java/com/fdkankan/site/entity/dto/MarkingDTO.java

@@ -0,0 +1,16 @@
+package com.fdkankan.site.entity.dto;
+
+import com.fdkankan.site.entity.Marking;
+import com.fdkankan.site.entity.User;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class MarkingDTO extends Marking {
+   private List<UserDTO> users;
+}

+ 20 - 0
src/main/java/com/fdkankan/site/entity/dto/MenuDTO.java

@@ -0,0 +1,20 @@
+package com.fdkankan.site.entity.dto;
+
+import com.fdkankan.site.entity.Menu;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class MenuDTO extends Menu {
+
+   /** 父菜单名称 */
+   private String parentName;
+
+
+}

+ 16 - 0
src/main/java/com/fdkankan/site/entity/dto/MenuIdsDTO.java

@@ -0,0 +1,16 @@
+package com.fdkankan.site.entity.dto;
+
+import com.fdkankan.site.entity.Menu;
+import lombok.Data;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class MenuIdsDTO  {
+
+  private Integer id;
+
+
+}

+ 18 - 0
src/main/java/com/fdkankan/site/entity/dto/ProjectTeamAddDTO.java

@@ -0,0 +1,18 @@
+package com.fdkankan.site.entity.dto;
+
+import com.fdkankan.site.entity.ProjectTeam;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class ProjectTeamAddDTO extends ProjectTeam {
+   private String userName;
+
+
+   private List<Integer> roles;
+}

+ 18 - 0
src/main/java/com/fdkankan/site/entity/dto/ProjectTeamDTO.java

@@ -0,0 +1,18 @@
+package com.fdkankan.site.entity.dto;
+
+import com.fdkankan.site.entity.ProjectTeam;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class ProjectTeamDTO extends ProjectTeam {
+   private String userName;
+
+
+   private List<UserRoleDTO> roles;
+}

+ 47 - 0
src/main/java/com/fdkankan/site/entity/dto/RoleDTO.java

@@ -0,0 +1,47 @@
+package com.fdkankan.site.entity.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fdkankan.site.entity.ProjectTeam;
+import com.fdkankan.site.entity.Role;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class RoleDTO     {
+
+   /** 角色ID */
+   private Integer roleId;
+   /** 项目id */
+   private Integer projectId;
+   /** 角色名称 */
+   private String roleName;
+
+   /**
+    * 备注
+    */
+   private String remark;
+   /**
+    * 是否默认
+    */
+   private boolean defaultRole;
+   /**
+    * 项目名称
+    */
+   private String projectName;
+   /**
+    * 创建时间
+    */
+   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
+   private LocalDateTime createTime;
+
+   private List<Integer> menuIds;
+}

+ 25 - 0
src/main/java/com/fdkankan/site/entity/dto/UserDTO.java

@@ -0,0 +1,25 @@
+package com.fdkankan.site.entity.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fdkankan.site.entity.Marking;
+import com.fdkankan.site.entity.User;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class UserDTO  {
+   private Integer userId;
+
+   /**
+    * 账号
+    */
+   private String nickName;
+
+}

+ 21 - 0
src/main/java/com/fdkankan/site/entity/dto/UserRoleDTO.java

@@ -0,0 +1,21 @@
+package com.fdkankan.site.entity.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/21
+ */
+@Data
+public class UserRoleDTO {
+
+   /** 角色ID */
+   private Integer roleId;
+
+   /** 角色名称 */
+   private String roleName;
+}

+ 23 - 0
src/main/java/com/fdkankan/site/entity/vo/HotDataVO.java

@@ -0,0 +1,23 @@
+package com.fdkankan.site.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+@Data
+public class HotDataVO {
+    private String panoId;
+    private String icon;
+    private Double x;
+    private Double y;
+    private PointVO position;
+    private Object media;
+    private String type;
+//    private String title;
+    private Double[] visiblePanos;
+    private String content;
+    private String sid;
+    private Integer isLose;
+}

+ 12 - 0
src/main/java/com/fdkankan/site/entity/vo/MediaVO.java

@@ -0,0 +1,12 @@
+package com.fdkankan.site.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+@Data
+public class MediaVO {
+
+}

+ 14 - 0
src/main/java/com/fdkankan/site/entity/vo/PointVO.java

@@ -0,0 +1,14 @@
+package com.fdkankan.site.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @author Xiewj
+ * @date 2022/12/19
+ */
+@Data
+public class PointVO {
+    private Double x;
+    private Double y;
+    private Double z;
+}

+ 31 - 0
src/main/java/com/fdkankan/site/entity/vo/RoleSelect.java

@@ -0,0 +1,31 @@
+package com.fdkankan.site.entity.vo;
+
+import com.fdkankan.site.entity.dto.ProjectTeamDTO;
+import com.fdkankan.site.entity.dto.RoleDTO;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Treeselect树结构实体类
+ *
+ * @author fdkk
+ */
+@Data
+public class RoleSelect implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+
+    /** 节点名称 */
+    private String roleName;
+    private Integer RoleId;
+
+
+
+    public RoleSelect(RoleDTO role)
+    {
+        this.roleName = role.getRoleName();
+        this.RoleId = role.getRoleId();
+    }
+}

+ 33 - 0
src/main/java/com/fdkankan/site/entity/vo/TeamUserSelect.java

@@ -0,0 +1,33 @@
+package com.fdkankan.site.entity.vo;
+
+import com.fdkankan.site.entity.dto.ProjectTeamDTO;
+import com.fdkankan.site.entity.dto.RoleDTO;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Treeselect树结构实体类
+ *
+ * @author fdkk
+ */
+@Data
+public class TeamUserSelect implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+
+    /** 节点名称 */
+    private String userName;
+    private String nickName;
+    private Integer userId;
+
+
+
+    public TeamUserSelect(ProjectTeamDTO projectTeamDTO)
+    {
+        this.userName = projectTeamDTO.getUserName();
+        this.userId = projectTeamDTO.getUserId();
+        this.nickName = projectTeamDTO.getNickName();
+    }
+}

+ 48 - 0
src/main/java/com/fdkankan/site/entity/vo/TreeComments.java

@@ -0,0 +1,48 @@
+package com.fdkankan.site.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fdkankan.site.entity.dto.CommentDTO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Treeselect树结构实体类
+ *
+ * @author fdkk
+ */
+@Data
+public class TreeComments implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 节点ID */
+    private Integer id;
+
+    /** 节点名称 */
+    private String userName;
+    private String content;
+    private Integer userId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
+    private LocalDateTime createTime;
+    /** 子节点 */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<TreeComments> children;
+
+
+    public TreeComments(CommentDTO commentDTO)
+    {
+        this.id = commentDTO.getCommentId();
+        this.userName = commentDTO.getUserName();
+        this.userId = commentDTO.getUserId();
+        this.createTime = commentDTO.getCreateTime();
+        this.content = commentDTO.getContent();
+        this.children = commentDTO.getChildren().stream().map(TreeComments::new).collect(Collectors.toList());
+    }
+
+}

+ 40 - 0
src/main/java/com/fdkankan/site/entity/vo/TreeSelect.java

@@ -0,0 +1,40 @@
+package com.fdkankan.site.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fdkankan.site.entity.Menu;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Treeselect树结构实体类
+ *
+ * @author fdkk
+ */
+@Data
+public class TreeSelect implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 节点ID */
+    private Integer id;
+
+    /** 节点名称 */
+    private String label;
+    private String path;
+    /** 子节点 */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<TreeSelect> children;
+
+
+    public TreeSelect(Menu menu)
+    {
+        this.id = menu.getMenuId();
+        this.label = menu.getMenuName();
+        this.path = menu.getPath();
+        this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
+}

+ 27 - 0
src/main/java/com/fdkankan/site/enums/MarkingStatus.java

@@ -0,0 +1,27 @@
+package com.fdkankan.site.enums;
+
+/**
+ * @author Xiewj
+ * @date 2021/11/30
+ */
+public  enum MarkingStatus {
+    //定义枚举的值
+    PENDING(1,"待处理"),PROGRESS(2,"进行中"),NOT_RESOLVED(3,"未解决"),REESOLVED(4, "已解决");;
+
+    private int state;
+    private String info;
+
+    //构造方法(枚举的构造方法只允许private类型)
+    private MarkingStatus(int state, String info){
+        this.state = state;
+        this.info = info;
+    }
+
+    public int getState(){
+        return state;
+    }
+
+    public String getInfo(){
+        return info;
+    }
+}

+ 3 - 0
src/main/java/com/fdkankan/site/exception/BusinessException.java

@@ -19,4 +19,7 @@ public class BusinessException extends RuntimeException {
         this.code = errorCode.code;
         this.message = errorCode.msg;
     }
+    public BusinessException(String msg) {
+        this.message = msg;
+    }
 }

+ 10 - 1
src/main/java/com/fdkankan/site/exception/GlobalExceptionHandler.java

@@ -1,5 +1,8 @@
 package com.fdkankan.site.exception;
 
+import cn.dev33.satoken.exception.NotPermissionException;
+import cn.dev33.satoken.exception.SaTokenException;
+import cn.hutool.core.util.NumberUtil;
 import com.dtflys.forest.exceptions.ForestRuntimeException;
 import com.fdkankan.site.common.ResultCode;
 import com.fdkankan.site.common.ResultData;
@@ -24,7 +27,13 @@ public class GlobalExceptionHandler {
         log.error("服务错误:", e);
         return ResultData.error( 500, "系统错误");
     }
-
+    @ExceptionHandler(SaTokenException.class)
+    public ResultData handlerSaTokenException(SaTokenException e) {
+        if( NumberUtil.equals(e.getCode() , 11012)|| NumberUtil.equals(e.getCode() , 11011)) {
+            return ResultData.error(ResultCode.USER_NOT_LOGIN);
+        }
+        return ResultData.error(e.getCode(),e.getMessage());
+    }
     /**
      * 处理业务异常
      */

+ 44 - 0
src/main/java/com/fdkankan/site/handler/MyMetaObjectHandler.java

@@ -0,0 +1,44 @@
+package com.fdkankan.site.handler;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.amazonaws.services.dynamodbv2.xspec.S;
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * @description: 处理createTime,updateTime字段的插入和更新
+ * @author: Xiewj
+ * @date: 2021-08-16 15:32:55
+ **/
+@Slf4j
+@Component
+public class MyMetaObjectHandler implements MetaObjectHandler {
+
+    @Override
+    public void insertFill(MetaObject metaObject) {
+        // 起始版本 3.3.3(推荐)
+        boolean createByTimeSetter = metaObject.hasSetter("createBy");
+
+        if (ObjectUtil.isNotEmpty(StpUtil.getLoginId())&&createByTimeSetter){
+            this.setFieldValByName( "createBy", String.valueOf(StpUtil.getLoginId()),metaObject); // 起始版本 3.3.3(推荐)
+        }
+        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
+    }
+
+    @Override
+    public void updateFill(MetaObject metaObject) {
+        // 起始版本 3.3.3(推荐)
+        boolean updateByTimeSetter = metaObject.hasSetter("updateBy");
+        if (ObjectUtil.isNotEmpty(StpUtil.getLoginId())&&updateByTimeSetter){
+            this.setFieldValByName( "updateBy", String.valueOf(StpUtil.getLoginId()),metaObject); // 起始版本 3.3.3(推荐)
+        }
+        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
+    }
+}

+ 2 - 1
src/main/java/com/fdkankan/site/httpClient/response/FdkkUserVo.java

@@ -4,7 +4,8 @@ import lombok.Data;
 
 @Data
 public class FdkkUserVo {
-    private Long id ;
+    private Integer id ;
+    private Integer fdkkId ;
     private String userName;                    //用户名
     private String head;                        //头像
     private String nickName;                    //昵称

+ 0 - 28
src/main/java/com/fdkankan/site/interceptor/TokenInterceptor.java

@@ -25,34 +25,6 @@ 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( request.getMethod().equals("GET")){
-			if(StringUtils.isBlank(token)){
-				return true;
-			}
-			if(StringUtils.isNotBlank(request.getParameter("sceneOrder"))){	//编辑器展示也使用
-				return true;
-			}
-		}
-		if(StringUtils.isEmpty(token)){
-			this.needLogin(request,response);
-			return false;
-		}
-		try {
-			String fdToken = String.format(RedisKey.TOKEN_V3,token);
-			if( redisUtil.hasKey(fdToken)){
-				redisUtil.expire(fdToken,6 * 60 * 60);
-				return true;
-			}
-		}catch (Exception e){
-			e.printStackTrace();
-		}
-		this.needLogin(request,response);
-		return false;
-	}
 
 	private void needLogin(HttpServletRequest request, HttpServletResponse response) {
 		try {

+ 19 - 0
src/main/java/com/fdkankan/site/mapper/ICommentsMapper.java

@@ -0,0 +1,19 @@
+package com.fdkankan.site.mapper;
+
+import com.fdkankan.site.entity.Comments;
+import com.fdkankan.site.entity.Menu;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:43:22
+ */
+@Mapper
+public interface ICommentsMapper extends MPJBaseMapper<Comments> {
+
+}

+ 19 - 0
src/main/java/com/fdkankan/site/mapper/IMarkingMapper.java

@@ -0,0 +1,19 @@
+package com.fdkankan.site.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.site.entity.Marking;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:43:22
+ */
+@Mapper
+public interface IMarkingMapper extends MPJBaseMapper<Marking> {
+
+}

+ 19 - 0
src/main/java/com/fdkankan/site/mapper/IMarkingUserMapper.java

@@ -0,0 +1,19 @@
+package com.fdkankan.site.mapper;
+
+import com.fdkankan.site.entity.Marking;
+import com.fdkankan.site.entity.MarkingUser;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since  2023年1月3日10:04:53
+ */
+@Mapper
+public interface IMarkingUserMapper extends MPJBaseMapper<MarkingUser> {
+
+}

+ 19 - 0
src/main/java/com/fdkankan/site/mapper/IMenuMapper.java

@@ -0,0 +1,19 @@
+package com.fdkankan.site.mapper;
+
+import com.fdkankan.site.entity.Menu;
+import com.fdkankan.site.entity.Role;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:43:22
+ */
+@Mapper
+public interface IMenuMapper extends MPJBaseMapper<Menu> {
+
+}

+ 2 - 1
src/main/java/com/fdkankan/site/mapper/IProjectBimMapper.java

@@ -2,6 +2,7 @@ package com.fdkankan.site.mapper;
 
 import com.fdkankan.site.entity.ProjectBim;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -13,6 +14,6 @@ import org.apache.ibatis.annotations.Mapper;
  * @since 2022-10-10
  */
 @Mapper
-public interface IProjectBimMapper extends BaseMapper<ProjectBim> {
+public interface IProjectBimMapper extends MPJBaseMapper<ProjectBim> {
 
 }

+ 2 - 1
src/main/java/com/fdkankan/site/mapper/IProjectLogMapper.java

@@ -2,6 +2,7 @@ package com.fdkankan.site.mapper;
 
 import com.fdkankan.site.entity.ProjectLog;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -13,6 +14,6 @@ import org.apache.ibatis.annotations.Mapper;
  * @since 2022-10-10
  */
 @Mapper
-public interface IProjectLogMapper extends BaseMapper<ProjectLog> {
+public interface IProjectLogMapper extends MPJBaseMapper<ProjectLog> {
 
 }

+ 2 - 1
src/main/java/com/fdkankan/site/mapper/IProjectMapper.java

@@ -2,6 +2,7 @@ package com.fdkankan.site.mapper;
 
 import com.fdkankan.site.entity.Project;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -17,7 +18,7 @@ import java.util.Set;
  * @since 2022-10-10
  */
 @Mapper
-public interface IProjectMapper extends BaseMapper<Project> {
+public interface IProjectMapper extends MPJBaseMapper<Project> {
 
     List<Project> getAndDelByIds(@Param("projectIds") Set<Integer> projectIds);
 }

+ 2 - 1
src/main/java/com/fdkankan/site/mapper/IProjectNumMapper.java

@@ -2,6 +2,7 @@ package com.fdkankan.site.mapper;
 
 import com.fdkankan.site.entity.ProjectNum;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -13,6 +14,6 @@ import org.apache.ibatis.annotations.Mapper;
  * @since 2022-10-10
  */
 @Mapper
-public interface IProjectNumMapper extends BaseMapper<ProjectNum> {
+public interface IProjectNumMapper extends MPJBaseMapper<ProjectNum> {
 
 }

+ 2 - 1
src/main/java/com/fdkankan/site/mapper/IProjectTeamMapper.java

@@ -2,6 +2,7 @@ package com.fdkankan.site.mapper;
 
 import com.fdkankan.site.entity.ProjectTeam;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -13,6 +14,6 @@ import org.apache.ibatis.annotations.Mapper;
  * @since 2022-10-10
  */
 @Mapper
-public interface IProjectTeamMapper extends BaseMapper<ProjectTeam> {
+public interface IProjectTeamMapper extends MPJBaseMapper<ProjectTeam> {
 
 }

+ 31 - 0
src/main/java/com/fdkankan/site/mapper/IRoleMapper.java

@@ -0,0 +1,31 @@
+package com.fdkankan.site.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fdkankan.site.entity.Marking;
+import com.fdkankan.site.entity.Role;
+import com.fdkankan.site.entity.dto.RoleDTO;
+import com.fdkankan.site.request.RoleSearchParam;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.github.yulichang.interfaces.MPJBaseJoin;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:43:22
+ */
+@Mapper
+public interface IRoleMapper extends MPJBaseMapper<Role> {
+
+    IPage<RoleDTO> pageList(IPage<RoleDTO> page, @Param("param")RoleSearchParam param);
+
+
+    List<RoleDTO> list(@Param("param")RoleSearchParam param);
+
+}

+ 19 - 0
src/main/java/com/fdkankan/site/mapper/IRoleMenuMapper.java

@@ -0,0 +1,19 @@
+package com.fdkankan.site.mapper;
+
+import com.fdkankan.site.entity.RoleMenu;
+import com.fdkankan.site.entity.UserRole;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:43:22
+ */
+@Mapper
+public interface IRoleMenuMapper extends MPJBaseMapper<RoleMenu> {
+
+}

+ 23 - 0
src/main/java/com/fdkankan/site/mapper/IUserMapper.java

@@ -0,0 +1,23 @@
+package com.fdkankan.site.mapper;
+
+import com.fdkankan.site.entity.Project;
+import com.fdkankan.site.entity.User;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-10-10
+ */
+@Mapper
+public interface IUserMapper extends MPJBaseMapper<User> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/site/mapper/IUserRoleMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.site.mapper;
+
+import com.fdkankan.site.entity.UserRole;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:43:22
+ */
+@Mapper
+public interface IUserRoleMapper extends MPJBaseMapper<UserRole> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/site/mapper/RoleMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.site.mapper;
+
+import com.fdkankan.site.entity.Role;
+import com.github.yulichang.base.MPJBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:43:22
+ */
+@Mapper
+public interface RoleMapper extends MPJBaseMapper<Role> {
+
+}

+ 9 - 0
src/main/java/com/fdkankan/site/request/CommentsSearchParam.java

@@ -0,0 +1,9 @@
+package com.fdkankan.site.request;
+
+import com.fdkankan.site.common.RequestBase;
+import lombok.Data;
+
+@Data
+public class CommentsSearchParam   {
+    private Integer markingId;
+}

+ 14 - 0
src/main/java/com/fdkankan/site/request/MarkingParam.java

@@ -0,0 +1,14 @@
+package com.fdkankan.site.request;
+
+import com.fdkankan.site.entity.Marking;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MarkingParam extends Marking {
+        /**
+         * 用户id集合
+         */
+        private List<Integer> userIds;
+}

+ 19 - 0
src/main/java/com/fdkankan/site/request/MarkingSearchParam.java

@@ -0,0 +1,19 @@
+package com.fdkankan.site.request;
+
+import com.fdkankan.site.common.RequestBase;
+import lombok.Data;
+
+@Data
+public class MarkingSearchParam extends RequestBase {
+    /**
+     *项目id
+     */
+    private Integer projectId;
+    /**
+     * 1,待处理 2进行中 3未解决 4已解决
+     */
+    private Integer markingStatus;
+
+    private String markingTitle;
+
+}

+ 15 - 0
src/main/java/com/fdkankan/site/request/MenuParam.java

@@ -0,0 +1,15 @@
+package com.fdkankan.site.request;
+
+import com.fdkankan.site.common.RequestBase;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MenuParam extends RequestBase {
+    /**
+     *项目id
+     */
+    private boolean projectId;
+
+}

+ 13 - 0
src/main/java/com/fdkankan/site/request/RoleParam.java

@@ -0,0 +1,13 @@
+package com.fdkankan.site.request;
+
+import com.fdkankan.site.common.RequestBase;
+import com.fdkankan.site.entity.Role;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RoleParam extends Role {
+    private List<Integer> menuIds;
+
+}

+ 18 - 0
src/main/java/com/fdkankan/site/request/RoleSearchParam.java

@@ -0,0 +1,18 @@
+package com.fdkankan.site.request;
+
+import com.fdkankan.site.common.RequestBase;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RoleSearchParam extends RequestBase {
+    /**
+     *项目id
+     */
+    private Integer projectId;
+
+    private String roleName;
+
+
+}

+ 25 - 0
src/main/java/com/fdkankan/site/service/ICommentsService.java

@@ -0,0 +1,25 @@
+package com.fdkankan.site.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.Comments;
+import com.fdkankan.site.entity.vo.TreeComments;
+import com.fdkankan.site.entity.dto.CommentDTO;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since  2023年1月3日10:03:56
+ */
+public interface ICommentsService extends IService<Comments> {
+
+  List<CommentDTO> findByMarkingId(Integer markingId);
+
+  List<TreeComments> buildTreeSelect(List<CommentDTO> commentDTOS);
+
+  void delComments(Integer commentId, Integer userId);
+}

+ 26 - 0
src/main/java/com/fdkankan/site/service/IMarkingService.java

@@ -0,0 +1,26 @@
+package com.fdkankan.site.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.Marking;
+import com.fdkankan.site.request.MarkingSearchParam;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:44:17
+ */
+public interface IMarkingService extends IService<Marking> {
+
+
+    Object pageList(MarkingSearchParam param);
+
+    void delMarking(Integer markingId,String token);
+
+    List<Marking> findByProjectId(Integer projectId);
+
+}

+ 21 - 0
src/main/java/com/fdkankan/site/service/IMarkingUserService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.site.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.Marking;
+import com.fdkankan.site.entity.MarkingUser;
+import com.fdkankan.site.request.MarkingSearchParam;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since  2023年1月3日10:03:56
+ */
+public interface IMarkingUserService extends IService<MarkingUser> {
+
+
+    void delByMarkingId(Integer markingId);
+    void delByUserIdAndMarkingId(Integer userId,Integer markingId);
+}

+ 42 - 0
src/main/java/com/fdkankan/site/service/IMenuService.java

@@ -0,0 +1,42 @@
+package com.fdkankan.site.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.Menu;
+import com.fdkankan.site.entity.vo.TreeSelect;
+import com.fdkankan.site.request.MenuParam;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since  2023年1月3日10:03:56
+ */
+public interface IMenuService extends IService<Menu> {
+
+    Object pageList(MenuParam param);
+
+
+    /**
+     * 根据用户ID查询菜单树信息
+     *
+     * @param userId 用户ID
+     * @return 菜单列表
+     */
+    List<Menu> findMenuTreeByUserId(Integer userId);
+
+    /**
+     * 根据用户ID查询菜单树信息
+     *
+     * @return 菜单列表
+     */
+    List<Menu> findAllMenu();
+
+    List<TreeSelect> buildMenuTreeSelect(List<Menu> menus);
+
+    List<Menu> findByRoleId(Integer roleId);
+
+}

+ 15 - 3
src/main/java/com/fdkankan/site/service/IProjectTeamService.java

@@ -2,6 +2,9 @@ package com.fdkankan.site.service;
 
 import com.fdkankan.site.entity.ProjectTeam;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.vo.TeamUserSelect;
+import com.fdkankan.site.entity.dto.ProjectTeamAddDTO;
+import com.fdkankan.site.entity.dto.ProjectTeamDTO;
 import com.fdkankan.site.request.ProjectTeamListParam;
 
 import java.util.HashMap;
@@ -22,15 +25,18 @@ public interface IProjectTeamService extends IService<ProjectTeam> {
      * 查询用户项目
      * @param userName 四维看看账号
      */
-    List<ProjectTeam> getListByUserName(String userName);
+    List<ProjectTeam> getListByUserId(Integer userId);
+
+    ProjectTeam findByUserIdAndProjectId(Integer userId,Integer projectId);
+    List<ProjectTeam> getListByUserIdAndProjectId(Integer userId,Integer projectId);
 
     void addProject(Integer projectId, String token);
 
     Object pageList(ProjectTeamListParam param);
 
-    Object addUser(ProjectTeam param, String token);
+    Object addUser(ProjectTeamAddDTO param, String token);
 
-    ProjectTeam getProjectCreater(Integer projectId);
+    ProjectTeamDTO getProjectCreater(Integer projectId);
 
     HashMap<Integer, String> getProjectCreaterMap(Set<Integer> projectIds);
 
@@ -43,4 +49,10 @@ public interface IProjectTeamService extends IService<ProjectTeam> {
     Set<Integer> getProjectIdByCreater(String projectCreater);
 
     void delByProjectId(Integer projectId);
+
+    List<ProjectTeamDTO> listAll(ProjectTeamListParam param);
+
+    List<TeamUserSelect> buildTreeSelect(List<ProjectTeamDTO> projectTeamDTOS);
+
+    void updateUser(ProjectTeamAddDTO param);
 }

+ 19 - 0
src/main/java/com/fdkankan/site/service/IRoleMenuService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.site.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.RoleMenu;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since  2023年1月3日12:12:39
+ */
+public interface IRoleMenuService extends IService<RoleMenu> {
+
+
+    void delByRoleId(Integer roleId);
+
+}

+ 32 - 0
src/main/java/com/fdkankan/site/service/IRoleService.java

@@ -0,0 +1,32 @@
+package com.fdkankan.site.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.Role;
+import com.fdkankan.site.entity.vo.RoleSelect;
+import com.fdkankan.site.entity.dto.RoleDTO;
+import com.fdkankan.site.request.RoleSearchParam;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author
+ * @since  2023年1月3日12:12:39
+ */
+public interface IRoleService extends IService<Role> {
+
+    Object pageList(RoleSearchParam param);
+
+    void delRole(Integer roleId);
+
+    void delRoleByProjectId(Integer projectId);
+
+    List<RoleDTO> listAll(RoleSearchParam param);
+
+    List<RoleSelect> buildSelect(List<RoleDTO> list);
+
+    Role findByRoleKey(String manager);
+}

+ 20 - 0
src/main/java/com/fdkankan/site/service/IUserRoleService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.site.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.Marking;
+import com.fdkankan.site.entity.UserRole;
+import com.fdkankan.site.request.MarkingSearchParam;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since  2023年1月3日12:12:39
+ */
+public interface IUserRoleService extends IService<UserRole> {
+
+
+    void delUserRole(Integer userId,Integer projectId);
+}

+ 20 - 0
src/main/java/com/fdkankan/site/service/IUserService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.site.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.site.entity.User;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since  2022年12月19日09:44:17
+ */
+public interface IUserService extends IService<User> {
+
+    User findByUserName(String userName);
+    User findByUserName(String userName,Integer fdkkId);
+    User findByTokenCovUserName(String token);
+
+}

+ 152 - 0
src/main/java/com/fdkankan/site/service/impl/CommentsServiceImpl.java

@@ -0,0 +1,152 @@
+package com.fdkankan.site.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.site.common.ResultCode;
+import com.fdkankan.site.entity.*;
+import com.fdkankan.site.entity.dto.CommentDTO;
+import com.fdkankan.site.entity.vo.TreeComments;
+import com.fdkankan.site.exception.BusinessException;
+import com.fdkankan.site.mapper.ICommentsMapper;
+import com.fdkankan.site.service.ICommentsService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+
+@Service
+public class CommentsServiceImpl extends ServiceImpl<ICommentsMapper, Comments> implements ICommentsService {
+
+
+    @Override
+    public List<CommentDTO> findByMarkingId(Integer markingId) {
+        MPJLambdaWrapper<Comments> wrapper = new MPJLambdaWrapper<Comments>()
+                .selectAll(Comments.class)
+                .select(User::getUserName,User::getUserId)
+                .leftJoin(User.class, User::getUserId, Comments::getUserId)
+                .eq(Comments::getMarkingId,markingId);
+        return baseMapper.selectJoinList(CommentDTO.class,wrapper);
+    }
+
+    @Override
+    public List<TreeComments> buildTreeSelect(List<CommentDTO> commentDTOS) {
+        List<CommentDTO> menuTrees = buildMenuTree(commentDTOS);
+        return menuTrees.stream().map(TreeComments::new).collect(Collectors.toList());
+    }
+
+    @Override
+    public void delComments(Integer commentId, Integer userId) {
+        Comments comments = getById(commentId);
+        if (Optional.ofNullable(comments).isPresent()) {
+            if (!comments.getUserId().equals(userId)){
+                throw new BusinessException(ResultCode.NOT_PERM);
+            }
+            LambdaUpdateWrapper<Comments> wrapper=new LambdaUpdateWrapper<>();
+            wrapper.eq(Comments::getCommentId,commentId).or().eq(Comments::getParentId,commentId);
+            baseMapper.delete(wrapper);
+        }
+
+    }
+
+    /**
+     * 构建前端所需要树结构
+     *
+     * @param menus 菜单列表
+     * @return 树结构列表
+     */
+    public List<CommentDTO> buildMenuTree(List<CommentDTO> menus)
+    {
+        List<CommentDTO> returnList = new ArrayList<>();
+        List<Integer> tempList = new ArrayList<>();
+        for (CommentDTO CommentDTO : menus)
+        {
+            tempList.add(CommentDTO.getCommentId());
+        }
+        for (Iterator<CommentDTO> iterator = menus.iterator(); iterator.hasNext();)
+        {
+            CommentDTO CommentDTO = (CommentDTO) iterator.next();
+            // 如果是顶级节点, 遍历该父节点的所有子节点
+            if (!tempList.contains(CommentDTO.getParentId()))
+            {
+                recursionFn(menus, CommentDTO);
+                returnList.add(CommentDTO);
+            }
+        }
+        if (returnList.isEmpty())
+        {
+            returnList = menus;
+        }
+        return returnList;
+    }
+    /**
+     * 根据父节点的ID获取所有子节点
+     *
+     * @param list 分类表
+     * @param parentId 传入的父节点ID
+     * @return String
+     */
+    public List<CommentDTO> getChildPerms(List<CommentDTO> list, int parentId)
+    {
+        List<CommentDTO> returnList = new ArrayList<CommentDTO>();
+        for (Iterator<CommentDTO> iterator = list.iterator(); iterator.hasNext();)
+        {
+            CommentDTO t = (CommentDTO) iterator.next();
+            // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
+            if (t.getParentId() == parentId)
+            {
+                recursionFn(list, t);
+                returnList.add(t);
+            }
+        }
+        return returnList;
+    }
+
+    /**
+     * 递归列表
+     *
+     * @param list
+     * @param t
+     */
+    private void recursionFn(List<CommentDTO> list, CommentDTO t)
+    {
+        // 得到子节点列表
+        List<CommentDTO> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (CommentDTO tChild : childList)
+        {
+            if (hasChild(list, tChild))
+            {
+                recursionFn(list, tChild);
+            }
+        }
+    }
+
+
+    /**
+     * 得到子节点列表
+     */
+    private List<CommentDTO> getChildList(List<CommentDTO> list, CommentDTO t)
+    {
+        List<CommentDTO> tlist = new ArrayList<>();
+        Iterator<CommentDTO> it = list.iterator();
+        while (it.hasNext())
+        {
+            CommentDTO n = (CommentDTO) it.next();
+            if (n.getParentId().intValue() == t.getCommentId().intValue())
+            {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+    private boolean hasChild(List<CommentDTO> list, CommentDTO t)
+    {
+        return getChildList(list, t).size() > 0 ? true : false;
+    }
+}

+ 66 - 0
src/main/java/com/fdkankan/site/service/impl/MarkingServiceImpl.java

@@ -0,0 +1,66 @@
+package com.fdkankan.site.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.site.common.PageInfo;
+import com.fdkankan.site.common.ResultCode;
+import com.fdkankan.site.common.util.VUtils;
+import com.fdkankan.site.entity.*;
+import com.fdkankan.site.entity.dto.MarkingDTO;
+import com.fdkankan.site.mapper.IMarkingMapper;
+import com.fdkankan.site.request.MarkingSearchParam;
+import com.fdkankan.site.service.IMarkingService;
+import com.fdkankan.site.service.IProjectLogService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class MarkingServiceImpl extends ServiceImpl<IMarkingMapper, Marking> implements IMarkingService {
+    @Autowired
+    IProjectLogService projectLogService;
+    @Override
+    public Object pageList(MarkingSearchParam param) {
+        VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
+        MPJLambdaWrapper<Marking> wrapper = new MPJLambdaWrapper<Marking>()
+                .selectAll(Marking.class)
+                .selectCollection(ProjectTeam.class, MarkingDTO::getUsers)
+                .leftJoin(MarkingUser.class, MarkingUser::getMarkingId, Marking::getMarkingId)
+                .leftJoin(ProjectTeam.class, ProjectTeam::getUserId, MarkingUser::getUserId)
+                .eq(Marking::getProjectId,param.getProjectId())
+                .eq(ProjectTeam::getProjectId,param.getProjectId());
+        if (Optional.ofNullable(param.getMarkingStatus()).isPresent()) {
+            wrapper.eq(Marking::getMarkingStatus,param.getMarkingStatus());
+        }
+        if (Optional.ofNullable(param.getMarkingTitle()).isPresent()&& StrUtil.isNotEmpty(param.getMarkingTitle())) {
+            wrapper.like(Marking::getMarkingTitle,param.getMarkingTitle());
+        }
+        IPage<MarkingDTO> page = baseMapper.selectJoinPage(new Page<>(param.getPageNum(), param.getPageSize()), MarkingDTO.class, wrapper);
+        return PageInfo.PageInfo(page);
+    }
+
+    @Override
+    public void delMarking(Integer markingId,String token) {
+        Marking marking = getById(markingId);
+        if (Optional.ofNullable(marking).isPresent()) {
+            LambdaUpdateWrapper<Marking> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(Marking::getMarkingId, markingId);
+            this.baseMapper.delete(wrapper);
+            projectLogService.addLog(marking.getProjectId(), "删除标注:" + marking.getMarkingTitle(), token, null);
+        }
+    }
+
+    @Override
+    public List<Marking> findByProjectId(Integer projectId) {
+        LambdaQueryWrapper<Marking> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(Marking::getProjectId,projectId);
+        return list(wrapper);
+    }
+}

+ 27 - 0
src/main/java/com/fdkankan/site/service/impl/MarkingUserServiceImpl.java

@@ -0,0 +1,27 @@
+package com.fdkankan.site.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.site.entity.MarkingUser;
+import com.fdkankan.site.mapper.IMarkingUserMapper;
+import com.fdkankan.site.service.IMarkingUserService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MarkingUserServiceImpl extends ServiceImpl<IMarkingUserMapper, MarkingUser> implements IMarkingUserService {
+    @Override
+    public void delByMarkingId(Integer markingId) {
+        LambdaQueryWrapper<MarkingUser> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(MarkingUser::getMarkingId,markingId);
+        this.baseMapper.delete(wrapper);
+    }
+
+    @Override
+    public void delByUserIdAndMarkingId(Integer userId,Integer markingId){
+        LambdaQueryWrapper<MarkingUser> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(MarkingUser::getUserId,userId);
+        wrapper.eq(MarkingUser::getMarkingId,markingId);
+        this.baseMapper.delete(wrapper);
+    }
+}

+ 168 - 0
src/main/java/com/fdkankan/site/service/impl/MenuServiceImpl.java

@@ -0,0 +1,168 @@
+package com.fdkankan.site.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.site.common.PageInfo;
+import com.fdkankan.site.entity.*;
+import com.fdkankan.site.entity.vo.TreeSelect;
+import com.fdkankan.site.mapper.IMenuMapper;
+import com.fdkankan.site.request.MenuParam;
+import com.fdkankan.site.service.IMenuService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class MenuServiceImpl extends ServiceImpl<IMenuMapper, Menu> implements IMenuService {
+
+    @Override
+    public Object pageList(MenuParam param) {
+//        VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
+        LambdaQueryWrapper<Menu> wrapper=new LambdaQueryWrapper();
+        Page<Menu> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
+        return PageInfo.PageInfo(page);
+    }
+
+    @Override
+    public List<Menu> findMenuTreeByUserId(Integer userId) {
+        MPJLambdaWrapper<Menu> wrapper = new MPJLambdaWrapper<Menu>()
+                .selectAll(Menu.class)
+                .leftJoin(RoleMenu.class,RoleMenu::getMenuId,Menu::getMenuId)
+                .leftJoin(UserRole.class,UserRole::getRoleId,RoleMenu::getRoleId)
+                .leftJoin(Role.class, Role::getRoleId, UserRole::getRoleId)
+                .eq(UserRole::getUserId,userId)
+                .orderByAsc(Menu::getParentId,Menu::getOrderNum)
+                .groupBy(Menu::getMenuId);
+        List<Menu> menus = baseMapper.selectJoinList(Menu.class, wrapper);
+        return menus;
+    }
+    @Override
+    public  List<Menu> findByRoleId(Integer roleId) {
+        MPJLambdaWrapper<Menu> wrapper = new MPJLambdaWrapper<Menu>()
+                .selectAll(Menu.class)
+                .leftJoin(RoleMenu.class,RoleMenu::getMenuId,Menu::getMenuId)
+                .leftJoin(Role.class, Role::getRoleId, RoleMenu::getRoleId)
+                .eq(Role::getRoleId,roleId);
+        List<Menu> menus = baseMapper.selectJoinList(Menu.class, wrapper);
+        return menus;
+    }
+    @Override
+    public List<Menu> findAllMenu() {
+        return list();
+    }
+    /**
+     * 构建前端所需要下拉树结构
+     *
+     * @param menus 菜单列表
+     * @return 下拉树结构列表
+     */
+    @Override
+    public List<TreeSelect> buildMenuTreeSelect(List<Menu> menus)
+    {
+        List<Menu> menuTrees = buildMenuTree(menus);
+        return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
+    }
+
+    /**
+     * 构建前端所需要树结构
+     *
+     * @param menus 菜单列表
+     * @return 树结构列表
+     */
+    public List<Menu> buildMenuTree(List<Menu> menus)
+    {
+        List<Menu> returnList = new ArrayList<>();
+        List<Integer> tempList = new ArrayList<>();
+        for (Menu menu : menus)
+        {
+            tempList.add(menu.getMenuId());
+        }
+        for (Iterator<Menu> iterator = menus.iterator(); iterator.hasNext();)
+        {
+            Menu menu = (Menu) iterator.next();
+            // 如果是顶级节点, 遍历该父节点的所有子节点
+            if (!tempList.contains(menu.getParentId()))
+            {
+                recursionFn(menus, menu);
+                returnList.add(menu);
+            }
+        }
+        if (returnList.isEmpty())
+        {
+            returnList = menus;
+        }
+        return returnList;
+    }
+    /**
+     * 根据父节点的ID获取所有子节点
+     *
+     * @param list 分类表
+     * @param parentId 传入的父节点ID
+     * @return String
+     */
+    public List<Menu> getChildPerms(List<Menu> list, int parentId)
+    {
+        List<Menu> returnList = new ArrayList<Menu>();
+        for (Iterator<Menu> iterator = list.iterator(); iterator.hasNext();)
+        {
+            Menu t = (Menu) iterator.next();
+            // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
+            if (t.getParentId() == parentId)
+            {
+                recursionFn(list, t);
+                returnList.add(t);
+            }
+        }
+        return returnList;
+    }
+
+    /**
+     * 递归列表
+     *
+     * @param list
+     * @param t
+     */
+    private void recursionFn(List<Menu> list, Menu t)
+    {
+        // 得到子节点列表
+        List<Menu> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (Menu tChild : childList)
+        {
+            if (hasChild(list, tChild))
+            {
+                recursionFn(list, tChild);
+            }
+        }
+    }
+
+
+    /**
+     * 得到子节点列表
+     */
+    private List<Menu> getChildList(List<Menu> list, Menu t)
+    {
+        List<Menu> tlist = new ArrayList<>();
+        Iterator<Menu> it = list.iterator();
+        while (it.hasNext())
+        {
+            Menu n = (Menu) it.next();
+            if (n.getParentId().intValue() == t.getMenuId().intValue())
+            {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+    private boolean hasChild(List<Menu> list, Menu t)
+    {
+        return getChildList(list, t).size() > 0 ? true : false;
+    }
+
+}

+ 6 - 7
src/main/java/com/fdkankan/site/service/impl/ProjectLogServiceImpl.java

@@ -9,14 +9,12 @@ import com.fdkankan.site.common.util.JwtUtil;
 import com.fdkankan.site.entity.Project;
 import com.fdkankan.site.entity.ProjectLog;
 import com.fdkankan.site.entity.ProjectTeam;
+import com.fdkankan.site.entity.User;
 import com.fdkankan.site.mapper.IProjectLogMapper;
 import com.fdkankan.site.response.ProjectLogVo;
 import com.fdkankan.site.response.SceneVo;
-import com.fdkankan.site.service.IProjectLogService;
+import com.fdkankan.site.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.site.service.IProjectService;
-import com.fdkankan.site.service.IProjectTeamService;
-import com.fdkankan.site.service.ISceneService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,11 +41,12 @@ public class ProjectLogServiceImpl extends ServiceImpl<IProjectLogMapper, Projec
     @Autowired
     IProjectTeamService projectTeamService;
 
-
+    @Autowired
+    IUserService userService;
     @Override
     public PageInfo pageList(RequestBase param,String token) {
-        String userName = JwtUtil.getUserName(token);
-        List<ProjectTeam> teamList = projectTeamService.getListByUserName(userName);
+        User user = userService.findByTokenCovUserName(token);
+        List<ProjectTeam> teamList = projectTeamService.getListByUserId(user.getUserId());
         Set<Integer> projectIdSet = teamList.stream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
         if(projectIdSet.size() <=0){
             return new PageInfo();

+ 20 - 20
src/main/java/com/fdkankan/site/service/impl/ProjectServiceImpl.java

@@ -1,6 +1,6 @@
 package com.fdkankan.site.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,14 +9,10 @@ import com.fdkankan.site.common.ResultCode;
 import com.fdkankan.site.common.util.DateUtils;
 import com.fdkankan.site.common.util.JwtUtil;
 import com.fdkankan.site.common.util.VUtils;
-import com.fdkankan.site.entity.Project;
-import com.fdkankan.site.entity.ProjectBim;
-import com.fdkankan.site.entity.ProjectNum;
-import com.fdkankan.site.entity.ProjectTeam;
+import com.fdkankan.site.entity.*;
+import com.fdkankan.site.entity.dto.ProjectTeamDTO;
 import com.fdkankan.site.exception.BusinessException;
 import com.fdkankan.site.httpClient.bim.BusinessStatus;
-import com.fdkankan.site.httpClient.client.FdKKClient;
-import com.fdkankan.site.httpClient.response.FdkkResponse;
 import com.fdkankan.site.mapper.IProjectMapper;
 import com.fdkankan.site.request.ProjectAddSceneParam;
 import com.fdkankan.site.request.ProjectDelSceneParam;
@@ -29,13 +25,10 @@ import com.fdkankan.site.response.UserData;
 import com.fdkankan.site.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -60,13 +53,18 @@ public class ProjectServiceImpl extends ServiceImpl<IProjectMapper, Project> imp
     ISceneService sceneService;
     @Autowired
     IProjectLogService projectLogService;
+    @Autowired
+    IUserService userService;
+    @Autowired
+    IUserRoleService userRoleService;
+    @Autowired
+    IRoleService roleService;
 
     @Override
     public Object getUserData(String token) {
         UserData userData = new UserData();
-
-        String userName = JwtUtil.getUserName(token);
-        List<ProjectTeam> teamList = projectTeamService.getListByUserName(userName);
+        User user = userService.findByTokenCovUserName(token);
+        List<ProjectTeam> teamList = projectTeamService.getListByUserId(user.getUserId());
         Set<Integer> projectIds = teamList.parallelStream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
         List<ProjectNum> numList = projectNumService.getListByProjectIds(projectIds);
         Integer projectCount = 0;
@@ -94,8 +92,8 @@ public class ProjectServiceImpl extends ServiceImpl<IProjectMapper, Project> imp
 
     @Override
     public Object pageList(ProjectListParam param, String token) {
-        String userName = JwtUtil.getUserName(token);
-        List<ProjectTeam> projectTeamList = projectTeamService.getListByUserName(userName);
+        User user = userService.findByTokenCovUserName(token);
+        List<ProjectTeam> projectTeamList = projectTeamService.getListByUserId(user.getUserId());
         Set<Integer> projectIdSet = projectTeamList.stream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
         if(projectIdSet.size() <=0){
             Page<ProjectVo> voPage = new Page<>(param.getPageNum(), param.getPageSize());
@@ -152,7 +150,7 @@ public class ProjectServiceImpl extends ServiceImpl<IProjectMapper, Project> imp
         }
         ProjectInfoVo infoVo = new ProjectInfoVo();
         BeanUtils.copyProperties(project,infoVo);
-        ProjectTeam projectCreater = projectTeamService.getProjectCreater(projectId);
+        ProjectTeamDTO projectCreater = projectTeamService.getProjectCreater(projectId);
         if(projectCreater!= null){
             infoVo.setProjectCreater(projectCreater.getUserName());
         }
@@ -363,6 +361,9 @@ public class ProjectServiceImpl extends ServiceImpl<IProjectMapper, Project> imp
         projectNumService.delByProjectId(projectId,token);
         projectBimService.delByProjectId(projectId,token);
         this.removeById(projectId);
+
+        userRoleService.delUserRole(null,projectId);
+        roleService.delRoleByProjectId(projectId);
         //projectLogService.addLog(project.getProjectId(),"删除项目:"+project.getProjectName(),token,null);
     }
 
@@ -376,10 +377,9 @@ public class ProjectServiceImpl extends ServiceImpl<IProjectMapper, Project> imp
 
     @Override
     public void checkTokenPer(String token,Integer projectId){
-        String userName = JwtUtil.getUserName(token);
-        List<ProjectTeam> teamList = projectTeamService.getListByUserName(userName);
-        Set<Integer> projectIds = teamList.stream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
-        if(!projectIds.contains(projectId)){
+        User user = userService.findByTokenCovUserName(token);
+        List<ProjectTeam> teamList = projectTeamService.getListByUserIdAndProjectId(user.getUserId(),projectId);
+        if(CollectionUtil.isEmpty(teamList)){
             throw new BusinessException(ResultCode.NOT_PERM);
         }
     }

+ 168 - 42
src/main/java/com/fdkankan/site/service/impl/ProjectTeamServiceImpl.java

@@ -1,24 +1,28 @@
 package com.fdkankan.site.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.site.common.PageInfo;
 import com.fdkankan.site.common.ResultCode;
-import com.fdkankan.site.common.util.JwtUtil;
 import com.fdkankan.site.common.util.VUtils;
-import com.fdkankan.site.entity.Project;
-import com.fdkankan.site.entity.ProjectTeam;
+import com.fdkankan.site.entity.*;
+import com.fdkankan.site.entity.dto.ProjectTeamAddDTO;
+import com.fdkankan.site.entity.dto.ProjectTeamDTO;
+import com.fdkankan.site.entity.vo.TeamUserSelect;
 import com.fdkankan.site.exception.BusinessException;
 import com.fdkankan.site.httpClient.client.FdKKClient;
 import com.fdkankan.site.httpClient.request.FdkkLoginRequest;
 import com.fdkankan.site.httpClient.response.FdkkResponse;
 import com.fdkankan.site.mapper.IProjectTeamMapper;
 import com.fdkankan.site.request.ProjectTeamListParam;
-import com.fdkankan.site.service.IProjectService;
-import com.fdkankan.site.service.IProjectTeamService;
+import com.fdkankan.site.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.apache.catalina.User;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -28,6 +32,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
+import cn.hutool.core.util.StrUtil;
 
 /**
  * <p>
@@ -44,11 +49,37 @@ public class ProjectTeamServiceImpl extends ServiceImpl<IProjectTeamMapper, Proj
     FdKKClient fdKKClient;
     @Autowired
     IProjectService projectService;
+    @Autowired
+    IUserService userService;
+    @Autowired
+    IUserRoleService userRoleService;
+    @Autowired
+    IMarkingUserService markingUserService;
+    @Autowired
+    IMarkingService markingService;
+    @Autowired
+    IRoleService roleService;
+
+    @Override
+    public List<ProjectTeam> getListByUserId(Integer userId) {
+        LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProjectTeam::getUserId,userId);
+        return this.list(wrapper);
+    }
+
+    @Override
+    public ProjectTeam findByUserIdAndProjectId(Integer userId, Integer projectId) {
+        LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProjectTeam::getUserId,userId);
+        wrapper.eq(ProjectTeam::getProjectId,projectId);
+        return getOne(wrapper);
+    }
 
     @Override
-    public List<ProjectTeam> getListByUserName(String userName) {
+    public List<ProjectTeam> getListByUserIdAndProjectId(Integer userId, Integer projectId) {
         LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(ProjectTeam::getUserName,userName);
+        wrapper.eq(ProjectTeam::getUserId,userId);
+        wrapper.eq(ProjectTeam::getProjectId,projectId);
         return this.list(wrapper);
     }
 
@@ -57,63 +88,95 @@ public class ProjectTeamServiceImpl extends ServiceImpl<IProjectTeamMapper, Proj
         ProjectTeam team = new ProjectTeam();
         team.setIsCreater(1);
         team.setProjectId(projectId);
-        team.setUserName(JwtUtil.getUserName(token));
+        User user = userService.findByTokenCovUserName(token);
+        team.setUserId(user.getUserId());
         this.save(team);
+        Role manager = roleService.findByRoleKey("manager");
+        UserRole userRole=new UserRole();
+        userRole.setRoleId(manager.getRoleId());
+        userRole.setUserId(user.getUserId());
+        userRole.setProjectId(projectId);
+        userRoleService.save(userRole);
     }
 
     @Override
     public Object pageList(ProjectTeamListParam param) {
         VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
         projectService.checkTokenPer(param.getToken(),param.getProjectId());
-        LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(ProjectTeam::getProjectId,param.getProjectId());
+
+        MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
+                .selectAll(ProjectTeam.class)
+                .select(User::getUserName)
+                .selectCollection(Role.class, ProjectTeamDTO::getRoles)
+                .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
+                .leftJoin(UserRole.class,UserRole::getUserId,User::getUserId)
+                .leftJoin(Role.class, Role::getRoleId, UserRole::getRoleId)
+                .eq(ProjectTeam::getProjectId,param.getProjectId())
+                .eq(UserRole::getProjectId,param.getProjectId())
+                ;
         if(StringUtils.isNotBlank(param.getUserName())){
-            wrapper.like(ProjectTeam::getUserName,param.getUserName());
+            wrapper.like(User::getUserName,param.getUserName());
         }
-        Page<ProjectTeam> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
-
-        return PageInfo.PageInfo(page);
+        IPage<ProjectTeamDTO> projectTeamIPage = baseMapper.selectJoinPage(new Page<>(param.getPageNum(), param.getPageSize()), ProjectTeamDTO.class, wrapper);
+        return PageInfo.PageInfo(projectTeamIPage);
     }
 
     @Override
-    public Object addUser(ProjectTeam param, String token) {
+    public Object addUser(ProjectTeamAddDTO param, String token) {
         VUtils.isTure(param.getProjectId() == null || StringUtils.isBlank(param.getUserName())).throwMessage(ResultCode.PARAM_MISS);
         VUtils.isTure(!this.checkUserName(param.getUserName())).throwMessage(ResultCode.USER_NOT_EXIST);
-
-       // ProjectTeam projectTeam =  this.getProjectCreater(param.getProjectId());
+        // ProjectTeam projectTeam =  this.getProjectCreater(param.getProjectId());
         //VUtils.isTure(projectTeam == null).throwMessage(ResultCode.PROJECT_CREATER_NOT_EXIST);
         //VUtils.isTure(!projectTeam.getUserName().equals(JwtUtil.getUserName(token))).throwMessage(ResultCode.NOT_PERM);
-
-        LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(ProjectTeam::getProjectId,param.getProjectId());
-        wrapper.eq(ProjectTeam::getUserName,param.getUserName());
-        long count = this.count(wrapper);
+        MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
+                .select(ProjectTeam::getTeamId)
+                .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
+                .eq(User::getUserName,param.getUserName())
+                .eq(ProjectTeam::getProjectId,param.getProjectId()) ;
+        long count = getBaseMapper().selectJoinCount(wrapper);
         VUtils.isTure(count >0).throwMessage(ResultCode.USER_EXIST);
-
+        User user = userService.findByUserName(param.getUserName());
         ProjectTeam team = new ProjectTeam();
         team.setProjectId(param.getProjectId());
-        team.setUserName(param.getUserName());
+        team.setUserId(user.getUserId());
         team.setRemark(param.getRemark());
+        team.setNickName(param.getNickName());
+        if (StrUtil.isNotEmpty(param.getBindAccount())){
+            team.setBindAccount(param.getBindAccount());
+        }
         this.save(team);
+        for (Integer roleId : param.getRoles()) {
+            UserRole userRole=new UserRole();
+            userRole.setRoleId(roleId);
+            userRole.setUserId(user.getUserId());
+            userRole.setProjectId(param.getProjectId());
+            userRoleService.save(userRole);
+        }
         return team;
     }
 
     @Override
-    public ProjectTeam getProjectCreater(Integer projectId) {
-        LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(ProjectTeam::getProjectId,projectId);
-        wrapper.eq(ProjectTeam::getIsCreater,1);
-        return this.getOne(wrapper);
+    public ProjectTeamDTO getProjectCreater(Integer projectId) {
+        MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
+                .selectAll(ProjectTeam.class)
+                .select(User::getUserName)
+                .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
+                .eq(ProjectTeam::getProjectId,projectId)
+                .eq(ProjectTeam::getIsCreater,1);;
+        return getBaseMapper().selectJoinOne(ProjectTeamDTO.class,wrapper);
     }
 
     @Override
     public HashMap<Integer, String> getProjectCreaterMap(Set<Integer> projectIds) {
         HashMap<Integer, String> map = new HashMap<>();
         if(projectIds.size() >0){
-            LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
-            wrapper.in(ProjectTeam::getProjectId,projectIds);
-            wrapper.eq(ProjectTeam::getIsCreater,1);
-            List<ProjectTeam> list = this.list(wrapper);
+            MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
+                    .selectAll(ProjectTeam.class)
+                    .select(User::getUserName)
+                    .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
+                    .in(ProjectTeam::getProjectId,projectIds)
+                    .eq(ProjectTeam::getIsCreater,1);;
+            List<ProjectTeamDTO> list = getBaseMapper().selectJoinList(ProjectTeamDTO.class,wrapper);
             list.forEach(entity -> map.put(entity.getProjectId(),entity.getUserName()));
         }
         return map;
@@ -136,9 +199,9 @@ public class ProjectTeamServiceImpl extends ServiceImpl<IProjectTeamMapper, Proj
 
         ProjectTeam createrTeam =  this.getProjectCreater(team.getProjectId());
         VUtils.isTure(createrTeam == null).throwMessage(ResultCode.PROJECT_CREATER_NOT_EXIST);
-        String userName = JwtUtil.getUserName(token);
-        if(!createrTeam.getUserName().equals(userName)){
-            if(!team.getUserName().equals(userName)){
+        User user = userService.findByTokenCovUserName(token);
+        if(!NumberUtil.equals(createrTeam.getUserId(),user.getUserId())){
+            if(!NumberUtil.equals(team.getUserId(),user.getUserId())){
                 throw new BusinessException(ResultCode.NOT_PERM);
             }else {
                 this.removeById(param.getTeamId());
@@ -147,24 +210,33 @@ public class ProjectTeamServiceImpl extends ServiceImpl<IProjectTeamMapper, Proj
         }
 
         this.removeById(param.getTeamId());
+        userRoleService.delUserRole(team.getUserId(),team.getProjectId());
+        List<Marking> byProjectId = markingService.findByProjectId(team.getProjectId());
+        for (Marking marking : byProjectId) {
+            markingUserService.delByUserIdAndMarkingId(team.getUserId(),marking.getMarkingId());
+        }
     }
 
     @Override
     public void updateRemark(ProjectTeam param) {
         VUtils.isTure(param.getTeamId() == null ).throwMessage(ResultCode.PARAM_MISS);
+        ProjectTeam byId = getById(param.getTeamId());
         LambdaUpdateWrapper<ProjectTeam> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(ProjectTeam::getTeamId,param.getTeamId())
                 .set(ProjectTeam::getRemark,param.getRemark());
-        this.update(wrapper);
+        this.update(byId,wrapper);
 
     }
 
     @Override
     public Set<Integer> getProjectIdByCreater(String projectCreater) {
-        LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
-        wrapper.like(ProjectTeam::getUserName,projectCreater);
-        wrapper.eq(ProjectTeam::getIsCreater,1);
-        return this.list(wrapper).stream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
+        MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
+                .selectAll(ProjectTeam.class)
+                .select(User::getUserName)
+                .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
+                .eq(User::getUserName,projectCreater)
+                .eq(ProjectTeam::getIsCreater,1);
+        return getBaseMapper().selectList(wrapper).stream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
     }
 
     @Override
@@ -173,4 +245,58 @@ public class ProjectTeamServiceImpl extends ServiceImpl<IProjectTeamMapper, Proj
         wrapper.eq(ProjectTeam::getProjectId,projectId);
         this.remove(wrapper);
     }
+
+    @Override
+    public List<ProjectTeamDTO> listAll(ProjectTeamListParam param) {
+        MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
+                .selectAll(ProjectTeam.class)
+                .select(User::getUserName)
+                .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
+                .eq(ProjectTeam::getProjectId,param.getProjectId());
+            if(StringUtils.isNotBlank(param.getUserName())){
+                wrapper.like(User::getUserName,param.getUserName());
+            }
+        List<ProjectTeamDTO> projectTeamIPage = baseMapper.selectJoinList( ProjectTeamDTO.class, wrapper);
+        return projectTeamIPage;
+    }
+
+    @Override
+    public List<TeamUserSelect> buildTreeSelect(List<ProjectTeamDTO> projectTeamDTOS) {
+        return projectTeamDTOS.stream().map(TeamUserSelect::new).collect(Collectors.toList());
+    }
+
+    @Override
+    public void updateUser(ProjectTeamAddDTO param) {
+        VUtils.isTure(param.getTeamId() == null ).throwMessage(ResultCode.PARAM_MISS);
+        ProjectTeam projectTeam = getById(param.getTeamId());
+        LambdaUpdateWrapper<ProjectTeam> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(ProjectTeam::getTeamId,param.getTeamId());
+        boolean updateFlag=false;
+        if (StrUtil.isNotEmpty(param.getRemark())&&!projectTeam.getRemark().equals(param.getRemark())){
+            wrapper.set(ProjectTeam::getRemark,param.getRemark());
+            updateFlag=true;
+        }
+        if (StrUtil.isNotEmpty(param.getBindAccount())){
+            updateFlag=true;
+            wrapper.set(ProjectTeam::getBindAccount,param.getBindAccount());
+        }
+        if (StrUtil.isNotEmpty(param.getNickName())){
+            updateFlag=true;
+            wrapper.set(ProjectTeam::getNickName,param.getNickName());
+        }
+        if (updateFlag){
+            this.update(wrapper);
+        }
+        if (CollectionUtil.isNotEmpty(param.getRoles())){
+            userRoleService.delUserRole(param.getUserId(),param.getProjectId());
+            for (Integer roleId : param.getRoles()) {
+                UserRole userRole=new UserRole();
+                userRole.setRoleId(roleId);
+                userRole.setUserId(param.getUserId());
+                userRole.setProjectId(param.getProjectId());
+                userRoleService.save(userRole);
+            }
+        }
+
+    }
 }

+ 24 - 0
src/main/java/com/fdkankan/site/service/impl/RoleMenuServiceImpl.java

@@ -0,0 +1,24 @@
+package com.fdkankan.site.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.site.entity.MarkingUser;
+import com.fdkankan.site.entity.Project;
+import com.fdkankan.site.entity.Role;
+import com.fdkankan.site.entity.RoleMenu;
+import com.fdkankan.site.mapper.IRoleMenuMapper;
+import com.fdkankan.site.service.IRoleMenuService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RoleMenuServiceImpl extends ServiceImpl<IRoleMenuMapper, RoleMenu> implements IRoleMenuService {
+    @Override
+    public void delByRoleId(Integer roleId) {
+        LambdaQueryWrapper<RoleMenu> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(RoleMenu::getRoleId,roleId);
+        this.baseMapper.delete(wrapper);
+    }
+
+
+}

+ 83 - 0
src/main/java/com/fdkankan/site/service/impl/RoleServiceImpl.java

@@ -0,0 +1,83 @@
+package com.fdkankan.site.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.site.common.PageInfo;
+import com.fdkankan.site.common.ResultCode;
+import com.fdkankan.site.common.util.VUtils;
+import com.fdkankan.site.entity.*;
+import com.fdkankan.site.entity.dto.RoleDTO;
+import com.fdkankan.site.entity.vo.RoleSelect;
+import com.fdkankan.site.mapper.IRoleMapper;
+import com.fdkankan.site.request.RoleSearchParam;
+import com.fdkankan.site.service.IMenuService;
+import com.fdkankan.site.service.IProjectService;
+import com.fdkankan.site.service.IRoleMenuService;
+import com.fdkankan.site.service.IRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class RoleServiceImpl extends ServiceImpl<IRoleMapper, Role> implements IRoleService {
+    @Autowired
+    IProjectService projectService;
+    @Autowired
+    IRoleMenuService roleMenuService;
+    @Autowired
+    IMenuService menuService;
+    @Override
+    public Object pageList(RoleSearchParam param) {
+        VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
+        IPage<RoleDTO> roleDTOIPage = getBaseMapper().pageList(new Page<>(param.getPageNum(), param.getPageSize()), param);
+
+        for (RoleDTO record : roleDTOIPage.getRecords()) {
+            List<Menu> byRoleId = menuService.findByRoleId(record.getRoleId());
+            List<Integer> menuIds = byRoleId.stream().map(Menu::getMenuId).collect(Collectors.toList());
+            record.setMenuIds(menuIds);
+        }
+
+
+        return PageInfo.PageInfo(roleDTOIPage);
+    }
+
+    @Override
+    public void delRole(Integer roleId) {
+        LambdaUpdateWrapper<Role> wrapper=new LambdaUpdateWrapper<>();
+        wrapper.eq(Role::getRoleId,roleId);
+        int delete = baseMapper.delete(wrapper);
+        if (delete>0){
+            roleMenuService.delByRoleId(roleId);
+        }
+    }
+
+    @Override
+    public void delRoleByProjectId(Integer projectId) {
+        LambdaUpdateWrapper<Role> wrapper=new LambdaUpdateWrapper<>();
+        wrapper.eq(Role::getProjectId,projectId);
+        int delete = baseMapper.delete(wrapper);
+    }
+
+    @Override
+    public List<RoleDTO> listAll(RoleSearchParam param) {
+        VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
+        return getBaseMapper().list(param);
+    }
+
+    @Override
+    public List<RoleSelect> buildSelect(List<RoleDTO> list) {
+        return list.stream().map(RoleSelect::new).collect(Collectors.toList());
+    }
+
+    @Override
+    public Role findByRoleKey(String manager) {
+        LambdaQueryWrapper<Role> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(Role::getRoleKey,manager);
+        return getOne(wrapper);
+    }
+}

+ 25 - 0
src/main/java/com/fdkankan/site/service/impl/UploadService.java

@@ -47,6 +47,31 @@ public class UploadService {
         }
         return null;
     }
+    public File uploadFile(MultipartFile file,String sceneCode,String type) {
+        if(file.isEmpty()){
+            throw new BusinessException(ResultCode.UPLOAD_FILE_NO_EXIST);
+        }
+        if(file.getSize()>10 * 1024 * 1024 * 100){
+            System.out.println(file.getSize());
+            throw new BusinessException(ResultCode.UPLOAD_FILE_TO_LONG);
+        }
+        //获取文件名
+        String fileName = file.getOriginalFilename();
+        if(StringUtils.isEmpty(fileName)){
+            throw new BusinessException(ResultCode.UPLOAD_FILE_NO_EXIST);
+        }
+        File localFile = null;
+        try {
+            String suffixName = fileName.substring(fileName.lastIndexOf("."));
+            fileName = UUID.randomUUID().toString().replace("-","");
+            localFile = File.createTempFile(fileName,suffixName);
+            file.transferTo(localFile);
+            return localFile;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return null;
+    }
 
     public void deleteOssUrl(String path) {
         try {

+ 28 - 0
src/main/java/com/fdkankan/site/service/impl/UserRoleServiceImpl.java

@@ -0,0 +1,28 @@
+package com.fdkankan.site.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.site.entity.RoleMenu;
+import com.fdkankan.site.entity.UserRole;
+import com.fdkankan.site.mapper.IUserRoleMapper;
+import com.fdkankan.site.service.IUserRoleService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserRoleServiceImpl extends ServiceImpl<IUserRoleMapper, UserRole> implements IUserRoleService {
+
+    @Override
+    public void delUserRole(Integer userId, Integer projectId) {
+        LambdaQueryWrapper<UserRole> wrapper=new LambdaQueryWrapper<>();
+        if(ObjectUtil.isNotNull(userId)){
+            wrapper.eq(UserRole::getUserId,userId);
+        }
+        if(ObjectUtil.isNotNull(projectId)){
+            wrapper.eq(UserRole::getProjectId,projectId);
+        }
+        if (ObjectUtil.isNotNull(userId)||ObjectUtil.isNotNull(projectId)){
+            this.baseMapper.delete(wrapper);
+        }
+    }
+}

+ 64 - 0
src/main/java/com/fdkankan/site/service/impl/UserServiceImpl.java

@@ -0,0 +1,64 @@
+package com.fdkankan.site.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.site.common.PageInfo;
+import com.fdkankan.site.common.ResultCode;
+import com.fdkankan.site.common.util.JwtUtil;
+import com.fdkankan.site.common.util.VUtils;
+import com.fdkankan.site.entity.Marking;
+import com.fdkankan.site.entity.ProjectNum;
+import com.fdkankan.site.entity.User;
+import com.fdkankan.site.mapper.IMarkingMapper;
+import com.fdkankan.site.mapper.IUserMapper;
+import com.fdkankan.site.request.MarkingSearchParam;
+import com.fdkankan.site.service.IMarkingService;
+import com.fdkankan.site.service.IUserService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements IUserService {
+
+    @Override
+    public User findByUserName(String userName) {
+        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(User::getUserName,userName);
+        User one = this.getOne(wrapper);
+        if (ObjectUtil.isNotNull(one)){
+            return one;
+        }else {
+            User u=new User();
+            u.setUserName(userName);
+            boolean save = save(u);
+            return u;
+        }
+    }
+
+    @Override
+    public User findByUserName(String userName, Integer fdkkId) {
+        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(User::getUserName,userName);
+        User one = this.getOne(wrapper);
+        if (ObjectUtil.isNotNull(one)){
+            if (ObjectUtil.isNull(one.getFdkkId())){
+                one.setFdkkId(fdkkId);
+                updateById(one);
+            }
+            return one;
+        }else {
+            User u=new User();
+            u.setUserName(userName);
+            u.setFdkkId(fdkkId);
+            boolean save = save(u);
+            return u;
+        }
+    }
+
+    @Override
+    public User findByTokenCovUserName(String token) {
+        String userName = JwtUtil.getUserName(token);
+        return findByUserName(userName);
+    }
+}

+ 0 - 0
src/main/resources/application-local.yaml


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio