package com.highdatas.mdm.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.highdatas.mdm.entity.*;
import com.highdatas.mdm.pojo.ActivitiBusinessType;
import com.highdatas.mdm.pojo.ActivitiStatus;
import com.highdatas.mdm.pojo.CodeMsg;
import com.highdatas.mdm.pojo.Result;
import com.highdatas.mdm.service.*;
import com.highdatas.mdm.util.Constant;
import com.highdatas.mdm.util.DbUtils;
import com.highdatas.mdm.util.NoticeClient;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 前端控制器
*
*
* @author kimi
* @since 2019-12-16
*/
@RestController
@RequestMapping("/menu")
public class SysMenuController {
@Autowired
ISysMenuService menuService;
@Autowired
IMenuMappingService menuMappingService;
@Autowired
ISysFieldService fieldService;
@Autowired
IFlowsService flowsService;
@Autowired
IMaintainService maintainService;
@Autowired
IMaintainFieldService maintainFieldService;
@Autowired
IMasterAuthorService masterAuthorService;
@Autowired
NoticeClient noticeClient;
/**
*
* @description: 获取所有主题列表
* @return: 主题数据
*
*/
@RequestMapping(value = "/all")
public Result> getAll() {
EntityWrapper sysMenuEntityWrapper = new EntityWrapper<>();
sysMenuEntityWrapper.orderBy("parent_id, order_no");
return Result.success(menuService.selectList(sysMenuEntityWrapper)) ;
}
/**
*
* @description: 获取有权限的所有主题列表
* @return: 主题数据
*
*/
@RequestMapping(value = "/author/all", method = RequestMethod.GET)
public Result> getAllBak(HttpServletRequest request) {
//获取用户信息
TUser user = DbUtils.getUser(request);
//获取权限下的主题信息
List menu = masterAuthorService.getMenu(user);
return Result.success(menu) ;
}
/**
*
* @description: 获取待审批所有主题列表
* @return: 主题数据
*
*/
@RequestMapping(value = "/audit", method = RequestMethod.GET)
public Result> audit(HttpServletRequest request) {
//获取用户信息
HttpSession session = request.getSession();
TUser user = (TUser) session.getAttribute("user");
String userId = user.getUserId();
//获取正在跑的流程
List flows = flowsService.selectList(new EntityWrapper().ne("business_type", ActivitiBusinessType.exists).ne("status", ActivitiStatus.open).ne("status", ActivitiStatus.close));
//获取用户拥有权限审批的流程
flows = flows.stream().filter(flow -> flowsService.isNextAudit(flow, userId)).collect(Collectors.toList());
HashSet tableNameSet = new HashSet<>();
List maintainIds = flows.stream().filter(flow -> flow.getBusinessType().equals(ActivitiBusinessType.maintain)).map(Flows::getBusinessId).collect(Collectors.toList());
List maintainFieldIds = flows.stream().filter(flow -> flow.getBusinessType().equals(ActivitiBusinessType.field)).map(Flows::getBusinessId).collect(Collectors.toList());
// BY 字段版本和数据版本获取表名
if (maintainIds.isEmpty() && maintainFieldIds.isEmpty()) {
return Result.success(null);
}
for (String maintainFieldId : maintainFieldIds) {
MaintainField maintainField = maintainFieldService.selectById(maintainFieldId);
if (maintainField == null) {
continue;
}
String tableName = maintainField.getTableName();
if (StringUtils.isEmpty(tableName)) {
continue;
}
tableNameSet.add(tableName);
}
maintainIds = maintainIds.stream().filter(s -> masterAuthorService.checkMaintainAuthor(user,s)).collect(Collectors.toList());
if (!maintainIds.isEmpty()) {
List maintains = maintainService.selectBatchIds(maintainIds);
List tableNameList = maintains.stream().map(Maintain::getTableName).collect(Collectors.toList());
tableNameSet.addAll(tableNameList);
}
if (tableNameSet.size() == 0) {
return Result.success(null);
}
//通过表名获取主题
List menuMappingList = menuMappingService.selectList(new EntityWrapper().in("table_name", tableNameSet));
List menuIds = menuMappingList.stream().map(MenuMapping::getMenuId).collect(Collectors.toList());
if (menuIds.isEmpty()) {
return Result.success(null);
}
//通过主题获取父级主题链
LinkedHashSet parentIdSet = new LinkedHashSet<>(menuIds);
List parentList = menuService.getMenuByParentId(parentIdSet);
if (parentList == null) {
return Result.success(null);
}
return Result.success(parentList);
}
/**
*
* @description: 获取所有的非父级主题列表
* @return: 非父级主题数据
*
*/
@RequestMapping(value = "/list", method = RequestMethod.GET)
public Result> getMenuList() {
EntityWrapper sysMenuEntityWrapper = new EntityWrapper<>();
//获取非父级主题
sysMenuEntityWrapper.eq("menu_type", "DataMenu");
sysMenuEntityWrapper.orderBy("parent_id, order_no");
List sysMenus = menuService.selectList(sysMenuEntityWrapper);
LinkedHashSet parentIdSet = new LinkedHashSet<>();
for (SysMenu sysMenu : sysMenus) {
MenuMapping menuMapping = menuMappingService.selectOne(new EntityWrapper().eq("menu_id", sysMenu.getId()));
if (menuMapping == null) {
continue;
}
String tableName = menuMapping.getTableName();
List fieldByTable = fieldService.getFieldByTable(tableName);
//判断是否有实际的表存在
if (fieldByTable == null || fieldByTable.size() == 0) {
continue;
}
parentIdSet.add(sysMenu.getId());
}
List parentList = menuService.getMenuByParentId(parentIdSet);
return Result.success(parentList) ;
}
/**
*
* @description: 获取所有父级主题列表
* @return: 父级主题数据
*
*/
@RequestMapping(value = "/allTheme", method = RequestMethod.GET)
public Result> getAllTheme() {
EntityWrapper sysMenuEntityWrapper = new EntityWrapper<>();
//仅获取父级主题列表
sysMenuEntityWrapper.eq("menu_type",Constant.StructureMenu).orderBy("parent_id desc");
return Result.success(menuService.selectList(sysMenuEntityWrapper)) ;
}
/**
*
* @description: 分页获取所有主题列表
* @param pageno 页数
* @return: 主题数据
*
*/
@RequestMapping(value = "/{pageno}", method = RequestMethod.GET)
public Result> getAll(@PathVariable int pageno, HttpServletRequest request) {
//pageSize 每页数据
String pageSize = request.getParameter("pageSize");
if (StringUtils.isEmpty(pageSize)) {
pageSize = "15";
}
Integer size = Integer.valueOf(pageSize);
Page page = new Page(pageno, size);
//分页获取主题
Page menuPage = menuService.selectPage(page);
return Result.success(menuPage);
}
/**
*
* @description: 通过id获取主题信息
* @param id 主题id
* @return: 主题数据
*
*/
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
public Result get(@PathVariable String id) throws Exception {
return Result.success(menuService.selectById(id));
}
/**
*
* @description: 添加主题
* @param name 主题名称
* @return: 主题数据
*
*/
@RequestMapping(value = "/add", method = RequestMethod.GET)
public Result