RepalGroupMemberServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package com.winhc.repal.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.winhc.common.base.BeanResponse;
  6. import com.winhc.common.enums.CodeMsg;
  7. import com.winhc.common.exception.CommonException;
  8. import com.winhc.repal.cloud.LoginService;
  9. import com.winhc.repal.cloud.dto.RepalRegUserDTO;
  10. import com.winhc.repal.cloud.dto.RepalRegUserInfoDTO;
  11. import com.winhc.repal.entity.RepalBill;
  12. import com.winhc.repal.entity.RepalGroupMember;
  13. import com.winhc.repal.entity.RepalGroupRole;
  14. import com.winhc.repal.entity.UserInfo;
  15. import com.winhc.repal.enums.DeletedStatusEnum;
  16. import com.winhc.repal.enums.RepalBillTypeEnum;
  17. import com.winhc.repal.enums.RoleTypeEnum;
  18. import com.winhc.repal.model.dto.AddGroupMemberDTO;
  19. import com.winhc.repal.model.dto.UpdateMemberRoleDTO;
  20. import com.winhc.repal.model.vo.GroupRoleMemberVO;
  21. import com.winhc.repal.repository.RepalGroupMemberMapper;
  22. import com.winhc.repal.service.*;
  23. import com.winhc.repal.util.UserContextUtil;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. /**
  30. * @description RepalGroupMember 接口实现类
  31. * @author Generator
  32. * @date 2022-04-08
  33. */
  34. @Service
  35. public class RepalGroupMemberServiceImpl extends ServiceImpl<RepalGroupMemberMapper, RepalGroupMember> implements RepalGroupMemberService {
  36. @Autowired
  37. private UserExtService userExtService;
  38. @Autowired
  39. private RepalGroupMemberMapper repalGroupMemberMapper;
  40. @Autowired
  41. private RepalGroupMemberService repalGroupMemberService;
  42. @Autowired
  43. private RepalGroupRoleService repalGroupRoleService;
  44. @Autowired
  45. private LoginService loginService;
  46. @Autowired
  47. private UserInfoService userInfoService;
  48. @Autowired
  49. private RepalResponsiblePersonService repalResponsiblePersonService;
  50. @Autowired
  51. private RepalCustChargeRelService repalCustChargeRelService;
  52. @Autowired
  53. private RepalRolePermissionService repalRolePermissionService;
  54. @Override
  55. public Long getUserGroupId(Long userId) {
  56. RepalGroupMember repalGroupMember = this.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
  57. .eq(RepalGroupMember::getUserId, userId)
  58. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  59. if (Objects.isNull(repalGroupMember)) {
  60. throw new CommonException(CodeMsg.FAILED, "组织错误");
  61. }
  62. return repalGroupMember.getRepalGroupId();
  63. }
  64. @Override
  65. public Boolean addGroupMember(Long userId, String userName, Long groupId, Long roleId, Integer roleType) {
  66. RepalGroupMember member = new RepalGroupMember();
  67. member.setRepalGroupId(groupId);
  68. member.setMemberUserName(userName);
  69. member.setUserId(userId);
  70. member.setRoleId(roleId);
  71. member.setRoleType(roleType);
  72. this.save(member);
  73. return true;
  74. }
  75. @Override
  76. public Boolean updateVisible(Integer type) {
  77. repalGroupMemberMapper.updateVisible(UserContextUtil.getUser().getUserId(), type);
  78. return true;
  79. }
  80. @Override
  81. public Boolean getMemberVisible(Integer type) {
  82. RepalGroupMember member = this.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
  83. .eq(RepalGroupMember::getUserId, UserContextUtil.getUser().getUserId())
  84. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  85. return (RepalBillTypeEnum.RECEIVABLE.getCode().equals(type) ? member.getReceivable() : member.getReceipt()) > 0;
  86. }
  87. @Override
  88. public List<GroupRoleMemberVO> getGroupRoleMemberList() {
  89. long userId = UserContextUtil.getUser().getUserId();
  90. long groupId = repalGroupMemberService.getUserGroupId(userId);
  91. List<RepalGroupMember> memberList = this.list(Wrappers.lambdaQuery(RepalGroupMember.class)
  92. .eq(RepalGroupMember::getRepalGroupId, groupId)
  93. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  94. if (CollUtil.isEmpty(memberList)) {
  95. return new ArrayList<>();
  96. }
  97. List<RepalGroupRole> roleList = repalGroupRoleService.getRoleByIdList(memberList.stream().map(RepalGroupMember::getRoleId).distinct().collect(Collectors.toList()));
  98. List<UserInfo> userInfoList = userInfoService.list(Wrappers.lambdaQuery(UserInfo.class).in(UserInfo::getUserId,
  99. memberList.stream().map(RepalGroupMember::getUserId).collect(Collectors.toList())));
  100. Map<Long, String> roleNameMap = roleList.stream().collect(Collectors.toMap(RepalGroupRole::getId, RepalGroupRole::getRoleName));
  101. Map<Long, List<RepalGroupMember>> memberMap = memberList.stream().collect(Collectors.groupingBy(RepalGroupMember::getRoleId, Collectors.toList()));
  102. Map<Long, String> avatarMap = new HashMap<>();
  103. if (CollUtil.isNotEmpty(userInfoList)) {
  104. avatarMap = userInfoList.stream().collect(HashMap::new, (k, v) -> k.put(v.getUserId(), v.getAvatar()), HashMap::putAll);
  105. }
  106. List<GroupRoleMemberVO> resultList = new ArrayList<>();
  107. for (Map.Entry<Long, List<RepalGroupMember>> entry : memberMap.entrySet()) {
  108. GroupRoleMemberVO vo = new GroupRoleMemberVO();
  109. vo.setRoleId(entry.getKey());
  110. vo.setRoleName(roleNameMap.get(entry.getKey()));
  111. Map<Long, String> finalAvatarMap = avatarMap;
  112. vo.setRoleMemberList(entry.getValue().stream().map(t -> {
  113. GroupRoleMemberVO.RoleMemberVO roleMemberVO = new GroupRoleMemberVO.RoleMemberVO();
  114. roleMemberVO.setMemberId(t.getId());
  115. roleMemberVO.setMemberName(t.getMemberUserName());
  116. roleMemberVO.setUserId(t.getUserId());
  117. roleMemberVO.setAvatar(finalAvatarMap.get(t.getUserId()));
  118. return roleMemberVO;
  119. }).sorted(Comparator.comparing(GroupRoleMemberVO.RoleMemberVO::getMemberId).reversed()).collect(Collectors.toList()));
  120. resultList.add(vo);
  121. }
  122. return resultList.stream().sorted(Comparator.comparing(GroupRoleMemberVO::getRoleId)).collect(Collectors.toList());
  123. }
  124. @Override
  125. @Transactional(rollbackFor = Exception.class)
  126. public Boolean updateMemberRole(UpdateMemberRoleDTO dto) {
  127. long groupId = this.getUserGroupId(UserContextUtil.getUser().getUserId());
  128. RepalGroupRole role = repalGroupRoleService.getById(dto.getRoleId());
  129. if (Objects.isNull(role)) {
  130. throw new CommonException(CodeMsg.FAILED, "角色错误");
  131. }
  132. if (RoleTypeEnum.CUSTOMER.getCode().equals(role.getRoleType()) && !role.getRepalGroupId().equals(groupId)) {
  133. throw new CommonException(CodeMsg.FAILED, "组织角色错误");
  134. }
  135. this.update(Wrappers.lambdaUpdate(RepalGroupMember.class)
  136. .eq(RepalGroupMember::getRepalGroupId, groupId)
  137. .eq(RepalGroupMember::getUserId, dto.getUserId())
  138. .set(RepalGroupMember::getRoleId, dto.getRoleId()));
  139. return true;
  140. }
  141. @Override
  142. @Transactional(rollbackFor = Exception.class)
  143. public Boolean addGroupMember(AddGroupMemberDTO dto) {
  144. RepalGroupRole role = repalGroupRoleService.getById(dto.getRoleId());
  145. if (Objects.isNull(role)) {
  146. throw new CommonException(CodeMsg.FAILED, "角色错误");
  147. }
  148. long userId = UserContextUtil.getUser().getUserId();
  149. long groupId = this.getUserGroupId(userId);
  150. RepalRegUserInfoDTO regUserInfoDTO = new RepalRegUserInfoDTO();
  151. regUserInfoDTO.setUserId(userId);
  152. regUserInfoDTO.setThirdPartyType(dto.getThirdPartyType());
  153. regUserInfoDTO.setRegUserList(dto.getRegList().stream().map(t -> {
  154. RepalRegUserDTO userDTO = new RepalRegUserDTO();
  155. userDTO.setAvatar(t.getAvatar());
  156. userDTO.setOpenId(t.getOpenId());
  157. return userDTO;
  158. }).collect(Collectors.toList()));
  159. BeanResponse<List<RepalRegUserDTO>> beanResponse = loginService.repalRegUser(regUserInfoDTO);
  160. if (Objects.isNull(beanResponse) || CollUtil.isEmpty(beanResponse.getBody())) {
  161. throw new CommonException(CodeMsg.FAILED, "添加用户失败");
  162. }
  163. for (RepalRegUserDTO regUserDTO : beanResponse.getBody()) {
  164. RepalGroupMember repalGroupMember = new RepalGroupMember();
  165. repalGroupMember.setUserId(regUserDTO.getUserId());
  166. repalGroupMember.setRepalGroupId(groupId);
  167. repalGroupMember.setMemberUserName(regUserDTO.getUserName());
  168. repalGroupMember.setRoleType(role.getRoleType());
  169. repalGroupMember.setRoleId(role.getId());
  170. this.save(repalGroupMember);
  171. }
  172. return true;
  173. }
  174. @Override
  175. public Boolean delGroupMember(Long userId) {
  176. if (repalResponsiblePersonService.getUserResponsibleBillCount(userId) > 1) {
  177. throw new CommonException(CodeMsg.FAILED, "当前成员有负责的账款未转移,无法删除");
  178. }
  179. if (repalCustChargeRelService.getUserCustCount(userId) > 1) {
  180. throw new CommonException(CodeMsg.FAILED, "当前成员有负责的客户未转移,无法删除");
  181. }
  182. if (UserContextUtil.getUser().getUserId().equals(userId)) {
  183. throw new CommonException(CodeMsg.FAILED, "无法删除自己");
  184. }
  185. this.update(Wrappers.lambdaUpdate(RepalGroupMember.class)
  186. .eq(RepalGroupMember::getUserId, userId)
  187. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.DELETE.getCode()));
  188. return true;
  189. }
  190. @Override
  191. public List<String> getMemberRoleList() {
  192. long userId = UserContextUtil.getUser().getUserId();
  193. if (this.count(Wrappers.lambdaQuery(RepalGroupMember.class)
  194. .eq(RepalGroupMember::getUserId, userId)
  195. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode())) < 1) {
  196. throw new CommonException(CodeMsg.FAILED, "该用户不属于任何组织");
  197. }
  198. return new ArrayList<>(repalRolePermissionService.getUserPermissionCodeSet(userId));
  199. }
  200. }