using OTSDataType; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using OTSModelSharp.DTLBase; using System.Data; using System.Drawing; using OTSCLRINTERFACE; using System.Data.SQLite; namespace OTSModelSharp { public class CPosXrayInfoDB :CSQLiteDB { protected static NLog.Logger logger = null; protected CSQLiteTable m_tableInfo = new CSQLiteTable(); List m_listPosXrayInfo=new List(); public CPosXrayInfoDB(IDBStoreBase _conStr, CSQLiteTable _table) : base(_conStr, _table) { } public List GetXrayInfoListByFieldId(long a_nFieldId) { List xrayPointInfoVec =new List(); if (m_listPosXrayInfo!=null) { foreach(CPosXrayClr xrayPointInfo in m_listPosXrayInfo) //for (auto & xrayPointInfo : m_listPosXrayInfo) { if (xrayPointInfo.GetScanFieldId() == (System.UInt32)a_nFieldId) { xrayPointInfoVec.Add(xrayPointInfo); } } } else { DataTable tableQuery = GetQueryByFieldId(a_nFieldId); if (tableQuery!=null) { return xrayPointInfoVec; } xrayPointInfoVec = ReadXrayPointInfoListByQuery(tableQuery); } return xrayPointInfoVec; } public List GetXrayInfoList(bool a_bForce, int fldId) { if (a_bForce) { m_listPosXrayInfo.Clear(); } if (m_listPosXrayInfo.Count() == 0) { GetXrayInfoListByFieldId(fldId); } return m_listPosXrayInfo; } public bool SaveXrayInfoList(List a_xrayPointList) { var tableInfoPtr = GetTableInfo(); if (tableInfoPtr==null) { return false; } var datastorePtr = GetDatastore(); if (datastorePtr==null) { return false; } CSQLiteTable cSQLiteTable = new CSQLiteTable(); string sInsertFormat = tableInfoPtr.GetInsertCommandFormatString(true); string sSQLCommand = ""; foreach (CPosXrayClr xrayPointInfo in a_xrayPointList) { System.Drawing.Point pos = (System.Drawing.Point)xrayPointInfo.GetPosition(); var qtyData = xrayPointInfo.GetElementQuantifyData(); var elenum = qtyData.Count; sSQLCommand =string.Format( sInsertFormat, (xrayPointInfo.GetIndex()), (pos.X) , (pos.Y) , (xrayPointInfo.GetScanFieldId()) , (xrayPointInfo.GetPartTagId()) , (xrayPointInfo.GetFeatureId()) , (elenum)); if (!datastorePtr.RunCommand(sSQLCommand, false)) { return false; } } return true; } public List> GetSavingXrayInfoCmds(List a_xrayPointList) { List> cmds = new List>(); var tableInfoPtr = GetTableInfo(); var datastorePtr = GetDatastore(); //CSQLiteTable cSQLiteTable = new CSQLiteTable(); var sInsertFormat = tableInfoPtr.GetInsertCommand(true); //string sSQLCommand = ""; var parasTem = sInsertFormat.Value; foreach (CPosXrayClr xrayPointInfo in a_xrayPointList) { var paras = new SQLiteParameter[7]; for (int j = 0; j < 7; j++) { paras[j] = new SQLiteParameter(parasTem[j].ParameterName); } System.Drawing.Point pos = (System.Drawing.Point)xrayPointInfo.GetPosition(); var qtyData = xrayPointInfo.GetElementQuantifyData(); var elenum = qtyData.Count; paras[0].Value = xrayPointInfo.GetIndex(); paras[1].Value = pos.X; paras[2].Value = pos.Y; paras[3].Value = xrayPointInfo.GetScanFieldId(); paras[4].Value = xrayPointInfo.GetPartTagId(); paras[5].Value = xrayPointInfo.GetFeatureId(); paras[6].Value= elenum; cmds.Add(new KeyValuePair(sInsertFormat.Key, paras)); } return cmds; } protected bool ReadXrayPointInfoList() { var st = GetDatastore(); var t = GetTableInfo(); DataTable query = st.QueryByTableNameForDataTable(t.GetTableName(), ""); if (query!=null) { return false; } m_listPosXrayInfo = ReadXrayPointInfoListByQuery(query); return true; } protected List ReadXrayPointInfoListByQuery(DataTable a_query) { List xrayPointInfoVec =new List(); for (int i=0; i< a_query.Rows.Count;i++) { CPosXrayClr xrayPointInfo = ReadXrayPointInfo(a_query); if(xrayPointInfo != null) { logger.Info("Read xray point info item failed: row id: %d",i); } else { xrayPointInfoVec.Add(xrayPointInfo); } } return xrayPointInfoVec; } protected CPosXrayClr ReadXrayPointInfo(DataTable a_query) { int nCol; //CPosXrayClr CPosXrayClr = new CPosXrayClr(); CPosXrayClr xrayPointPtr = new CPosXrayClr(); nCol = (int)CPosXrayInfoTable.ColumnID.N_INDEX - (int)CPosXrayInfoTable.ColumnID.MIN; xrayPointPtr.SetIndex((int)a_query.Rows[nCol][0]); System.Drawing.Point xrayPosition =new System.Drawing.Point(); nCol = (int)CPosXrayInfoTable.ColumnID.N_POS_X - (int)CPosXrayInfoTable.ColumnID.MIN; xrayPosition.X = (int)a_query.Rows[nCol][0]; nCol = (int)CPosXrayInfoTable.ColumnID.N_POS_Y - (int)CPosXrayInfoTable.ColumnID.MIN; xrayPosition.Y = (int)a_query.Rows[nCol][0]; xrayPointPtr.SetPosition(xrayPosition); nCol = (int)CPosXrayInfoTable.ColumnID.N_FIELD_ID - (int)CPosXrayInfoTable.ColumnID.MIN; xrayPointPtr.SetScanFieldId((int)a_query.Rows[nCol][0]); nCol = (int)CPosXrayInfoTable.ColumnID.N_PARTICLE_ID - (int)CPosXrayInfoTable.ColumnID.MIN; xrayPointPtr.SetPartTagId((int)a_query.Rows[nCol][0]); nCol = (int)CPosXrayInfoTable.ColumnID.N_FEATURE_ID - (int)CPosXrayInfoTable.ColumnID.MIN; xrayPointPtr.SetFeatureId((int)a_query.Rows[nCol][0]); nCol = (int)CPosXrayInfoTable.ColumnID.N_ELEMENT_NUM - (int)CPosXrayInfoTable.ColumnID.MIN; xrayPointPtr.SetElementNum((int)a_query.Rows[nCol][0]); return xrayPointPtr; } protected DataTable GetQueryByFieldId( long a_nFieldId) { CSQLiteTable query =new CSQLiteTable(); var datastorePtr = GetDatastore(); var tableInfoPtr = GetTableInfo(); string sFieldIdColumnName = tableInfoPtr.GetColumnName(Convert.ToInt32(CPosXrayInfoTable.ColumnID.N_FIELD_ID) - Convert.ToInt32(CPosXrayInfoTable.ColumnID.MIN)); string sSQLCommand = string.Format("SELECT * FROM \'{0}\' WHERE {1} ={2};",tableInfoPtr.GetTableName(),sFieldIdColumnName, a_nFieldId); DataTable t1 = datastorePtr.QueryByCmdForDataTable(sSQLCommand); return t1; } } }