Commit 76d8063c by gdj

增加org

parent 0286ca97
......@@ -39,6 +39,8 @@ public class CustomClaim {
@JsonAlias("workspace_id")
private String workspaceId;
@JsonAlias("org_id")
private String orgId;
/**
* Convert the custom claim data type to the Map type.
* @return map
......
......@@ -85,6 +85,13 @@ public class SecurityUtils {
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() {
DecodedJWT jwt = JwtUtil.verifyToken(getToken());
CustomClaim customClaim = new CustomClaim(jwt.getClaims());
......@@ -92,6 +99,12 @@ public class SecurityUtils {
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() {
Integer roleType = getRoleType();
......@@ -119,21 +132,21 @@ public class SecurityUtils {
return !isAdminRole();
}
public static boolean isProjectAdminRole(Integer roleType) {
return roleType == RoleTypeEnum.PROJECT_ADMIN.getVal();
public static boolean isOrgAdminRole(Integer roleType) {
return roleType == RoleTypeEnum.ORG_ADMIN.getVal();
}
public static boolean isNotProjectAdminRole(Integer roleType) {
return !isProjectAdminRole(roleType);
public static boolean isNotOrgAdminRole(Integer roleType) {
return !isOrgAdminRole(roleType);
}
public static boolean isProjectAdminRole() {
public static boolean isOrgAdminRole() {
Integer roleType = getRoleType();
return isProjectAdminRole(roleType);
return isOrgAdminRole(roleType);
}
public static boolean isNotProjectAdminRole() {
return !isProjectAdminRole();
public static boolean isNotOrgAdminRole() {
return !isOrgAdminRole();
}
public static boolean isAdminRole(Integer roleType) {
......@@ -189,7 +202,7 @@ public class SecurityUtils {
return aboveMemberRole(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){
if(roleType == role) {
......@@ -213,7 +226,7 @@ public class SecurityUtils {
}
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){
if(roleType == role) {
......@@ -237,7 +250,7 @@ public class SecurityUtils {
}
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){
if(roleType == role) {
......@@ -247,21 +260,21 @@ public class SecurityUtils {
return false;
}
public static boolean aboveProjectAdminRoleAndThrowError() {
boolean result = aboveProjectAdminRole();
public static boolean aboveOrgAdminRoleAndThrowError() {
boolean result = aboveOrgAdminRole();
if (!result) {
throw new RuntimeException("The current role has no permissions");
}
return true;
}
public static boolean aboveProjectAdminRole() {
public static boolean aboveOrgAdminRole() {
Integer roleType = getRoleType();
return aboveSysAdminRole(roleType);
}
public static boolean aboveProjectAdminRole(Integer roleType) {
int[] roleArr = {RoleTypeEnum.PROJECT_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()};
public static boolean aboveOrgAdminRole(Integer roleType) {
int[] roleArr = {RoleTypeEnum.ORG_ADMIN.getVal(), RoleTypeEnum.SYS_ADMIN.getVal()};
for(int role : roleArr) {
if(roleType == role) {
......
......@@ -270,4 +270,27 @@ public class DeviceController {
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;
import com.dji.sdk.common.HttpResultResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
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 org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
......@@ -30,7 +27,8 @@ public class LoginController {
String username = loginDTO.getUsername();
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")
......@@ -45,4 +43,18 @@ public class LoginController {
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;
import com.dji.sample.common.model.CustomClaim;
import com.dji.sample.manage.model.dto.UserListDTO;
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.sdk.common.HttpResultResponse;
import com.dji.sdk.common.PaginationData;
......@@ -34,16 +35,18 @@ public class UserController {
/**
* Paging to query all users in a workspace.
* @param param param
* @param page current page
* @param pageSize
* @param workspaceId
* @return
*/
@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,
@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);
}
......
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 {
@JsonProperty("device_enum")
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 {
private String nickname;
private String orgId;
@JsonProperty(value = "user_list")
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 {
@JsonProperty("workspace_id")
private String workspaceId;
@JsonProperty("org_id")
private String orgId;
@JsonProperty("user_type")
private Integer userType;
......
......@@ -22,4 +22,9 @@ public class UserLoginDTO {
@NonNull
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 {
@TableField(value = "login_time")
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 {
@TableField(value = "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 {
PILOT(2, "飞手"),
PROJECT_ADMIN(50, "项目管理员"),
ORG_ADMIN(50, "项目管理员"),
SYS_ADMIN(100, "系统管理员"),
......@@ -39,8 +39,8 @@ public enum RoleTypeEnum {
if (val == SYS_ADMIN.val) {
return SYS_ADMIN;
}
if (val == PROJECT_ADMIN.val) {
return PROJECT_ADMIN;
if (val == ORG_ADMIN.val) {
return ORG_ADMIN;
}
if (val == ADMIN.val) {
return ADMIN;
......
......@@ -27,6 +27,9 @@ public class DeviceSearchParam {
@JsonProperty("workspace_id")
private String workspaceId;
@JsonProperty("org_id")
private String orgId;
@JsonProperty("device_type")
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> {
boolean editAirport(DeviceDTO airport);
void shareDevice(DeviceDTO device);
void cancelShareDevice(DeviceDTO device);
/**
* Get the devices list in one workspace.
* @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;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dji.sample.manage.model.dto.UserDTO;
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.param.searchParam.UserSearchParam;
import com.dji.sdk.common.HttpResultResponse;
import com.dji.sdk.common.PaginationData;
......@@ -29,6 +31,13 @@ public interface IUserService extends IService<UserEntity> {
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.
* @param token
* @return
......@@ -36,12 +45,26 @@ public interface IUserService extends IService<UserEntity> {
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.
* @param workspaceId uuid
* @return
*/
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 deleteUser(String workspaceId, String userId);
......@@ -58,4 +81,6 @@ public interface IUserService extends IService<UserEntity> {
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 {
}
......@@ -12,6 +12,8 @@ import com.dji.sample.control.model.enums.DroneAuthorityEnum;
import com.dji.sample.manage.dao.IDeviceMapper;
import com.dji.sample.manage.model.dto.*;
import com.dji.sample.manage.model.entity.DeviceEntity;
import com.dji.sample.manage.model.entity.DeviceOrgEntity;
import com.dji.sample.manage.model.entity.UserOrgEntity;
import com.dji.sample.manage.model.enums.DeviceFirmwareStatusEnum;
import com.dji.sample.manage.model.enums.PropertySetFieldEnum;
import com.dji.sample.manage.model.enums.UserTypeEnum;
......@@ -52,12 +54,14 @@ import org.springframework.util.StringUtils;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import static com.dji.sample.common.util.SecurityUtils.aboveSysAdminRole;
import static com.dji.sample.common.constant.DeviceConstant.CUSTOM_DOCK_LIST;
import static com.dji.sample.common.util.SecurityUtils.*;
/**
*
......@@ -130,6 +134,12 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
@Autowired
private AbstractFirmwareService abstractFirmwareService;
@Autowired
private IDeviceOrgService deviceOrgService;
@Autowired
private IUserOrgService userOrgService;
@Override
public void subDeviceOffline(String deviceSn) {
// If no information about this device exists in the cache, the drone is considered to be offline.
......@@ -374,6 +384,7 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
.deviceDesc(entity.getDeviceDesc())
.controlSource(ControlSourceEnum.find(entity.getDeviceIndex()))
.workspaceId(entity.getWorkspaceId())
.orgId(entity.getOrgId())
.type(DeviceTypeEnum.find(entity.getDeviceType()))
.subType(DeviceSubTypeEnum.find(entity.getSubType()))
.domain(DeviceDomainEnum.find(entity.getDomain()))
......@@ -569,6 +580,56 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
wrapper.like(DeviceEntity::getBoundStatus, param.getBoundStatus());
}
if (StringUtils.hasText(param.getOrgId())) {
// 查询 指定团队的设备
LambdaQueryWrapper<DeviceOrgEntity> deviceOrgQueryWrapper = new LambdaQueryWrapper<>();
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getWorkspaceId, workspaceId);
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getOrgId, param.getOrgId());
List<DeviceOrgEntity> deviceOrgEntities = deviceOrgService.list(deviceOrgQueryWrapper);
if (CollectionUtils.isEmpty(deviceOrgEntities)) {
return new PaginationData<>(new ArrayList<>(), new Pagination(page, pageSize, 0));
}
List<String> deviceSnList = deviceOrgEntities.stream().map(DeviceOrgEntity::getDeviceSn).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(deviceSnList)) {
return new PaginationData<>(new ArrayList<>(), new Pagination(page, pageSize, 0));
}
wrapper.in(DeviceEntity::getDeviceSn, deviceSnList);
} else {
// 假如不是超级管理员 只能查询自己所属团队的设备
if (aboveSysAdminRole()) {
} else {
// 查询自己团队
LambdaQueryWrapper<UserOrgEntity> userOrgQueryWrapper = new LambdaQueryWrapper<>();
userOrgQueryWrapper.eq(UserOrgEntity::getUserId, getUserId());
userOrgQueryWrapper.eq(UserOrgEntity::getWorkspaceId, workspaceId);
List<UserOrgEntity> userOrgEntities = userOrgService.list(userOrgQueryWrapper);
if (CollectionUtils.isEmpty(userOrgEntities)) {
return new PaginationData<>(new ArrayList<>(), new Pagination(page, pageSize, 0));
}
List<String> userOrgIdList = userOrgEntities.stream().map(UserOrgEntity::getOrgId).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(userOrgIdList)) {
return new PaginationData<>(new ArrayList<>(), new Pagination(page, pageSize, 0));
}
// 查询 团队的设备
LambdaQueryWrapper<DeviceOrgEntity> deviceOrgQueryWrapper = new LambdaQueryWrapper<>();
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getWorkspaceId, workspaceId);
deviceOrgQueryWrapper.in(DeviceOrgEntity::getOrgId, userOrgIdList);
List<DeviceOrgEntity> deviceOrgEntities = deviceOrgService.list(deviceOrgQueryWrapper);
if (CollectionUtils.isEmpty(deviceOrgEntities)) {
return new PaginationData<>(new ArrayList<>(), new Pagination(page, pageSize, 0));
}
List<String> deviceSnList = deviceOrgEntities.stream().map(DeviceOrgEntity::getDeviceSn).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(deviceSnList)) {
return new PaginationData<>(new ArrayList<>(), new Pagination(page, pageSize, 0));
}
wrapper.in(DeviceEntity::getDeviceSn, deviceSnList);
}
}
Page<DeviceEntity> pagination = mapper.selectPage(new Page<>(page, pageSize), wrapper );
List<DeviceDTO> devicesList = pagination.getRecords().stream().map(this::deviceEntityConvertToDTO)
.peek(device -> {
......@@ -659,6 +720,11 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
queryWrapper.eq(DeviceEntity::getDeviceSn, deviceSn);
int delete = this.mapper.delete(queryWrapper);
// 删除 全部相关的权限
LambdaQueryWrapper<DeviceOrgEntity> deviceOrgQueryWrapper = new LambdaQueryWrapper<>();
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getDeviceSn, deviceSn);
boolean deviceOrgRemove = deviceOrgService.remove(deviceOrgQueryWrapper);
return delete > 0;
}
......@@ -841,6 +907,7 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
.userId(dto.getUserId())
.nickname(dto.getNickname())
.workspaceId(dto.getWorkspaceId())
.orgId(dto.getOrgId())
.boundStatus(dto.getBoundStatus())
.domain(Optional.ofNullable(dto.getDomain()).map(DeviceDomainEnum::getDomain).orElse(null))
.deviceType(Optional.ofNullable(dto.getType()).map(DeviceTypeEnum::getType).orElse(null))
......@@ -881,6 +948,7 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
DeviceEntity updateDrone = new DeviceEntity();
updateDrone.setId(dbDrone.getId());
updateDrone.setWorkspaceId(drone.getWorkspaceId());
updateDrone.setOrgId(StringUtils.hasText(drone.getOrgId()) ? drone.getOrgId() : getOrgId());
updateDrone.setNickname(drone.getNickname());
deviceEntity.setDeviceName(drone.getDeviceName());
......@@ -892,6 +960,23 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
updateDrone.setBoundStatus(true);
updateDrone.setBoundTime(System.currentTimeMillis());
int update = this.mapper.updateById(updateDrone);
// 增加 无人机和团队的关联关系
DeviceOrgEntity deviceOrgEntity = new DeviceOrgEntity();
deviceOrgEntity.setWorkspaceId(updateDrone.getWorkspaceId());
deviceOrgEntity.setOrgId(StringUtils.hasText(drone.getOrgId()) ? drone.getOrgId() : getOrgId());
deviceOrgEntity.setDeviceSn(updateDrone.getDeviceSn());
deviceOrgEntity.setDeviceId(dbDrone.getId());
deviceOrgEntity.setIsShared(0);
deviceOrgEntity.setCreatorId(getUserId());
deviceOrgEntity.setCreatorName(getUsername());
deviceOrgEntity.setCreateTime(System.currentTimeMillis());
deviceOrgEntity.setUpdaterId(getUserId());
deviceOrgEntity.setUpdaterName(getUsername());
deviceOrgEntity.setUpdateTime(System.currentTimeMillis());
boolean deviceOrgSaveRes = deviceOrgService.save(deviceOrgEntity);
return update > 0;
}
}
......@@ -901,6 +986,7 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
// M350(DeviceDomainEnum.DRONE, DeviceTypeEnum.M350, DeviceSubTypeEnum.ZERO),
deviceEntity.setNickname(drone.getNickname());
deviceEntity.setWorkspaceId(drone.getWorkspaceId());
deviceEntity.setOrgId(StringUtils.hasText(drone.getOrgId()) ? drone.getOrgId() : getOrgId());
// 类型
deviceEntity.setDomain(DeviceDomainEnum.DRONE.getDomain());
deviceEntity.setDeviceType(drone.getType().getType());
......@@ -927,6 +1013,23 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
// url_select The icon displayed on the remote control when it is selected.
int insert = this.mapper.insert(deviceEntity);
// 增加 无人机和团队的关联关系
DeviceOrgEntity deviceOrgEntity = new DeviceOrgEntity();
deviceOrgEntity.setWorkspaceId(deviceEntity.getWorkspaceId());
deviceOrgEntity.setOrgId(StringUtils.hasText(drone.getOrgId()) ? drone.getOrgId() : getOrgId());
deviceOrgEntity.setDeviceSn(deviceEntity.getDeviceSn());
deviceOrgEntity.setDeviceId(deviceEntity.getId());
deviceOrgEntity.setIsShared(0);
deviceOrgEntity.setCreatorId(getUserId());
deviceOrgEntity.setCreatorName(getUsername());
deviceOrgEntity.setCreateTime(System.currentTimeMillis());
deviceOrgEntity.setUpdaterId(getUserId());
deviceOrgEntity.setUpdaterName(getUsername());
deviceOrgEntity.setUpdateTime(System.currentTimeMillis());
boolean deviceOrgSaveRes = deviceOrgService.save(deviceOrgEntity);
return insert > 0;
}
......@@ -1018,6 +1121,7 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
newDrone.setWorkspaceId(dock.getWorkspaceId());
newDrone.setOrgId(StringUtils.hasText(dock.getOrgId()) ? dock.getOrgId() : getOrgId());
// 飞机型号
DeviceDTO children = dock.getChildren();
......@@ -1036,6 +1140,22 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
newDrone.setBoundTime(System.currentTimeMillis());
int droneInsert = mapper.insert(newDrone);
// 增加 无人机和团队的关联关系
DeviceOrgEntity deviceOrgEntity = new DeviceOrgEntity();
deviceOrgEntity.setWorkspaceId(newDrone.getWorkspaceId());
deviceOrgEntity.setOrgId(StringUtils.hasText(newDrone.getOrgId()) ? newDrone.getOrgId() : getOrgId());
deviceOrgEntity.setDeviceSn(newDrone.getDeviceSn());
deviceOrgEntity.setDeviceId(newDrone.getId());
deviceOrgEntity.setIsShared(0);
deviceOrgEntity.setCreatorId(getUserId());
deviceOrgEntity.setCreatorName(getUsername());
deviceOrgEntity.setCreateTime(System.currentTimeMillis());
deviceOrgEntity.setUpdaterId(getUserId());
deviceOrgEntity.setUpdaterName(getUsername());
deviceOrgEntity.setUpdateTime(System.currentTimeMillis());
boolean deviceOrgSaveRes = deviceOrgService.save(deviceOrgEntity);
} else {
// 飞机存在
......@@ -1054,13 +1174,31 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
// 绑定无人机
LambdaUpdateWrapper<DeviceEntity> updateDroneWrapper = new LambdaUpdateWrapper<>();
updateDroneWrapper.set(DeviceEntity::getWorkspaceId, dock.getWorkspaceId());
updateDroneWrapper.set(DeviceEntity::getOrgId, StringUtils.hasText(dock.getOrgId()) ? dock.getOrgId() : getOrgId());
updateDroneWrapper.eq(DeviceEntity::getDeviceSn, droneSn);
int updateDroneInt = mapper.update(new DeviceEntity(), updateDroneWrapper);
// 增加 无人机和团队的关联关系
DeviceOrgEntity deviceOrgEntity = new DeviceOrgEntity();
deviceOrgEntity.setWorkspaceId(drone.getWorkspaceId());
deviceOrgEntity.setOrgId(StringUtils.hasText(dock.getOrgId()) ? dock.getOrgId() : getOrgId());
deviceOrgEntity.setDeviceSn(drone.getDeviceSn());
deviceOrgEntity.setDeviceId(drone.getId());
deviceOrgEntity.setIsShared(0);
deviceOrgEntity.setCreatorId(getUserId());
deviceOrgEntity.setCreatorName(getUsername());
deviceOrgEntity.setCreateTime(System.currentTimeMillis());
deviceOrgEntity.setUpdaterId(getUserId());
deviceOrgEntity.setUpdaterName(getUsername());
deviceOrgEntity.setUpdateTime(System.currentTimeMillis());
boolean deviceOrgSaveRes = deviceOrgService.save(deviceOrgEntity);
}
}
}
addDockEntity.setWorkspaceId(dock.getWorkspaceId());
addDockEntity.setOrgId(StringUtils.hasText(dock.getOrgId()) ? dock.getOrgId() : getOrgId());
// 机场sn
addDockEntity.setDeviceSn(dock.getDeviceSn());
addDockEntity.setNickname(dock.getNickname());
......@@ -1095,6 +1233,23 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
int insert = this.mapper.insert(addDockEntity);
// 增加 机场和团队的关联关系
DeviceOrgEntity deviceOrgEntity = new DeviceOrgEntity();
deviceOrgEntity.setWorkspaceId(addDockEntity.getWorkspaceId());
deviceOrgEntity.setOrgId(StringUtils.hasText(dock.getOrgId()) ? dock.getOrgId() : getOrgId());
deviceOrgEntity.setDeviceSn(addDockEntity.getDeviceSn());
deviceOrgEntity.setDeviceId(addDockEntity.getId());
deviceOrgEntity.setIsShared(0);
deviceOrgEntity.setCreatorId(getUserId());
deviceOrgEntity.setCreatorName(getUsername());
deviceOrgEntity.setCreateTime(System.currentTimeMillis());
deviceOrgEntity.setUpdaterId(getUserId());
deviceOrgEntity.setUpdaterName(getUsername());
deviceOrgEntity.setUpdateTime(System.currentTimeMillis());
boolean deviceOrgSaveRes = deviceOrgService.save(deviceOrgEntity);
return insert > 0;
}
......@@ -1146,6 +1301,78 @@ public class DeviceServiceImpl extends ServiceImpl<IDeviceMapper, DeviceEntity>
return update > 0;
}
@Transactional(rollbackFor = Exception.class)
@Override
public void shareDevice(DeviceDTO device) {
if (!StringUtils.hasText(device.getDeviceSn())) {
throw new RuntimeException("share device sn is null");
}
if (!StringUtils.hasText(device.getOrgId())) {
throw new RuntimeException("share org id is null");
}
// 查询设备是否存在
LambdaQueryWrapper<DeviceEntity> deviceQueryWrapper = new LambdaQueryWrapper<>();
deviceQueryWrapper.eq(DeviceEntity::getDeviceSn, device.getDeviceSn());
DeviceEntity dbDevice = this.getOne(deviceQueryWrapper);
if (dbDevice == null) {
throw new RuntimeException("device does not exist!");
}
// 查询是否已经分享
LambdaQueryWrapper<DeviceOrgEntity> deviceOrgQueryWrapper = new LambdaQueryWrapper<>();
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getDeviceSn, device.getDeviceSn());
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getOrgId, device.getOrgId());
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getWorkspaceId, StringUtils.hasText(device.getWorkspaceId()) ? device.getWorkspaceId() : getWorkspaceId());
List<DeviceOrgEntity> deviceOrgEntities = deviceOrgService.list(deviceOrgQueryWrapper);
if (!CollectionUtils.isEmpty(deviceOrgEntities)) {
throw new RuntimeException("the device has been shared with the Org");
}
DeviceOrgEntity deviceOrgEntity = new DeviceOrgEntity();
deviceOrgEntity.setWorkspaceId(StringUtils.hasText(device.getWorkspaceId()) ? device.getWorkspaceId() : getWorkspaceId());
deviceOrgEntity.setOrgId(device.getOrgId());
deviceOrgEntity.setDeviceSn(device.getDeviceSn());
deviceOrgEntity.setDeviceId(dbDevice.getId());
deviceOrgEntity.setIsShared(1);
deviceOrgEntity.setCreatorId(getUserId());
deviceOrgEntity.setCreatorName(getUsername());
deviceOrgEntity.setCreateTime(System.currentTimeMillis());
deviceOrgEntity.setUpdaterId(getUserId());
deviceOrgEntity.setUpdaterName(getUsername());
deviceOrgEntity.setUpdateTime(System.currentTimeMillis());
boolean deviceOrgSaveRes = deviceOrgService.save(deviceOrgEntity);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void cancelShareDevice(DeviceDTO device) {
if (!StringUtils.hasText(device.getDeviceSn())) {
throw new RuntimeException("share device sn is null");
}
if (!StringUtils.hasText(device.getOrgId())) {
throw new RuntimeException("share org id is null");
}
// 查询设备是否存在
LambdaQueryWrapper<DeviceEntity> deviceQueryWrapper = new LambdaQueryWrapper<>();
deviceQueryWrapper.eq(DeviceEntity::getDeviceSn, device.getDeviceSn());
DeviceEntity dbDevice = this.getOne(deviceQueryWrapper);
if (dbDevice == null) {
throw new RuntimeException("device does not exist!");
}
// 删除已经分享的
LambdaQueryWrapper<DeviceOrgEntity> deviceOrgQueryWrapper = new LambdaQueryWrapper<>();
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getDeviceSn, device.getDeviceSn());
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getOrgId, device.getOrgId());
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getWorkspaceId, StringUtils.hasText(device.getWorkspaceId()) ? device.getWorkspaceId() : getWorkspaceId());
deviceOrgQueryWrapper.eq(DeviceOrgEntity::getIsShared, 1);
boolean deviceOrgSaveRes = deviceOrgService.remove(deviceOrgQueryWrapper);
}
/**
* Get the devices list in one workspace.
......
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;
import java.util.UUID;
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
*/
......@@ -74,6 +77,13 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp
fleetQueryWrapper.like(FleetEntity::getFleetName, param.getFleetName());
}
// 限制 团队
if (aboveSysAdminRole()) {
} else {
fleetQueryWrapper.eq(FleetEntity::getOrgId, getOrgId());
}
Page<FleetEntity> pagination = mapper.selectPage(new Page<>(page, pageSize), fleetQueryWrapper);
List<FleetDTO> fleetList = pagination.getRecords().stream()
......@@ -128,6 +138,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp
addFleet.setFleetSn(UUID.randomUUID().toString());
}
addFleet.setOrgId(StringUtils.hasText(fleetDTO.getOrgId()) ? fleetDTO.getOrgId() : getOrgId());
addFleet.setFleetName(fleetDTO.getFleetName());
addFleet.setNickname(fleetDTO.getNickname());
addFleet.setFleetDesc(fleetDTO.getFleetDesc());
......@@ -279,6 +290,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp
fleetDTO.setFleetDesc(fleetEntity.getFleetDesc());
fleetDTO.setUserId(fleetEntity.getUserId());
fleetDTO.setNickname(fleetEntity.getNickname());
fleetDTO.setOrgId(fleetEntity.getOrgId());
return fleetDTO;
}
......@@ -293,6 +305,7 @@ public class FleetServiceImpl extends ServiceImpl<IFleetMapper, FleetEntity> imp
fleetEntity.setFleetDesc(fleetDTO.getFleetDesc());
fleetEntity.setUserId(fleetDTO.getUserId());
fleetEntity.setNickname(fleetDTO.getNickname());
fleetEntity.setOrgId(fleetDTO.getOrgId());
return fleetEntity;
}
......
package com.dji.sample.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dji.sample.manage.dao.IOrgMapper;
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.entity.UserEntity;
import com.dji.sample.manage.model.entity.UserOrgEntity;
import com.dji.sample.manage.model.entity.WorkspaceEntity;
import com.dji.sample.manage.model.enums.RoleTypeEnum;
import com.dji.sample.manage.model.param.searchParam.OrgSearchParam;
import com.dji.sample.manage.service.IOrgService;
import com.dji.sample.manage.service.IUserService;
import com.dji.sdk.common.Pagination;
import com.dji.sdk.common.PaginationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Role;
import org.springframework.stereotype.Service;
import com.dji.sample.common.util.SecurityUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import static com.dji.sample.common.util.SecurityUtils.*;
@Service
@Transactional
public class OrgServiceImpl extends ServiceImpl<IOrgMapper, OrgEntity> implements IOrgService {
@Autowired
private UserOrgServiceImpl userOrgService;
@Autowired
@Lazy
private IUserService userService;
@Override
public Optional<OrgDTO> getOrgByOrgId(String orgId) {
LambdaQueryWrapper<OrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrgEntity::getOrgId, orgId);
OrgEntity entity = getOne(queryWrapper);
if (entity == null) {
return Optional.empty();
}
return Optional.of(entityConvertToDto(entity));
}
@Transactional(rollbackFor = Exception.class)
@Override
public OrgDTO addOrg(OrgDTO orgDTO) {
OrgEntity addOrgEntity = new OrgEntity();
addOrgEntity.setWorkspaceId(orgDTO.getWorkspaceId());
// 绑定码 不能重复
String bindCode = orgDTO.getBindCode();
if (!StringUtils.hasText(bindCode)) {
throw new RuntimeException("bindCode can't be null");
}
LambdaQueryWrapper<OrgEntity> bindCodeQueryWrapper = new LambdaQueryWrapper<>();
bindCodeQueryWrapper.eq(OrgEntity::getBindCode, bindCode);
List<OrgEntity> bindCodeOrgList = this.list(bindCodeQueryWrapper);
if (!CollectionUtils.isEmpty(bindCodeOrgList)) {
throw new RuntimeException("bindCode is already exit");
}
addOrgEntity.setBindCode(orgDTO.getBindCode());
// 团队编码不能重复
if (StringUtils.hasText(orgDTO.getOrgId())) {
LambdaQueryWrapper<OrgEntity> orgIdQueryWrapper = new LambdaQueryWrapper<>();
orgIdQueryWrapper.eq(OrgEntity::getOrgId, orgDTO.getOrgId());
List<OrgEntity> orgIdOrgList = this.list(orgIdQueryWrapper);
if (!CollectionUtils.isEmpty(orgIdOrgList)) {
throw new RuntimeException("orgId is already exit");
}
addOrgEntity.setOrgId(orgDTO.getOrgId());
} else {
addOrgEntity.setOrgId(UUID.randomUUID().toString());
}
addOrgEntity.setOrgName(orgDTO.getOrgName());
addOrgEntity.setOrgDesc(orgDTO.getOrgDesc());
addOrgEntity.setCreateTime(System.currentTimeMillis());
addOrgEntity.setCreatorId(getUserId());
addOrgEntity.setCreatorName(getUsername());
addOrgEntity.setUpdateTime(System.currentTimeMillis());
addOrgEntity.setUpdaterId(getUserId());
addOrgEntity.setUpdaterName(getUsername());
// 新增orgAdmin
UserEntity orgAdmin = new UserEntity();
orgAdmin.setWorkspaceId(orgDTO.getWorkspaceId());
orgAdmin.setUsername(orgDTO.getAdminUserName());
orgAdmin.setPassword(orgDTO.getAdminUserPassword());
UserEntity saveAdmin = userService.addOrgAdminUser(orgAdmin);
addOrgEntity.setAdminUserId(saveAdmin.getUserId());
boolean addOrgRes = this.save(addOrgEntity);
// 增加用户和团队的权限
UserOrgEntity userOrgEntity = new UserOrgEntity();
userOrgEntity.setOrgId(addOrgEntity.getOrgId());
userOrgEntity.setUserId(saveAdmin.getUserId());
userOrgEntity.setWorkspaceId(addOrgEntity.getWorkspaceId());
userOrgEntity.setCreateTime(System.currentTimeMillis());
userOrgEntity.setCreatorId(getUserId());
userOrgEntity.setCreatorName(getUsername());
userOrgEntity.setUpdateTime(System.currentTimeMillis());
userOrgEntity.setUpdaterId(getUserId());
userOrgEntity.setUpdaterName(getUsername());
userOrgEntity.setRoleType(RoleTypeEnum.ORG_ADMIN.getVal());
boolean userOrgSaveRes = userOrgService.save(userOrgEntity);
OrgDTO entityConvertToDto = entityConvertToDto(addOrgEntity);
return entityConvertToDto;
}
@Override
public boolean editOrg(OrgDTO orgDTO) {
if (orgDTO.getId() == null && !StringUtils.hasText(orgDTO.getOrgId())) {
throw new RuntimeException("id and orgId is null");
}
LambdaQueryWrapper<OrgEntity> queryDbWrapper = new LambdaQueryWrapper<>();
if (orgDTO.getId() != null) {
queryDbWrapper.eq(OrgEntity::getId, orgDTO.getId());
} else {
queryDbWrapper.eq(OrgEntity::getOrgId, orgDTO.getOrgId());
}
OrgEntity dbOrg = this.getOne(queryDbWrapper);
LambdaUpdateWrapper<OrgEntity> updateWrapper = new LambdaUpdateWrapper<>();
if (orgDTO.getId() != null) {
updateWrapper.eq(OrgEntity::getId, orgDTO.getId());
} else {
updateWrapper.eq(OrgEntity::getOrgId, orgDTO.getOrgId());
}
// 绑定码 不能重复
String bindCode = orgDTO.getBindCode();
if (StringUtils.hasText(bindCode)) {
if (!bindCode.equals(orgDTO.getBindCode())) {
// 查询
LambdaQueryWrapper<OrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrgEntity::getBindCode, bindCode);
List<OrgEntity> bingCodeList = this.list(queryWrapper);
if (!CollectionUtils.isEmpty(bingCodeList)) {
throw new RuntimeException("bindCode is already exit");
}
}
updateWrapper.set(OrgEntity::getBindCode, bindCode);
}
// 修改 名称
if (StringUtils.hasText(orgDTO.getOrgName())) {
updateWrapper.set(OrgEntity::getOrgName, orgDTO.getOrgName());
}
// 修改 描述
if (StringUtils.hasText(orgDTO.getOrgDesc())) {
updateWrapper.set(OrgEntity::getOrgDesc, orgDTO.getOrgDesc());
}
boolean update = this.update(updateWrapper);
return update;
}
@Override
public boolean delOrg(OrgDTO orgDTO) {
if (orgDTO.getId() == null && !StringUtils.hasText(orgDTO.getOrgId())) {
throw new RuntimeException("id and orgId is null");
}
boolean remove;
if (orgDTO.getId() != null) {
remove = this.removeById(orgDTO.getId());
} else {
LambdaQueryWrapper<OrgEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(OrgEntity::getOrgId, orgDTO.getOrgId());
remove = this.remove(wrapper);
}
return remove;
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean applyOrg(OrgJoinDTO orgDTO) {
// 查询绑定码是否正确
if (!StringUtils.hasText(orgDTO.getBindCode())) {
throw new RuntimeException("bindCode is null");
}
if (!StringUtils.hasText(orgDTO.getOrgDesc()) && !StringUtils.hasText(orgDTO.getOrgId())) {
throw new RuntimeException("org info is null");
}
LambdaQueryWrapper<OrgEntity> orgQueryWrapper = new LambdaQueryWrapper<>();
orgQueryWrapper.eq(OrgEntity::getWorkspaceId, getWorkspaceId());
if (StringUtils.hasText(orgDTO.getOrgId())) {
orgQueryWrapper.eq(OrgEntity::getOrgId, orgDTO.getOrgId());
} else if (StringUtils.hasText(orgDTO.getOrgName())) {
orgQueryWrapper.eq(OrgEntity::getOrgName, orgDTO.getOrgName());
}
orgQueryWrapper.eq(OrgEntity::getBindCode, orgDTO.getBindCode());
OrgEntity orgEntity = this.getOne(orgQueryWrapper);
if (orgEntity == null) {
throw new RuntimeException("org info or bindCode is error");
}
String joinUserId = getUserId();
String joinOrgId = orgEntity.getOrgId();
Integer joinUserRoleType = RoleTypeEnum.MEMBER.getVal();
boolean addOrgRes = userOrgService.addUserToOrg(joinUserId, joinOrgId, joinUserRoleType);
return addOrgRes;
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean joinOrgByAdmin(OrgJoinDTO orgDTO) {
if (!aboveAdminRole()) {
throw new RuntimeException("current roleType is not admin");
}
if (orgDTO.getJoinUserRoleType() != null) {
if (RoleTypeEnum.find(orgDTO.getJoinUserRoleType()) == RoleTypeEnum.UNKNOWN) {
throw new RuntimeException("org roleType is error");
}
}
if (!StringUtils.hasText(orgDTO.getJoinUserId()) && !StringUtils.hasText(orgDTO.getJoinUserName())) {
throw new RuntimeException("user info is null");
}
if (!StringUtils.hasText(orgDTO.getOrgId()) && !StringUtils.hasText(orgDTO.getOrgName())) {
throw new RuntimeException("org info is null");
}
LambdaQueryWrapper<OrgEntity> orgQueryWrapper = new LambdaQueryWrapper<>();
orgQueryWrapper.eq(OrgEntity::getWorkspaceId, getWorkspaceId());
if (StringUtils.hasText(orgDTO.getOrgId())) {
orgQueryWrapper.eq(OrgEntity::getOrgId, orgDTO.getOrgId());
} else if (StringUtils.hasText(orgDTO.getOrgName())) {
orgQueryWrapper.eq(OrgEntity::getOrgName, orgDTO.getOrgName());
}
OrgEntity orgEntity = this.getOne(orgQueryWrapper);
if (orgEntity == null) {
throw new RuntimeException("org info or bindCode is error");
}
if (aboveSysAdminRole()) {
// 系统管理员可以增加全部组织
// 非系统管理员权限
if (aboveSysAdminRole(orgDTO.getJoinUserRoleType())) {
throw new RuntimeException("org roleType is error");
}
} else if (aboveAdminRole()) {
// 管理员只能增加自己当前组织
if (!orgEntity.getOrgId().equals(getOrgId())) {
throw new RuntimeException("admin can not select other org!");
}
// 非组织管理员权限
if (aboveOrgAdminRole(orgDTO.getJoinUserRoleType())) {
throw new RuntimeException("org roleType is error");
}
}
String joinUserId;
// 查询 用户是否存在
if (!StringUtils.hasText(orgDTO.getJoinUserId())) {
String joinUserName = orgDTO.getJoinUserName();
LambdaQueryWrapper<UserEntity> userQueryWrapper = new LambdaQueryWrapper<>();
userQueryWrapper.eq(UserEntity::getUsername, joinUserName);
UserEntity joinUser = userService.getOne(userQueryWrapper);
if (joinUser == null) {
throw new RuntimeException("joinUserName is error");
}
joinUserId = joinUser.getUserId();
} else {
joinUserId = StringUtils.hasText(orgDTO.getJoinUserId()) ? orgDTO.getJoinUserId() : getUserId();
}
String joinOrgId = orgEntity.getOrgId();
Integer joinUserRoleType = orgDTO.getJoinUserRoleType() != null ? orgDTO.getJoinUserRoleType() : RoleTypeEnum.MEMBER.getVal();
boolean addOrgRes = userOrgService.addUserToOrg(joinUserId, joinOrgId, joinUserRoleType);
return addOrgRes;
}
@Override
public PaginationData<OrgDTO> getOrgPage(OrgSearchParam param, Long page, Long pageSize) {
LambdaQueryWrapper<OrgEntity> orgQueryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.hasText(param.getOrgId())) {
orgQueryWrapper.eq(OrgEntity::getOrgId, param.getOrgId());
}
if (StringUtils.hasText(param.getWorkspaceId())) {
orgQueryWrapper.eq(OrgEntity::getWorkspaceId, param.getWorkspaceId());
}
// 增加查询内容
if (StringUtils.hasText(param.getOrgDesc())) {
orgQueryWrapper.like(OrgEntity::getOrgDesc, param.getOrgDesc());
}
Page<OrgEntity> pagination = this.page(new Page<>(page, pageSize), orgQueryWrapper);
List<OrgDTO> orgDTOList = pagination.getRecords().stream()
.map(this::entityConvertToDto)
//.peek(fleet -> {})
.collect(Collectors.toList());
return new PaginationData<>(orgDTOList, new Pagination(pagination.getCurrent(), pagination.getSize(), pagination.getTotal()));
}
@Override
public OrgDTO getOrg(OrgSearchParam param) {
LambdaQueryWrapper<OrgEntity> orgQueryWrapper = new LambdaQueryWrapper<>();
orgQueryWrapper.eq(OrgEntity::getWorkspaceId, param.getWorkspaceId());
if (StringUtils.hasText(param.getRoleUserId())) {
// 查询 权限团队
LambdaQueryWrapper<UserOrgEntity> userOrgQueryWrapper = new LambdaQueryWrapper<>();
userOrgQueryWrapper.eq(UserOrgEntity::getUserId, param.getRoleUserId());
List<UserOrgEntity> userOrgEntities = userOrgService.list(userOrgQueryWrapper);
if (CollectionUtils.isEmpty(userOrgEntities)) {
return OrgDTO.builder().build();
}
List<String> roleOrgIdList = userOrgEntities.stream().map(UserOrgEntity::getOrgId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(roleOrgIdList)) {
return OrgDTO.builder().build();
}
orgQueryWrapper.in(OrgEntity::getOrgId, roleOrgIdList);
}
if (StringUtils.hasText(param.getOrgId())) {
orgQueryWrapper.eq(OrgEntity::getOrgId, param.getOrgId());
}
if (param.getId() != null) {
orgQueryWrapper.eq(OrgEntity::getId, param.getId());
}
OrgEntity orgEntity = this.getOne(orgQueryWrapper);
OrgDTO orgDTO = this.entityConvertToDto(orgEntity);
return orgDTO;
}
@Override
public String getWorkspaceIdByOrgId(String orgId) {
LambdaQueryWrapper<OrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrgEntity::getOrgId, orgId)
.select(OrgEntity::getWorkspaceId);
OrgEntity entity = getOne(queryWrapper);
return entity != null ? entity.getWorkspaceId() : null;
}
@Override
public boolean deleteOrg(String orgId) {
LambdaQueryWrapper<OrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrgEntity::getOrgId, orgId);
return remove(queryWrapper);
}
@Override
public boolean createOrg(OrgDTO orgDTO) {
OrgEntity entity = new OrgEntity();
entity.setOrgId(orgDTO.getOrgId());
entity.setOrgName(orgDTO.getOrgName());
entity.setOrgDesc(orgDTO.getOrgDesc());
entity.setWorkspaceId(orgDTO.getWorkspaceId());
// 设置创建者和更新者信息
String currentUserId = SecurityUtils.getUserId();
String currentUserName = SecurityUtils.getUsername();
entity.setCreatorId(currentUserId);
entity.setCreatorName(currentUserName);
entity.setUpdaterId(currentUserId);
entity.setUpdaterName(currentUserName);
entity.setBindCode(orgDTO.getBindCode());
save(entity);
return entity.getOrgId() != null;
}
@Override
public boolean updateOrg(OrgDTO orgDTO) {
LambdaQueryWrapper<OrgEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OrgEntity::getOrgId, orgDTO.getOrgId());
OrgEntity entity = getOne(queryWrapper);
if (entity == null) {
return false;
}
entity.setOrgName(orgDTO.getOrgName());
entity.setOrgDesc(orgDTO.getOrgDesc());
entity.setWorkspaceId(orgDTO.getWorkspaceId());
// 设置更新者信息
entity.setUpdaterId(SecurityUtils.getUserId());
entity.setUpdaterName(SecurityUtils.getUsername());
return updateById(entity);
}
@Override
public List<OrgDTO> getAllOrgs() {
List<OrgEntity> entities = list();
return entities.stream()
.map(this::entityConvertToDto)
.collect(Collectors.toList());
}
private OrgDTO entityConvertToDto(OrgEntity entity) {
if (entity == null) {
return null;
}
UserEntity adminUser = null;
if (StringUtils.hasText(entity.getAdminUserId())) {
LambdaQueryWrapper<UserEntity> userWrapper = new LambdaQueryWrapper<>();
userWrapper.eq(UserEntity::getUserId, entity.getAdminUserId());
adminUser = userService.getOne(userWrapper);
}
return OrgDTO.builder()
.id(entity.getId())
.orgId(entity.getOrgId())
.orgName(entity.getOrgName())
.orgDesc(entity.getOrgDesc())
.workspaceId(entity.getWorkspaceId())
.createTime(Objects.nonNull(entity.getCreateTime()) ? LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getCreateTime()), ZoneId.systemDefault()) : null)
.updateTime(Objects.nonNull(entity.getUpdateTime()) ? LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getUpdateTime()), ZoneId.systemDefault()) : null)
.bindCode(entity.getBindCode())
.adminUserName(adminUser != null ? adminUser.getUsername() : null)
.build();
}
}
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;
}
}
......@@ -13,13 +13,16 @@ import com.dji.sample.common.util.JwtUtil;
import com.dji.sample.common.util.SecurityUtils;
import com.dji.sample.component.mqtt.config.MqttPropertyConfiguration;
import com.dji.sample.manage.dao.IUserMapper;
import com.dji.sample.manage.model.dto.UserDTO;
import com.dji.sample.manage.model.dto.UserListDTO;
import com.dji.sample.manage.model.dto.WorkspaceDTO;
import com.dji.sample.manage.model.dto.*;
import com.dji.sample.manage.model.entity.OrgEntity;
import com.dji.sample.manage.model.entity.UserEntity;
import com.dji.sample.manage.model.entity.UserOrgEntity;
import com.dji.sample.manage.model.entity.WorkspaceEntity;
import com.dji.sample.manage.model.enums.RoleTypeEnum;
import com.dji.sample.manage.model.enums.UserTypeEnum;
import com.dji.sample.manage.model.param.searchParam.UserSearchParam;
import com.dji.sample.manage.service.IOrgService;
import com.dji.sample.manage.service.IUserOrgService;
import com.dji.sample.manage.service.IUserService;
import com.dji.sample.manage.service.IWorkspaceService;
import com.dji.sdk.common.HttpResultResponse;
......@@ -54,6 +57,11 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
private MqttPropertyConfiguration mqttPropertyConfiguration;
@Autowired
private IOrgService orgService;
@Autowired
private IUserOrgService userOrgService;
@Autowired
private IWorkspaceService workspaceService;
@Override
......@@ -72,6 +80,108 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
return HttpResultResponse.success(user);
}
/**
* Verify the username and password to log in.
* @param loginDTO
* @return
*/
@Override
public
HttpResultResponse userLogin(UserLoginDTO loginDTO) {
String username = loginDTO.getUsername();
Integer flag = loginDTO.getFlag();
String password = loginDTO.getPassword();
String orgId = loginDTO.getOrgId();
String orgName = loginDTO.getOrgName();
if (!StringUtils.hasText(loginDTO.getOrgId()) && !StringUtils.hasText(loginDTO.getOrgName())) {
orgId = "123456";
}
// check user
UserEntity userEntity = this.getUserByUsername(username);
if (userEntity == null) {
return new HttpResultResponse()
.setCode(HttpStatus.UNAUTHORIZED.value())
.setMessage("invalid username");
}
// 修改逻辑 跳过web判定
if (flag != UserTypeEnum.WEB.getVal()) {
if (flag.intValue() != userEntity.getUserType().intValue()) {
return HttpResultResponse.error("The account type does not match.");
}
}
// 密码加密验证
// if (!password.equals(userEntity.getPassword())) {
if (!SecurityUtils.matchesPassword(password, userEntity.getPassword())) {
return new HttpResultResponse()
.setCode(HttpStatus.UNAUTHORIZED.value())
.setMessage("invalid password");
}
Optional<WorkspaceDTO> workspaceOpt = workspaceService.getWorkspaceByWorkspaceId(userEntity.getWorkspaceId());
if (workspaceOpt.isEmpty()) {
return new HttpResultResponse()
.setCode(HttpStatus.UNAUTHORIZED.value())
.setMessage("invalid workspace id");
}
// 查询 org
LambdaQueryWrapper<OrgEntity> orgQueryWrapper = new LambdaQueryWrapper<>();
orgQueryWrapper.eq(OrgEntity::getWorkspaceId, userEntity.getWorkspaceId());
if (StringUtils.hasText(orgId)) {
orgQueryWrapper.eq(OrgEntity::getOrgId, orgId);
} else if (StringUtils.hasText(orgName)) {
orgQueryWrapper.eq(OrgEntity::getOrgName, orgName);
} else {
return new HttpResultResponse()
.setCode(HttpStatus.UNAUTHORIZED.value())
.setMessage("invalid org info");
}
List<OrgEntity> orgEntityList = orgService.list(orgQueryWrapper);
if (CollectionUtils.isEmpty(orgEntityList)) {
return new HttpResultResponse()
.setCode(HttpStatus.UNAUTHORIZED.value())
.setMessage("invalid org id");
}
OrgEntity orgEntity = orgEntityList.get(0);
// 查询权限
Integer roleType;
// 系统管理员
if (userEntity.getRoleType() != null && userEntity.getRoleType() == RoleTypeEnum.SYS_ADMIN.getVal()) {
roleType = userEntity.getRoleType();
} else {
// 团队权限
LambdaQueryWrapper<UserOrgEntity> userOrgWrapper = new LambdaQueryWrapper<>();
userOrgWrapper.eq(UserOrgEntity::getUserId, userEntity.getUserId());
userOrgWrapper.eq(UserOrgEntity::getOrgId, orgEntity.getOrgId());
List<UserOrgEntity> userOrgEntityList = userOrgService.list(userOrgWrapper);
if (CollectionUtils.isEmpty(userOrgEntityList)) {
return new HttpResultResponse()
.setCode(HttpStatus.UNAUTHORIZED.value())
.setMessage("invalid org role");
}
UserOrgEntity userOrgEntity = userOrgEntityList.get(0);
roleType = userOrgEntity.getRoleType();
}
// 创建token
CustomClaim customClaim = new CustomClaim(userEntity.getUserId(),
userEntity.getUsername(), userEntity.getUserType(),
roleType,
workspaceOpt.get().getWorkspaceId(), orgEntity.getOrgId());
// create token
String token = JwtUtil.createToken(customClaim.convertToMap());
UserDTO userDTO = entityConvertToDTO(userEntity);
userDTO.setMqttAddr(MqttPropertyConfiguration.getBasicMqttAddress());
userDTO.setAccessToken(token);
userDTO.setWorkspaceId(workspaceOpt.get().getWorkspaceId());
userDTO.setRoleType(roleType);
userDTO.setOrgId(orgEntity.getOrgId());
return HttpResultResponse.success(userDTO);
}
@Override
public HttpResultResponse userLogin(String username, String password, Integer flag) {
// check user
......@@ -106,7 +216,7 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
CustomClaim customClaim = new CustomClaim(userEntity.getUserId(),
userEntity.getUsername(), userEntity.getUserType(),
userEntity.getRoleType(),
workspaceOpt.get().getWorkspaceId());
workspaceOpt.get().getWorkspaceId(), null);
// create token
String token = JwtUtil.createToken(customClaim.convertToMap());
......@@ -141,9 +251,68 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
}
user.setWorkspaceId(customClaim.getWorkspaceId());
user.setAccessToken(refreshToken);
user.setRoleType(customClaim.getRoleType());
user.setOrgId(customClaim.getOrgId());
return Optional.of(user);
}
/**
* Create a user object containing a new token.
* @param token
* @return
*/
@Override
public Optional<UserDTO> changeOrgRefreshToken(String token, String orgId) {
if (!StringUtils.hasText(token)) {
return Optional.empty();
}
if (!StringUtils.hasText(orgId)) {
return Optional.empty();
}
CustomClaim customClaim;
try {
DecodedJWT jwt = JwtUtil.verifyToken(token);
customClaim = new CustomClaim(jwt.getClaims());
} catch (TokenExpiredException e) {
customClaim = new CustomClaim(JWT.decode(token).getClaims());
} catch (Exception e) {
e.printStackTrace();
return Optional.empty();
}
// 查询权限
Integer roleType;
// 组织 验证
customClaim.setOrgId(orgId);
if (customClaim.getRoleType() == RoleTypeEnum.SYS_ADMIN.getVal()) {
roleType = customClaim.getRoleType();
} else {
// 查询团队权限
LambdaQueryWrapper<UserOrgEntity> userOrgWrapper = new LambdaQueryWrapper<>();
userOrgWrapper.eq(UserOrgEntity::getUserId, customClaim.getId());
userOrgWrapper.eq(UserOrgEntity::getOrgId, orgId);
List<UserOrgEntity> userOrgEntityList = userOrgService.list(userOrgWrapper);
if (CollectionUtils.isEmpty(userOrgEntityList)) {
throw new RuntimeException("invalid org role");
}
UserOrgEntity userOrgEntity = userOrgEntityList.get(0);
roleType = userOrgEntity.getRoleType();
customClaim.setRoleType(roleType);
}
String refreshToken = JwtUtil.createToken(customClaim.convertToMap());
UserDTO user = entityConvertToDTO(this.getUserByUsername(customClaim.getUsername()));
if (Objects.isNull(user)) {
return Optional.empty();
}
user.setWorkspaceId(customClaim.getWorkspaceId());
user.setAccessToken(refreshToken);
user.setRoleType(roleType);
user.setOrgId(orgId);
return Optional.of(user);
}
@Override
public PaginationData<UserListDTO> getUsersByWorkspaceId(long page, long pageSize, String workspaceId) {
Page<UserEntity> userEntityPage = mapper.selectPage(
......@@ -157,6 +326,60 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
return new PaginationData<>(usersList, new Pagination(userEntityPage.getCurrent(), userEntityPage.getSize(), userEntityPage.getTotal()));
}
/**
* Query information about all users.
* @param workspaceId uuid
* @return
*/
@Override
public PaginationData<UserListDTO> getUsers(UserSearchParam param, String workspaceId, long page, long pageSize) {
LambdaQueryWrapper<UserEntity> userQueryWrapper = new LambdaQueryWrapper<>();
userQueryWrapper.eq(UserEntity::getWorkspaceId, workspaceId);
// 查询指定 团队的人员
if (StringUtils.hasText(param.getOrgId())) {
// 需要增加限制
LambdaQueryWrapper<UserOrgEntity> userOrgQueryWrapper = new LambdaQueryWrapper<>();
userOrgQueryWrapper.eq(UserOrgEntity::getWorkspaceId, workspaceId);
userOrgQueryWrapper.eq(UserOrgEntity::getOrgId, param.getOrgId());
List<UserOrgEntity> userOrgEntities = userOrgService.list(userOrgQueryWrapper);
if (CollectionUtils.isEmpty(userOrgEntities)) {
return new PaginationData<>();
}
List<String> userOrgUserIdList = userOrgEntities.stream().map(UserOrgEntity::getUserId).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(userOrgUserIdList)) {
return new PaginationData<>();
}
userQueryWrapper.in(UserEntity::getUserId, userOrgUserIdList);
} else {
// 假如不是 系统管理员 只能查询自己团队的用户
if (aboveSysAdminRole()) {
} else {
String orgId = getOrgId();
LambdaQueryWrapper<UserOrgEntity> userOrgQueryWrapper = new LambdaQueryWrapper<>();
userOrgQueryWrapper.eq(UserOrgEntity::getWorkspaceId, workspaceId);
userOrgQueryWrapper.eq(UserOrgEntity::getOrgId, orgId);
List<UserOrgEntity> userOrgEntities = userOrgService.list(userOrgQueryWrapper);
if (CollectionUtils.isEmpty(userOrgEntities)) {
return new PaginationData<>();
}
List<String> userOrgUserIdList = userOrgEntities.stream().map(UserOrgEntity::getUserId).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(userOrgUserIdList)) {
return new PaginationData<>();
}
userQueryWrapper.in(UserEntity::getUserId, userOrgUserIdList);
}
}
Page<UserEntity> userEntityPage = this.page(new Page<>(page, pageSize), userQueryWrapper);
List<UserListDTO> usersList = userEntityPage.getRecords()
.stream()
.map(this::entity2UserListDTO)
.collect(Collectors.toList());
return new PaginationData<>(usersList, new Pagination(userEntityPage.getCurrent(), userEntityPage.getSize(), userEntityPage.getTotal()));
}
@Override
public Boolean updateUser(String workspaceId, String userId, UserListDTO user) {
UserEntity userEntity = mapper.selectOne(
......@@ -202,7 +425,7 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
// throw new RuntimeException("Failed to delete admin");
// }
// 然后 假如是删除管理员 不能删除 项目管理员
if (userEntity.getRoleType() == RoleTypeEnum.PROJECT_ADMIN.getVal()) {
if (userEntity.getRoleType() == RoleTypeEnum.ORG_ADMIN.getVal()) {
throw new RuntimeException("can't delete workspace project admin");
}
if (userEntity.getRoleType() == RoleTypeEnum.ADMIN.getVal()) {
......@@ -215,6 +438,13 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
}
int delete = mapper.delete(queryWrapper);
// 删除相关用户组织表
LambdaQueryWrapper<UserOrgEntity> userOrgQueryWrapper = new LambdaQueryWrapper<>();
userOrgQueryWrapper.eq(UserOrgEntity::getUserId, userEntity.getUserId());
userOrgQueryWrapper.eq(UserOrgEntity::getWorkspaceId, userEntity.getWorkspaceId());
boolean userOrgDelRes = userOrgService.remove(userOrgQueryWrapper);
return delete > 0;
}
......@@ -257,6 +487,22 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
userEntity.setWorkspaceId(workspaceId);
int insert = this.mapper.insert(userEntity);
// 增加用户权限
UserOrgEntity userOrgEntity = new UserOrgEntity();
userOrgEntity.setWorkspaceId(workspaceId);
userOrgEntity.setOrgId(getOrgId());
userOrgEntity.setUserId(userEntity.getUserId());
userOrgEntity.setRoleType(user.getRoleType() != null ? user.getRoleType() : RoleTypeEnum.MEMBER.getVal());
// private Integer status;
userOrgEntity.setCreatorId(getUserId());
userOrgEntity.setCreatorName(getUsername());
userOrgEntity.setCreateTime(System.currentTimeMillis());
userOrgEntity.setUpdaterId(getUserId());
userOrgEntity.setUpdaterName(getUsername());
userOrgEntity.setUpdateTime(System.currentTimeMillis());
boolean userOrgSaveRes = userOrgService.save(userOrgEntity);
return insert > 0;
}
......@@ -292,6 +538,41 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, UserEntity> implem
}
@Transactional(rollbackFor = Exception.class)
@Override
public UserEntity addOrgAdminUser(UserEntity user) {
// 系统管理员才能创建
aboveSysAdminRoleAndThrowError();
// 判断用户是否存在 用户存在直接返回
// 用户名不能重复
String username = user.getUsername();
LambdaQueryWrapper<UserEntity> userQueryWrapper = new LambdaQueryWrapper<>();
userQueryWrapper.eq(UserEntity::getUsername, username);
// userQueryWrapper.eq(UserEntity::getWorkspaceId, user.getWorkspaceId());
List<UserEntity> nameUserList = this.list(userQueryWrapper);
if (!CollectionUtils.isEmpty(nameUserList)) {
// throw new RuntimeException("the username is already existed");
return nameUserList.get(0);
}
UserEntity userEntity = new UserEntity();
userEntity.setUserType(UserTypeEnum.WEB.getVal());
// userEntity.setRoleType(RoleTypeEnum.ADMIN.getVal());
userEntity.setUserId(UUID.randomUUID().toString());
userEntity.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
userEntity.setUsername(user.getUsername());
userEntity.setWorkspaceId(user.getWorkspaceId());
boolean save = this.save(userEntity);
return userEntity;
}
/**
* Convert database entity objects into user data transfer object.
* @param entity
......
......@@ -51,4 +51,6 @@ public class WaylineFileDTO {
@JsonAlias("isDir")
private Integer isDir;
private String orgId;
}
......@@ -53,4 +53,6 @@ public class WaylineFileTreeVO {
private List<WaylineFileTreeVO> children;
private String orgId;
}
......@@ -87,4 +87,6 @@ public class WaylineJobDTO {
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
private SimulateMission simulateMission;
private String orgId;
}
......@@ -74,4 +74,8 @@ public class WaylineFileEntity implements Serializable {
// @TableLogic
@TableField("is_deleted")
private Boolean isDeleted;
@TableField("org_id")
private String orgId;
}
......@@ -89,4 +89,10 @@ public class WaylineJobEntity implements Serializable {
@TableField("task_scene")
private Integer taskScene;
/**
* orgId
*/
@TableField("org_id")
private String orgId;
}
......@@ -48,4 +48,7 @@ public class CreateJobParam {
private List<Long> taskDays;
private List<List<Long>> taskPeriods;
private String orgId;
}
......@@ -26,4 +26,7 @@ public class WaylineJobSearchParam {
@JsonProperty("job_ids")
private String jobIds;
@JsonProperty("org_id")
private String orgId;
}
......@@ -48,6 +48,8 @@ import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
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;
/**
......@@ -67,11 +69,16 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
@Override
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param) {
// Paging Query
Page<WaylineFileEntity> page = mapper.selectPage(
new Page<WaylineFileEntity>(param.getPage(), param.getPageSize()),
new LambdaQueryWrapper<WaylineFileEntity>()
.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal())
LambdaQueryWrapper<WaylineFileEntity> waylineFileaQueryWrapper = new LambdaQueryWrapper<WaylineFileEntity>();
if (aboveSysAdminRole()) {
} else {
waylineFileaQueryWrapper.eq(WaylineFileEntity::getOrgId, getOrgId());
}
waylineFileaQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal())
.eq(WaylineFileEntity::getWorkspaceId, workspaceId)
.eq(Objects.nonNull(param.getFavorited()), WaylineFileEntity::getFavorited, param.getFavorited())
.and(param.getTemplateType() != null, wrapper -> {
......@@ -91,7 +98,11 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
})
.like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey())
// 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.
List<GetWaylineListResponse> records = page.getRecords()
......@@ -144,6 +155,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
WaylineFileEntity file = this.dtoConvertToEntity(metadata);
file.setWaylineId(UUID.randomUUID().toString());
file.setWorkspaceId(workspaceId);
file.setOrgId(getOrgId());
if (!StringUtils.hasText(file.getSign())) {
try (InputStream object = ossService.getObject(OssConfiguration.bucket, metadata.getObjectKey())) {
......@@ -301,6 +313,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
dir.setIsDir(WaylineFileTypeEnum.DIRECTORY.getVal());
dir.setWaylineId(UUID.randomUUID().toString());
dir.setWorkspaceId(workspaceId);
dir.setOrgId(getOrgId());
int insertId = mapper.insert(dir);
......@@ -335,6 +348,12 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
fileQueryWrapper.like(WaylineFileEntity::getAncestors, rootId);
fileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.DIRECTORY.getVal());
if (aboveSysAdminRole()) {
} else {
// 只能 查看自己团队的 航线
fileQueryWrapper.eq(WaylineFileEntity::getOrgId, getOrgId());
}
List<WaylineFileEntity> waylineFiles = mapper.selectList(fileQueryWrapper);
return getWaylineFileTree(waylineFiles, rootId);
......@@ -480,6 +499,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
.name(file.getName())
.username(file.getUsername())
.objectKey(file.getObjectKey())
.orgId(file.getOrgId())
// Separate multiple payload data with ",".
.payloadModelKeys(String.join(",", file.getPayloadModelKeys()))
.templateTypes(file.getTemplateTypes().stream()
......@@ -509,6 +529,7 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
.name(file.getName())
.username(file.getUsername())
.objectKey(file.getObjectKey())
.orgId(file.getOrgId())
// Separate multiple payload data with ",".
// .payloadModelKeys(String.join(",", file.getPayloadModelKeys()))
// .templateTypes(file.getTemplateTypes().stream()
......@@ -649,6 +670,12 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, String parentId, GetWaylineListRequest param) {
// Paging Query
LambdaQueryWrapper<WaylineFileEntity> waylineFileQueryWrapper = new LambdaQueryWrapper<>();
if (aboveSysAdminRole()) {
} else {
waylineFileQueryWrapper.eq(WaylineFileEntity::getOrgId, getOrgId());
}
waylineFileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal())
.eq(WaylineFileEntity::getWorkspaceId, workspaceId)
.eq(Objects.nonNull(param.getFavorited()), WaylineFileEntity::getFavorited, param.getFavorited());
......@@ -689,6 +716,13 @@ public class WaylineFileServiceImpl extends ServiceImpl<IWaylineFileMapper, Wayl
public PaginationData<GetWaylineListResponse> getWaylinesByParam(WaylineSearchParam param, String workspaceId, GetWaylineListRequest request) {
// Paging Query
LambdaQueryWrapper<WaylineFileEntity> waylineFileQueryWrapper = new LambdaQueryWrapper<>();
if (aboveSysAdminRole()) {
} else {
waylineFileQueryWrapper.eq(WaylineFileEntity::getOrgId, getOrgId());
}
waylineFileQueryWrapper.eq(WaylineFileEntity::getIsDir, WaylineFileTypeEnum.FILE.getVal());
waylineFileQueryWrapper.eq(WaylineFileEntity::getWorkspaceId, workspaceId);
......
......@@ -57,6 +57,9 @@ import java.util.*;
import java.util.List;
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
* @version 1.1
......@@ -113,6 +116,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
.fileId(param.getFileId())
.username(username)
.workspaceId(workspaceId)
.orgId(StringUtils.hasText(param.getOrgId()) ? param.getOrgId() : getOrgId())
.jobId(jobId)
.beginTime(beginTime)
.endTime(endTime)
......@@ -204,6 +208,15 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
public PaginationData<WaylineJobDTO> getJobsByParam(WaylineJobSearchParam param, String workspaceId, long page, long pageSize) {
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.orderByDesc(WaylineJobEntity::getId);
......@@ -258,8 +271,13 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
@Override
public PaginationData<WaylineJobDTO> getTodayJobsByWorkspaceId(String workspaceId, String dockSns, long page, long pageSize) {
LambdaQueryWrapper<WaylineJobEntity> waylineJobQueryWrapper = new LambdaQueryWrapper<WaylineJobEntity>()
.eq(WaylineJobEntity::getWorkspaceId, workspaceId)
LambdaQueryWrapper<WaylineJobEntity> waylineJobQueryWrapper = new LambdaQueryWrapper<>();
if (aboveSysAdminRole()) {
} else {
waylineJobQueryWrapper.eq(WaylineJobEntity::getOrgId, getOrgId());
}
waylineJobQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId)
.orderByDesc(WaylineJobEntity::getId);
if (StringUtils.hasText(dockSns)) {
List<String> dockSnList = Arrays.asList(dockSns.split(","));
......@@ -314,6 +332,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
.fileId(dto.getFileId())
.dockSn(dto.getDockSn())
.workspaceId(dto.getWorkspaceId())
.orgId(dto.getOrgId())
.taskType(Optional.ofNullable(dto.getTaskType()).map(TaskTypeEnum::getType).orElse(null))
.taskScene(Optional.ofNullable(dto.getTaskScene()).map(TaskSceneEnum::getScene).orElse(null))
.waylineType(Optional.ofNullable(dto.getWaylineType()).map(WaylineTypeEnum::getValue).orElse(null))
......@@ -366,6 +385,7 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
.orElse(DeviceDTO.builder().build()).getNickname())
.username(entity.getUsername())
.workspaceId(entity.getWorkspaceId())
.orgId(entity.getOrgId())
.status(WaylineJobStatusEnum.IN_PROGRESS.getVal() == entity.getStatus() &&
entity.getJobId().equals(waylineRedisService.getPausedWaylineJobId(entity.getDockSn())) ?
WaylineJobStatusEnum.PAUSED.getVal() : entity.getStatus())
......@@ -482,6 +502,11 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
endSecond = endSecond*1000;
waylineJobQueryWrapper.between(WaylineJobEntity::getBeginTime, startSecond, endSecond);
waylineJobQueryWrapper.eq(WaylineJobEntity::getWorkspaceId, workspaceId);
if (aboveSysAdminRole()) {
} else {
waylineJobQueryWrapper.eq(WaylineJobEntity::getOrgId, getOrgId());
}
List<WaylineJobEntity> waylineJobList = this.mapper.selectList(waylineJobQueryWrapper);
......@@ -655,6 +680,13 @@ public class WaylineJobServiceImpl extends ServiceImpl<IWaylineJobMapper, Waylin
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();
// 创建 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