using DataRWDAL.Base;
using SqlSugar;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Dynamic;
using System.Reflection;
using System.Runtime.InteropServices.Expando;
using XImagingXhandler.XDAL;
namespace DataRWDAL
{
///
/// 液体类型与液体范围关系库表操作类
///
public class LiquidTypeRSRangeDB:BaseDB
{
#region 查询返回液体类型数据集 by 查询请求参数
///
/// 查询返回液体类型数据集 by 查询请求参数
///
/// 1:默认类型;0:非默认;2:全部类型
/// 液体类型数据集
public static List GetLiquidTypeFromdb(int lType)
{
List liquidTypes = new List();
using (var db = GetInstance())
{
if (lType == 1 || lType == 0)
{
liquidTypes = db.Queryable().Where(it => it.is_default_type.Equals(lType)).OrderBy(it => it.timestamp, SqlSugar.OrderByType.Asc).ToList();
LiquidType lbt = new LiquidType();
lbt.liquid_type_id = "0";
lbt.liquid_type_name = "所有类型";
lbt.liquid_type_name_en = "All";
liquidTypes.Insert(0,lbt);
}
else if (lType == 2)
{
liquidTypes = db.Queryable().OrderBy(it => it.timestamp, SqlSugar.OrderByType.Asc).ToList();
LiquidType lbt = new LiquidType();
lbt.liquid_type_id = "0";
lbt.liquid_type_name = "所有类型";
lbt.liquid_type_name_en = "All";
liquidTypes.Insert(0,lbt);
}
else
{
LiquidType lbt = new LiquidType();
lbt.liquid_type_id = "0";
lbt.liquid_type_name = "所有类型";
lbt.liquid_type_name_en = "All";
liquidTypes.Insert(0, lbt);
}
}
return liquidTypes;
}
#endregion
#region 查询返回液体参数数据集 by 液体类型Id、液体范围Id、设备臂Id
///
/// 查询返回液体参数数据集 by 液体类型Id、液体范围Id、设备臂Id
///
/// 液体类型Id
/// 液体范围Id
/// 设备臂Id
/// 液体参数数据集
public static ObservableCollection GetLiquidFromdbByTypeAndRange(string liquidTypeId, string liquidRangeId, string armId)
{
using (var db = GetInstance())
{
//string sqlstr = "select t.liquid_type_id,lt.liquid_type_name,lt.liquid_type_name_en,lr.liquid_range_name,lr.liquid_range_name_en,t.liquid_range_id,t.device_arm_id,l.* from liquidtypersrange t, liquid l,liquidtype lt,liquidrange lr where t.liquid_id=l.liquid_id and t.liquid_type_id=lt.liquid_type_id and t.liquid_range_id=lr.liquid_range_id and t.liquid_type_id='" + liquidTypeId + "' and t.liquid_range_id='" + liquidRangeId + "' and t.device_arm_id=" + armId + " and t.liquid_rs_status=1";
// 多表查询
var query = db.Queryable("LiquidTypeRSRange", "t").AddJoinInfo("Liquid", "l", "t.liquid_id=l.liquid_id and t.liquid_type_id='"+liquidTypeId+"' and t.liquid_range_id='"+ liquidRangeId+ "' and t.device_arm_id="+armId.ToString()+" and t.liquid_rs_status=1 and l.liquid_status=1", JoinType.Inner)
.AddJoinInfo("LiquidType", "lt", "lt.liquid_type_id=t.liquid_type_id", JoinType.Inner)
.AddJoinInfo("LiquidRange", "lr", "lr.liquid_range_id=t.liquid_range_id", JoinType.Inner)
.Select("t.liquid_type_id,lt.liquid_type_name,lt.liquid_type_name_en,lr.liquid_range_name,lr.liquid_range_name_en,t.liquid_range_id,t.device_arm_id,l.*");
var a = query.ToList();
ObservableCollection liquids = new ObservableCollection();
foreach(ExpandoObject epo in a)
{
Liquid lq= epo.ToEntity();
lq.device_arm_id = armId;
liquids.Add(lq);
}
var result = liquids;
return result;
}
}
#endregion
#region 添加一条新的液体类型与液体范围关系数据 by 液体类型与液体范围关系对象
///
/// 添加一条新的液体类型与液体范围关系数据 by 液体类型与液体范围关系对象
///
/// 液体类型与液体范围关系对象
/// 1:成功;0:失败
public static int AddLiquidTypeRSRangeIntodb(LiquidTypeRSRange liquidTypeRSRange)
{
using (var db = GetInstance())
{
return db.Insertable(liquidTypeRSRange).ExecuteCommand();
}
}
#endregion
#region 修改一条液体类型与液体范围关系数据 by 液体类型与液体范围关系对象的Id、液体类型Id、设备臂Id、数据状态
///
/// 修改一条液体类型与液体范围关系数据 by 液体类型与液体范围关系对象的Id、液体类型Id、设备臂Id、数据状态
///
/// 液体类型与液体范围关系对象
/// 1:成功;0:失败
public static int UpdateLiquidTypeRSRangeIntodb(LiquidTypeRSRange liquidTypeRSRange)
{
using (var db = GetInstance())
{
return db.Updateable(liquidTypeRSRange).Where(it=>it.liquid_range_id.Equals(liquidTypeRSRange.liquid_range_id)
&&it.liquid_type_id.Equals(liquidTypeRSRange.liquid_type_id)
&&it.device_arm_id.Equals(liquidTypeRSRange.device_arm_id)
&&it.liquid_rs_status.Equals(1)).ExecuteCommand();
}
}
#endregion
#region 删除一条新的液体类型与液体范围关系数据 by 液体类型与液体范围关系对象
///
/// 删除一条新的液体类型与液体范围关系数据 by 液体类型与液体范围关系对象
///
/// 液体类型与液体范围关系对象
/// 1:成功;0:失败
public static int DeleteLiquidTypeRSRangeIntodb(LiquidTypeRSRange liquidTypeRSRange)
{
using (var db = GetInstance())
{
return db.Updateable(liquidTypeRSRange).Where(it => it.liquid_range_id.Equals(liquidTypeRSRange.liquid_range_id)
&& it.liquid_type_id.Equals(liquidTypeRSRange.liquid_type_id)
&& it.liquid_rs_status.Equals(1)).ExecuteCommand();
}
}
#endregion
}
///
/// ExpandoObject 转化为实体类
///
public static class ExpandoObjectExtensions
{
public static T ToEntity(this ExpandoObject expando) where T : class, new()
{
var entity = new T();
var type = entity.GetType();
foreach (var property in expando)
{
var propName = property.Key;
var propValue = property.Value;
var prop = type.GetProperty(propName);
if (prop == null) continue;
if (propValue != null && prop.PropertyType.IsAssignableFrom(propValue.GetType()))
{
prop.SetValue(entity, propValue, null);
}
else if (propValue != null)
{
var converter = TypeDescriptor.GetConverter(prop.PropertyType);
if (converter.CanConvertFrom(propValue.GetType()))
{
prop.SetValue(entity, converter.ConvertFrom(propValue), null);
}
}
}
return entity;
}
}
}