using DevExpress.XtraCharts.Native; using FreeSql.Internal.ObjectPool; using Mesnac.Action.ChemicalWeighing.DBHelper; using Mesnac.Action.ChemicalWeighing.Entity; using Mesnac.Action.ChemicalWeighing.Entity.material; using Mesnac.Action.ChemicalWeighing.Entity.PptPlan; using Mesnac.Action.ChemicalWeighing.Entity.station; using Mesnac.Action.ChemicalWeighing.Product.PptPlan; using Mesnac.Codd.Session; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; using System.Security.Claims; using System.Text; using System.Threading.Tasks; namespace Mesnac.Action.ChemicalWeighing.BinManage { public class BinHelper { #region 查询料仓信息 /// /// 查询料仓信息 /// /// 料仓信息表 public static DataTable GetBin() { DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (dbHelper == null) { throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError); } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; string strSql = "SELECT Bin_Serial,Bin_Name,Bin_Code,Material_ID, Material_name,Station_Weight_Medium,Station_Weight_Low,Station_Weight_Advance,Station_Speed_Hight,Station_Speed_Medium,Station_Speed_Low,BinWeight,LimitWeight FROM Pmt_Bin LEFT JOIN xl_material ON Pmt_Bin.Material_ID=xl_material.ID ORDER BY Bin_Serial"; dbHelper.CommandText = strSql; DataTable table = dbHelper.ToDataTable(); if (table != null && table.Rows.Count > 0) { return table; } return null; } public static DataTable GetBinMaterial() { DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (dbHelper == null) { throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError); } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; string strSql = @"select Bin_Serial, Bin_Name, Bin_Code+'(' + Material_name + ')' as Bin_Code,Material_ID, Material_name,Station_Weight_Medium,Station_Weight_Low,Station_Weight_Advance,Station_Speed_Hight,Station_Speed_Medium,Station_Speed_Low from ( SELECT Bin_Serial, Bin_Name, Bin_Code, m.ID Material_ID, m.Material_name, Station_Weight_Medium, Station_Weight_Low, Station_Weight_Advance, Station_Speed_Hight, Station_Speed_Medium, Station_Speed_Low FROM Pmt_Bin b inner JOIN xl_material m ON b.Material_ID= m.ID ) t ORDER BY Bin_Serial"; dbHelper.CommandText = strSql; DataTable table = dbHelper.ToDataTable(); if (table != null && table.Rows.Count > 0) { return table; } return null; } /// /// 查询料仓信息 /// /// 料仓信息表 public static DataTable GetBinDataTable() { DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (dbHelper == null) { throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError); } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; string strSql = "SELECT Bin_Serial,Bin_Name,Bin_Code,Material_ID, Material_name,Station_Weight_Medium,Station_Weight_Low,Station_Weight_Advance,Station_Speed_Hight,Station_Speed_Medium,Station_Speed_Low FROM Pmt_Bin LEFT JOIN xl_material ON Pmt_Bin.Material_ID=xl_material.ID ORDER BY Bin_Serial"; dbHelper.CommandText = strSql; DataTable table = dbHelper.ToDataTable(); if (table != null && table.Rows.Count > 0) { return table; } return null; } #endregion #region 获取物料名与ID对象集合 /// /// 获取所有物料对象集合 /// /// public static List GetXlMaterialList() { DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (dbHelper == null) { throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError); } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; string sqlstr = "SELECT ID, Material_name FROM xl_material where IsEnable='是'"; dbHelper.CommandText = sqlstr; DataTable table = dbHelper.ToDataTable(); List lst = new List(); xl_material material = null; foreach (DataRow row in table.Rows) { material = new xl_material(); material.ID = Mesnac.Basic.DataProcessor.RowValue(row, "ID", String.Empty); material.Material_name = Mesnac.Basic.DataProcessor.RowValue(row, "Material_name", String.Empty); lst.Add(material); } return lst; } #endregion #region 根据料仓号修改对应物料 public static void UpdateBin(Pmt_Bin bin) { try { DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (dbHelper == null) { throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError); } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; string strSql = "UPDATE Pmt_Bin SET Bin_Code=@Bin_Code,Material_ID=@MaterialId,LimitWeight=@LimitWeight,Station_Weight_Medium=@Station_Weight_Medium,Station_Weight_Low=@Station_Weight_Low,Station_Weight_Advance=@Station_Weight_Advance,Station_Speed_Hight=@Station_Speed_Hight,Station_Speed_Medium=@Station_Speed_Medium,Station_Speed_Low=@Station_Speed_Low,IF_FLAG=@IfFlag WHERE Bin_Serial=@BinSerial"; dbHelper.CommandText = strSql; dbHelper.AddParameter("@Bin_Code", bin.Bin_Code); dbHelper.AddParameter("@MaterialId", bin.Material_ID); dbHelper.AddParameter("@BinSerial", bin.Bin_Serial); dbHelper.AddParameter("@LimitWeight", bin.LimitWeight); dbHelper.AddParameter("@Station_Weight_Medium", bin.Station_Weight_Medium); dbHelper.AddParameter("@Station_Weight_Low", bin.Station_Weight_Low); dbHelper.AddParameter("@Station_Weight_Advance", bin.Station_Weight_Advance); dbHelper.AddParameter("@Station_Speed_Hight", bin.Station_Speed_Hight); dbHelper.AddParameter("@Station_Speed_Medium", bin.Station_Speed_Medium); dbHelper.AddParameter("@Station_Speed_Low", bin.Station_Speed_Low); dbHelper.AddParameter("@IfFlag", 1); dbHelper.ExecuteNonQuery(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("修改料仓信息异常:" + ex.Message, ex); } } #endregion #region 获取bin对象集合 public static List GetBinList() { DataTable userTable = GetBin(); List lst = new List(); foreach (DataRow row in userTable.Rows) { Pmt_Bin bin = new Pmt_Bin { Bin_Serial = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Serial", 0), Material_ID = Mesnac.Basic.DataProcessor.RowValue(row, "Material_ID", String.Empty), Bin_Name = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Name", String.Empty), Bin_Code = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Code", String.Empty), Station_Weight_Medium =decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Medium", 0.000).ToString("f3")), Station_Weight_Low = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Low", 0.000).ToString("f3")), Station_Weight_Advance = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Advance", 0.000).ToString("f3")), Station_Speed_Hight = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Hight", 0.000).ToString("f3")), Station_Speed_Medium = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Medium", 0.000).ToString("f3")), Station_Speed_Low = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Low", 0.000).ToString("f3")) }; lst.Add(bin); } return lst; } #endregion #region 获取bin对象集合 public static List GetBinMaterialList() { DataTable userTable = GetBinDataTable(); List lst = new List(); foreach (DataRow row in userTable.Rows) { BinList bin = new BinList { Bin_Serial = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Serial", 0), Material_ID = Mesnac.Basic.DataProcessor.RowValue(row, "Material_ID", String.Empty), Material_name = Mesnac.Basic.DataProcessor.RowValue(row, "Material_name", String.Empty), Bin_Name = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Name", String.Empty), Bin_Code = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Code", String.Empty), Station_Weight_Medium = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Medium", 0.000).ToString("f3")), Station_Weight_Low = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Low", 0.000).ToString("f3")), Station_Weight_Advance = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Advance", 0.000).ToString("f3")), Station_Speed_Hight = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Hight", 0.000).ToString("f3")), Station_Speed_Medium = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Medium", 0.000).ToString("f3")), Station_Speed_Low = decimal.Parse(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Low", 0.000).ToString("f3")) }; lst.Add(bin); } return lst; } #endregion #region 根据ID获取料仓 /// /// 获取所有物料对象集合 /// /// public static Pmt_Bin GetFristBinInfo(int Id) { DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (dbHelper == null) { throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError); } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; string sqlstr = "SELECT top 1 * FROM Pmt_Bin where Bin_Serial=@Bin_Serial"; dbHelper.CommandText = sqlstr; dbHelper.AddParameter("@Bin_Serial", Id); DataTable dt = dbHelper.ToDataTable(); Pmt_Bin bin = null; if (dt != null && dt.Rows.Count > 0) { bin = ConvertDataToBin(dt.Rows[0]); } return bin; } #endregion #region 根据料仓号实时更新料仓物料重量 public static void UpdateBinWeight(Pmt_Bin bin) { try { DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (dbHelper == null) { throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError); } dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; string strSql = "UPDATE Pmt_Bin SET BinWeight=@BinWeight WHERE Bin_Serial=@BinSerial"; dbHelper.CommandText = strSql; dbHelper.AddParameter("@BinSerial", bin.Bin_Serial); dbHelper.AddParameter("@BinWeight", bin.BinWeight); dbHelper.ExecuteNonQuery(); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("修改料仓信息异常:" + ex.Message, ex); } } #endregion #region 根据料仓号实时更新料仓物料重量 public static bool SaveDataToBDb(Xl_DowLoadPlan item, LR_weigh lrWeigh, LR_plan lrPlan, Pmt_Bin bin, Hw_BinAlarm alarm,int key) { try { IFreeSql fsql = FreeHelper.Instance; { if (item.IsPrenatalTest==1) { if (key == 1) { fsql.Transaction(() => { var affrows = fsql.Insert(lrWeigh).ExecuteAffrows(); //判断是否插入成功 if (affrows < 1) throw new Exception("存盘物料详细数据失败!"); //抛出异常,回滚事务,事务退出 affrows = fsql.Insert(lrPlan).ExecuteAffrows(); if (affrows < 1) throw new Exception("存盘计划详细数据失败!");//抛出异常,回滚事务,事务退出 }); } else { fsql.Transaction(() => { var affrows = fsql.Insert(lrWeigh).ExecuteAffrows(); if (affrows < 1) throw new Exception("存盘物料详细数据失败!");//抛出异常,回滚事务,事务退出 }); } } else { if (key == 1) { fsql.Transaction(() => { var affrows = fsql.Insert(lrWeigh).ExecuteAffrows(); //判断是否插入成功 if (affrows < 1) throw new Exception("存盘物料详细数据失败!"); //抛出异常,回滚事务,事务退出 affrows = fsql.Insert(lrPlan).ExecuteAffrows(); if (affrows < 1) throw new Exception("存盘计划详细数据失败!");//抛出异常,回滚事务,事务退出 }); } else { fsql.Transaction(() => { var affrows = fsql.Insert(lrWeigh).ExecuteAffrows(); //判断是否插入成功 if (affrows < 1) throw new Exception("存盘物料详细数据失败!"); //抛出异常,回滚事务,事务退出 affrows = fsql.Update(bin.Bin_Serial).Set(a => a.BinWeight, bin.BinWeight).ExecuteAffrows(); }); } } return true; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("执行小料存盘事务信息异常:" + ex.Message, ex); return false; } } #endregion /// /// 把数据行对象转换为下校秤配方数据实体对象 /// /// 要转换的数据行 /// 返回转换后的实体对象 public static Pmt_Bin ConvertDataToBin(DataRow row) { if (row != null) { Pmt_Bin bin = new Pmt_Bin(); bin.Bin_Serial = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Serial", 0); bin.Bin_Name = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Name", String.Empty); bin.Bin_Code = Mesnac.Basic.DataProcessor.RowValue(row, "Bin_Code", String.Empty); bin.Material_ID = Mesnac.Basic.DataProcessor.RowValue(row, "Material_ID", String.Empty); bin.BinWeight = Convert.ToDecimal(Mesnac.Basic.DataProcessor.RowValue(row, "BinWeight", String.Empty)); bin.LimitWeight = Convert.ToDecimal(Mesnac.Basic.DataProcessor.RowValue(row, "LimitWeight", String.Empty)); bin.Station_Weight_Medium = Convert.ToDecimal(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Medium", String.Empty)); bin.Station_Weight_Low = Convert.ToDecimal(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Low", String.Empty)); bin.Station_Weight_Advance = Convert.ToDecimal(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Weight_Advance", String.Empty)); bin.Station_Speed_Hight = Convert.ToDecimal(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Hight", String.Empty)); bin.Station_Speed_Medium = Convert.ToDecimal(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Medium", String.Empty)); bin.Station_Speed_Low = Convert.ToDecimal(Mesnac.Basic.DataProcessor.RowValue(row, "Station_Speed_Low", String.Empty)); return bin; } else { return null; } } } }