old_flsystem/类库/Api.Framework/Easy4/Common/ParamMap.cs

338 lines
8.8 KiB
C#
Raw Normal View History

2022-09-20 03:10:29 +00:00
using System;
using System.Collections.Generic;
using System.Data;
using Easy4net.DBUtility;
using Easy4net.Context;
namespace Easy4net.Common
{
/// <summary>
/// 参数映射集合类
/// </summary>
public class ParamMap : Map
{
/// <summary>
/// 是否分页
/// </summary>
private bool isPage;
/// <summary>
/// 页面偏移量
/// </summary>
private int pageOffset;
/// <summary>
/// 每页限制记录数
/// </summary>
private int pageLimit;
/// <summary>
/// 排序字段
/// </summary>
private string orderFields;
/// <summary>
/// 是否递减排序
/// </summary>
private bool isDesc = true;
/// <summary>
/// 数据库参数集合
/// </summary>
private List<IDbDataParameter> m_ParamList = new List<IDbDataParameter>();
/// <summary>
/// 创建一个参数映射集合
/// </summary>
private ParamMap() { }
/// <summary>
/// 排序的字段
/// </summary>
public string OrderFields
{
get { return orderFields; }
set { orderFields = value; }
}
/// <summary>
/// 是否递减排序
/// </summary>
public bool IsDesc
{
get { return isDesc; }
set { isDesc = value; }
}
/// <summary>
/// 创建一个参数映射集合
/// </summary>
/// <returns></returns>
public static ParamMap NewMap()
{
ParamMap paramMap = new ParamMap();
return paramMap;
}
/// <summary>
/// 是否进行分页
/// </summary>
public bool IsPage
{
get
{
return isPage;
}
}
/// <summary>
/// 每页的偏移量
/// </summary>
public int PageOffset
{
get
{
if (this.ContainsKey("pageIndex") && this.ContainsKey("pageSize"))
{
int pageIndex = this.getInt("pageIndex");
int pageSize = this.getInt("pageSize");
if (pageIndex <= 0) pageIndex = 1;
if (pageSize <= 0) pageSize = 1;
return (pageIndex - 1) * pageSize;
}
return 0;
}
}
/// <summary>
/// 每页的记录条数限制
/// </summary>
public int PageLimit
{
get
{
if (this.ContainsKey("pageSize"))
{
return this.getInt("pageSize");
}
return 0;
}
}
/// <summary>
/// 根据键值获取整型数据
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public int getInt(string key)
{
var value = this[key];
return Convert.ToInt32(value);
}
/// <summary>
/// 根据键值获取字符串数据
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public String getString(string key)
{
var value = this[key];
return Convert.ToString(value);
}
/// <summary>
/// 根据键值获取Double型数据
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public Double toDouble(string key)
{
var value = this[key];
return Convert.ToDouble(value);
}
/// <summary>
/// 根据键值获取Long型数据
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public Int64 toLong(string key)
{
var value = this[key];
return Convert.ToInt64(value);
}
/// <summary>
/// 根据键值获取Decimal型数据
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public Decimal toDecimal(string key)
{
var value = this[key];
return Convert.ToDecimal(value);
}
/// <summary>
/// 根据键值获取DateTime型数据
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public DateTime toDateTime(string key)
{
var value = this[key];
return Convert.ToDateTime(value);
}
/// <summary>
/// 设置排序字段及排序方式
/// </summary>
/// <param name="orderFields">排序字段</param>
/// <param name="isDesc">是否为递减排序</param>
public void setOrderFields(string orderFields, bool isDesc)
{
this.orderFields = orderFields;
this.isDesc = isDesc;
}
/// <summary>
/// 此方法已过时,请使用 setPageParamters方法分页
/// </summary>
/// <param name="pageIndex"></param>
[Obsolete("此方法已过时,请使用 setPageParamters方法分页")]
private void setPageIndex(int pageIndex)
{
this["pageIndex"] = pageIndex;
setPages();
}
/// <summary>
/// 此方法已过时,请使用 setPageParamters方法分页
/// </summary>
/// <param name="pageSize"></param>
[Obsolete("此方法已过时,请使用 setPageParamters方法分页")]
private void setPageSize(int pageSize)
{
this["pageSize"] = pageSize;
setPages();
}
/// <summary>
/// 分页参数设置
/// </summary>
/// <param name="page">第几页从0开始</param>
/// <param name="limit">每页最多显示几条数据</param>
public void setPageParamters(int page, int limit)
{
this["pageIndex"] = page;
this["pageSize"] = limit;
setPages();
}
/// <summary>
/// 设置分页参数
/// </summary>
private void setPages()
{
Session session = SessionThreadLocal.Get();
if (this.ContainsKey("pageIndex") && this.ContainsKey("pageSize"))
{
this.isPage = true;
if (session.DbFactory.DbType == DatabaseType.MYSQL || session.DbFactory.DbType == DatabaseType.SQLITE)
{
this["offset"] = this.PageOffset;
this["limit"] = this.PageLimit;
this.Remove("pageIndex");
this.Remove("pageSize");
this.Add("offset", this.getInt("offset"));
this.Add("limit", this.getInt("limit"));
}
if (session.DbFactory.DbType == DatabaseType.SQLSERVER)
{
int pageIndex = this.getInt("pageIndex");
int pageSize = this.getInt("pageSize");
if (pageIndex <= 0) pageIndex = 1;
if (pageSize <= 0) pageSize = 1;
this["pageStart"] = (pageIndex - 1) * pageSize + 1;
this["pageEnd"] = pageIndex * pageSize;
this.Remove("pageIndex");
this.Remove("pageSize");
this.Add("pageStart", this.getInt("pageStart"));
this.Add("pageEnd", this.getInt("pageEnd"));
}
if (session.DbFactory.DbType == DatabaseType.ACCESS)
{
int pageIndex = this.getInt("pageIndex");
int pageSize = this.getInt("pageSize");
this["page_offset"] = pageIndex * pageSize;
this["page_limit"] = pageSize;
this.Remove("pageIndex");
this.Remove("pageSize");
}
}
}
/// <summary>
/// 添加键值对映射
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public override void Add(object key, object value)
{
base.Put(key, value);
Session session = SessionThreadLocal.Get();
IDbDataParameter param = session.DbFactory.CreateDbParameter(key.ToString(), value);
m_ParamList.Add(param);
}
/// <summary>
/// 添加键值对映射
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public new void Put(object key, object value)
{
this.Add(key, value);
}
/// <summary>
/// 添加键值对映射
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public new void setParameter(string key, object value)
{
this.Add(key, value);
}
/// <summary>
/// 输出参数集合
/// </summary>
/// <returns></returns>
public IDbDataParameter[] toDbParameters()
{
int i = 0;
IDbDataParameter[] paramArr = new IDbDataParameter[m_ParamList.Count];
foreach (IDbDataParameter dbParameter in m_ParamList)
{
paramArr[i] = dbParameter;
i++;
}
return paramArr;
}
}
}