From 15bec54dd1e0b5dbb28baa7abd8ea309a3e7d5d3 Mon Sep 17 00:00:00 2001 From: ma <1062634917@qq.com> Date: Fri, 23 Apr 2021 16:58:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A1=B9=E7=9B=AE=E8=99=9A?= =?UTF-8?q?=E6=8B=9F=E8=A7=92=E8=89=B2=E6=8E=92=E5=BA=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ccsens/tall/bean/dto/RoleDto.java | 10 +- .../tall/bean/po/ProMemberRoleShow.java | 11 ++ .../bean/po/ProMemberRoleShowExample.java | 60 +++++++++ .../java/com/ccsens/tall/bean/vo/RoleVo.java | 6 +- .../ccsens/tall/persist/dao/ProRoleDao.java | 24 +++- .../tall/persist/dao/SysProjectDao.java | 7 ++ .../ccsens/tall/service/ProRoleService.java | 115 ++++++++++++------ tall/src/main/resources/application.yml | 4 +- .../main/resources/mapper_dao/ProRoleDao.xml | 42 +++++++ .../resources/mapper_dao/SysProjectDao.xml | 11 ++ .../mapper_raw/ProMemberRoleShowMapper.xml | 25 +++- 11 files changed, 265 insertions(+), 50 deletions(-) diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/RoleDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/RoleDto.java index 0573485a..5a0fa174 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/RoleDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/RoleDto.java @@ -95,6 +95,14 @@ public class RoleDto { @ApiModelProperty("项目id") private Long projectId; @ApiModelProperty("按照展示的排序进行排序号") - private List roleIds; + private List roleIds; + } + @Data + @ApiModel("角色id与角色类型") + public static class RoleAndType { + @ApiModelProperty("角色类型") + private Byte roleType; + @ApiModelProperty("按照展示的排序进行排序号") + private Long roleId; } } diff --git a/tall/src/main/java/com/ccsens/tall/bean/po/ProMemberRoleShow.java b/tall/src/main/java/com/ccsens/tall/bean/po/ProMemberRoleShow.java index 97950217..e614b674 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/po/ProMemberRoleShow.java +++ b/tall/src/main/java/com/ccsens/tall/bean/po/ProMemberRoleShow.java @@ -18,6 +18,8 @@ public class ProMemberRoleShow implements Serializable { private Byte recStatus; + private Byte roleType; + private static final long serialVersionUID = 1L; public Long getId() { @@ -76,6 +78,14 @@ public class ProMemberRoleShow implements Serializable { this.recStatus = recStatus; } + public Byte getRoleType() { + return roleType; + } + + public void setRoleType(Byte roleType) { + this.roleType = roleType; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -89,6 +99,7 @@ public class ProMemberRoleShow implements Serializable { sb.append(", createdAt=").append(createdAt); sb.append(", updatedAt=").append(updatedAt); sb.append(", recStatus=").append(recStatus); + sb.append(", roleType=").append(roleType); sb.append("]"); return sb.toString(); } diff --git a/tall/src/main/java/com/ccsens/tall/bean/po/ProMemberRoleShowExample.java b/tall/src/main/java/com/ccsens/tall/bean/po/ProMemberRoleShowExample.java index af0c3e13..c1c2debf 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/po/ProMemberRoleShowExample.java +++ b/tall/src/main/java/com/ccsens/tall/bean/po/ProMemberRoleShowExample.java @@ -524,6 +524,66 @@ public class ProMemberRoleShowExample { addCriterion("rec_status not between", value1, value2, "recStatus"); return (Criteria) this; } + + public Criteria andRoleTypeIsNull() { + addCriterion("role_type is null"); + return (Criteria) this; + } + + public Criteria andRoleTypeIsNotNull() { + addCriterion("role_type is not null"); + return (Criteria) this; + } + + public Criteria andRoleTypeEqualTo(Byte value) { + addCriterion("role_type =", value, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeNotEqualTo(Byte value) { + addCriterion("role_type <>", value, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeGreaterThan(Byte value) { + addCriterion("role_type >", value, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("role_type >=", value, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeLessThan(Byte value) { + addCriterion("role_type <", value, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeLessThanOrEqualTo(Byte value) { + addCriterion("role_type <=", value, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeIn(List values) { + addCriterion("role_type in", values, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeNotIn(List values) { + addCriterion("role_type not in", values, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeBetween(Byte value1, Byte value2) { + addCriterion("role_type between", value1, value2, "roleType"); + return (Criteria) this; + } + + public Criteria andRoleTypeNotBetween(Byte value1, Byte value2) { + addCriterion("role_type not between", value1, value2, "roleType"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java index 65e081ae..ed0160ab 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java @@ -47,11 +47,13 @@ public class RoleVo { @ApiModelProperty("是否是项目虚拟的角色 0否 1是") private Integer projectRole=0; @ApiModelProperty("关联项目的id") - private Integer relevanceProjectId; + private Long relevanceProjectId; @ApiModelProperty("关联项目的名称") - private Integer relevanceProjectName; + private String relevanceProjectName; @ApiModelProperty("是否是当前角色的奖惩干系人") private Boolean stakeholder = false; + @ApiModelProperty("角色类型(0-普通角色,1-项目虚拟角色)") + private Byte roleType; } @Data @ApiModel("添加时返回成员信息") diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java index 53d9f3e9..b6428736 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java @@ -73,7 +73,7 @@ public interface ProRoleDao extends ProRoleMapper{ /** * 查询已经存在的角色 - * @param memberId + * @param memberId 成员id * @return */ List queryRoleShowslistAfter(Long memberId); @@ -100,6 +100,28 @@ public interface ProRoleDao extends ProRoleMapper{ */ List getPmByByProjectId(@Param("projectId")Long projectId); + /** + * 根据成员id查询需要展示的角色和(项目虚拟角色) + * @param memberId + * @return + */ + List queryRoleSHowsForRoleAndProject(Long memberId); + + /** + * 查询show表中的角色信息 + * @param roleId 角色id + * @return 角色信息 + */ + ProjectVo.RoleInfo selectRoleInfoByProAndMem(Long roleId); + + /** + * 查找角色下的所有成员 + * @param roleId 角色id + * @return 成员信息 + */ + List selectMemberOfRole(Long roleId); + + // /** // * 查找项目下的所有成员的名字用“,”分隔 // * @param projectId 项目id diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectDao.java index d1b0738b..633a5183 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectDao.java @@ -72,4 +72,11 @@ public interface SysProjectDao extends SysProjectMapper{ * @return */ List queryProjectIdByUserId(@Param("startTime")Long startTime,@Param("endTime") Long endTime, @Param("userId")Long userId); + + /** + * 查找虚拟项目角色的信息 + * @param roleId + * @return + */ + ProjectVo.RoleInfo selectProjectInfoByProAndMem(Long roleId); } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java b/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java index 89b7fa86..8025b128 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java @@ -230,7 +230,7 @@ public class ProRoleService implements IProRoleService { } } } -// //查找该项目的子项目,转换成项目角色返回 + //查找该项目的子项目,转换成项目角色返回 // SysProjectExample projectExample = new SysProjectExample(); // projectExample.createCriteria().andParentIdEqualTo(projectId).andParentIdNotEqualTo(0L); // List sysProject = sysProjectDao.selectByExample(projectExample); @@ -270,7 +270,7 @@ public class ProRoleService implements IProRoleService { @Override public List getRealMemberRolesShowByProjectId(Long projectId,Long userId) { //返回的对象 - List memberRoleList; + List memberRoleList = new ArrayList<>(); //先从userid和项目id获取当前用户的成员id,查看role-show里面是否有这个成员的数据 ProMemberExample proMemberExample=new ProMemberExample(); @@ -376,31 +376,50 @@ public class ProRoleService implements IProRoleService { proMemberRoleShowExampleNew.setOrderByClause("sequence"); List proMemberRoleShowsNew = proMemberRoleShowMapper.selectByExample(proMemberRoleShowExampleNew); - List roleIds = new ArrayList<>(); - for (ProMemberRoleShow roleShow : proMemberRoleShowsNew) { - roleIds.add(roleShow.getRoleId()); - } - //查询二级角色 - memberRoleList = proRoleDao.selectSecondRolesShowByRoleId(projectId,memberId); - //在show表查找可见的角色 - - - // TODO 查找此项目的子项目 - SysProjectExample projectExample = new SysProjectExample(); - projectExample.createCriteria().andParentIdEqualTo(projectId); - List sysProjectList = sysProjectDao.selectByExample(projectExample); - if(CollectionUtil.isNotEmpty(sysProjectList)){ - sysProjectList.forEach(project -> { - ProjectVo.RoleInfo roleInfo = new ProjectVo.RoleInfo(); - roleInfo.setId(project.getId()); - roleInfo.setName(project.getName()); - roleInfo.setProjectRole((byte) 1); - roleInfo.setRelevanceProjectId(project.getId()); - roleInfo.setRelevanceProjectName(project.getName()); + for (int i = 0; i < proMemberRoleShowsNew.size(); i++) { + //普通角色,需要查询成员 + if (0 == proMemberRoleShowsNew.get(i).getRoleType()){ + ProjectVo.RoleInfo roleInfo = proRoleDao.selectRoleInfoByProAndMem(proMemberRoleShowsNew.get(i).getRoleId()); + List members = proRoleDao.selectMemberOfRole(proMemberRoleShowsNew.get(i).getRoleId()); memberRoleList.add(roleInfo); - }); + memberRoleList.get(i).setMembers(members); + } + //虚拟项目角色 + if(1 == proMemberRoleShowsNew.get(i).getRoleType()){ + ProjectVo.RoleInfo roleInfo = projectDao.selectProjectInfoByProAndMem(proMemberRoleShowsNew.get(i).getRoleId()); + if (ObjectUtil.isNotNull(roleInfo)){ + roleInfo.setProjectRole((byte) 1); + roleInfo.setRelevanceProjectId(roleInfo.getId()); + roleInfo.setRelevanceProjectName(roleInfo.getName()); + } + memberRoleList.add(roleInfo); + } } +// List roleIds = new ArrayList<>(); +// for (ProMemberRoleShow roleShow : proMemberRoleShowsNew) { +// roleIds.add(roleShow.getRoleId()); +// } +// //查询二级角色 +// memberRoleList = proRoleDao.selectSecondRolesShowByRoleId(projectId,memberId); +// //在show表查找可见的角色 +// +// // TODO 查找此项目的子项目 +// SysProjectExample projectExample = new SysProjectExample(); +// projectExample.createCriteria().andParentIdEqualTo(projectId); +// List sysProjectList = sysProjectDao.selectByExample(projectExample); +// if(CollectionUtil.isNotEmpty(sysProjectList)){ +// sysProjectList.forEach(project -> { +// ProjectVo.RoleInfo roleInfo = new ProjectVo.RoleInfo(); +// roleInfo.setId(project.getId()); +// roleInfo.setName(project.getName()); +// roleInfo.setProjectRole((byte) 1); +// roleInfo.setRelevanceProjectId(project.getId()); +// roleInfo.setRelevanceProjectName(project.getName()); +// memberRoleList.add(roleInfo); +// }); +// } + return memberRoleList; } @@ -798,22 +817,38 @@ public class ProRoleService implements IProRoleService { List roleList = proMemberService.selectRolesByUserIdAndProjectId(param.getUserId(), param.getParam().getProjectId(), 0); //查询已经添加的角色 - List listBefor=proRoleDao.queryRoleShowslistAfter(memberId); +// List listBefor=proRoleDao.queryRoleShowslistAfter(memberId); + //查询已添加的角色和项目虚拟角色 + List listBefor = proRoleDao.queryRoleSHowsForRoleAndProject(memberId); List listBeforeId= listBefor.stream().map(action ->{return action.getId();}).collect(Collectors.toList()); for (int i = 0; i < listBefor.size(); i++) { - //是否项目经理 - if(jili1.contains(listBefor.get(i).getId())){ - listBefor.get(i).setIsPM(true); - }else { - listBefor.get(i).setIsPM(false); - } - //当前用户是否属于该角色 - for (ProRole proRole : roleList) { - if (listBefor.get(i).getId().equals(proRole.getId())){ - listBefor.get(i).setMine(true); - }else{ - listBefor.get(i).setMine(false); + //普通角色 + if (0 == listBefor.get(i).getRoleType()){ + //是否项目经理 + if(jili1.contains(listBefor.get(i).getId())){ + listBefor.get(i).setIsPM(true); + }else { + listBefor.get(i).setIsPM(false); } + //当前用户是否属于该角色 + for (ProRole proRole : roleList) { + if (listBefor.get(i).getId().equals(proRole.getId())){ + listBefor.get(i).setMine(true); + }else{ + listBefor.get(i).setMine(false); + } + } + //查询角色名字等具体信息 + ProRole proRole = proRoleDao.selectByPrimaryKey(listBefor.get(i).getId()); + listBefor.get(i).setName(proRole.getName()); + } + //项目虚拟角色 + if (1 == listBefor.get(i).getRoleType()){ + SysProject sysProject = projectDao.selectByPrimaryKey(listBefor.get(i).getId()); + listBefor.get(i).setName(sysProject.getName()); + listBefor.get(i).setProjectRole(1); + listBefor.get(i).setRelevanceProjectId(sysProject.getId()); + listBefor.get(i).setRelevanceProjectName(sysProject.getName()); } } //查询未添加的角色 @@ -934,11 +969,13 @@ public class ProRoleService implements IProRoleService { } //根据前端传的数据,循环放入,并排序 for (int i = 0; i < param.getParam().getRoleIds().size(); i++) { - Long roleId = param.getParam().getRoleIds().get(i); +// Long roleId = param.getParam().getRoleIds().get(i); + RoleDto.RoleAndType roleAndType = param.getParam().getRoleIds().get(i); ProMemberRoleShow proMemberRoleShow = new ProMemberRoleShow(); proMemberRoleShow.setId(snowflake.nextId()); proMemberRoleShow.setMemberId(memberId); - proMemberRoleShow.setRoleId(roleId); + proMemberRoleShow.setRoleId(roleAndType.getRoleId()); + proMemberRoleShow.setRoleType(roleAndType.getRoleType()); proMemberRoleShow.setSequence(i); proMemberRoleShowMapper.insertSelective(proMemberRoleShow); } diff --git a/tall/src/main/resources/application.yml b/tall/src/main/resources/application.yml index b5408a3a..ebc544af 100644 --- a/tall/src/main/resources/application.yml +++ b/tall/src/main/resources/application.yml @@ -1,5 +1,5 @@ spring: profiles: - active: dev - include: util-dev,common + active: test + include: util-test,common diff --git a/tall/src/main/resources/mapper_dao/ProRoleDao.xml b/tall/src/main/resources/mapper_dao/ProRoleDao.xml index ade94e23..ca7e85e2 100644 --- a/tall/src/main/resources/mapper_dao/ProRoleDao.xml +++ b/tall/src/main/resources/mapper_dao/ProRoleDao.xml @@ -384,4 +384,46 @@ project_id = #{projectId} + + + + + \ No newline at end of file diff --git a/tall/src/main/resources/mapper_dao/SysProjectDao.xml b/tall/src/main/resources/mapper_dao/SysProjectDao.xml index 1ebc0fb1..4448f144 100644 --- a/tall/src/main/resources/mapper_dao/SysProjectDao.xml +++ b/tall/src/main/resources/mapper_dao/SysProjectDao.xml @@ -623,4 +623,15 @@ and p.begin_time < #{endTime} GROUP BY p.id + + \ No newline at end of file diff --git a/tall/src/main/resources/mapper_raw/ProMemberRoleShowMapper.xml b/tall/src/main/resources/mapper_raw/ProMemberRoleShowMapper.xml index c51847e0..92cc8175 100644 --- a/tall/src/main/resources/mapper_raw/ProMemberRoleShowMapper.xml +++ b/tall/src/main/resources/mapper_raw/ProMemberRoleShowMapper.xml @@ -9,6 +9,7 @@ + @@ -69,7 +70,7 @@ - id, member_id, role_id, sequence, created_at, updated_at, rec_status + id, member_id, role_id, sequence, created_at, updated_at, rec_status, role_type @@ -188,6 +195,9 @@ rec_status = #{record.recStatus,jdbcType=TINYINT}, + + role_type = #{record.roleType,jdbcType=TINYINT}, + @@ -201,7 +211,8 @@ sequence = #{record.sequence,jdbcType=INTEGER}, created_at = #{record.createdAt,jdbcType=TIMESTAMP}, updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{record.recStatus,jdbcType=TINYINT} + rec_status = #{record.recStatus,jdbcType=TINYINT}, + role_type = #{record.roleType,jdbcType=TINYINT} @@ -227,6 +238,9 @@ rec_status = #{recStatus,jdbcType=TINYINT}, + + role_type = #{roleType,jdbcType=TINYINT}, + where id = #{id,jdbcType=BIGINT} @@ -237,7 +251,8 @@ sequence = #{sequence,jdbcType=INTEGER}, created_at = #{createdAt,jdbcType=TIMESTAMP}, updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{recStatus,jdbcType=TINYINT} + rec_status = #{recStatus,jdbcType=TINYINT}, + role_type = #{roleType,jdbcType=TINYINT} where id = #{id,jdbcType=BIGINT} \ No newline at end of file