From 74472c9d22dddcb41383794caf0011043b20f817 Mon Sep 17 00:00:00 2001 From: kimi <kimi42345@gmail.com> Date: 星期二, 31 三月 2020 13:25:47 +0800 Subject: [PATCH] fix 数据权限 --- src/main/java/com/highdatas/mdm/service/impl/MasterAuthorServiceImpl.java | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 216 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/highdatas/mdm/service/impl/MasterAuthorServiceImpl.java b/src/main/java/com/highdatas/mdm/service/impl/MasterAuthorServiceImpl.java index 6367289..1af087c 100644 --- a/src/main/java/com/highdatas/mdm/service/impl/MasterAuthorServiceImpl.java +++ b/src/main/java/com/highdatas/mdm/service/impl/MasterAuthorServiceImpl.java @@ -1,21 +1,22 @@ package com.highdatas.mdm.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; -import com.highdatas.mdm.entity.MasterAuthor; -import com.highdatas.mdm.entity.MasterAuthorDetail; -import com.highdatas.mdm.entity.SysField; -import com.highdatas.mdm.entity.SysMenu; +import com.highdatas.mdm.controller.MasterAuthorController; +import com.highdatas.mdm.entity.*; import com.highdatas.mdm.mapper.MasterAuthorMapper; +import com.highdatas.mdm.pojo.ActivitiStatus; import com.highdatas.mdm.pojo.MasterAuthorType; -import com.highdatas.mdm.pojo.Result; -import com.highdatas.mdm.service.IMasterAuthorDetailService; -import com.highdatas.mdm.service.IMasterAuthorService; +import com.highdatas.mdm.service.*; import com.highdatas.mdm.util.Constant; +import com.highdatas.mdm.util.ContentBuilder; import com.highdatas.mdm.util.DbUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.MessageFormat; import java.util.*; import java.util.stream.Collectors; @@ -32,10 +33,22 @@ public static final String characterId = "characterId"; @Autowired IMasterAuthorDetailService authorDetailService; + @Autowired + ITUserRoleService userRoleService; + @Autowired + ISysMenuService menuService; + @Autowired + ISysFieldService fieldService; + @Autowired + IMaintainFieldService maintainFieldService; + @Autowired + IMaintainService maintainService; + @Autowired + IFlowsService flowsService; @Override - public Result merageRoleAuthor(List<String> roleIds) { - List<MasterAuthor> masterAuthors = selectList(new EntityWrapper<MasterAuthor>().eq(Constant.TYPE, MasterAuthorType.role).in(this.characterId, roleIds)); + public HashMap<String, MasterAuthor> merageRoleAuthor(List<String> roleIds) { + List<MasterAuthor> masterAuthors = selectList(new EntityWrapper<MasterAuthor>().eq(Constant.TYPE, MasterAuthorType.role).in(MasterAuthorController.character_id, roleIds)); HashMap<String, MasterAuthor> resultMap = new HashMap<>(); for (MasterAuthor masterAuthor : masterAuthors) { @@ -52,16 +65,207 @@ resultMap.put(key, preMerageMasterAuthor); } } - return Result.success(resultMap.values()); + return resultMap; } @Override public List<SysMenu> getMenu(String userId) { - return null; + List<MasterAuthor> masterAuthors = selectList(new EntityWrapper<MasterAuthor>().eq(Constant.TYPE, MasterAuthorType.user).eq(MasterAuthorController.character_id, userId)); + if (masterAuthors.size() == 0) { + //user 鑾峰彇role + List<TUserRole> roles = userRoleService.selectList(new EntityWrapper<TUserRole>().eq("user_id", userId)); + List<String> roleIds = roles.stream().map(tUserRole -> tUserRole.getRoleId()).collect(Collectors.toList()); + masterAuthors = selectList(new EntityWrapper<MasterAuthor>().eq(Constant.TYPE, MasterAuthorType.role).in(MasterAuthorController.character_id, roleIds)); + } + List<String> menuIds = masterAuthors.stream().map(masterAuthor -> masterAuthor.getMenuId()).collect(Collectors.toList()); + LinkedHashSet<String> strings = new LinkedHashSet<>(menuIds); + LinkedHashSet<String> byParentId = menuService.getByParentId(strings); + List<SysMenu> sysMenus = menuService.selectBatchIds(byParentId); + return sysMenus; } @Override - public List<SysField> getField(String userId) { + public List<SysField> getField(String userId, String maintainId) { + Maintain maintain = maintainService.selectById(maintainId); + if (maintain == null){ + return new ArrayList<>(); + } + boolean isAll = checkUnFilterAuthor(userId, maintain.getTableName()); + if (isAll) { + List<SysField> total = fieldService.getFieldByMaintain(maintainId); + return total; + } + + MaintainField maintainField = fieldService.getMaintainFieldByMaintain(maintainId); + if (maintainField == null){ + return new ArrayList<>(); + } + String maintainFieldId = maintainField.getId(); + + List<MasterAuthor> masterAuthors = selectList(new EntityWrapper<MasterAuthor>().eq(Constant.TYPE, MasterAuthorType.user).eq(MasterAuthorController.character_id, userId).eq("maintain_field_id", maintainFieldId)); + if (masterAuthors.size() == 0) { + //user 鑾峰彇role + List<TUserRole> roles = userRoleService.selectList(new EntityWrapper<TUserRole>().eq("user_id", userId)); + List<String> roleIds = roles.stream().map(tUserRole -> tUserRole.getRoleId()).collect(Collectors.toList()); + masterAuthors = selectList(new EntityWrapper<MasterAuthor>().eq(Constant.TYPE, MasterAuthorType.role).in(MasterAuthorController.character_id, roleIds).eq("maintain_field_id", maintainFieldId)); + } + if (masterAuthors.isEmpty()) { + return null; + } + List<String> authorIds = masterAuthors.stream().map(masterAuthor -> masterAuthor.getId()).collect(Collectors.toList()); + List<MasterAuthorDetail> masterAuthorDetails = authorDetailService.selectList(new EntityWrapper<MasterAuthorDetail>().in(Constant.PARENT_ID, authorIds)); + Set<String> codes = masterAuthorDetails.stream().map(masterAuthorDetail -> masterAuthorDetail.getField()).collect(Collectors.toSet()); + if (codes.isEmpty()) { + return null; + } + Wrapper<SysField> wrapper = new EntityWrapper<SysField>().in(Constant.FIELD, codes).eq("table_name", maintain.getTableName()); + + if (!maintainFieldId.equalsIgnoreCase(Constant.Default)) { + wrapper.eq("maintain_field_id", maintainFieldId); + }else { + wrapper.isNull("maintain_field_id"); + } + wrapper.orderBy("order_no"); + + List<SysField> fieldList = fieldService.selectList(wrapper); + return fieldList; + } + + private boolean checkUnFilterAuthor(String userId, String tableName) { + List<MasterAuthor> masterAuthors = selectList(new EntityWrapper<MasterAuthor>().eq(Constant.TYPE, MasterAuthorType.user).eq(MasterAuthorController.character_id, userId).eq("table_name", tableName)); + long isAll = masterAuthors.stream().filter(masterAuthor -> masterAuthor.getMaintainFieldId().equalsIgnoreCase(Constant.All)).count(); + if (isAll > 0) { + return true; + } + if (!masterAuthors.isEmpty()) { + return false; + } + Set<String> roleByUser = DbUtils.getRoleByUser(userId); + isAll = selectCount(new EntityWrapper<MasterAuthor>().eq(Constant.TYPE, MasterAuthorType.role).in(MasterAuthorController.character_id, roleByUser).eq("table_name", tableName).eq("maintain_field_id", Constant.All_UPCASE)); + if (isAll > 0) { + return true; + } + + return false; + } + + @Override + public boolean checkMaintainAuthor(String userId, String maintainId) { + Maintain maintain = maintainService.selectById(maintainId); + if (maintain == null) { + return false; + } + int checked = 0; + boolean isAll = checkUnFilterAuthor(userId, maintain.getTableName()); + if (isAll){ + return true; + + } + MaintainField maintainField = fieldService.getMaintainFieldByMaintain(maintainId); + if (maintainField == null) { + return false; + } + //get user author + checked = selectCount(new EntityWrapper<MasterAuthor>() + .eq(Constant.TYPE, MasterAuthorType.user) + .eq(MasterAuthorController.character_id, userId) + .eq("table_name", maintain.getTableName()) + .eq("maintain_field_id", maintainField.getId())); + if (checked > 0) { + return true; + } + List<TUserRole> roles = userRoleService.selectList(new EntityWrapper<TUserRole>().eq("user_id", userId)); + Set<String> collect = roles.stream().map(tUserRole -> tUserRole.getRoleId()).collect(Collectors.toSet()); + checked = selectCount(new EntityWrapper<MasterAuthor>() + .eq(Constant.TYPE, MasterAuthorType.role) + .in(MasterAuthorController.character_id, collect) + .eq("table_name", maintain.getTableName()) + .eq("maintain_field_id", maintainField.getId())); + if (checked > 0) { + return true; + } + return false; + } + + @Override + public String getFilter(String userId, String maintainId) { + Maintain maintain = maintainService.selectById(maintainId); + if (maintain == null){ + return Constant.WHERE_DEFAULTUN; + } + boolean isAll = checkUnFilterAuthor(userId, maintain.getTableName()); + if (isAll) { + return Constant.WHERE_DEFAULT; + } + MaintainField maintainField = fieldService.getMaintainFieldByMaintain(maintainId); + String maintainFieldId = maintainField.getId(); + + List<MasterAuthor> masterAuthors = selectList(new EntityWrapper<MasterAuthor>() + .eq("table_name", maintain.getTableName()) + .eq(Constant.TYPE, MasterAuthorType.user).eq(MasterAuthorController.character_id, userId).eq("maintain_field_id", maintainFieldId)); + if (masterAuthors.size() == 0) { + //user 鑾峰彇role + List<TUserRole> roles = userRoleService.selectList(new EntityWrapper<TUserRole>().eq("user_id", userId)); + List<String> roleIds = roles.stream().map(tUserRole -> tUserRole.getRoleId()).collect(Collectors.toList()); + masterAuthors = selectList(new EntityWrapper<MasterAuthor>().eq("table_name", maintain.getTableName()).eq(Constant.TYPE, MasterAuthorType.role).in(MasterAuthorController.character_id, roleIds).eq("maintain_field_id", maintainFieldId)); + } + if (masterAuthors.isEmpty()){ + return Constant.WHERE_DEFAULTUN; + } + List<String> authorIds = masterAuthors.stream().map(masterAuthor -> masterAuthor.getId()).collect(Collectors.toList()); + List<MasterAuthorDetail> masterAuthorDetails = authorDetailService.selectList(new EntityWrapper<MasterAuthorDetail>().in(Constant.PARENT_ID, authorIds)); + if (masterAuthorDetails.isEmpty()) { + return Constant.WHERE_DEFAULTUN; + } + HashMap<String, List<String>> segmentMap = new HashMap<>(); + HashMap<String, Boolean> segmentAllMap = new HashMap<>(); + + for (MasterAuthorDetail detail : masterAuthorDetails) { + String field = detail.getField(); + Boolean all = detail.getAll(); + if (!(segmentAllMap.containsKey(field) && segmentAllMap.get(field))) { + segmentAllMap.put(field, all); + } + + Boolean preAll = segmentAllMap.get(field); + if (preAll) { + if (segmentMap.containsKey(field)) { + segmentMap.remove(field); + } + continue; + } + + String val = detail.getVal(); + List<String> split = DbUtils.split(val); + segmentMap.put(field,split); + } + ContentBuilder builder = new ContentBuilder(Constant.AND); + Set<String> keySet = segmentMap.keySet(); + for (String code : keySet) { + List<String> vals = segmentMap.get(code); + String val = vals.stream() + .filter(s -> !StringUtils.isEmpty(s)) + .map(s -> DbUtils.quotedStr(s)).collect(Collectors.joining(Constant.COMMA)); + String format = MessageFormat.format(Constant.InSql, code, val); + builder.append(format); + } + String filter = builder.toString(); + return filter; + } + + @Override + public Maintain getMaxVersionMaintain(String userId, String tableName) { + List<Maintain> maintainList = maintainService.selectList(new EntityWrapper<Maintain>().eq("table_name", tableName).orderBy("order_no desc")); + for (Maintain maintain : maintainList) { + ActivitiStatus status = flowsService.getStatusByBusinessId(maintain.getId()); + if (!status.equals(ActivitiStatus.open)) { + continue; + } + boolean b = checkMaintainAuthor(userId, maintain.getId()); + if (b) { + return maintain; + } + } return null; } -- Gitblit v1.8.0