using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; using GeoScene.Data; using GeoScene.Globe; using DevComponents.DotNetBar; using System.Data.OracleClient; namespace Cyberpipe.EMS_Forms { public partial class Form_TaksManager : Office2007Form { GSOGlobeControl globeControl1; DataTable dt; // OracleConnection conn; int maxPageIndex = 15; int rows = 0; public static bool IsOpen = false; public Form_TaksManager(GSOGlobeControl globeControl1) { this.globeControl1 = globeControl1; globeControl1.Globe.MemoryLayer.ObjectMinVisiblePixelSize = -1; InitializeComponent(); winGridViewPager1.OnPageChanged += new EventHandler(winGridViewPager1_OnPageChanged); winGridViewPager1.OnEditSelected += new EventHandler(winGridViewPager1_OnEditSelected);//查看详细 winGridViewPager1.OnStartExport += new EventHandler(pager1_OnStartExport); winGridViewPager1.OnEndExport += new EventHandler(pager1_OnEndExport); winGridViewPager1.dataGridView1.MultiSelect = false; } private void button_new_Click(object sender, EventArgs e) { Form_EditTask form = new Form_EditTask(globeControl1); form.Show(); Close(); } private void Form_TaksManager_Load(object sender, EventArgs e) { try { dateTimePicker_end.Value = DateTime.Now; dateTimePicker_start.Value = DateTime.Now.AddDays(-6); LoadData(); // conn = OledbHelper.sqlConnection(); string sql = "select t.username from patroler t"; DataTable dt = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sql).Tables[0]; comboBox_userName.Items.Add("不限"); foreach(DataRow row in dt.Rows){ comboBox_userName.Items.Add(row[0].ToString()); } sql = "select distinct 所属道路 from 标识器"; using (OracleDataReader reader = OracleUtils.ExecuteReader(OracleUtils.ConnectionString, CommandType.Text, sql)) { combo_street.Items.Add("不限"); while (reader.Read()) { combo_street.Items.Add(reader[0].ToString()); } } comboBox_state.Items.Add("不限"); comboBox_state.Items.Add("下发任务"); comboBox_state.Items.Add("接受任务"); comboBox_state.Items.Add("开始任务"); comboBox_state.Items.Add("任务执行中"); comboBox_state.Items.Add("结束任务"); if (!Utility.userRole.Contains("工单创建")) { button_new.Visible = false; } IsOpen = true; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } private void Form_TaksManager_FormClosing(object sender, FormClosingEventArgs e) { globeControl1.Globe.MemoryLayer.RemoveAllFeature(); IsOpen = false; } private void showThisForm() { Show(); } //标签信息 public class listID { public string MarkId; public int check = 0; public double x; public double y; public string checktime = "标签未定位"; public long t = 0; } private void flyToTask(DataGridViewRow row, int taskState) { int dbID = 0; dbID = Convert.ToInt32(row.Cells["任务编号"].Value); string userName = Convert.ToString(row.Cells["任务执行人员"].Value); DateTime t = new DateTime(); try { OracleConnection conn = null; List<listID> listIDs = new List<listID>(); conn = OledbHelper.sqlConnection(); conn.Open(); OracleCommand cmd = new OracleCommand("select * from MARK_TASK where TASK_ID ='" + dbID + "'", conn); OracleDataReader dr = cmd.ExecuteReader(); string condition = ""; while (dr.Read()) { listID li = new listID(); li.MarkId = Convert.ToString(dr["MARK_ID"]); condition += "'"+li.MarkId+"',"; if (Convert.ToInt32(dr["IS_CHECKED"]) == 1) { //Datatime li.check = Convert.ToInt32(dr["IS_CHECKED"]); li.checktime = Convert.ToString(dr["CHECKTIME"]); t = (DateTime)dr["CHECKTIME"]; li.t = t.Year * 10000000000 + t.Day * 1000000 + t.Month * 100000000 + t.Hour * 10000 + t.Minute * 100 + t.Second; } listIDs.Add(li); } dr.Close(); conn.Close(); conn = OledbHelper.sqlConnection(); conn.Open(); cmd = new OracleCommand("select * from 标识器 where 编号 in("+condition.Substring(0,condition.Length-1)+")", conn); dr = cmd.ExecuteReader(); int ID = GSOProjectManager.AddProject("+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=499885 +y_0=6 +ellps=krass +units=m +no_defs"); double x = 558443.622; double y = 3451941.845; GSOGeoModel model = null;// new GSOGeoModel(); string filepath; //GSOPoint3d p = new GSOPoint3d(); GSOPoint3d po = new GSOPoint3d(); GSOPoint3ds pnts = new GSOPoint3ds(); GSOGeoPolyline3D line = new GSOGeoPolyline3D(); while (dr.Read()) { string id = Convert.ToString(dr["编号"]);//// for (int i = 0; i < listIDs.Count; i++) { if (id == Convert.ToString(listIDs[i].MarkId)) { GSOFeature flagFeature = globeControl1.Globe.Layers.GetLayerByCaption("标识器").GetFeatureByID(int.Parse(Convert.ToString(dr["LSSYS_ID"]))); model = flagFeature.Geometry as GSOGeoModel; if (Convert.ToInt16(listIDs[i].check) == 1) { filepath = Application.StartupPath + "/EMSgcm/小旗子/lvqi/lvqi.gcm"; model.FilePath = filepath; } if (Convert.ToInt16(listIDs[i].check) == 0) { filepath = Application.StartupPath + "/EMSgcm/小旗子/hongqi/hongqi.gcm"; model.FilePath = filepath; } GSOFeature f = new GSOFeature(); f.Geometry = model; f.Name = "标识器:" + id; GSOFeature newFeature = globeControl1.Globe.MemoryLayer.AddFeature(f); GSOLabel label = new GSOLabel(); label.Text = "任务工单号:" + dbID + "\r\n" + "标识器编号:" + listIDs[i].MarkId + "\r\n" + "管线定位员:" + userName + "\r\n" + "定位时间:" + listIDs[i].checktime; label.Style = new GSOLabelStyle(); label.Style.Opaque = 0.8; //设置标注的透明度,取值区间是0-1 label.Style.TracktionLineType = EnumTracktionLineType.Solid; label.Style.TextStyle.FontHeight = 10; label.Style.TextStyle.FontName = "宋体"; label.Style.TractionLineEndPos = new GSOPoint2d(80, 60); label.Style.BackBeginColor = Color.Cyan; label.Style.BackEndColor = Color.White; //bai label.Style.MaxVisibleDistance = -1; newFeature.Label = label; listIDs[i].x = x; listIDs[i].y = y; if (taskState == 0 && i == 0) globeControl1.Globe.JumpToFeature(newFeature, 200); } } } dr.Close(); conn.Close(); if(taskState == 1) { conn = OledbHelper.sqlConnection(); conn.Open(); cmd = new OracleCommand("select * from POSITION", conn); dr = cmd.ExecuteReader(); while (dr.Read()) { po.X = Convert.ToDouble(dr["LONGITUDE"]); po.Y = Convert.ToDouble(dr["LATITUDE"]); po.Z = 2.5; break; //} } dr.Close(); conn.Close(); pnts.Add(po); model = new GSOGeoModel(); filepath = Application.StartupPath + "/EMSgcm/hat/hat.gcm"; model.FilePath = filepath; model.Position = po; model.AltitudeMode = EnumAltitudeMode.Absolute; GSOFeature f1 = new GSOFeature(); f1.Geometry = model; double s = 0.1; f1.Geometry.Scale(s, s, s); GSOFeature newFeature1 = globeControl1.Globe.MemoryLayer.AddFeature(f1); GSOLabel label1 = new GSOLabel(); label1.Text = "定位员:" + userName; label1.Style = new GSOLabelStyle(); label1.Style.Opaque = 0.8; //设置标注的透明度,取值区间是0-1 label1.Style.TracktionLineType = EnumTracktionLineType.Solid; label1.Style.TextStyle.FontHeight = 20; label1.Style.TextStyle.FontName = "黑体"; label1.Style.TractionLineEndPos = new GSOPoint2d(80, 60); newFeature1.Label = label1; } //获取定位人员位置 // 按扫描时间对任务点进行排序 int m = 0; long time = 0; for (int ii = 0; ii < listIDs.Count; ii++) { for (int k = ii; k < listIDs.Count; k++) { if (time < listIDs[k].t) { time = listIDs[k].t; m = k; } } if (listIDs[m].check == 1) { GSOPoint3d p = new GSOPoint3d(); p.X = listIDs[m].x; p.Y = listIDs[m].y; p.Z = 2.5; pnts.Add(p); time = listIDs[ii].t; listIDs[ii].t = listIDs[m].t; listIDs[m].t = time; int i = 0; i = listIDs[ii].check; listIDs[ii].check = listIDs[m].check; listIDs[m].check = i; x = listIDs[ii].x; listIDs[ii].x = listIDs[m].x; listIDs[m].x = x; y = listIDs[ii].y; listIDs[ii].y = listIDs[m].y; listIDs[m].y = y; } time = 0; } if (pnts.Count != 0) { line.AddPart(pnts); //把节点添加到线上 line.AltitudeMode = EnumAltitudeMode.Absolute; GSOSimpleLineStyle3D style1 = new GSOSimpleLineStyle3D(); //创建线的风格 //style1.LineColor = Color.FromArgb(250, 255, 0, 255); style1.LineColor = Color.Red; style1.LineWidth = 3; //设置线的宽度为3 style1.VertexVisible = true; //显示线的节点 line.Style = style1; //把风格添加到线上 GSOFeature f2 = new GSOFeature(); f2.Geometry = line; //把线对象添加到几何对象上 f2.Name = "轨迹"; //设置几何对象的名称 f2.SetFieldValue("description", "这是线的属性"); //设置几何对象的字段值 GSOFeature newFeature2 = globeControl1.Globe.MemoryLayer.AddFeature(f2); globeControl1.Globe.JumpToFeature(newFeature2, 230); globeControl1.Refresh(); } //else //{ // if (pnts.Count == 0) // { // MessageBox.Show("未有任务探测记录!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); // } //} } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { //conn.Close(); } } private void button_search_Click(object sender, EventArgs e) { try { if (dateTimePicker_start.Value != null && dateTimePicker_end.Value != null) { int compare = DateTime.Compare(dateTimePicker_start.Value, dateTimePicker_end.Value); if (compare == 1) { MessageBox.Show("起始时间不能大于终止时间,请重新设置!", "提示"); return; } } LoadData(1); } catch (Exception ex) { MessageBox.Show("查询失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// <summary> /// 初始化分页表格 /// </summary> private void initlizeDatagrid() { //控制表格显示的列,以及每一列要显示的列名 winGridViewPager1.Dock = DockStyle.Fill; winGridViewPager1.dataGridView1.Dock = DockStyle.Fill; winGridViewPager1.AddColumnAlias("任务编号", "任务编号"); //this.winGridViewPager1.AddColumnAlias("创建时间", "创建时间"); //this.winGridViewPager1.AddColumnAlias("任务描述", "任务描述"); //this.winGridViewPager1.AddColumnAlias("完成时间", "完成时间"); winGridViewPager1.AddColumnAlias("任务描述", "任务描述"); winGridViewPager1.AddColumnAlias("下发任务时间", "下发任务时间"); winGridViewPager1.AddColumnAlias("接受任务时间", "接受任务时间"); winGridViewPager1.AddColumnAlias("开始任务时间", "开始任务时间"); //this.winGridViewPager1.AddColumnAlias("任务执行中时间", "任务执行中时间"); winGridViewPager1.AddColumnAlias("完成任务时间", "完成任务时间"); winGridViewPager1.AddColumnAlias("任务执行区域", "任务执行区域"); winGridViewPager1.AddColumnAlias("任务状态", "任务状态"); winGridViewPager1.AddColumnAlias("任务执行人员", "任务执行人员"); //this.winGridViewPager1.DisplayColumns = "任务编号,创建时间,任务描述,完成时间,任务执行区域,任务状态,任务执行人员"; winGridViewPager1.DisplayColumns = "任务编号,任务描述,下发任务时间,接受任务时间,开始任务时间,结束任务时间,任务执行区域,任务状态,任务执行人员"; winGridViewPager1.BackColor = Color.LightCyan;//间隔颜色 //隐藏右键功能按钮 winGridViewPager1.dataGridView1.ContextMenuStrip.Items[1].Visible = false; winGridViewPager1.dataGridView1.ContextMenuStrip.Items[3].Visible = false; winGridViewPager1.dataGridView1.ContextMenuStrip.Items[4].Visible = false; winGridViewPager1.dataGridView1.ContextMenuStrip.Items[5].Visible = false; winGridViewPager1.dataGridView1.ContextMenuStrip.Items[6].Visible = false; winGridViewPager1.dataGridView1.ContextMenuStrip.Items[7].Visible = false; winGridViewPager1.dataGridView1.ContextMenuStrip.Items[2].Text = "查看任务信息"; //右键菜单宽度 winGridViewPager1.dataGridView1.ContextMenuStrip.AutoSize = false; winGridViewPager1.dataGridView1.ContextMenuStrip.Width = 150; //数据铺满表格 winGridViewPager1.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; //控制间隔的颜色 winGridViewPager1.BackColor = Color.LightCyan;//间隔颜色 //控制每页显示的最大数据量 winGridViewPager1.PagerInfo.RecordCount = rows; winGridViewPager1.PagerInfo.PageSize = maxPageIndex; winGridViewPager1.dataGridView1.Refresh(); //winGridViewPager1.Controls.RemoveAt(1); } /// <summary> /// 页面刷新 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void winGridViewPager1_OnPageChanged(object sender, EventArgs e) { LoadData(); } void pager1_OnEndExport(object sender, EventArgs e) { } void pager1_OnStartExport(object sender, EventArgs e) { int pageIndex = winGridViewPager1.PagerInfo.CurrenetPageIndex; string where = GetSql(); DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, where).Tables[0]; winGridViewPager1.AllToExport = table; } /// <summary> /// 查看详细信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void winGridViewPager1_OnEditSelected(object sender, EventArgs e) { DataGridView grid = sender as DataGridView; if (grid != null && grid.SelectedRows.Count > 0) { DataGridViewRow row = grid.SelectedRows[0]; try { int dbID = 0; int taskStateInt = 0; dbID = Convert.ToInt32(row.Cells["任务编号"].Value); string taskState = row.Cells["任务状态"].Value.ToString(); taskStateInt = taskState.Equals("开始任务") ? 1 : 0; string sql = "select dbid," + " checktime," + " mark_id," + " task_id," + " case is_checked" + " when 0 then" + " '未定位'" + " when 1 then" + " '已定位'" + " else" + " '未知'" + " end as is_checked" + " from MARK_TASK where task_id='" + dbID + "' order by dbid"; DataTable taskInfoDt = OledbHelper.ExecuteDataTable(sql); if (taskInfoDt == null || taskInfoDt.Rows.Count == 0) { MessageBox.Show("没有相应详细任务信息!", "提示"); return; } Hide(); flyToTask(row, taskStateInt); Form_TaskInfo p = new Form_TaskInfo(globeControl1, taskInfoDt); p.showParentForm += new Form_TaskInfo.Handle(showThisForm);//改变值的事件 p.Show(); } catch (Exception ex) { MessageBox.Show("编辑失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show("没有选择记录", "提示"); } } private void LoadData() { int pageIndex = winGridViewPager1.PagerInfo.CurrenetPageIndex; string sqlData = GetSql(pageIndex); initlizeDatagrid(); DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sqlData).Tables[0]; winGridViewPager1.DataSource = table.DefaultView; winGridViewPager1.Refresh(); } private void LoadData(int pageIndex) { string sqlData = GetSql(pageIndex); initlizeDatagrid(); DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sqlData).Tables[0]; winGridViewPager1.DataSource = table.DefaultView; winGridViewPager1.Refresh(); } private string GetSql() { string sqlCount = "select count(*) from taskinfo t where 1=1"; string sqlData = "select dbid as 任务编号,descirption as 任务描述,deploytime as 下发任务时间," + "case taskstate when '接受任务' then finishtime else null end as 接受任务时间," + "case taskstate when '开始任务' then finishtime else null end as 开始任务时间," + "case taskstate when '任务执行中' then finishtime else null end as 任务执行中时间, " + "case taskstate when '结束任务' then finishtime else null end as 结束任务时间," + "street as 任务执行区域,taskstate as 任务状态,username as 任务执行人员 from taskinfo t"; rows = int.Parse(OracleUtils.ExecuteScalar(OracleUtils.ConnectionString, CommandType.Text, sqlCount).ToString()); return sqlData; } private string GetSql(int pageIndex) { int minPage = (pageIndex - 1) * maxPageIndex + 1; int maxPage = pageIndex * maxPageIndex; string sqlCount = "select count(*) from taskinfo t where 1=1"; string sqlData = "select dbid as 任务编号,descirption as 任务描述,deploytime as 下发任务时间," + "case taskstate when '接受任务' then finishtime else null end as 接受任务时间,"+ "case taskstate when '开始任务' then finishtime else null end as 开始任务时间,"+ "case taskstate when '任务执行中' then finishtime else null end as 任务执行中时间, "+ "case taskstate when '结束任务' then finishtime else null end as 结束任务时间,"+ "street as 任务执行区域,taskstate as 任务状态,username as 任务执行人员 " + "from (select t.*,rownum row_num from taskinfo t where 1=1"; if (!String.IsNullOrEmpty(comboBox_userName.Text.Trim()) && !comboBox_userName.Text.Trim().Equals("不限")) { sqlCount += " and username='" + comboBox_userName.Text.Trim() + "' "; sqlData += " and username='" + comboBox_userName.Text.Trim() + "' "; } if (dateTimePicker_start.Value != null) { sqlCount += "and deploytime>=to_date('" + dateTimePicker_start.Value.ToShortDateString() + "','yyyy-MM-dd') "; sqlData += "and deploytime>=to_date('" + dateTimePicker_start.Value.ToShortDateString() + "','yyyy-MM-dd') "; } if (dateTimePicker_end.Value != null) { DateTime time = dateTimePicker_end.Value; time = time.AddDays(1); sqlCount += "and deploytime<=to_date('" + time.ToShortDateString() + "','yyyy-MM-dd') "; sqlData += "and deploytime<=to_date('" + time.ToShortDateString() + "','yyyy-MM-dd') "; } if (!String.IsNullOrEmpty(comboBox_state.Text.Trim()) && !comboBox_state.Text.Trim().Equals("不限")) { sqlCount += "and taskstate='" + comboBox_state.Text + "' "; sqlData += "and taskstate='" + comboBox_state.Text + "' "; } if (!String.IsNullOrEmpty(combo_street.Text.Trim()) && !combo_street.Text.Trim().Equals("不限")) { sqlCount += "and street='" + combo_street.Text + "' "; sqlData += "and street='" + combo_street.Text + "' "; } sqlData += " order by DBID desc)b " + "where(b.row_num between " + minPage + " and " + maxPage + ")"; rows = int.Parse(OracleUtils.ExecuteScalar(OracleUtils.ConnectionString, CommandType.Text, sqlCount).ToString()); return sqlData; } } }