具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种短信发送方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的短信发送方法的流程图,如图1所示,该短信发送方法包括如下步骤:
步骤S102,获取待发送短信的参数,其中,参数包括待发送短信的预设接收时间和预设接收时区。
本发明短信发送方法的执行主体为定时器系统,该定时器系统由一个或者多个服务器组成。定时器系统中存储有一个或者多个定时任务,每个定时任务对应一个待发送短信的发送过程,该发送过程可以允许待发送短信发送失败后进行重复发送。定时器系统实时监测当前时间是否存在待执行的定时任务,即是否存在需要发送的待发送短信,如果监测到存在待执行的定时任务,将该定时任务添加至任务队列中并执行该定时任务,即发送待发送短信,从而实现待发送短信的定时发送。
待发送短信的个数为一个或者多个,每个待发送短信携带有参数,该参数用于标识待发送短信,且该参数可以根据实际需求进行设定。可选地,待发送短信的参数可以包括业务参数和内容类型参数,其中,待发送短信的业务参数为标识待发送短信业务类型的参数,待发送短信的业务类型可以包括旅游,酒店入住,火车票或者退税等业务,待发送短信的业务类型由业务方根据实际需求设定。待发送短信的内容类型参数为标识待发送短信的内容类型的参数,待发送短信的内容类型与业务类型相关,同一种类型的业务对应一种或者多种类型的内容,比如,旅游业务的内容类型可以包括旅游景点的票务信息,旅游线路信息等。
可选地,待发送短信的参数还可以包括待发送短信的预设接收时间和预设接收时区。待发送短信的预设接收时区为预设的接收待发送短信的地区所在的时区。全球按经度划分为24个时区,每个时区各占15度,时间为1个小时。以格林尼治天文台为零时区,由零时区向东、向西分12区,其中,东12区和西12区为半时区,东区的时间早于西区的时间。确定某地区所在的时区需要首先确定该地区所在的经度,然后用该地区所在的经度除以15得到该地区所在的时区,其中,余数四舍五入。预设接收时间为预先设置的在预设接收时区接收待发送短信的时间。
可选地,待发送短信的参数中还可以包括短信重发设置参数,其中,短信重发设置参数用于标识待发送短信发送失败后是否进行重新发送。短信重发设置参数的取值为第一数值或者第二数值,第一数值代表待发送短信发送失败之后允许重新发送,第二数值代表待发送短信发送失败后不允许重新发送。该短信重发设置参数的取值可以为“1”或者“0”,其中,“1”代表待发送短信发送失败后允许重新发送;“0”代表待发送短信发送失败后不允许重新发送。该短信重发设置参数的取值也可以是“是”或者“否”,“是”代表待发送短信发送失败后允许重新发送;“否”代表待发送短信发送失败后不允许重新发送。
待发送短信的参数中还可以包括其他参数设置项,比如预设重发次数,短信模板标识等,待发送短信的参数中的参数设置项可以根据实际需求进行增加或者删除。
步骤S104,根据预设接收时间和预设接收时区计算待发送短信在发送时区的发送时间。
在获取到待发送短信的参数中预设接收时间和预设接收时区之后,该实施例的短信发送方法可以根据预设接收时间和预设接收时区计算待发送短信在发送时区的发送时间,以便于在发送时区实时监测发送时间,在发送时间执行待发送短信的定时发送。该实施例的短信发送方法并不局限与短信发送方和短信接收方不在同一时区的情形,对于短信发送方和短信接收方在同一个时区的情形,该实施例的短信发送方法同样适用。当待发送短信的预设接收时区和发送时区相同时,待发送短信的发送时间与预设接收时间相同,不存在时差;当待发送短信的预设接收时区和发送时区不相同时,待发送短信的发送时间与预设接收时间不相同,存在时差,此时需要根据预设接收时间和预设接收时区计算待发送短信在发送时区的发送时间。
可选地,该实施例的短信发送方法按照以下步骤根据预设接收时间和预设接收时区计算待发送短信在发送时区的发送时间:
步骤S1:计算预设接收时区与发送时区的时区差。首先分别确定待发送短信的预设接收方和待发送短信的发送方所在时区,即预设接收时区和发送时区,然后计算预设接收时区和发送时区的时区差。比如,如果预设接收时区为东8区,发送时区为西2区,则两者的时区差为10小时;如果预设接收时区为东8区,发送时区为东2区,则两者的时区差为6小时;如果预设接收时区为西8区,发送时区为西2区,则两者的时区差为6小时。
步骤S2:判断发送时区是否位于预设接收时区的东面,其中,如果判断出发送时区位于预设接收时区的东面,执行步骤S3;如果判断出发送时区位于预设接收时区的西面,执行步骤S4。
步骤S3:计算预设接收时间与时区差的和,并将预设接收时间与时区差的和作为发送时区的发送时间。
步骤S4:计算预设接收时间与时区差的差,并将预设接收时间与时区差的差作为发送时区的发送时间。
该实施例的短信发送方法的短信发送主体,即定时器系统位于发送时区,在根据预设接收时间和预设接收时区计算待发送短信在发送时区的发送时间之后,定时器系统会根据该发送时间生成一条定时任务,并实时监测当前时间是否存在待执行的定时任务,当监测到当前时间存在待执行的定时任务时,立即执行该定时任务,将待发送短信发送出去。
可选地,待发送短信的参数还可以包括短信模板标识和短信数据,其中,短信模板标识用于标识不同的短信模板,不同业务类型对应的短信模板可以相同,也可以不同。短信数据为待发送短信的实体内容,短信数据可以用键值对的形式表示。待发送短信的参数可以预先存储在预设数据库中,并且在预设数据库中为每个待发送短信分配有唯一的标识符,该标识符用于标识预设数据库中不同的待发送短信,定时器系统可以从预设数据库中查找待发送短信的参数。需要注意的是,如果业务方需要重新设置待发送短信的参数,可以将预设数据库中的待发送短信的参数进行相应的修改,并将修改后的待发送短信的参数对原来的待发送短信的参数进行更新。预设数据库也可以支持新建一个待发送短信的参数,并为新建的待发送短信的参数分配唯一的标识符。
在定时发送待发送短信之前,需要根据获取的预先设置的待发送短信的参数生成待发送短信的内容。可选地,该实施例的短信发送方法可以根据短信模板标识从预设数据库中查找短信模板,其中,预设数据库中预先存储有短信模板标识、短信模板以及短信模板标识与短信模板的映射关系;以及将短信数据添加至短信模板中,生成待发送短信,即生成实际发送的待发送短信的内容。可选地,当待发送短信的参数中未设置短信模板标识时,该实施例的短信发送方法还可以根据待发送短信的内容类型参数和业务参数确定预先存储在预设数据库中的短信模板,并将短信数据添加至短信模板中,从而生成待发送短信,即生成实际发送的待发送短信的内容。该实施例的短信发送方法通过设置参数,使得业务方不需要设置具体的短信内容就能够实现定时发送具体的短信,极大地提高了业务方的处理效率。
步骤S106,在发送时区的发送时间发送待发送短信。
定时器系统实时监测当前时间是否存在待执行的定时任务,当监测到当前时间为待发送短信的发送时间时,定时器系统将调用短信上行接口立即发送生成的待发送短信,该短信上行接口在发送待发送短信之后会得到发送返回结果,根据该返回结果可以判断待发送短信是否发送成功。如果待发送短信发送成功,则将该待发送短信对应的定时任务从任务队列中删除,定时器系统将不再执行对该定时任务的监测。如果待发送短信发送失败,定时器系统需要根据待发送短信的参数中的短信重发设置参数决定是否需要重新发送该待发送短信,其中,如果短信重发设置参数的取值为第一数值,则定时器系统将会重新发送该待发送短信,如果短信重发设置参数的取值为第二数值,则定时器系统将不会重新发送该待发送短信,而是直接将该待发送短信对应的定时任务删除,开始执行定时发送下一个待发送短信。
如果待发送短信的参数中的短信重发设置参数的取值为第一数值,在发送时区的发送时间发送待发送短信失败之后,按照时间间隔重新发送待发送短信。如果重新发送待发送短信再次发送失败,则继续按照时间间隔重新发送待发送短信,重复循环该过程直至达到预设条件才结束循环,该预设条件可以是待发送短信发送成功或者是重发次数超过预设重发次数,其中,预设重发次数为待发送短信中的参数,预先存储在预设数据库中,且预设重发次数可以根据实际需求进行调整。需要注意的是,待发送短信的重发过程中,每次重发待发送短信的时间间隔可以相同,即每隔固定时间间隔重新发送待发送短信,每次重发待发送短信的时间间隔也可以不同,即随着重发次数的增加,重发待发送短信的时间间隔会发生变化,比如随着重发次数的增加,重发待发送短信的时间间隔变长。
可选地,在发送时区的发送时间发送待发送短信失败之后,该实施例的短信发送方法还包括:按照预设策略重新发送待发送短信,其中,预设策略包括:根据重发次数选择发送待发送短信的时间间隔。根据重发次数选择发送待发送短信的时间间隔包括以下至少之一:
(1)在重发次数未超过预设重发次数时,采用第一时间间隔发送待发送短信。其中,当重发次数为1时,第一时间间隔为第一预设时间间隔;当重发次数超过1且未超过预设重发次数时,第一时间间隔为:T=tN-t(N-1),其中,T为第一时间间隔,t为第一预设时间间隔,N为重发次数。在重发次数未超过预设重发次数时,采用第一时间间隔发送待发送短信可以包括以下步骤:
步骤S5:在发送时区的发送时间发送待发送短信之后,判断待发送短信是否发送成功,其中,如果判断出待发送短信发送成功,执行步骤S8,如果判断出待发送短信发送失败,执行步骤S6。
步骤S6:按照第一时间间隔重发待发送短信,其中,第一时间间隔的确定方法如上所述,执行步骤S7。
步骤S7:将重发次数加1,重发次数的初始值为0,并判断重发次数是否超过预设重发次数,其中,如果判断出重发次数未超过预设重发次数,则返回执行步骤S5;如果判断出重发次数超过预设重发次数,则执行步骤S9。
步骤S8:停止发送待发送短信。
步骤S9:采用第二时间间隔发送待发送短信。
比如,预设重发次数为3,第一预设时间间隔为3分钟,则第一次重发待发送短信的时间间隔为3分钟;如果第一次重发待发送短信失败,则第二次重发待发送短信的时间间隔为32-31=6分钟;如果第二次重发待发送短信失败,则第三次重发待发送短信的时间间隔为33-32=16分钟。如果第三次重发待发送短信失败,此时,如果继续重发待发送短信,重发次数将会超过预设重发次数,则该实施例的短信发送方法将会采用第二时间间隔发送待发送短信。
该实施例的短信发送方法采用不等时间间隔重发待发送短信,有利于定时器系统在待发送短信的数据量较大时,能充分保证定时器系统的处理效率。
(2)在重发次数超过预设重发次数时,采用第二时间间隔发送待发送短信。采用第二时间间隔发送待发送短信可以包括以下步骤:
步骤S10:将待发送短信添加至发送失败队列,并记录待发送短信在发送失败队列中的发送失败次数,其中,发送失败次数的默认值为0。
步骤S11:每隔第二时间间隔从发送失败队列中读取一次待发送短信,并发送待发送短信,其中,第二时间间隔为固定的时间间隔,具体数值可以根据实际需求设定,比如2分钟。
步骤S12:判断待发送短信是否发送成功,如果判断出待发送短信发送成功,则执行步骤S15;如果判断出待发送短信发送失败,则执行步骤S13。
步骤S13:将待发送短信重新添加至发送失败队列中,并将发送失败次数加1。
步骤S14:判断发送失败次数是否达到预设发送失败次数,其中,预设发送失败次数为预先设置的次数,待发送短信的参数中可以包括该预设发送失败次数,如果判断出发送失败次数超过预设发送失败次数,则执行步骤S15;如果判断出发送失败次数未超过预设发送失败次数,则返回继续执行步骤S11。
步骤S15:停止发送待发送短信。
比如,预设重发次数为3,预设发送失败次数为2,第一预设时间间隔为3分钟,第二时间间隔为2分钟。如果在发送时区的发送时间发送待发送短信失败,则第一次重发待发送短信的时间间隔为3分钟;如果第一次重发待发送短信失败,则第二次重发待发送短信的时间间隔为32-31=6分钟;如果第二次重发待发送短信失败,则第三次重发待发送短信的时间间隔为33-32=16分钟。如果第三次重发待发送短信失败,则将待发送短信添加至发送失败队列中,并记录发送失败次数为0;然后隔2分钟从发送失败队列中读取并重发待发送短信,如果重发失败,则将待发送短信重新添加至发送失败队列,此时发送失败次数为1(未超过预设发送失败次数2);然后隔2分钟再次从发送失败队列中读取并重发待发送短信,如果重发失败,则将待发送短信重新添加至发送失败队列,此时发送失败次数为2(未超过预设发送失败次数2);然后隔2分钟再次从发送失败队列中读取并重发待发送短信,如果重发失败,则将待发送短信重新添加至发送失败队列,此时发送失败次数为3(超过预设发送失败次数2),则将待发送短信从失败队列中删除,停止发送待发送短信。
该实施例的短信发送方法按照预设策略重新发送待发送短信,其中,预设策略包括:根据重发次数选择发送待发送短信的时间间隔,在重发次数未超过预设重发次数时,采用第一时间间隔发送待发送短信;在重发次数超过预设重发次数时,采用第二时间间隔发送待发送短信,达到了提高待发送短信的发送成功率的技术效果,同时提高了定时器系统的处理效率。
可选地,该实施例的短信发送方法采用两个不同的进程分别监控任务队列和发送失败队列中的定时任务。定时器系统采用第一进程监控任务队列中的定时任务,当任务队列中的定时任务满足预设条件(重发次数超过预设重发次数)时,将清除任务队列中待发送短信对应的定时任务,并将该待发送短信发送至发送失败队列,此时,第一进程将不再监控待发送短信对应的定时任务,开始监控下一个待发送短信对应的定时任务。当待发送短信添加至发送失败队列中时,定时器系统启动第二个进程对待发送短信进行监控,直至该待发送短信发送成功或者待发送短信的发送失败次数超过预设发送失败次数从发送失败队列中删除之后,第二进程接收对待发送短信的监控,开始对下一个待发送短信进行监控。该实施例的短信发送方法采用两个不同的进程监控任务队列和发送失败队列中的定时任务,有利于提高定时器系统的处理效率,优化定时器系统的性能。
该实施例的短信发送方法不仅适用于短信的发送,还可以适用于邮件等其他类型短信的发送。
该实施例的短信发送方法根据待发送短信参数中的预设接收时间和预设接收时区,可以计算得到发送时区的发送时间,并在发送时区的发送时区发送待发送短信。通过该实施例的短信发送方法解决了现有技术无法实现短信跨时区的定时发送的问题,达到了提高用于体验,扩大短信定时发送的适用范围的技术效果。
根据本发明实施例,还提供了一种短信发送装置实施例,需要说明的是,该实施例的短信发送装置可以用于执行本发明实施例的短信发送方法,本发明实施例的短信发送方法可以在本发明实施例的短信发送装置中执行。
图2是根据本发明实施例的短信发送装置的示意图,如图2所示,该短信发送装置包括:
获取模块10,用于获取待发送短信的参数,其中,参数中包括待发送短信的预设接收时间和预设接收时区,预设接收时间为预先设置的在预设接收时区接收待发送短信的时间。
可选地,参数还包括短信重发设置参数,其中,短信重发设置参数的取值为第一数值或者第二数值,第一数值代表待发送短信发送失败之后允许重新发送,第二数值代表待发送短信发送失败后不允许重新发送。
计算模块20,用于根据预设接收时间和预设接收时区计算待发送短信在发送时区的发送时间。
可选地,计算模块20包括:第一计算子模块,用于计算预设接收时区与发送时区的时区差;第三判断模块,用于判断发送时区是否位于预设接收时区的东面;第一确定子模块,用于当判断出发送时区位于预设接收时区的东面时,发送时区的发送时间为预设接收时间与时区差的和;以及第二确定子模块,用于当判断出发送时区位于预设接收时区的西面时,发送时区的发送时间为预设接收时间与时区差的差。
可选地,参数还包括短信模板标识和短信数据,短信发送装置还包括:查找模块,用于根据短信模板标识从预设数据库中查找短信模板,其中,预设数据库中预先存储有短信模板标识、短信模板以及短信模板标识与短信模板的映射关系;以及生成模块,用于将短信数据添加至短信模板中,生成待发送短信。
发送模块30,用于在发送时区的发送时间发送待发送短信。
可选地,该实施例的短息发送装置还包括:重发模块,用于按照预设策略重新发送待发送短信,其中,预设策略包括:根据重发次数选择发送待发送短信的时间间隔。
可选地,参数还包括预设重发次数,重发模块包括以下至少之一:第一发送子模块,用于在重发次数未超过预设重发次数时,采用第一时间间隔发送待发送短信;第二发送子模块,用于在重发次数超过预设重发次数时,采用第二时间间隔发送待发送短信。其中,当重发次数为1时,第一时间间隔为第一预设时间间隔;当重发次数超过1且未超过预设重发次数时,第一时间间隔为:T=tN-t(N-1),其中,T为第一时间间隔,t为第一预设时间间隔,N为重发次数。
可选地,第二发送子模块包括:添加模块,用于将待发送短信添加至发送失败队列,并记录待发送短信在发送失败队列中的发送失败次数,其中,发送失败次数的默认值为0;读取模块,用于每隔第二时间间隔从发送失败队列中读取一次待发送短信,并发送待发送短信;第一判断模块,用于判断待发送短信是否发送成功;以及重新添加模块,用于当判断出待发送短信发送失败时,将待发送短信重新添加至发送失败队列中,并将发送失败次数加1。
可选地,第二发送子模块还包括:第二判断模块,用于判断发送失败次数是否达到预设发送失败次数;停止发送模块,用于当判断出发送失败次数达到预设发送失败次数时,停止发送待发送短信;以及循环模块,用于当判断出发送失败次数未达到预设发送失败次数时,继续执行每隔第二时间间隔从发送失败队列中读取一次待发送短信,并发送待发送短信。
该实施例的短信发送装置通过获取模块10获取待发送短信的参数,并从参数中获取预设接收时间和预设接收时区,通过计算模块20根据预设接收时间和预设接收时区计算待发送短信在发送时区的发送时间,以及通过发送模块30将待发送短信在发送时区的发送时间进行发送。通过该实施例的短信发送装置,解决了现有技术无法实现短信跨时区的定时发送的问题,达到了提高用于体验,扩大短信定时发送的适用范围的技术效果。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。