--表结构 CREATE TABLE [dbo].[ARP_TXSZ]( [TXSZ_ID] [int] IDENTITY(1,1) NOT NULL, [TXSZ_LX] [varchar](50) NOT NULL, [TXSZ_YC_SJ] [datetime] NULL, [TXSZ_CF_PL] [varchar](50) NULL, [TXSZ_MTPL_LX] [varchar](50) NULL, [TXSZ_MTPL_YC_SJ] [varchar](8) NULL, [TXSZ_MTPL_JG_SL] [int] NULL, [TXSZ_MTPL_JG_DW] [varchar](50) NULL, [TXSZ_MZPL_ZJ] [varchar](50) NULL, [TXSZ_MYPL_JH] [varchar](100) NULL, [TXSZ_NR] [varchar](500) NULL, [TXSZ_KSRQ] [varchar](10) NULL, [TXSZ_ZZRQ] [varchar](10) NULL, [TXSZ_BZ] [varchar](50) NULL, [TXSZ_DJRQ] [datetime] NULL, [TXSZ_DJBH] [varchar](50) NULL, [TXSZ_JSR] [varchar](50) NULL, [TXSZ_DJZT] [varchar](10) NULL, CONSTRAINT [PK_ARP_TXSZ] PRIMARY KEY CLUSTERED ( [TXSZ_ID] 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 SET ANSI_PADDING OFF GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'重复执行、执行一次' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_LX' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'一次性提醒执行时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_YC_SJ' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'重复频率(每天、每周、每月)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_CF_PL' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'每天频率类型(执行一次、执行间隔)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_MTPL_LX' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'每天在几点几分执行一次' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_MTPL_YC_SJ' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'每天每多少执行一次(单位在TXSZ_MTPL_JG_)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_MTPL_JG_SL' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'间隔单位(时、分、秒)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_MTPL_JG_DW' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'每周周几(可以多选)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_MZPL_ZJ' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'每月几号(可以多选)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_MYPL_JH' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'提醒内容' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_NR' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'开始日期' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_KSRQ' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'终止日期' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_ZZRQ' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_BZ' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'单据日期' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_DJRQ' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'单据编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_DJBH' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'经手人' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_JSR' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生效状态' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZ', @level2type=N'COLUMN',@level2name=N'TXSZ_DJZT' GO CREATE TABLE [dbo].[ARP_TXSZMX]( [TXSZMX_ID] [int] IDENTITY(1,1) NOT NULL, [TXSZMX_DJBH] [varchar](50) NULL, [TXSZMX_LX] [varchar](50) NULL, [TXSZMX_BH] [varchar](50) NULL, [TXSZMX_MC] [varchar](50) NULL, CONSTRAINT [PK_ARP_TXSZRY] PRIMARY KEY CLUSTERED ( [TXSZMX_ID] 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 SET ANSI_PADDING OFF GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'单据编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZMX', @level2type=N'COLUMN',@level2name=N'TXSZMX_DJBH' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'类型(用户或者角色)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZMX', @level2type=N'COLUMN',@level2name=N'TXSZMX_LX' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZMX', @level2type=N'COLUMN',@level2name=N'TXSZMX_BH' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TXSZMX', @level2type=N'COLUMN',@level2name=N'TXSZMX_MC' GO CREATE TABLE [dbo].[ARP_TX]( [TX_ID] [int] IDENTITY(1,1) NOT NULL, [TX_DJBH] [varchar](50) NULL, [TX_TXRY] [varchar](50) NULL, [TX_TXSJ] [datetime] NULL, [TX_TXNR] [varchar](500) NULL, [TX_CLZT] [varchar](50) NULL, CONSTRAINT [PK_ARP_TX] PRIMARY KEY CLUSTERED ( [TX_ID] 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 SET ANSI_PADDING OFF GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'单据编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TX', @level2type=N'COLUMN',@level2name=N'TX_DJBH' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'提醒人员' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TX', @level2type=N'COLUMN',@level2name=N'TX_TXRY' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'产生时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TX', @level2type=N'COLUMN',@level2name=N'TX_TXSJ' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'提醒内容' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TX', @level2type=N'COLUMN',@level2name=N'TX_TXNR' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'处理状态(0:未处理,1:已处理)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'ARP_TX', @level2type=N'COLUMN',@level2name=N'TX_CLZT' GO
create procedure [dbo].[sp_exec_tx](@djbh varchar(50)='') as /* @Copy Right:kuailewangzi1212 创建日期:2013-11-19 作者:kuailewangzi1212 功能描述:根据提醒设置生成提醒内容 算法说明: 1、删除新单据明细。 2、插入原单据明细 3、修改你单据的"年度、类型、起始日期、终止日期" 参数说明: 测试代码: 审核人: 审核日期: -- 修改日期1: 修改人: 修改内容说明: 测试代码: --1、测试一次提醒select * from arp_txsz delete from arp_tx execute sp_exec_tx select * from arp_tx --2测试重复提醒 --2.1、测试重复提醒-天、一次性提醒 delete from arp_tx execute sp_exec_tx 'TXSZ-20131119-003' select * from arp_tx --2.2、测试重复提醒-天、间隔提醒 --delete from arp_tx execute sp_exec_tx 'TXSZ-20131120-001' select * from arp_tx --2.3、每周 --delete from arp_tx execute sp_exec_tx 'TXSZ-20131120-002' select * from arp_tx --2.4、每月 --delete from arp_tx execute sp_exec_tx 'TXSZ-20131120-003' select * from arp_tx 审核人: 审核日期: */ begin --select * from arp_txsz select * from arp_txszmx select * from arp_tx declare @dt10 varchar(10),-- @txsz_djbh varchar(50),--单据编号 @txsz_lx varchar(50),--提醒类型(一次提醒或者重复提醒) @txsz_yc_sj varchar(50),--一次提醒时间 @txsz_cf_pl varchar(50),--重复提醒频率(每天、每周、每月) @txsz_mtpl_lx varchar(50),--每天频率类型(提醒一次或者间隔提醒) @txsz_mtpl_yc_sj varchar(50),--每天提醒一次,提醒时间 @txsz_mtpl_jg_sl int,--每天间隔数量 @txsz_mtpl_jg_dw varchar(50),--每天间隔单位 @txsz_mzpl_zj varchar(50),--每周周几 @txsz_mypl_jh varchar(50),--每月几号 @txsz_nr varchar(500)--提醒内容 declare @sl int,--间隔数量 @sc int--是否是首次提醒 0表示首次提醒 select @sl=0,@sc=0 declare @zj varchar(10),--当前是周几 @jh varchar(10),--当前是几号 @jhCnt int,--几号个数 @ts int--当月的天数 select @dt10=CONVERT(char(10),getdate(),120) declare cur_m cursor for--select * from arp_txsz select txsz_djbh,txsz_lx,txsz_yc_sj,txsz_cf_pl,txsz_mtpl_lx,txsz_mtpl_yc_sj,txsz_mtpl_jg_sl,txsz_mtpl_jg_dw,txsz_mzpl_zj,txsz_mypl_jh,txsz_nr from arp_txsz where txsz_ksrq<=@dt10 and (txsz_zzrq>=@dt10 or isnull(txsz_zzrq,'')='') and txsz_djzt='已审核' and isnull(txsz_xtcf,'定时器')='定时器' and txsz_djbh like @djbh+'%' open cur_m fetch cur_m into @txsz_djbh,@txsz_lx,@txsz_yc_sj,@txsz_cf_pl,@txsz_mtpl_lx,@txsz_mtpl_yc_sj,@txsz_mtpl_jg_sl,@txsz_mtpl_jg_dw,@txsz_mzpl_zj,@txsz_mypl_jh,@txsz_nr while @@FETCH_STATUS=0 begin if @txsz_lx='一次提醒' begin if convert(datetime,@txsz_yc_sj)<=GETDATE() begin if exists(select txszmx_id from arp_txszmx where txszmx_djbh=@txsz_djbh) begin--提醒指定人员或角色 --插入未提醒过的人员 insert into arp_tx(tx_djbh,tx_txry,tx_txsj,tx_txnr,tx_clzt) select @txsz_djbh,username,GETDATE(),@txsz_nr,'未处理' from v_txry_list where djbh=@txsz_djbh and username not in(select tx_txry from arp_tx where tx_djbh=@txsz_djbh) end else begin--提醒所有人 ----插入未提醒过的人员 insert into arp_tx(tx_djbh,tx_txry,tx_txsj,tx_txnr,tx_clzt) select @txsz_djbh,username,GETDATE(),@txsz_nr,'未处理' from v_txry_all where username not in(select tx_txry from arp_tx where tx_djbh=@txsz_djbh) end end end if @txsz_lx='重复提醒' begin--重复提醒 if @txsz_cf_pl='每周' begin --@txsz_mzpl_zj--每周周几 select @zj=convert(varchar(10),case datepart(WEEKDAY,GETDATE()) - 1 when 0 then 7 else datepart(WEEKDAY,GETDATE()) - 1 end) if(charindex(CONVERT(varchar(1),@zj),@txsz_mzpl_zj)>0) begin select @txsz_cf_pl='每天'--转到每天 end end if @txsz_cf_pl='每月' begin ----@txsz_mypl_jh--每月几号 select @jh=datepart(DAY,GETDATE()) select @jhCnt=LEN(REPLACE(@txsz_mypl_jh,',','aa')) - LEN(@txsz_mypl_jh) select @txsz_mypl_jh=','+@txsz_mypl_jh+','--前后添加","符号 if(charindex(','+CONVERT(varchar(10),@jh)+',',@txsz_mypl_jh)>0) begin select @txsz_cf_pl='每天'--转到每天 end --如果是28号29号30号是当月的最后一天,则判断31号是否符合条件 select @ts=datepart(DAY,dateadd(dd,-1,left(convert(varchar(10),dateadd(mm,1,GETDATE()),120),7)+'-01')) if @jh=@ts and charindex(',31,',@txsz_mypl_jh)>0 begin select @txsz_cf_pl='每天'--转到每天 end end if @txsz_cf_pl='每天'--重复频率是'每天' begin if @txsz_mtpl_lx='提醒一次' begin if convert(datetime,@dt10+' '+@txsz_mtpl_yc_sj)<=GETDATE() begin if exists(select txszmx_id from arp_txszmx where txszmx_djbh=@txsz_djbh) begin--提醒指定人员或角色 --插入未提醒过的人员 insert into arp_tx(tx_djbh,tx_txry,tx_txsj,tx_txnr,tx_clzt) select @txsz_djbh,username,GETDATE(),@txsz_nr,'未处理' from v_txry_list where djbh=@txsz_djbh and username not in(select tx_txry from arp_tx where tx_djbh=@txsz_djbh) end else begin--提醒所有人 ----插入未提醒过的人员 insert into arp_tx(tx_djbh,tx_txry,tx_txsj,tx_txnr,tx_clzt) select @txsz_djbh,username,GETDATE(),@txsz_nr,'未处理' from v_txry_all where username not in(select tx_txry from arp_tx where tx_djbh=@txsz_djbh) end end end if @txsz_mtpl_lx='间隔提醒' begin select @sc= COUNT(*) from ARP_TX where TX_DJBH=@txsz_djbh if @txsz_mtpl_jg_dw='小时' begin select @sl= DATEDIFF(hour,MAX(TX_TXSJ),GETDATE()) from ARP_TX where TX_DJBH=@txsz_djbh select @sl=ISNULL(@sl,0) end if @txsz_mtpl_jg_dw='分钟' begin select @sl= DATEDIFF(MINUTE,MAX(TX_TXSJ),GETDATE()) from ARP_TX where TX_DJBH=@txsz_djbh select @sl=ISNULL(@sl,0) end if @txsz_mtpl_jg_dw='秒钟' begin select @sl= DATEDIFF(SECOND,MAX(TX_TXSJ),GETDATE()) from ARP_TX where TX_DJBH=@txsz_djbh select @sl=ISNULL(@sl,0) end if @sl>=@txsz_mtpl_jg_sl or @sc=0--@sc=0表示是当天的首次提醒 begin if exists(select txszmx_id from arp_txszmx where txszmx_djbh=@txsz_djbh) begin--提醒指定人员或角色 --插入未提醒过的人员 insert into arp_tx(tx_djbh,tx_txry,tx_txsj,tx_txnr,tx_clzt) select @txsz_djbh,username,GETDATE(),@txsz_nr,'未处理' from v_txry_list where djbh=@txsz_djbh --and username not in(select tx_txry from arp_tx where tx_djbh=@txsz_djbh) end else begin--提醒所有人 ----插入未提醒过的人员 insert into arp_tx(tx_djbh,tx_txry,tx_txsj,tx_txnr,tx_clzt) select @txsz_djbh,username,GETDATE(),@txsz_nr,'未处理' from v_txry_all --where username --not in(select tx_txry from arp_tx where tx_djbh=@txsz_djbh) end end end end end fetch cur_m into @txsz_djbh,@txsz_lx,@txsz_yc_sj,@txsz_cf_pl,@txsz_mtpl_lx,@txsz_mtpl_yc_sj,@txsz_mtpl_jg_sl,@txsz_mtpl_jg_dw,@txsz_mzpl_zj,@txsz_mypl_jh,@txsz_nr end close cur_m deallocate cur_m end