分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程
HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成
HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子
| 强烈支持楼主ing…… |
| 有问题,可以发帖,大家一起讨论,一起进步哈 |
| 我只是路过打酱油的。 |
以上就是菜单管理的三层处理,都是很常见的方法,如有问题,可以留言了解![]() ![]() |
|
3. BLL内容: [C#] 纯文本查看 复制代码 /*
* 重要提示: 请不要自行修改本类,如果因为你自己修改后将无法升级到新版本。如果确实有什么问题请到官方网站提建议,我们一定会及时修改
* 编码日期: 2017-12-02
* 编码人: 范范
* 官方网址: [url]http://www.sufeinet.com[/url]
* 版本号: 1.0
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Purview.DAL.Sys;
using Purview.Model.Sys;
namespace Purview.BLL.Sys
{
/// <summary>
/// 菜单信息 实现类
/// </summary>
public class Sys_MenuBLL
{
private Sys_MenuDAL dal = new Sys_MenuDAL();
/// <summary>
/// 获取子菜单列表,根据角色id,与主菜单id
/// </summary>
/// <param name="roleId"></param>
/// <param name="parentId"></param>
/// <returns></returns>
public List<Sys_MenuInfo> GetSonMenuByRoleId(int roleId, int parentId)
{
// 获取角色下的所有菜单信息
var roleMenuList = new Sys_MenuInRoleBLL().GetList("MenuID", string.Format("RoleID = {0}", roleId), "");
if (roleMenuList != null && roleMenuList.Any())
{
// 获取所有子菜单列表
var sonRoleMenuList = roleMenuList.Where(r => r.levelFlag == 0);
if (sonRoleMenuList != null && sonRoleMenuList.Any())
{
// 获取所有子菜单ids
var menuIds = sonRoleMenuList.Select(m => m.MenuID);
// 获取所有主菜单下存在的角色菜单信息
var menuList = GetList("", string.Format("MenuID in ({0}) AND ParentID = {1}", string.Join(",", menuIds), parentId), "");
// 返回信息
if (menuList == null) { return new List<Sys_MenuInfo>(); }
return menuList;
}
}
return new List<Sys_MenuInfo>();
}
/// <summary>
/// 获取分页列表信息
/// </summary>
/// <param name="fields">所需字段</param>
/// <param name="query">查询条件</param>
/// <param name="orderby">排序方式</param>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">页长</param>
/// <param name="totalCount">总记录</param>
/// <returns></returns>
public List<Sys_MenuInfo> GetListPage(string fields, string query, string orderby, int pageIndex, int pageSize, out int totalCount)
{
// 参数合法性校验
if (pageSize <= 0) { totalCount = 0; return new List<Sys_MenuInfo>(); }
if (pageIndex <= 0) { pageIndex = 1; }
if (string.IsNullOrWhiteSpace(fields)) { fields = "*"; }
if (string.IsNullOrWhiteSpace(query)) { query = "1=1"; }
if (string.IsNullOrWhiteSpace(orderby)) { orderby = "MenuID"; }
return dal.GetList(fields, query, orderby, pageIndex, pageSize, out totalCount);
}
/// <summary>
/// 获取列表信息
/// </summary>
/// <param name="fields">所需字段</param>
/// <param name="query">查询条件</param>
/// <param name="orderBy">排序方式</param>
/// <returns></returns>
public List<Sys_MenuInfo> GetList(string fields, string query, string orderBy)
{
// 参数合法性校验
if (string.IsNullOrWhiteSpace(fields)) { fields = "*"; }
if (string.IsNullOrWhiteSpace(query)) { query = "1=1"; }
if (string.IsNullOrWhiteSpace(orderBy)) { orderBy = "MenuID"; }
return dal.GetList(fields, query, orderBy);
}
/// <summary>
/// 获取实体信息
/// </summary>
/// <param name="fields">所需字段</param>
/// <param name="query">查询条件(如果top1 的话,可以在此处添加排序方式)</param>
/// <returns></returns>
public Sys_MenuInfo GetInfo(string fields, string query)
{
// 参数合法性校验
if (string.IsNullOrWhiteSpace(fields)) { fields = "*"; }
if (string.IsNullOrWhiteSpace(query)) { query = "1=1"; }
return dal.GetInfo(fields, query);
}
/// <summary>
/// 新增
/// </summary>
/// <param name="info">实体信息</param>
/// <returns></returns>
public int Insert(Sys_MenuInfo info)
{
// 得到需要保存的菜单id
var menuId = 100;
if (info.ParentID > 0)
{
// 新增子菜单时处理
// 获取当前主菜单下的最大id值
var maxIdInfo = GetInfo(" top 1 *", string.Format(" ParentID = {0} order by MenuID desc", info.ParentID));
if (maxIdInfo != null && maxIdInfo.MenuID > 0)
{
menuId = maxIdInfo.MenuID + 1;
}
else
{
menuId = info.ParentID + 1;
}
}
else
{
// 新增主菜单时处理
// 获取最大的主菜单id值
var maxIdInfo = GetInfo(" top 1 *", " ParentID = 0 order by MenuID desc");
if (maxIdInfo != null && maxIdInfo.MenuID > 0) { menuId = (maxIdInfo.MenuID / 100 + 1) * 100; }
}
info.MenuID = menuId;
return dal.Insert(info);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="info">实体信息</param>
/// <returns></returns>
public int Update(Sys_MenuInfo info)
{
return dal.Update(info);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="query">条件</param>
/// <returns></returns>
public int Delete(string query)
{
// 如果条件为空的话,不进行删除,直接返回
if (string.IsNullOrWhiteSpace(query)) { return -1; }
return dal.Delete(query);
}
}
}
此处重点说下新增方法,菜单id为主键,但是不是自增列 此新增方法可以看出,菜单id是从100开始的,100/200/300/400.....依次为主菜单id 101/102/103.... 202/203/204..... 均为子菜单id 这样的处理方法,主要为列表显示,排序时,能清晰的看到为主菜单,子菜单顺序排列 其他的方法在此不做重点解释,都能清晰的看懂哈 如果有不懂得,可以留言了解 |
|
2. DAL层,主要处理与数据库互动方面的内容 集成了分布式框架,故在此dal中可以看到,继承了分布式框架的BaseDAL,如下所示: [C#] 纯文本查看 复制代码 public partial class Sys_MenuDAL : BaseDAL<Sys_MenuInfo> {
}此cs中所有方法解读如下: 1. [C#] 纯文本查看 复制代码 protected override string ConnName {[/font]
[font=宋体] get { return DbConfig.PurviewConnection; }
}数据库链接字符串添加 2. [C#] 纯文本查看 复制代码 protected override Sys_MenuInfo FillModelFromReader(System.Data.Common.DbDataReader reader, params string[] fields) {[/font]
[font=宋体] return ModelFromReader( reader, fields );
}
protected Sys_MenuInfo ModelFromReader(System.Data.Common.DbDataReader reader, params string[] fields) {
var info = new Sys_MenuInfo();
if ( UtilDAL.HasFields( "MenuID", fields ) ) { info.MenuID = ( int ) reader[ "MenuID" ]; }
if (UtilDAL.HasFields("ParentID", fields)) { info.ParentID = (int)reader["ParentID"]; }
if (UtilDAL.HasFields("Depth", fields)) { info.Depth = (int)reader["Depth"]; }
if ( UtilDAL.HasFields( "MenuName", fields ) ) { info.MenuName = reader[ "MenuName" ].ToString(); }
if ( UtilDAL.HasFields( "LinkUrl", fields ) ) { info.LinkUrl = reader[ "LinkUrl" ].ToString(); }
if ( UtilDAL.HasFields( "OrderID", fields ) ) { info.OrderID = ( int ) reader[ "OrderID" ]; }
return info;
}此两个方法,是分布式框架中的重点,里面的字段信息,一定要去数据库字段信息完全一致,否则可能会出现获取不到数据的情况 3. [C#] 纯文本查看 复制代码 public List<Sys_MenuInfo> GetList(string fields, string query, string orderby, int pageIndex, int pageSize, out int totalCount) {
return FindPage( "Sys_Menu", fields, query, orderby, pageIndex, pageSize, out totalCount );
}
public List<Sys_MenuInfo> GetList(string fields, string query, string orderBy) {
if ( string.IsNullOrWhiteSpace( fields ) ) { fields = "*"; }
if ( string.IsNullOrWhiteSpace( query ) ) { query = "1 = 1"; }
if ( string.IsNullOrWhiteSpace( orderBy ) ) { orderBy = "MenuID"; }
string sql = string.Format( "SELECT {0} FROM dbo.Sys_Menu WHERE {1} ORDER BY {2}", fields, query, orderBy );
return FindList( sql );
}获取列表数据,第一个是获取分页列表,第2个是根据查询方式,获取所有列表数据 4. [C#] 纯文本查看 复制代码 public Sys_MenuInfo GetInfo(string fields, string query) {
if ( string.IsNullOrWhiteSpace( fields ) ) { fields = "*"; }
if ( string.IsNullOrWhiteSpace( query ) ) { query = "1=1"; }
string sql = string.Format( "SELECT {0} FROM dbo.Sys_Menu WHERE {1}", fields, query );
return FindOne( sql );
}获取单个实体 根据查询条件 |