using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
using Common;
using Interface;
using Models;
using System.Data.SqlClient;
using System.Linq.Expressions;
namespace Services
{
///
/// 基础服务
///
public class BaseServices: BaseInterface
{
///
/// 装箱单个数据对象
///
/// 装箱对象
/// 装箱数据行
///
protected T LoadData(DataRow dr)
{
if (dr == null) return default(T);
var t = typeof(T);
var obj = Activator.CreateInstance(t);
var properts = t.GetProperties();
foreach (var pi in properts)
{
if (!dr.Table.Columns.Contains(pi.Name)) continue;
pi.SetValue(obj, CommonHelper.ChangeType(dr[pi.Name], pi.PropertyType), null);
}
return (T)obj;
}
///
/// 装箱列表数据对象
///
/// 装箱对象
/// 装箱数据来源表格
///
protected List LoadDataList(DataTable dt)
{
List result = new List();
var t = typeof(T);
var properts = t.GetProperties();
object obj;
foreach (DataRow dr in dt.Rows)
{
obj = Activator.CreateInstance(t);
foreach (var pi in properts)
{
if (!dt.Columns.Contains(pi.Name)) continue;
pi.SetValue(obj, CommonHelper.ChangeType(dr[pi.Name], pi.PropertyType), null);
}
result.Add((T)obj);
}
return result;
}
protected List Loadstringist(DataTable dt)
{
List result = new List();
foreach (DataRow dr in dt.Rows)
{
result.Add(dr[0].ToString());
}
return result;
}
public Boolean Add(T obj)
{
if (obj==null)
{
return false;
}
string tablename= EnumHelper.GetZXTableName();
var tbnameary = tablename.Split('.');
List fildlist = new List();
List paramsql = new List();
List paramlist = new List();
foreach (PropertyInfo pi in obj.GetType().GetProperties())
{
object value1 = pi.GetValue(obj, null);
var attribute = pi.GetCustomAttributes(typeof(IsInsert), false).FirstOrDefault();
if (attribute != null)
{
if (((IsInsert)attribute).FildName)
{
fildlist.Add(pi.Name);
paramsql.Add("@" + pi.Name);
paramlist.Add(new SqlParameter("@"+pi.Name, value1));
}
}
}
string insertsql = string.Format(AddItemSql, tbnameary[1], string.Join(",", fildlist), string.Join(",", paramsql));
var conn = SqlHelper.GetConnection(tbnameary[0]);
var result = SqlHelper.ExecuteNonQuery(conn,CommandType.Text, insertsql, paramlist.ToArray());
return result > 0;
}
public bool CBAdd(string sql, SqlParameter[] para)
{
var conn = SqlHelper.GetConnection("CBDataBase");
var result = SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql, para);
return result > 0;
}
public Boolean DeleteItemBykey(object key)
{
string tablename = EnumHelper.GetZXTableName();
var tbnameary = tablename.Split('.');
List paramlist = new List();
var deleteSql = string.Empty;
foreach (PropertyInfo pi in typeof(T).GetProperties())
{
var attribute = pi.GetCustomAttributes(typeof(Key), false).FirstOrDefault();
if (attribute != null)
{
if (((Key)attribute).KEY)
{
paramlist.Add(new SqlParameter("@" + pi.Name, key));
deleteSql = string.Format(DeleteItemSql, tbnameary[1], pi.Name, "@" + pi.Name);
}
}
}
var conn = SqlHelper.GetConnection(tbnameary[0]);
var result = SqlHelper.ExecuteNonQuery(conn, CommandType.Text, deleteSql, paramlist.ToArray());
return result > 0;
}
public T QueryItembyKey(object key )
{
string tablename = EnumHelper.GetZXTableName();
var tbnameary = tablename.Split('.');
List paramlist = new List();
var deleteSql = string.Empty;
foreach (PropertyInfo pi in typeof(T).GetProperties())
{
var attribute = pi.GetCustomAttributes(typeof(Key), false).FirstOrDefault();
if (attribute != null)
{
if (((Key)attribute).KEY)
{
paramlist.Add(new SqlParameter("@" + pi.Name, key));
deleteSql = string.Format(QueryItemSql, tbnameary[1], pi.Name, "@" + pi.Name);
}
}
}
var conn = SqlHelper.GetConnection(tbnameary[0]);
var ds = SqlHelper.ExecuteDataset(conn, CommandType.Text, deleteSql, paramlist.ToArray());
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var result = LoadData(ds.Tables[0].Rows[0]);
return result;
}
else
{
return default(T);
}
}
public bool Update(T data)
{
if (data == null)
{
return false;
}
string tablename = EnumHelper.GetZXTableName();
var tbnameary = tablename.Split('.');
List paramsql = new List();
var key = new object() ;
string keyname = string.Empty;
List paramlist = new List();
foreach (PropertyInfo pi in data.GetType().GetProperties())
{
object value1 = pi.GetValue(data, null);
var attribute = pi.GetCustomAttributes(typeof(IsInsert), false).FirstOrDefault();
if (attribute != null)
{
var attributekey = pi.GetCustomAttributes(typeof(Key), false).FirstOrDefault();
if (attributekey != null)
{
if (((Key)attributekey).KEY)
{
key = value1;
keyname = pi.Name;
}
}
if (((IsInsert)attribute).FildName)
{
paramsql.Add(string.Format(" {0} = @{0}",pi.Name));
paramlist.Add(new SqlParameter("@" + pi.Name, value1));
}
}
}
string insertsql = string.Format(UpdateItemsql, tbnameary[1], string.Join(" ,", paramsql),keyname,key.GetType()==typeof(int)?key:"'"+key+"'");
var conn = SqlHelper.GetConnection(tbnameary[0]);
var result = SqlHelper.ExecuteNonQuery(conn, CommandType.Text, insertsql, paramlist.ToArray());
return result > 0;
}
public List GetList(int page, int rows, string order, List expression, bool isDesc = true)
{
int startindex = (page-1) * rows;
int endindex = startindex + rows+1;
string tablename = EnumHelper.GetZXTableName();
var tbnameary = tablename.Split('.');
List fildlist = new List();
List expressionlist = new List();
string keyname = string.Empty;
foreach (PropertyInfo pi in typeof(T).GetProperties())
{
fildlist.Add(pi.Name);
var attributekey = pi.GetCustomAttributes(typeof(Key), false).FirstOrDefault();
if (attributekey != null)
{
if (((Key)attributekey).KEY)
{
keyname = pi.Name;
}
}
}
for (int i = 0; i < expression.Count; i++)
{
expressionlist.Add(@" AND "+expression[i].GetSql());
}
//"AND OpenCode1>3 AND IsChecked=1"
string pageListSql = string.Format(QueryListPageSql, string.Join(",", fildlist),order==null?keyname: order, isDesc?"desc":"asc",tbnameary[1],string.Join("", expressionlist),startindex,endindex);
var conn = SqlHelper.GetConnection(tbnameary[0]);
var ds = SqlHelper.ExecuteDataset(conn, CommandType.Text, pageListSql);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var result = LoadDataList(ds.Tables[0]);
return result;
}
else
{
return new List();
}
}
public List GetList(string order,List expression, bool isDesc = true)
{
string tablename = EnumHelper.GetZXTableName();
var tbnameary = tablename.Split('.');
string keyname = string.Empty;
List expressionlist = new List();
foreach (PropertyInfo pi in typeof(T).GetProperties())
{
var attributekey = pi.GetCustomAttributes(typeof(Key), false).FirstOrDefault();
if (attributekey != null)
{
if (((Key)attributekey).KEY)
{
keyname = pi.Name;
}
}
}
for (int i = 0; i < expression.Count; i++)
{
expressionlist.Add(@" AND " + expression[i].GetSql());
}
string listSql = string.Format(QueryListSql, tbnameary[1], string.Join("", expressionlist), order == null ? keyname : order, isDesc ? "desc" : "asc");
var conn = SqlHelper.GetConnection(tbnameary[0]);
var ds = SqlHelper.ExecuteDataset(conn, CommandType.Text, listSql);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var result = LoadDataList(ds.Tables[0]);
return result;
}
else
{
return new List();
}
}
public IEnumerable FindeList(string sql, SqlParameter[] para=null)
{
var conn = SqlHelper.GetConnection("CBDataBase");
var ds = SqlHelper.ExecuteDataset(conn, CommandType.Text, sql,para);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var result = LoadDataList(ds.Tables[0]);
return result;
}
else
{
return new List();
}
}
public int GetCount()
{
string tablename = EnumHelper.GetZXTableName();
var tbnameary = tablename.Split('.');
string insertsql = string.Format(SqlCount, tbnameary[1]);
var conn = SqlHelper.GetConnection(tbnameary[0]);
var result = SqlHelper.ExecuteScalar(conn, CommandType.Text, insertsql);
return (int)result;
}
public int GetPageListCount(List expression)
{
string tablename = EnumHelper.GetZXTableName();
var tbnameary = tablename.Split('.');
string keyname = string.Empty;
List expressionlist = new List();
foreach (PropertyInfo pi in typeof(T).GetProperties())
{
var attributekey = pi.GetCustomAttributes(typeof(Key), false).FirstOrDefault();
if (attributekey != null)
{
if (((Key)attributekey).KEY)
{
keyname = pi.Name;
}
}
}
for (int i = 0; i < expression.Count; i++)
{
expressionlist.Add(@" AND " + expression[i].GetSql());
}
string listSql = string.Format(PageListCount, keyname, tbnameary[1], string.Join("", expressionlist));
var conn = SqlHelper.GetConnection(tbnameary[0]);
var ds = SqlHelper.ExecuteScalar(conn, CommandType.Text, listSql);
return (int)ds;
}
private static string AddItemSql = @"INSERT INTO {0} ({1}) VALUES ({2})";
private static string DeleteItemSql = @"DELETE FROM {0} WHERE {1} = {2}";
private static string QueryItemSql = @"SELECT * FROM {0} WHERE {1} = {2}";
private static string UpdateItemsql = @"UPDATE {0} SET {1} WHERE {2} = {3}";
private static string QueryListPageSql = @"SELECT {0} FROM
(SELECT ROW_NUMBER()OVER(ORDER BY {1} {2})ROWNUMBER, * FROM {3} WHERE 1=1 {4} )A
WHERE ROWNUMBER>{5} AND ROWNUMBER<{6}";
private static string QueryListSql = @"SELECT * FROM {0} WHERE 1=1 {1} ORDER BY {2} {3}";
private static string SqlCount = @"SELECT COUNT(*)
FROM {0}";
private static string PageListCount = @"SELECT Count({0}) FROM {1} WHERE 1=1 {2}";
}
}