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 ef59f4b5..64b7caea 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 @@ -94,7 +94,15 @@ public class RoleDto { public static class UpRoleShowsOrder { @ApiModelProperty("项目id") private Long projectId; - @ApiModelProperty("按照展示的排序进行排序号") - private List roleIds; + @ApiModelProperty("角色和角色类型") + private List roleIds; + } + @Data + @ApiModel("角色id与角色类型") + public static class RoleAndType { + @ApiModelProperty("角色类型(0-普通角色,1-项目虚拟角色)") + private Byte roleType; + @ApiModelProperty("角色id") + 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..cce622be 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 @@ -2,10 +2,7 @@ package com.ccsens.tall.persist.dao; import com.ccsens.tall.bean.dto.LwbsDto; import com.ccsens.tall.bean.po.SysProject; -import com.ccsens.tall.bean.vo.ChartVo; -import com.ccsens.tall.bean.vo.LwbsVo; -import com.ccsens.tall.bean.vo.PluginVo; -import com.ccsens.tall.bean.vo.ProjectVo; +import com.ccsens.tall.bean.vo.*; import com.ccsens.tall.persist.mapper.SysProjectMapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -72,4 +69,19 @@ 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); + + /** + * 查询未添加的项目虚拟角色 + * @param projectId + * @param listBeforeId + * @return + */ + List selectProjectRoleNoAdd(@Param("projectId") Long projectId,@Param("listBeforeId") List listBeforeId); } 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 b56daa16..0b3a440c 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; } @@ -846,25 +865,42 @@ 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()); } } //查询未添加的角色 + List listNoAddRoles = new ArrayList<>(); List listAfter=proRoleDao.queryRoleShowslistBefore(param.getParam().getProjectId(),listBeforeId); for (int i = 0; i < listAfter.size(); i++) { //是否项目经理 @@ -881,8 +917,19 @@ public class ProRoleService implements IProRoleService { listAfter.get(i).setMine(false); } } + listNoAddRoles.add(listAfter.get(i)); + } + //查询未添加的虚拟项目角色 + List listAfter1 = projectDao.selectProjectRoleNoAdd(param.getParam().getProjectId(),listBeforeId); + if (CollectionUtil.isNotEmpty(listAfter1)){ + for (RoleVo.JueSeByProId projectRole : listAfter1) { + projectRole.setProjectRole(1); + projectRole.setRelevanceProjectId(projectRole.getId()); + projectRole.setRelevanceProjectName(projectRole.getName()); + listNoAddRoles.add(projectRole); + } } - jueSeByProIdLists.setListAfter(listAfter); + jueSeByProIdLists.setListAfter(listNoAddRoles); jueSeByProIdLists.setListBefore(listBefor); return jueSeByProIdLists; } @@ -983,11 +1030,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/mapper_dao/ProRoleDao.xml b/tall/src/main/resources/mapper_dao/ProRoleDao.xml index ade94e23..184f860a 100644 --- a/tall/src/main/resources/mapper_dao/ProRoleDao.xml +++ b/tall/src/main/resources/mapper_dao/ProRoleDao.xml @@ -354,23 +354,42 @@ and tpmrs.member_id=#{memberId} order by tpmrs.sequence + + + + + + + + + + + + + + + + + + + + + + + + \ 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..1e24e9cb 100644 --- a/tall/src/main/resources/mapper_dao/SysProjectDao.xml +++ b/tall/src/main/resources/mapper_dao/SysProjectDao.xml @@ -623,4 +623,29 @@ 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