Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 添加项目成员 #353

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
public enum RespEnum {
HANDLE_OK(2000, "ok.handle"),
SEARCH_OK(2000, "ok.search"),
ADD_OK(2000, "ok.add"),
UPDATE_OK(2000, "ok.update"),
DELETE_OK(2000, "ok.delete"),
UPLOAD_OK(2000, "ok.upload"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ public RespModel(RespEnum respEnum, T data) {
this.data = data;
}

public static RespModel result(RespEnum respEnum) {
return new RespModel(respEnum);
public static RespModel<String> result(RespEnum respEnum) {
return new RespModel<>(respEnum);
}

public static <T> RespModel<T> result(RespEnum respEnum, T data) {
Expand Down
9 changes: 6 additions & 3 deletions sonic-server-common/src/main/resources/application-jdbc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# jdbc:mysql://{mysql host}:{mysql port}/{database}
url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:sonic}?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&autoReconnect=true&serverTimezone=GMT%2b8
#url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:sonic}?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&autoReconnect=true&serverTimezone=GMT%2b8
url: jdbc:mysql://10.1.40.41:3306/sonic?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&autoReconnect=true&serverTimezone=GMT%2b8
# mysql username
username: ${MYSQL_USERNAME:root}
#username: ${MYSQL_USERNAME:root}
username: root
# mysql password
password: ${MYSQL_PASSWORD:Sonic!@#123}
#password: ${MYSQL_PASSWORD:Sonic!@#123}
password: 123456
schema:
- classpath:data.sql
sql:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,6 @@ password.auth.fail=Old password error!
device.not.offline=Device is Online!
permission.denied=Permission denied!
not.found.resource=No current uri found, please restart or actively refresh!
exists.member=Member already exists\uFF01
not.user=User does not exist\uFF01
ok.add=Add Successful!
103 changes: 53 additions & 50 deletions sonic-server-common/src/main/resources/i18n/sonic_zh_CN.properties
Original file line number Diff line number Diff line change
@@ -1,50 +1,53 @@
ok.handle=操作成功!
ok.search=查询成功!
ok.update=编辑成功!
ok.delete=删除成功!
ok.upload=上传成功!
ok.send=发送成功!
ok.login=登录成功!
ok.copy=复制成功!
ok.register=注册成功!
fail.save=保存异常!
fail.login=登录失败!
fail.search=查询失败!
fail.update=编辑失败!
fail.delete=删除失败!
fail.upload=上传失败!
unauthorized=身份验证异常!
not.found.service=相关服务不可用!
not.found.id=id不存在!
not.found.device=设备不存在!
not.online.agent=Agent不在线!
not.valid.params=字段缺失或校验异常!
not.readable.params=解析参数失败!
error.params.missing=部分参数缺失!
error.params.violate=字段校验异常!
error.unknown=发生未知异常!
error.cron=操作失败!请检查cron表达式是否无误!
job.disable=关闭成功!
job.enable=开启成功!
job.start=开始运行!
job.params.invalid=参数有误!
job.handle.fail=定时任务操作失败!
project.delete.fail=删除出错!请联系管理员!
reboot.not.online=设备已经不在线,无法调度,请校准设备状态!
reboot.device.not.found=重启设备失败,Agent找不到该设备!
reboot.error.unknown=重启设备失败,发生未知异常!
stop.agent.not.online=Agent已离线,正在校准状态
result.clean=开始清理测试结果!
file.clean=开始清理!
suite.deleted=测试套件已删除!
suite.empty.cases=该测试套件内无测试用例!
suite.not.free.device=所选设备暂无可用!
suite.empty.result=测试结果模板不存在!
suite.can.not.connect.device=运行设备暂无法连接!
register.repeat.username=注册失败!用户名已存在!
register.disable=注册入口已关闭!
password.change.ok=修改密码成功!
password.auth.fail=旧密码错误!
device.not.offline=设备未离线!
permission.denied=当前用户暂无权限!
not.found.resource=没有找到当前 uri, 请重新启动或主动刷新!
ok.handle=\u64CD\u4F5C\u6210\u529F\uFF01
ok.search=\u67E5\u8BE2\u6210\u529F\uFF01
ok.update=\u7F16\u8F91\u6210\u529F\uFF01
ok.delete=\u5220\u9664\u6210\u529F\uFF01
ok.upload=\u4E0A\u4F20\u6210\u529F\uFF01
ok.send=\u53D1\u9001\u6210\u529F\uFF01
ok.login=\u767B\u5F55\u6210\u529F\uFF01
ok.copy=\u590D\u5236\u6210\u529F!
ok.register=\u6CE8\u518C\u6210\u529F\uFF01
fail.save=\u4FDD\u5B58\u5F02\u5E38\uFF01
fail.login=\u767B\u5F55\u5931\u8D25\uFF01
fail.search=\u67E5\u8BE2\u5931\u8D25\uFF01
fail.update=\u7F16\u8F91\u5931\u8D25\uFF01
fail.delete=\u5220\u9664\u5931\u8D25\uFF01
fail.upload=\u4E0A\u4F20\u5931\u8D25\uFF01
unauthorized=\u8EAB\u4EFD\u9A8C\u8BC1\u5F02\u5E38\uFF01
not.found.service=\u76F8\u5173\u670D\u52A1\u4E0D\u53EF\u7528\uFF01
not.found.id=id\u4E0D\u5B58\u5728\uFF01
not.found.device=\u8BBE\u5907\u4E0D\u5B58\u5728\uFF01
not.online.agent=Agent\u4E0D\u5728\u7EBF\uFF01
not.valid.params=\u5B57\u6BB5\u7F3A\u5931\u6216\u6821\u9A8C\u5F02\u5E38\uFF01
not.readable.params=\u89E3\u6790\u53C2\u6570\u5931\u8D25\uFF01
error.params.missing=\u90E8\u5206\u53C2\u6570\u7F3A\u5931\uFF01
error.params.violate=\u5B57\u6BB5\u6821\u9A8C\u5F02\u5E38\uFF01
error.unknown=\u53D1\u751F\u672A\u77E5\u5F02\u5E38\uFF01
error.cron=\u64CD\u4F5C\u5931\u8D25\uFF01\u8BF7\u68C0\u67E5cron\u8868\u8FBE\u5F0F\u662F\u5426\u65E0\u8BEF\uFF01
job.disable=\u5173\u95ED\u6210\u529F\uFF01
job.enable=\u5F00\u542F\u6210\u529F\uFF01
job.start=\u5F00\u59CB\u8FD0\u884C\uFF01
job.params.invalid=\u53C2\u6570\u6709\u8BEF\uFF01
job.handle.fail=\u5B9A\u65F6\u4EFB\u52A1\u64CD\u4F5C\u5931\u8D25\uFF01
project.delete.fail=\u5220\u9664\u51FA\u9519\uFF01\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\uFF01
reboot.not.online=\u8BBE\u5907\u5DF2\u7ECF\u4E0D\u5728\u7EBF\uFF0C\u65E0\u6CD5\u8C03\u5EA6\uFF0C\u8BF7\u6821\u51C6\u8BBE\u5907\u72B6\u6001!
reboot.device.not.found=\u91CD\u542F\u8BBE\u5907\u5931\u8D25\uFF0CAgent\u627E\u4E0D\u5230\u8BE5\u8BBE\u5907!
reboot.error.unknown=\u91CD\u542F\u8BBE\u5907\u5931\u8D25\uFF0C\u53D1\u751F\u672A\u77E5\u5F02\u5E38!
stop.agent.not.online=Agent\u5DF2\u79BB\u7EBF\uFF0C\u6B63\u5728\u6821\u51C6\u72B6\u6001
result.clean=\u5F00\u59CB\u6E05\u7406\u6D4B\u8BD5\u7ED3\u679C\uFF01
file.clean=\u5F00\u59CB\u6E05\u7406\uFF01
suite.deleted=\u6D4B\u8BD5\u5957\u4EF6\u5DF2\u5220\u9664\uFF01
suite.empty.cases=\u8BE5\u6D4B\u8BD5\u5957\u4EF6\u5185\u65E0\u6D4B\u8BD5\u7528\u4F8B\uFF01
suite.not.free.device=\u6240\u9009\u8BBE\u5907\u6682\u65E0\u53EF\u7528\uFF01
suite.empty.result=\u6D4B\u8BD5\u7ED3\u679C\u6A21\u677F\u4E0D\u5B58\u5728\uFF01
suite.can.not.connect.device=\u8FD0\u884C\u8BBE\u5907\u6682\u65E0\u6CD5\u8FDE\u63A5\uFF01
register.repeat.username=\u6CE8\u518C\u5931\u8D25\uFF01\u7528\u6237\u540D\u5DF2\u5B58\u5728\uFF01
register.disable=\u6CE8\u518C\u5165\u53E3\u5DF2\u5173\u95ED\uFF01
password.change.ok=\u4FEE\u6539\u5BC6\u7801\u6210\u529F\uFF01
password.auth.fail=\u65E7\u5BC6\u7801\u9519\u8BEF\uFF01
device.not.offline=\u8BBE\u5907\u672A\u79BB\u7EBF\uFF01
permission.denied=\u5F53\u524D\u7528\u6237\u6682\u65E0\u6743\u9650\uFF01
not.found.resource=\u6CA1\u6709\u627E\u5230\u5F53\u524D uri, \u8BF7\u91CD\u65B0\u542F\u52A8\u6216\u4E3B\u52A8\u5237\u65B0\uFF01
exists.member=\u6210\u5458\u5DF2\u5B58\u5728\uFF01
not.user=\u7528\u6237\u4E0D\u5B58\u5728\uFF01
ok.add=\u65B0\u589E\u6210\u529F\uFF01
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.cloud.sonic.common.config.WebAspect;
import org.cloud.sonic.common.http.RespEnum;
import org.cloud.sonic.common.http.RespModel;
import org.cloud.sonic.controller.models.base.CommentPage;
import org.cloud.sonic.controller.models.domain.Packages;
import org.cloud.sonic.controller.models.dto.PackageDTO;
import org.cloud.sonic.controller.services.PackagesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

Expand All @@ -42,7 +42,7 @@
@RequestMapping("/packages")
public class PackageController {

@Autowired
@Resource
private PackagesService packagesService;

@WebAspect
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,28 @@
*/
package org.cloud.sonic.controller.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.cloud.sonic.common.config.WebAspect;
import org.cloud.sonic.common.config.WhiteUrl;
import org.cloud.sonic.common.exception.SonicException;
import org.cloud.sonic.common.http.RespEnum;
import org.cloud.sonic.common.http.RespModel;
import org.cloud.sonic.common.tools.JWTTokenTool;
import org.cloud.sonic.controller.models.base.CommentPage;
import org.cloud.sonic.controller.models.base.TypeConverter;
import org.cloud.sonic.controller.models.domain.Projects;
import org.cloud.sonic.controller.models.domain.Users;
import org.cloud.sonic.controller.models.dto.ProjectsDTO;
import org.cloud.sonic.controller.models.dto.ProjectsMembersDTO;
import org.cloud.sonic.controller.services.ProjectsMembersService;
import org.cloud.sonic.controller.services.ProjectsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.cloud.sonic.controller.services.UsersService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

Expand All @@ -46,14 +55,28 @@
@RequestMapping("/projects")
public class ProjectsController {

@Autowired
@Resource
private ProjectsService projectsService;
@Resource
private ProjectsMembersService projectsMembersService;
@Resource
private JWTTokenTool jwtTokenTool;
@Resource
private UsersService usersService;

@WebAspect
@Operation(summary = "更新项目信息", description = "新增或更新项目信息")
@PutMapping
public RespModel<String> save(@Validated @RequestBody ProjectsDTO projects) {
projectsService.save(projects.convertTo());
public RespModel<String> save(HttpServletRequest request, @Validated @RequestBody ProjectsDTO projects) {
//projectsService.save(projects.convertTo());
//return new RespModel<>(RespEnum.UPDATE_OK);
//llj修改:增加更新人
String token = request.getHeader("SonicToken");
String name = jwtTokenTool.getUserName(token);
if (name != null) {
Users users = usersService.findByUserName(name);
projectsService.saveProject(projects.convertTo(), users);
}
return new RespModel<>(RespEnum.UPDATE_OK);
}

Expand Down Expand Up @@ -89,4 +112,39 @@ public RespModel<String> delete(@RequestParam(name = "id") int id) throws SonicE
projectsService.delete(id);
return new RespModel<>(RespEnum.DELETE_OK);
}


@WebAspect
@WhiteUrl
@Operation(summary = "查找项目成员", description = "查找项目成员列表")
@GetMapping("/listMembers")
@Parameters(value = {
@Parameter(name = "page", description = "页码"),
@Parameter(name = "pageSize", description = "每页显示行数"),
@Parameter(name = "projectId", description = "项目ID"),
})
public RespModel<CommentPage<ProjectsMembersDTO>> findMembers(@RequestParam(name = "page") int page,
@RequestParam(name = "pageSize") int pageSize,
@RequestParam(name = "projectId") int projectId) {
return RespModel.result(RespEnum.SEARCH_OK, projectsMembersService.findByProjectId(new Page<>(page, pageSize),projectId));
}

@WebAspect
@WhiteUrl
@Operation(summary = "添加项目成员", description = "返回当前第一页用户")
@PostMapping("/addMember")
public RespModel<String> addMember(@Validated @RequestBody ProjectsMembersDTO projectsMembers) {
projectsMembersService.add(projectsMembers.convertTo());
return RespModel.result(RespEnum.ADD_OK);
}

@WebAspect
@WhiteUrl
@Operation(summary = "删除项目成员", description = "返回当前第一页用户")
@Parameter(name = "id", description = "关联id")
@DeleteMapping("/deleteMember")
public RespModel<String> deleteMember(@RequestParam(name = "id") int id) {
projectsMembersService.deleteById(id);
return RespModel.result(RespEnum.DELETE_OK);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.cloud.sonic.common.config.WebAspect;
import org.cloud.sonic.common.http.RespEnum;
Expand All @@ -14,7 +15,6 @@
import org.cloud.sonic.controller.models.domain.Roles;
import org.cloud.sonic.controller.models.dto.RolesDTO;
import org.cloud.sonic.controller.services.RolesServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
Expand All @@ -23,7 +23,7 @@
@RequestMapping("/roles")
public class RolesController {

@Autowired
@Resource
private RolesServices rolesServices;

@WebAspect
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.cloud.sonic.common.config.WebAspect;
import org.cloud.sonic.common.config.WhiteUrl;
Expand All @@ -30,18 +31,22 @@
import org.cloud.sonic.common.http.RespModel;
import org.cloud.sonic.common.tools.JWTTokenTool;
import org.cloud.sonic.controller.models.base.CommentPage;
import org.cloud.sonic.controller.models.base.TypeConverter;
import org.cloud.sonic.controller.models.domain.Roles;
import org.cloud.sonic.controller.models.domain.Users;
import org.cloud.sonic.controller.models.dto.ProjectsDTO;
import org.cloud.sonic.controller.models.dto.UsersDTO;
import org.cloud.sonic.controller.models.http.ChangePwd;
import org.cloud.sonic.controller.models.http.UserInfo;
import org.cloud.sonic.controller.services.ProjectsService;
import org.cloud.sonic.controller.services.RolesServices;
import org.cloud.sonic.controller.services.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
* @author ZhouYiXun
Expand All @@ -52,14 +57,14 @@
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
@Resource
private UsersService usersService;

@Autowired
@Resource
private RolesServices rolesServices;

@Autowired
@Resource
private JWTTokenTool jwtTokenTool;
@Resource
private ProjectsService projectsService;

@WebAspect
@WhiteUrl
Expand Down Expand Up @@ -166,4 +171,20 @@ public RespModel<Boolean> changeRole(@RequestParam(name = "roleId") Integer role

return RespModel.result(RespEnum.UPDATE_OK, usersService.updateUserRole(userId, roleId));
}

@WebAspect
@WhiteUrl
@Operation(summary = "查找用户所有项目", description = "查找用户所有项目列表")
@GetMapping("/listProjects")
public RespModel<List<ProjectsDTO>> findProjects(HttpServletRequest request) {
String token = request.getHeader("SonicToken");
if ( token != null) {
return new RespModel<>(
RespEnum.SEARCH_OK,
projectsService.findProjectsByToken(token).stream().map(TypeConverter::convertTo).collect(Collectors.toList())
);
}else {
return new RespModel<>(RespEnum.UNAUTHORIZED);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.cloud.sonic.controller.models.domain.Projects;

import java.util.List;

/**
* Mapper 接口
*
Expand All @@ -13,4 +17,7 @@
@Mapper
public interface ProjectsMapper extends BaseMapper<Projects> {

@Select("select p.* from projects p inner join users_projects up where p.id = up.project_id and up.user_id =#{userId}")
List<Projects> listByProjects(@Param("userId") int userId);

}
Loading