using DataRWDAL.Base;
using MySql.Data.MySqlClient;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Reflection;
using XImagingXhandler.XDAL;
namespace DataRWDAL
{
///
/// 耗材库表操作类
///
public class LabwareDB : BaseDB
{
#region 根据耗材名称,获取耗材信息
///
/// 根据耗材名称,获取耗材信息
///
/// 耗材名称
/// 耗材对象
public static Labware GetInfodByName(string labwareName)
{
using (var db = GetInstance())
{
return db.Queryable().Single(it => it.labware_name.Equals(labwareName));
}
}
#endregion
#region 添加一条新的耗材数据 by 耗材数据
///
/// 添加一条新的耗材数据 by 耗材数据
///
/// 耗材对象
/// 1:成功;0:失败
public static int AddLabwareIntodb(Labware labware)
{
using (var db = GetInstance())
{
var result=0;
db.BeginTran(); // 开启事务
try
{
result = db.Insertable(labware).ExecuteCommand();
db.CommitTran(); // 提交事务
}
catch (Exception ex)
{
db.RollbackTran(); // 事务回滚
// 处理异常
result = 0;
}
return result;
}
}
#endregion
#region 查询返回耗材数据集,条件有默认类型、Id、耗材类型、包含的孔数
///
/// 查询返回耗材数据集,条件有默认类型、Id、耗材类型、包含的孔数
///
/// 默认类型;0表示非默认;1:表示默认;2表示全部
/// 耗材Id
/// 耗材类型
/// 孔数(已不支持)
/// 符合给定条件的耗材数据集
public static ObservableCollection GetLabware(int isDefaultType, string labwareId = "", string labwaretype = "", int wellcount = 0)
{
using (var db = GetInstance())
{
string sqlstr = "";
if (labwareId == "")
{
if (labwaretype == "")
{
if (isDefaultType == 2)
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_status.Equals(1)).ToList());
}
else
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_status.Equals(1) && it.is_default_type.Equals(Convert.ToInt32(isDefaultType))).ToList());
}
}
else
{
if (wellcount == 0)
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_status.Equals(1) && it.labware_type.Equals(labwaretype)&& it.is_default_type.Equals(Convert.ToInt32(isDefaultType))).ToList());
}
else
{
//此查询暂不支持
return null;
}
}
}
else
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_status.Equals(1) && it.labware_id.Equals(labwareId) && it.is_default_type.Equals(Convert.ToInt32(isDefaultType))).ToList());
}
}
}
#endregion
#region 查询返回孔板类(含圆形皿)耗材数据集
///
/// 查询返回孔板类(含圆形皿)耗材数据集
///
///
public static ObservableCollection GetSpecialLabware()
{
using (var db = GetInstance())
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_status.Equals(1)&&(it.labware_type_id.Equals("1")||it.labware_type_id.Equals("5"))).OrderBy(it=>it.labware_type_id).ToList());
}
}
#endregion
#region 修改耗材数据 by 耗材对象
///
/// 修改耗材数据 by 耗材对象
///
/// 耗材对象
/// 1:成功;0:失败
public static int UpdateLabwareIntodb(Labware labware)
{
int iResult = 0;//接收返回值
if (labware.labware_type_id == "3")//试剂槽类型
{
labware.well_height = (float)labware.labware_height - (float)labware.well_bottom_height;
}
using (var db = GetInstance())
{
iResult = db.Updateable(labware).ExecuteCommand();
//如果有关联的枪头盒,则更新枪头盒下的Tip的数据
if (labware.labware_type_id.Equals("6"))//吸头盒
{
Labware tipLabware = GetLabware(labware.tip_loaded_type);
if (!string.IsNullOrEmpty(labware.tip_loaded_type))
{
labware.tip_name = tipLabware.tip_name;
labware.tip_volume_max = tipLabware.tip_volume_max;
labware.tip_use_volume_max = tipLabware.tip_use_volume_max;
labware.tip_air_volume = tipLabware.tip_air_volume;
labware.tip_length = tipLabware.tip_length;
labware.tip_header_height = tipLabware.tip_header_height;
labware.tip_cone_height = tipLabware.tip_cone_height;
labware.tip_cone_radius_max = tipLabware.tip_cone_radius_max;
labware.tip_cone_radius_min = tipLabware.tip_cone_radius_min;
labware.press_tip_power = tipLabware.press_tip_power;
labware.press_tip_depth = tipLabware.press_tip_depth;
labware.press_tipinto_depth = tipLabware.press_tipinto_depth;
labware.quit_tip = tipLabware.quit_tip;
labware.is_filter = tipLabware.is_filter;
labware.is_lls = tipLabware.is_lls;
iResult = db.Updateable(labware).ExecuteCommand();
}
}
else if (labware.labware_type_id.Equals("2"))//吸头
{
List labwareList = GetLabwareBytiploadedtype(labware.labware_id);
foreach (Labware l in labwareList)
{
l.tip_name = labware.tip_name;
l.tip_volume_max = labware.tip_volume_max;
l.tip_use_volume_max = labware.tip_use_volume_max;
l.tip_air_volume = labware.tip_air_volume;
l.tip_length = labware.tip_length;
l.tip_header_height = labware.tip_header_height;
l.tip_cone_height = labware.tip_cone_height;
l.tip_cone_radius_max = labware.tip_cone_radius_max;
l.tip_cone_radius_min = labware.tip_cone_radius_min;
l.press_tip_power = labware.press_tip_power;
l.press_tip_depth = labware.press_tip_depth;
l.press_tipinto_depth = labware.press_tipinto_depth;
l.quit_tip = labware.quit_tip;
l.is_filter = labware.is_filter;
l.is_lls = labware.is_lls;
iResult = db.Updateable(l).ExecuteCommand();
}
}
}
return iResult;
}
#endregion
#region 删除耗材数据 by 耗材对象
///
/// 删除耗材数据 by 耗材对象
///
/// 耗材对象
/// 1:成功;0:失败
public static int DeleteLabwareIntodb(Labware labware)
{
using (var db = GetInstance())
{
return db.Updateable(labware).ExecuteCommand();
}
}
#endregion
#region 查询返回枪头盒耗材数据集
///
/// 查询返回枪头盒耗材数据集
///
/// 枪头盒耗材数据集
public static ObservableCollection GetTipLabwareFromdb()
{
using (var db = GetInstance())
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_status.Equals(1) && it.labware_type.Equals("吸头盒")).ToList());
}
}
#endregion
#region 查询返回离心管耗材数据集
///
/// 查询返回离心管耗材数据集
///
/// 离心管耗材数据集
public static ObservableCollection GetCentrifugalLabwareFromdb()
{
using (var db = GetInstance())
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_status.Equals(1) && it.labware_type.Equals("离心管")).ToList());
}
}
#endregion
#region 查询返回耗材数据 by 耗材Id
///
/// 查询返回耗材数据 by 耗材Id
///
/// 耗材Id
/// 枪头盒耗材数据集
public static Labware GetLabware(string labwareId = "")
{
using (var db = GetInstance())
{
return db.Queryable().Single(it => it.labware_status.Equals(1) && it.labware_id.Equals(labwareId));
}
}
#endregion
#region 查询返回耗材数据集 by 耗材已安装的枪头耗材Id
///
/// 查询返回耗材数据集 by 耗材已安装的枪头耗材Id
///
/// 耗材已安装的枪头耗材Id
/// 耗材数据集
public static List GetLabwareBytiploadedtype(string tiploadedtype = "")
{
using (var db = GetInstance())
{
return db.Queryable().Where(it => it.labware_status.Equals(1) && it.tip_loaded_type.Equals(tiploadedtype)).ToList();
}
}
#endregion
#region 查询返回关联的被叠放耗材数据集 by 耗材对象
///
/// 查询返回关联的被叠放耗材数据集 by 耗材对象
///
/// 耗材对象
/// 被叠放耗材数据集
public static ObservableCollection GetPiledlabwareOfALabware(Labware labware)
{
string strlabwares = labware.piled_script;
ObservableCollection labwares = new ObservableCollection();
if (!string.IsNullOrEmpty(strlabwares))
{
JObject job = JObject.Parse(strlabwares);
JArray jArray = (JArray)job["list"];
if (jArray != null)
{
for (int k = 0; k < jArray.Count; k++)
{
Labware alabware = new Labware();
alabware = GetLabware(jArray[k]["labwereid"].ToString());
alabware.x = jArray[k]["x"].ToString();
alabware.y = jArray[k]["y"].ToString();
alabware.z = jArray[k]["z"].ToString();
labwares.Add(alabware);
}
}
}
return labwares;
}
#endregion
#region 查询返回板位类耗材数据集
///
/// 查询返回板位类耗材数据集
///
///
public static ObservableCollection GetSpecialShelfLabware()
{
using (var db = GetInstance())
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_status.Equals(1) && it.labware_type_id.Equals("9")).OrderBy(it => it.labware_type_id).ToList());
}
}
#endregion
#region 查询孔位数据 by 耗材Id 仅管架类型
///
/// 查询孔位数据 by 耗材Id 仅管架类型
///
/// 耗材Id
///
public static ObservableCollection GetSpecialLabwareWellInfo(string labwareid)
{
using (var db = GetInstance())
{
return new ObservableCollection(db.Queryable().Where(it => it.labware_id.Equals(labwareid)).OrderBy(it=>it.labware_well_name,SqlSugar.OrderByType.Asc).ToList());
}
}
#endregion
#region 查询孔位数据是否存在 by 孔位数据Id 仅管架类型
///
/// 查询孔位数据是否存在 by 孔位数据Id 仅管架类型
///
/// 孔位数据Id
///
public static bool GetSpecialLabwareWellInfoExistById(string labwareWellInfoid)
{
bool result = false;
using (var db = GetInstance())
{
var query= db.Queryable().Single(it => it.well_id.Equals(labwareWellInfoid));
if(query!=null)
{
result = true;
}
}
return result;
}
#endregion
#region 添加孔位数据 by 孔位数据对象
///
/// 添加孔位数据 by 孔位数据对象
///
/// 孔位数据对象
///
public static int AddLabwareWellInfoIntodb(LabwareWellInfo labwareWellInfo)
{
using (var db = GetInstance())
{
var result = 0;
db.BeginTran(); // 开启事务
try
{
result = db.Insertable(labwareWellInfo).ExecuteCommand();
db.CommitTran(); // 提交事务
}
catch (Exception ex)
{
db.RollbackTran(); // 事务回滚
// 处理异常
result = 0;
}
return result;
}
}
#endregion
#region 删除所有孔位数据 by 耗材Id
///
/// 删除所有孔位数据 by 耗材Id
///
/// 耗材Id
///
public static int DeleteLabwareWellInfoByLabwareIddb(string labwareid)
{
using (var db = GetInstance())
{
var result = 0;
db.BeginTran(); // 开启事务
try
{
result = db.Deleteable().Where(it=>it.labware_id.Equals(labwareid)).ExecuteCommand();
db.CommitTran(); // 提交事务
}
catch (Exception ex)
{
db.RollbackTran(); // 事务回滚
// 处理异常
result = 0;
}
return result;
}
}
#endregion
#region 更新孔位数据 by 孔位数据对象
///
/// 更新孔位数据 by 孔位数据对象
///
/// 孔位数据对象
///
public static int UpdateLabwareWellInfoIntodb(LabwareWellInfo labwareWellInfo)
{
using (var db = GetInstance())
{
var result = 0;
db.BeginTran(); // 开启事务
try
{
result = db.Updateable().Where(it => it.well_id.Equals(labwareWellInfo.well_id)).ExecuteCommand();
db.CommitTran(); // 提交事务
}
catch (Exception ex)
{
db.RollbackTran(); // 事务回滚
// 处理异常
result = 0;
}
return result;
}
}
#endregion
}
}