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;
/**
*
* @description: 通过子主题获取去重后的父主题
* @param parentIdSet 子主题id集合
* @return: 添加了父主题的id集合
*
*/
@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;
}
/**
*
* @description: 通过子主题获取去重后的父主题
* @param parentIdSet 子主题id集合
* @return: 添加了父主题的对象集合
*
*/
@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;
}
/**
*
* @description: 审批通过后的发送消息
* @param maintainId 版本id
* @param status 审批状态
* @param userId 用户id
* @return:
*
*/
@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);
}
}
}