Commit 76d8063c by gdj

增加org

parent 0286ca97
...@@ -39,6 +39,8 @@ public class CustomClaim { ...@@ -39,6 +39,8 @@ public class CustomClaim {
@JsonAlias("workspace_id") @JsonAlias("workspace_id")
private String workspaceId; private String workspaceId;
@JsonAlias("org_id")
private String orgId;
/** /**
* Convert the custom claim data type to the Map type. * Convert the custom claim data type to the Map type.
* @return map * @return map
......
...@@ -85,6 +85,13 @@ public class SecurityUtils { ...@@ -85,6 +85,13 @@ public class SecurityUtils {
return customClaim.getWorkspaceId(); return customClaim.getWorkspaceId();
} }
public static String getOrgId() {
DecodedJWT jwt = JwtUtil.verifyToken(getToken());
CustomClaim customClaim = new CustomClaim(jwt.getClaims());
return customClaim.getOrgId();
}
public static String getUserId() { public static String getUserId() {
DecodedJWT jwt = JwtUtil.verifyToken(getToken()); DecodedJWT jwt = JwtUtil.verifyToken(getToken());
CustomClaim customClaim = new CustomClaim(jwt.getClaims()); CustomClaim customClaim = new CustomClaim(jwt.getClaims());
...@@ -92,6 +99,12 @@ public class SecurityUtils { ...@@ -92,6 +99,12 @@ public class SecurityUtils {
return customClaim.getId(); return customClaim.getId();
} }
public static String getUsername() {
DecodedJWT jwt = JwtUtil.verifyToken(getToken());
CustomClaim customClaim = new CustomClaim(jwt.getClaims());
return customClaim.getUsername();
}
public static boolean isSysAdminRole() { public static boolean isSysAdminRole() {
Integer roleType = getRoleType(); Integer roleType = getRoleType();
...@@ -119,21 +132,21 @@ public class SecurityUtils { ...@@ -119,21 +132,21 @@ public class SecurityUtils {
return !isAdminRole(); return !isAdminRole();
} }
public static boolean isProjectAdminRole(Integer roleType) { public static boolean isOrgAdminRole(Integer roleType) {
return roleType == RoleTypeEnum.PROJECT_ADMIN.getVal(); return roleType == RoleTypeEnum.ORG_ADMIN.getVal();
} }
public static boolean isNotProjectAdminRole(Integer roleType) { public static boolean isNotOrgAdminRole(Integer roleType) {
return !isProjectAdminRole(roleType); return !isOrgAdminRole(roleType);
} }
public static boolean isProjectAdminRole() { public static boolean isOrgAdminRole() {
Integer roleType = getRoleType(); Integer roleType = getRoleType();
return isProjectAdminRole(roleType); return isOrgAdminRole(roleType);
} }
public static boolean isNotProjectAdminRole() { public static boolean isNotOrgAdminRole() {
return !isProjectAdminRole(); return !isOrgAdminRole();
} }
public static boolean isAdminRole(Integer roleType) { public static boolean isAdminRole(Integer roleType) {
...@@ -189,7 +202,7 @@ public class SecurityUtils { ...@@ -189,7 +202,7 @@ public class SecurityUtils {
return aboveMemberRole(roleType); return aboveMemberRole(roleType);
} }
public static boolean aboveMemberRole(Integer roleType) { public static boolean aboveMemberRole(Integer roleType) {
int[] roleArr = {RoleTypeEnum.MEMBER.getVal(), RoleTypeEnum.PILOT.getVal(), RoleTypeEnum.ADMIN.getVal(), RoleTypeEnum.PROJECT_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()}; int[] roleArr = {RoleTypeEnum.MEMBER.getVal(), RoleTypeEnum.PILOT.getVal(), RoleTypeEnum.ADMIN.getVal(), RoleTypeEnum.ORG_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()};
for(int role : roleArr){ for(int role : roleArr){
if(roleType == role) { if(roleType == role) {
...@@ -213,7 +226,7 @@ public class SecurityUtils { ...@@ -213,7 +226,7 @@ public class SecurityUtils {
} }
public static boolean abovePilotRole(Integer roleType) { public static boolean abovePilotRole(Integer roleType) {
int[] roleArr = {RoleTypeEnum.PILOT.getVal(), RoleTypeEnum.ADMIN.getVal(), RoleTypeEnum.PROJECT_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()}; int[] roleArr = {RoleTypeEnum.PILOT.getVal(), RoleTypeEnum.ADMIN.getVal(), RoleTypeEnum.ORG_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()};
for(int role : roleArr){ for(int role : roleArr){
if(roleType == role) { if(roleType == role) {
...@@ -237,7 +250,7 @@ public class SecurityUtils { ...@@ -237,7 +250,7 @@ public class SecurityUtils {
} }
public static boolean aboveAdminRole(Integer roleType) { public static boolean aboveAdminRole(Integer roleType) {
int[] roleArr = {RoleTypeEnum.ADMIN.getVal(), RoleTypeEnum.PROJECT_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()}; int[] roleArr = {RoleTypeEnum.ADMIN.getVal(), RoleTypeEnum.ORG_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()};
for(int role : roleArr){ for(int role : roleArr){
if(roleType == role) { if(roleType == role) {
...@@ -247,21 +260,21 @@ public class SecurityUtils { ...@@ -247,21 +260,21 @@ public class SecurityUtils {
return false; return false;
} }
public static boolean aboveProjectAdminRoleAndThrowError() { public static boolean aboveOrgAdminRoleAndThrowError() {
boolean result = aboveProjectAdminRole(); boolean result = aboveOrgAdminRole();
if (!result) { if (!result) {
throw new RuntimeException("The current role has no permissions"); throw new RuntimeException("The current role has no permissions");
} }
return true; return true;
} }
public static boolean aboveProjectAdminRole() { public static boolean aboveOrgAdminRole() {
Integer roleType = getRoleType(); Integer roleType = getRoleType();
return aboveSysAdminRole(roleType); return aboveSysAdminRole(roleType);
} }
public static boolean aboveProjectAdminRole(Integer roleType) { public static boolean aboveOrgAdminRole(Integer roleType) {
int[] roleArr = {RoleTypeEnum.PROJECT_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()}; int[] roleArr = {RoleTypeEnum.ORG_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()};
for(int role : roleArr) { for(int role : roleArr) {
if(roleType == role) { if(roleType == role) {
......
...@@ -270,4 +270,27 @@ public class DeviceController { ...@@ -270,4 +270,27 @@ public class DeviceController {
return HttpResultResponse.success(devices); return HttpResultResponse.success(devices);
} }
/**
* share device to the org
* @param device
* @return
*/
@PostMapping("/{workspace_id}/share")
public HttpResultResponse shareDevice(@RequestBody DeviceDTO device, @PathVariable("workspace_id") String workspaceId) {
device.setWorkspaceId(workspaceId);
deviceService.shareDevice(device);
return HttpResultResponse.success();
}
/**
* cancel share device to the org
* @param device
* @return
*/
@PostMapping("/{workspace_id}/cancelShare")
public HttpResultResponse cancelShareDevice(@RequestBody DeviceDTO device, @PathVariable("workspace_id") String workspaceId) {
device.setWorkspaceId(workspaceId);
deviceService.cancelShareDevice(device);
return HttpResultResponse.success();
}
} }
\ No newline at end of file
...@@ -7,10 +7,7 @@ import com.dji.sample.manage.service.IUserService; ...@@ -7,10 +7,7 @@ import com.dji.sample.manage.service.IUserService;
import com.dji.sdk.common.HttpResultResponse; import com.dji.sdk.common.HttpResultResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -30,7 +27,8 @@ public class LoginController { ...@@ -30,7 +27,8 @@ public class LoginController {
String username = loginDTO.getUsername(); String username = loginDTO.getUsername();
String password = loginDTO.getPassword(); String password = loginDTO.getPassword();
return userService.userLogin(username, password, loginDTO.getFlag()); // return userService.userLogin(username, password, loginDTO.getFlag());
return userService.userLogin(loginDTO);
} }
@PostMapping("/token/refresh") @PostMapping("/token/refresh")
...@@ -45,4 +43,18 @@ public class LoginController { ...@@ -45,4 +43,18 @@ public class LoginController {
return HttpResultResponse.success(user.get()); return HttpResultResponse.success(user.get());
} }
@PostMapping("/token/changeOrg")
public HttpResultResponse changeOrg(HttpServletRequest request, HttpServletResponse response,
@RequestParam(name = "org_id") String orgId) {
String token = request.getHeader(PARAM_TOKEN);
Optional<UserDTO> user = userService.changeOrgRefreshToken(token, orgId);
if (user.isEmpty()) {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return HttpResultResponse.error(CommonErrorEnum.NO_TOKEN.getMessage());
}
return HttpResultResponse.success(user.get());
}
} }
package com.dji.sample.manage.controller;
import com.dji.sample.common.model.CustomClaim;
import com.dji.sample.manage.model.dto.OrgDTO;
import com.dji.sample.manage.model.dto.OrgJoinDTO;
import com.dji.sample.manage.model.dto.WorkspaceDTO;
import com.dji.sample.manage.model.param.searchParam.OrgSearchParam;
import com.dji.sample.manage.model.param.searchParam.WorkspaceSearchParam;
import com.dji.sample.manage.service.IOrgService;
import com.dji.sample.manage.service.IWorkspaceService;
import com.dji.sdk.common.HttpResultResponse;
import com.dji.sdk.common.PaginationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Optional;
import static com.dji.sample.common.util.SecurityUtils.*;
import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM;
@RestController
@RequestMapping("${url.manage.prefix}${url.manage.version}/orgs")
public class OrgController {
@Autowired
private IOrgService orgService;
/**
* Gets information about the workspace that the current user is in.
* @param request
* @return
*/
@GetMapping("/current")
public HttpResultResponse getCurrentOrg(HttpServletRequest request) {
CustomClaim customClaim = (CustomClaim)request.getAttribute(TOKEN_CLAIM);
Optional<OrgDTO> orgOpt = orgService.getOrgByOrgId(customClaim.getOrgId());
return orgOpt.isEmpty() ? HttpResultResponse.error() : HttpResultResponse.success(orgOpt.get());
}
@GetMapping("/getOne")
public HttpResultResponse getWorkspace(OrgSearchParam param) {
param.setWorkspaceId(getWorkspaceId());
// 判断权限 系统管理员才允许全查
if (!aboveSysAdminRole()) {
param.setRoleUserId(getUserId());
}
OrgDTO org = orgService.getOrg(param);
return HttpResultResponse.success(org);
}
@GetMapping("/page")
public HttpResultResponse getOrgPage(OrgSearchParam param,
@RequestParam(defaultValue = "1") Long page,
@RequestParam(value = "page_size", defaultValue = "50") Long pageSize) {
// 判断权限 系统管理员才允许全查
if (!aboveSysAdminRole()) {
param.setOrgId(getOrgId());
}
PaginationData<OrgDTO> workspacePage = orgService.getOrgPage(param, page, pageSize);
return HttpResultResponse.success(workspacePage);
}
@PostMapping("/add")
public HttpResultResponse addOrg(@RequestBody OrgDTO orgDTO) {
// 判断权限 系统管理员才允许新增
aboveSysAdminRoleAndThrowError();
orgDTO.setWorkspaceId(getWorkspaceId());
OrgDTO org = orgService.addOrg(orgDTO);
return HttpResultResponse.success(org);
}
@PostMapping("/edit")
public HttpResultResponse editOrg(@RequestBody OrgDTO orgDTO) {
// 判断权限 管理员才允许修改
aboveAdminRoleAndThrowError();
orgDTO.setWorkspaceId(getWorkspaceId());
boolean isEdit = orgService.editOrg(orgDTO);
return isEdit ? HttpResultResponse.success() : HttpResultResponse.error();
}
@PostMapping("/delete")
public HttpResultResponse delWorkspace(@RequestBody OrgDTO orgDTO) {
// 判断权限 系统管理员才允许修改
aboveSysAdminRoleAndThrowError();
boolean isDel = orgService.delOrg(orgDTO);
return isDel ? HttpResultResponse.success() : HttpResultResponse.error();
}
@PostMapping("/apply")
public HttpResultResponse applyOrg(@RequestBody OrgJoinDTO orgDTO) {
boolean isDel = orgService.applyOrg(orgDTO);
return isDel ? HttpResultResponse.success() : HttpResultResponse.error();
}
@PostMapping("/joinByAdmin")
public HttpResultResponse joinOrgByAdmin(@RequestBody OrgJoinDTO orgDTO) {
boolean isDel = orgService.joinOrgByAdmin(orgDTO);
return isDel ? HttpResultResponse.success() : HttpResultResponse.error();
}
}
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.dji.sample.manage.controller; ...@@ -3,6 +3,7 @@ package com.dji.sample.manage.controller;
import com.dji.sample.common.model.CustomClaim; import com.dji.sample.common.model.CustomClaim;
import com.dji.sample.manage.model.dto.UserListDTO; import com.dji.sample.manage.model.dto.UserListDTO;
import com.dji.sample.manage.model.entity.UserEntity; import com.dji.sample.manage.model.entity.UserEntity;
import com.dji.sample.manage.model.param.searchParam.UserSearchParam;
import com.dji.sample.manage.service.IUserService; import com.dji.sample.manage.service.IUserService;
import com.dji.sdk.common.HttpResultResponse; import com.dji.sdk.common.HttpResultResponse;
import com.dji.sdk.common.PaginationData; import com.dji.sdk.common.PaginationData;
...@@ -34,16 +35,18 @@ public class UserController { ...@@ -34,16 +35,18 @@ public class UserController {
/** /**
* Paging to query all users in a workspace. * Paging to query all users in a workspace.
* @param param param
* @param page current page * @param page current page
* @param pageSize * @param pageSize
* @param workspaceId * @param workspaceId
* @return * @return
*/ */
@GetMapping("/{workspace_id}/users") @GetMapping("/{workspace_id}/users")
public HttpResultResponse<PaginationData<UserListDTO>> getUsers(@RequestParam(defaultValue = "1") Long page, public HttpResultResponse<PaginationData<UserListDTO>> getUsers(UserSearchParam param,
@RequestParam(defaultValue = "1") Long page,
@RequestParam(value = "page_size", defaultValue = "50") Long pageSize, @RequestParam(value = "page_size", defaultValue = "50") Long pageSize,
@PathVariable("workspace_id") String workspaceId) { @PathVariable("workspace_id") String workspaceId) {
PaginationData<UserListDTO> paginationData = userService.getUsersByWorkspaceId(page, pageSize, workspaceId); PaginationData<UserListDTO> paginationData = userService.getUsers(param, workspaceId, page, pageSize);
return HttpResultResponse.success(paginationData); return HttpResultResponse.success(paginationData);
} }
......
package com.dji.sample.manage.controller;
import com.dji.sample.common.model.CustomClaim;
import com.dji.sample.manage.model.dto.OrgDTO;
import com.dji.sample.manage.model.dto.UserOrgDTO;
import com.dji.sample.manage.model.param.searchParam.OrgSearchParam;
import com.dji.sample.manage.service.IOrgService;
import com.dji.sample.manage.service.IUserOrgService;
import com.dji.sdk.common.HttpResultResponse;
import com.dji.sdk.common.PaginationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Optional;
import static com.dji.sample.common.util.SecurityUtils.*;
import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM;
@RestController
@RequestMapping("${url.manage.prefix}${url.manage.version}/orgUser")
public class UserOrgController {
@Autowired
private IUserOrgService userOrgService;
@PostMapping("/addUserToOrg")
public HttpResultResponse addUserToOrg(@RequestBody UserOrgDTO userOrgDTO) {
// 判断权限 管理员才允许新增
aboveAdminRoleAndThrowError();
boolean isAdd = userOrgService.addUserToOrg(userOrgDTO.getUserId(), userOrgDTO.getOrgId(), userOrgDTO.getRoleType());
return isAdd ? HttpResultResponse.success() : HttpResultResponse.error();
}
@PostMapping("/removeUserFromOrg")
public HttpResultResponse removeUserFromOrg(@RequestBody UserOrgDTO userOrgDTO) {
// 判断权限 管理员才允许删除
aboveAdminRoleAndThrowError();
boolean isDel = userOrgService.removeUserFromOrg(userOrgDTO.getUserId(), userOrgDTO.getOrgId());
return isDel ? HttpResultResponse.success() : HttpResultResponse.error();
}
}
\ No newline at end of file
package com.dji.sample.manage.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dji.sample.manage.model.entity.DeviceOrgEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface IDeviceOrgMapper extends BaseMapper<DeviceOrgEntity> {
}
package com.dji.sample.manage.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dji.sample.manage.model.entity.DeviceOrgEntity;
import com.dji.sample.manage.model.entity.FleetOrgEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* @author guan
*/
@Mapper
public interface IFleetOrgMapper extends BaseMapper<FleetOrgEntity> {
}
package com.dji.sample.manage.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dji.sample.manage.model.entity.OrgEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* @author guan
*/
@Mapper
public interface IOrgMapper extends BaseMapper<OrgEntity> {
}
package com.dji.sample.manage.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dji.sample.manage.model.dto.UserOrgDTO;
import com.dji.sample.manage.model.entity.UserOrgEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface IUserOrgMapper extends BaseMapper<UserOrgEntity> {
/**
* 查询用户所有关联的组织信息,包含组织名称
* @param userId 用户ID
* @return 用户组织列表(包含组织名称)
*/
@Select("SELECT uo.*, o.org_name FROM manage_user_org uo " +
"LEFT JOIN manage_org o ON uo.org_id = o.org_id " +
"WHERE uo.user_id = #{userId} AND uo.status = 1")
List<UserOrgDTO> selectUserOrgs(@Param("userId") String userId);
}
...@@ -85,4 +85,14 @@ public class DeviceDTO { ...@@ -85,4 +85,14 @@ public class DeviceDTO {
@JsonProperty("device_enum") @JsonProperty("device_enum")
private String deviceEnum; private String deviceEnum;
/**
* 设备归属团队
*/
private String orgId;
/**
* 是否来源于其他团队的分享设备
*/
private String isShared;
} }
\ No newline at end of file
package com.dji.sample.manage.model.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author guan
*/
@Data
public class DeviceOrgDTO implements Serializable {
private Integer id;
private Integer deviceId;
private String deviceSn;
private String orgId;
private Integer isShared;
private Long createTime;
private Long updateTime;
private String creatorId;
private String creatorName;
private String updaterId;
private String updaterName;
private String workspceId;
}
...@@ -40,6 +40,8 @@ public class FleetDTO implements Serializable { ...@@ -40,6 +40,8 @@ public class FleetDTO implements Serializable {
private String nickname; private String nickname;
private String orgId;
@JsonProperty(value = "user_list") @JsonProperty(value = "user_list")
private List<FleetUserDTO> userList; private List<FleetUserDTO> userList;
......
package com.dji.sample.manage.model.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author guan
*/
@Data
public class FleetOrgDTO implements Serializable {
private Integer id;
private Integer fleetId;
private String fleetSn;
private String orgId;
private Integer isShared;
private Long createTime;
private Long updateTime;
private String creatorId;
private String creatorName;
private String updaterId;
private String updaterName;
private String workspceId;
}
package com.dji.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author guan
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OrgDTO implements Serializable {
private Integer id;
private String orgId;
private String orgName;
private String orgDesc;
private String workspaceId;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private String bindCode;
@JsonProperty("admin_user_id")
private String adminUserId;
@JsonProperty("admin_user_name")
private String adminUserName;
@JsonProperty("admin_user_password")
private String adminUserPassword;
}
package com.dji.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author guan
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OrgJoinDTO implements Serializable {
private String orgId;
private String orgName;
private String orgDesc;
private String workspaceId;
private String bindCode;
private String joinUserId;
private String joinUserName;
private Integer joinUserRoleType;
}
...@@ -20,6 +20,9 @@ public class UserDTO { ...@@ -20,6 +20,9 @@ public class UserDTO {
@JsonProperty("workspace_id") @JsonProperty("workspace_id")
private String workspaceId; private String workspaceId;
@JsonProperty("org_id")
private String orgId;
@JsonProperty("user_type") @JsonProperty("user_type")
private Integer userType; private Integer userType;
......
...@@ -22,4 +22,9 @@ public class UserLoginDTO { ...@@ -22,4 +22,9 @@ public class UserLoginDTO {
@NonNull @NonNull
private Integer flag; private Integer flag;
private String orgId;
private String orgName;
} }
package com.dji.sample.manage.model.dto;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class UserOrgDTO {
private Integer id;
private String userId;
private String orgId;
private String orgName; // 组织名称
private Integer roleType;
private Integer status;
// private String createTime;
// private String updateTime;
}
...@@ -88,4 +88,7 @@ public class DeviceEntity implements Serializable { ...@@ -88,4 +88,7 @@ public class DeviceEntity implements Serializable {
@TableField(value = "login_time") @TableField(value = "login_time")
private Long loginTime; private Long loginTime;
@TableField(value = "org_id")
private String orgId;
} }
\ No newline at end of file
package com.dji.sample.manage.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
@Data
@TableName("manage_device_org")
public class DeviceOrgEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
private Integer deviceId;
private String deviceSn;
private String orgId;
private Integer isShared;
private Long createTime;
private Long updateTime;
private String creatorId;
private String creatorName;
private String updaterId;
private String updaterName;
private String workspaceId;
}
...@@ -49,4 +49,6 @@ public class FleetEntity implements Serializable { ...@@ -49,4 +49,6 @@ public class FleetEntity implements Serializable {
@TableField(value = "nickname") @TableField(value = "nickname")
private String nickname; private String nickname;
@TableField(value = "org_id")
private String orgId;
} }
\ No newline at end of file
package com.dji.sample.manage.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
@Data
@TableName("fleet_device_org")
public class FleetOrgEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
private Integer fleetId;
private String fleetSn;
private String orgId;
private Integer isShared;
private Long createTime;
private Long updateTime;
private String creatorId;
private String creatorName;
private String updaterId;
private String updaterName;
private String workspaceId;
}
package com.dji.sample.manage.model.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.io.Serializable;
/**
* @author guan
*/
@Data
@TableName("manage_org")
public class OrgEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
private String orgId;
private String orgName;
private String orgDesc;
private String workspaceId;
private Long createTime;
private Long updateTime;
private String creatorId;
private String creatorName;
private String updaterId;
private String updaterName;
private String bindCode;
@TableField(value = "admin_user_id")
private String adminUserId;
}
package com.dji.sample.manage.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* @author guan
*/
@Data
@TableName("manage_user_org")
public class UserOrgEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
private String userId;
private String orgId;
private Integer roleType;
private Integer status;
private Long createTime;
private Long updateTime;
private String creatorId;
private String creatorName;
private String updaterId;
private String updaterName;
private String workspaceId;
}
...@@ -12,7 +12,7 @@ public enum RoleTypeEnum { ...@@ -12,7 +12,7 @@ public enum RoleTypeEnum {
PILOT(2, "飞手"), PILOT(2, "飞手"),
PROJECT_ADMIN(50, "项目管理员"), ORG_ADMIN(50, "项目管理员"),
SYS_ADMIN(100, "系统管理员"), SYS_ADMIN(100, "系统管理员"),
...@@ -39,8 +39,8 @@ public enum RoleTypeEnum { ...@@ -39,8 +39,8 @@ public enum RoleTypeEnum {
if (val == SYS_ADMIN.val) { if (val == SYS_ADMIN.val) {
return SYS_ADMIN; return SYS_ADMIN;
} }
if (val == PROJECT_ADMIN.val) { if (val == ORG_ADMIN.val) {
return PROJECT_ADMIN; return ORG_ADMIN;
} }
if (val == ADMIN.val) { if (val == ADMIN.val) {
return ADMIN; return ADMIN;
......
...@@ -27,6 +27,9 @@ public class DeviceSearchParam { ...@@ -27,6 +27,9 @@ public class DeviceSearchParam {
@JsonProperty("workspace_id") @JsonProperty("workspace_id")
private String workspaceId; private String workspaceId;
@JsonProperty("org_id")
private String orgId;
@JsonProperty("device_type") @JsonProperty("device_type")
private Integer deviceType; private Integer deviceType;
......
package com.dji.sample.manage.model.param.searchParam;
import lombok.Data;
/**
* @author guan
*/
@Data
public class OrgSearchParam {
private String orgId;
private String workspaceId;
private Integer id;
private String orgName;
private String orgDesc;
/**
* 只能查看自己的团队
*/
private String roleUserId;
}
package com.dji.sample.manage.model.param.searchParam;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class UserSearchParam implements Serializable {
@JsonProperty("device_sn")
private String orgId;
private String workspaceId;
}
package com.dji.sample.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dji.sample.manage.model.entity.DeviceOrgEntity;
import com.dji.sample.manage.model.entity.UserOrgEntity;
/**
* @author guan
*/
public interface IDeviceOrgService extends IService<DeviceOrgEntity> {
}
...@@ -270,6 +270,10 @@ public interface IDeviceService extends IService<DeviceEntity> { ...@@ -270,6 +270,10 @@ public interface IDeviceService extends IService<DeviceEntity> {
boolean editAirport(DeviceDTO airport); boolean editAirport(DeviceDTO airport);
void shareDevice(DeviceDTO device);
void cancelShareDevice(DeviceDTO device);
/** /**
* Get the devices list in one workspace. * Get the devices list in one workspace.
* @param workspaceId * @param workspaceId
......
package com.dji.sample.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dji.sample.manage.model.entity.FleetOrgEntity;
/**
* @author guan
*/
public interface IFleetOrgService extends IService<FleetOrgEntity> {
}
package com.dji.sample.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dji.sample.manage.model.dto.OrgDTO;
import com.dji.sample.manage.model.dto.OrgJoinDTO;
import com.dji.sample.manage.model.dto.WorkspaceDTO;
import com.dji.sample.manage.model.entity.OrgEntity;
import com.dji.sample.manage.model.param.searchParam.OrgSearchParam;
import com.dji.sample.manage.model.param.searchParam.WorkspaceSearchParam;
import com.dji.sdk.common.PaginationData;
import java.util.List;
import java.util.Optional;
public interface IOrgService extends IService<OrgEntity> {
/**
* 根据组织ID获取组织信息
* @param orgId 组织ID
* @return 组织信息
*/
Optional<OrgDTO> getOrgByOrgId(String orgId);
PaginationData<OrgDTO> getOrgPage(OrgSearchParam param, Long page, Long pageSize);
OrgDTO addOrg(OrgDTO orgDTO);
boolean editOrg(OrgDTO orgDTO);
boolean delOrg(OrgDTO orgDTO);
/**
* 用户申请加入团队
* @param orgDTO
* @return
*/
boolean applyOrg(OrgJoinDTO orgDTO);
/**
* 管理员增加团队
* @param orgDTO
* @return
*/
boolean joinOrgByAdmin(OrgJoinDTO orgDTO);
OrgDTO getOrg(OrgSearchParam param);
/**
* 获取组织对应的workspaceId
* @param orgId 组织ID
* @return workspaceId
*/
String getWorkspaceIdByOrgId(String orgId);
/**
* 获取所有组织列表
* @return 组织列表
*/
List<OrgDTO> getAllOrgs();
/**
* 删除组织
* @param orgId 组织ID
* @return 是否删除成功
*/
boolean deleteOrg(String orgId);
/**
* 创建组织
* @param orgDTO 组织实体
* @return 是否创建成功
*/
boolean createOrg(OrgDTO orgDTO);
/**
* 更新组织
* @param orgDTO 组织实体
* @return 是否更新成功
*/
boolean updateOrg(OrgDTO orgDTO);
}
package com.dji.sample.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dji.sample.manage.model.dto.UserOrgDTO;
import com.dji.sample.manage.model.entity.UserOrgEntity;
import java.util.List;
import java.util.Map;
import java.util.Optional;
public interface IUserOrgService extends IService<UserOrgEntity> {
/**
* 获取用户在特定组织的角色信息
* @param userId 用户ID
* @param orgId 组织ID
* @return 用户组织关联信息
*/
Optional<UserOrgEntity> getUserOrg(String userId, String orgId);
/**
* 获取用户的所有组织信息
* @param userId 用户ID
* @return 用户所有组织关联信息列表
*/
List<UserOrgDTO> getUserOrgs(String userId);
/**
* 获取特定组织中所有用户ID
* @param orgId 组织ID
* @return 用户ID列表
*/
List<String> getUserIdsByOrgId(String orgId);
/**
* 获取组织中所有用户的角色映射
* @param orgId 组织ID
* @return 用户ID与角色类型的映射
*/
Map<String, Integer> getUserRoleMapByOrgId(String orgId);
/**
* 添加用户到组织
* @param userId 用户ID
* @param orgId 组织ID
* @param roleType 角色类型
* @return 操作是否成功
*/
boolean addUserToOrg(String userId, String orgId, Integer roleType);
/**
* 从组织移除用户
* @param userId 用户ID
* @param orgId 组织ID
* @return 操作是否成功
*/
boolean removeUserFromOrg(String userId, String orgId);
/**
* 更新用户在组织的角色
* @param userId 用户ID
* @param orgId 组织ID
* @param roleType 新的角色类型
* @return 操作是否成功
*/
boolean updateUserOrgRole(String userId, String orgId, Integer roleType);
}
...@@ -3,7 +3,9 @@ package com.dji.sample.manage.service; ...@@ -3,7 +3,9 @@ package com.dji.sample.manage.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dji.sample.manage.model.dto.UserDTO; import com.dji.sample.manage.model.dto.UserDTO;
import com.dji.sample.manage.model.dto.UserListDTO; import com.dji.sample.manage.model.dto.UserListDTO;
import com.dji.sample.manage.model.dto.UserLoginDTO;
import com.dji.sample.manage.model.entity.UserEntity; import com.dji.sample.manage.model.entity.UserEntity;
import com.dji.sample.manage.model.param.searchParam.UserSearchParam;
import com.dji.sdk.common.HttpResultResponse; import com.dji.sdk.common.HttpResultResponse;
import com.dji.sdk.common.PaginationData; import com.dji.sdk.common.PaginationData;
...@@ -29,6 +31,13 @@ public interface IUserService extends IService<UserEntity> { ...@@ -29,6 +31,13 @@ public interface IUserService extends IService<UserEntity> {
HttpResultResponse userLogin(String username, String password, Integer flag); HttpResultResponse userLogin(String username, String password, Integer flag);
/** /**
* Verify the username and password to log in.
* @param loginDTO
* @return
*/
HttpResultResponse userLogin(UserLoginDTO loginDTO);
/**
* Create a user object containing a new token. * Create a user object containing a new token.
* @param token * @param token
* @return * @return
...@@ -36,12 +45,26 @@ public interface IUserService extends IService<UserEntity> { ...@@ -36,12 +45,26 @@ public interface IUserService extends IService<UserEntity> {
Optional<UserDTO> refreshToken(String token); Optional<UserDTO> refreshToken(String token);
/** /**
* Create a user object containing a new token.
* @param token
* @return
*/
Optional<UserDTO> changeOrgRefreshToken(String token, String orgId);
/**
* Query information about all users in a workspace. * Query information about all users in a workspace.
* @param workspaceId uuid * @param workspaceId uuid
* @return * @return
*/ */
PaginationData<UserListDTO> getUsersByWorkspaceId(long page, long pageSize, String workspaceId); PaginationData<UserListDTO> getUsersByWorkspaceId(long page, long pageSize, String workspaceId);
/**
* Query information about all users.
* @param workspaceId uuid
* @return
*/
PaginationData<UserListDTO> getUsers(UserSearchParam param, String workspaceId, long page, long pageSize);
Boolean updateUser(String workspaceId, String userId, UserListDTO user); Boolean updateUser(String workspaceId, String userId, UserListDTO user);
Boolean deleteUser(String workspaceId, String userId); Boolean deleteUser(String workspaceId, String userId);
...@@ -58,4 +81,6 @@ public interface IUserService extends IService<UserEntity> { ...@@ -58,4 +81,6 @@ public interface IUserService extends IService<UserEntity> {
UserEntity addWorkspaceAdminUser(UserEntity user); UserEntity addWorkspaceAdminUser(UserEntity user);
UserEntity addOrgAdminUser(UserEntity user);
} }
package com.dji.sample.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dji.sample.manage.dao.IDeviceOrgMapper;
import com.dji.sample.manage.dao.IUserOrgMapper;
import com.dji.sample.manage.model.entity.DeviceOrgEntity;
import com.dji.sample.manage.model.entity.UserOrgEntity;
import com.dji.sample.manage.service.IDeviceOrgService;
import com.dji.sample.manage.service.IUserOrgService;
import org.springframework.stereotype.Service;
@Service
public class DeviceOrgServiceImpl extends ServiceImpl<IDeviceOrgMapper, DeviceOrgEntity> implements IDeviceOrgService {
}
package com.dji.sample.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dji.sample.manage.dao.IFleetOrgMapper;
import com.dji.sample.manage.model.entity.FleetOrgEntity;
import com.dji.sample.manage.service.IFleetOrgService;
import org.springframework.stereotype.Service;
/**
* @author guan
*/
@Service
public class FleetOrgServiceImpl extends ServiceImpl<IFleetOrgMapper, FleetOrgEntity> implements IFleetOrgService {
}
...@@ -32,6 +32,9 @@ import java.util.Map; ...@@ -32,6 +32,9 @@ import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.dji.sample.common.util.SecurityUtils.aboveSysAdminRole;
import static com.dji.sample.common.util.SecurityUtils.getOrgId;
/** /**
* @author guan * @author guan
*/ */
...@@ -74,6 +77,13 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp ...@@ -74,6 +77,13 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp
fleetQueryWrapper.like(FleetEntity::getFleetName, param.getFleetName()); fleetQueryWrapper.like(FleetEntity::getFleetName, param.getFleetName());
} }
// 限制 团队
if (aboveSysAdminRole()) {
} else {
fleetQueryWrapper.eq(FleetEntity::getOrgId, getOrgId());
}
Page<FleetEntity> pagination = mapper.selectPage(new Page<>(page, pageSize), fleetQueryWrapper); Page<FleetEntity> pagination = mapper.selectPage(new Page<>(page, pageSize), fleetQueryWrapper);
List<FleetDTO> fleetList = pagination.getRecords().stream() List<FleetDTO> fleetList = pagination.getRecords().stream()
...@@ -128,6 +138,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp ...@@ -128,6 +138,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp
addFleet.setFleetSn(UUID.randomUUID().toString()); addFleet.setFleetSn(UUID.randomUUID().toString());
} }
addFleet.setOrgId(StringUtils.hasText(fleetDTO.getOrgId()) ? fleetDTO.getOrgId() : getOrgId());
addFleet.setFleetName(fleetDTO.getFleetName()); addFleet.setFleetName(fleetDTO.getFleetName());
addFleet.setNickname(fleetDTO.getNickname()); addFleet.setNickname(fleetDTO.getNickname());
addFleet.setFleetDesc(fleetDTO.getFleetDesc()); addFleet.setFleetDesc(fleetDTO.getFleetDesc());
...@@ -279,6 +290,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp ...@@ -279,6 +290,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp
fleetDTO.setFleetDesc(fleetEntity.getFleetDesc()); fleetDTO.setFleetDesc(fleetEntity.getFleetDesc());
fleetDTO.setUserId(fleetEntity.getUserId()); fleetDTO.setUserId(fleetEntity.getUserId());
fleetDTO.setNickname(fleetEntity.getNickname()); fleetDTO.setNickname(fleetEntity.getNickname());
fleetDTO.setOrgId(fleetEntity.getOrgId());
return fleetDTO; return fleetDTO;
} }
...@@ -293,6 +305,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp ...@@ -293,6 +305,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp
fleetEntity.setFleetDesc(fleetDTO.getFleetDesc()); fleetEntity.setFleetDesc(fleetDTO.getFleetDesc());
fleetEntity.setUserId(fleetDTO.getUserId()); fleetEntity.setUserId(fleetDTO.getUserId());
fleetEntity.setNickname(fleetDTO.getNickname()); fleetEntity.setNickname(fleetDTO.getNickname());
fleetEntity.setOrgId(fleetDTO.getOrgId());
return fleetEntity; return fleetEntity;
} }
......
package com.dji.sample.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dji.sample.common.util.SecurityUtils; // 修正导入包
import com.dji.sample.manage.dao.IUserOrgMapper;
import com.dji.sample.manage.model.dto.UserOrgDTO;
import com.dji.sample.manage.model.entity.UserOrgEntity;
import com.dji.sample.manage.service.IUserOrgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
@Service
public class UserOrgServiceImpl extends ServiceImpl<IUserOrgMapper, UserOrgEntity> implements IUserOrgService {
@Autowired
private IUserOrgMapper userOrgMapper;
@Override
public Optional<UserOrgEntity> getUserOrg(String userId, String orgId) {
LambdaQueryWrapper<UserOrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserOrgEntity::getUserId, userId)
.eq(UserOrgEntity::getOrgId, orgId)
.eq(UserOrgEntity::getStatus, 1);
UserOrgEntity entity = getOne(queryWrapper);
return Optional.ofNullable(entity);
}
@Override
public List<UserOrgDTO> getUserOrgs(String userId) {
return userOrgMapper.selectUserOrgs(userId);
}
@Override
public List<String> getUserIdsByOrgId(String orgId) {
LambdaQueryWrapper<UserOrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserOrgEntity::getOrgId, orgId)
.eq(UserOrgEntity::getStatus, 1)
.select(UserOrgEntity::getUserId);
return this.list(queryWrapper)
.stream()
.map(UserOrgEntity::getUserId)
.collect(Collectors.toList());
}
@Override
public Map<String, Integer> getUserRoleMapByOrgId(String orgId) {
LambdaQueryWrapper<UserOrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserOrgEntity::getOrgId, orgId)
.eq(UserOrgEntity::getStatus, 1)
.select(UserOrgEntity::getUserId, UserOrgEntity::getRoleType);
return this.list(queryWrapper)
.stream()
.collect(Collectors.toMap(
UserOrgEntity::getUserId,
UserOrgEntity::getRoleType
));
}
@Override
public boolean addUserToOrg(String userId, String orgId, Integer roleType) {
// 检查是否已存在
LambdaQueryWrapper<UserOrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserOrgEntity::getUserId, userId)
.eq(UserOrgEntity::getOrgId, orgId);
UserOrgEntity entity = getOne(queryWrapper);
if (entity != null) {
// 如果已存在但被禁用,则启用
if (entity.getStatus() == 0) {
entity.setStatus(1);
entity.setRoleType(roleType);
// entity.setUpdateTime(System.currentTimeMillis());
return updateById(entity);
}
return false; // 已存在且启用状态
}
// 创建新关联
UserOrgEntity userOrg = new UserOrgEntity();
userOrg.setUserId(userId);
userOrg.setOrgId(orgId);
userOrg.setRoleType(roleType);
userOrg.setStatus(1);
userOrg.setCreateTime(System.currentTimeMillis());
userOrg.setUpdateTime(System.currentTimeMillis());
// 创建新关联时设置创建者和更新者信息
String currentUserId = SecurityUtils.getUserId();
String currentUserName = SecurityUtils.getUsername();
userOrg.setCreatorId(currentUserId);
userOrg.setCreatorName(currentUserName);
userOrg.setUpdaterId(currentUserId);
userOrg.setUpdaterName(currentUserName);
return save(userOrg);
}
@Override
public boolean removeUserFromOrg(String userId, String orgId) {
LambdaQueryWrapper<UserOrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserOrgEntity::getUserId, userId)
.eq(UserOrgEntity::getOrgId, orgId);
// 使用逻辑删除(将状态设置为禁用)
UserOrgEntity entity = getOne(queryWrapper);
if (entity != null) {
entity.setStatus(0);
// entity.setUpdateTime(System.currentTimeMillis());
return updateById(entity);
}
return false;
}
@Override
public boolean updateUserOrgRole(String userId, String orgId, Integer roleType) {
LambdaQueryWrapper<UserOrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserOrgEntity::getUserId, userId)
.eq(UserOrgEntity::getOrgId, orgId);
UserOrgEntity entity = getOne(queryWrapper);
if (entity != null) {
entity.setRoleType(roleType);
// entity.setUpdateTime(System.currentTimeMillis());
// 设置更新者信息
entity.setUpdaterId(SecurityUtils.getUserId());
entity.setUpdaterName(SecurityUtils.getUsername());
return updateById(entity);
}
return false;
}
}
...@@ -51,4 +51,6 @@ public class WaylineFileDTO { ...@@ -51,4 +51,6 @@ public class WaylineFileDTO {
@JsonAlias("isDir") @JsonAlias("isDir")
private Integer isDir; private Integer isDir;
private String orgId;
} }
...@@ -53,4 +53,6 @@ public class WaylineFileTreeVO { ...@@ -53,4 +53,6 @@ public class WaylineFileTreeVO {
private List<WaylineFileTreeVO> children; private List<WaylineFileTreeVO> children;
private String orgId;
} }
...@@ -87,4 +87,6 @@ public class WaylineJobDTO { ...@@ -87,4 +87,6 @@ public class WaylineJobDTO {
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0) @CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
private SimulateMission simulateMission; private SimulateMission simulateMission;
private String orgId;
} }
...@@ -74,4 +74,8 @@ public class WaylineFileEntity implements Serializable { ...@@ -74,4 +74,8 @@ public class WaylineFileEntity implements Serializable {
// @TableLogic // @TableLogic
@TableField("is_deleted") @TableField("is_deleted")
private Boolean isDeleted; private Boolean isDeleted;
@TableField("org_id")
private String orgId;
} }
...@@ -89,4 +89,10 @@ public class WaylineJobEntity implements Serializable { ...@@ -89,4 +89,10 @@ public class WaylineJobEntity implements Serializable {
@TableField("task_scene") @TableField("task_scene")
private Integer taskScene; private Integer taskScene;
/**
* orgId
*/
@TableField("org_id")
private String orgId;
} }
...@@ -48,4 +48,7 @@ public class CreateJobParam { ...@@ -48,4 +48,7 @@ public class CreateJobParam {
private List<Long> taskDays; private List<Long> taskDays;
private List<List<Long>> taskPeriods; private List<List<Long>> taskPeriods;
private String orgId;
} }
...@@ -26,4 +26,7 @@ public class WaylineJobSearchParam { ...@@ -26,4 +26,7 @@ public class WaylineJobSearchParam {
@JsonProperty("job_ids") @JsonProperty("job_ids")
private String jobIds; private String jobIds;
@JsonProperty("org_id")
private String orgId;
} }
...@@ -48,6 +48,8 @@ import java.util.stream.Collectors; ...@@ -48,6 +48,8 @@ import java.util.stream.Collectors;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
import static com.dji.sample.common.util.SecurityUtils.aboveSysAdminRole;
import static com.dji.sample.common.util.SecurityUtils.getOrgId;
import static com.dji.sample.wayline.model.dto.KmzFileProperties.WAYLINE_FILE_SUFFIX; import static com.dji.sample.wayline.model.dto.KmzFileProperties.WAYLINE_FILE_SUFFIX;
/** /**
...@@ -67,11 +69,16 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -67,11 +69,16 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
@Override @Override
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param) { public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param) {
// Paging Query
Page<WaylineFileEntity> page = mapper.selectPage( LambdaQueryWrapper<WaylineFileEntity> waylineFileaQueryWrapper = new LambdaQueryWrapper<WaylineFileEntity>();
new Page<WaylineFileEntity>(param.getPage(), param.getPageSize()),
new LambdaQueryWrapper<WaylineFileEntity>() if (aboveSysAdminRole()) {
.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal())
} else {
waylineFileaQueryWrapper.eq(WaylineFileEntity::getOrgId, getOrgId());
}
waylineFileaQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal())
.eq(WaylineFileEntity::getWorkspaceId, workspaceId) .eq(WaylineFileEntity::getWorkspaceId, workspaceId)
.eq(Objects.nonNull(param.getFavorited()), WaylineFileEntity::getFavorited, param.getFavorited()) .eq(Objects.nonNull(param.getFavorited()), WaylineFileEntity::getFavorited, param.getFavorited())
.and(param.getTemplateType() != null, wrapper -> { .and(param.getTemplateType() != null, wrapper -> {
...@@ -91,7 +98,11 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -91,7 +98,11 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
}) })
.like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey()) .like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey())
// There is a risk of SQL injection // There is a risk of SQL injection
.last(Objects.nonNull(param.getOrderBy()), " order by " + param.getOrderBy().toString())); .last(Objects.nonNull(param.getOrderBy()), " order by " + param.getOrderBy().toString());
// Paging Query
Page<WaylineFileEntity> page = mapper.selectPage(
new Page<>(param.getPage(), param.getPageSize()), waylineFileaQueryWrapper
);
// Wrap the results of a paging query into a custom paging object. // Wrap the results of a paging query into a custom paging object.
List<GetWaylineListResponse> records = page.getRecords() List<GetWaylineListResponse> records = page.getRecords()
...@@ -144,6 +155,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -144,6 +155,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
WaylineFileEntity file = this.dtoConvertToEntity(metadata); WaylineFileEntity file = this.dtoConvertToEntity(metadata);
file.setWaylineId(UUID.randomUUID().toString()); file.setWaylineId(UUID.randomUUID().toString());
file.setWorkspaceId(workspaceId); file.setWorkspaceId(workspaceId);
file.setOrgId(getOrgId());
if (!StringUtils.hasText(file.getSign())) { if (!StringUtils.hasText(file.getSign())) {
try (InputStream object = ossService.getObject(OssConfiguration.bucket, metadata.getObjectKey())) { try (InputStream object = ossService.getObject(OssConfiguration.bucket, metadata.getObjectKey())) {
...@@ -301,6 +313,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -301,6 +313,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
dir.setIsDir(WaylineFileTypeEnum.DIRECTORY.getVal()); dir.setIsDir(WaylineFileTypeEnum.DIRECTORY.getVal());
dir.setWaylineId(UUID.randomUUID().toString()); dir.setWaylineId(UUID.randomUUID().toString());
dir.setWorkspaceId(workspaceId); dir.setWorkspaceId(workspaceId);
dir.setOrgId(getOrgId());
int insertId = mapper.insert(dir); int insertId = mapper.insert(dir);
...@@ -335,6 +348,12 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -335,6 +348,12 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
fileQueryWrapper.like(WaylineFileEntity::getAncestors, rootId); fileQueryWrapper.like(WaylineFileEntity::getAncestors, rootId);
fileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.DIRECTORY.getVal()); fileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.DIRECTORY.getVal());
if (aboveSysAdminRole()) {
} else {
// 只能 查看自己团队的 航线
fileQueryWrapper.eq(WaylineFileEntity::getOrgId, getOrgId());
}
List<WaylineFileEntity> waylineFiles = mapper.selectList(fileQueryWrapper); List<WaylineFileEntity> waylineFiles = mapper.selectList(fileQueryWrapper);
return getWaylineFileTree(waylineFiles, rootId); return getWaylineFileTree(waylineFiles, rootId);
...@@ -480,6 +499,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -480,6 +499,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
.name(file.getName()) .name(file.getName())
.username(file.getUsername()) .username(file.getUsername())
.objectKey(file.getObjectKey()) .objectKey(file.getObjectKey())
.orgId(file.getOrgId())
// Separate multiple payload data with ",". // Separate multiple payload data with ",".
.payloadModelKeys(String.join(",", file.getPayloadModelKeys())) .payloadModelKeys(String.join(",", file.getPayloadModelKeys()))
.templateTypes(file.getTemplateTypes().stream() .templateTypes(file.getTemplateTypes().stream()
...@@ -509,6 +529,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -509,6 +529,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
.name(file.getName()) .name(file.getName())
.username(file.getUsername()) .username(file.getUsername())
.objectKey(file.getObjectKey()) .objectKey(file.getObjectKey())
.orgId(file.getOrgId())
// Separate multiple payload data with ",". // Separate multiple payload data with ",".
// .payloadModelKeys(String.join(",", file.getPayloadModelKeys())) // .payloadModelKeys(String.join(",", file.getPayloadModelKeys()))
// .templateTypes(file.getTemplateTypes().stream() // .templateTypes(file.getTemplateTypes().stream()
...@@ -649,6 +670,12 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -649,6 +670,12 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, String parentId, GetWaylineListRequest param) { public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, String parentId, GetWaylineListRequest param) {
// Paging Query // Paging Query
LambdaQueryWrapper<WaylineFileEntity> waylineFileQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WaylineFileEntity> waylineFileQueryWrapper = new LambdaQueryWrapper<>();
if (aboveSysAdminRole()) {
} else {
waylineFileQueryWrapper.eq(WaylineFileEntity::getOrgId, getOrgId());
}
waylineFileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal()) waylineFileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal())
.eq(WaylineFileEntity::getWorkspaceId, workspaceId) .eq(WaylineFileEntity::getWorkspaceId, workspaceId)
.eq(Objects.nonNull(param.getFavorited()), WaylineFileEntity::getFavorited, param.getFavorited()); .eq(Objects.nonNull(param.getFavorited()), WaylineFileEntity::getFavorited, param.getFavorited());
...@@ -689,6 +716,13 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl ...@@ -689,6 +716,13 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
public PaginationData<GetWaylineListResponse> getWaylinesByParam(WaylineSearchParam param, String workspaceId, GetWaylineListRequest request) { public PaginationData<GetWaylineListResponse> getWaylinesByParam(WaylineSearchParam param, String workspaceId, GetWaylineListRequest request) {
// Paging Query // Paging Query
LambdaQueryWrapper<WaylineFileEntity> waylineFileQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WaylineFileEntity> waylineFileQueryWrapper = new LambdaQueryWrapper<>();
if (aboveSysAdminRole()) {
} else {
waylineFileQueryWrapper.eq(WaylineFileEntity::getOrgId, getOrgId());
}
waylineFileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal()); waylineFileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal());
waylineFileQueryWrapper.eq(WaylineFileEntity::getWorkspaceId, workspaceId); waylineFileQueryWrapper.eq(WaylineFileEntity::getWorkspaceId, workspaceId);
......
...@@ -57,6 +57,9 @@ import java.util.*; ...@@ -57,6 +57,9 @@ import java.util.*;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.dji.sample.common.util.SecurityUtils.aboveSysAdminRole;
import static com.dji.sample.common.util.SecurityUtils.getOrgId;
/** /**
* @author sean * @author sean
* @version 1.1 * @version 1.1
...@@ -113,6 +116,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin ...@@ -113,6 +116,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
.fileId(param.getFileId()) .fileId(param.getFileId())
.username(username) .username(username)
.workspaceId(workspaceId) .workspaceId(workspaceId)
.orgId(StringUtils.hasText(param.getOrgId()) ? param.getOrgId() : getOrgId())
.jobId(jobId) .jobId(jobId)
.beginTime(beginTime) .beginTime(beginTime)
.endTime(endTime) .endTime(endTime)
...@@ -204,6 +208,15 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin ...@@ -204,6 +208,15 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
public PaginationData<WaylineJobDTO> getJobsByParam(WaylineJobSearchParam param, String workspaceId, long page, long pageSize) { public PaginationData<WaylineJobDTO> getJobsByParam(WaylineJobSearchParam param, String workspaceId, long page, long pageSize) {
LambdaQueryWrapper<WaylineJobEntity> waylineJobQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WaylineJobEntity> waylineJobQueryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.hasText(param.getOrgId())) {
waylineJobQueryWrapper.eq(WaylineJobEntity::getOrgId, param.getOrgId());
}
if (aboveSysAdminRole()) {
} else {
waylineJobQueryWrapper.eq(WaylineJobEntity::getOrgId, getOrgId());
}
waylineJobQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId); waylineJobQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId);
waylineJobQueryWrapper.orderByDesc(WaylineJobEntity::getId); waylineJobQueryWrapper.orderByDesc(WaylineJobEntity::getId);
...@@ -258,8 +271,13 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin ...@@ -258,8 +271,13 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
@Override @Override
public PaginationData<WaylineJobDTO> getTodayJobsByWorkspaceId(String workspaceId, String dockSns, long page, long pageSize) { public PaginationData<WaylineJobDTO> getTodayJobsByWorkspaceId(String workspaceId, String dockSns, long page, long pageSize) {
LambdaQueryWrapper<WaylineJobEntity> waylineJobQueryWrapper = new LambdaQueryWrapper<WaylineJobEntity>() LambdaQueryWrapper<WaylineJobEntity> waylineJobQueryWrapper = new LambdaQueryWrapper<>();
.eq(WaylineJobEntity::getWorkspaceId, workspaceId) if (aboveSysAdminRole()) {
} else {
waylineJobQueryWrapper.eq(WaylineJobEntity::getOrgId, getOrgId());
}
waylineJobQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId)
.orderByDesc(WaylineJobEntity::getId); .orderByDesc(WaylineJobEntity::getId);
if (StringUtils.hasText(dockSns)) { if (StringUtils.hasText(dockSns)) {
List<String> dockSnList = Arrays.asList(dockSns.split(",")); List<String> dockSnList = Arrays.asList(dockSns.split(","));
...@@ -314,6 +332,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin ...@@ -314,6 +332,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
.fileId(dto.getFileId()) .fileId(dto.getFileId())
.dockSn(dto.getDockSn()) .dockSn(dto.getDockSn())
.workspaceId(dto.getWorkspaceId()) .workspaceId(dto.getWorkspaceId())
.orgId(dto.getOrgId())
.taskType(Optional.ofNullable(dto.getTaskType()).map(TaskTypeEnum::getType).orElse(null)) .taskType(Optional.ofNullable(dto.getTaskType()).map(TaskTypeEnum::getType).orElse(null))
.taskScene(Optional.ofNullable(dto.getTaskScene()).map(TaskSceneEnum::getScene).orElse(null)) .taskScene(Optional.ofNullable(dto.getTaskScene()).map(TaskSceneEnum::getScene).orElse(null))
.waylineType(Optional.ofNullable(dto.getWaylineType()).map(WaylineTypeEnum::getValue).orElse(null)) .waylineType(Optional.ofNullable(dto.getWaylineType()).map(WaylineTypeEnum::getValue).orElse(null))
...@@ -366,6 +385,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin ...@@ -366,6 +385,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
.orElse(DeviceDTO.builder().build()).getNickname()) .orElse(DeviceDTO.builder().build()).getNickname())
.username(entity.getUsername()) .username(entity.getUsername())
.workspaceId(entity.getWorkspaceId()) .workspaceId(entity.getWorkspaceId())
.orgId(entity.getOrgId())
.status(WaylineJobStatusEnum.IN_PROGRESS.getVal() == entity.getStatus() && .status(WaylineJobStatusEnum.IN_PROGRESS.getVal() == entity.getStatus() &&
entity.getJobId().equals(waylineRedisService.getPausedWaylineJobId(entity.getDockSn())) ? entity.getJobId().equals(waylineRedisService.getPausedWaylineJobId(entity.getDockSn())) ?
WaylineJobStatusEnum.PAUSED.getVal() : entity.getStatus()) WaylineJobStatusEnum.PAUSED.getVal() : entity.getStatus())
...@@ -482,6 +502,11 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin ...@@ -482,6 +502,11 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
endSecond = endSecond*1000; endSecond = endSecond*1000;
waylineJobQueryWrapper.between(WaylineJobEntity::getBeginTime, startSecond, endSecond); waylineJobQueryWrapper.between(WaylineJobEntity::getBeginTime, startSecond, endSecond);
waylineJobQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId); waylineJobQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId);
if (aboveSysAdminRole()) {
} else {
waylineJobQueryWrapper.eq(WaylineJobEntity::getOrgId, getOrgId());
}
List<WaylineJobEntity> waylineJobList = this.mapper.selectList(waylineJobQueryWrapper); List<WaylineJobEntity> waylineJobList = this.mapper.selectList(waylineJobQueryWrapper);
...@@ -655,6 +680,13 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin ...@@ -655,6 +680,13 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
public void exportTaskList(HttpServletResponse response, String workspaceId) { public void exportTaskList(HttpServletResponse response, String workspaceId) {
// 模拟数据(根据传入参数过滤) // 模拟数据(根据传入参数过滤)
LambdaQueryWrapper<WaylineJobEntity> waylineJobQueryWrapper = new LambdaQueryWrapper<>();
waylineJobQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId);
if (aboveSysAdminRole()) {
} else {
waylineJobQueryWrapper.eq(WaylineJobEntity::getOrgId, getOrgId());
}
List<WaylineJobEntity> list = this.list(); List<WaylineJobEntity> list = this.list();
// 创建 Excel // 创建 Excel
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment