|
|
@@ -0,0 +1,175 @@
|
|
|
+package com.crm.manager.service.impl;
|
|
|
+
|
|
|
+import com.crm.manager.dao.mapper.MerchantRoleMapper;
|
|
|
+import com.crm.manager.service.MerchantRoleService;
|
|
|
+import com.crm.rely.backend.core.constant.Constants;
|
|
|
+import com.crm.rely.backend.core.dto.user.role.UserActionDisplayDto;
|
|
|
+import com.crm.rely.backend.core.dto.user.role.UserNodeDisplayDto;
|
|
|
+import com.crm.rely.backend.core.entity.user.role.UserRoleAddEntity;
|
|
|
+import com.crm.rely.backend.core.entity.user.role.UserRoleOperateEntity;
|
|
|
+import com.crm.rely.backend.core.pojo.table.SysActionTable;
|
|
|
+import com.crm.rely.backend.core.pojo.table.UserRoleDetailTable;
|
|
|
+import com.crm.rely.backend.core.pojo.table.UserRoleNodeTable;
|
|
|
+import com.crm.rely.backend.core.pojo.table.ucard.MerchantActionTable;
|
|
|
+import com.crm.rely.backend.core.pojo.table.ucard.MerchantNodeTable;
|
|
|
+import com.crm.rely.backend.core.pojo.view.SysNodeView;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class MerchantRoleServiceImpl implements MerchantRoleService {
|
|
|
+ @Autowired
|
|
|
+ private MerchantRoleMapper merchantRoleMapper;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void add(UserRoleAddEntity userRoleAddEntity) {
|
|
|
+ Long merchantId = 1L;
|
|
|
+ List<MerchantNodeTable> merchantNodeTables = new ArrayList<>();
|
|
|
+ List<MerchantActionTable> merchantActionTables = new ArrayList<>();
|
|
|
+ List<UserRoleOperateEntity> userRoleOperateEntities = userRoleAddEntity.getData();
|
|
|
+ for (UserRoleOperateEntity userRoleOperateEntity : userRoleOperateEntities) {
|
|
|
+ // 节点
|
|
|
+ if(userRoleOperateEntity.getType() == 0){
|
|
|
+ MerchantNodeTable merchantNodeTable = new MerchantNodeTable();
|
|
|
+ merchantNodeTable.setMerchantId(merchantId);
|
|
|
+ merchantNodeTable.setNodeId(userRoleOperateEntity.getId());
|
|
|
+ merchantNodeTables.add(merchantNodeTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按钮
|
|
|
+ else if(userRoleOperateEntity.getType() == 1){
|
|
|
+ MerchantActionTable merchantActionTable = new MerchantActionTable();
|
|
|
+ merchantActionTable.setMerchantId(merchantId);
|
|
|
+ merchantActionTable.setActionId(userRoleOperateEntity.getId());
|
|
|
+ merchantActionTables.add(merchantActionTable);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ merchantRoleMapper.bantchInsertNode(merchantNodeTables,merchantId);
|
|
|
+ merchantRoleMapper.bantchInsertAction(merchantActionTables,merchantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<UserNodeDisplayDto> merchantDetailList(Long merchantId) {
|
|
|
+ /*
|
|
|
+ * 该商户拥有的所有菜单
|
|
|
+ */
|
|
|
+ List<SysNodeView> sysNodeViews = merchantRoleMapper.getMerchantNodesByMerchantId(merchantId);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 获取按钮信息
|
|
|
+ */
|
|
|
+ List<SysActionTable> sysActionTables = merchantRoleMapper.getAllByMerchantId(merchantId);
|
|
|
+
|
|
|
+ List<UserRoleDetailTable> roleDetailTables = new ArrayList<UserRoleDetailTable>();
|
|
|
+
|
|
|
+ for (SysActionTable sysActionTable : sysActionTables) {
|
|
|
+
|
|
|
+ UserRoleDetailTable userRoleDetailTable = new UserRoleDetailTable();
|
|
|
+ userRoleDetailTable.setActionId(sysActionTable.getId());
|
|
|
+ userRoleDetailTable.setRoleId(null);
|
|
|
+ userRoleDetailTable.setNodeId(sysActionTable.getNodeId());
|
|
|
+
|
|
|
+ roleDetailTables.add(userRoleDetailTable);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<UserNodeDisplayDto> userNodeDisplayEntities = new ArrayList<UserNodeDisplayDto>();
|
|
|
+ if (sysNodeViews != null && sysNodeViews.size() > 0) {
|
|
|
+ for (SysNodeView sysNodeTable : sysNodeViews) {
|
|
|
+ // 顶级菜单
|
|
|
+ if (sysNodeTable.getPid() == null || sysNodeTable.getPid() == 0) {
|
|
|
+ UserNodeDisplayDto userNodeDisplayEntity = getUserNodeDisplayDto(sysNodeTable);
|
|
|
+ recursion(sysNodeViews, sysActionTables, roleDetailTables, userNodeDisplayEntity);
|
|
|
+ userNodeDisplayEntities.add(userNodeDisplayEntity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return userNodeDisplayEntities;
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserNodeDisplayDto getUserNodeDisplayDto(SysNodeView sysNodeTable) {
|
|
|
+ UserNodeDisplayDto userNodeDisplayEntity = new UserNodeDisplayDto();
|
|
|
+ userNodeDisplayEntity.setName(sysNodeTable.getName());
|
|
|
+ userNodeDisplayEntity.setCode(sysNodeTable.getCode());
|
|
|
+ userNodeDisplayEntity.setIcon(sysNodeTable.getIcon());
|
|
|
+ userNodeDisplayEntity.setLink(sysNodeTable.getLink());
|
|
|
+ userNodeDisplayEntity.setId(sysNodeTable.getId());
|
|
|
+ userNodeDisplayEntity.setShow(sysNodeTable.getShow());
|
|
|
+ userNodeDisplayEntity.setPid(sysNodeTable.getPid());
|
|
|
+ userNodeDisplayEntity.setSubIndex(sysNodeTable.getSubIndex());
|
|
|
+ userNodeDisplayEntity.setTId(sysNodeTable.getId() + "-" + userNodeDisplayEntity.getType());
|
|
|
+ return userNodeDisplayEntity;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void recursion(List<SysNodeView> sysNodeViews, List<SysActionTable> sysActionTables,
|
|
|
+ List<UserRoleDetailTable> userRoleDetailTables, UserNodeDisplayDto userNodeDisplayDto) {
|
|
|
+ // sysNodeViews -> 该角色拥有的所有菜单
|
|
|
+ // sysActionTables -> 所有权限信息
|
|
|
+ // userRoleDetailTables -> 该角色拥有的权限信息
|
|
|
+ // userNodeDisplayDto
|
|
|
+ for (SysNodeView sysNodePojo : sysNodeViews) {
|
|
|
+ if (userNodeDisplayDto.getId().equals(sysNodePojo.getPid())) {
|
|
|
+ UserNodeDisplayDto child = getUserNodeDisplayDto(sysNodePojo);
|
|
|
+
|
|
|
+ Map<String, UserActionDisplayDto> userActionDisplayDtos = getUserActionDisplayDtos(sysActionTables, userRoleDetailTables, child.getId());
|
|
|
+ child.setBtns(userActionDisplayDtos);
|
|
|
+
|
|
|
+ userNodeDisplayDto.getChildren().add(child);
|
|
|
+ recursion(sysNodeViews, sysActionTables, userRoleDetailTables, child);
|
|
|
+ } else {
|
|
|
+ Map<String, UserActionDisplayDto> userActionDisplayDtos = getUserActionDisplayDtos(sysActionTables, userRoleDetailTables, userNodeDisplayDto.getId());
|
|
|
+ userNodeDisplayDto.setBtns(userActionDisplayDtos);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, UserActionDisplayDto> getUserActionDisplayDtos(List<SysActionTable> sysActionTables, List<UserRoleDetailTable> userRoleDetailTables, Long nodeId) {
|
|
|
+
|
|
|
+ if (sysActionTables == null && sysActionTables.size() <= 0) {
|
|
|
+ return new HashMap<>(0);
|
|
|
+ }
|
|
|
+ Map<String, UserActionDisplayDto> userActionDisplayDtos = new HashMap<>(sysActionTables.size());
|
|
|
+ List<SysActionTable> removeSysActionTables = new ArrayList<>(sysActionTables.size());
|
|
|
+ int size = sysActionTables.size();
|
|
|
+
|
|
|
+ for (int i = 0; i < size; i++) {
|
|
|
+ SysActionTable sysActionPojo = sysActionTables.get(i);
|
|
|
+ if (sysActionPojo.getNodeId().equals(nodeId)) {
|
|
|
+ UserActionDisplayDto userActionDisplayDto = getUserActionDisplayDto(sysActionPojo, userRoleDetailTables, nodeId);
|
|
|
+ userActionDisplayDtos.put(userActionDisplayDto.getCode(), userActionDisplayDto);
|
|
|
+ removeSysActionTables.add(sysActionPojo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (removeSysActionTables.size() > 0) {
|
|
|
+ userRoleDetailTables.removeAll(removeSysActionTables);
|
|
|
+ }
|
|
|
+ return userActionDisplayDtos;
|
|
|
+ }
|
|
|
+
|
|
|
+ private UserActionDisplayDto getUserActionDisplayDto(SysActionTable sysActionTable, List<UserRoleDetailTable> userRoleDetailTables, Long nodeId) {
|
|
|
+ if (sysActionTable.getNodeId() != null && sysActionTable.getNodeId().equals(nodeId)) {
|
|
|
+ UserActionDisplayDto userActionDisplayDto = new UserActionDisplayDto();
|
|
|
+ userActionDisplayDto.setName(sysActionTable.getName());
|
|
|
+ userActionDisplayDto.setCode(sysActionTable.getCode());
|
|
|
+ userActionDisplayDto.setId(sysActionTable.getId());
|
|
|
+ userActionDisplayDto.setPid(sysActionTable.getNodeId());
|
|
|
+ userActionDisplayDto.setShow(false);
|
|
|
+ userActionDisplayDto.setTId(userActionDisplayDto.getId() + "-" + userActionDisplayDto.getType());
|
|
|
+ if (userRoleDetailTables != null && userRoleDetailTables.size() != 0) {
|
|
|
+ Iterator<UserRoleDetailTable> userRoleDetailPojoIterator = userRoleDetailTables.iterator();
|
|
|
+ while (userRoleDetailPojoIterator.hasNext()) {
|
|
|
+ UserRoleDetailTable userRoleDetailPojo = userRoleDetailPojoIterator.next();
|
|
|
+ if (userRoleDetailPojo.getNodeId().equals(nodeId)
|
|
|
+ && userRoleDetailPojo.getActionId().equals(sysActionTable.getId())) {
|
|
|
+ userActionDisplayDto.setShow(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return userActionDisplayDto;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+}
|