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 OTSCOMMONCLR; 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 bool DeleteXrayListByFieldId(long a_nFieldId) //{ // if (m_listPosXrayInfo != null) // { // for (int i = 0; i < m_listPosXrayInfo.Count; i++) // { // if (m_listPosXrayInfo[i].GetScanFieldId() == (uint)a_nFieldId) // { // m_listPosXrayInfo.Remove(m_listPosXrayInfo[i]); // } // } // } // var tableInfoPtr = GetTableInfo(); // if (tableInfoPtr == null) // { // return false; // } // var datastorePtr = GetDatastore(); // if (datastorePtr == null) // { // return false; // } // string sTableName = tableInfoPtr.GetTableName(); // if (!datastorePtr.IsTableExists(sTableName)) // { // logger.Trace("Table %s not exist" + sTableName); // return true; // } // string sFieldIdColumnName = tableInfoPtr.GetColumnName((int)CPosXrayInfoTable.ColumnID.N_FIELD_ID - (int)CPosXrayInfoTable.ColumnID.MIN); // string sSQLCommand = "DELETE FROM \'{0}\' WHERE {1} = {2}"; // sSQLCommand = string.Format(sSQLCommand, tableInfoPtr.GetTableName(), sFieldIdColumnName, a_nFieldId); // return datastorePtr.RunCommand(sSQLCommand); //} 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(); //xrayPointInfoVec.Clear(); //int nRowId = 0; //int nWrongItems = 0; //while (!a_query.IsEOF()) //{ // CPosXrayClr xrayPointInfo = ReadXrayPointInfo(a_query); // if (xrayPointInfo!=null) // { // logger.Info("Read xray point info item failed: row id: %d"); // nWrongItems++; // } // else // { // xrayPointInfoVec.Add(xrayPointInfo); // } // a_query.NextRow(); // nRowId++; //} 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); //nWrongItems++; } else { xrayPointInfoVec.Add(xrayPointInfo); } //a_query.NextRow(); //nRowId++; } 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(); //if (datastorePtr==null) //{ // return query; //} var tableInfoPtr = GetTableInfo(); //if (tableInfoPtr==null) //{ // return query; //} string sFieldIdColumnName = tableInfoPtr.GetColumnName(Convert.ToInt32(CPosXrayInfoTable.ColumnID.N_FIELD_ID) - Convert.ToInt32(CPosXrayInfoTable.ColumnID.MIN)); //string sSQLCommand; //sSQLCommand = "SELECT * FROM \'{0}\' WHERE {1} ={2};" + Convert.ToString(tableInfoPtr.GetTableName()) + // Convert.ToString(sFieldIdColumnName) + a_nFieldId; //CSQLiteQuery cSQLiteQuery = new CSQLiteQuery(); //query = datastorePtr.QueryByCommand(sSQLCommand); string sSQLCommand = string.Format("SELECT * FROM \'{0}\' WHERE {1} ={2};",tableInfoPtr.GetTableName(),sFieldIdColumnName, a_nFieldId); DataTable t1 = datastorePtr.QueryByCmdForDataTable(sSQLCommand); //ASSERT(query); //if (query==null || !query.IsValid()) //{ // logger.Info("Invalid quary command (%s)."+Convert.ToString(sSQLCommand)); // //ASSERT(FALSE); // CDBQueryBase cDBQueryBase = new CDBQueryBase(); // return (cDBQueryBase); //} //// do the table related valid checking //if (query.GetColCount() != GetTableInfo().GetColumnCount()) //{ // logger.Info("query col num value is %d, but not %d"+ cSQLiteQuery.GetColCount()+ GetTableInfo().GetColumnCount()); // CDBQueryBase cDBQueryBase = new CDBQueryBase(); // return (cDBQueryBase); //} return t1; } } }