Newer
Older
EMS_SZ / FrmPatrolerManager.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using DevComponents.DotNetBar.Controls;
using EMS;
using GeoScene.Data;

namespace Cyberpipe
{
    public partial class FrmPatrolerManager : Office2007Form
    {
        private GeoScene.Globe.GSOGlobeControl globeControl1;
        int maxPageIndex = 20;
        int rows = 0;
        string combo_stateText = "";

        public static bool IS_OPEN = false;


        public FrmPatrolerManager(GeoScene.Globe.GSOGlobeControl globeControl1)
        {
            InitializeComponent();
            this.globeControl1 = globeControl1;

            winGridViewPager1.OnPageChanged += new EventHandler(winGridViewPager1_OnPageChanged);
           
            this.winGridViewPager1.OnStartExport += new EventHandler(pager1_OnStartExport);
            this.winGridViewPager1.OnEndExport += new EventHandler(pager1_OnEndExport);

            winGridViewPager1.dataGridView1.MultiSelect = false;
        }

        /// <summary>
        /// 初始化分页表格
        /// </summary>
        private void initlizeDatagrid()
        {

            //控制表格显示的列,以及每一列要显示的列名
            this.winGridViewPager1.Dock = DockStyle.Fill;
            this.winGridViewPager1.dataGridView1.Dock = DockStyle.Fill;
            this.winGridViewPager1.AddColumnAlias("姓名", "姓名");
            this.winGridViewPager1.AddColumnAlias("编号", "编号");
            this.winGridViewPager1.AddColumnAlias("性别", "性别");
            this.winGridViewPager1.AddColumnAlias("年龄", "年龄");
            this.winGridViewPager1.AddColumnAlias("电话", "电话");
            this.winGridViewPager1.AddColumnAlias("状态", "状态");
            this.winGridViewPager1.DisplayColumns = "姓名,性别,年龄,电话,状态";

            winGridViewPager1.BackColor = Color.LightCyan;//间隔颜色


            //隐藏右键功能按钮
            //winGridViewPager1.dataGridView1.ContextMenuStrip.Items[1].Visible = false;
            //winGridViewPager1.dataGridView1.ContextMenuStrip.Items[2].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.Items[3].Text = "注销";

            //winGridViewPager1.AppendedMenu = this.contextMenuStrip1;
            

            //右键菜单宽度
            winGridViewPager1.dataGridView1.ContextMenuStrip.AutoSize = false;
            winGridViewPager1.dataGridView1.ContextMenuStrip.Width = 150;
            //数据铺满表格
            this.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];
            this.winGridViewPager1.AllToExport = table;
        }

        /// <summary>
        /// 编辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void winGridViewPager1_OnEditSelected(object sender, EventArgs e)
        {
            if (Utility.userRole.IndexOf("巡检员编辑") == -1)
                return;

            DataGridView grid = sender as DataGridView;
            if (grid != null && grid.SelectedRows.Count>0)
            {
                DataGridViewRow row = grid.SelectedRows[0];
                try
                {
                    long dbid = long.Parse(row.Cells["编号"].Value.ToString());
                    String name = row.Cells["姓名"].Value.ToString();
                    String sex = row.Cells["性别"].Value.ToString();
                    String age = row.Cells["年龄"].Value.ToString();
                    string phone = row.Cells["电话"].Value.ToString();
                    age = String.IsNullOrEmpty(age.ToString().Trim()) ? "1" : age.ToString().Trim();
                    FrmPatrolerEdit frm = new FrmPatrolerEdit(dbid.ToString(), name, age, sex, phone);
                    frm.reloadGrid += new ReloadPatrolerGrid(LoadData);
                    frm.ShowDialog();
                    winGridViewPager1.Refresh();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("编辑失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("没有选择记录", "提示");
            }

        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void winGridViewPager1_OnDeleteSelected(object sender, EventArgs e)
        {
            DataGridView grid = sender as DataGridView;
            if (grid != null && grid.SelectedRows.Count > 0)
            {
                DataGridViewRow row = grid.SelectedRows[0];
                long dbid = long.Parse(row.Cells["编号"].Value.ToString());
                try
                {
                    string state = row.Cells["状态"].Value.ToString();
                    if ("在线".Equals(state))
                    {
                        if (MessageBox.Show("确定注销?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            String sql = "update patroler t set t.accountstate='LEAVER' where t.dbid=" + dbid;
                            OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
                        }
                    }
                    else {
                        MessageBox.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;
            //for (int i = 0; i < winGridViewPager1.dataGridView1.Rows.Count; i++)
            //{
            //    if (winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value.ToString() == "ONLINE")
            //    {
            //        winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value = "在线";
            //    }
            //    else
            //    {
            //        if (winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value.ToString() == "OFFLINE")
            //        {
            //            winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value = "离线";
            //        }
            //        else
            //        {
            //            if (winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value.ToString() == "LEAVER")
            //            {
            //                winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value = "注销";
            //            }
            //        }
            //    }
            //}
            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;
            //for (int i = 0; i < winGridViewPager1.dataGridView1.Rows.Count; i++)
            //{
            //    if (winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value.ToString() == "ONLINE")
            //    {
            //        winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value = "在线";
            //    }
            //    else
            //    {
            //        if (winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value.ToString() == "OFFLINE")
            //        {
            //            winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value = "离线";
            //        }
            //        else
            //        {
            //            if (winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value.ToString() == "LEAVER")
            //            {
            //                winGridViewPager1.dataGridView1.Rows[i].Cells["状态"].Value = "注销";
            //            }
            //        }
            //    }
            //}
            winGridViewPager1.Refresh();
        }

        private string GetSql()
        {
           // string sqlCount = "select count(*) from equipment where status = 'USING'";
            string sqlCount = "select count(1) from patroler";

            string sqlData = "select username as 姓名,dbid as 编号,sex as 性别,age as 年龄,phonenum as 电话,"+
                "case when accountstate = 'ONLINE' then '在线'  when accountstate = 'OFFLINE' then '离线' when accountstate = 'LEAVER' then '注销' end as 状态 " +
                "from (select t.*,rownum row_num from patroler t order by DBID desc)b " +
                " where 1=1";

            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(1) from patroler where 1=1";
            string sqlData = "select username as 姓名,dbid as 编号,sex as 性别,age as 年龄,phonenum as 电话,"+
            "case when accountstate = 'ONLINE' then '在线'  when accountstate = 'OFFLINE' then '离线' when accountstate = 'LEAVER' then '注销' end as 状态 " +
                "from (select t.*,rownum row_num from patroler t where 1=1";

            if (!String.IsNullOrEmpty(txt_username.Text.Trim()))
            {
                sqlCount += " and username like '%" + txt_username.Text.Trim() + "%'";
                sqlData += " and username like '%" + txt_username.Text.Trim() + "%'";
            }
            if (!String.IsNullOrEmpty(txt_phone.Text.Trim()))
            {
                sqlCount += " and phonenum='" + txt_phone.Text.Trim() + "'";
                sqlData += " and phonenum='" + txt_phone.Text.Trim() + "'";
            }
            if (null != combo_sex.SelectedItem && !String.IsNullOrEmpty(combo_sex.SelectedItem.ToString())
                && !combo_sex.SelectedItem.ToString().Equals("不限"))
            {
                sqlCount += " and sex='" + combo_sex.SelectedItem.ToString() + "'";
                sqlData += " and sex='" + combo_sex.SelectedItem.ToString() + "'";
            }
            if (null != combo_state.SelectedItem && !String.IsNullOrEmpty(combo_state.SelectedItem.ToString())
                && !combo_state.SelectedItem.ToString().Equals("不限"))
            {
                sqlCount += " and accountstate='" + combo_stateText + "'";
                sqlData += " and accountstate='" + combo_stateText + "'";
            }
            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;
        }

        private void FrmPatrolerManager_Load(object sender, EventArgs e)
        {
            try
            {
               // initlizeDatagrid();
                LoadData();
                initForm();
               // initlizeDatagrid();
                IS_OPEN = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("窗体加载失败:" + ex.ToString(), "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                ex.ToString();
            }
        }

        private void initForm()
        {
            if (Utility.userRole.IndexOf("巡检员新增") == -1)
            {
                btn_add_person.Visible = false;
            }
            if (Utility.userRole.IndexOf("巡检员编辑") == -1)
            {
                //winGridViewPager1.dataGridView1.ContextMenuStrip.Items[2].Visible = false;
                编辑ToolStripMenuItem.Visible = false;
            }
            if (Utility.userRole.IndexOf("巡检员注销") == -1)
            {
                //winGridViewPager1.dataGridView1.ContextMenuStrip.Items[3].Visible = false;
                注销ToolStripMenuItem.Visible = false;
            }
        }

        private void btn_query_person_Click(object sender, EventArgs e)
        {
            try
            {
                LoadData(1);
            }
            catch (Exception ex)
            {
                MessageBox.Show("查询失败:" + ex.ToString(), "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                ex.ToString();
            }
        }

        private void btn_add_person_Click(object sender, EventArgs e)
        {
            try
            {
                FrmPatrolerEdit frm = new FrmPatrolerEdit();
                frm.reloadGrid += new ReloadPatrolerGrid(LoadData);
                frm.ShowDialog();
            }
            catch (Exception ex)
            {
                MessageBox.Show("新增巡检人员操作失败:" + ex.ToString(), "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                ex.ToString();
            }
        }


        private void combo_state_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (combo_state.SelectedItem.ToString() == "在线")
            {
                combo_stateText = "ONLINE";
            }
            if (combo_state.SelectedItem.ToString() == "离线")
            {
                combo_stateText = "OFFLINE";
            }
            if (combo_state.SelectedItem.ToString() == "注销")
            {
                combo_stateText = "LEAVER";
            }
        }

        private void FrmPatrolerManager_FormClosing(object sender, FormClosingEventArgs e)
        {
            globeControl1.Globe.MemoryLayer.RemoveAllFeature();
            IS_OPEN = false;
        }

        private void 日志ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (winGridViewPager1 != null && winGridViewPager1.dataGridView1 != null && winGridViewPager1.dataGridView1.SelectedRows.Count > 0)
            {
                DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
                try
                {
                    long dbid = long.Parse(row.Cells["编号"].Value.ToString());
                    Log p = new Log(dbid.ToString());
                    p.Show();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("查看日志失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }

        private void 任务ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (winGridViewPager1 != null && winGridViewPager1.dataGridView1 != null && winGridViewPager1.dataGridView1.SelectedRows.Count > 0)
            {
                DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
                try
                {
                    long dbid = long.Parse(row.Cells["编号"].Value.ToString());
                    String state = row.Cells["状态"].Value.ToString();
                    if ("在线".Equals(state))
                    {
                        string sql = "select t.dbid " +
                                          "from taskinfo t " +
                                         "where (t.taskstate = '开始任务' or t.taskstate = '执行过程中') " +
                                           "and t.patroler_id =" + dbid + " " +
                                           "order by t.deploytime desc";
                        DataTable dt = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sql).Tables[0];
                        if (dt.Rows.Count > 0)
                        {
                            TaskInfo p = new TaskInfo(int.Parse(dt.Rows[0][0].ToString()));
                            p.Show();
                        }
                        else
                        {
                            MessageBox.Show("当前用户没有开始任务或接受任务", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        }
                    }
                    else
                    {
                        MessageBox.Show("当前用户没有在线", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("任务打开失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            
        }

        private void 定位ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (winGridViewPager1 != null && winGridViewPager1.dataGridView1 != null && winGridViewPager1.dataGridView1.SelectedRows.Count > 0)
            {
                DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
                try
                {
                    long dbid = long.Parse(row.Cells["编号"].Value.ToString());
                    String username = row.Cells["姓名"].Value.ToString();
                    string sql = "select t.latitude, t.longitude " +
                                      "from position t " +
                                     "where t.dbid = (select max(dbid) from position where patroler_id = " + dbid + ")";
                    DataTable table = OracleUtils.ExecuteDataset(OracleUtils.ConnectionString, CommandType.Text, sql).Tables[0];
                    if (table.Rows.Count > 0)
                    {
                        this.WindowState = FormWindowState.Minimized;
                        double x = double.Parse(table.Rows[0]["longitude"].ToString());
                        double y = double.Parse(table.Rows[0]["latitude"].ToString());
                        GSOPoint3d p = new GSOPoint3d();
                        p.X = x;
                        p.Y = y;
                        p.Z = 7;

                        GSOGeoModel model = new GSOGeoModel();
                        string filepath = Application.StartupPath + "/EMSgcm/person/ren.gcm";


                        model.FilePath = filepath;
                        model.Position = p;
                        model.AltitudeMode = EnumAltitudeMode.Absolute;
                        GeoScene.Globe.GSOCameraState cameraState = new GeoScene.Globe.GSOCameraState();
                        cameraState.Longitude = x;
                        cameraState.Latitude = y;
                        cameraState.Heading = -3.51574088627348;
                        cameraState.Tilt = 44.392160966227;
                        cameraState.Distance = 50;
                        cameraState.Altitude = 0;
                        cameraState.AltitudeMode = EnumAltitudeMode.Absolute;
                        model.CameraState = cameraState;

                        GSOFeature f = new GSOFeature();
                        f.Geometry = model;
                        GSOFeature newFeature = globeControl1.Globe.MemoryLayer.AddFeature(f);
                        //globeControl1.Globe.JumpToPosition(p, EnumAltitudeMode.Absolute, 50);
                        globeControl1.Globe.JumpToCameraState(cameraState);
                        globeControl1.Refresh();

                    }
                    else
                    {
                        MessageBox.Show("未找到人员位置", "信息");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("定位失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
           
        }

        private void 编辑ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (winGridViewPager1 != null && winGridViewPager1.dataGridView1 != null && winGridViewPager1.dataGridView1.SelectedRows.Count > 0)
            {
                DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
                try
                {
                    long dbid = long.Parse(row.Cells["编号"].Value.ToString());
                    String name = row.Cells["姓名"].Value.ToString();
                    String sex = row.Cells["性别"].Value.ToString();
                    String age = row.Cells["年龄"].Value.ToString();
                    string phone = row.Cells["电话"].Value.ToString();
                    age = String.IsNullOrEmpty(age.ToString().Trim()) ? "1" : age.ToString().Trim();
                    FrmPatrolerEdit frm = new FrmPatrolerEdit(dbid.ToString(), name, age, sex, phone);
                    frm.reloadGrid += new ReloadPatrolerGrid(LoadData);
                    frm.ShowDialog();
                    winGridViewPager1.Refresh();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("编辑失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void 注销ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (winGridViewPager1 != null && winGridViewPager1.dataGridView1 != null && winGridViewPager1.dataGridView1.SelectedRows.Count > 0)
            {
                DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
                long dbid = long.Parse(row.Cells["编号"].Value.ToString());
                try
                {
                    if (MessageBox.Show("确定注销?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        String sql = "update patroler t set t.accountstate='LEAVER' where t.dbid=" + dbid;
                        OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
                        LoadData();
                        MessageBox.Show("人员已注销", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("人员注销失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void 重置密码ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (winGridViewPager1 != null && winGridViewPager1.dataGridView1 != null && winGridViewPager1.dataGridView1.SelectedRows.Count > 0)
            {
                DataGridViewRow row = winGridViewPager1.dataGridView1.SelectedRows[0];
                long dbid = long.Parse(row.Cells["编号"].Value.ToString());
                try
                {
                    if (MessageBox.Show("确定重置该用户密码?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        String sql = "update patroler t set t.password='" + Utility.MD5Encrypt2("111111") + "' where t.dbid=" + dbid;
                        OracleUtils.ExecuteNonQuery(OracleUtils.ConnectionString, CommandType.Text, sql);
                        LoadData();
                        MessageBox.Show("人员密码已重置为111111", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("人员密码重置失败:" + ex.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }


    }
}