RepalGroupMemberServiceImpl.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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. @Override
  53. public Long getUserGroupId(Long userId) {
  54. RepalGroupMember repalGroupMember = this.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
  55. .eq(RepalGroupMember::getUserId, userId)
  56. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  57. if (Objects.isNull(repalGroupMember)) {
  58. throw new CommonException(CodeMsg.FAILED, "组织错误");
  59. }
  60. return repalGroupMember.getRepalGroupId();
  61. }
  62. @Override
  63. public Boolean addGroupMember(Long userId, String userName, Long groupId, Long roleId, Integer roleType) {
  64. RepalGroupMember member = new RepalGroupMember();
  65. member.setRepalGroupId(groupId);
  66. member.setMemberUserName(userName);
  67. member.setUserId(userId);
  68. member.setRoleId(roleId);
  69. member.setRoleType(roleType);
  70. this.save(member);
  71. return true;
  72. }
  73. @Override
  74. public Boolean updateVisible(Integer type) {
  75. repalGroupMemberMapper.updateVisible(UserContextUtil.getUser().getUserId(), type);
  76. return true;
  77. }
  78. @Override
  79. public Boolean getMemberVisible(Integer type) {
  80. RepalGroupMember member = this.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
  81. .eq(RepalGroupMember::getUserId, UserContextUtil.getUser().getUserId())
  82. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  83. return (RepalBillTypeEnum.RECEIVABLE.getCode().equals(type) ? member.getReceivable() : member.getReceipt()) > 0;
  84. }
  85. @Override
  86. public List<GroupRoleMemberVO> getGroupRoleMemberList() {
  87. long userId = UserContextUtil.getUser().getUserId();
  88. long groupId = repalGroupMemberService.getUserGroupId(userId);
  89. List<RepalGroupMember> memberList = this.list(Wrappers.lambdaQuery(RepalGroupMember.class)
  90. .eq(RepalGroupMember::getRepalGroupId, groupId)
  91. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.NORMAL.getCode()));
  92. if (CollUtil.isEmpty(memberList)) {
  93. return new ArrayList<>();
  94. }
  95. List<RepalGroupRole> roleList = repalGroupRoleService.getRoleByIdList(memberList.stream().map(RepalGroupMember::getRoleId).distinct().collect(Collectors.toList()));
  96. List<UserInfo> userInfoList = userInfoService.list(Wrappers.lambdaQuery(UserInfo.class).in(UserInfo::getUserId,
  97. memberList.stream().map(RepalGroupMember::getUserId).collect(Collectors.toList())));
  98. Map<Long, String> roleNameMap = roleList.stream().collect(Collectors.toMap(RepalGroupRole::getId, RepalGroupRole::getRoleName));
  99. Map<Long, List<RepalGroupMember>> memberMap = memberList.stream().collect(Collectors.groupingBy(RepalGroupMember::getRoleId, Collectors.toList()));
  100. Map<Long, String> avatarMap = new HashMap<>();
  101. if (CollUtil.isNotEmpty(userInfoList)) {
  102. avatarMap = userInfoList.stream().collect(Collectors.toMap(UserInfo::getUserId, UserInfo::getAvatar));
  103. }
  104. List<GroupRoleMemberVO> resultList = new ArrayList<>();
  105. for (Map.Entry<Long, List<RepalGroupMember>> entry : memberMap.entrySet()) {
  106. GroupRoleMemberVO vo = new GroupRoleMemberVO();
  107. vo.setRoleId(entry.getKey());
  108. vo.setRoleName(roleNameMap.get(entry.getKey()));
  109. Map<Long, String> finalAvatarMap = avatarMap;
  110. vo.setRoleMemberList(entry.getValue().stream().map(t -> {
  111. GroupRoleMemberVO.RoleMemberVO roleMemberVO = new GroupRoleMemberVO.RoleMemberVO();
  112. roleMemberVO.setMemberId(t.getId());
  113. roleMemberVO.setMemberName(t.getMemberUserName());
  114. roleMemberVO.setUserId(t.getUserId());
  115. roleMemberVO.setAvatar(finalAvatarMap.get(t.getUserId()));
  116. return roleMemberVO;
  117. }).sorted(Comparator.comparing(GroupRoleMemberVO.RoleMemberVO::getMemberId).reversed()).collect(Collectors.toList()));
  118. resultList.add(vo);
  119. }
  120. return resultList.stream().sorted(Comparator.comparing(GroupRoleMemberVO::getRoleId)).collect(Collectors.toList());
  121. }
  122. @Override
  123. @Transactional(rollbackFor = Exception.class)
  124. public Boolean updateMemberRole(UpdateMemberRoleDTO dto) {
  125. long groupId = this.getUserGroupId(UserContextUtil.getUser().getUserId());
  126. RepalGroupRole role = repalGroupRoleService.getById(dto.getRoleId());
  127. if (Objects.isNull(role)) {
  128. throw new CommonException(CodeMsg.FAILED, "角色错误");
  129. }
  130. if (RoleTypeEnum.CUSTOMER.getCode().equals(role.getRoleType()) && !role.getRepalGroupId().equals(groupId)) {
  131. throw new CommonException(CodeMsg.FAILED, "组织角色错误");
  132. }
  133. this.update(Wrappers.lambdaUpdate(RepalGroupMember.class)
  134. .eq(RepalGroupMember::getRepalGroupId, groupId)
  135. .eq(RepalGroupMember::getUserId, dto.getUserId())
  136. .set(RepalGroupMember::getRoleId, dto.getRoleId()));
  137. return true;
  138. }
  139. @Override
  140. @Transactional(rollbackFor = Exception.class)
  141. public Boolean addGroupMember(AddGroupMemberDTO dto) {
  142. RepalGroupRole role = repalGroupRoleService.getById(dto.getRoleId());
  143. if (Objects.isNull(role)) {
  144. throw new CommonException(CodeMsg.FAILED, "角色错误");
  145. }
  146. long userId = UserContextUtil.getUser().getUserId();
  147. long groupId = this.getUserGroupId(userId);
  148. RepalRegUserInfoDTO regUserInfoDTO = new RepalRegUserInfoDTO();
  149. regUserInfoDTO.setUserId(userId);
  150. regUserInfoDTO.setThirdPartyType(dto.getThirdPartyType());
  151. regUserInfoDTO.setRegUserList(dto.getRegList().stream().map(t -> {
  152. RepalRegUserDTO userDTO = new RepalRegUserDTO();
  153. userDTO.setAvatar(t.getAvatar());
  154. userDTO.setOpenId(t.getOpenId());
  155. return userDTO;
  156. }).collect(Collectors.toList()));
  157. BeanResponse<List<RepalRegUserDTO>> beanResponse = loginService.repalRegUser(regUserInfoDTO);
  158. if (Objects.isNull(beanResponse) || CollUtil.isEmpty(beanResponse.getBody())) {
  159. throw new CommonException(CodeMsg.FAILED, "添加用户失败");
  160. }
  161. for (RepalRegUserDTO regUserDTO : beanResponse.getBody()) {
  162. RepalGroupMember repalGroupMember = new RepalGroupMember();
  163. repalGroupMember.setUserId(regUserDTO.getUserId());
  164. repalGroupMember.setRepalGroupId(groupId);
  165. repalGroupMember.setMemberUserName(regUserDTO.getUserName());
  166. repalGroupMember.setRoleType(role.getRoleType());
  167. repalGroupMember.setRoleId(role.getId());
  168. this.save(repalGroupMember);
  169. }
  170. return true;
  171. }
  172. @Override
  173. public Boolean delGroupMember(Long userId) {
  174. if (repalResponsiblePersonService.getUserResponsibleBillCount(userId) > 1) {
  175. throw new CommonException(CodeMsg.FAILED, "当前成员有负责的账款未转移,无法删除");
  176. }
  177. if (repalCustChargeRelService.getUserCustCount(userId) > 1) {
  178. throw new CommonException(CodeMsg.FAILED, "当前成员有负责的客户未转移,无法删除");
  179. }
  180. if (UserContextUtil.getUser().getUserId().equals(userId)) {
  181. throw new CommonException(CodeMsg.FAILED, "无法删除自己");
  182. }
  183. this.update(Wrappers.lambdaUpdate(RepalGroupMember.class)
  184. .eq(RepalGroupMember::getUserId, userId)
  185. .eq(RepalGroupMember::getDeleted, DeletedStatusEnum.DELETE.getCode()));
  186. return true;
  187. }
  188. }