RepalGroupMemberServiceImpl.java 11 KB

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