许鹏程
2023-05-24 5839384228e2f10d880d23c7a1c99ba86430634c
product-server-admin/src/main/java/com/product/admin/service/RouterService.java
@@ -27,198 +27,198 @@
public class RouterService extends AbstractBaseService {
   @Autowired
   BaseDao baseDao;
   /**
    * 路由缓存key
    */
   private final String ALL_ROUTER_CACHE_KEY = "system-cache:router";
    @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);
      }
   }
    /**
     * 初始化路由
     */
    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);
      }
   }
    /**
     * 刷新路由根据按钮
     *
     * @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);
      }
    /**
     * 更新路由根据角色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;
    @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);
         }
      }
   }
    /**
     * 更新路由根据功能
     *
     * @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 RouterEntity getRouterEntity() {
        return (RouterEntity) RedisUtil.get(ALL_ROUTER_CACHE_KEY);
    }
   /**
    * 获取路由(手机端)
    *
    * @return
    */
   public DataTableEntity getMobileRouter() {
      SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
      StringBuilder sql = new StringBuilder();
    /**
     * 获取路由(手机端)
     *
     * @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 ");
        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;
   }
        DataTableEntity dt = getBaseDao().listTable(sql.toString(), new Object[]{});
        return dt;
    }
   /**
    * 获取路由信息
    *
    * @return
    */
   public void setRouterEntity(RouterEntity routerEntity) {
      RedisUtil.set(ALL_ROUTER_CACHE_KEY, routerEntity);
   }
    /**
     * 获取路由信息
     *
     * @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;
      }
    /**
     * 根据功能和按钮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;
   }
        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;
   }
    /**
     * 根据功能和按钮标识 获取跳转路由
     *
     * @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;
   }
    /**
     * 获取路由
     *
     * @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;
    }
}