业务场景:

用户每次登录系统时,在首页公告栏以及右下角弹出窗口处可以收到系统自动发送的消息,此消息内容可以根据不同业务需要定制发送内容,接收人,接收时间等等,非常灵活有效。


基本原理:

通过向T_TIPS表中写入特定数据,即可达到发送自定义消息功能。需要说明的是,写入这个表中的数据并不是立刻发送的,而是根据表中的发送日期字段来判定,当前日期已经超过设定的发送日期才会发送。因此主要用于在未来某个时间点发送预期的消息。


实施部署步骤:

1、创建自定义标量值函数dbo.FVGetIfSendTips(BILL_NO,USER_ID),作用是判断是否已经发送过消息,输入参数为单号和用户,返回值为字符“Y、N”

2、创建发送消息的存储过程dbo.P_UF_AUTO_TIPS,作用是根据不同业务场景,写入T_TIPS表,达到定时发送的目的。此存储过程可以要参数或者不要参数,如果加上BILL_ID参数,则可以指定对某张单发送消息。不要参数,则可以统一发送消息。

3、根据需要,可以在不同的地方调用存储过程,比如审批流程节点中,在特定节点审批后发送;或者放到数据库计划任务中,每天自动发送一批。


代码范例:

--检查是否已经发送消息createFUNCTION[dbo].[FVGetIfSendTips](@BILL_NOVARCHAR(50),@USER_IDVARCHAR(50))RETURNSCHAR(1)ASBEGINDECLARE@RESULTCHAR(1)='N'IFEXISTS(SELECTTT_TOFROMT_TIPSWHERETT_BILL_NO=@BILL_NOANDTT_TO=@USER_ID)SET@RESULT='Y'RETURN@RESULTEND

--发送消息createPROC[dbo].[P_UF_AUTO_TIPS]ASBEGIN--场景1:借款到期归还INSERTINTOT_TIPS(TT_ID,TT_TO,TT_BILL_NO,TT_SUBJECT,TT_CONTENT,TT_TIPS_DATE,TT_COUNT_SUM,TT_CREATER)SELECTNEWID(),BILL_SUBMIT_USER,BILL_NO,'借款到期|'+BILL_NO,'借款单摘要:'+BILL_REMARK,BILLC_EX_DATE01,1,'借款到期'FROMTBILLBINNERJOINTBILL_CONTENTBCONBC.BILLC_BILL_ID=B.BILL_IDWHEREB.BILL_FLAGIN('JZ','CLOSE')ANDBILLC_LAMOUNT<>0ANDBILLC_EX_DATE01<>''ANDBILLC_EX_DATE01ISNOTNULLANDDBO.FVGETIFSENDTIPS(BILL_NO,BILL_SUBMIT_USER)='N'ANDBILL_TEMPLATE_TYPE='T-L'ANDBILLC_EX_DATE01>GETDATE()ORDERBYBILL_NO,BILLC_SEQ--场景2:申请流程走完提醒报销INSERTINTOT_TIPS(TT_ID,TT_TO,TT_BILL_NO,TT_SUBJECT,TT_CONTENT,TT_TIPS_DATE,TT_COUNT_SUM,TT_CREATER)SELECTNEWID(),BILL_SUBMIT_USER,BILL_NO,'申请流程走完|'+BILL_NO,'申请单摘要:'+BILL_REMARK,DATEADD("HOUR",1,DBO.FVGETLASTTIMEBYBILL(B.BILL_ID)),1,'及时报销'FROMTBILLBINNERJOINTBILL_CONTENTBCONBC.BILLC_BILL_ID=B.BILL_IDWHEREB.BILL_FLAGIN('JZ','CLOSE')--ANDCAST(DBO.FVGETLASTTIMEBYBILL(B.BILL_ID)ASDATE)=@TODAYANDDBO.FVGETIFSENDTIPS(BILL_NO,BILL_SUBMIT_USER)='N'ANDBILL_TEMPLATE_TYPEIN('T-L','T-A')ANDB.BILL_NONOTIN(SELECTDISTINCTBILL_APPLYFROMTBILLWHEREBILL_APPLY<>'')ORDERBYBILL_NO,BILLC_SEQ--场景3:有沟通信息及时查看INSERTINTOT_TIPS(TT_ID,TT_TO,TT_BILL_NO,TT_SUBJECT,TT_CONTENT,TT_TIPS_DATE,TT_COUNT_SUM,TT_CREATER)SELECTNEWID(),BILL_SUBMIT_USER,BILL_NO,('有沟通信息|'+BILL_NO),('单据摘要:'+BILL_REMARK+CHAR(10)+'沟通发起人:'+CHAT_NAME+CHAR(10)+'沟通内容:'+CHAT_CONTENT+CHAR(10)),DATEADD("DAY",1,CAST(CHAT_DATEASDATE)),1,'单据沟通'FROMTBILLBINNERJOINTCHATONBILL_ID=CHAT_BILLSWHEREB.BILL_FLAGNOTIN('NO')--ANDCAST(CHAT_DATEASDATE)=@TODAYANDDBO.FVGETIFSENDTIPS(BILL_NO,BILL_SUBMIT_USER)='N'ANDB.BILL_NONOTLIKE'%***%'ANDCHAT_NAME<>'系统管理员'ORDERBYBILL_NOEND