最近做了1些与短信相干的工作,在这里做1个学习的梳理,愿与您共同分享学习。要完成1个短信接口需要完成这样几件事儿:模板管理、接口管理、拼接接口数据
模板管理:最基本的对短信进行增删该查;第2,将可变元素抽成变量,并进行管理。这个模块1般的第3方会提供1个短信管理后台,但是如果第3方不提供的话则需要我们自己去做1个短信模板啦。
接口管理:1般第3方提供socket接口,WebService接口,Http接口,根据需要选择1种进行开发。
拼接接口数据:可将接口数据拼接在接口表中,这样在接口的业务逻辑中只需要专注与挨个发送了!
回执:回执的处理其实也是根据公司的不同需求来定的,简单点儿就是直接将回执日志写入数据库表中,解析出回执状态就能够了!
设计:
最主要的3张表:模版表,接口表,回执日志表
模版表:将所有预测可能变化的地方都抽成了变量,图片中拼音部份则是我抽出来的变量。

接口表:主要是以模版表为基础,并给变量赋值,例以下图中姓名,公司名称,日期都是由原来的变量赋值而来,具体如何给变量赋值,下面给了两个sql语句作为参考。

sql:
<insert id="insertBirthday" parameterType="java.util.Map">
insert into sms_newinterface(id,template_name,template_content,tel_phone,operator)
select
SEQ_SMS_NEWINTERFACE.NEXTVAL,replace(replace(template_content,'gsmc',company_name),'khmc',name) template_content,#{operator}
from(
select
fcc.id,fcc.name,fcc.Tel_Phone tel_phone,to_char(to_date(fcc.birthday,'yyyy-mm-dd'),'MM-DD') birthday,(select tsdd.FLAG from t_sys_data_dictionary tsdd where tsdd.type='公司名称')company_name,(select sn.content from sms_newtemplate sn where sn.name='生日祝愿' and sn.state='0')template_content,(select smnt.name from sms_newtemplate smnt where 1=1 and smnt.name='生日祝愿' and smnt.state='0')template_name
from
FIL_CUST_CLIENT fcc
where 1=1
and to_char(to_date(fcc.birthday,'MM-DD') = to_char(Sysdate,'MM-DD')
) snt
where 1=1
</insert>
回执日志表:只做了对回执信息的记录而已。Status是对回执信息中的发送状态的1个解析。

开发:
在前面的设计基础上,接下来要做的就是1些业务逻辑的开发了
WebService 接口:
public Boolean getAllSMSToSend() {
Logger log= Logger.getLogger(NewSmsService.class);
List<Map<String,Object>> list=Dao.selectList(xmlPath+"getAllSMSToSend");
JaxWsDynamicClientFactory factory=JaxWsDynamicClientFactory.newInstance();
Client client =factory.createClient("http://121.41.63.15/websend/mainservice.asmx?wsdl");
Object[] result = null;
String sName="企业用户名";
String sPsd="企业帐号密码";
String sdst="手机号码";
String smsg="短信内容";
String stime="";
String sexno="";
String islong="";
String sequnceId="";
try {
if(list.size()>0){
for(int i=0;i<list.size();i++){
if(list.get(i).get("TEMPLATE_NAME").equals("节日")){
sdst=list.get(i).get("TEL_PHONE").toString().replace(",",";").toString();
smsg=list.get(i).get("TEMPLATE_CONTENT").toString();
}else if(list.get(i).get("TEMPLATE_NAME").equals("生日祝愿")){
sdst=list.get(i).get("TEL_PHONE").toString().replace(",";").toString();
smsg=list.get(i).get("TEMPLATE_CONTENT").toString();
}else if(list.get(i).get("TEMPLATE_NAME").equals("春节")){
sdst=list.get(i).get("TEL_PHONE").toString().replace(",";").toString();
smsg=list.get(i).get("TEMPLATE_CONTENT").toString();
}else if(list.get(i).get("TEMPLATE_NAME").equals("元旦")){
sdst=list.get(i).get("TEL_PHONE").toString().replace(",";");
smsg=list.get(i).get("TEMPLATE_CONTENT").toString();
}else if(list.get(i).get("TEMPLATE_NAME").equals("逾期提示")){
sdst=list.get(i).get("TEL_PHONE").toString().replace(",";");
smsg=list.get(i).get("TEMPLATE_CONTENT").toString();
}else if(list.get(i).get("TEMPLATE_NAME").equals("还款提示")){
sdst=list.get(i).get("TEL_PHONE").toString().replace(",";");
smsg=list.get(i).get("TEMPLATE_CONTENT").toString();
}
//返回结果result数据:[num=1&success=18230168878,&faile=&err=发送成功&errid=0]
result = client.invoke("Masssend1",sName,sPsd,sdst,smsg,stime,sexno,islong,sequnceId);
log.info(result);
}
}else{
log.info("没有需要发送的短息");
}
} catch (Exception e) {
log.error(" webservice authenticate faild ",e);
e.printStackTrace();
return false;
}
return true;
}
Http接口:
public Boolean getAllSMSToSendByHttp() {
String url = "http://api.********.net:8080/sms/send";// 利用地址
Map<String,String> map =null;
String statusStr="";
Map<String,String> resultMap=new HashMap<String,String>();
Boolean flag=true;
try {
List<Map<String,Object>> list=Dao.selectList(xmlPath+"getAllSMSToSendForHttp");
for(int i=0;i<list.size();i++){
map = new HashMap<String,String>();
map.put("name","企业用户名");
map.put("pswd","企业账户密码~");
map.put("mobile",list.get(i).get("TEL_PHONE").toString());
map.put("msg",list.get(i).get("TEMPLATE_CONTENT").toString());//用自己的内容白名单做测试
map.put("needstatus",String.valueOf(true));
map.put("sender",null);
map.put("type","json");
//发送短信
String returnString = send(url,map);
String[] arr=returnString.split(",");
if(!arr[1].isEmpty() && !"".equals(arr[1])){
String[] ar=arr[1].split(":");
if(ar.length!=0){
statusStr=ar[1].toString();
}
}
//处理返回结果
resultMap.put("return_log",returnString);
resultMap.put("status",statusStr );
int in=Dao.insert(xmlPath+"insertInterfaceLog",resultMap);
if(in<=0){
flag=false;
return flag;
}
}
} catch (Exception e) {
flag=false;
e.printStackTrace();
return flag;
}
return flag;
}
private String send(String url,Map<String,String> map) {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost(url);
List<NameValuePair> params = new ArrayList<NameValuePair>();
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String name = it.next();
params.add(new BasicNameValuePair(name,map.get(name)));
}
try {
httppost.setEntity(new UrlEncodedFormEntity(params,StandardCharsets.UTF_8));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity,StandardCharsets.UTF_8);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
Socket接口:
Socket由于我没有开发,所以这里就展现了。
到这里,短信已算是完成大半了。但这也只是针对1些普通的短信,如验证码等类型的短信,如果你也需要像我1样的需要发送1些过年过节的祝愿短信的话,还有1些复杂的工作需要做,最最少的是要提供1些计算时间的工具类,这里参考性的提供两个函数:
第1步创建1个表,并插入数据:
CREATE TABLE SolarData
(
YearID INTEGER NOT NULL,-- 农历年
DATA CHAR(7) NOT NULL,-- 农历年对应的16进制数
DataInt INTEGER NOT NULL -- 农历年对应的10进制数
);
INSERT INTO SolarData VALUES(1900,'0x04bd8',19416);
INSERT INTO SolarData VALUES(1901,'0x04ae0',19168);
INSERT INTO SolarData VALUES(1902,'0x0a570',42352);
INSERT INTO SolarData VALUES(1903,'0x054d5',21717);
INSERT INTO SolarData VALUES(1904,'0x0d260',53856);
INSERT INTO SolarData VALUES(1905,'0x0d950',55632);
INSERT INTO SolarData VALUES(1906,'0x16554',91476);
INSERT INTO SolarData VALUES(1907,'0x056a0',22176);
INSERT INTO SolarData VALUES(1908,'0x09ad0',39632);
INSERT INTO SolarData VALUES(1909,'0x055d2',21970);
INSERT INTO SolarData VALUES(1910,19168);
INSERT INTO SolarData VALUES(1911,'0x0a5b6',42422);
INSERT INTO SolarData VALUES(1912,'0x0a4d0',42192);
INSERT INTO SolarData VALUES(1913,'0x0d250',53840);
INSERT INTO SolarData VALUES(1914,'0x1d255',119381);
INSERT INTO SolarData VALUES(1915,'0x0b540',46400);
INSERT INTO SolarData VALUES(1916,'0x0d6a0',54944);
INSERT INTO SolarData VALUES(1917,'0x0ada2',44450);
INSERT INTO SolarData VALUES(1918,'0x095b0',38320);
INSERT INTO SolarData VALUES(1919,'0x14977',84343);
INSERT INTO SolarData VALUES(1920,'0x04970',18800);
INSERT INTO SolarData VALUES(1921,'0x0a4b0',42160);
INSERT INTO SolarData VALUES(1922,'0x0b4b5',46261);
INSERT INTO SolarData VALUES(1923,'0x06a50',27216);
INSERT INTO SolarData VALUES(1924,'0x06d40',27968);
INSERT INTO SolarData VALUES(1925,'0x1ab54',109396);
INSERT INTO SolarData VALUES(1926,'0x02b60',11104);
INSERT INTO SolarData VALUES(1927,'0x09570',38256);
INSERT INTO SolarData VALUES(1928,'0x052f2',21234);
INSERT INTO SolarData VALUES(1929,18800);
INSERT INTO SolarData VALUES(1930,'0x06566',25958);
INSERT INTO SolarData VALUES(1931,'0x0d4a0',54432);
INSERT INTO SolarData VALUES(1932,'0x0ea50',59984);
INSERT INTO SolarData VALUES(1933,'0x06e95',28309);
INSERT INTO SolarData VALUES(1934,'0x05ad0',23248);
INSERT INTO SolarData VALUES(1935,11104);
INSERT INTO SolarData VALUES(1936,'0x186e3',100067);
INSERT INTO SolarData VALUES(1937,'0x092e0',37600);
INSERT INTO SolarData VALUES(1938,'0x1c8d7',116951);
INSERT INTO SolarData VALUES(1939,'0x0c950',51536);
INSERT INTO SolarData VALUES(1940,54432);
INSERT INTO SolarData VALUES(1941,'0x1d8a6',120998);
INSERT INTO SolarData VALUES(1942,'0x0b550',46416);
INSERT INTO SolarData VALUES(1943,22176);
INSERT INTO SolarData VALUES(1944,'0x1a5b4',107956);
INSERT INTO SolarData VALUES(1945,'0x025d0',9680);
INSERT INTO SolarData VALUES(1946,'0x092d0',37584);
INSERT INTO SolarData VALUES(1947,'0x0d2b2',53938);
INSERT INTO SolarData VALUES(1948,'0x0a950',43344);
INSERT INTO SolarData VALUES(1949,'0x0b557',46423);
INSERT INTO SolarData VALUES(1950,'0x06ca0',27808);
INSERT INTO SolarData VALUES(1951,46416);
INSERT INTO SolarData VALUES(1952,'0x15355',86869);
INSERT INTO SolarData VALUES(1953,'0x04da0',19872);
INSERT INTO SolarData VALUES(1954,'0x0a5d0',42448);
INSERT INTO SolarData VALUES(1955,'0x14573',83315);
INSERT INTO SolarData VALUES(1956,'0x052d0',21200);
INSERT INTO SolarData VALUES(1957,'0x0a9a8',43432);
INSERT INTO SolarData VALUES(1958,'0x0e950',59728);
INSERT INTO SolarData VALUES(1959,'0x06aa0',27296);
INSERT INTO SolarData VALUES(1960,'0x0aea6',44710);
INSERT INTO SolarData VALUES(1961,'0x0ab50',43856);
INSERT INTO SolarData VALUES(1962,'0x04b60',19296);
INSERT INTO SolarData VALUES(1963,'0x0aae4',43748);
INSERT INTO SolarData VALUES(1964,42352);
INSERT INTO SolarData VALUES(1965,'0x05260',21088);
INSERT INTO SolarData VALUES(1966,'0x0f263',62051);
INSERT INTO SolarData VALUES(1967,55632);
INSERT INTO SolarData VALUES(1968,'0x05b57',23383);
INSERT INTO SolarData VALUES(1969,22176);
INSERT INTO SolarData VALUES(1970,'0x096d0',38608);
INSERT INTO SolarData VALUES(1971,'0x04dd5',19925);
INSERT INTO SolarData VALUES(1972,'0x04ad0',19152);
INSERT INTO SolarData VALUES(1973,42192);
INSERT INTO SolarData VALUES(1974,'0x0d4d4',54484);
INSERT INTO SolarData VALUES(1975,53840);
INSERT INTO SolarData VALUES(1976,'0x0d558',54616);
INSERT INTO SolarData VALUES(1977,46400);
INSERT INTO SolarData VALUES(1978,'0x0b5a0',46496);
INSERT INTO SolarData VALUES(1979,'0x195a6',103846);
INSERT INTO SolarData VALUES(1980,38320);
INSERT INTO SolarData VALUES(1981,'0x049b0',18864);
INSERT INTO SolarData VALUES(1982,'0x0a974',43380);
INSERT INTO SolarData VALUES(1983,42160);
INSERT INTO SolarData VALUES(1984,'0x0b27a',45690);
INSERT INTO SolarData VALUES(1985,27216);
INSERT INTO SolarData VALUES(1986,27968);
INSERT INTO SolarData VALUES(1987,'0x0af46',44870);
INSERT INTO SolarData VALUES(1988,'0x0ab60',43872);
INSERT INTO SolarData VALUES(1989,38256);
INSERT INTO SolarData VALUES(1990,'0x04af5',19189);
INSERT INTO SolarData VALUES(1991,18800);
INSERT INTO SolarData VALUES(1992,'0x064b0',25776);
INSERT INTO SolarData VALUES(1993,'0x074a3',29859);
INSERT INTO SolarData VALUES(1994,59984);
INSERT INTO SolarData VALUES(1995,'0x06b58',27480);
INSERT INTO SolarData VALUES(1996,'0x055c0',21952);
INSERT INTO SolarData VALUES(1997,43872);
INSERT INTO SolarData VALUES(1998,'0x096d5',38613);
INSERT INTO SolarData VALUES(1999,37600);
INSERT INTO SolarData VALUES(2000,'0x0c960',51552);
INSERT INTO SolarData VALUES(2001,'0x0d954',55636);
INSERT INTO SolarData VALUES(2002,54432);
INSERT INTO SolarData VALUES(2003,'0x0da50',55888);
INSERT INTO SolarData VALUES(2004,'0x07552',30034);
INSERT INTO SolarData VALUES(2005,22176);
INSERT INTO SolarData VALUES(2006,'0x0abb7',43959);
INSERT INTO SolarData VALUES(2007,9680);
INSERT INTO SolarData VALUES(2008,37584);
INSERT INTO SolarData VALUES(2009,'0x0cab5',51893);
INSERT INTO SolarData VALUES(2010,43344);
INSERT INTO SolarData VALUES(2011,'0x0b4a0',46240);
INSERT INTO SolarData VALUES(2012,'0x0baa4',47780);
INSERT INTO SolarData VALUES(2013,'0x0ad50',44368);
INSERT INTO SolarData VALUES(2014,'0x055d9',21977);
INSERT INTO SolarData VALUES(2015,'0x04ba0',19360);
INSERT INTO SolarData VALUES(2016,'0x0a5b0',42416);
INSERT INTO SolarData VALUES(2017,'0x15176',86390);
INSERT INTO SolarData VALUES(2018,'0x052b0',21168);
INSERT INTO SolarData VALUES(2019,'0x0a930',43312);
INSERT INTO SolarData VALUES(2020,'0x07954',31060);
INSERT INTO SolarData VALUES(2021,27296);
INSERT INTO SolarData VALUES(2022,44368);
INSERT INTO SolarData VALUES(2023,'0x05b52',23378);
INSERT INTO SolarData VALUES(2024,19296);
INSERT INTO SolarData VALUES(2025,'0x0a6e6',42726);
INSERT INTO SolarData VALUES(2026,'0x0a4e0',42208);
INSERT INTO SolarData VALUES(2027,53856);
INSERT INTO SolarData VALUES(2028,'0x0ea65',60005);
INSERT INTO SolarData VALUES(2029,'0x0d530',54576);
INSERT INTO SolarData VALUES(2030,'0x05aa0',23200);
INSERT INTO SolarData VALUES(2031,'0x076a3',30371);
INSERT INTO SolarData VALUES(2032,38608);
INSERT INTO SolarData VALUES(2033,'0x04bd7',19415);
INSERT INTO SolarData VALUES(2034,19152);
INSERT INTO SolarData VALUES(2035,42192);
INSERT INTO SolarData VALUES(2036,'0x1d0b6',118966);
INSERT INTO SolarData VALUES(2037,53840);
INSERT INTO SolarData VALUES(2038,'0x0d520',54560);
INSERT INTO SolarData VALUES(2039,'0x0dd45',56645);
INSERT INTO SolarData VALUES(2040,46496);
INSERT INTO SolarData VALUES(2041,'0x056d0',22224);
INSERT INTO SolarData VALUES(2042,'0x055b2',21938);
INSERT INTO SolarData VALUES(2043,18864);
INSERT INTO SolarData VALUES(2044,'0x0a577',42359);
INSERT INTO SolarData VALUES(2045,42160);
INSERT INTO SolarData VALUES(2046,'0x0aa50',43600);
INSERT INTO SolarData VALUES(2047,'0x1b255',111189);
INSERT INTO SolarData VALUES(2048,'0x06d20',27936);
INSERT INTO SolarData VALUES(2049,'0x0ada0',44448);
COMMIT;
第2步:履行以下两个时间的转换函数
函数1:将阳历转换为阴历的函数
CREATE OR REPLACE FUNCTION f_GetLunar(i_SolarDay DATE)
RETURN VARCHAR2
-- 功能:计算阳历1900/01/31 - 2050/01/22间某1天对应的阴历是多少
-- 算法:在1张表中用10进制格式保存某个农历年每个月大小,有没有闰月,闰月大小信息
-- 1.用12个2进制位来表示某个农历年每个月的大小,大月记为1,否则为0
-- 2.用低4位来表示闰月的月份,没有闰月记为0
-- 3.用1个高位表示闰月的大小,闰月大记为0,闰月小或无闰月记为0
-- 4.再将该2进制数转化为10进制,存入表中
-- 农历2000年: 0 110010010110 0000 -> 0x0c960 -> 51552
-- 农历2001年: 0 110110010101 0100 -> 0x0d954 -> 55636
-- 采取查表的方式计算出农历日期
-- 作者:Angel_XJW
-- 修改:1.
-- 2.
AS
v_OffSet INT;
v_Lunar INT; -- 农历年是不是含闰月,几月是闰月,闰月天数,其它月天数
v_YearDays INT; -- 农历年所含天数
v_MonthDays INT; -- 农历月所含天数
v_LeapMonthDays INT; -- 农历闰月所含天数
v_LeapMonth INT; -- 农历年闰哪一个月 1⑴2,没闰传回 0
v_LeapFlag INT; -- 某农历月是不是为闰月 1:是 0:不是
v_MonthNo INT; -- 某农历月所对应的2进制数 如农历3月: 001000000000
i INT;
j INT;
k INT;
v_Year INT; -- i_SolarDay 对应的农历年
v_Month INT; -- i_SolarDay 对应的农历月
v_Day INT; -- i_SolarDay 对应的农历日
o_OutputDate VARCHAR2(125); -- 返回值 格式:农历 ****年 **(闰)月 **日
e_ErrMsg VARCHAR2(200);
e_ErrDate EXCEPTION;
BEGIN
--输入参数判断
IF i_SolarDay<TO_DATE('1900-01⑶1','YYYY-MM-DD') OR i_SolarDay>=TO_DATE('2050-01⑵3','YYYY-MM-DD') THEN
RAISE e_ErrDate;
END IF ;
-- i_SolarDay 到 1900-01⑶0(即农历1900-01-01的前1天) 的天数
v_OffSet := TRUNC(i_SolarDay,'DD') - TO_DATE('1900-01⑶0','YYYY-MM-DD');
-- 肯定农历年开始
i := 1900;
WHILE i < 2050 AND v_OffSet > 0 LOOP
v_YearDays := 348; -- 29*12 以每一年12个农历月,每一个农历月含29个农历日为基数
v_LeapMonthDays := 0;
-- 取出农历年是不是含闰月,其它月天数
-- 如农历2001年: 0x0d954(16进制) -> 55636(10进制) -> 0 110110010101 0100(2进制)
-- 1,2,4,5,8,10,12月大,3,6,7,9,11月小,4月为闰月,闰月小
SELECT DataInt INTO v_Lunar FROM SolarData WHERE YearId = i;
-- 传回农历年的总天数
j := 32768; -- 100000000000 0000 -> 32768
-- 0 110110010101 0100 -> 55636(农历2001年)
-- 顺次判断v_Lunar年个月是不是为大月,是则加1天
WHILE j > 8 LOOP -- 闰月另行判断 8 -> 0 000000000000 1000
IF BITAND(v_Lunar,j) + 0 > 0 then
v_YearDays := v_YearDays + 1;
END IF;
j := j/2; -- 判断下1个月是不是为大
END LOOP;
-- 传回农历年闰哪一个月 1⑴2,没闰传回 0 15 -> 1 0000
v_LeapMonth := BITAND(v_Lunar,15) + 0;
-- 传回农历年闰月的天数,加在年的总天数上
IF v_LeapMonth > 0 THEN
-- 判断闰月大小 65536 -> 1 000000000000 0000
IF BITAND(v_Lunar,65536)+0 > 0 THEN
v_LeapMonthDays := 30;
ELSE
v_LeapMonthDays := 29;
END IF;
v_YearDays := v_YearDays + v_LeapMonthDays;
END IF;
v_OffSet := v_OffSet - v_YearDays;
i := i + 1;
END LOOP;
IF v_OffSet <= 0 THEN
-- i_SolarDay 在所属农历年(即i年)中的第 v_OffSet 天
v_OffSet := v_OffSet + v_YearDays;
i := i - 1;
END IF;
-- 肯定农历年结束
v_Year := i;
-- 肯定农历月开始
i := 1;
SELECT DataInt INTO v_Lunar FROM SolarData WHERE YearId = v_Year;
-- 判断那个月是润月
-- 如农历2001年 (55636,15 -> 0 1101100101010100,1111 -> 4) 即润4月,且闰月小
v_LeapMonth := BITAND(v_Lunar,15) + 0;
v_LeapFlag := 0;
WHILE i < 13 AND v_OffSet > 0 LOOP
-- 判断是不是为闰月
v_MonthDays := 0;
IF (v_LeapMonth > 0 AND i = (v_LeapMonth + 1) AND v_LeapFlag = 0) THEN
-- 是闰月
i := i - 1;
k := i; -- 保存是闰月的时i的值
v_LeapFlag := 1;
-- 传回农历年闰月的天数
IF BITAND(v_Lunar,65536)+0 > 0 THEN
v_MonthDays := 30;
ELSE
v_MonthDays := 29;
END IF;
ELSE
-- 不是闰月
j := 1;
v_MonthNo := 65536;
-- 计算 i 月对应的2进制数 如农历3月: 001000000000
WHILE j<= i LOOP
v_MonthNo := v_MonthNo/2;
j := j + 1;
END LOOP;
-- 计算农历 v_Year 年 i 月的天数
IF BITAND(v_Lunar,v_MonthNo)+0 > 0 THEN
v_MonthDays := 30;
ELSE
v_MonthDays := 29;
END IF;
END IF;
-- 消除闰月
IF v_LeapFlag = 1 AND i = v_LeapMonth +1 THEN
v_LeapFlag := 0;
END IF;
v_OffSet := v_OffSet - v_MonthDays;
i := i + 1;
END LOOP;
IF v_OffSet <= 0 THEN
-- i_SolarDay 在所属农历月(即i月)中的第 v_OffSet 天
v_OffSet := v_OffSet + v_MonthDays;
i := i - 1;
END IF;
-- 肯定农历月结束
v_Month := i;
-- 肯定农历日结束
v_Day := v_OffSet;
-- 格式化返回值
--o_OutputDate := '农历 '||TO_CHAR(v_Year)||'年 ';
--IF k = i THEN
--o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Month),'0')||'(润)月 ';
--ELSE
--o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Month),'0')||'月 ';
--END IF;
--o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Day),'0')||'日';
IF k = i THEN
o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Month),'0');
ELSE
o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Month),'0');
END IF;
o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Day),'0');
RETURN o_OutputDate;
EXCEPTION
WHEN e_Errdate THEN
RETURN '日期毛病! 有效范围(阳历): 1900/01/31 - 2050/01/22';
WHEN OTHERS THEN
e_ErrMsg :=SUBSTR(SQLERRM,1,200);
RETURN e_ErrMsg;
END;
函数2:查询节假日的函数
CREATE OR REPLACE FUNCTION F_HLDY_TYPE(NET_DATE IN DATE) RETURN VARCHAR2 IS
/*% *********************************************************
*名称 --%@NAME:节假日函数
*功能描写 --%@COMMENT:-⑴工作日 2非工作日 3节假日:法定假期
节假日判断函数 返回1工作日 2非工作日 3法定节假日
*创建人 --%@CREATOR:
*创建时间 --%@CREATED_TIME:
*修改人 --%@MODIFY:
*修改记录 --%@MODIFY:
返回值说明:-⑴工作日 2非工作日 3节假日:法定假期
**************************************************************%*/
RESULT VARCHAR2(200);
V_NUMBER_YEAR NUMBER := TO_NUMBER(TO_CHAR(NET_DATE,'yyyy'));
E_ERRDATE EXCEPTION;
E_ERRMSG VARCHAR2(200);
BEGIN
--输入参数判断
IF NET_DATE < TO_DATE('1900-01⑶1','YYYY-MM-DD') OR
NET_DATE >= TO_DATE('2050-01⑵3','YYYY-MM-DD') THEN
RAISE E_ERRDATE;
END IF;
--农历节日
--农历相干假日
--春节(正月初1 至 正月初7)
--端五节(5月初4 至 5月初6)
--中秋节(8月105 )
--阳历相干节日
--元旦(1月1日)
--清明节(4月5日/闰年 4月4日)
--劳动节(5月1日)
--国庆节(10月1日)
IF (SUBSTR(F_GETLUNAR(NET_DATE),⑷) IN ('0505','0504'))
THEN
RESULT := '端五节';
elsif (SUBSTR(F_GETLUNAR(NET_DATE),⑷) IN ('0815','0814','0813'))
THEN
RESULT := '中秋节';
elsif (SUBSTR(F_GETLUNAR(NET_DATE),⑷) IN ('0101','0102','1229'))
THEN
RESULT := '春节';
elsif (TO_CHAR(NET_DATE,'MMDD') IN ('0101','0103'))
THEN
RESULT := '元旦';
elsif (TO_CHAR(NET_DATE,'MMDD') IN ('0501','0502','0503'))
THEN
RESULT := '51';
elsif (TO_CHAR(NET_DATE,'MMDD') IN ('1001','1002','1003','1004','1005','1006','1007'))
THEN
RESULT := '101';
END IF;
RETURN(RESULT);
EXCEPTION
WHEN E_ERRDATE THEN
RETURN '日期毛病! 有效范围(阳历): 1900/01/31 - 2050/01/22';
WHEN OTHERS THEN
E_ERRMSG := SUBSTR(SQLERRM,200);
RETURN E_ERRMSG;
END F_HLDY_TYPE;
PS:
以上1张表,两个函数是我在网上寻觅的,根据自己的需要只做了1些简单的修改,如需要学习与研究可做参考!
总结:
到此全部短信平台大致算是结束了,这里我只做了两类信息,1是祝愿类的短信,2是温馨提示类的短信,所以有1定的局限性,如需扩大还望继续丰富!
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|