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 } }