多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > 短信接口

短信接口

來源:程序員人生   發(fā)布時間:2016-06-27 16:43:41 閱讀次數(shù):2550次

最近做了1些與短信相干的工作,在這里做1個學(xué)習(xí)的梳理,愿與您共同分享學(xué)習(xí)。要完成1個短信接口需要完成這樣幾件事兒:模板管理、接口管理、拼接接口數(shù)據(jù)

模板管理:最基本的對短信進(jìn)行增刪該查;第2,將可變元素抽成變量,并進(jìn)行管理。這個模塊1般的第3方會提供1個短信管理后臺,但是如果第3方不提供的話則需要我們自己去做1個短信模板啦。

接口管理:1般第3方提供socket接口,WebService接口,Http接口,根據(jù)需要選擇1種進(jìn)行開發(fā)。

拼接接口數(shù)據(jù):可將接口數(shù)據(jù)拼接在接口表中,這樣在接口的業(yè)務(wù)邏輯中只需要專注與挨個發(fā)送了!

回執(zhí):回執(zhí)的處理其實(shí)也是根據(jù)公司的不同需求來定的,簡單點(diǎn)兒就是直接將回執(zhí)日志寫入數(shù)據(jù)庫表中,解析出回執(zhí)狀態(tài)就能夠了!

設(shè)計(jì):

最主要的3張表:模版表,接口表,回執(zhí)日志表

模版表:將所有預(yù)測可能變化的地方都抽成了變量,圖片中拼音部份則是我抽出來的變量。

接口表:主要是以模版表為基礎(chǔ),并給變量賦值,例以下圖中姓名,公司名稱,日期都是由原來的變量賦值而來,具體如何給變量賦值,下面給了兩個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,template_name,replace(replace(template_content,'gsmc',company_name),'khmc',name) template_content,tel_phone,#{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,'yyyy-mm-dd'),'MM-DD') = to_char(Sysdate,'MM-DD') ) snt where 1=1 </insert>

回執(zhí)日志表:只做了對回執(zhí)信息的記錄而已。Status是對回執(zhí)信息中的發(fā)送狀態(tài)的1個解析。


開發(fā):

在前面的設(shè)計(jì)基礎(chǔ)上,接下來要做的就是1些業(yè)務(wù)邏輯的開發(fā)了

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="企業(yè)用戶名"; String sPsd="企業(yè)帳號密碼"; String sdst="手機(jī)號碼"; String smsg="短信內(nèi)容"; 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("節(jié)日")){ 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("春節(jié)")){ 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(); } //返回結(jié)果result數(shù)據(jù):[num=1&success=18230168878,&faile=&err=發(fā)送成功&errid=0] result = client.invoke("Masssend1", sName,sPsd,sdst,smsg,stime,sexno,islong,sequnceId); log.info(result); } }else{ log.info("沒有需要發(fā)送的短息"); } } 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", "企業(yè)用戶名"); map.put("pswd", "企業(yè)賬戶密碼~"); map.put("mobile", list.get(i).get("TEL_PHONE").toString()); map.put("msg", list.get(i).get("TEMPLATE_CONTENT").toString());//用自己的內(nèi)容白名單做測試 map.put("needstatus", String.valueOf(true)); map.put("sender", null); map.put("type", "json"); //發(fā)送短信 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(); } } //處理返回結(jié)果 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由于我沒有開發(fā),所以這里就展現(xiàn)了。


到這里,短信已算是完成大半了。但這也只是針對1些普通的短信,如驗(yàn)證碼等類型的短信,如果你也需要像我1樣的需要發(fā)送1些過年過節(jié)的祝愿短信的話,還有1些復(fù)雜的工作需要做,最最少的是要提供1些計(jì)算時間的工具類,這里參考性的提供兩個函數(shù):

第1步創(chuàng)建1個表,并插入數(shù)據(jù):

CREATE TABLE SolarData ( YearID INTEGER NOT NULL, -- 農(nóng)歷年 DATA CHAR(7) NOT NULL, -- 農(nóng)歷年對應(yīng)的16進(jìn)制數(shù) DataInt INTEGER NOT NULL -- 農(nóng)歷年對應(yīng)的10進(jìn)制數(shù) ); 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, '0x04ae0', 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, '0x04970', 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, '0x02b60', 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, '0x0d4a0', 54432); INSERT INTO SolarData VALUES(1941, '0x1d8a6', 120998); INSERT INTO SolarData VALUES(1942, '0x0b550', 46416); INSERT INTO SolarData VALUES(1943, '0x056a0', 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, '0x0b550', 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, '0x0a570', 42352); INSERT INTO SolarData VALUES(1965, '0x05260', 21088); INSERT INTO SolarData VALUES(1966, '0x0f263', 62051); INSERT INTO SolarData VALUES(1967, '0x0d950', 55632); INSERT INTO SolarData VALUES(1968, '0x05b57', 23383); INSERT INTO SolarData VALUES(1969, '0x056a0', 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, '0x0a4d0', 42192); INSERT INTO SolarData VALUES(1974, '0x0d4d4', 54484); INSERT INTO SolarData VALUES(1975, '0x0d250', 53840); INSERT INTO SolarData VALUES(1976, '0x0d558', 54616); INSERT INTO SolarData VALUES(1977, '0x0b540', 46400); INSERT INTO SolarData VALUES(1978, '0x0b5a0', 46496); INSERT INTO SolarData VALUES(1979, '0x195a6', 103846); INSERT INTO SolarData VALUES(1980, '0x095b0', 38320); INSERT INTO SolarData VALUES(1981, '0x049b0', 18864); INSERT INTO SolarData VALUES(1982, '0x0a974', 43380); INSERT INTO SolarData VALUES(1983, '0x0a4b0', 42160); INSERT INTO SolarData VALUES(1984, '0x0b27a', 45690); INSERT INTO SolarData VALUES(1985, '0x06a50', 27216); INSERT INTO SolarData VALUES(1986, '0x06d40', 27968); INSERT INTO SolarData VALUES(1987, '0x0af46', 44870); INSERT INTO SolarData VALUES(1988, '0x0ab60', 43872); INSERT INTO SolarData VALUES(1989, '0x09570', 38256); INSERT INTO SolarData VALUES(1990, '0x04af5', 19189); INSERT INTO SolarData VALUES(1991, '0x04970', 18800); INSERT INTO SolarData VALUES(1992, '0x064b0', 25776); INSERT INTO SolarData VALUES(1993, '0x074a3', 29859); INSERT INTO SolarData VALUES(1994, '0x0ea50', 59984); INSERT INTO SolarData VALUES(1995, '0x06b58', 27480); INSERT INTO SolarData VALUES(1996, '0x055c0', 21952); INSERT INTO SolarData VALUES(1997, '0x0ab60', 43872); INSERT INTO SolarData VALUES(1998, '0x096d5', 38613); INSERT INTO SolarData VALUES(1999, '0x092e0', 37600); INSERT INTO SolarData VALUES(2000, '0x0c960', 51552); INSERT INTO SolarData VALUES(2001, '0x0d954', 55636); INSERT INTO SolarData VALUES(2002, '0x0d4a0', 54432); INSERT INTO SolarData VALUES(2003, '0x0da50', 55888); INSERT INTO SolarData VALUES(2004, '0x07552', 30034); INSERT INTO SolarData VALUES(2005, '0x056a0', 22176); INSERT INTO SolarData VALUES(2006, '0x0abb7', 43959); INSERT INTO SolarData VALUES(2007, '0x025d0', 9680); INSERT INTO SolarData VALUES(2008, '0x092d0', 37584); INSERT INTO SolarData VALUES(2009, '0x0cab5', 51893); INSERT INTO SolarData VALUES(2010, '0x0a950', 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, '0x06aa0', 27296); INSERT INTO SolarData VALUES(2022, '0x0ad50', 44368); INSERT INTO SolarData VALUES(2023, '0x05b52', 23378); INSERT INTO SolarData VALUES(2024, '0x04b60', 19296); INSERT INTO SolarData VALUES(2025, '0x0a6e6', 42726); INSERT INTO SolarData VALUES(2026, '0x0a4e0', 42208); INSERT INTO SolarData VALUES(2027, '0x0d260', 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, '0x096d0', 38608); INSERT INTO SolarData VALUES(2033, '0x04bd7', 19415); INSERT INTO SolarData VALUES(2034, '0x04ad0', 19152); INSERT INTO SolarData VALUES(2035, '0x0a4d0', 42192); INSERT INTO SolarData VALUES(2036, '0x1d0b6', 118966); INSERT INTO SolarData VALUES(2037, '0x0d250', 53840); INSERT INTO SolarData VALUES(2038, '0x0d520', 54560); INSERT INTO SolarData VALUES(2039, '0x0dd45', 56645); INSERT INTO SolarData VALUES(2040, '0x0b5a0', 46496); INSERT INTO SolarData VALUES(2041, '0x056d0', 22224); INSERT INTO SolarData VALUES(2042, '0x055b2', 21938); INSERT INTO SolarData VALUES(2043, '0x049b0', 18864); INSERT INTO SolarData VALUES(2044, '0x0a577', 42359); INSERT INTO SolarData VALUES(2045, '0x0a4b0', 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步:履行以下兩個時間的轉(zhuǎn)換函數(shù)

函數(shù)1:將陽歷轉(zhuǎn)換為陰歷的函數(shù)

CREATE OR REPLACE FUNCTION f_GetLunar(i_SolarDay DATE) RETURN VARCHAR2 -- 功能:計(jì)算陽歷1900/01/31 - 2050/01/22間某1天對應(yīng)的陰歷是多少 -- 算法:在1張表中用10進(jìn)制格式保存某個農(nóng)歷年每個月大小,有沒有閏月,閏月大小信息 -- 1.用12個2進(jìn)制位來表示某個農(nóng)歷年每個月的大小,大月記為1,否則為0 -- 2.用低4位來表示閏月的月份,沒有閏月記為0 -- 3.用1個高位表示閏月的大小,閏月大記為0,閏月小或無閏月記為0 -- 4.再將該2進(jìn)制數(shù)轉(zhuǎn)化為10進(jìn)制,存入表中 -- 農(nóng)歷2000年: 0 110010010110 0000 -> 0x0c960 -> 51552 -- 農(nóng)歷2001年: 0 110110010101 0100 -> 0x0d954 -> 55636 -- 采取查表的方式計(jì)算出農(nóng)歷日期 -- 作者:Angel_XJW -- 修改:1. -- 2. AS v_OffSet INT; v_Lunar INT; -- 農(nóng)歷年是不是含閏月,幾月是閏月,閏月天數(shù),其它月天數(shù) v_YearDays INT; -- 農(nóng)歷年所含天數(shù) v_MonthDays INT; -- 農(nóng)歷月所含天數(shù) v_LeapMonthDays INT; -- 農(nóng)歷閏月所含天數(shù) v_LeapMonth INT; -- 農(nóng)歷年閏哪一個月 1⑴2 , 沒閏傳回 0 v_LeapFlag INT; -- 某農(nóng)歷月是不是為閏月 1:是 0:不是 v_MonthNo INT; -- 某農(nóng)歷月所對應(yīng)的2進(jìn)制數(shù) 如農(nóng)歷3月: 001000000000 i INT; j INT; k INT; v_Year INT; -- i_SolarDay 對應(yīng)的農(nóng)歷年 v_Month INT; -- i_SolarDay 對應(yīng)的農(nóng)歷月 v_Day INT; -- i_SolarDay 對應(yīng)的農(nóng)歷日 o_OutputDate VARCHAR2(125); -- 返回值 格式:農(nóng)歷 ****年 **(閏)月 **日 e_ErrMsg VARCHAR2(200); e_ErrDate EXCEPTION; BEGIN --輸入?yún)?shù)判斷 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(即農(nóng)歷1900-01-01的前1天) 的天數(shù) v_OffSet := TRUNC(i_SolarDay, 'DD') - TO_DATE('1900-01⑶0', 'YYYY-MM-DD'); -- 肯定農(nóng)歷年開始 i := 1900; WHILE i < 2050 AND v_OffSet > 0 LOOP v_YearDays := 348; -- 29*12 以每一年12個農(nóng)歷月,每一個農(nóng)歷月含29個農(nóng)歷日為基數(shù) v_LeapMonthDays := 0; -- 取出農(nóng)歷年是不是含閏月,幾月是閏月,閏月天數(shù),其它月天數(shù) -- 如農(nóng)歷2001年: 0x0d954(16進(jìn)制) -> 55636(10進(jìn)制) -> 0 110110010101 0100(2進(jìn)制) -- 1,2,4,5,8,10,12月大, 3,6,7,9,11月小, 4月為閏月,閏月小 SELECT DataInt INTO v_Lunar FROM SolarData WHERE YearId = i; -- 傳回農(nóng)歷年的總天數(shù) j := 32768; -- 100000000000 0000 -> 32768 -- 0 110110010101 0100 -> 55636(農(nóng)歷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; -- 傳回農(nóng)歷年閏哪一個月 1⑴2 , 沒閏傳回 0 15 -> 1 0000 v_LeapMonth := BITAND(v_Lunar, 15) + 0; -- 傳回農(nóng)歷年閏月的天數(shù) ,加在年的總天數(shù)上 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 在所屬農(nóng)歷年(即i年)中的第 v_OffSet 天 v_OffSet := v_OffSet + v_YearDays; i := i - 1; END IF; -- 肯定農(nóng)歷年結(jié)束 v_Year := i; -- 肯定農(nóng)歷月開始 i := 1; SELECT DataInt INTO v_Lunar FROM SolarData WHERE YearId = v_Year; -- 判斷那個月是潤月 -- 如農(nóng)歷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; -- 傳回農(nóng)歷年閏月的天數(shù) IF BITAND(v_Lunar, 65536)+0 > 0 THEN v_MonthDays := 30; ELSE v_MonthDays := 29; END IF; ELSE -- 不是閏月 j := 1; v_MonthNo := 65536; -- 計(jì)算 i 月對應(yīng)的2進(jìn)制數(shù) 如農(nóng)歷3月: 001000000000 WHILE j<= i LOOP v_MonthNo := v_MonthNo/2; j := j + 1; END LOOP; -- 計(jì)算農(nóng)歷 v_Year 年 i 月的天數(shù) 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 在所屬農(nóng)歷月(即i月)中的第 v_OffSet 天 v_OffSet := v_OffSet + v_MonthDays; i := i - 1; END IF; -- 肯定農(nóng)歷月結(jié)束 v_Month := i; -- 肯定農(nóng)歷日結(jié)束 v_Day := v_OffSet; -- 格式化返回值 --o_OutputDate := '農(nóng)歷 '||TO_CHAR(v_Year)||'年 '; --IF k = i THEN --o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Month), 2, '0')||'(潤)月 '; --ELSE --o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Month), 2, '0')||'月 '; --END IF; --o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Day), 2, '0')||'日'; IF k = i THEN o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Month), 2, '0'); ELSE o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Month), 2, '0'); END IF; o_OutputDate := o_OutputDate || LPAD(TO_CHAR(v_Day), 2, '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;

函數(shù)2:查詢節(jié)假日的函數(shù)

CREATE OR REPLACE FUNCTION F_HLDY_TYPE(NET_DATE IN DATE) RETURN VARCHAR2 IS /*% ********************************************************* *名稱 --%@NAME:節(jié)假日函數(shù) *功能描寫 --%@COMMENT:-⑴工作日 2非工作日 3節(jié)假日:法定假期 節(jié)假日判斷函數(shù) 返回1工作日 2非工作日 3法定節(jié)假日 *創(chuàng)建人 --%@CREATOR: *創(chuàng)建時間 --%@CREATED_TIME: *修改人 --%@MODIFY: *修改記錄 --%@MODIFY: 返回值說明:-⑴工作日 2非工作日 3節(jié)假日:法定假期 **************************************************************%*/ RESULT VARCHAR2(200); V_NUMBER_YEAR NUMBER := TO_NUMBER(TO_CHAR(NET_DATE, 'yyyy')); E_ERRDATE EXCEPTION; E_ERRMSG VARCHAR2(200); BEGIN --輸入?yún)?shù)判斷 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; --農(nóng)歷節(jié)日 --農(nóng)歷相干假日 --春節(jié)(正月初1 至 正月初7) --端五節(jié)(5月初4 至 5月初6) --中秋節(jié)(8月105 ) --陽歷相干節(jié)日 --元旦(1月1日) --清明節(jié)(4月5日/閏年 4月4日) --勞動節(jié)(5月1日) --國慶節(jié)(10月1日) IF (SUBSTR(F_GETLUNAR(NET_DATE), ⑷) IN ('0505', '0504')) THEN RESULT := '端五節(jié)'; elsif (SUBSTR(F_GETLUNAR(NET_DATE), ⑷) IN ('0815', '0814', '0813')) THEN RESULT := '中秋節(jié)'; elsif (SUBSTR(F_GETLUNAR(NET_DATE), ⑷) IN ('0101', '0102', '1229')) THEN RESULT := '春節(jié)'; elsif (TO_CHAR(NET_DATE, 'MMDD') IN ('0101', '0102', '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, 1, 200); RETURN E_ERRMSG; END F_HLDY_TYPE;

PS:

以上1張表,兩個函數(shù)是我在網(wǎng)上尋覓的,根據(jù)自己的需要只做了1些簡單的修改,如需要學(xué)習(xí)與研究可做參考!

總結(jié):

到此全部短信平臺大致算是結(jié)束了,這里我只做了兩類信息,1是祝愿類的短信,2是溫馨提示類的短信,所以有1定的局限性,如需擴(kuò)大還望繼續(xù)豐富!


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久久国产99久久国产一 | 国产精品2023 | 欧美日韩亚洲国产一区二区综合 | 性欧美黑人巨大videos | 五月天欧美 | 欧美毛片免费观看 | 久久国产免费福利资源网站 | 在线成人免费视频 | 福利在线免费 | 精品视频一区二区三区免费 | 欧美另类成人 | 欧美精品v国产精品v日韩精品 | 欧美黄色片在线观看 | 国产中文字幕在线免费观看 | 欧美激情亚洲 | 久久亚洲欧美 | 国产在线a不卡免费视频 | 亚洲综合欧美日本另类激情 | 337p日本欧洲亚洲大胆色噜噜 | 国产成人精品视频一区二区不卡 | 午夜影院私人 | 九色九色九色在线综合888 | 久草精品视频在线观看 | 日本aa在线 | 午夜免费体验 | 最新在线网址 | www.视频| 亚洲久久在线 | 一级毛片大全免费播放 | 亚洲成年人免费网站 | 亚洲国产天堂久久综合 | 亚洲爆乳无码一区二区三区 | 国产69久久精品成人看小说 | 欧美精品 在线观看 | 免费网站在线观看高清版 | 国产精品高清一区二区三区不卡 | 视频一区色眯眯视频在线 | 欧美日韩激情一区二区三区 | 日本欧美高清 | 复仇之路在线观看免费版高清 | 日本在线一区二区 |