|
@@ -2,19 +2,26 @@ package com.qmth.teachcloud.common.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.qmth.boot.api.exception.ApiException;
|
|
|
import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
|
|
|
+import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatch;
|
|
|
import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberMatchParams;
|
|
|
import com.qmth.teachcloud.common.bean.params.SysRoleGroupMemberParams;
|
|
|
+import com.qmth.teachcloud.common.bean.result.SysRoleGroupMemberMatchResult;
|
|
|
+import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
import com.qmth.teachcloud.common.entity.SysRoleGroupMember;
|
|
|
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
+import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
|
|
|
import com.qmth.teachcloud.common.mapper.SysRoleGroupMemberMapper;
|
|
|
import com.qmth.teachcloud.common.service.SysRoleGroupMemberService;
|
|
|
import com.qmth.teachcloud.common.service.SysUserService;
|
|
|
+import com.qmth.teachcloud.common.util.ResultUtil;
|
|
|
+import org.springframework.dao.DuplicateKeyException;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.util.*;
|
|
|
-import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -40,28 +47,41 @@ public class SysRoleGroupMemberServiceImpl extends ServiceImpl<SysRoleGroupMembe
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public boolean saveOrUpdate(SysRoleGroupMemberParams roleGroupMemberParams) {
|
|
|
- //先查询数据库里的数据
|
|
|
- List<SysRoleGroupMember> sysRoleGroupMemberDbList = this.findByRoleId(roleGroupMemberParams.getRoleId());
|
|
|
- List<SysRoleGroupMember> sysRoleGroupMemberList = null;
|
|
|
- List<Long> userIdList = roleGroupMemberParams.getUserIdList();
|
|
|
- if (Objects.nonNull(sysRoleGroupMemberDbList) && sysRoleGroupMemberDbList.size() > 0) {//编辑
|
|
|
- int count = (int) sysRoleGroupMemberDbList.stream().filter(s -> userIdList.contains(s.getUserId())).count();
|
|
|
- if (count != sysRoleGroupMemberDbList.size() || userIdList.size() != sysRoleGroupMemberDbList.size()) {
|
|
|
- //全量删除
|
|
|
- this.removeByIds(sysRoleGroupMemberDbList.stream().map(s -> s.getId()).collect(Collectors.toList()));
|
|
|
+ try {
|
|
|
+ //先查询数据库里的数据
|
|
|
+ List<SysRoleGroupMember> sysRoleGroupMemberDbList = this.findByRoleIdAndUserId(roleGroupMemberParams.getRoleId(), roleGroupMemberParams.getUserId());
|
|
|
+ List<SysRoleGroupMember> sysRoleGroupMemberList = null;
|
|
|
+ List<Long> memberIdList = roleGroupMemberParams.getMemberIdList();
|
|
|
+ if (Objects.nonNull(sysRoleGroupMemberDbList) && sysRoleGroupMemberDbList.size() > 0) {//编辑
|
|
|
+ int count = (int) sysRoleGroupMemberDbList.stream().filter(s -> memberIdList.contains(s.getUserId())).count();
|
|
|
+ if (count != sysRoleGroupMemberDbList.size() || memberIdList.size() != sysRoleGroupMemberDbList.size()) {
|
|
|
+ //全量删除
|
|
|
+ this.removeByIds(sysRoleGroupMemberDbList.stream().map(s -> s.getId()).collect(Collectors.toList()));
|
|
|
+ sysRoleGroupMemberList = new ArrayList<>();
|
|
|
+ for (Long l : memberIdList) {
|
|
|
+ sysRoleGroupMemberList.add(new SysRoleGroupMember(roleGroupMemberParams.getRoleId(), roleGroupMemberParams.getUserId(), l));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
sysRoleGroupMemberList = new ArrayList<>();
|
|
|
- for (Long l : userIdList) {
|
|
|
- sysRoleGroupMemberList.add(new SysRoleGroupMember(roleGroupMemberParams.getRoleId(), l));
|
|
|
+ for (Long l : memberIdList) {
|
|
|
+ sysRoleGroupMemberList.add(new SysRoleGroupMember(roleGroupMemberParams.getRoleId(), roleGroupMemberParams.getUserId(), l));
|
|
|
}
|
|
|
}
|
|
|
- } else {
|
|
|
- sysRoleGroupMemberList = new ArrayList<>();
|
|
|
- for (Long l : userIdList) {
|
|
|
- sysRoleGroupMemberList.add(new SysRoleGroupMember(roleGroupMemberParams.getRoleId(), l));
|
|
|
+ if (Objects.nonNull(sysRoleGroupMemberList)) {
|
|
|
+ this.saveBatch(sysRoleGroupMemberList);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(SystemConstant.LOG_ERROR, e);
|
|
|
+ if (e instanceof DuplicateKeyException) {
|
|
|
+ String errorColumn = e.getCause().toString();
|
|
|
+ String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
|
|
|
+ throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
|
|
|
+ } else if (e instanceof ApiException) {
|
|
|
+ ResultUtil.error((ApiException) e, e.getMessage());
|
|
|
+ } else {
|
|
|
+ ResultUtil.error(e.getMessage());
|
|
|
}
|
|
|
- }
|
|
|
- if (Objects.nonNull(sysRoleGroupMemberList)) {
|
|
|
- this.saveBatch(sysRoleGroupMemberList);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
@@ -74,8 +94,31 @@ public class SysRoleGroupMemberServiceImpl extends ServiceImpl<SysRoleGroupMembe
|
|
|
*/
|
|
|
@Override
|
|
|
public List<SysRoleGroupMember> findByRoleId(Long roleId) {
|
|
|
+ return this.list(new QueryWrapper<SysRoleGroupMember>().lambda().eq(SysRoleGroupMember::getRoleId, roleId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据roleId和userId查找数据
|
|
|
+ *
|
|
|
+ * @param roleId
|
|
|
+ * @param userId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<SysRoleGroupMember> findByRoleIdAndUserId(Long roleId, Long userId) {
|
|
|
+ return this.list(new QueryWrapper<SysRoleGroupMember>().lambda().eq(SysRoleGroupMember::getRoleId, roleId).eq(SysRoleGroupMember::getUserId, userId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据memberId查找数据
|
|
|
+ *
|
|
|
+ * @param memberId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<SysRoleGroupMember> findByMemberId(Long memberId) {
|
|
|
QueryWrapper<SysRoleGroupMember> sysRoleGroupMemberQueryWrapper = new QueryWrapper<>();
|
|
|
- sysRoleGroupMemberQueryWrapper.lambda().eq(SysRoleGroupMember::getRoleId, roleId);
|
|
|
+ sysRoleGroupMemberQueryWrapper.lambda().eq(SysRoleGroupMember::getMemberId, memberId);
|
|
|
return this.list(sysRoleGroupMemberQueryWrapper);
|
|
|
}
|
|
|
|
|
@@ -86,22 +129,25 @@ public class SysRoleGroupMemberServiceImpl extends ServiceImpl<SysRoleGroupMembe
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public Map<String, List<ApproveUserResult>> matchList(SysRoleGroupMemberMatchParams roleGroupMemberMatchParams) {
|
|
|
- Map<String, SysRoleGroupMemberMatchParams.SysRoleGroupMemberMatch> map = roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap();
|
|
|
- map.forEach((k, v) -> {
|
|
|
- List<Long> roleIdList = v.getRoleIdList();
|
|
|
- Map<Long, Long> roleIdMap = roleIdList.stream().collect(
|
|
|
- Collectors.toMap(s -> s, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
-
|
|
|
- //查询该角色下的用户
|
|
|
- List<ApproveUserResult> approveUserResultList = sysUserService.findByRoleIdsForResult(roleIdList);
|
|
|
- Long userId = v.getUserId();
|
|
|
- Map<Long, ApproveUserResult> approveUserResultMap = new HashMap<>();
|
|
|
- for (ApproveUserResult a : approveUserResultList) {
|
|
|
- if (a.getId().longValue() == userId.longValue()) {
|
|
|
- }
|
|
|
+ public Map<String, SysRoleGroupMemberMatchResult> matchList(SysRoleGroupMemberMatchParams roleGroupMemberMatchParams) {
|
|
|
+ Map<String, SysRoleGroupMemberMatchResult> approveUserResultMap = null;
|
|
|
+ Map<String, SysRoleGroupMemberMatch> map = roleGroupMemberMatchParams.getFlowRoleGroupMemberMatchMap();
|
|
|
+ for (Map.Entry<String, SysRoleGroupMemberMatch> entry : map.entrySet()) {
|
|
|
+ List<SysRoleGroupMember> sysRoleGroupMemberList = this.findByMemberId(entry.getValue().getUserId());
|
|
|
+// List<SysRoleGroupMember> sysRoleGroupMemberFilter = sysRoleGroupMemberList.stream().filter(s -> v.getRoleIdList().contains(s.getRoleId())).collect(Collectors.toList());
|
|
|
+// boolean manual = false;
|
|
|
+// if (Objects.nonNull(sysRoleGroupMemberFilter) && sysRoleGroupMemberFilter.size() == 1) {//直接返回
|
|
|
+// manual = false;
|
|
|
+// } else if (Objects.nonNull(sysRoleGroupMemberFilter) && sysRoleGroupMemberFilter.size() > 1) {//前端选择
|
|
|
+// manual = true;
|
|
|
+// }
|
|
|
+// List<SysRoleGroupMember> sysRoleGroupMembers = this.findByRoleIds(sysRoleGroupMemberFilter.stream().map(s -> s.getRoleId()).collect(Collectors.toList()), v.getUserId());
|
|
|
+ if (Objects.nonNull(sysRoleGroupMemberList) && sysRoleGroupMemberList.size() > 0) {
|
|
|
+ approveUserResultMap = Objects.isNull(approveUserResultMap) ? new LinkedHashMap<>() : approveUserResultMap;
|
|
|
+ List<ApproveUserResult> approveUserResultList = sysUserService.findByRoleIdsForResult(sysRoleGroupMemberList.stream().map(s -> s.getRoleId()).collect(Collectors.toList()));
|
|
|
+ approveUserResultMap.put(entry.getKey(), new SysRoleGroupMemberMatchResult(approveUserResultList));
|
|
|
}
|
|
|
- });
|
|
|
- return null;
|
|
|
+ }
|
|
|
+ return approveUserResultMap;
|
|
|
}
|
|
|
}
|