package com.product.admin.service;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.product.admin.config.CmnConst;
|
import com.product.admin.config.SystemCode;
|
import com.product.admin.entity.RouterEntity;
|
import com.product.common.lang.StringUtils;
|
import com.product.core.cache.util.RedisUtil;
|
import com.product.core.dao.BaseDao;
|
import com.product.core.entity.DataTableEntity;
|
import com.product.core.entity.FieldSetEntity;
|
import com.product.core.exception.BaseException;
|
import com.product.core.service.support.AbstractBaseService;
|
import com.product.core.spring.context.SpringMVCContextHolder;
|
import com.product.module.sys.entity.SystemUser;
|
import com.product.util.BaseUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
/**
|
* @author cheng
|
* @date 2021年3月10日14:27:49
|
* @Description 路由service
|
*/
|
@Service
|
public class RouterService extends AbstractBaseService {
|
|
|
@Autowired
|
BaseDao baseDao;
|
/**
|
* 路由缓存key
|
*/
|
private final String ALL_ROUTER_CACHE_KEY = "system-cache:router";
|
|
/**
|
* 初始化路由
|
*/
|
public synchronized void refreshRouter() {
|
DataTableEntity dt = baseDao.listTable("product_sys_router_v");
|
//所有的角色信息
|
if (!BaseUtil.dataTableIsEmpty(dt)) {
|
//根据按钮&功能 分组记录路由信息
|
RouterEntity routerEntity = new RouterEntity(dt);
|
setRouterEntity(routerEntity);
|
}
|
}
|
|
/**
|
* 刷新路由根据按钮
|
*
|
* @param button_uuid
|
*/
|
public synchronized void refreshRouter(String button_uuid) {
|
//查询按钮所属功能
|
FieldSetEntity fse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_FUNCTION_BUTTONS, new String[]{"uuid,function_uuid"}, button_uuid, false);
|
if (fse != null && !StringUtils.isEmpty(fse.getUUID())) {
|
DataTableEntity roles = baseDao.listTable("product_sys_function_permission", "concat(',',button_uuid,',') like concat('%,',?,',%')", new Object[]{button_uuid}, new Object[]{"role_uuid uuid"});
|
//根据功能刷新路由
|
updateRouter(fse.getString(CmnConst.FUNCTION_UUID));
|
updateLoginUserInfoService.updateUserInfoByUpdateRole(roles.getUuids(), true);
|
}
|
}
|
|
|
/**
|
* 更新路由根据角色uuid
|
*
|
* @param role_uuid
|
*/
|
public void updateRouter(String[] role_uuid) {
|
RouterEntity routerEntity = getRouterEntity();
|
if (routerEntity != null) {
|
routerEntity.updateRouter(role_uuid);
|
setRouterEntity(routerEntity);
|
}
|
|
}
|
|
@Autowired
|
UpdateLoginUserInfoService updateLoginUserInfoService;
|
|
/**
|
* 更新路由根据功能
|
*
|
* @param function_uuid
|
*/
|
public void updateRouter(String function_uuid) {
|
if (!StringUtils.isEmpty(function_uuid)) {
|
RouterEntity routerEntity = getRouterEntity();
|
if (routerEntity != null) {
|
routerEntity.updateRouter(function_uuid, baseDao.listTable("product_sys_router_v", "`group`=?", new Object[]{function_uuid}));
|
setRouterEntity(routerEntity);
|
}
|
}
|
}
|
|
/**
|
* 获取路由信息
|
*
|
* @return
|
*/
|
public RouterEntity getRouterEntity() {
|
return (RouterEntity) RedisUtil.get(ALL_ROUTER_CACHE_KEY);
|
}
|
|
/**
|
* 获取路由(手机端)
|
*
|
* @return
|
*/
|
public DataTableEntity getMobileRouter() {
|
SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
|
StringBuilder sql = new StringBuilder();
|
|
sql.append(" SELECT ");
|
sql.append(" concat( '/', d.uuid ) path, ");
|
sql.append(" d.route_name `name`,d.uuid button_uuid, ");
|
sql.append(" nav.nav_bar_name, ");
|
sql.append(" page_url component, ");
|
sql.append(" b.function_uuid `group`, ");
|
sql.append(" c.uuid mvc_page_uuid, ");
|
sql.append(" page_name title, ");
|
sql.append(" d.button_icon icon, ");
|
sql.append(" page_type, ");
|
sql.append(" c.face_uuid,c.face_number, ");
|
sql.append(" d.uuid button_uuid, ");
|
sql.append(" d.button_name, ");
|
sql.append(" d.client_type_uuid ");
|
sql.append(" FROM ");
|
sql.append(" product_sys_app_nav_bar nav ");
|
sql.append(" JOIN product_sys_functions ff on nav.function_uuid=ff.uuid and concat(',',ff.client_type_uuid,',') like '%,App,%' ");
|
sql.append(" JOIN product_sys_link b ON b.function_uuid = ff.uuid ");
|
sql.append(" AND ff.status_uuid = 1 ");
|
sql.append(" AND ff.data_type = 1 ");
|
sql.append(" JOIN product_sys_mvc_page c ON b.`line_to` = c.uuid ");
|
sql.append(" JOIN product_sys_function_buttons d ON b.line_from = d.uuid and d.client_type_uuid='App' ");
|
sql.append(" WHERE ");
|
sql.append(" page_url IS NOT NULL ");
|
sql.append(" AND page_url != '' ");
|
sql.append(" and nav.is_used=1 AND ");
|
sql.append(" nav.function_uuid in (select function_uuid from product_sys_function_permission where ");
|
sql.append(BaseUtil.buildQuestionMarkFilter("role_uuid", currentUser.getRoles().split(","), true)).append(" ) ");
|
sql.append(" GROUP BY ");
|
sql.append(" b.function_uuid, ");
|
sql.append(" d.uuid, ");
|
sql.append(" page_name, ");
|
sql.append(" page_url, ");
|
sql.append(" c.uuid,nav_bar_name, ");
|
sql.append(" PAGE_type ");
|
|
DataTableEntity dt = getBaseDao().listTable(sql.toString(), new Object[]{});
|
return dt;
|
}
|
|
|
/**
|
* 获取路由信息
|
*
|
* @return
|
*/
|
public void setRouterEntity(RouterEntity routerEntity) {
|
RedisUtil.set(ALL_ROUTER_CACHE_KEY, routerEntity);
|
}
|
|
/**
|
* 根据功能和按钮uuid 获取跳转路由
|
*
|
* @param functionUuid
|
* @param button_uuid
|
* @return
|
*/
|
public String functionSkipByButtonUuid(String functionUuid, String button_uuid) {
|
SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
|
if (StringUtils.isEmpty(functionUuid) || StringUtils.isEmpty(button_uuid) || currentUser == null || currentUser.getRoles() == null) {
|
return null;
|
}
|
|
RouterEntity routerEntity = getRouterEntity();
|
if (routerEntity != null) {
|
return routerEntity.getRouteNameByUuid(functionUuid, button_uuid, currentUser.getRoles().split(","));
|
}
|
return null;
|
}
|
|
|
/**
|
* 根据功能和按钮标识 获取跳转路由
|
*
|
* @param functionUuid
|
* @param button_name
|
* @return
|
*/
|
public String functionSkip(String functionUuid, String button_name) {
|
SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
|
if (StringUtils.isEmpty(functionUuid) || StringUtils.isEmpty(button_name) || currentUser == null || currentUser.getRoles() == null) {
|
return null;
|
}
|
RouterEntity routerEntity = getRouterEntity();
|
if (routerEntity != null) {
|
return routerEntity.getRouteNameByName(functionUuid, button_name, currentUser.getRoles().split(","));
|
}
|
return null;
|
}
|
|
/**
|
* 获取路由
|
*
|
* @return
|
* @throws BaseException
|
*/
|
public JSONArray getRouter() throws BaseException {
|
SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
|
RouterEntity routerEntity = getRouterEntity();
|
JSONArray routerList = routerEntity.getRouterList(currentUser.getRoles().split(","));
|
if (routerList == null || routerList.isEmpty() || routerList.size() <= 0) {
|
throw new BaseException(SystemCode.SYSTEM_ROUTER_GET_FAIL.getValue(), SystemCode.SYSTEM_ROUTER_GET_FAIL.getText());
|
}
|
return routerList;
|
}
|
|
|
}
|