在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → B系列考勤管理工具源码下载

B系列考勤管理工具源码下载

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:1.15M
  • 下载次数:127
  • 浏览次数:731
  • 发布时间:2016-05-13
  • 实例类别:C#语言基础
  • 发 布 人:slt831121
  • 文件格式:.rar
  • 所需积分:0
 相关标签:

实例介绍

【实例简介】

【实例截图】

【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using System.Collections;
using System.Xml;
using Pally;

namespace BSeriesData
{
    //系统主菜单FormMain

    public partial class FormMain : Form
    {

        Connection.Sqlslt SqSlt = new BSeriesData.Connection.Sqlslt();//声明Sql 通用类
        Connection.PublicClass PbCls = new BSeriesData.Connection.PublicClass();//声明全部变量 通用类
       
        Pally.oTerminal myTerminal = new Pally.oTerminal();//通过引用Pally内库,声明连接类myTerminal

        public string Cardover;//判断后的卡号
        public string Userover;//查询后的人员编号

        public FormMain()
        {
            InitializeComponent();
        }

        /// <summary>
        ///打开系统参数配置面板
        /// </summary>
        /// <returns></returns>
        private void 文件FToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }

            FormParameter fpm = new FormParameter();
            fpm.Show();
        }

        /// <summary>
        ///页面加载事件 加载基本数据显示
        /// </summary>
        /// <returns></returns>
        private void FormMain_Load(object sender, EventArgs e)
        {
            try
            {
                //显示机器列表
                vmachineBindingSource.DataSource = SqSlt.SqlGeneral(@"select eaName0, maSty, maType, maIpaddr, maPort,mano from dbo.Vmachine where 
                maType in('FIC-30','FIC-30-A','FIC-10','FID-30') order by maType", "Vmachine", PbCls.SqlData(listBox2)[1].ToString());
                //------------
            }
            catch
            {
                listBox1.Items.Add("数据库连接失败");
                listBox1.Items.Add("可能原因一:数据库参数错误!库名、地址、账号、密码");
                listBox1.Items.Add("可能原因二:表建立不完整"); 
                return; 
            }

            //显示部门列表
            if (XmlBb() == "宝宝在线")
            {
                try
                {
                    BBEpartment();//宝宝在线部门导入
                }
                catch { listBox1.Items.Add("部门导入失败"); return; }

                   BBloadUser();//宝宝在线人员导入
            }

            Epartment();//原版
            //------------

            //开启定时计时器
            TimerDs.Enabled = true;
            Tire.Text = Convert.ToString(DateTime.Now.ToLocalTime().ToString("HH:mm"));
            //------------
        }

        /// <summary>
        ///打开数据LOG查询面板
        /// </summary>
        /// <returns></returns>
        private void smEdit_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }

            FormLog fl = new FormLog();
            fl.Show();
        }

        /// <summary>
        ///退出系统
        /// </summary>
        /// <returns></returns>
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
           Application.Exit();
        }

        /// <summary>
        ///查询人员信息
        /// </summary>
        /// <returns></returns>
        private void button1_Click(object sender, EventArgs e)
        {
            if (UserSltTX.Text != "")
            {
                //查询人员信息
                vpersonalBindingSource.DataSource = SqSlt.SqlGeneral(@"select emname,emworkno,emsex,emzw,emBirthDay,emtel,emcard,emkxh,per_id from Vpersonal where _emstate='正常' and _emfk='已发卡' and
                   (emname='"   UserSltTX.Text.Trim()   "' or emworkno='"   UserSltTX.Text.Trim()   "')", "Vpersonal", PbCls.SqlData(listBox2)[1].ToString());
            }
            else
            {
                MessageBox.Show("查询内容不能为空");
            }
        }

        /// <summary>
        ///点选部门显示人员信息
        /// </summary>
        /// <returns></returns>
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            //获取部门编号
            DataSet DeptNo = SqSlt.SqlGeneral("select deptno,depttel from dept where dept.deptname='"   treeView1.SelectedNode.Text   "'", "dept", PbCls.SqlData(listBox2)[1].ToString());
            //--------------
            
            //显示所选部门下的人员信息
            int    DeptNoLeng = DeptNo.Tables["dept"].Rows[0]["deptno"].ToString().Length;//获取部门长度
            string DeptNoId = DeptNo.Tables["dept"].Rows[0]["deptno"].ToString();//获取部门编号
            string DeptNoTl = DeptNo.Tables["dept"].Rows[0]["depttel"].ToString();//获取部门字段depttel(个别定制用户用)

            //显示表格
            vpersonalBindingSource.DataSource = SqSlt.SqlGeneral(@"select emname,emworkno,emsex,emzw,emBirthDay,emtel,emcard,emkxh,per_id from Vpersonal
            where _emstate='正常' and _emfk='已发卡' and substring(Vpersonal.deptno,1,"   DeptNoLeng   ")=substring('"   DeptNoId   "',1,"   DeptNoLeng   ") or deptno='"   DeptNoTl   "'", "Vpersonal", PbCls.SqlData(listBox2)[1].ToString());
            //--------------
        }

        /// <summary>
        ///机器列表全选
        /// </summary>
        /// <returns></returns>
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView1.RowCount; i  )
            {
                //给所有行赋值为勾选状态
                DataGridViewCheckBoxCell checkBox = (DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0];
                checkBox.Value = 1;
            }
        }

        /// <summary>
        ///机器列表反选
        /// </summary>
        /// <returns></returns>
        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView1.RowCount; i  )
            {
                //给所有行赋值为勾选状态
                DataGridViewCheckBoxCell checkBox = (DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0];
                checkBox.Value = 0;
            }
        }

        /// <summary>
        ///人员列表全选
        /// </summary>
        /// <returns></returns>
        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView2.RowCount; i  )
            {
                //给所有行赋值为勾选状态
                DataGridViewCheckBoxCell checkBox = (DataGridViewCheckBoxCell)this.dataGridView2.Rows[i].Cells[0];
                checkBox.Value = 1;
            }
        }

        /// <summary>
        ///人员列表反选
        /// </summary>
        /// <returns></returns>
        private void toolStripMenuItem4_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView2.RowCount; i  )
            {
                //给所有行赋值为勾选状态
                DataGridViewCheckBoxCell checkBox = (DataGridViewCheckBoxCell)this.dataGridView2.Rows[i].Cells[0];
                checkBox.Value = 0;
            }
        }

        /// <summary>
        ///人员下传
        /// </summary>
        /// <returns></returns>
        private void sbStart_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }

            if (XmlBb() == "宝宝在线")
            {
                BBloadUser();//宝宝在线人员导入
            }

            sbStart.Enabled = false;//暂时停用人员下传按钮
            listBox1.Items.Clear();

            for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
            {
                string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();
                if (ReValue == "True")//判断是否机器被选中
                {
                    myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                    myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                    myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号
                    string VcClass = dataGridView1.Rows[i].Cells[4].Value.ToString();//机器型号
                    string VcAddress=dataGridView1.Rows[i].Cells[5].Value.ToString();//机器安装地址
                    string VcTerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString();//机器编号-日志表用
                    string VcZy = dataGridView1.Rows[i].Cells[6].Value.ToString();//机器作用(宝宝在线)

                    if (myTerminal.isAlive() == true)//判断连接是否成功
                    {
                        ProgressBar.Maximum = UserSum();//获取被勾选人员总数 赋值给计数器
                        
                        int UserCont_Yse=0;//成功人数计数
                        int UserCont_No=0;//失败人数计数

                        if (XmlBb() == "宝宝在线" && dataGridView2.RowCount==0)
                        {
                            //显示表格
                            vpersonalBindingSource.DataSource = SqSlt.SqlGeneral(@"select emname,emworkno,emsex,emzw,emBirthDay,emtel,emcard,emkxh,per_id from Vpersonal
                             where deptno='"   VcZy   "'", "Vpersonal", PbCls.SqlData(listBox2)[1].ToString());
                            //--------------
                            for (int ic = 0; ic < dataGridView2.RowCount; ic  )
                            {
                                //给所有行赋值为勾选状态
                                DataGridViewCheckBoxCell checkBox = (DataGridViewCheckBoxCell)this.dataGridView2.Rows[ic].Cells[0];
                                checkBox.Value = 1;
                            }
                            ProgressBar.Maximum = dataGridView2.RowCount;//获取总数

                        }

                        for (int i1 = 0; i1 < dataGridView2.RowCount; i1  )//二级循环,循环人员列表
                        {
                            string UsValue = dataGridView2.Rows[i1].Cells[0].EditedFormattedValue.ToString();
                            if (UsValue == "True")//判断人员是否被选中
                            {
                                string VpName = dataGridView2.Rows[i1].Cells[1].Value.ToString();//姓名
                                string VpWork = dataGridView2.Rows[i1].Cells[2].Value.ToString();//工号
                                string VpCard = dataGridView2.Rows[i1].Cells[7].Value.ToString();//卡号
                                string VpKxh = dataGridView2.Rows[i1].Cells[8].Value.ToString();//卡序号
                                if (VpKxh.Length == 8)//卡序号长度为8才进行位数颠倒
                                {
                                    VpKxh = VpKxh.Substring(6, 2)   VpKxh.Substring(4, 2)   VpKxh.Substring(2, 2)   VpKxh.Substring(0, 2);
                                }
                                string VpPerId = dataGridView2.Rows[i1].Cells[9].Value.ToString();//唯一编号

                                try
                                {
                                    string XCls= UserCardType(VpCard, VpKxh)[1].ToString();//卡类型

                                    if (XCls == "4-ID" && VcClass == "FID-30")//判断下发卡号是否为4字节(ID卡)
                                    {
                                        //下发ID卡 4字节
                                        myTerminal.RegUserData(UserCardType(VpCard, VpKxh)[0].ToString(), true, 1, 01, VpName, VpWork, 1, true, 4, "00:00", "00:00", "",
                                        4, false, System.DateTime.Now, System.DateTime.Now, "", 0, 352, null);
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_Yse = UserCont_Yse   1;//计算 1
                                    }
                                    else if (XCls == "4-IC" && VcClass == "FIC-30")//判断下发卡号是否为4字节(IC卡)
                                    {
                                        //下发IC卡 4字节
                                        myTerminal.RegUserData(Convert.ToInt64(UserCardType(VpCard, VpKxh)[0].ToString(), 16).ToString(), true, 1, 01, VpName, VpWork, 1, true, 4, "00:00", "00:00", "",
                                        4, false, System.DateTime.Now, System.DateTime.Now, "", 0, 352, null);
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_Yse = UserCont_Yse   1;//计算 1
                                    }
                                    else if (XCls == "7" && (VcClass == "FIC-10" || VcClass == "FIC-30-A"))//判断下发卡号是否为7字节
                                    {
                                        //下发手机卡 7字节
                                        myTerminal.RegUserData(VpPerId, true, 1, 01, VpName, UserCardType(VpCard, VpKxh)[0].ToString(), 1, true, 4, "00:00", "00:00", "",
                                       4, false, System.DateTime.Now, System.DateTime.Now, "", 0, 352, null);
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_Yse = UserCont_Yse   1;//计算 1
                                    }
                                    else
                                    {
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_No = UserCont_No   1;//计算 1
                                        try
                                        {
                                            string StrcRy = System.DateTime.Now.ToShortDateString();
                                            string StrcSf = System.DateTime.Now.ToLongTimeString();
                                            StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                            StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                            string LogDtm = StrcRy   " "   StrcSf   ".000";
                                            string LogCl = VpName   "卡号下传不匹配";

                                            SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('"   VpKxh   "','"   LogDtm   "','"   VcTerminalID   "','"   LogCl   "','下传人员')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());
                                        }
                                        catch
                                        {
                                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "记录日志写入失败");
                                            listBox1.Items.Add("");
                                        }

                                    }

                                    //写入下传人员备份文本
                                    string StrcRyc = System.DateTime.Now.ToShortDateString();
                                    string StrcSfc = System.DateTime.Now.ToLongTimeString();
                                    StrcRyc = DateTime.Parse(StrcRyc).ToString("yyyyMMdd");
                                    StrcSfc = DateTime.Parse(StrcSfc).ToString("HHmm");
                                    string LogDtmc = StrcRyc   StrcSfc;
                                    StreamWriter TxtServer = new StreamWriter(Application.StartupPath   "\\DowLod"   StrcRyc   ".txt", true, Encoding.GetEncoding("GB2312"));
                                    TxtServer.WriteLine("卡号:"   UserCardType(VpCard, VpKxh)[0].ToString()   " 姓名:"   VpName   " 传入时间"   StrcRyc   StrcSfc);
                                    TxtServer.Close();

                                }
                                catch
                                {
                                    ProgressBar.PerformStep();//计数器开始计算
                                    UserCont_No = UserCont_No   1;//计算 1

                                    //写入日志 操作日志表
                                    try
                                    {
                                        string StrcRy = System.DateTime.Now.ToShortDateString();
                                        string StrcSf = System.DateTime.Now.ToLongTimeString();
                                        StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                        StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                        string LogDtm = StrcRy   " "   StrcSf   ".000";
                                        string LogCl = VpName   "人员下传失败";

                                        SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('"   VpKxh   "','"   LogDtm   "','"   VcTerminalID   "','"   LogCl   "','下传人员')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());
                                    }
                                    catch
                                    {
                                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "记录日志写入失败");
                                        listBox1.Items.Add("");
                                    }

                                }

                                if (ProgressBar.Value == ProgressBar.Maximum)
                                {
                                    //下载详细信息显示
                                    listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                                    listBox1.Items.Add("安装地址:"   VcAddress);
                                    listBox1.Items.Add("连接状态:"   "已连接");
                                    listBox1.Items.Add("应下发人员总数:"   ProgressBar.Maximum.ToString()   "人");
                                    listBox1.Items.Add("成功总数:"   UserCont_Yse.ToString()   "人");
                                    listBox1.Items.Add("失败总数:"   UserCont_No.ToString()   "人");
                                    listBox1.Items.Add("");
                                    ProgressBar.Value = 0;
                                    //-----------------

                                    //写入日志 操作日志表
                                    try
                                    {
                                        string StrcRy = System.DateTime.Now.ToShortDateString();
                                        string StrcSf = System.DateTime.Now.ToLongTimeString();
                                        StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                        StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                        string LogDtm = StrcRy   " "   StrcSf   ".000";
                                        string LogMesg = "应下发人员总数:"   ProgressBar.Maximum.ToString()   "人 "   "成功总数:"   UserCont_Yse.ToString()   "人 "
                                          "失败总数:"   UserCont_No.ToString()   "人";

                                        SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                                    }
                                    catch
                                    {
                                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID "日志写入失败");
                                        listBox1.Items.Add("");
                                    }
                                }
                               
                            }
                        }
                        if (UserSum() == 0)
                        {
                            //下载详细信息显示
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("连接状态:"   "已连接");
                            listBox1.Items.Add("应下发人员总数:0人");
                            listBox1.Items.Add("成功总数:0人");
                            listBox1.Items.Add("失败总数:0人");
                            listBox1.Items.Add("");
                            ProgressBar.Value = 0;
                            //-----------------
                        }
                    }
                    else
                    {
                        //下载详细信息显示
                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                        listBox1.Items.Add("安装地址:"   VcAddress);
                        listBox1.Items.Add("连接状态:"   "连接失败");
                        listBox1.Items.Add("应下发人员总数:"   ProgressBar.Maximum.ToString()   "人");
                        listBox1.Items.Add("成功总数:0人");
                        listBox1.Items.Add("失败总数:"   ProgressBar.Maximum.ToString()   "人");
                        listBox1.Items.Add("");
                        ProgressBar.Value = 0;
                        //-----------------

                        //写入日志 操作日志表
                        try
                        {
                            string StrcRy = System.DateTime.Now.ToShortDateString();
                            string StrcSf = System.DateTime.Now.ToLongTimeString();
                            StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                            StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                            string LogDtm = StrcRy   " "   StrcSf   ".000";
                            string LogMesg = "应下发人员总数:"   ProgressBar.Maximum.ToString()   "人 "   "成功总数:0人 "
                              "失败总数:"   ProgressBar.Maximum.ToString()   "人";

                            SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                        }
                        catch
                        {
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "日志写入失败");
                            listBox1.Items.Add("");
                        }
                    }             
                }
            }
            sbStart.Enabled = true;//恢复人员下传按钮
        }

        //-----------------------------------各类方法--------------------------------------//
        /// <summary>
        ///显示部门树 支持7级
        /// </summary>
        /// <returns></returns>
        public void Epartment()
        {
            TreeNode th = new TreeNode();
            th.Text = SqSlt.SqlGeneral("select deptid,deptno,deptname from dept where len(deptno)=2", "dept", PbCls.SqlData(listBox2)[1].ToString()).Tables["dept"].Rows[0][2].ToString();
            treeView1.Nodes.Add(th);
            treeView1.Nodes[0].Expand();


            DataSet kl1 = SqSlt.SqlGeneral("select deptid,deptno,deptname from dept where len(deptno)=4", "dept", PbCls.SqlData(listBox2)[1].ToString());//4
            DataSet kl2 = SqSlt.SqlGeneral("select deptid,deptno,deptname from dept where len(deptno)=6", "dept", PbCls.SqlData(listBox2)[1].ToString());//6
            DataSet kl3 = SqSlt.SqlGeneral("select deptid,deptno,deptname from dept where len(deptno)=8", "dept", PbCls.SqlData(listBox2)[1].ToString());//8
            DataSet kl4 = SqSlt.SqlGeneral("select deptid,deptno,deptname from dept where len(deptno)=10", "dept", PbCls.SqlData(listBox2)[1].ToString());//10
            DataSet kl5 = SqSlt.SqlGeneral("select deptid,deptno,deptname from dept where len(deptno)=12", "dept", PbCls.SqlData(listBox2)[1].ToString());//12

            for (int i1 = 0; i1 < kl1.Tables["dept"].Rows.Count; i1  )//循环第二级总数
            {
                TreeNode th1 = new TreeNode();
                th1.Text = kl1.Tables["dept"].Rows[i1][2].ToString();//获取二级数据
                treeView1.Nodes[0].Nodes.Add(th1);//二级节点填充完毕
                treeView1.Nodes[0].Expand();
            }

            for (int i2 = 0; i2 < kl2.Tables["dept"].Rows.Count; i2  )//循环第三级总数
            {
                TreeNode th2 = new TreeNode();
                th2.Text = kl2.Tables["dept"].Rows[i2][2].ToString();//获取三级数

                for (int i2_2 = 0; i2_2 < treeView1.Nodes[0].Nodes.Count; i2_2  )//循环填充
                {
                    if (treeView1.Nodes[0].Nodes[i2_2].Text == SqSlt.SqlGeneral(@"select deptid,deptno,deptname from dept where deptno="   kl2.Tables["dept"].Rows[i2][1].ToString().Substring(0, 4)   "",
                        "dept", PbCls.SqlData(listBox2)[1].ToString()).Tables["dept"].Rows[0][2].ToString())
                    {
                        treeView1.Nodes[0].Nodes[i2_2].Nodes.Add(th2);//填充三级
                    }
                }
            }

            for (int i3 = 0; i3 < kl3.Tables["dept"].Rows.Count; i3  )//循环四级总数
            {
                TreeNode th3 = new TreeNode();
                th3.Text = kl3.Tables["dept"].Rows[i3][2].ToString();//获取四级数据

                for (int i3_2 = 0; i3_2 < treeView1.Nodes[0].Nodes.Count; i3_2  )//循环填充
                {
                    for (int i3_2_1 = 0; i3_2_1 < treeView1.Nodes[0].Nodes[i3_2].Nodes.Count; i3_2_1  )
                    {
                        if ((treeView1.Nodes[0].Nodes[i3_2].Nodes[i3_2_1].Text == SqSlt.SqlGeneral(@"select deptid,deptno,deptname from dept where deptno="   kl3.Tables["dept"].Rows[i3][1].ToString().Substring(0, 6)   "",
                            "dept", PbCls.SqlData(listBox2)[1].ToString()).Tables["dept"].Rows[0][2].ToString()))
                        {
                            treeView1.Nodes[0].Nodes[i3_2].Nodes[i3_2_1].Nodes.Add(th3);//填充四级
                        }
                    }
                }
            }

            for (int i4 = 0; i4 < kl4.Tables["dept"].Rows.Count; i4  )//循环五级总数
            {
                TreeNode th4 = new TreeNode();
                th4.Text = kl4.Tables["dept"].Rows[i4][2].ToString();//获取五级数据

                for (int i4_2 = 0; i4_2 < treeView1.Nodes[0].Nodes.Count; i4_2  )//循环填充
                {
                    for (int i4_2_1 = 0; i4_2_1 < treeView1.Nodes[0].Nodes[i4_2].Nodes.Count; i4_2_1  )
                    {
                        for (int i4_2_1_1 = 0; i4_2_1_1 < treeView1.Nodes[0].Nodes[i4_2].Nodes[i4_2_1].Nodes.Count; i4_2_1_1  )
                        {
                            if ((treeView1.Nodes[0].Nodes[i4_2].Nodes[i4_2_1].Nodes[i4_2_1_1].Text == SqSlt.SqlGeneral(@"select deptid,deptno,deptname from dept where deptno="   kl4.Tables["dept"].Rows[i4][1].ToString().Substring(0, 8)   "",
                                "dept", PbCls.SqlData(listBox2)[1].ToString()).Tables["dept"].Rows[0][2].ToString()))
                            {
                                treeView1.Nodes[0].Nodes[i4_2].Nodes[i4_2_1].Nodes[i4_2_1_1].Nodes.Add(th4);//填充五级
                            }
                        }
                    }
                }
            }
        }

        /// <summary>
        /// 定制厂家宝宝在线部门导入
        /// </summary>
        /// <returns></returns>
        public void BBEpartment()
        {
            DataSet BmSum = SqSlt.SqlGeneral("select masty,eaname0 from Vmachine", "Vmachine", PbCls.SqlData(listBox2)[1].ToString());//获取定制部门列表
            DataSet YktBmSum = SqSlt.SqlGeneral("select max(deptno) 1 from dept", "dept", PbCls.SqlData(listBox2)[1].ToString());//获取一卡通部门列表最大节点

            string JdMax = YktBmSum.Tables["dept"].Rows[0][0].ToString();//获取部门最大编号

            for (int i1 = 0; i1 < BmSum.Tables["Vmachine"].Rows.Count; i1  )//循环定制部门总数
            {
                string BBbx = BmSum.Tables["Vmachine"].Rows[i1]["masty"].ToString();
                if (SqSlt.SqlIfData(@"select deptname from dept where deptname='"   BmSum.Tables["Vmachine"].Rows[i1]["eaname0"].ToString()   "'"
                    , "dept", PbCls.SqlData(listBox2)[1].ToString()) == true)
                {
                    if (JdMax == "11")
                    {

                        SqSlt.SqlOperation(@"insert dept(deptno,deptname,depttel) 
                                    values('1001','"   BmSum.Tables["Vmachine"].Rows[i1]["eaname0"].ToString()   "','"   BBbx   "')", "dept", PbCls.SqlData(listBox2)[1].ToString());
                    }
                    else
                    {
                        SqSlt.SqlOperation(@"insert dept(deptno,deptname,depttel) 
                                    values('"   JdMax   "','"   BmSum.Tables["Vmachine"].Rows[i1]["eaname0"].ToString()   "','"   BBbx   "')", "dept", PbCls.SqlData(listBox2)[1].ToString());
                    }
                }
            }
        }

        /// <summary>
        /// 定制厂家宝宝在线人员导入
        /// </summary>
        /// <returns></returns>
        public void BBloadUser()
        {
            DataSet BBh = SqSlt.SqlGeneral("select masty from Vmachine", "Vmachine", PbCls.SqlData(listBox2)[1].ToString());//获取机器列表中幼儿园列表
            for (int i = 0; i < BBh.Tables["Vmachine"].Rows.Count; i  )//循环学校列表 一级
            {
                string BBxh = BBh.Tables["Vmachine"].Rows[i]["masty"].ToString();

                DataSet BBuserSlt = SqSlt.SqlGeneral(@"exec pOrganListCardSerialNameBySchool 
                @SchoolNo='"   BBxh   "',@CardCounter=1", "pOrganListCardSerialNameBySchool", PbCls.SqlData(listBox2)[1].ToString());//获取人员信息
                
                for (int i1 = 0; i1 < BBuserSlt.Tables["pOrganListCardSerialNameBySchool"].Rows.Count; i1  )//循环获取到人员列表 二级
                {
                    string BBvname= BBuserSlt.Tables["pOrganListCardSerialNameBySchool"].Rows[i1][2].ToString();//宝宝姓名
                    string BBvcard=  BBuserSlt.Tables["pOrganListCardSerialNameBySchool"].Rows[i1][1].ToString();//宝宝卡号 99开头

                    if (SqSlt.SqlIfData(@"select emname from Vpersonal where 
                        emname='"  BBvname   "' and emcard='"   BBvcard   "'"
                   , "Vpersonal", PbCls.SqlData(listBox2)[1].ToString()) == true)//判断是否重复
                    {
                        SqSlt.SqlOperation(@"insert Vpersonal(emname,emworkno,emsex,emzw,emcard,emkxh,_emstate,_emfk,deptno,emCode) 
                             values('"   BBvname   "','"   BBvcard   "','无','宝宝','"   BBvcard   "','AAAAAAAA','正常','已发卡','"   BBxh   "','"   BBvcard   "')", "Vpersonal", PbCls.SqlData(listBox2)[1].ToString());//写入人员

                        //写入导入人员备份文本
                        string StrcRy = System.DateTime.Now.ToShortDateString();
                        string StrcSf = System.DateTime.Now.ToLongTimeString();
                        StrcRy = DateTime.Parse(StrcRy).ToString("yyyyMMdd");
                        StrcSf = DateTime.Parse(StrcSf).ToString("HHmm");
                        string LogDtm = StrcRy   StrcSf;
                        StreamWriter TxtServer = new StreamWriter(Application.StartupPath   "\\UserLoad"   StrcRy   ".txt", true, Encoding.GetEncoding("GB2312"));
                        TxtServer.WriteLine("卡号:"   BBvcard   " 姓名:"   BBvname   " 导入时间"   StrcRy   StrcSf);
                        TxtServer.Close();
                    }
                }          
            } 
        }
   
        /// <summary>
        /// 返回(四字节 或 七字节)与实际卡号
        /// </summary>
        /// <param name="EmCard">卡号</param>
        /// <param name="EmKxh">卡序号</param>
        /// <returns></returns>
        public string[] UserCardType(string EmCard,string EmKxh)
        {
            //声明数组返回值
            string[] General = new string[2];

            if (EmKxh.Length == 16 && EmKxh.Substring(0, 8) == "00000000")//判断是否为ID卡(机器卡号位置)
            {
                General[0] = EmCard;//卡号
                General[1] = "4-ID";//字节
            }

            if (EmKxh.Length == 8 && EmCard.Length !=14)//判断是否为IC卡(4字节 机器卡号位置)
            {
                General[0] = EmKxh;//卡号
                General[1] = "4-IC";//字节
            }

            if (EmKxh.Length == 8 && EmCard.Length == 14 && EmCard.Substring(0, 2) == "99")//判断IC是否十区加密(7字节 机器工号位置)
            {
                General[0] = EmCard;//卡号
                General[1] = "7";//字节
            }

            if (EmKxh.Length == 16 && EmCard.Substring(0, 2) == "88")//判断是否为手机卡 7字节(工号位置)
            {
                General[0] = EmKxh.Substring(2,14);//卡号
                General[1] = "7";//字节
            }
            return General;
        }

        /// <summary>
        /// 返回 当前被勾选下载人员总数量
        /// </summary>
        /// <returns></returns>
        public int UserSum()
        {
            int Sm = 0;//计数

            for (int i1 = 0; i1 < dataGridView2.RowCount; i1  )//二级循环,循环人员列表
            {
                string UsValue = dataGridView2.Rows[i1].Cells[0].EditedFormattedValue.ToString();
                if (UsValue == "True")//判断人员是否被选中
                {
                    Sm = Sm   1;
                }
            }
            return Sm;
        }


        /// <summary>
        /// 返回 刷卡数据
        /// </summary>
        /// <param name="VcType">机器型号</param>
        /// <returns></returns>
        //public string[] DataAnalysis(string VcType)
        //{      
        //    //声明数组返回值
        //    string[] General = new string[4];

        //    if (VcType == "FID-30")
        //    { 
              
            
        //    }
        
        //}


        /// <summary>
        /// 删除人员信息
        /// </summary>
        /// <returns></returns>
        private void UserDelte_Click_1(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }

            if (MessageBox.Show("确认删除机器中指定人员信息么?", "删除人员信息提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                listBox1.Items.Clear();
                UserDelte.Enabled = false;//暂时停用人员删除按钮

                for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
                {
                    string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();
                    if (ReValue == "True")//判断是否机器被选中
                    {
                        myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                        myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                        myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号
                        string VcClass = dataGridView1.Rows[i].Cells[4].Value.ToString();//机器型号
                        string VcAddress = dataGridView1.Rows[i].Cells[5].Value.ToString();//机器安装地址
                        string VcTerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString();//机器编号-日志表用

                        if (myTerminal.isAlive() == true)//判断连接是否成功
                        {
                            ProgressBar.Maximum = UserSum();//获取被勾选人员总数 赋值给计数器

                            int UserCont_Yse = 0;//成功人数计数
                            int UserCont_No = 0;//失败人数计数

                            for (int i1 = 0; i1 < dataGridView2.RowCount; i1  )//二级循环,循环人员列表
                            {
                                string UsValue = dataGridView2.Rows[i1].Cells[0].EditedFormattedValue.ToString();
                                if (UsValue == "True")//判断人员是否被选中
                                {
                                    string VpCard = dataGridView2.Rows[i1].Cells[7].Value.ToString();//卡号
                                    string VpKxh = dataGridView2.Rows[i1].Cells[8].Value.ToString();//卡序号
                                    string VpPerId = dataGridView2.Rows[i1].Cells[9].Value.ToString();//唯一编号
                                    string VpName = dataGridView2.Rows[i1].Cells[1].Value.ToString();//姓名

                                    try
                                    {
                                        if (VcClass == "FIC-10" || VcClass == "FIC-30-A")
                                        {
                                            myTerminal.DeleteUser(VpPerId);//删除指定人员
                                            ProgressBar.PerformStep();//计数器开始计算
                                            UserCont_Yse = UserCont_Yse   1;//计算 1
                                        }
                                        if (VcClass == "FID-30")
                                        {
                                            myTerminal.DeleteUser(VpCard);//删除指定人员
                                            ProgressBar.PerformStep();//计数器开始计算
                                            UserCont_Yse = UserCont_Yse   1;//计算 1
                                        }
                                        if (VcClass == "FIC-30")
                                        {
                                            myTerminal.DeleteUser(Convert.ToInt64(VpKxh, 16).ToString());//删除指定人员
                                            ProgressBar.PerformStep();//计数器开始计算
                                            UserCont_Yse = UserCont_Yse   1;//计算 1
                                        }


                                        //写入删除人员备份文本
                                        string StrcRyc = System.DateTime.Now.ToShortDateString();
                                        string StrcSfc = System.DateTime.Now.ToLongTimeString();
                                        StrcRyc = DateTime.Parse(StrcRyc).ToString("yyyyMMdd");
                                        StrcSfc = DateTime.Parse(StrcSfc).ToString("HHmm");
                                        string LogDtmc = StrcRyc   StrcSfc;
                                        StreamWriter TxtServer = new StreamWriter(Application.StartupPath   "\\DeleteUser"   StrcRyc   ".txt", true, Encoding.GetEncoding("GB2312"));
                                        TxtServer.WriteLine("卡号:"   VpCard   " 姓名:"   VpName   " 删除时间"   StrcRyc   StrcSfc);
                                        TxtServer.Close();
                                    }
                                    catch
                                    {
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_No = UserCont_No   1;//计算 1

                                        //写入日志 操作日志表
                                        try
                                        {
                                            string StrcRy = System.DateTime.Now.ToShortDateString();
                                            string StrcSf = System.DateTime.Now.ToLongTimeString();
                                            StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                            StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                            string LogDtm = StrcRy   " "   StrcSf   ".000";
                                            string LogCl = VpName   "人员删除失败";

                                            SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('"   VpKxh   "','"   LogDtm   "','"   VcTerminalID   "','"   LogCl   "','删除人员')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());
                                        }
                                        catch
                                        {
                                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "记录日志写入失败");
                                            listBox1.Items.Add("");
                                        }
                                    }

                                    if (ProgressBar.Value == ProgressBar.Maximum)
                                    {
                                        //删除详细信息显示
                                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                                        listBox1.Items.Add("安装地址:"   VcAddress);
                                        listBox1.Items.Add("连接状态:"   "已连接");
                                        listBox1.Items.Add("应删除总人数:"   ProgressBar.Maximum.ToString()   "人");
                                        listBox1.Items.Add("成功总数:"   UserCont_Yse.ToString()   "人");
                                        listBox1.Items.Add("失败总数:"   UserCont_No.ToString()   "人");
                                        listBox1.Items.Add("");
                                        ProgressBar.Value = 0;
                                        //-----------------

                                        //写入日志 操作日志表
                                        try
                                        {
                                            string StrcRy = System.DateTime.Now.ToShortDateString();
                                            string StrcSf = System.DateTime.Now.ToLongTimeString();
                                            StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                            StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                            string LogDtm = StrcRy   " "   StrcSf   ".000";
                                            string LogMesg = "应删除总人数:"   ProgressBar.Maximum.ToString()   "人 "   "成功总数:"   UserCont_Yse.ToString()   "人 "
                                              "失败总数:"   UserCont_No.ToString()   "人";

                                            SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                                        }
                                        catch
                                        {
                                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "日志写入失败");
                                            listBox1.Items.Add("");
                                        }
                                    }
                                }
                            }
                            if (UserSum() == 0)
                            {
                                //删除详细信息显示
                                listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                                listBox1.Items.Add("安装地址:"   VcAddress);
                                listBox1.Items.Add("连接状态:"   "已连接");
                                listBox1.Items.Add("应删除总人数:0人");
                                listBox1.Items.Add("成功总数:0人");
                                listBox1.Items.Add("失败总数:0人");
                                listBox1.Items.Add("");
                                ProgressBar.Value = 0;
                                //-----------------
                            }
                        }
                        else
                        {
                            //删除详细信息显示
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("连接状态:"   "连接失败");
                            listBox1.Items.Add("应删除总人数:"   ProgressBar.Maximum.ToString()   "人");
                            listBox1.Items.Add("成功总数:0人");
                            listBox1.Items.Add("失败总数:"   ProgressBar.Maximum.ToString()   "人");
                            listBox1.Items.Add("");
                            ProgressBar.Value = 0;
                            //-----------------


                            //写入日志 操作日志表
                            try
                            {
                                string StrcRy = System.DateTime.Now.ToShortDateString();
                                string StrcSf = System.DateTime.Now.ToLongTimeString();
                                StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                string LogDtm = StrcRy   " "   StrcSf   ".000";
                                string LogMesg = "应删除总人数:"   ProgressBar.Maximum.ToString()   "人 "   "成功总数:0人 "
                                  "失败总数:"   ProgressBar.Maximum.ToString()   "人";

                                SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                            }
                            catch
                            {
                                listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "日志写入失败");
                                listBox1.Items.Add("");
                            }

                        }
                    }
                }

                UserDelte.Enabled = true;//恢复停用人员删除按钮
            }
        }

        /// <summary>
        /// 全部人员删除
        /// </summary>
        /// <returns></returns>
        private void sbSuspend_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }

            if (MessageBox.Show("确认删除机器中所有人员信息么?", "删除人员信息提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                listBox1.Items.Clear();
                sbSuspend.Enabled = false;//暂时停用人员全部删除按钮

                for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
                {
                    string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();
                    if (ReValue == "True")//判断是否机器被选中
                    {
                        myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                        myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                        myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号
                        string VcClass = dataGridView1.Rows[i].Cells[4].Value.ToString();//机器型号
                        string VcAddress = dataGridView1.Rows[i].Cells[5].Value.ToString();//机器安装地址
                        string VcTerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString();//机器编号-日志表用

                        if (myTerminal.isAlive() == true)//判断连接是否成功
                        {
                            string UserMax = myTerminal.QueryCurrentRegUsers().ToString();
                            myTerminal.DeleteAllUsers();//删除所有用户
   
                            //删除详细信息显示
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("连接状态:"   "已连接");
                            listBox1.Items.Add("应删除总人数:"   UserMax   "人");
                            listBox1.Items.Add("成功总数:"   UserMax   "人");
                            listBox1.Items.Add("失败总数:0人");
                            listBox1.Items.Add("");

                            //写入日志 操作日志表
                            try
                            {
                                string StrcRy = System.DateTime.Now.ToShortDateString();
                                string StrcSf = System.DateTime.Now.ToLongTimeString();
                                StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                string LogDtm = StrcRy   " "   StrcSf   ".000";
                                string LogMesg = "应删除总人数:"   UserMax   "人 "   "成功总数:0人 "
                                  "失败总数:0人";

                                SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                            }
                            catch
                            {
                                listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "日志写入失败");
                                listBox1.Items.Add("");
                            }
                        }
                        else
                        {
                            //删除详细信息显示
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("连接状态:"   "失败");
                            listBox1.Items.Add("应删除总人数:0人");
                            listBox1.Items.Add("成功总数:0人");
                            listBox1.Items.Add("失败总数:0人");
                            listBox1.Items.Add("");

                            //写入日志 操作日志表
                            try
                            {
                                string StrcRy = System.DateTime.Now.ToShortDateString();
                                string StrcSf = System.DateTime.Now.ToLongTimeString();
                                StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                string LogDtm = StrcRy   " "   StrcSf   ".000";
                                string LogMesg = "应删除总人数:0人 "   "成功总数:0人 "
                                  "失败总数:0人";

                                SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                            }
                            catch
                            {
                                listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "日志写入失败");
                                listBox1.Items.Add("");
                            }
                        }
                    }
                }
                sbSuspend.Enabled = true;//启用人员全部删除按钮
            }
        }

        /// <summary>
        /// 采集数据
        /// </summary>
        /// <returns></returns>
        private void sbOpen_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }

            listBox1.Items.Clear();
            //sbOpen.Enabled = false;//暂时停用采集数据按钮
            for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
            {
                string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();//选中机器
                string VcTerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString();//机器编号-日志表用
                if (ReValue == "True")//判断是否机器被选中
                {

                    myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                    myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                    myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号
                    string VcClass = dataGridView1.Rows[i].Cells[4].Value.ToString();//机器型号
                    string VcAddress = dataGridView1.Rows[i].Cells[5].Value.ToString();//机器安装地址

                    int UserCont_Yse = 0;//成功采集计数
                    int UserCont_No = 0;//失败采集计数

                    if (myTerminal.isAlive() == true)//判断连接是否成功
                    {
                        try
                        {
                            byte[] reLog = (byte[])myTerminal.RetOldestNoACKLogB();//获取记录总维数
                            string Lg = Convert.ToString(reLog[3], 10);//获取当前机器中记录总数
                            int DataMax = Convert.ToInt32(Lg);

                            if (DataMax == 0) { listBox1.Items.Add("机器编号: "   VcTerminalID   " 无记录可采集"); return; }
                            try
                            {
                                ProgressBar.Maximum = DataMax - 1;//给计数器赋值
                                DateCollection(VcClass, VcTerminalID, reLog); //首次获取一笔
                                UserCont_Yse = UserCont_Yse   1;//计算 1
                            }
                            catch
                            {
                                ProgressBar.Maximum = ProgressBar.Maximum   1;
                                listBox1.Items.Add("机器编号: "   VcTerminalID);
                                listBox1.Items.Add("安装地址:"   VcAddress);
                                listBox1.Items.Add("连接状态:"   "记录获取异常");
                                listBox1.Items.Add("应采集记录总数:" ProgressBar.Maximum "条");
                                listBox1.Items.Add("成功总数:0条");
                                listBox1.Items.Add("失败总数:"   ProgressBar.Maximum   "条");
                                listBox1.Items.Add("");
                                ProgressBar.Value = 0;
                                //写入操作日志
                                try
                                {
                                    //获取人员唯一编号失败, 数据库personal查无此人
                                    string StrcRy = System.DateTime.Now.ToShortDateString();
                                    string StrcSf = System.DateTime.Now.ToLongTimeString();
                                    StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                    StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                    string LogDtm = StrcRy   " "   StrcSf   ".000";
                                    string LogCl = "记录获取异常,记录仍在机器中";

                                    SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('无','"   LogDtm   "','"   VcTerminalID   "','"   LogCl   "','数据采集')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());
                                }
                                catch
                                {
                                    listBox1.Items.Add("机器编号: "   VcTerminalID   "日志写入失败");
                                    listBox1.Items.Add("");
                                }
                            }
                            for (int Mc = 0; Mc < ProgressBar.Maximum; Mc  )//二级循环 循环记录总数并进行采集
                            {
                                byte[] re = (byte[])myTerminal.RetOldestNoACKLogB();//获取记录总维数
                                DateCollection(VcClass, VcTerminalID, re);
                                ProgressBar.PerformStep();//计数器开始计算
                                UserCont_Yse = UserCont_Yse   1;//计算 1
                            }
                        }
                        catch
                        {
                            // 判定机器获取记录失败
                            UserCont_No = UserCont_No   1;//计算 1
                            ProgressBar.PerformStep();//计数器开始计算
                            //写入操作日志
                            try
                            {
                                //获取人员唯一编号失败, 数据库personal查无此人
                                string StrcRy = System.DateTime.Now.ToShortDateString();
                                string StrcSf = System.DateTime.Now.ToLongTimeString();
                                StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                string LogDtm = StrcRy   " "   StrcSf   ".000";
                                string LogCl = "机器获取记录失败,记录仍在机器中";

                                SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('无','"   LogDtm   "','"   VcTerminalID   "','"   LogCl   "','数据采集')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());
                            }
                            catch
                            {
                                listBox1.Items.Add("机器编号: "   VcTerminalID   "日志写入失败");
                                listBox1.Items.Add("");
                            }
                        }
                        if (ProgressBar.Value == ProgressBar.Maximum)
                        {
                            //下载详细信息显示
                            ProgressBar.Maximum = ProgressBar.Maximum   1;
                            listBox1.Items.Add("机器编号: "   VcTerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("连接状态:"   "已连接");
                            listBox1.Items.Add("应采集记录总数:"   ProgressBar.Maximum.ToString()   "条");
                            listBox1.Items.Add("成功总数:"   UserCont_Yse.ToString()   "条");
                            listBox1.Items.Add("失败总数:"   UserCont_No.ToString()   "条");
                            listBox1.Items.Add("");
                            ProgressBar.Value = 0;

                            //写入日志 操作日志表
                            try
                            {
                                string StrcRy = System.DateTime.Now.ToShortDateString();
                                string StrcSf = System.DateTime.Now.ToLongTimeString();
                                StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                string LogDtm = StrcRy   " "   StrcSf   ".000";
                                string LogMesg = "应采集总数:"   ProgressBar.Maximum.ToString()   "条 "   "成功总数:"   UserCont_Yse.ToString()   "条"
                                  "失败总数:"   UserCont_No.ToString()   "条";

                                SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                            }
                            catch
                            {
                                listBox1.Items.Add("机器编号: "   VcTerminalID   "日志写入失败");
                                listBox1.Items.Add("");
                            }
                        }
                    }
                    else
                    {
                        listBox1.Items.Add("机器编号: "   VcTerminalID);
                        listBox1.Items.Add("安装地址:"   VcAddress);
                        listBox1.Items.Add("连接状态:"   "连接失败");
                        listBox1.Items.Add("应采集记录总数:0条");
                        listBox1.Items.Add("成功总数:0条");
                        listBox1.Items.Add("失败总数:0条");
                        listBox1.Items.Add("");
                        ProgressBar.Value = 0;
                    }
                }
            }
            sbOpen.Enabled = true;//开启按钮
        }

        /// <summary>
        /// 获取采集记录写入数据库
        /// </summary>
        /// <param name="JqXh">机器型号</param>
        /// <param name="JqBh">机器编号</param>
        /// <param name="re">维数</param>
        /// <returns></returns>
        public void DateCollection(string JqXh, string JqBh, byte[] re)
        {
            if (JqXh == "FID-30")//取4字节
            {
                byte[] Card_byte = myTerminal.getSectionByte(re, 14, 4);
                uint Card = myTerminal.ByteToUint(Card_byte);//获取10进制卡号 机器卡号位置
                string NewCard = Convert.ToString(Card, 16);//参数1 获取实际16进制卡号
                Cardover = NewCard;
            }
            if (JqXh == "FIC-10" || JqXh == "FIC-30-A")//取7字节
            {
                string K14 = Convert.ToString(Convert.ToInt32(re.GetValue(14).ToString()), 16);//1 -卡号碎片
                if (K14.Length == 1) { K14 = "0"   K14; };
                string K15 = Convert.ToString(Convert.ToInt32(re.GetValue(15).ToString()), 16);//2 -卡号碎片
                if (K15.Length == 1) { K15 = "0"   K15; };
                string K16 = Convert.ToString(Convert.ToInt32(re.GetValue(16).ToString()), 16);//3 -卡号碎片
                if (K16.Length == 1) { K16 = "0"   K16; };
                string K17 = Convert.ToString(Convert.ToInt32(re.GetValue(17).ToString()), 16); ;//4 -卡号碎片
                if (K17.Length == 1) { K17 = "0"   K17; };
                string K18 = Convert.ToString(Convert.ToInt32(re.GetValue(18).ToString()), 16);//5 -卡号碎片
                if (K18.Length == 1) { K18 = "0"   K18; };
                string K19 = Convert.ToString(Convert.ToInt32(re.GetValue(19).ToString()), 16);//6 -卡号碎片
                if (K19.Length == 1) { K19 = "0"   K19; };
                string K20 = Convert.ToString(Convert.ToInt32(re.GetValue(20).ToString()), 16);//7 -卡号碎片
                if (K20.Length == 1) { K20 = "0"   K20; };
                Cardover = K14   K15   K16   K17   K18   K19   K20;   
            }
            if (JqXh == "FIC-30")//取4字节
            {
                byte[] Card_byte = myTerminal.getSectionByte(re, 14, 4);
                uint Card = myTerminal.ByteToUint(Card_byte);//获取10进制卡号 机器卡号位置
                string NewCard = Convert.ToString(Card, 16);//参数1 获取实际16进制卡号
                NewCard = NewCard.Substring(6, 2)   NewCard.Substring(4, 2)   NewCard.Substring(2, 2)   NewCard.Substring(0, 2);//获取实际16进制卡号 调换位置
                Cardover = NewCard;
            }

                int Year = Convert.ToInt32(re.GetValue(9).ToString(), 16);//年
                int Month = Convert.ToInt32(re.GetValue(8).ToString(), 16);//月
                int Date = Convert.ToInt32(re.GetValue(7).ToString(), 16);//日
                int Hour = Convert.ToInt32(re.GetValue(6).ToString(), 16);//时
                int Minute = Convert.ToInt32(re.GetValue(5).ToString(), 16);//分
                int Second = Convert.ToInt32(re.GetValue(4).ToString(), 16);//秒
                string NewDate = "20"   Year.ToString("X02")   "-"   Month.ToString("X02")   "-"   Date.ToString("X02");//获取 刷卡日期
                string NewTime = Hour.ToString("X02")   ":"   Minute.ToString("X02")   ":"   Second.ToString("X02");//获取 刷卡时间
                string NewDateTime = NewDate   " "   NewTime;//获取日期 时间

                //写入考勤记录备份文本
                string StrcRy = System.DateTime.Now.ToShortDateString();
                string StrcSf = System.DateTime.Now.ToLongTimeString();
                StrcRy = DateTime.Parse(StrcRy).ToString("yyyyMMdd");
                StrcSf = DateTime.Parse(StrcSf).ToString("HHmm");
                string LogDtm = StrcRy   StrcSf;
                StreamWriter TxtServer = new StreamWriter(Application.StartupPath   "\\Data"   StrcRy   ".txt", true, Encoding.GetEncoding("GB2312"));
                TxtServer.WriteLine("卡号:"   Cardover   " 刷卡日期时间:"   NewDateTime " 机器编号:" JqBh);
                TxtServer.Close();
                //-----------------------
                try
                {

                    if (JqXh == "FIC-10" || JqXh == "FIC-30-A" || JqXh == "FID-30")
                    {
                        if (Cardover.Substring(0, 2) == "99")
                        {
                            DataSet UserId = SqSlt.SqlGeneral("select emcode from Vpersonal where emcard='"   Cardover   "'", "Vpersonal", PbCls.SqlData(listBox2)[1].ToString());//获取用户唯一编号
                            Userover = UserId.Tables["Vpersonal"].Rows[0]["emcode"].ToString();//将获取到的唯一编号复制给变量
                        }
                        else
                        {
                            DataSet UserId = SqSlt.SqlGeneral("select emcode from Vpersonal where substring(emcard,3,15)='"   Cardover   "'", "Vpersonal", PbCls.SqlData(listBox2)[1].ToString());//获取用户唯一编号
                            Userover = UserId.Tables["Vpersonal"].Rows[0]["emcode"].ToString();//将获取到的唯一编号复制给变量
                        }
                    }
                    else
                    {
                        DataSet UserId = SqSlt.SqlGeneral("select emcode from Vpersonal where emkxh='"   Cardover   "'", "Vpersonal", PbCls.SqlData(listBox2)[1].ToString());//获取用户唯一编号
                        Userover= UserId.Tables["Vpersonal"].Rows[0]["emcode"].ToString();//将获取到的唯一编号复制给变量
                    }

                    //写入考勤数据进入Kqsource表
                    SqSlt.SqlOperation(@"insert kqsource(hrcode,cedate,cetime,cemach) 
                    values('"   Userover   "','"   DateTime.Parse(NewDate).ToString("yyyy-MM-dd")   "','"   NewTime   "','"   JqBh   "')", "kqsource", PbCls.SqlData(listBox2)[1].ToString());
                    listBox1.Items.Add(NewDateTime);
                    if (XmlBb() == "宝宝在线")
                    {
                        SqSlt.SqlOperation(@"insert tFangKaCheckin(fUserCardSerial,fCheckinTime)
                         values('"   Cardover   "','"   NewDateTime   "')", "tFangKaCheckin", PbCls.SqlData(listBox2)[1].ToString());
                    }

                    if (XmlBb() == "方卡原版")
                    {
                        //写入考勤数据进入xfSourceKq表 考勤就餐用
                        SqSlt.SqlOperation(@"insert xfSourceKq(hrCode,kqDt) 
                    values('"   Userover   "','"   NewDateTime   "')", "xfSourceKq", PbCls.SqlData(listBox2)[1].ToString());

                        //定时清除xfSourceKq表 考勤就餐用 2天清一次
                        SqSlt.SqlOperation(@"delete from xfSourceKq where 
                    hrCode='"   Userover   "' and convert(char(10),kqdt,120)<='"   DateTime.Parse(NewDate).AddDays(-2).ToString("yyyy-MM-dd")   "'", "xfSourceKq", PbCls.SqlData(listBox2)[1].ToString());
                    }
                }
                catch
                {
                    //写入操作日志
                    try
                    {
                        //获取人员唯一编号失败, 数据库personal查无此人
                        string StrcRyc = System.DateTime.Now.ToShortDateString();
                        string StrcSfc = System.DateTime.Now.ToLongTimeString();
                        StrcRyc = DateTime.Parse(StrcRyc).ToString("yyyy-MM-dd");
                        StrcSfc = DateTime.Parse(StrcSfc).ToString("HH:mm:ss");
                        string LogDtmc = StrcRyc   " "   StrcSfc   ".000";
                        string LogCl = "未查询到此人";

                        SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('"   Cardover   "','"   LogDtmc   "','"   JqBh   "','"   LogCl   "','数据采集')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());

                        listBox1.Items.Add("卡号:"   Cardover "未查询到关联人员");
                    }
                    catch
                    {
                        listBox1.Items.Add("机器编号: "   JqBh   "日志写入失败11");
                        listBox1.Items.Add("");
                    }
                }
          
        }

        /// <summary>
        /// 考情机咨询
        /// </summary>
        /// <returns></returns>
        private void sbBroadcast_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }

            listBox1.Items.Clear();
            sbBroadcast.Enabled = false;//暂时停用考勤机咨询按钮
            for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
            {
                string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();
                if (ReValue == "True")//判断是否机器被选中
                {
                    myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                    myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                    myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号
                    string VcClass = dataGridView1.Rows[i].Cells[4].Value.ToString();//机器型号
                    string VcAddress = dataGridView1.Rows[i].Cells[5].Value.ToString();//机器安装地址

                    if (myTerminal.isAlive() == true)//判断连接是否成功
                    {
                        //机器咨询信息
                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                        listBox1.Items.Add("安装地址:"   VcAddress);
                        listBox1.Items.Add("连接状态:"   "联机");
                        listBox1.Items.Add("注册用户数量:"   myTerminal.QueryCurrentRegUsers().ToString() "人");
                        listBox1.Items.Add("机器日期时间:"   myTerminal.QueryDateOfTheTerminal().ToString()   "-"   myTerminal.QueryTimeOfTheTerminal());
                        listBox1.Items.Add("");
                    }
                    else
                    {
                        //机器咨询信息
                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                        listBox1.Items.Add("安装地址:"   VcAddress);
                        listBox1.Items.Add("连接状态:"   "脱机");
                        listBox1.Items.Add("注册用户数量:无法获取");
                        listBox1.Items.Add("机器日期时间:无法获取");
                        listBox1.Items.Add("");
                    }
                }
            }
            sbBroadcast.Enabled = true;//启用考勤机咨询按钮
        }

        /// <summary>
        /// 删除数据
        /// </summary>
        /// <returns></returns>
        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }

            if (MessageBox.Show("确认删除机器中所有记录信息么?", "删除记录信息提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                listBox1.Items.Clear();
                toolStripButton2.Enabled = false;//暂时停用删除数据按钮

                for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
                {
                    string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();
                    if (ReValue == "True")//判断是否机器被选中
                    {
                        myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                        myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                        myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号
                        string VcClass = dataGridView1.Rows[i].Cells[4].Value.ToString();//机器型号
                        string VcAddress = dataGridView1.Rows[i].Cells[5].Value.ToString();//机器安装地址

                        if (myTerminal.isAlive() == true)//判断连接是否成功
                        {
                            string UserMax = myTerminal.QueryNumberOfLog().ToString();
                            myTerminal.DeleteAllLog();//删除全部记录
                            //机器咨询信息
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("记录总数:"   UserMax);
                            listBox1.Items.Add("删除结果:成功");
                            listBox1.Items.Add("");
                        }
                        else
                        {
                            //机器咨询信息
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("记录总数:无法获取");
                            listBox1.Items.Add("删除结果:失败");
                            listBox1.Items.Add("");
                        }
                    }
                }
                toolStripButton2.Enabled = true;//启用删除记录按钮
            }
        }

        /// <summary>
        /// 将程序放入托盘
        /// </summary>
        /// <returns></returns>
        private void toolStripButton7_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        /// <summary>
        /// 显示主程序
        /// </summary>
        /// <returns></returns>
        private void toolStripMenuItem5_Click(object sender, EventArgs e)
        {
            this.Show();
        }


        /// <summary>
        /// 实时采集
        /// </summary>
        /// <returns></returns>
        private void sbList_Click(object sender, EventArgs e)
        {
            if (sbList.Text == "开启实时采集")//按钮开关
            {
                sbList.Text = "关闭实时采集";
                sbList.ForeColor = Color.Red;
                TimerSs.Enabled = true;
            }
            else
            {
                listBox1.Items.Clear();
                sbList.Text = "开启实时采集";
                sbList.ForeColor = Color.Black;
                TimerSs.Enabled = false;
            }
        }

        /// <summary>
        /// 实时采集计时器
        /// </summary>
        /// <returns></returns>
        private void TimerSs_Tick(object sender, EventArgs e)
        {
            DatLod();//采集数据
        }
        /// <summary>
        /// 定时采集计时器
        /// </summary>
        /// <returns></returns>
        private void TimerDs_Tick(object sender, EventArgs e)
        {
            //显示时钟
            Tire.Text = Convert.ToString(DateTime.Now.ToLocalTime().ToString("HH:mm"));

            //获取机器人员定时时间、数据采集时间、时间同步间隔信息
            XmlTextReader textReader = new XmlTextReader("SysParameter.xml");
            textReader.Read();
            int i = 0;

            while (textReader.Read())
            {
                textReader.MoveToElement();
                if (textReader.NodeType == XmlNodeType.Text)
                {
                    switch (i)
                    {
                        //判断人员下发12个时间点
                        case 0: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 1: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 2: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 3: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 4: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 5: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 6: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 7: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 8: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 9: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 10: if (textReader.Value == Tire.Text) { UserLod(); }; break;
                        case 11: if (textReader.Value == Tire.Text) { UserLod(); }; break;

                        //显示数据下载12个时间点
                        case 12: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 13: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 14: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 15: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 16: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 17: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 18: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 19: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 20: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 21: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 22: if (textReader.Value == Tire.Text) { DatLod(); }; break;
                        case 23: if (textReader.Value == Tire.Text) { DatLod(); }; break;

                        //显示日期时间间隔
                        case 24: if (textReader.Value == Tire.Text) { TirmLod(); } break;
                    }
                    i  ;
                }
            }
            textReader.Close();
        }

        /// <summary>
        /// 帮助
        /// </summary>
        /// <returns></returns>
        private void smSee_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }
        }


        /// <summary>
        /// 下传人员方法
        /// </summary>
        /// <returns></returns>
        public void UserLod()
        {
            if (XmlBb() == "宝宝在线")
            {
                BBloadUser();//宝宝在线人员导入
            }

            sbStart.Enabled = false;//暂时停用人员下传按钮
            listBox1.Items.Clear();

            for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
            {
                string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();
                if (ReValue == "True")//判断是否机器被选中
                {
                    myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                    myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                    myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号
                    string VcClass = dataGridView1.Rows[i].Cells[4].Value.ToString();//机器型号
                    string VcAddress = dataGridView1.Rows[i].Cells[5].Value.ToString();//机器安装地址
                    string VcTerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString();//机器编号-日志表用
                    string VcZy= dataGridView1.Rows[i].Cells[6].Value.ToString();//机器作用(宝宝在线)

                    if (myTerminal.isAlive() == true)//判断连接是否成功
                    {
                        ProgressBar.Maximum = UserSum();//获取被勾选人员总数 赋值给计数器

                        int UserCont_Yse = 0;//成功人数计数
                        int UserCont_No = 0;//失败人数计数

                        //宝宝在线按学校编号获取人员列表,默认全勾选
                        if (XmlBb() == "宝宝在线" && dataGridView2.RowCount == 0)
                        {
                            //显示表格
                            vpersonalBindingSource.DataSource = SqSlt.SqlGeneral(@"select emname,emworkno,emsex,emzw,emBirthDay,emtel,emcard,emkxh,per_id from Vpersonal
                             where deptno='"   VcZy   "'", "Vpersonal", PbCls.SqlData(listBox2)[1].ToString());
                            //--------------
                            for (int ic = 0; ic < dataGridView2.RowCount; ic  )
                            {
                                //给所有行赋值为勾选状态
                                DataGridViewCheckBoxCell checkBox = (DataGridViewCheckBoxCell)this.dataGridView2.Rows[ic].Cells[0];
                                checkBox.Value = 1;
                            }
                            ProgressBar.Maximum = dataGridView2.RowCount;//获取总数
                        }

                        for (int i1 = 0; i1 < dataGridView2.RowCount; i1  )//二级循环,循环人员列表
                        {
                            string UsValue = dataGridView2.Rows[i1].Cells[0].EditedFormattedValue.ToString();
                            if (UsValue == "True")//判断人员是否被选中
                            {
                                string VpName = dataGridView2.Rows[i1].Cells[1].Value.ToString();//姓名
                                string VpWork = dataGridView2.Rows[i1].Cells[2].Value.ToString();//工号
                                string VpCard = dataGridView2.Rows[i1].Cells[7].Value.ToString();//卡号
                                string VpKxh = dataGridView2.Rows[i1].Cells[8].Value.ToString();//卡序号
                                if (VpKxh.Length == 8)//卡序号长度为8才进行位数颠倒
                                {
                                    VpKxh = VpKxh.Substring(6, 2)   VpKxh.Substring(4, 2)   VpKxh.Substring(2, 2)   VpKxh.Substring(0, 2);
                                }
                                string VpPerId = dataGridView2.Rows[i1].Cells[9].Value.ToString();//唯一编号

                                try
                                {
                                    string XCls = UserCardType(VpCard, VpKxh)[1].ToString();//卡类型

                                    if (XCls == "4-ID" && VcClass == "FID-30")//判断下发卡号是否为4字节(ID卡)
                                    {
                                        //下发ID卡 4字节
                                        myTerminal.RegUserData(UserCardType(VpCard, VpKxh)[0].ToString(), true, 1, 01, VpName, VpWork, 1, true, 4, "00:00", "00:00", "",
                                        4, false, System.DateTime.Now, System.DateTime.Now, "", 0, 352, null);
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_Yse = UserCont_Yse   1;//计算 1
                                    }
                                    else if (XCls == "4-IC" && VcClass == "FIC-30")//判断下发卡号是否为4字节(IC卡)
                                    {
                                        //下发IC卡 4字节
                                        myTerminal.RegUserData(Convert.ToInt64(UserCardType(VpCard, VpKxh)[0].ToString(), 16).ToString(), true, 1, 01, VpName, VpWork, 1, true, 4, "00:00", "00:00", "",
                                        4, false, System.DateTime.Now, System.DateTime.Now, "", 0, 352, null);
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_Yse = UserCont_Yse   1;//计算 1
                                    }
                                    else if (XCls == "7" && (VcClass == "FIC-10" || VcClass == "FIC-30-A"))//判断下发卡号是否为7字节
                                    {
                                        //下发手机卡 7字节
                                        myTerminal.RegUserData(VpPerId, true, 1, 01, VpName, UserCardType(VpCard, VpKxh)[0].ToString(), 1, true, 4, "00:00", "00:00", "",
                                       4, false, System.DateTime.Now, System.DateTime.Now, "", 0, 352, null);
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_Yse = UserCont_Yse   1;//计算 1
                                    }
                                    else
                                    {
                                        ProgressBar.PerformStep();//计数器开始计算
                                        UserCont_No = UserCont_No   1;//计算 1
                                    }

                                }
                                catch
                                {
                                    ProgressBar.PerformStep();//计数器开始计算
                                    UserCont_No = UserCont_No   1;//计算 1

                                    //写入日志 操作日志表
                                    try
                                    {
                                        string StrcRy = System.DateTime.Now.ToShortDateString();
                                        string StrcSf = System.DateTime.Now.ToLongTimeString();
                                        StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                        StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                        string LogDtm = StrcRy   " "   StrcSf   ".000";
                                        string LogCl = VpName   "人员下传失败";

                                        SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('"   VpKxh   "','"   LogDtm   "','"   VcTerminalID   "','"   LogCl   "','下传人员')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());
                                    }
                                    catch
                                    {
                                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "记录日志写入失败");
                                        listBox1.Items.Add("");
                                    }

                                }

                                if (ProgressBar.Value == ProgressBar.Maximum)
                                {
                                    //下载详细信息显示
                                    listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                                    listBox1.Items.Add("安装地址:"   VcAddress);
                                    listBox1.Items.Add("连接状态:"   "已连接");
                                    listBox1.Items.Add("应下发人员总数:"   ProgressBar.Maximum.ToString()   "人");
                                    listBox1.Items.Add("成功总数:"   UserCont_Yse.ToString()   "人");
                                    listBox1.Items.Add("失败总数:"   UserCont_No.ToString()   "人");
                                    listBox1.Items.Add("");
                                    ProgressBar.Value = 0;
                                    //-----------------

                                    //写入日志 操作日志表
                                    try
                                    {
                                        string StrcRy = System.DateTime.Now.ToShortDateString();
                                        string StrcSf = System.DateTime.Now.ToLongTimeString();
                                        StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                        StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                        string LogDtm = StrcRy   " "   StrcSf   ".000";
                                        string LogMesg = "应下发人员总数:"   ProgressBar.Maximum.ToString()   "人 "   "成功总数:"   UserCont_Yse.ToString()   "人 "
                                          "失败总数:"   UserCont_No.ToString()   "人";

                                        SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                                    }
                                    catch
                                    {
                                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "日志写入失败");
                                        listBox1.Items.Add("");
                                    }
                                }

                            }
                        }
                        if (UserSum() == 0)
                        {
                            //下载详细信息显示
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("连接状态:"   "已连接");
                            listBox1.Items.Add("应下发人员总数:0人");
                            listBox1.Items.Add("成功总数:0人");
                            listBox1.Items.Add("失败总数:0人");
                            listBox1.Items.Add("");
                            ProgressBar.Value = 0;
                            //-----------------
                        }
                    }
                    else
                    {
                        //下载详细信息显示
                        listBox1.Items.Add("机器编号: "   myTerminal.TerminalID);
                        listBox1.Items.Add("安装地址:"   VcAddress);
                        listBox1.Items.Add("连接状态:"   "连接失败");
                        listBox1.Items.Add("应下发人员总数:"   ProgressBar.Maximum.ToString()   "人");
                        listBox1.Items.Add("成功总数:0人");
                        listBox1.Items.Add("失败总数:"   ProgressBar.Maximum.ToString()   "人");
                        listBox1.Items.Add("");
                        ProgressBar.Value = 0;
                        //-----------------

                        //写入日志 操作日志表
                        try
                        {
                            string StrcRy = System.DateTime.Now.ToShortDateString();
                            string StrcSf = System.DateTime.Now.ToLongTimeString();
                            StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                            StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                            string LogDtm = StrcRy   " "   StrcSf   ".000";
                            string LogMesg = "应下发人员总数:"   ProgressBar.Maximum.ToString()   "人 "   "成功总数:0人 "
                              "失败总数:"   ProgressBar.Maximum.ToString()   "人";

                            SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                        }
                        catch
                        {
                            listBox1.Items.Add("机器编号: "   myTerminal.TerminalID   "日志写入失败");
                            listBox1.Items.Add("");
                        }
                    }
                }
            }
            sbStart.Enabled = true;//恢复人员下传按钮
        }

        /// <summary>
        /// 采集数据
        /// </summary>
        /// <returns></returns>
        public void DatLod()
        {
            listBox1.Items.Clear();
            sbOpen.Enabled = false;//暂时停用采集数据按钮
            for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
            {
                string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();//选中机器
                string VcTerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString();//机器编号-日志表用
                if (ReValue == "True")//判断是否机器被选中
                {
                    myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                    myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                    myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号
                    string VcClass = dataGridView1.Rows[i].Cells[4].Value.ToString();//机器型号
                    string VcAddress = dataGridView1.Rows[i].Cells[5].Value.ToString();//机器安装地址

                    int UserCont_Yse = 0;//成功采集计数
                    int UserCont_No = 0;//失败采集计数

                    if (myTerminal.isAlive() == true)//判断连接是否成功
                    {
                        try
                        {
                            byte[] reLog = (byte[])myTerminal.RetOldestNoACKLogB();//获取记录总维数
                            string Lg = Convert.ToString(reLog[3], 10);//获取当前机器中记录总数
                            int DataMax = Convert.ToInt32(Lg);

                            if (DataMax == 0) { listBox1.Items.Add("实时记录采集中......"); return; }
                            try
                            {
                                ProgressBar.Maximum = DataMax - 1;//给计数器赋值
                                DateCollection(VcClass, VcTerminalID, reLog); //首次获取一笔
                                UserCont_Yse = UserCont_Yse   1;//计算 1
                            }
                            catch
                            {
                                ProgressBar.Maximum = ProgressBar.Maximum   1;
                                listBox1.Items.Add("机器编号: "   VcTerminalID);
                                listBox1.Items.Add("安装地址:"   VcAddress);
                                listBox1.Items.Add("连接状态:"   "记录获取异常");
                                listBox1.Items.Add("应采集记录总数:"   ProgressBar.Maximum   "条");
                                listBox1.Items.Add("成功总数:0条");
                                listBox1.Items.Add("失败总数:"   ProgressBar.Maximum   "条");
                                listBox1.Items.Add("");
                                ProgressBar.Value = 0;
                                //写入操作日志
                                try
                                {
                                    //获取人员唯一编号失败, 数据库personal查无此人
                                    string StrcRy = System.DateTime.Now.ToShortDateString();
                                    string StrcSf = System.DateTime.Now.ToLongTimeString();
                                    StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                    StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                    string LogDtm = StrcRy   " "   StrcSf   ".000";
                                    string LogCl = "记录获取异常,记录仍在机器中";

                                    SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('无','"   LogDtm   "','"   VcTerminalID   "','"   LogCl   "','数据采集')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());
                                }
                                catch
                                {
                                    listBox1.Items.Add("机器编号: "   VcTerminalID   "日志写入失败");
                                    listBox1.Items.Add("");
                                }
                                return;
                            }
                            for (int Mc = 0; Mc < ProgressBar.Maximum; Mc  )//二级循环 循环记录总数并进行采集
                            {
                                byte[] re = (byte[])myTerminal.RetOldestNoACKLogB();//获取记录总维数
                                DateCollection(VcClass, VcTerminalID, re);
                                ProgressBar.PerformStep();//计数器开始计算
                                UserCont_Yse = UserCont_Yse   1;//计算 1
                            }
                        }
                        catch
                        {
                            // 判定机器获取记录失败
                            UserCont_No = UserCont_No   1;//计算 1
                            ProgressBar.PerformStep();//计数器开始计算
                            //写入操作日志
                            try
                            {
                                //获取人员唯一编号失败, 数据库personal查无此人
                                string StrcRy = System.DateTime.Now.ToShortDateString();
                                string StrcSf = System.DateTime.Now.ToLongTimeString();
                                StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                string LogDtm = StrcRy   " "   StrcSf   ".000";
                                string LogCl = "机器获取记录失败,记录仍在机器中";

                                SqSlt.SqlOperation(@"insert JqJlLog(JqJlLog_Card,JqCZLog_datetime,JqCZLog_machi,JqCZLog_zt,JqCZLog_class) 
                                    values('无','"   LogDtm   "','"   VcTerminalID   "','"   LogCl   "','数据采集')", "JqJlLog", PbCls.SqlData(listBox2)[1].ToString());
                            }
                            catch
                            {
                                listBox1.Items.Add("机器编号: "   VcTerminalID   "日志写入失败");
                                listBox1.Items.Add("");
                            }
                        }
                        if (ProgressBar.Value == ProgressBar.Maximum)
                        {
                            //下载详细信息显示
                            ProgressBar.Maximum = ProgressBar.Maximum   1;
                            listBox1.Items.Add("机器编号: "   VcTerminalID);
                            listBox1.Items.Add("安装地址:"   VcAddress);
                            listBox1.Items.Add("连接状态:"   "已连接");
                            listBox1.Items.Add("应采集记录总数:"   ProgressBar.Maximum.ToString()   "条");
                            listBox1.Items.Add("成功总数:"   UserCont_Yse.ToString()   "条");
                            listBox1.Items.Add("失败总数:"   UserCont_No.ToString()   "条");
                            listBox1.Items.Add("");
                            ProgressBar.Value = 0;

                            //写入日志 操作日志表
                            try
                            {
                                string StrcRy = System.DateTime.Now.ToShortDateString();
                                string StrcSf = System.DateTime.Now.ToLongTimeString();
                                StrcRy = DateTime.Parse(StrcRy).ToString("yyyy-MM-dd");
                                StrcSf = DateTime.Parse(StrcSf).ToString("HH:mm:ss");
                                string LogDtm = StrcRy   " "   StrcSf   ".000";
                                string LogMesg = "应采集总数:"   ProgressBar.Maximum.ToString()   "条 "   "成功总数:"   UserCont_Yse.ToString()   "条"
                                  "失败总数:"   UserCont_No.ToString()   "条";

                                SqSlt.SqlOperation(@"insert JqCZLog(JqCZLog_Jqh,JqCZLog_datetime,JqCZLog_mesg) 
                                    values('"   VcTerminalID   "','"   LogDtm   "','"   LogMesg   "')", "JqCZLog", PbCls.SqlData(listBox2)[1].ToString());
                            }
                            catch
                            {
                                listBox1.Items.Add("机器编号: "   VcTerminalID   "日志写入失败");
                                listBox1.Items.Add("");
                            }
                        }
                    }
                    else
                    {
                        listBox1.Items.Add("机器编号: "   VcTerminalID);
                        listBox1.Items.Add("安装地址:"   VcAddress);
                        listBox1.Items.Add("连接状态:"   "连接失败");
                        listBox1.Items.Add("应采集记录总数:0条");
                        listBox1.Items.Add("成功总数:0条");
                        listBox1.Items.Add("失败总数:0条");
                        listBox1.Items.Add("");
                        ProgressBar.Value = 0;
                    }
                }
            }
            sbOpen.Enabled = true;//开启按钮

        }

        /// <summary>
        /// 同步时间
        /// </summary>
        /// <returns></returns>
        public void TirmLod()
        {
            for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
            {
                string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();
                if (ReValue == "True")//判断是否机器被选中
                {
                    myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                    myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                    myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号

                    if (myTerminal.isAlive() == true)//判断连接是否成功
                    {
                        string strDa = System.DateTime.Now.ToShortDateString();
                        string strTe = System.DateTime.Now.ToShortTimeString();
                        strDa = DateTime.Parse(strDa).ToString("MM/dd/yyyy");
                        strTe = DateTime.Parse(strTe).ToString("HH:mm:ss");
                        myTerminal.SetDateToTerminal(Convert.ToDateTime(strDa));
                        myTerminal.SetTimeToTerminal(strTe);
                    }
                }
            }
 
        }

        /// <summary>
        /// 同步时间事件
        /// </summary>
        /// <returns></returns>
        private void toolStripButton8_Click(object sender, EventArgs e)
        {
            if (TimerSs.Enabled == true)
            {
                MessageBox.Show("请先关闭实时采集");
                return;
            }
            listBox1.Items.Clear();

            for (int i = 0; i < dataGridView1.RowCount; i  )//一级循环,循环机器列表
            {
                string ReValue = dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString();
                if (ReValue == "True")//判断是否机器被选中
                {
                    myTerminal.IPAddress = dataGridView1.Rows[i].Cells[1].Value.ToString();//机器IP
                    myTerminal.Port = dataGridView1.Rows[i].Cells[2].Value.ToString(); //机器端口
                    myTerminal.TerminalID = dataGridView1.Rows[i].Cells[3].Value.ToString(); //机器编号

                    if (myTerminal.isAlive() == true)//判断连接是否成功
                    {
                        string strDa = System.DateTime.Now.ToShortDateString();
                        string strTe = System.DateTime.Now.ToShortTimeString();
                        strDa = DateTime.Parse(strDa).ToString("MM/dd/yyyy");
                        strTe = DateTime.Parse(strTe).ToString("HH:mm:ss");
                        myTerminal.SetDateToTerminal(Convert.ToDateTime(strDa));
                        myTerminal.SetTimeToTerminal(strTe);

                        listBox1.Items.Add("机器编号"   myTerminal.TerminalID   "日期时间同步成功");
                        listBox1.Items.Add("");
                    }
                }
            }
        }

        /// <summary>
        /// 新增考勤机
        /// </summary>
        /// <returns></returns>
        private void toolStripMenuItem6_Click(object sender, EventArgs e)
        {
            //获取版本
            XmlTextReader textReader = new XmlTextReader("SysParameter.xml");
            textReader.Read();
            int i = 0;

            while (textReader.Read())
            {
                textReader.MoveToElement();
                if (textReader.NodeType == XmlNodeType.Text)
                {
                    switch (i)
                    {
                        //显示目前版本
                        case 25: if (textReader.Value == "方卡原版") { MessageBox.Show("原版程序禁止添加设备,请在一卡通中添加"); return; } break;
                    }
                    i  ;
                }
            }
            textReader.Close();

            FormInsetMc Fi = new FormInsetMc();
            Fi.Show();
        }

        /// <summary>
        /// 返回当前版本号
        /// </summary>
        /// <returns></returns>
        public string XmlBb()
        {
            string Bbname = "";
            //获取版本
            XmlTextReader textReader = new XmlTextReader("SysParameter.xml");
            textReader.Read();
            int i = 0;

            while (textReader.Read())
            {
                textReader.MoveToElement();
                if (textReader.NodeType == XmlNodeType.Text)
                {
                    switch (i)
                    {
                        //显示目前版本
                        case 25: Bbname = textReader.Value; break;
                    }
                    i  ;
                }
            }
            textReader.Close();

            return Bbname;
        }
    }
}

标签:

实例下载地址

B系列考勤管理工具源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警