搭建asp会议签到系统 第三章 会议签到

搭建asp会议签到系统


第一章 账密登录
第二章 生成会议签到二维码
第三章 会议签到
第四章 会议统计



前言

前文已说如何登录以及如何生成会议二维码,本篇将继续说明如何进行签到。
原理很简单:手机(微信、支付宝等)通过扫一扫,识别并进入会议签到url。


提示:以下是本篇文章正文内容,下面案例可供参考

一、制作checkin前端页面

员工通过扫一扫进入到此页面,获取会议相关信息(如会议开始时间、会议主题等),以便让员工再次确认。

<asp:TextBox ID="REASON" runat="server" class="form-control"></asp:TextBox>
     <script>
     //JS前端实现palacehold,注意:MainContent的用法,这里不多作介绍。
     jQuery(document).ready(function () {
     $("#MainContent_REASON").attr('placeholder', '如缺席,请不要写类似:有事/请假等含糊理由。');
        });
      </script>

布置3个按钮:签到、请假、出差
(因实际情况,我本来设计是2个,签到和缺席,但后来公司管理需要把缺席拆为请假、出差)

 <asp:Button ID="CIN"  type="button" class="btn btn-success"  runat="server" Text="签到" OnClick="Button1_Click"/>
 <asp:Button ID="CLEA"  type="button" class="btn btn-warning"  runat="server" Text="请假" OnClick="Button1_Click"/>
 <asp:Button ID="COUT" type="button" class="btn btn-info"  runat="server" Text="出差" OnClick="Button1_Click"/>

虽然有3个按钮,但点击事件是同一个,以ID区分

        protected void Button1_Click(object sender, EventArgs e)
        {
            var flag = ((Button)sender).ID;
            CHECKID.Text = flag;
            Checkin();
        }

二、读取并展示历史会议签到信息

获取会议二维码的参数ID并同时展示该会议的历史签到信息。

//页面加载首先执行几个事件,下面具体方法会讲到
   protected void Page_Load(object sender, EventArgs e)
        {
            meetid.Text = Request.QueryString["meetid"];
            GetQRMeet();//获取历史会议签到信息
            TimeCheck();//校验时间以控制会议签到
        }

二.1 获取历史会议签到信息

private void GetQRMeet()
        {
        //获取当前页面的会议ID
            var meeid = meetid.Text;
        //获取当前页面的登录ID
        var USERID = Context.User.Identity.Name;
        string DC6;
        DC6 = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DC6"].ToString();
            using (SqlConnection conn = new SqlConnection(DC6))
            {
                conn.Open();
    //这里隐去了几个获取项,按需从数据库取出即可
    SqlCommand L4 = new SqlCommand("SELECT StartTime FROM VW_HYXX where MeeID = '" + meeid + "'", conn);
    //meetcheck 这个表用于存放会议签到信息,下面会详细讲到
    SqlCommand L5 = new SqlCommand("SELECT CASE WHEN STU='1' THEN '正常签到' WHEN STU='2' THEN '迟到' WHEN STU='3' THEN '请假' WHEN STU='5' THEN '出差' ELSE '暂无您的签到信息' END checkinfo,CHECKDT,REASON  FROM meetcheck  WHERE MEETID = '" + meeid + "' AND USERID= '" + USERID + "' ", conn);
     object obj4 = L4.ExecuteScalar();
     SqlDataReader sread = L5.ExecuteReader();
           if (obj4 != null)
                {
            meetime.Text = obj4.ToString();
            cksta.Text = "暂无您的签到信息";
            cktime.Text = "";
            if (sread.Read())
            //如果该会议ID和员工ID已存在会议签到信息了,则代表员工已处理过签到,就把历史签到信息拉出来并存入相应前端控件
               {
              REASON.Text= sread["REASON"].ToString();
              cksta.Text = sread["checkinfo"].ToString();
              cktime.Text = sread["CHECKDT"].ToString();
                    }
                }
                conn.Close();
            }
        }

在这里插入图片描述

二.2 校验时间以控制会议签到

   protected void TimeCheck()
        {
            var MEETBDT = meetime.Text;
            var MEETTOP = meetsub.Text;
            var CHECKDT = DateTime.Now.ToString();
            DateTime startTime = Convert.ToDateTime(MEETBDT);
            DateTime endTime = Convert.ToDateTime(CHECKDT);
            TimeSpan ts = endTime - startTime;
            if ((ts.TotalMinutes >= 5 & ts.TotalMinutes <= 30) || ts.TotalHours <= -0.5)
            {
            //如果当前签到时间 超出会议开始时间5分钟或早于会议开始时间半小时,签到按钮关闭,只允许请假和出差,以防提前签到和无限补签
                CIN.Visible = false;
                return;
            }
            if (ts.TotalMinutes > 30)
            {
            //如果当前签到时间 超出会议开始时间30分钟所有按钮关闭
                CHECKINFO.Visible = true;
                CHECKINFO.Text = "签到已结束,请联系会议组织者!";
                CLEA.Visible = false;
                COUT.Visible = false;
                CIN.Visible = false;
            }
        }

在这里插入图片描述

三、签到信息存储

首先要去建一张表meetcheck ,

CREATE TABLE [dbo].[meetcheck](
	[MEETID] [nvarchar](20) NOT NULL,//会议ID
	[ROOMID] [nvarchar](20) NULL,//参会的会议室ID
	[USERID] [nvarchar](20) NOT NULL,//员工ID
	[MEETBDT] [datetime] NULL,//会议开始时间
	[CHECKDT] [datetime] NULL,//签到时间
	[DELFLAG] [int] NULL,//有效标志
	[IP] [nvarchar](20) NULL,//手机端或PC端的IP,如果能再记录GPS就更好了
	[HOSTNAME] [nvarchar](20) NULL,//主机名
	[STU] [int] NULL,//签到状态,1代表正常签到,2迟到,3请假,5出差(为什么没有4……)
	[REASON] [nvarchar](50) NULL,//理由
 CONSTRAINT [PK_meetcheck] PRIMARY KEY CLUSTERED 
(
	[MEETID] ASC,
	[USERID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

有了存储表后,下面就无非就是insert和update了

   protected void Checkin()
            {
            var ctext = CHECKID.Text;
            var MEETBDT = meetime.Text;
            var MEETTOP = meetsub.Text;
            var reason = REASON.Text;
            var CHECKDT = DateTime.Now.ToString();
            DateTime startTime = Convert.ToDateTime(MEETBDT);
            DateTime endTime = Convert.ToDateTime(CHECKDT);
            TimeSpan ts = endTime - startTime;
            var stu = '1';
            if (ctext== "CIN" & ts.TotalMinutes >= 1)
            {
                stu = '2';
                //签到时间晚于开始时间1分钟后,就算按了签到,也算迟到
            }
                if (ctext == "CLEA")
                {
                    stu = '3';
                }
            if (ctext == "COUT")
            {
                stu = '5';
            }
            if((stu == '3' || stu == '5') & reason == "")
            {
            //请假和出差的理由必填
            Response.Write("<script>alert('请填写出差或请假事由!')</script>");
            return;
            }
            else
            {
                var meeid = meetid.Text;
                var ROOMID = ROOMIndex.Text;
                var USERID = Context.User.Identity.Name;
                //获取移动端和PC端的IP
                var CIP = Page.Request.UserHostAddress;
                //获取移动端和PC端的主机名
                var CNAME = Page.Request.UserHostName;
                string DC6;
                DC6 = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DC6"].ToString();
                using (SqlConnection conn = new SqlConnection(DC6))
                {
                    conn.Open();
                    SqlCommand L2 = new SqlCommand("select CHECKDT from meetcheck where meetid = '" + meeid + "' AND USERID= '" + USERID + "' ", conn);
                    object obj2 = L2.ExecuteScalar();
                    if (obj2 != null)
                    {
                    //如果签到信息里有相关信息,则做更新
                    //有时候会出现先请假然后取消再出席的情况
            SqlCommand U2 = new SqlCommand("UPDATE meetcheck SET CHECKDT='" + CHECKDT + "' ,ROOMID='" + ROOMID + "',STU='" + stu + "',IP='" + CIP + "',HOSTNAME='" + CNAME + "',REASON='" + reason + "'  where meetid = '" + meeid + "' AND USERID= '" + USERID + "' ", conn);
           object obj3 = U2.ExecuteScalar();
           Response.Write("<script>alert('成功更新签到信息!')</script>");
                    }
                    else
                    {
                    //如果签到信息里没有相关信息,则做插入
           SqlCommand I2 = new SqlCommand("INSERT INTO meetcheck (MEETID,ROOMID,USERID,MEETBDT,CHECKDT,DELFLAG,IP,HOSTNAME,STU,REASON)  VALUES ('" + meeid + "' ,'" + ROOMID + "','" + USERID + "','" + MEETBDT + "' ,'" + CHECKDT + "' ,'0' ,'" + CIP + "' ,'" + CNAME + "' ,'" + stu + "' ,'" + reason + "') ", conn);
            object obj3 = I2.ExecuteScalar();
            Response.Write("<script>alert('成功记录会议签到信息!')</script>");
            //刷新当前页面
           Response.Redirect(Request.Url.ToString());
                    }
                    conn.Close();
                }
            }
            }

四 效果图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

载河之舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值