package com.highdatas.mdm.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.highdatas.mdm.entity.Maintain;
import com.highdatas.mdm.entity.SysMenu;
import com.highdatas.mdm.mapper.SysMenuMapper;
import com.highdatas.mdm.pojo.ActivitiStatus;
import com.highdatas.mdm.service.IMaintainService;
import com.highdatas.mdm.service.IMenuMappingService;
import com.highdatas.mdm.service.ISysMenuService;
import com.highdatas.mdm.util.NoticeClient;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author kimi
* @since 2019-12-16
*/
@Service
public class SysMenuServiceImpl extends ServiceImpl implements ISysMenuService {
@Autowired
ISysMenuService menuService;
@Autowired
IMaintainService maintainService;
@Autowired
IMenuMappingService menuMappingService;
@Autowired
NoticeClient noticeClient;
@Override
public LinkedHashSet getByParentId(LinkedHashSet parentIdSet) {
if (parentIdSet.size() == 0) {
return null;
}
LinkedHashSet subSet = new LinkedHashSet<>();
for (String s : parentIdSet) {
SysMenu sysMenu = menuService.selectById(s);
if (sysMenu == null) {
continue;
}
String parentId = sysMenu.getParentId();
if (StringUtils.isEmpty(parentId)) {
continue;
}
subSet.add(parentId);
}
LinkedHashSet byParentId = getByParentId(subSet);
if (byParentId != null) {
parentIdSet.addAll(byParentId);
}
return parentIdSet;
}
@Override
public List getMenuByParentId(LinkedHashSet parentIdSet) {
LinkedHashSet byParentId = getByParentId(parentIdSet);
if (byParentId == null) {
return new ArrayList<>();
}
List sysMenus = selectBatchIds(byParentId);
List result = new ArrayList();
for (String s : byParentId) {
List collect = sysMenus.stream().filter(sysMenu -> sysMenu.getId().equalsIgnoreCase(s)).collect(Collectors.toList());
if (!collect.isEmpty()) {
result.add(collect.get(0));
}
}
Collections.reverse(result);
return result;
}
@Override
public void dealFlow(String maintainId, ActivitiStatus status, String userId) {
if (!status.equals(ActivitiStatus.open)) {
return;
}
Maintain maintain = maintainService.selectById(maintainId);
SysMenu menuByTableName = menuMappingService.getMenuByTableName(maintain.getTableName());
LinkedHashSet parentIdSet = new LinkedHashSet<>();
parentIdSet.add(menuByTableName.getId());
LinkedHashSet byParentId = getByParentId(parentIdSet);
if (byParentId == null) {
noticeClient.openByAddMenu(menuByTableName, null, userId);
} else {
List sysMenus = menuService.selectBatchIds(byParentId);
SysMenu menu = sysMenus.get(0);
noticeClient.openByAddMenu(menuByTableName, menu, userId);
}
}
}