示例#1
0
文件: Form1.cs 项目: jxsgood/WEBCNG
 //处理考勤事件
 void KQ_SJ_指纹处理(object sender, Even_指纹系统处理 e)
 {
     if (textBox3.TextLength > 10000) { textBox3.Text = ""; }
     textBox3.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss "));
     textBox3.AppendText(e.mesg + "\r\n");
 }
示例#2
0
        /// <summary>
        /// 插入新指纹数据 并更新数据库数据
        /// </summary>
        /// <param name="dt"></param>
        private int Update_KQ(DataTable dt)
        {
            DAL dal = new DAL();
            //先删除临时表数据
            string SQL = "DELETE FROM [CNGTZ].[dbo].[TZ_人员_考勤TEMP]";
            dal.RunSql(SQL);

            foreach (DataRow row in dt.Rows)
            {
                SqlParameter par1 = new SqlParameter("刷机时间", row["checktime"].ToString());

                #region 用于处理字符串后面的特殊字符
                //处理原因为,从Access数据库生成的 table,姓名字段,取出的数据,后面带有特殊不能显示的字符,原因不明
                byte[] t = System.Text.Encoding.Default.GetBytes((string)row["name"]);
                int x = 0;
                foreach (var b in t)
                {
                    if (b == 0)
                    {
                        break;
                    }
                    x = x + 1;
                }
                string name = Encoding.Default.GetString(t, 0, x);
                #endregion

                //Sys.DebugMes(name);

                SqlParameter par2 = new SqlParameter("姓名", name);

                SQL = "INSERT INTO [CNGTZ].[dbo].[TZ_人员_考勤TEMP]([刷机时间],[姓名]) VALUES(@刷机时间,@姓名)";
                dal.RunSql(SQL, new SqlParameter[] { par1, par2 });
            }

            SQL = @"Insert into [CNGTZ].[dbo].[TZ_人员_考勤_刷机时间]( 刷机时间, 姓名)
                            SELECT 刷机时间, 姓名
                             from [CNGTZ].[dbo].[TZ_人员_考勤TEMP] b where
                            not exists(select * from [CNGTZ].[dbo].[TZ_人员_考勤_刷机时间] where b.刷机时间= 刷机时间 and
                            b.姓名= 姓名 )";

            dal.RunSql(SQL);//运行 复制数据 存储过程
            if (this.SJ_指纹处理 != null)
            {
                Even_指纹系统处理 e = new Even_指纹系统处理();
                e.mesg = "复制纹数据:" + dal.ExecuteRowCount.ToString() + "条";
                //触发事件
                this.SJ_指纹处理(this, e);
            }
            return dal.ExecuteRowCount;
        }
示例#3
0
        /// <summary>
        /// 生成班组考勤表
        /// </summary>
        /// <param name="ry">班组人员列表</param>
        /// <param name="dt">日期</param>
        /// <param name="zd">站点</param>
        /// <param name="bz">班组</param>
        /// <param name="yb">是否夜班</param>
        private void KQ_生成班组考勤数据(DataTable ry, DateTime dt, int zd, int bz, bool yb)
        {
            string 上班时间 = "", 下班时间 = "", 白班夜班 = "";
            SqlParameter par1, par2, par3, par4, par5, par6, par7, par8;

            string SQL = @"INSERT INTO [CNGTZ].[dbo].[TZ_人员_考勤表]
                               ([人员ID]
                               ,[日期]
                               ,[站点]
                               ,[姓名]
                               ,[班组]
                               ,[白班夜班]
                               ,[上班时间]
                               ,[下班时间])
                         VALUES
                               (@人员ID
                               ,@日期
                               ,@站点
                               ,@姓名
                               ,@班组
                               ,@白班夜班
                               ,@上班时间
                               ,@下班时间
                               )";

            par1 = new SqlParameter("日期", dt);
            par2 = new SqlParameter("站点", zd);
            par3 = new SqlParameter("班组", bz);

            DAL dal = new DAL();
            dal.saveErrorLog(false);//关闭记录错误日志
            // 南高站 与 西路站
            if (zd == 2 || zd == 3)
            {
                if (yb)
                {
                    白班夜班 = "夜班";

                    上班时间 = dt.ToShortDateString() + " 20:00:00";
                    下班时间 = dt.AddDays(1).ToShortDateString() + " 9:00:00";
                }
                else
                {
                    白班夜班 = "白班";
                    上班时间 = dt.ToShortDateString() + " 9:00:00";
                    下班时间 = dt.ToShortDateString() + " 20:00:00";
                }
                par4 = new SqlParameter("白班夜班", 白班夜班);
                par5 = new SqlParameter("上班时间", 上班时间);
                par6 = new SqlParameter("下班时间", 下班时间);

                foreach (DataRow row in ry.Rows)
                {
                    par7 = new SqlParameter("人员ID", int.Parse(row["ID"].ToString()));
                    par8 = new SqlParameter("姓名", row["姓名"].ToString());
                    dal.RunSql(SQL, new SqlParameter[] { par1, par2, par3, par4, par5, par6, par7, par8 });
                }

            }

            //麻柳沱站
            if (zd == 4)
            {
                if (bz == 2 || bz == 4)
                {//如果班组为2 或 4 不进行麻柳沱站处理
                    return;
                }
                上班时间 = dt.ToShortDateString() + " 9:00:00";
                下班时间 = dt.AddDays(2).ToShortDateString() + " 9:00:00";
                par4 = new SqlParameter("白班夜班", "");
                par5 = new SqlParameter("上班时间", 上班时间);
                par6 = new SqlParameter("下班时间", 下班时间);

                foreach (DataRow row in ry.Rows)
                {
                    par7 = new SqlParameter("人员ID", int.Parse(row["ID"].ToString()));
                    par8 = new SqlParameter("姓名", row["姓名"].ToString());
                    dal.RunSql(SQL, new SqlParameter[] { par1, par2, par3, par4, par5, par6, par7, par8 });
                }
            }
            if (this.SJ_指纹处理 != null)
            {
                Even_指纹系统处理 e = new Even_指纹系统处理();
                e.mesg = string.Format("生成考勤表:日期{0};站点={1};班组:{2}", dt.ToShortDateString(), zd.ToString(), bz.ToString());
                //触发事件
                this.SJ_指纹处理(this, e);
            }
        }
示例#4
0
        /// <summary>
        /// 签到时间生成
        /// </summary>
        /// <param name="dt">结束日期</param>
        /// <param name="dd">处理天数</param>
        /// <param name="wc">指纹刷机误差小时</param>
        /// <param name="cdwc">迟到误差分钟</param>
        /// <param name="ztwc">早退误差分钟</param> 
        public void KQ_签到处理(DateTime dt, int dd, int wc, int cdwc, int ztwc)
        {
            //dt = DateTime.Parse(dt.ToShortDateString());
            DateTime 起始时间 = dt.AddDays(0 - dd);

            //签到处理
            string SQL = "SELECT  [ID],[姓名],[上班时间],[下班时间] FROM [CNGTZ].[dbo].[TZ_人员_考勤表] where 上班签到 IS NULL and 日期 between @起始 and @结束";
            SqlParameter par1 = new SqlParameter("起始", 起始时间);
            SqlParameter par2 = new SqlParameter("结束", dt);
            //Sys.DebugMes(起始时间.ToString() + "   " + dt.ToString());

            DAL dal = new DAL();

            DataTable renName = dal.RunSqlDataTable(SQL, new SqlParameter[] { par1, par2 });//取得人员列表

            foreach (DataRow row in renName.Rows)
            {
                DateTime t = DateTime.Parse(row["上班时间"].ToString());
                SqlParameter p1 = new SqlParameter("起始", t.AddHours(0 - wc));
                SqlParameter p2 = new SqlParameter("结束", t.AddHours(wc));
                SqlParameter p3 = new SqlParameter("姓名", row["姓名"].ToString());
                if (row["姓名"].ToString() == "陈兴华")
                {
                    Sys.DebugMes("XXX");
                }

                SQL = "SELECT top 1 [刷机时间] FROM [CNGTZ].[dbo].[TZ_人员_考勤_刷机时间] where 姓名=@姓名 AND 刷机时间 BETWEEN @起始 AND @结束 ORDER BY 刷机时间";
                string qdsj = dal.RunSqlGetID(SQL, new SqlParameter[] { p1, p2, p3 });//找到最早指纹签到时间
                if (qdsj == null)
                {
                    continue;//如果没有找到签到时间 就到下一条记录
                }
                int cd = 0;//判断是否迟到
                DateTime tt = DateTime.Parse(qdsj);//签到时间
                TimeSpan temp = tt.Subtract(t);
                cd = temp.Minutes;//迟到分钟

                cd = (cd > cdwc) ? 1 : 0;

                SQL = "UPDATE [CNGTZ].[dbo].[TZ_人员_考勤表] SET [上班签到] = @签到时间,[实到] =[实到]+ 1,[迟到]= " + cd.ToString() + " WHERE ID =@ID";
                SqlParameter p4 = new SqlParameter("ID", int.Parse(row["ID"].ToString()));
                SqlParameter p5 = new SqlParameter("签到时间", DateTime.Parse(qdsj));
                dal.RunSql(SQL, new SqlParameter[] { p4, p5 });//更新签到时间列表
            }

            //进行签退处理
            SQL = "SELECT  [ID],[姓名],[上班时间],[下班时间] FROM [CNGTZ].[dbo].[TZ_人员_考勤表] where 下班签退 IS NULL and 日期 between @起始 and @结束";
            par1 = new SqlParameter("起始", 起始时间);
            par2 = new SqlParameter("结束", dt);

            renName = dal.RunSqlDataTable(SQL, new SqlParameter[] { par1, par2 });//取得人员列表

            foreach (DataRow row in renName.Rows)
            {
                DateTime t = DateTime.Parse(row["下班时间"].ToString());
                SqlParameter p1 = new SqlParameter("起始", t.AddHours(0 - wc));
                SqlParameter p2 = new SqlParameter("结束", t.AddHours(wc));
                SqlParameter p3 = new SqlParameter("姓名", row["姓名"].ToString());
                SQL = "SELECT top 1 [刷机时间] FROM [CNGTZ].[dbo].[TZ_人员_考勤_刷机时间] where 姓名=@姓名 AND 刷机时间 BETWEEN @起始 AND @结束 ORDER BY 刷机时间 desc";
                string qdsj = dal.RunSqlGetID(SQL, new SqlParameter[] { p1, p2, p3 });//找到最后下班指纹签到时间
                if (qdsj == null)
                {
                    continue;//如果没有找到签到时间 就到下一条记录
                }
                int zt = 0;//判断是否早退
                DateTime tt = DateTime.Parse(qdsj);
                TimeSpan temp = t.Subtract(tt);
                zt = temp.Minutes;

                zt = (zt > ztwc) ? 1 : 0;
                SQL = "UPDATE [CNGTZ].[dbo].[TZ_人员_考勤表] SET [下班签退] = @签到时间,[实到] =[实到]+ 1,[早退]= " + zt.ToString() + " WHERE ID =@ID";
                SqlParameter p4 = new SqlParameter("ID", int.Parse(row["ID"].ToString()));
                SqlParameter p5 = new SqlParameter("签到时间", DateTime.Parse(qdsj));
                dal.RunSql(SQL, new SqlParameter[] { p4, p5 });//更新签到时间列表
            }
            //记录处理时间
            SQL = "INSERT INTO [CNGTZ].[dbo].[TZ_人员_考勤处理时间]([时间]) VALUES ('" + DateTime.Now.ToString() + "')";
            dal.RunSql(SQL);

            if (this.SJ_指纹处理 != null)
            {
                Even_指纹系统处理 e = new Even_指纹系统处理();
                e.mesg = "处理考勤签到【" + 起始时间.ToShortDateString() + " 至 " + dt.ToShortDateString() + "】到完成!";
                //触发事件
                this.SJ_指纹处理(this, e);
            }
        }
示例#5
0
 /// <summary>
 /// 处理出勤情况,生成出勤时间(分钟)
 /// </summary>
 /// <param name="dt"></param>
 /// <param name="dd"></param>
 public void KQ_出勤情况(DateTime dt, int dd)
 {
     DateTime 起始时间 = dt.AddDays(0 - dd);
     string SQL = "UPDATE [CNGTZ].[dbo].[TZ_人员_考勤表] SET [出勤情况] ='正常',[出勤时间] = datediff(mi,[上班签到],[下班签退]) WHERE [实到]=2 AND 日期 BETWEEN @起始 AND @结束";
     SqlParameter par1 = new SqlParameter("起始", 起始时间);
     SqlParameter par2 = new SqlParameter("结束", dt);
     DAL dal = new DAL();
     dal.RunSql(SQL, new SqlParameter[] { par1, par2 });
     SQL = "UPDATE [CNGTZ].[dbo].[TZ_人员_考勤表] SET [出勤情况] ='异常' WHERE [实到]<>2 AND 日期 BETWEEN @起始 AND @结束";
     dal.RunSql(SQL, new SqlParameter[] { par1, par2 });
     if (this.SJ_指纹处理 != null)
     {
         Even_指纹系统处理 e = new Even_指纹系统处理();
         e.mesg = "处理考勤情况【" + 起始时间.ToShortDateString() + " 至 " + dt.ToShortDateString() + "】到完成!";
         //触发事件
         this.SJ_指纹处理(this, e);
     }
 }
示例#6
0
        /// <summary>
        ///  取指纹机考勤数据
        /// </summary>
        /// <param name="path">数据库路径</param>
        /// <param name="day">读取指定日期</param>
        /// <returns></returns>
        public int Get_KQ(string path, DateTime day)
        {
            ODBHelper ODB = new ODBHelper(path);//用于操作 access 数据库
            DateTime start = day;
            DateTime end = day.AddDays(1);

            string SQL = "SELECT b.name, a.checktime FROM CHECKINOUT a left join USERINFO b on a.USERID=b.USERID where a.checktime between @起始时间 and @结束时间";
            System.Data.OleDb.OleDbParameter par1 = new System.Data.OleDb.OleDbParameter("起始时间", start.ToString("yyyy-MM-dd HH:mm:ss"));
            System.Data.OleDb.OleDbParameter par2 = new System.Data.OleDb.OleDbParameter("结束时间", end.ToString("yyyy-MM-dd HH:mm:ss"));
            Sys.DebugMes(start.ToLongDateString() + "  " + end.ToLongDateString());
            DataTable dt = ODB.RunSqlDataTable(SQL, new System.Data.OleDb.OleDbParameter[] { par1, par2 });

            int nu = 0;

            if (dt == null)
            {
                Sys.DebugMes(ODB.ERR);
            }
            else
            {
                Sys.DebugMes(dt.Rows.Count.ToString());
                if (this.SJ_指纹处理 != null)
                {
                    Even_指纹系统处理 e = new Even_指纹系统处理();
                    e.mesg = "读取指纹数据:" + dt.Rows.Count.ToString() + "条";
                    //触发事件
                    this.SJ_指纹处理(this, e);
                }
                if (dt.Rows.Count > 0)
                {
                    nu = Update_KQ(dt);// 插入新指纹数据 并更新数据库数据
                }
            }
            return nu;
        }