Ejemplo n.º 1
0
        public static IPipeData GetDataByID(string ID, string TableName)
        {
            IPipeData pPipeData = null;

            if (TableName.Equals("PS_MANHOLE"))
            {
                pPipeData = new MANHOLE();
            }
            else if (TableName.Equals("PS_VIRTUAL_POINT"))
            {
                pPipeData = new PipePoint();
            }
            else if (TableName.Equals("PS_COMB"))
            {
                pPipeData = new COMB();
            }
            else if (TableName.Equals("PS_OUTFALL"))
            {
                pPipeData = new OUTFALL();
            }

            else if (TableName.Equals("PS_PUMP_STORAGE"))
            {
                pPipeData = new PUMP();
            }
            else if (TableName.Equals("PS_PIPE"))
            {
                pPipeData = new PIPELineClass();
            }
            else if (TableName.Equals("PS_CANAL"))
            {
                pPipeData = new CANAL();
            }
            else if (TableName.Equals("PS_FLAP"))
            {
                pPipeData = new FLAP();
            }
            else if (TableName.Equals("PS_WEIR"))
            {
                pPipeData = new WEIR();
            }
            else if (TableName.Equals("PS_SLUICE"))
            {
                pPipeData = new SLUICE();
            }
            else
            {
                pPipeData = null;
            }
            if (pPipeData == null)
            {
                return(null);
            }
            string    sql    = string.Format("select * from {0} where ID='{1}'", TableName, ID);
            DataTable pTable = SysDBUnitiy.OleDataBase.ExecuteQuery(sql).Tables[0];

            pPipeData.FillValueByRow(pTable.Rows[0], TableName);
            return(pPipeData);
        }
Ejemplo n.º 2
0
        public override IPipeData GetDataByID(string ID)
        {
            string    sql       = string.Format("select * from PS_PIPE where ID='{0}'", ID);
            IDataBase pDataBase = SysDBUnitiy.OleDataBase;

            System.Data.DataTable pTable = pDataBase.ExecuteQuery(sql).Tables[0];
            if (pTable.Rows.Count == 0)
            {
                return(null);
            }
            IPIPELine pPCPoint = new PIPELineClass();

            pPCPoint.FillValueByRow(pTable.Rows[0]);
            return(pPCPoint);
        }
Ejemplo n.º 3
0
        public IPIPELine[] GetConnLines()
        {
            string    sql       = string.Format("select  *  from  ps_pipe t  where  t.US_OBJECT_ID='{0}' or t.DS_OBJECT_ID='{0}'", this.ID);
            IDataBase pDataBase = SysDBUnitiy.OleDataBase;

            System.Data.DataTable ptable = pDataBase.ExecuteQuery(sql).Tables[0];

            IPIPELine[] pLines = new IPIPELine[ptable.Rows.Count];
            for (int i = 0; i < pLines.Length; i++)
            {
                IPIPELine pPIPELine = new PIPELineClass();
                pPIPELine.FillValueByRow(ptable.Rows[i]);
                pLines[i] = pPIPELine;
            }
            return(pLines);
        }
Ejemplo n.º 4
0
        public IPipeData GetData()
        {
            if (pPIPELine == null)
            {
                pPIPELine = new PIPELineClass();
            }
            //pPIPELine.ID = TxbID.Text;
            pPIPELine.ACQUISITION_DATE = TxbACQUISITION_DATE.Text;
            pPIPELine.ACQUISITION_UNIT = TxbACQUISITION_UNIT.Text;

            pPIPELine.PROCESS_Date = TxbPROCESS_DATE.Text;
            pPIPELine.PROCESS_Unit = TxbPROCESS_UNIT.Text;
            pPIPELine.ROAD_NAME    = TxbROAD_NAME.Text;
            pPIPELine.STATE        = TxbSTATE.Text;
            //pPIPELine.SYSTEM_TYPE= TxbSYSTEM_TYPE.Text;

            //pPIPELine.DS_INVERT_LEVEL= TxbDS_INVERT_LEVEL.Text ;
            //pPIPELine.DS_OBJECT_ID= TxbDS_OBJECT_ID.Text ;
            //pPIPELine.DS_POINT_INVERT_LEVEL= TxbDS_POINT_INVERT_LEVEL.Text ;
            pPIPELine.DS_SURVEY_ID = TxbDS_SURVEY_ID.Text;
            pPIPELine.MATERIAL     = TxbMATERIAL.Text;
            pPIPELine.Pipe_Length  = TxbPipe_Length.Text;
            pPIPELine.PRESSURE     = TxbPRESSURE.Text;

            pPIPELine.SEDIMENT_DEPTH = TxbSEDIMENT_DEPTH.Text;
            //pPIPELine.US_INVERT_LEVEL= TxbUS_INVERT_LEVEL.Text ;
            //pPIPELine.US_OBJECT_ID= TxbUS_OBJECT_ID.Text ;
            //pPIPELine.US_POINT_INVERT_LEVEL= TxbUS_POINT_INVERT_LEVEL.Text ;
            pPIPELine.US_SURVEY_ID = TxbUS_SURVEY_ID.Text;
            pPIPELine.Width        = TxbWidth.Text;
            pPIPELine.Remark       = TxbRemark.Text;

            pPIPELine.WATER_LEVEL   = TxbWATER_LEVEL.Text;
            pPIPELine.WATER_QUALITY = TxbWATER_QUALITY.Text;
            pPIPELine.WATER_State   = TxbWATER_State.Text;
            pPIPELine.Dirtcion      = CmbDirction.Text;
            return(pPIPELine);
        }
Ejemplo n.º 5
0
 public PipeLineCtrl(CADObjectEditCtrl pCADObjectEditCtrl)
 {
     InitializeComponent();
     pPIPELine           = new PIPELineClass();
     m_CADObjectEditCtrl = pCADObjectEditCtrl;
 }
Ejemplo n.º 6
0
        private void PWork_DoWork(object sender, DoWorkEventArgs e)
        {
            //pProgressFrm.TopMost = true;
            pProgressFrm.ShowDialog();
            WorkArgument pWorkArgument = e.Argument as WorkArgument;


            string ExcelPath = pWorkArgument.ExcelPath;

            string ExcelName = System.IO.Path.GetFileNameWithoutExtension(ExcelPath);
            //string ProjectName = pWorkArgument.ProjectName;

            string DwgPath = pWorkArgument.DwgSavePath;

            SysDBUnitiy.MDBPath = Path.GetDirectoryName(DwgPath) + string.Format("\\{0}.db", Path.GetFileNameWithoutExtension(DwgPath));

            string          TemplateDwg = SysDBUnitiy.RootDir + "\\Template\\template.dwg";
            string          TemplateMdb = SysDBUnitiy.RootDir + "\\Template\\Template.db";
            AcadApplication AcadApp     = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");

            pWork.ReportProgress(0, "正在创建数据文件");
            if (File.Exists(SysDBUnitiy.MDBPath))
            {
                File.Delete(SysDBUnitiy.MDBPath);
            }
            if (!File.Exists(SysDBUnitiy.MDBPath))
            {
                File.Copy(TemplateMdb, SysDBUnitiy.MDBPath, false);
            }

            if (File.Exists(DwgPath))
            {
                try
                {
                    File.Delete(DwgPath);
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("删除旧dwg文件失败,请检查该文件是否被占用");
                    return;
                }
            }
            if (!File.Exists(DwgPath))
            {
                File.Copy(TemplateDwg, DwgPath, false);
            }


            //List<TableConfig> LineTableName = new List<TableConfig>();
            //List<TableConfig> PointTableName = new List<TableConfig>();
            pWork.ReportProgress(0, "正在准备写入dwg文件数据");
            Autodesk.AutoCAD.Interop.AcadDocument AcadDoc = AcadApp.Documents.Open(DwgPath);
            double MinX, MinY, MaxX, MaxY;

            //string[] MinPoint = System.Configuration.ConfigurationSettings.AppSettings["MinPoint"].Split(',');

            MinX = double.Parse(CIni.ReadINI("XYExtent", "MinX"));
            MinY = double.Parse(CIni.ReadINI("XYExtent", "MinY"));

            //string[] MaxPoint = System.Configuration.ConfigurationSettings.AppSettings["MaxPoint"].Split(',');
            MaxX = double.Parse(CIni.ReadINI("XYExtent", "MaxX"));
            MaxY = double.Parse(CIni.ReadINI("XYExtent", "MaxY"));
            pWork.ReportProgress(0, "正在读取表格数据");
            DataTable PCTable    = ExcelClass.ReadExcelFile(ExcelPath);
            DataTable CoordTable = ExcelClass.ReadExcelFile(pWorkArgument.CoordExcelpath);

            CoordTable.Columns[0].ColumnName = "ID";
            //CoordTable.PrimaryKey = new DataColumn[] { CoordTable.Columns[0] };
            DataRow FirstRow     = CoordTable.Rows[0];

            for (int j = 1; j < FirstRow.ItemArray.Length; j++)
            {
                string value = FirstRow.ItemArray[j].ToString();
                double V_num = 0;
                if (double.TryParse(value, out V_num))
                {
                    if (V_num > MinX && V_num < MaxX)
                    {
                        CoordTable.Columns[j].ColumnName = "CO_X";
                    }
                    else if (V_num > MinY && V_num < MaxY)
                    {
                        CoordTable.Columns[j].ColumnName = "CO_Y";
                    }
                    else
                    {
                        CoordTable.Columns[j].ColumnName = "CO_Z";
                    }
                }
            }
            Dictionary <string, DataRow> CoordBHTable = new Dictionary <string, DataRow>();

            foreach (DataRow pCoordRow in CoordTable.Rows)
            {
                string key = pCoordRow["ID"].ToString();
                if (!CoordBHTable.ContainsKey(key))
                {
                    CoordBHTable.Add(key, pCoordRow);
                }
            }
            DataTable ErrorTable = PCTable.Clone();

            if (!ErrorTable.Columns.Contains("错误消息"))
            {
                ErrorTable.Columns.Add("错误消息");
            }
            #region 循环遍历表
            //int SumCount = PCTable.Rows.Count;
            //int CurNum =0;
            DataTable PCTab2 = PCTable.Copy();
            for (int i = 0; i < PCTable.Rows.Count; i++)
            {
                //CurNum++;
                DataRow pDataRow = PCTable.Rows[i];
                try
                {
                    pWork.ReportProgress(i * 100 / PCTable.Rows.Count, string.Format("正在导入第: {0}/{1}条", i + 1, PCTable.Rows.Count));

                    string ErrorMsg = string.Empty;

                    string SPointID = GetValue(pDataRow, "起点点号");
                    if (string.IsNullOrEmpty(SPointID))
                    {
                        ErrorMsg += "起点号不能为空;";
                    }
                    IPipePoint SPoint    = null;
                    DataRow    SPointRow = IsExistSURVEYID(SPointID);
                    if (SPointRow == null)
                    {
                        if (!CoordBHTable.ContainsKey(SPointID))
                        {
                            ErrorMsg += "起点对应的坐标不存在;";
                        }

                        if (ErrorMsg != string.Empty)
                        {
                            goto a1;
                        }
                        //DataRow pCoordRow = CoordBHTable[SPointID];
                        SPoint = GetPipePoint(SPointID, pDataRow, CoordBHTable[SPointID]);
                        SPoint.AddNew();
                        SPoint.DrawCADObject(AcadDoc);
                        //CoordBHTable.ContainsKey(SPointID)
                        CoordBHTable.Remove(SPointID);
                    }
                    else
                    {
                        //string ClassName = SPointRow["ClassName"].ToString();
                        //string ID = SPointRow["ID"].ToString();
                        SPoint = new PCPoint();
                        //string sql = string.Format("select * from Points where ID='{0}'" , ID);

                        //DataTable pTable = SysDBUnitiy.OleDataBase.ExecuteQuery(sql).Tables[0];

                        //if (pTable.Rows.Count > 0)
                        //{
                        SPoint.FillValueByRow(SPointRow);
                        //}
                    }
                    string EPointID = GetValue(pDataRow, "终点点号");
                    if (EPointID == string.Empty)
                    {
                        goto a1;
                    }
                    IPipePoint EPoint    = null;
                    DataRow    EPointRow = IsExistSURVEYID(EPointID);

                    if (EPointRow == null)
                    {
                        EPointRow = FindRow(PCTable, EPointID, i + 1);
                        if (EPointRow == null)
                        {
                            ErrorMsg += "终点对应的信息不存在;";
                            goto a1;
                        }
                        //   DataRow[] ECoordRows = CoordTable.Select(string.Format("ID='{0}'", EPointID));
                        if (!CoordBHTable.ContainsKey(EPointID))
                        {
                            ErrorMsg += "终点对应的坐标不存在;";
                            goto a1;
                        }

                        /*   string EPointType = GetValue(EPointRow, "起点类型");
                         * if (EPointType == string.Empty)
                         * {
                         *     ErrorMsg += "终点类型不能为空";
                         * }
                         * string ClassName = GetTrueType(EPointType);
                         * if (ClassName == string.Empty)
                         * {
                         *     ErrorMsg += "终点类型无法识别";
                         *
                         * } */
                        if (ErrorMsg != string.Empty)
                        {
                            goto a1;
                        }
                        EPoint = GetPipePoint(EPointID, EPointRow, CoordBHTable[EPointID]);
                        EPoint.AddNew();
                        EPoint.DrawCADObject(AcadDoc);
                        CoordBHTable.Remove(EPointID);
                    }
                    else
                    {
                        //string ClassName = EPointRow["ClassName"].ToString();
                        //string ID = EPointRow["ID"].ToString();
                        EPoint = new PCPoint();
                        //string sql = string.Format("select * from Points where ID='{0}'", ID);

                        //DataTable pTable = SysDBUnitiy.OleDataBase.ExecuteQuery(sql).Tables[0];

                        //if (pTable.Rows.Count > 0)
                        //{
                        EPoint.FillValueByRow(EPointRow);
                        //}
                    }
                    string    GJ        = GetValue(pDataRow, "管径");
                    IPIPELine pPIPELine = new PIPELineClass();
                    if (!pPIPELine.isExistSURVEY_ID(SPointID, EPointID))
                    {
                        pPIPELine.Width        = GJ;
                        pPIPELine.US_SURVEY_ID = SPointID;
                        pPIPELine.DS_SURVEY_ID = EPointID;
                        //pPIPELine.ID = pPIPELine.GetHead() + SPointID.Substring(2, 3) + pPIPELine.GetNextNO();
                        pPIPELine.ID           = Guid.NewGuid().ToString("N");
                        pPIPELine.US_OBJECT_ID = SPoint.ID;
                        pPIPELine.DS_OBJECT_ID = EPoint.ID;
                        //pPIPELine.SYSTEM_TYPE = SPoint.SYSTEM_TYPE;

                        double D_X = double.Parse(EPoint.X) - double.Parse(SPoint.X);
                        double D_Y = double.Parse(EPoint.Y) - double.Parse(EPoint.Y);
                        double Len = Math.Round(Math.Sqrt(D_X * D_X + D_Y * D_Y), 2);

                        pPIPELine.Pipe_Length = Len.ToString();
                        //pPIPELine.US_POINT_INVERT_LEVEL = SPoint.INVERT_LEVEL;

                        /* string US_NS = GetValue(pDataRow, "起点管口泥深");
                         * if (US_NS != string.Empty)
                         *   pPIPELine.US_INVERT_LEVEL = (double.Parse(SPoint.GROUND_LEVEL) - double.Parse(US_NS)/100).ToString("0.00");
                         * string DS_NS = GetValue(pDataRow, "终点管口泥深");
                         * if (DS_NS != string.Empty)
                         *   pPIPELine.DS_INVERT_LEVEL = (double.Parse(EPoint.GROUND_LEVEL) - double.Parse(DS_NS)/100).ToString("0.00");
                         */
                        pPIPELine.SEDIMENT_DEPTH = GetValue(pDataRow, "泥深");
                        pPIPELine.MATERIAL       = GetValue(pDataRow, "材质");
                        pPIPELine.PRESSURE       = GetValue(pDataRow, "管道形式");
                        pPIPELine.STATE          = GetValue(pDataRow, "设施状态");
                        pPIPELine.ROAD_NAME      = GetValue(pDataRow, "所在道路");
                        pPIPELine.Remark         = GetValue(pDataRow, "线备注");

                        pPIPELine.WATER_LEVEL   = GetValue(pDataRow, "泥深");
                        pPIPELine.WATER_QUALITY = GetValue(pDataRow, "水质");
                        pPIPELine.WATER_State   = GetValue(pDataRow, "水体状态");
                        pPIPELine.Dirtcion      = GetValue(pDataRow, "流向");

                        pPIPELine.AddNew();
                        pPIPELine.DrawCADObject(AcadDoc);
                    }
a1:
                    if (ErrorMsg != string.Empty)
                    {
                        DataRow ErrorRow = ErrorTable.NewRow();

                        List <object> ItemList = new List <object>();

                        if (pDataRow.Table.Columns.Contains("错误消息"))
                        {
                            pDataRow["错误消息"] = ErrorMsg;
                            ItemList.AddRange(pDataRow.ItemArray);
                        }
                        else
                        {
                            ItemList.AddRange(pDataRow.ItemArray);
                            ItemList.Add(ErrorMsg);
                        }

                        ErrorRow.ItemArray = ItemList.ToArray();
                        ErrorTable.Rows.Add(ErrorRow);
                    }
                    //PCTable.Rows.RemoveAt(i);
                }
                catch (System.Exception ex)
                {
                    DataRow ErrorRow = ErrorTable.NewRow();

                    List <object> ItemList = new List <object>();

                    if (pDataRow.Table.Columns.Contains("错误消息"))
                    {
                        pDataRow["错误消息"] = ex.Message;
                        ItemList.AddRange(pDataRow.ItemArray);
                    }
                    else
                    {
                        ItemList.AddRange(pDataRow.ItemArray);
                        ItemList.Add(ex.Message);
                    }

                    ErrorRow.ItemArray = ItemList.ToArray();
                    ErrorTable.Rows.Add(ErrorRow);
                }
                pWork.ReportProgress((i + 1) * 100 / PCTable.Rows.Count);
            }
            int n = 0;
            //pProgressFrm.SafeCallDisplayProgress(0);

            foreach (KeyValuePair <string, DataRow> CoordBH in CoordBHTable)
            {
                pWork.ReportProgress(n * 100 / CoordBHTable.Count, string.Format("正在导入第: {0}/{1}个多余点", n, CoordBHTable.Count));
                n++;

                //   pProgressFrm.SafeCallDisplayText(string.Format("正在导入第: {0}/{1}个多余点", n, CoordBHTable.Count));

                IPCPoint pPCPoint = new PCPoint();
                if (IsExistSURVEYID(CoordBH.Key) == null)
                {
                    try
                    {
                        pPCPoint.ID           = Guid.NewGuid().ToString("N");
                        pPCPoint.SURVEY_ID    = CoordBH.Key;
                        pPCPoint.X            = CoordBH.Value["CO_X"].ToString();
                        pPCPoint.Y            = CoordBH.Value["CO_Y"].ToString();
                        pPCPoint.GROUND_LEVEL = CoordBH.Value["CO_Z"].ToString();
                        pPCPoint.AddNew();
                        pPCPoint.DrawCADObject(AcadDoc);
                    }
                    catch (System.Exception ex)
                    {
                    }
                }
                pWork.ReportProgress(n * 100 / CoordBHTable.Count);
                // pProgressFrm.SafeCallDisplayProgress(n * 100 / CoordBHTable.Count);
            }
            //pProgressFrm.SafeCallCloseDialog();
            MessageBox.Show(string.Format("总共导入{0}条管线数据,{3}个多余点,其中成功{1}条,失败{2}条。",
                                          PCTab2.Rows.Count, PCTab2.Rows.Count - ErrorTable.Rows.Count, ErrorTable.Rows.Count, CoordBHTable.Count
                                          ), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            if (ErrorTable.Rows.Count > 0)
            {
                string ReportXls = System.IO.Path.GetDirectoryName(pWorkArgument.DwgSavePath) + string.Format("\\未导入{0}.xls", DateTime.Now.ToString("MMddHHmm"));
                ExcelClass.ExpReport(ErrorTable, ReportXls);
                if (MessageBox.Show("已导出失败记录到输出目录,是否查看", "提示",
                                    MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                {
                    System.Diagnostics.Process pExecuteEXE = new System.Diagnostics.Process();
                    pExecuteEXE.StartInfo.FileName = ReportXls;
                    pExecuteEXE.Start();
                }
            }
            #endregion
        }