diff --git a/common/src/main/java/com/ccsens/common/bean/dto/CMemberDto.java b/common/src/main/java/com/ccsens/common/bean/dto/CMemberDto.java index 0b248896..a5eda84d 100644 --- a/common/src/main/java/com/ccsens/common/bean/dto/CMemberDto.java +++ b/common/src/main/java/com/ccsens/common/bean/dto/CMemberDto.java @@ -1,6 +1,16 @@ package com.ccsens.common.bean.dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author 逗 + */ @Data public class CMemberDto { @@ -26,4 +36,63 @@ public class CMemberDto { private String phone; private Long userId; } + + @Data + @ApiModel("查询项目下的成员信息") + public static class QueryMemberByProject{ + @NotNull(message = "项目id不能为空") + @ApiModelProperty("项目id") + private Long projectId; + @ApiModelProperty("成员名称") + private String memberName; + } + + @Data + @ApiModel("成员id") + public static class GetMember{ + @NotNull(message = "成员id不能为空") + @ApiModelProperty("成员id") + private Long memberId; + } + + + @Data + @ApiModel("添加成员信息") + public static class SaveMemberInfo{ + @NotNull(message = "项目id不能为空") + @ApiModelProperty("项目id") + private Long projectId; + @NotBlank(message = "成员名不能为空") + @ApiModelProperty("成员名") + private String name; + @NotBlank(message = "手机号不能为空") + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("头像") + private String avatarUrl; + } + + @Data + @ApiModel("修改成员信息") + public static class UpdateMemberInfo{ + @NotNull(message = "成员id不能为空") + @ApiModelProperty("成员id") + private Long memberId; + @ApiModelProperty("成员名") + private String name; + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("头像") + private String avatarUrl; + } + + @Data + @ApiModel("修改成员所属的角色信息") + public static class UpdateMemberRoles{ + @NotNull(message = "成员id不能为空") + @ApiModelProperty("成员id") + private Long memberId; + @ApiModelProperty("角色id数组") + private List roleIdList; + } } diff --git a/common/src/main/java/com/ccsens/common/bean/dto/CRoleDto.java b/common/src/main/java/com/ccsens/common/bean/dto/CRoleDto.java index 82ddb09b..88e659e4 100644 --- a/common/src/main/java/com/ccsens/common/bean/dto/CRoleDto.java +++ b/common/src/main/java/com/ccsens/common/bean/dto/CRoleDto.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.List; @@ -36,4 +37,35 @@ public class CRoleDto { @ApiModelProperty("角色id") private Long roleId; } + + @Data + @ApiModel("添加角色") + public static class SaveRole { + @NotNull(message = "项目id不能为空") + @ApiModelProperty("项目id") + private Long projectId; + @NotBlank(message = "角色名不能为空") + @ApiModelProperty("角色名") + private String roleName; + } + + @Data + @ApiModel("修改角色信息") + public static class UpdateRole { + @NotNull(message = "角色id不能为空") + @ApiModelProperty("角色id") + private Long roleId; + @ApiModelProperty("角色名") + private String roleName; + } + + @Data + @ApiModel("修改角色下的成员") + public static class UpdateRoleMembers{ + @NotNull(message = "角色id不能为空") + @ApiModelProperty("角色id") + private Long roleId; + @ApiModelProperty("成员id数组") + private List memberIdList; + } } diff --git a/common/src/main/java/com/ccsens/common/bean/vo/CMemberVo.java b/common/src/main/java/com/ccsens/common/bean/vo/CMemberVo.java index 65a13c70..c8b400fd 100644 --- a/common/src/main/java/com/ccsens/common/bean/vo/CMemberVo.java +++ b/common/src/main/java/com/ccsens/common/bean/vo/CMemberVo.java @@ -18,4 +18,18 @@ public class CMemberVo { } + @Data + @ApiModel("成员信息列表") + public static class MemberInfo{ + @ApiModelProperty("成员id") + private Long id; + @ApiModelProperty("成员名") + private String name; + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("头像") + private String avatarUrl; + } + + } diff --git a/common/src/main/java/com/ccsens/common/persist/dao/ProMemberDao.java b/common/src/main/java/com/ccsens/common/persist/dao/ProMemberDao.java index 28ebf8f6..6f61810c 100644 --- a/common/src/main/java/com/ccsens/common/persist/dao/ProMemberDao.java +++ b/common/src/main/java/com/ccsens/common/persist/dao/ProMemberDao.java @@ -88,4 +88,12 @@ public interface ProMemberDao extends ProMemberMapper { * @return 成员信息 */ ProMember queryMemberOfRole(@Param("memberId") Long userOfMemberId,@Param("roleId") Long roleId); + + /** + * 根据项目id和名字查找成员信息 + * @param projectId 项目id + * @param memberName 成员名 + * @return 返回成员列表 + */ + List queryByProject(@Param("projectId") Long projectId, @Param("memberName") String memberName); } diff --git a/common/src/main/java/com/ccsens/common/persist/dao/ProRoleMemberDao.java b/common/src/main/java/com/ccsens/common/persist/dao/ProRoleMemberDao.java index 32e38c3b..c84de53f 100644 --- a/common/src/main/java/com/ccsens/common/persist/dao/ProRoleMemberDao.java +++ b/common/src/main/java/com/ccsens/common/persist/dao/ProRoleMemberDao.java @@ -1,6 +1,7 @@ package com.ccsens.common.persist.dao; import com.ccsens.common.bean.po.ProRoleMember; +import com.ccsens.common.bean.vo.CMemberVo; import com.ccsens.common.persist.mapper.ProRoleMemberMapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -27,4 +28,12 @@ public interface ProRoleMemberDao extends ProRoleMemberMapper { * @return 角色成员信息 */ ProRoleMember queryByRoleAndMember(@Param("memberId") Long userOfMemberId,@Param("roleId") Long roleId); + + /** + * 删除该角色和成员的关联信息 + * @param roleId 角色id + */ + void delByRoleId(@Param("roleId") Long roleId); + + } diff --git a/common/src/main/java/com/ccsens/common/service/IMemberService.java b/common/src/main/java/com/ccsens/common/service/IMemberService.java index 253f41cd..bad2dc60 100644 --- a/common/src/main/java/com/ccsens/common/service/IMemberService.java +++ b/common/src/main/java/com/ccsens/common/service/IMemberService.java @@ -2,6 +2,9 @@ package com.ccsens.common.service; import com.ccsens.common.bean.dto.CMemberDto; import com.ccsens.common.bean.dto.CRoleDto; +import com.ccsens.common.bean.vo.CMemberVo; + +import java.util.List; public interface IMemberService { /** @@ -21,4 +24,48 @@ public interface IMemberService { * @param param 项目id/角色名称 */ void addMemberForProject(CMemberDto.SaveMember param); + + /** + * 根据手机号获取成员信息 + * @param param 项目id和成员名 + * @param userId userId + * @return 返回列表 + */ + List queryByProject(CMemberDto.QueryMemberByProject param, Long userId); + + /** + * 根据id查找成员信息 + * @param param 成员id + * @param userId userId + * @return 成员信息 + */ + CMemberVo.MemberInfo getMemberById(CMemberDto.GetMember param, Long userId); + + /** + * 添加成员 + * @param param 项目id和成员信息 + * @param userId userId + */ + void saveMember(CMemberDto.SaveMemberInfo param, Long userId); + + /** + * 修改成员信息 + * @param param 成员信息 + * @param userId userId + */ + void updateMember(CMemberDto.UpdateMemberInfo param, Long userId); + + /** + * 删除成员 + * @param param 成员id + * @param userId userId + */ + void deleteMember(CMemberDto.GetMember param, Long userId); + + /** + * 修改成员所属的角色 + * @param param 成员id和角色信息 + * @param userId userId + */ + void updateMemberRoles(CMemberDto.UpdateMemberRoles param,Long userId); } diff --git a/common/src/main/java/com/ccsens/common/service/IProRoleService.java b/common/src/main/java/com/ccsens/common/service/IProRoleService.java index d0ed1ab6..c00f0778 100644 --- a/common/src/main/java/com/ccsens/common/service/IProRoleService.java +++ b/common/src/main/java/com/ccsens/common/service/IProRoleService.java @@ -32,4 +32,33 @@ public interface IProRoleService { * @return 成员信息 */ List queryMemberOfRole(CRoleDto.QueryMemberOfRole param, Long userId); + + /** + * 添加角色 + * @param param 角色信息 + * @param userId userId + */ + void saveRole(CRoleDto.SaveRole param,Long userId); + + /** + * 添加角色 + * @param param 修改的角色信息 + * @param userId userId + */ + void updateRole(CRoleDto.UpdateRole param,Long userId); + + /** + * 删除角色 + * @param param 角色id + * @param userId userId + */ + void delRole(CRoleDto.QueryMemberOfRole param,Long userId); + + /** + * 修改角色下的成员(完全删除以前的成员角色关联信息) + * @param param 角色id和成员id + * @param userId userId + */ + void updateRoleMembers(CRoleDto.UpdateRoleMembers param,Long userId); + } diff --git a/common/src/main/java/com/ccsens/common/service/MemberService.java b/common/src/main/java/com/ccsens/common/service/MemberService.java index d9b0639e..c1d443b4 100644 --- a/common/src/main/java/com/ccsens/common/service/MemberService.java +++ b/common/src/main/java/com/ccsens/common/service/MemberService.java @@ -1,18 +1,23 @@ package com.ccsens.common.service; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.ccsens.cloudutil.bean.tall.dto.ProjectDto; import com.ccsens.cloudutil.feign.Tall3FeignClient; import com.ccsens.common.bean.dto.CMemberDto; import com.ccsens.common.bean.po.ProMember; +import com.ccsens.common.bean.po.ProMemberExample; import com.ccsens.common.bean.po.ProRole; import com.ccsens.common.bean.po.ProRoleMember; +import com.ccsens.common.bean.vo.CMemberVo; import com.ccsens.common.persist.dao.ProMemberDao; import com.ccsens.common.persist.dao.ProRoleDao; import com.ccsens.common.persist.dao.ProRoleMemberDao; import com.ccsens.common.persist.dao.RelevanceDao; import com.ccsens.common.util.CommonCodeError; +import com.ccsens.util.JsonResponse; import com.ccsens.util.exception.BaseException; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -43,6 +48,7 @@ public class MemberService implements IMemberService{ @Resource private ProRoleMemberDao roleMemberDao; + @Override public void relevancePhone(CMemberDto.PhoneAndUserId param) { //查找修改的成员所属的项目id @@ -113,4 +119,127 @@ public class MemberService implements IMemberService{ } } + + @Override + public List queryByProject(CMemberDto.QueryMemberByProject param, Long userId) { + return proMemberDao.queryByProject(param.getProjectId(),param.getMemberName()); + } + + @Override + public CMemberVo.MemberInfo getMemberById(CMemberDto.GetMember param, Long userId) { + CMemberVo.MemberInfo memberInfo = new CMemberVo.MemberInfo(); + ProMember member = proMemberDao.selectByPrimaryKey(param.getMemberId()); + if(ObjectUtil.isNotNull(member)){ + memberInfo.setId(member.getId()); + memberInfo.setName(member.getName()); + memberInfo.setAvatarUrl(member.getAvatarUrl()); + memberInfo.setPhone(member.getPhone().substring(0, 3) + "****" + member.getPhone().substring(7)); + } + return memberInfo; + } + + @Override + public void saveMember(CMemberDto.SaveMemberInfo param, Long userId) { + //查找权限 + Integer pm = roleDao.isPmByUserId(userId, param.getProjectId()); + //只有负责人或者是项目经理才能操作 + if (pm == null || pm < 1) { + throw new BaseException(CommonCodeError.NOT_PERMISSION); + } + //检查手机号是否存在 + ProMemberExample memberExample = new ProMemberExample(); + memberExample.createCriteria().andProjectIdEqualTo(param.getProjectId()).andPhoneEqualTo(param.getPhone()); + List memberList = proMemberDao.selectByExample(memberExample); + if(CollectionUtil.isNotEmpty(memberList)){ + throw new BaseException(CommonCodeError.PROJECT_MEMBER_PHONE); + } + //通过手机号获取userId + Long memberUserId = null; + JsonResponse userIdByPhone = tall3FeignClient.getUserIdByPhone(param.getPhone()); + if(ObjectUtil.isNotNull(userIdByPhone) && userIdByPhone.getCode() == 200){ + memberUserId = userIdByPhone.getData(); + } + //添加成员信息 + ProMember proMember = new ProMember(); + proMember.setId(snowflake.nextId()); + proMember.setName(param.getName()); + proMember.setPhone(param.getPhone()); + proMember.setProjectId(param.getProjectId()); + proMember.setUserId(memberUserId); + proMemberDao.insertSelective(proMember); + } + + @Override + public void updateMember(CMemberDto.UpdateMemberInfo param, Long userId) { + //查找成员信息 + ProMember proMember = proMemberDao.selectByPrimaryKey(param.getMemberId()); + if(ObjectUtil.isNull(proMember)){ + throw new BaseException(CommonCodeError.MEMBER_ERROR); + } + //查找权限 + Integer pm = roleDao.isPmByUserId(userId, proMember.getProjectId()); + //只有负责人或者是项目经理才能操作 + if (pm == null || pm < 1) { + throw new BaseException(CommonCodeError.NOT_PERMISSION); + } + //修改成员信息 + if(StrUtil.isNotEmpty(param.getName())){ + proMember.setName(param.getName()); + } + if(StrUtil.isNotEmpty(param.getAvatarUrl())){ + proMember.setAvatarUrl(param.getAvatarUrl()); + } + if(StrUtil.isNotEmpty(param.getPhone())){ + Long memberUserId = null; + JsonResponse userIdByPhone = tall3FeignClient.getUserIdByPhone(param.getPhone()); + if(ObjectUtil.isNotNull(userIdByPhone) && userIdByPhone.getCode() == 200){ + memberUserId = userIdByPhone.getData(); + } + proMember.setUserId(memberUserId); + proMember.setPhone(param.getPhone()); + } + proMemberDao.updateByPrimaryKeySelective(proMember); + } + + @Override + public void deleteMember(CMemberDto.GetMember param, Long userId) { + //查找成员信息 + ProMember proMember = proMemberDao.selectByPrimaryKey(param.getMemberId()); + if(ObjectUtil.isNull(proMember)){ + throw new BaseException(CommonCodeError.MEMBER_ERROR); + } + //查找权限 + Integer pm = roleDao.isPmByUserId(userId, proMember.getProjectId()); + //只有负责人或者是项目经理才能操作 + if (pm == null || pm < 1) { + throw new BaseException(CommonCodeError.NOT_PERMISSION); + } + //删除成员信息 + proMember.setRecStatus((byte) 2); + proMemberDao.updateByPrimaryKeySelective(proMember); + } + + @Override + public void updateMemberRoles(CMemberDto.UpdateMemberRoles param, Long userId) { + ProMember proMember = proMemberDao.selectByPrimaryKey(param.getMemberId()); + if(ObjectUtil.isNull(proMember)){ + throw new BaseException(CommonCodeError.MEMBER_ERROR); + } + //查找权限 + Integer pm = roleDao.isPmByUserId(userId, proMember.getProjectId()); + //只有负责人或者是项目经理才能操作 + if (pm == null || pm < 1) { + throw new BaseException(CommonCodeError.NOT_PERMISSION); + } + //分配角色 + if(CollectionUtil.isNotEmpty(param.getRoleIdList())){ + param.getRoleIdList().forEach(roleId -> { + ProRoleMember roleMember = new ProRoleMember(); + roleMember.setId(snowflake.nextId()); + roleMember.setRoleId(roleId); + roleMember.setMemberId(param.getMemberId()); + roleMemberDao.insertSelective(roleMember); + }); + } + } } diff --git a/common/src/main/java/com/ccsens/common/service/ProRoleService.java b/common/src/main/java/com/ccsens/common/service/ProRoleService.java index 29b31b99..c145f82f 100644 --- a/common/src/main/java/com/ccsens/common/service/ProRoleService.java +++ b/common/src/main/java/com/ccsens/common/service/ProRoleService.java @@ -9,7 +9,9 @@ import com.ccsens.common.bean.po.*; import com.ccsens.common.bean.vo.CRoleVo; import com.ccsens.common.persist.dao.LabelDao; import com.ccsens.common.persist.dao.ProRoleDao; +import com.ccsens.common.persist.dao.ProRoleMemberDao; import com.ccsens.common.persist.mapper.*; +import com.ccsens.common.util.CommonCodeError; import com.ccsens.common.util.Constant; import com.ccsens.util.CodeEnum; import com.ccsens.util.exception.BaseException; @@ -35,6 +37,8 @@ public class ProRoleService implements IProRoleService { private ProRoleShowMapper proRoleShowMapper; @Resource private Snowflake snowflake; + @Resource + private ProRoleMemberDao proRoleMemberDao; @Override @@ -53,15 +57,15 @@ public class ProRoleService implements IProRoleService { proRoleShowMapper.updateByPrimaryKeySelective(proRoleShow); } } - List roleIds = param.getRoleIds(); //roleid + List roleIds = param.getRoleIds(); //去重重复的 - List roleIdsList=(List) roleIds.stream().distinct().collect(Collectors.toList()); + List roleIdsList = roleIds.stream().distinct().collect(Collectors.toList()); for (int i = 0; i < roleIdsList.size(); i++) { ProRoleShow proRoleShow = new ProRoleShow(); proRoleShow.setId(snowflake.nextId()); proRoleShow.setUserId(userId); proRoleShow.setProjectId(param.getProjectId()); - proRoleShow.setRoleId((long)roleIdsList.get(i)); + proRoleShow.setRoleId(roleIdsList.get(i)); proRoleShow.setOperator(userId); proRoleShow.setSequence(i+1); proRoleShowMapper.insertSelective(proRoleShow); @@ -160,8 +164,91 @@ public class ProRoleService implements IProRoleService { @Override public List queryMemberOfRole(CRoleDto.QueryMemberOfRole param, Long userId) { - List memberOfRoleInfos = proRoleDao.queryMemberOfRole(param); - return null; + return proRoleDao.queryMemberOfRole(param); + } + + @Override + public void saveRole(CRoleDto.SaveRole param, Long userId) { + //查找权限 + Integer pm = proRoleDao.isPmByUserId(userId, param.getProjectId()); + //只有负责人或者是项目经理才能操作 + if (pm == null || pm < 1) { + throw new BaseException(CommonCodeError.NOT_PERMISSION); + } + //添加角色 + ProRole proRole = new ProRole(); + proRole.setId(snowflake.nextId()); + proRole.setName(param.getRoleName()); + proRole.setProjectId(param.getProjectId()); + proRole.setLabelId(32L); + proRoleDao.insertSelective(proRole); + } + + @Override + public void updateRole(CRoleDto.UpdateRole param, Long userId) { + //查找角色 + ProRole proRole = proRoleDao.selectByPrimaryKey(param.getRoleId()); + if(ObjectUtil.isNull(proRole)){ + throw new BaseException(CommonCodeError.ROLE_ERROR); + } + //查找权限 + Integer pm = proRoleDao.isPmByUserId(userId, proRole.getProjectId()); + //只有负责人或者是项目经理才能操作 + if (pm == null || pm < 1) { + throw new BaseException(CommonCodeError.NOT_PERMISSION); + } + //修改角色信息 + if(StrUtil.isNotBlank(param.getRoleName())){ + proRole.setName(param.getRoleName()); + proRoleDao.updateByPrimaryKeySelective(proRole); + } } + @Override + public void delRole(CRoleDto.QueryMemberOfRole param, Long userId) { + //查找角色 + ProRole proRole = proRoleDao.selectByPrimaryKey(param.getRoleId()); + if(ObjectUtil.isNull(proRole)){ + throw new BaseException(CommonCodeError.ROLE_ERROR); + } + //查找权限 + Integer pm = proRoleDao.isPmByUserId(userId, proRole.getProjectId()); + //只有负责人或者是项目经理才能操作 + if (pm == null || pm < 1) { + throw new BaseException(CommonCodeError.NOT_PERMISSION); + } + //将角色状态改为删除 + proRole.setRecStatus((byte) 2); + proRoleDao.updateByPrimaryKeySelective(proRole); + //删除角色成员关联信息 + proRoleMemberDao.delByRoleId(param.getRoleId()); + } + + @Override + public void updateRoleMembers(CRoleDto.UpdateRoleMembers param, Long userId) { + //查找角色 + ProRole proRole = proRoleDao.selectByPrimaryKey(param.getRoleId()); + if(ObjectUtil.isNull(proRole)){ + throw new BaseException(CommonCodeError.ROLE_ERROR); + } + //查找权限 + Integer pm = proRoleDao.isPmByUserId(userId, proRole.getProjectId()); + //只有负责人或者是项目经理才能操作 + if (pm == null || pm < 1) { + throw new BaseException(CommonCodeError.NOT_PERMISSION); + } + //删除以前的成员角色关联信息 + proRoleMemberDao.delByRoleId(param.getRoleId()); + //添加新关联关系 + if(CollectionUtil.isNotEmpty(param.getMemberIdList())){ + param.getMemberIdList().forEach(memberId ->{ + ProRoleMember roleMember = new ProRoleMember(); + roleMember.setId(snowflake.nextId()); + roleMember.setRoleId(param.getRoleId()); + roleMember.setMemberId(memberId); + proRoleMemberDao.insertSelective(roleMember); + }); + } + + } } diff --git a/common/src/main/java/com/ccsens/common/util/CommonCodeError.java b/common/src/main/java/com/ccsens/common/util/CommonCodeError.java index c485cef2..e9f7438e 100644 --- a/common/src/main/java/com/ccsens/common/util/CommonCodeError.java +++ b/common/src/main/java/com/ccsens/common/util/CommonCodeError.java @@ -20,5 +20,7 @@ public class CommonCodeError extends CodeError { public static final Code NO_POWER = new Code(10,"没有权限", true); public static final Code MEMBER_NOT_MINE = new Code(11,"只能给自己打卡", true); public static final Code DATE_ERROR = new Code(12,"请选择正确的打卡日期", true); + public static final Code PROJECT_MEMBER_PHONE = new Code(13,"该手机号对应的成员在项目中已存在", true); + public static final Code MEMBER_ERROR = new Code(14,"成员不存在", true); } diff --git a/common/src/main/resources/mapper_dao/ProMemberDao.xml b/common/src/main/resources/mapper_dao/ProMemberDao.xml index 385ad745..7b20838b 100644 --- a/common/src/main/resources/mapper_dao/ProMemberDao.xml +++ b/common/src/main/resources/mapper_dao/ProMemberDao.xml @@ -124,4 +124,23 @@ AND m.id = #{memberId} AND rm.role_id = #{roleId} + + + diff --git a/common/src/main/resources/mapper_dao/ProRoleMemberDao.xml b/common/src/main/resources/mapper_dao/ProRoleMemberDao.xml index 25023a63..0fe82eb4 100644 --- a/common/src/main/resources/mapper_dao/ProRoleMemberDao.xml +++ b/common/src/main/resources/mapper_dao/ProRoleMemberDao.xml @@ -1,6 +1,14 @@ + + update + t_pro_role_member + set + rec_status = 2 + where + role_id = #{roleId} +