• 打卡处理



    CREATE TABLE [dbo].[Hr](
     [部门] [nvarchar](255) NULL,
     [姓名] [nvarchar](255) NULL,
     [考勤号码] [nvarchar](255) NULL,
     [日期时间] [datetime] NULL,
     [日期] [datetime] NULL,
     [时间] [datetime] NULL,
     [记录状态] [nvarchar](255) NULL,
     [F8] [nvarchar](255) NULL,
     [机器号] [nvarchar](255) NULL,
     [编号] [nvarchar](255) NULL,
     [工种代码] [nvarchar](255) NULL,
     [比对方式] [nvarchar](255) NULL,
     [卡号] [nvarchar](255) NULL,
     [考勤] [nvarchar](255) NULL
    ) ON [PRIMARY]


    CREATE TABLE [dbo].[Hr_1](
     [姓名] [nvarchar](50) NULL,
     [考勤号码] [nvarchar](50) NULL,
     [日期时间] [datetime] NULL,
     [上班打卡_A] [datetime] NULL,
     [下班打卡_A] [datetime] NULL,
     [备注] [nvarchar](50) NULL,
     [上班打卡_P] [datetime] NULL,
     [下班打卡_P] [datetime] NULL,
     [上班打卡_E] [datetime] NULL,
     [下班打卡_E] [datetime] NULL,
     CONSTRAINT [Unique_Hr_1] UNIQUE NONCLUSTERED
    (
     [考勤号码] ASC,
     [日期时间] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    -----------------------------------
    ALTER  PROCEDURE [dbo].[Hr_addNewMonth]
    as
    BEGIN 
      INSERT INTO [Hr_1]
               ([日期时间],[姓名]
               ,[考勤号码])
      select distinct CONVERT(char(10),日期时间,120) as atime,姓名,考勤号码 from Hr a
      where (select COUNT(*) from [Hr_1] b where b.考勤号码 = a.考勤号码 and b.日期时间 = CONVERT(char(10),a.日期时间,120) ) < 1
      order by a.姓名,CONVERT(char(10),a.日期时间,120)
    END
    ---------------------------
    ---上午上班打卡
    ALTER PROCEDURE [dbo].[Hr_Update1]  
    AS
    DECLARE  @wkdatetime1 datetime   --时间
    DECLARE  @wk_no varchar(20)      --工号
    DECLARE  @wk_date datetime      --打卡日期
    DECLARE  @wk_month varchar(20)   --打卡月份
    DECLARE  @row_count int          --记录行数
    BEGIN
        set @wk_month ='2015-01'     ---设置计算初值
     DECLARE cur_wkno_input CURSOR  FOR
             select distinct 考勤号码 from Hr_1  where CONVERT(char(7),日期时间,120) =@wk_month  
            
     
            
     OPEN cur_wkno_input 
        FETCH  cur_wkno_input INTO @wk_no
     WHILE @@FETCH_STATUS = 0
          BEGIN
              
                         
       -----按工号循环
             DECLARE cur_wk_date_input CURSOR  FOR         
             select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
            
            OPEN cur_wk_date_input 
         FETCH  cur_wk_date_input INTO @wk_date
         WHILE @@FETCH_STATUS = 0
         BEGIN   
         --select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ' 09:00:00',101);
         --select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ' 09:00:00',101);         
         -----按日期循环
             set @row_count = 0
                   SELECT @row_count = count(*)  from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and 日期时间 < 
                   CONVERT(datetime,@wk_date + ' 09:00:00',101)                
             if @row_count > 0                
                BEGIN 
                   set @wkdatetime1 =  (select  top 1 日期时间   from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and 日期时间 < 
                   CONVERT(datetime,@wk_date + ' 09:00:00',101)  order by 日期时间)              
                   update [Hr_1] set 上班打卡_A = @wkdatetime1  where 考勤号码 = @wk_no and 日期时间 = @wk_date and 上班打卡_A is null             
                  
                end
               -----按日期循环
               FETCH  cur_wk_date_input INTO @wk_date
         end 
         CLOSE cur_wk_date_input
         DEALLOCATE cur_wk_date_input  
      
       -----按工号循环
       FETCH  cur_wkno_input INTO @wk_no
       end 
       CLOSE cur_wkno_input
          DEALLOCATE cur_wkno_input
    END

    --------------------------
    ---上午下班打卡
    ALTER  PROCEDURE [dbo].[hr_Update2]  
    AS
    DECLARE  @wkdatetime1 datetime   --时间
    DECLARE  @wk_no varchar(20)      --工号
    DECLARE  @wk_date datetime      --打卡日期
    DECLARE  @wk_month varchar(20)   --打卡月份
    DECLARE  @row_count int          --记录行数
    BEGIN
        set @wk_month ='2015-01'     ---设置计算初值
     DECLARE cur_wkno_input CURSOR  FOR
             select distinct 考勤号码 from Hr_1  where CONVERT(char(7),日期时间,120) =@wk_month 
            
     OPEN cur_wkno_input 
        FETCH  cur_wkno_input INTO @wk_no
     WHILE @@FETCH_STATUS = 0
          BEGIN          
                         
       -----按工号循环
             DECLARE cur_wk_date_input CURSOR  FOR         
             select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
            
            OPEN cur_wk_date_input 
         FETCH  cur_wk_date_input INTO @wk_date
         WHILE @@FETCH_STATUS = 0
         BEGIN   
         --select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ' 09:00:00',101);
         --select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ' 09:00:00',101);         
         -----按日期循环
             set @row_count = 0
                   SELECT @row_count = count(*)  from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 11:30:00',101)  and 日期时间 <  CONVERT(datetime,@wk_date + ' 14:10:00',101)               
             if @row_count > 0                
                BEGIN 
                   set @wkdatetime1 =  (select  top 1 日期时间   from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 11:30:00',101)  and 日期时间 <  CONVERT(datetime,@wk_date + ' 14:10:00',101)  order by 日期时间 ) 
                               
                   update [Hr_1] set 下班打卡_A = @wkdatetime1  where 考勤号码 = @wk_no and 日期时间 = @wk_date and 下班打卡_A is null             
                  
                end
               -----按日期循环
               FETCH  cur_wk_date_input INTO @wk_date
         end 
         CLOSE cur_wk_date_input
         DEALLOCATE cur_wk_date_input  
      
       -----按工号循环
       FETCH  cur_wkno_input INTO @wk_no
       end 
       CLOSE cur_wkno_input
          DEALLOCATE cur_wkno_input
    END


    -----------------------------
    ---下午上班打卡
    ALTER  PROCEDURE [dbo].[hr_Update3] 
    AS
    DECLARE  @wkdatetime1 datetime   --时间
    DECLARE  @wk_no varchar(20)      --工号
    DECLARE  @wk_date datetime      --打卡日期
    DECLARE  @wk_month varchar(20)   --打卡月份
    DECLARE  @row_count int          --记录行数
    BEGIN
        set @wk_month ='2015-01'     ---设置计算初值
     DECLARE cur_wkno_input CURSOR  FOR
             select distinct 考勤号码 from Hr_1  where CONVERT(char(7),日期时间,120) =@wk_month 
            
     OPEN cur_wkno_input 
        FETCH  cur_wkno_input INTO @wk_no
     WHILE @@FETCH_STATUS = 0
          BEGIN          
                         
       -----按工号循环
             DECLARE cur_wk_date_input CURSOR  FOR         
             select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
            
            OPEN cur_wk_date_input 
         FETCH  cur_wk_date_input INTO @wk_date
         WHILE @@FETCH_STATUS = 0
         BEGIN   
         --select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ' 09:00:00',101);
         --select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ' 09:00:00',101);         
         -----按日期循环
             set @row_count = 0
                   SELECT @row_count = count(*)  from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 11:30:00',101)  and 日期时间 <  CONVERT(datetime,@wk_date + ' 14:10:00',101)               
             if @row_count > 0                
                BEGIN 
                   set @wkdatetime1 =  (select  top 1 日期时间   from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 11:30:00',101)  and 日期时间 <  CONVERT(datetime,@wk_date + ' 14:10:00',101)  order by 日期时间 desc) 
                               
                   update [Hr_1] set 上班打卡_P = @wkdatetime1  where 考勤号码 = @wk_no and 日期时间 = @wk_date and 上班打卡_P is null             
                  
                end
               -----按日期循环
               FETCH  cur_wk_date_input INTO @wk_date
         end 
         CLOSE cur_wk_date_input
         DEALLOCATE cur_wk_date_input  
      
       -----按工号循环
       FETCH  cur_wkno_input INTO @wk_no
       end 
       CLOSE cur_wkno_input
          DEALLOCATE cur_wkno_input
    END
    --------------------------
    ---下午下班打卡
    ALTER  PROCEDURE [dbo].[hr_Update4]  
    AS
    DECLARE  @wkdatetime1 datetime   --时间
    DECLARE  @wk_no varchar(20)      --工号
    DECLARE  @wk_date datetime      --打卡日期
    DECLARE  @wk_month varchar(20)   --打卡月份
    DECLARE  @row_count int          --记录行数
    BEGIN
        set @wk_month ='2015-01'     ---设置计算初值
     DECLARE cur_wkno_input CURSOR  FOR
             select distinct 考勤号码 from Hr_1  where CONVERT(char(7),日期时间,120) =@wk_month 
            
     OPEN cur_wkno_input 
        FETCH  cur_wkno_input INTO @wk_no
     WHILE @@FETCH_STATUS = 0
          BEGIN          
                         
       -----按工号循环
             DECLARE cur_wk_date_input CURSOR  FOR         
             select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
            
            OPEN cur_wk_date_input 
         FETCH  cur_wk_date_input INTO @wk_date
         WHILE @@FETCH_STATUS = 0
         BEGIN   
         --select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ' 09:00:00',101);
         --select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ' 09:00:00',101);         
         -----按日期循环
             set @row_count = 0
                   SELECT @row_count = count(*)  from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 17:00:00',101)                
             if @row_count > 0                
                BEGIN 
                   set @wkdatetime1 =  (select  top 1 日期时间   from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 17:00:00',101)  order by 日期时间 desc)              
                   update [Hr_1] set 下班打卡_P = @wkdatetime1  where 考勤号码 = @wk_no and 日期时间 = @wk_date and 下班打卡_P is null             
                  
                end
               -----按日期循环
               FETCH  cur_wk_date_input INTO @wk_date
         end 
         CLOSE cur_wk_date_input
         DEALLOCATE cur_wk_date_input  
      
       -----按工号循环
       FETCH  cur_wkno_input INTO @wk_no
       end 
       CLOSE cur_wkno_input
          DEALLOCATE cur_wkno_input
    END


    -----------------------
    ---晚上上班打卡
    ALTER  PROCEDURE [dbo].[hr_Update5] 
    AS
    DECLARE  @wkdatetime1 datetime   --时间
    DECLARE  @wk_no varchar(20)      --工号
    DECLARE  @wk_date datetime      --打卡日期
    DECLARE  @wk_month varchar(20)   --打卡月份
    DECLARE  @row_count int          --记录行数
    BEGIN
        set @wk_month ='2015-01'     ---设置计算初值
     DECLARE cur_wkno_input CURSOR  FOR
             select distinct 考勤号码 from Hr_1  where CONVERT(char(7),日期时间,120) =@wk_month 
            
     OPEN cur_wkno_input 
        FETCH  cur_wkno_input INTO @wk_no
     WHILE @@FETCH_STATUS = 0
          BEGIN          
                         
       -----按工号循环
             DECLARE cur_wk_date_input CURSOR  FOR         
             select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
            
            OPEN cur_wk_date_input 
         FETCH  cur_wk_date_input INTO @wk_date
         WHILE @@FETCH_STATUS = 0
         BEGIN   
         --select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ' 09:00:00',101);
         --select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ' 09:00:00',101);         
         -----按日期循环
             set @row_count = 0
                   SELECT @row_count = count(*)  from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 18:00:00',101)  and 日期时间 <  CONVERT(datetime,@wk_date + ' 23:50:00',101) and 部门
                   not in ('研发部','软件部','人力资源','财务中心','采购中心','市场部','工程部','总公司','总经办','销售公司')                           
             if @row_count > 0                
                BEGIN 
                   set @wkdatetime1 =  (select  top 1 日期时间   from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 18:00:00',101)  and 日期时间 <  CONVERT(datetime,@wk_date + ' 23:50:00',101)
                   and 部门
                   not in ('研发部','软件部','人力资源','财务中心','采购中心','市场部','工程部','总公司','总经办','销售公司')  order by 日期时间) 
                               
                   update [Hr_1] set 上班打卡_E = @wkdatetime1  where 考勤号码 = @wk_no and 日期时间 = @wk_date and 上班打卡_E is null             
                  
                end
               -----按日期循环
               FETCH  cur_wk_date_input INTO @wk_date
         end 
         CLOSE cur_wk_date_input
         DEALLOCATE cur_wk_date_input  
      
       -----按工号循环
       FETCH  cur_wkno_input INTO @wk_no
       end 
       CLOSE cur_wkno_input
          DEALLOCATE cur_wkno_input
    END

    -----------------------
    ---晚上下班打卡
    ALTER  PROCEDURE [dbo].[hr_Update6] 
    AS
    DECLARE  @wkdatetime1 datetime   --时间
    DECLARE  @wk_no varchar(20)      --工号
    DECLARE  @wk_date datetime      --打卡日期
    DECLARE  @wk_month varchar(20)   --打卡月份
    DECLARE  @row_count int          --记录行数
    BEGIN
        set @wk_month ='2015-01'     ---设置计算初值
     DECLARE cur_wkno_input CURSOR  FOR
             select distinct 考勤号码 from Hr_1  where CONVERT(char(7),日期时间,120) =@wk_month 
            
     OPEN cur_wkno_input 
        FETCH  cur_wkno_input INTO @wk_no
     WHILE @@FETCH_STATUS = 0
          BEGIN          
                         
       -----按工号循环
             DECLARE cur_wk_date_input CURSOR  FOR         
             select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
            
            OPEN cur_wk_date_input 
         FETCH  cur_wk_date_input INTO @wk_date
         WHILE @@FETCH_STATUS = 0
         BEGIN   
         --select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ' 09:00:00',101);
         --select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ' 09:00:00',101);         
         -----按日期循环
             set @row_count = 0
                   SELECT @row_count = count(*)  from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 18:00:00',101)  and 日期时间 <  CONVERT(datetime,@wk_date + ' 23:50:00',101) and 部门
                   not in ('研发部','软件部','人力资源','财务中心','采购中心','市场部','工程部','总公司','总经办','销售公司')               
             if @row_count > 0                
                BEGIN 
                   set @wkdatetime1 =  (select  top 1 日期时间   from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) =  CONVERT(char(10),@wk_date,120)   and
                   日期时间 >  CONVERT(datetime,@wk_date + ' 18:00:00',101)  and 日期时间 <  CONVERT(datetime,@wk_date + ' 23:50:00',101)
                   and 部门
                   not in ('研发部','软件部','人力资源','财务中心','采购中心','市场部','工程部','总公司','总经办','销售公司')
                   order by 日期时间 desc)                             
                   update [Hr_1] set 下班打卡_E = @wkdatetime1  where 考勤号码 = @wk_no and 日期时间 = @wk_date and 下班打卡_E is null                  
                  
                end
               -----按日期循环
               FETCH  cur_wk_date_input INTO @wk_date
         end 
         CLOSE cur_wk_date_input
         DEALLOCATE cur_wk_date_input  
      
       -----按工号循环
       FETCH  cur_wkno_input INTO @wk_no
       end 
       CLOSE cur_wkno_input
          DEALLOCATE cur_wkno_input
    END

  • 相关阅读:
    关于jar项目发布(windows)
    SpringBoot 基础(一) mybatis 通过druid配置多数据库
    redis 基础(二) Redis安装
    测试开发3年,我决定去读个名校硕士
    大厂程序员凡尔赛的一天
    假如我拥有字节工牌。。。
    上海有哪些牛逼的互联网公司?
    那些学计算机的女生后来都怎么样了?
    微信支付零花钱刷屏了!5万额度,能花又能借
    清华集训 part1
  • 原文地址:https://www.cnblogs.com/szlixin/p/4313269.html
Copyright © 2020-2023  润新知