From 8701e6c89e384b69ad70008627c2929994e865f8 Mon Sep 17 00:00:00 2001 From: "zhanglei@ap-leasing.com.cn" Date: Thu, 27 Jul 2023 16:35:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=87=E6=8D=A2=E7=A7=BB=E5=8A=A8=E6=A2=A6?= =?UTF-8?q?=E7=BD=91=E7=9F=AD=E4=BF=A1=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Message/LBSmsNoticeTasksList.jsp | 202 ++++++++------- WebContent/WEB-INF/etc/jbo/jbo_oti.xml | 48 ++++ WebContent/WEB-INF/lib/SmsSdk-5.7.jar | Bin 0 -> 124796 bytes WebContent/WEB-INF/web.xml | 14 + config/sms.properties | 11 + src/com/ample/sms/FileUtil.java | 65 +++++ src/com/ample/sms/RecvMoThread.java | 100 +++++++ src/com/ample/sms/RecvRptThread.java | 103 ++++++++ src/com/ample/sms/SmsController.java | 184 +++++++++++++ src/com/ample/sms/SmsObjType.java | 24 ++ src/com/ample/sms/SmsPropertiesUtil.java | 36 +++ src/com/ample/sms/SmsRecvRptThread.java | 98 +++++++ src/com/ample/sms/SmsRptServlet.java | 128 +++++++++ src/com/ample/sms/SmsSendManager.java | 245 ++++++++++++++++++ src/com/ample/sms/WriteRptThread.java | 110 ++++++++ src_jbo/jbo/oti/SMS_RPT.java | 84 ++++++ src_jbo/jbo/oti/SMS_SEND.java | 68 +++++ .../com/tenwa/message/JobSendMessage.java | 89 +------ 18 files changed, 1431 insertions(+), 178 deletions(-) create mode 100644 WebContent/WEB-INF/lib/SmsSdk-5.7.jar create mode 100644 config/sms.properties create mode 100644 src/com/ample/sms/FileUtil.java create mode 100644 src/com/ample/sms/RecvMoThread.java create mode 100644 src/com/ample/sms/RecvRptThread.java create mode 100644 src/com/ample/sms/SmsController.java create mode 100644 src/com/ample/sms/SmsObjType.java create mode 100644 src/com/ample/sms/SmsPropertiesUtil.java create mode 100644 src/com/ample/sms/SmsRecvRptThread.java create mode 100644 src/com/ample/sms/SmsRptServlet.java create mode 100644 src/com/ample/sms/SmsSendManager.java create mode 100644 src/com/ample/sms/WriteRptThread.java create mode 100644 src_jbo/jbo/oti/SMS_RPT.java create mode 100644 src_jbo/jbo/oti/SMS_SEND.java diff --git a/WebContent/Tenwa/Lease/App/Interface/Message/LBSmsNoticeTasksList.jsp b/WebContent/Tenwa/Lease/App/Interface/Message/LBSmsNoticeTasksList.jsp index 5a5c95822..ca995f85d 100644 --- a/WebContent/Tenwa/Lease/App/Interface/Message/LBSmsNoticeTasksList.jsp +++ b/WebContent/Tenwa/Lease/App/Interface/Message/LBSmsNoticeTasksList.jsp @@ -1,103 +1,113 @@ -<%@ page contentType="text/html; charset=GBK"%> -<%@ include file="/Frame/resources/include/include_begin_list.jspf"%><% - /* +<%@ page contentType="text/html; charset=GBK" %> +<%@ include file="/Frame/resources/include/include_begin_list.jspf" %> +<% + /* Author: undefined 2017-08-01 Content: History Log: */ - ASObjectModel doTemp = new ASObjectModel("LBSmsNoticeTasksList"); - doTemp.setDataQueryClass("com.amarsoft.awe.dw.ui.list.FlowMonitorListHtmlGenerator"); - CurPage.setAttribute("flowRowCount","100"); - ASObjectWindow dwTemp = new ASObjectWindow(CurPage,doTemp,request); - dwTemp.Style="1"; //--设置为Grid风格-- - dwTemp.ReadOnly = "1"; //只读模式 - dwTemp.MultiSelect = true; - dwTemp.setPageSize(pageSize==null?10:Integer.parseInt(pageSize)); - dwTemp.genHTMLObjectWindow(""); + ASObjectModel doTemp = new ASObjectModel("LBSmsNoticeTasksList"); + doTemp.setDataQueryClass("com.amarsoft.awe.dw.ui.list.FlowMonitorListHtmlGenerator"); + CurPage.setAttribute("flowRowCount", "100"); + ASObjectWindow dwTemp = new ASObjectWindow(CurPage, doTemp, request); + dwTemp.Style = "1"; //--设置为Grid风格-- + dwTemp.ReadOnly = "1"; //只读模式 + dwTemp.MultiSelect = true; + dwTemp.setPageSize(pageSize == null ? 10 : Integer.parseInt(pageSize)); + dwTemp.genHTMLObjectWindow(""); - //0、是否展示 1、 权限控制 2、 展示类型 3、按钮显示名称 4、按钮解释文字 5、按钮触发事件代码 6、 7、 8、 9、图标,CSS层叠样式 10、风格 - String sButtons[][] = { - {"true","","Button","新增","新增","newRecord()","","","","btn_icon_add",""}, - {"true","","Button","修改","修改","viewAndEdit()","","","","btn_icon_set",""}, - {"true","","Button","删除","删除","doDelete()","","","","btn_icon_delete",""}, - {"true","","Button","立即发送","立即发送","sendMessage()","","","","btn_icon_message",""}, - {"true","","Button","余额查询","余额查询","doSelect()","","","","btn_icon_information",""} - }; -%><%@include file="/Frame/resources/include/ui/include_list.jspf"%> + //0、是否展示 1、 权限控制 2、 展示类型 3、按钮显示名称 4、按钮解释文字 5、按钮触发事件代码 6、 7、 8、 9、图标,CSS层叠样式 10、风格 + String sButtons[][] = { + {"true", "", "Button", "新增", "新增", "newRecord()", "", "", "", "btn_icon_add", ""}, + {"true", "", "Button", "修改", "修改", "viewAndEdit()", "", "", "", "btn_icon_set", ""}, + {"true", "", "Button", "删除", "删除", "doDelete()", "", "", "", "btn_icon_delete", ""}, + {"true", "", "Button", "立即发送", "立即发送", "sendMessage()", "", "", "", "btn_icon_message", ""}, + {"true", "", "Button", "余额查询(普通)", "查询普通短信余额", "doSelect('01')", "", "", "", "btn_icon_information", ""}, + {"true", "", "Button", "余额查询(催收)", "查询催收短信余额", "doSelect('02')", "", "", "", "btn_icon_information", ""} + }; +%> +<%@include file="/Frame/resources/include/ui/include_list.jspf" %> -<%@ include file="/Frame/resources/include/include_end.jspf"%> \ No newline at end of file +<%@ include file="/Frame/resources/include/include_end.jspf" %> \ No newline at end of file diff --git a/WebContent/WEB-INF/etc/jbo/jbo_oti.xml b/WebContent/WEB-INF/etc/jbo/jbo_oti.xml index 69ec4224f..8e0608513 100644 --- a/WebContent/WEB-INF/etc/jbo/jbo_oti.xml +++ b/WebContent/WEB-INF/etc/jbo/jbo_oti.xml @@ -651,5 +651,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/lib/SmsSdk-5.7.jar b/WebContent/WEB-INF/lib/SmsSdk-5.7.jar new file mode 100644 index 0000000000000000000000000000000000000000..e2a3c8e2c8de590d5bd87c6683a73e51210b8d8d GIT binary patch literal 124796 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 z zrmk_2>fukCadwkl>3yn{xU&9!f1l;+8~{W;wgk`Q1=6inv&_+O^gVD4>p(1ZP>On< z383lm_=7WqQARP@_wMGye&B>sMwJsuJOhw(EFg}D3UKV7?5y?rY$7aYFyjL4ybM&A zUKi(ysSqrT(&_GG2oh@Xa}9tKIEKTNEJ6spZ6KhYQ49wBSNt9i*ApzQ#? zlh0nXbmoe$Rt2|IUO!CSnF@~xyg!e1Kpv(6Q(1-FjKg||GDX*V>)Y?`;y&Ex+b&Fl zPRLhoKG{#e_boIKK1SC%_dwZ%OWygBcLb#()gS@WLQsIbP+PRHg4b?|S4Hp zl=;hkZ}~5fsd%`Yj|;OGi`5tSZdl&Djp*OG-G%Qi_fODRUk%YGiu>Nf23*rpQ1frD zuPh8DL{YC#u3~#SxO~G5Au>B&)ANvD|7D|2sY4&%Bnl8v2*Llf|H=CA{m;tZkgiIL zP1+_h=>bHvL2!(5NFaHmQhh+ZgyL{0<}jpjNbvH4V?e&F@u5iQ$iO1CKH!7jhA6*Z zXpE1WwJztK$rd|tPt|~aq?@iMx9+PO&aduAPLJx&r|!S>6ug}-9zT&I3$v~4OuEyC4Z;{`}sEMT6tJ_m5|K*#iY#SoFW$@(bn`5bjrzXGt52CP2Hb+jdX8r)}Gqw)wSf+qP}nwr$(CZFkR^lYb{CIoUfq zsk*G&s>*uTdR9aNQ*@J8^oOjCjRmYSd+&(qQE5?%rIEBv4eUssaaZI=oK){i&2{YMF}rEf z8EmR;o7(OI)7Niz&$!4B#VlEuEHOFEeVjskKKl*n?y80o9b0ve3GDAHSi0@1UANJe z&u6jR_2-hF&qiC{`PZ}h@8^Dr(4x!3hR28Jgu+ws=a3du)eFnnO}Aj5ZCcHnMSQP= zchzTCzK;jU?^e9ZT0DLuw+cQFuN$TAGAEnnp0f9#?^9yA-lE?7 zpVHkk{=es8^X_wV@g5qYDDE}JeD5HJ4zhV zuAtn-e>9RR(HEfdDYF%d;?orgVmyfc&beVh zuy?jqQJ_EaY>1FL{lZJa<1H6>&Xk%WOJiW|()iNXCMlt6Og$Hi z_Cy;$M>uP>y5{C~R?ZNcqD<=!Xr}K+#*Q<=hN9zYx(umgl&MW^C!%byW(M5og`Z65 zzsmI;dev{8nuL;)ISIPJscXS23PmDv){&m6Oz@&jXEB!isXA}i{icOkcqgXw zP{O{Ryl;p}(WBv&mD_k4(p}VOwx0()v80IKy}ew7w15WSNbD`O6KyrpX^5Fl(&V_# z!!C$?_1KqxMZrl|^c)pPom*wdSsJHOtxx2A#_J32bVe{L%uJ3f6{5lSQhO-(tXHt>cW@@J{%ch zcnjwKD>HXo>a>c6Dt-If644za)L&s^X)TAy70L?HTO2@YQ7$a$fyRcX{pcl2rhU%X zRG>eY^Kf9AZ&Y|hKt93P zJyB0_=ofmOT&QKwKWwvPd=Z;rLu5*aPBLz84WgFtcB|7Q~Z1eqJs)=;9lW9#=0A?rHyY%{R@&Ibkkq#&b?17 z2P$if9VqtbyibA#=E$Dhj_DRyc0bn-&<@WL4GCQO=&}c=13q;MqX&En1iKDPb0Fu> z><({-jsY6^E~*Dj4}v!=<=5y=T9?!cH2LPXhg$=h@~GKY=>Gc-^9Nq7Ul;h)fnSdl z10?nsea~JCA!}3>sPc_r&kGNx>Lk#g6&JGV*u9Ud1{~rYa}UG^x-G62nC>9H&jSxZ zYl<8+)sC&MABe?)sV+PfIP)D&54IP?>e#%GjSn01pwjR9i|G!G?^j!rDQK!aa$O*^ zKY4~<;v4hcxEHG(CqE2Na4uNQ9`z*E$711>eFpOoHv*J$9Il=*f*|x z*mtJ;&6XE>n zugW>rul%`Y9?3H$LD&0DK~1-=xosY0GwOf-2*kgdW;nUjOT)nVp0xd+xB;8)^>YX|XdC0v zg0GH&^6aWGynSNOykn9mRc*nm5WA8f!V;^Pn$=!nI61Q~ED188D z=6ot=SUDt5H002{qcl%EvuGavyGS1KhQT@qp+PS9nE9#h)pOKd-E);+S#y?N33HcT zy>mEObWdcVK|2Q+!8<0cbKG9FbDdw|bDmwwXWl&kGxl7{C*W0B?=cKm?;&tO{6?uW z)E$Z^N_w=9C^_VhtUy8CJ8wbV2Sh<#`>46que3S#Es`f%e!8dMwdfx?kg(rq7OXhmr(&lWp2%orpsh=QKp})u51wG%K^L-zg1wGvZ=0>c7`6i=sA*pJ4m!st2bU@dAE*R$NGB@uhtXQN%i9Ld@l^gb z0c689Z4dg(zC!6med_5|d6Lw{ej?>fdQ;TZa)V=@%7VW*e)?U#fPQu^`q{X0+4*_? zV%Yf&$s(heMiI0~{s@djr}2$=j(9JD+z=tLt>{6^@0%#aU#4? zWGc#Xiba-dOmMrCpkA?|5E@Ubo#?8y3YnboHkL{*uG0tsjFOT|$FZS@UlL+mbpd83irMr=-jjxn*<{)gQKi3d^bNgqFX|l(~{8i*#|% z#}=FLl3z56KMVdkm6E(Fcp$+`QFC3G0OgInI_9Li_|L-9RYjhCmjAKTDoE>uk zNg|cFWzH`sYHLWd@O!viVyRDvwy5TES@kwtdEV=-kwCqT9>ZtZjm&#F&$z9Y*9`*{ zVfbh`iv2o!hDNjRTzFfT-*=+d zIOw!8=(RGap^CG@Wd$g+xp{5Pr&#Ar?95>LQtpQGszG*M2f8ICji&mf-f*9x7z@;{ zZ~)TRUqq1C=rX=DU%)p>lI#e;qB8HpqO1o(-O;1A9I_CA zD5_i=UBRa-15m1ss?fnx{uX|!D5+7-4{_VHxV>VIMBG^?pPXZ!cG^xQW2TT`_cCu` zlGerMPB!j$2tQ_ha^kHE?)oTWt(0e4fTzUTPe`|s9EVG-a*~ovN#Zh3SiMVo@#^=J zn@ht-VmgIXf!5rkO}dUB(RO;MKCVjl~mvlm3+2fiz zwYma1)%)a0O*rGZg1xl2vdNQh;#2AZy8IF}dKDR)h;|~?mS*qo$z*$0bg@)guMQJ; z8(oWNYg_8EBQF4i`xu^^43(kCeJGY{9FiS~P;kB|CdyRa<+^}nREeGq7@Y1EJK2Tj zm{U~C)V9l+|JxR|Sj!uhqQf^ueydNIFJ8HE4I(Un85EJZsaOncCy#Lpp+`)j`N*;< zVvzHMAp-=&qD^FG&Nw=63QtTcC&gCXIjtht`C|%g|73eo_`FKH4=owWCM*LTp>!u& zwzkW-gjK!CHekzIRFG|`ciVuX)+dz5gtD|$;nrO#vuYGT74x!rF)`HsA{7K7H|+C( z!GX~aI~`ZtLhQ#S(nejv<44^o?wfniqoXL}L<6RRBU`Z)STj-Qtt0=hVB} zSctAz%}3{LvE#FJW#WfBd{@H>c}jH)OYAWt`>WTk1n19gR zdvQ#*c}Jx>n1a#zpxiw0Cla>F(YkQHP~$J2hf|T_GmtZXPBAp? zN~fhH=X@@sEb*DhB|_9tksf4Q_$TZ?(j>ghbrizJu)KH>*T?FVE%`DR>fr9nnwpfk zl8h>d8XIf^KaNcdNYC%t1}}>IGK(KvKLm%aL4$<8RgqvOc@Dw(A)v(i>7)wdF`^`2M#K3910X=&L*=TsVahC=BY`*?HWj_zKCg&FzK!GN+R*n$PR zF!4=DiFO6jOM$is?WzRlUoRJT6ZHMn#9z`whD_DnM}UNOf;A+!4!Fs2|6}2@LVbzx zen)>v?<_F+%3Fkvh5>J94DH818;8F#A)0Fy`fYMg6^UzQ)GM-d5`X{Y)#Vy6Yh;WRr-EO#b^XDCmoM!E8sU znl<3dpv1dc`-)eU6UkaC*+yWaUTqmZmFelT#viJ1akLwW;6Wkl7^k{u9%M2vZj_Cf z%Z;T0$LDBZj?(tW@wvkuP4rX=GaI09BuiYs_OM*c)Rml;wv89D`jNMyLNg0mQq~Qx z$(For{#nu{1Kpc^vn`ySCrk2BM%#pXGPrqGFSE3oYT`7{%*<^*hwef5!J)$IV{fA2 zdV{c`3=FL^&g3$8iKhKzg6_bZjpZ3uJokdFV~Nx4+_W%i>0U3;d&=7V!nV<^@t5yD zB1g6RgzbZ35+>F#AnH&Nd(#v1+e-&l^NU%1ZL_Nz@&KmS?Vm{yd-IIh{;7C%qt^nR zI91|OEM#QP8;I26er_{RZc1RzgJF6OrA%I`h;u_eqm)#knJo(4VtlC#zSITY_1CqY zM&#+KdFX;DZE($^;yK;4*sGr`+jH)tQ$ephuUHTC8&09PM~B+=FvL*iW#;e)f`&s;gf*$a zc+O5M4_;@)=zgZByhQxv;mgwhXk!08jsf?7n$B4}I{$+x{C_BhdC2Nt-2d{zjsI$~ z{-+Lf$NxI{Z=h#lZYra1qi<^L@E=WWSRL9c={Wr_f1-p5(|cbWk{$;bFli9O3I7z@HUl4xQ&2Q%(v{#><(=Yzn&-?A(Y&Y0GiuFrB8HOeu++BrQM%``Kbv8i9E2(<($){79S}L-*mu(1MFaa(o=WJa>K*vkS-QKLFNa z4s@b8>!z!2b1mTkB18m=&1{9vL1oWqMtUR3(c=n~sFNf!-N8S+7H=it5n{+!{BihD zZNU2reDRN6QR44JmdEXh$jDL^nRHEcre+HbiSw+3br4GAwr8*5DD~rEWq?WYEG1no zs_tz{9eU=ajsnkSMun26l+=Xe2~-wp<>eQ!uTcU4sp}b!zqe%F$mt)se)wx#6-dzK z==?Z(Bn6X}4(6_X(xmBNJUg7T=$nA1@C+3$FmL!GBAMqJ*0>lJNC>Eqzq?JBg1&8N z;Q|m^WAfdX@R(%lgb*DE*vmK;1dCVj%yZLM$2emHtP`VOz`E{+-$c4*F|G=~zo{x& z)UK;DPvPH})#N(jK-fiMY3@TMjv~DY=BLebYxH%83_3{aI4I1J9KzU+Y4Vd}RxvXmvjf(OR|dA~=#>WC z#?OV<@?DD#(SLE;QG1`k(v?TK5&u}|ET1tmsAEl1M>sbWaCt*OT?l4Y9Nz9$>*M_v+UXov>Xuyo?hC8Q z@w1!ld6~<0eQr><{df4$LL7E6Rs4NP32;+arZ04lnQjk`j(ZW>4|e#g5j=mxa*!bP z$iyVPf3EfQ(LHcbdMZsEebSO*+vd9j|I}qcM7kvRL1f*rCBNq3aL|Aqbk~gLv!2zN z-XBG7L&LiWf7SURX~oPxo(-vZxoDs{Zs@C1xJ-7KVqsGCpeM;Z1yX@Fzh%oi#IP>P z{0-f*L+R{syqCAz$Jt5e-!2xyQS#UO?3?6I>>8%lQyB^hOyOiPIl=)){9EO7>g^I= z8KpZ+b{fG(CR;qDXjHUjX+EQUyOm|KwbA`f5Ie(IkU#!ETmBjTw$$V^dg&8&Pgls|+|)N=G2P&r z+EOd~^V#JO`{u{URzw{ z92%EwJPh74gs3kjFExT1$>sl2BKAAsq4SqSMN(uOQGoQoSs;J!gDQP8e2BH-!u7uRvl&Uf;iBn~!)^bu<=|natk5MBo$>`Kg$WFp6?7Eu@_m%z8m+IhG%j6mk$4Vj> zGOwQoID5Lsw%JgP7Yv=5L<&8^VbbDt1yo*o?Zg2@kvgjzJa#J_XMgKq-A{2f1~K?2 zy%Q@ehL4pg@lC|dkIO*^6WfzuCUczC2?kM0&{6dKdnQXrux!QiC6COdB}AN^Ei4KM z*(XUx!12HHkCS`E9gqjhp|Kn)rCr1oLbs;Cg-XVhl#`j-J&9o!J)Jl-4W<+OSkm|7 z&cP0)RN*P(Yv<=ddp?QA>G`Okxr$gI9vMa8=v3fL$D}FQjZ%pAj9ixJWzjJmG6@@< z#mS1KQwj!Bw{6lZE%s&cm^36>aUPtN)r;mFhahlS8%}nr{G zQftn-5@}yi#d4(J9!2+yx}-c?*rtT$K7{IB;|aXN`=k`leISk;&C5BH(NtDsdFjAh z#8K*0NqH)Rca+j=Dkk!V2W7jt;QDN*CEHT^*~`fyTU||;qy70S-}}U9D}VYsxWXj@ zx*-LQ_U>d?H_3NYFtsW*8etvjb1r|I=&15}TUCBPdd?a,fGJ?mz5PxW~c!%MO4 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%0D6)F+_!UW~ma1Wm$)mnUBtOBrG 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 U%y1 + + SmsRptServlet + com.ample.sms.SmsRptServlet + + DataSource + als + + + RewriteRunJavaMethodServlet com.tenwa.workflow.RewriteRunJavaMethodServlet @@ -298,6 +307,11 @@ /servlet/runflow + + SmsRptServlet + /smsRpt + + DocDownloadZipServlet /servlet/view/docDownloadZipServlet diff --git a/config/sms.properties b/config/sms.properties new file mode 100644 index 000000000..75fca3435 --- /dev/null +++ b/config/sms.properties @@ -0,0 +1,11 @@ +userid=JU9237 +pwd=507237 +ipAddress1=172.28.1.59:8803 +ipAddress2= +ipAddress3= +ipAddress4= + +log_path=/data/sms/ + +urge_userid=JU9239 +urge_pwd=507237 \ No newline at end of file diff --git a/src/com/ample/sms/FileUtil.java b/src/com/ample/sms/FileUtil.java new file mode 100644 index 000000000..2b7b5c08d --- /dev/null +++ b/src/com/ample/sms/FileUtil.java @@ -0,0 +1,65 @@ +package com.ample.sms; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.util.Calendar; + +public class FileUtil { + public static final int BUFFER_SIZE = 1024; + + public FileUtil() { + } + + public static void writeFile(String fileName, String content) { + FileOutputStream fos = null; + ByteArrayInputStream bis = null; + + try { + File file = new File(fileName); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + + fos = new FileOutputStream(fileName, true); + bis = new ByteArrayInputStream(content.getBytes("GBK")); + byte[] buffer = new byte[BUFFER_SIZE]; + + int ch; + while((ch = bis.read(buffer)) != -1) { + fos.write(buffer, 0, ch); + } + } catch (Exception var15) { + var15.printStackTrace(); + } finally { + try { + if (bis != null) { + bis.close(); + } + + if (fos != null) { + fos.close(); + } + } catch (Exception var14) { + var14.printStackTrace(); + } + + } + + } + + public static String getCurrTime() { + try { + Calendar calendar = Calendar.getInstance(); + String yearstr = String.valueOf(calendar.get(1)); + int month = calendar.get(2) + 1; + String monthstr = month > 9 ? String.valueOf(month) : "0" + String.valueOf(month); + int day = calendar.get(5); + String daystr = day > 9 ? String.valueOf(day) : "0" + String.valueOf(day); + return yearstr + "/" + monthstr + "/" + daystr + "/"; + } catch (Exception var6) { + var6.printStackTrace(); + return ""; + } + } +} diff --git a/src/com/ample/sms/RecvMoThread.java b/src/com/ample/sms/RecvMoThread.java new file mode 100644 index 000000000..7062f9331 --- /dev/null +++ b/src/com/ample/sms/RecvMoThread.java @@ -0,0 +1,100 @@ +package com.ample.sms; + +import com.montnets.mwgate.common.MO; +import com.montnets.mwgate.smsutil.SmsSendConn; + +import java.util.ArrayList; +import java.util.List; + +/** + * 鑾峰彇涓婅鐭俊鐨勭嚎绋 + */ +public class RecvMoThread extends Thread { + + // 鐭俊澶勭悊瀵硅薄,鍦ㄨ繖涓柟娉曚腑璋冪敤鑾峰彇涓婅鍔熻兘 + private SmsSendConn smsSendConn = null; + // 鐢ㄦ埛璐﹀彿 + private String userid = null; + // 姣忔璇锋眰鎯宠鑾峰彇涓婅鐨勬渶澶ф潯鏁 + private int retsize = 0; + + /** + * 鏋勯犲嚱鏁 + * + * @param smsSendConn + * 鐭俊澶勭悊瀵硅薄 + * @param userid + * 鐢ㄦ埛璐﹀彿 + */ + public RecvMoThread(SmsSendConn smsSendConn, String userid, int retsize) { + // 鐭俊澶勭悊瀵硅薄 + this.smsSendConn = smsSendConn; + // 鐢ㄦ埛璐﹀彿 + this.userid = userid; + // 姣忔璇锋眰鎯宠鑾峰彇涓婅鐨勬渶澶ф潯鏁 + this.retsize = retsize; + } + + /** + * 鑾峰彇涓婅鐭俊绾跨▼鐨勬柟娉 + */ + public void run() { + // 涓婅闆嗗悎 鏈泦鍚堜复鏃跺瓨鍌ㄤ笂琛岋紝闇瑕佸皢鏀跺埌鐨勪笂琛屼繚瀛樺湪涓涓槦鍒椾腑锛岀敱鍙﹀涓涓嚎绋嬪幓澶勭悊銆 + List mos = new ArrayList(); + // 杩斿洖鍊 + int result = -310099; + //涓婅瀵硅薄澹版槑 + MO mo = null; + // 寰幆璋冪敤鑾峰彇涓婅鐨勬柟娉 + while (true) { + try { + // 鍒濆鍖栬繑鍥炲 + result = -310099; + // 娓呯┖涓婅闆嗗悎涓殑瀵硅薄 + mos.clear(); + // 璋冪敤鑾峰彇涓婅鎺ュ彛 + result = smsSendConn.getMo(userid, retsize, mos); + // 濡傛灉鑾峰彇涓婅鎴愬姛锛屽苟涓旀湁涓婅 + if (result == 0 && mos != null && mos.size() > 0) { + // 鏈変笂琛 + // 娣诲姞鍒颁笂琛岄槦鍒 + // add mo queue + // 杩欓噷涓嶈鍋氬鏉傜殑鑰楁椂鐨勫鐞嗭紝灏嗘敹鍒扮殑涓婅淇濆瓨鍦ㄤ竴涓槦鍒椾腑锛岀敱鍙﹀涓涓嚎绋嬪幓澶勭悊銆 + + // 浠g爜绀轰緥鏄皢涓婅淇℃伅鎵撳嵃鍑烘潵 + System.out.println("鑾峰彇涓婅鎴愬姛锛佽幏鍙栧埌鐨勪笂琛屾湁" + mos.size() + "鏉¤褰曘"); + for (int i = 0; i < mos.size(); i++) { + mo = mos.get(i); + System.out.println("涓婅璁板綍:" +"msgid:"+mo.getMsgid() + ",mobile:" + mo.getMobile()+",countrycode:"+mo.getCountrycode() + + ",pknum:"+mo.getPknum()+",pktotal:"+mo.getPktotal()+",spno:" + mo.getSpno() + + ",exno:" + mo.getExno() + ",content:" + mo.getContent()+ ",rtime:" + mo.getRtime() ); + } + + // 缁х画寰幆 + continue; + } else { + // 濡傛灉鑾峰彇涓婅澶辫触锛屽垯灏嗛敊璇爜鎵撳嵃 + if (result != 0) { + System.out.println("鑾峰彇涓婅澶辫触锛岄敊璇爜涓:" + result); + } + + // 娌℃湁涓婅锛屽欢鏃5绉掍互涓 + try { + Thread.sleep(5000L); + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + // 寰幆鍑虹幇寮傚父锛屾殏鍋5绉 + try { + Thread.sleep(5000L); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + } + +} diff --git a/src/com/ample/sms/RecvRptThread.java b/src/com/ample/sms/RecvRptThread.java new file mode 100644 index 000000000..b081fec15 --- /dev/null +++ b/src/com/ample/sms/RecvRptThread.java @@ -0,0 +1,103 @@ +package com.ample.sms; + +import com.montnets.mwgate.common.RPT; +import com.montnets.mwgate.smsutil.SmsSendConn; + +import java.util.ArrayList; +import java.util.List; + +/** + * 鑾峰彇鐭俊鐘舵佹姤鍛婄殑绾跨▼ + */ +public class RecvRptThread extends Thread { + + // 鐭俊澶勭悊瀵硅薄,鍦ㄨ繖涓柟娉曚腑璋冪敤鑾峰彇鐘舵佹姤鍛婂姛鑳 + private SmsSendConn smsSendConn = null; + // 鐢ㄦ埛璐﹀彿 + private String userid = null; + // 姣忔璇锋眰鎯宠鑾峰彇鐘舵佹姤鍛婄殑鏈澶ф潯鏁 + private int retsize = 0; + + /** + * 鏋勯犲嚱鏁 + * + * @param smsSendConn + * 鐭俊澶勭悊瀵硅薄 + * @param userid + * 鐢ㄦ埛璐﹀彿 + */ + public RecvRptThread(SmsSendConn smsSendConn, String userid, int retsize) { + // 鐭俊澶勭悊瀵硅薄 + this.smsSendConn = smsSendConn; + // 鐢ㄦ埛璐﹀彿 + this.userid = userid; + // 姣忔璇锋眰鎯宠鑾峰彇鐘舵佹姤鍛婄殑鏈澶ф潯鏁 + this.retsize = retsize; + } + + /** + * 鑾峰彇鐭俊鐘舵佹姤鍛婄嚎绋嬬殑鏂规硶 + */ + public void run() { + // 鐘舵佹姤鍛婇泦鍚 鏈泦鍚堜复鏃跺瓨鍌ㄧ姸鎬佹姤鍛婏紝闇瑕佸皢鏀跺埌鐨勭姸鎬佹姤鍛婁繚瀛樺湪涓涓槦鍒椾腑锛岀敱鍙﹀涓涓嚎绋嬪幓澶勭悊 + List rpts = new ArrayList(); + // 杩斿洖鍊 + int result = -310099; + //鐘舵佹姤鍛婂璞″0鏄 + RPT rpt = null; + // 寰幆璋冪敤鑾峰彇鐘舵佹姤鍛婄殑鏂规硶 + while (true) { + try { + // 鍒濆鍖栬繑鍥炲 + result = -310099; + // 娓呯┖鐘舵佹姤鍛婇泦鍚堜腑鐨勫璞 + rpts.clear(); + // 璋冪敤鑾峰彇鐘舵佹姤鍛婃帴鍙 + result = smsSendConn.getRpt(userid, retsize, rpts); + // 濡傛灉鑾峰彇鐘舵佹姤鍛婃垚鍔燂紝骞朵笖鏈夌姸鎬佹姤鍛 + if (result == 0 && rpts != null && rpts.size() > 0) { + // 鏈夌姸鎬佹姤鍛 + // 娣诲姞鍒扮姸鎬佹姤鍛婇槦鍒 + // add rpt queue + // 杩欓噷涓嶈鍋氬鏉傜殑鑰楁椂鐨勫鐞嗭紝灏嗘敹鍒扮殑鐘舵佹姤鍛婁繚瀛樺湪涓涓槦鍒椾腑锛岀敱鍙﹀涓涓嚎绋嬪幓澶勭悊銆 + + // 浠g爜绀轰緥鏄皢鐘舵佹姤鍛婁俊鎭墦鍗板嚭鏉 + System.out.println("鑾峰彇鐘舵佹姤鍛婃垚鍔燂紒鑾峰彇鍒扮殑鐘舵佹姤鍛婃湁" + rpts.size() + + "鏉¤褰曘"); + for (int i = 0; i < rpts.size(); i++) { + rpt = rpts.get(i); + System.out.println("鐘舵佹姤鍛婅褰:" +"msgid:"+rpt.getMsgid() + ",custid:" + rpt.getCustid() + ",pknum:" + rpt.getPknum() + + ",pktotal:" + rpt.getPktotal() + ",mobile:" + rpt.getMobile()+",countrycode:"+rpt.getCountrycode() + + ",spno:" + rpt.getSpno() + ",exno:" + rpt.getExno() + ",stime:" + rpt.getStime() + + ",rtime:" + rpt.getRtime() + ",status:" + rpt.getStatus() + ",errcode:" + rpt.getErrcode() + + ",errdesc:"+rpt.getErrdesc()+ ",exdata:" + rpt.getExdata()); + } + + // 缁х画寰幆 + continue; + } else { + // 濡傛灉鑾峰彇鐘舵佹姤鍛婂け璐ワ紝鍒欏皢閿欒鐮佹墦鍗 + if (result != 0) { + System.out.println("鑾峰彇鐘舵佹姤鍛婂け璐ワ紝閿欒鐮佷负:" + result); + } + + // 娌℃湁鐘舵佹姤鍛婏紝寤舵椂5绉掍互涓 + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + // 寰幆鍑虹幇寮傚父锛屾殏鍋5绉 + try { + Thread.sleep(5000L); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + } + +} diff --git a/src/com/ample/sms/SmsController.java b/src/com/ample/sms/SmsController.java new file mode 100644 index 000000000..68f0be099 --- /dev/null +++ b/src/com/ample/sms/SmsController.java @@ -0,0 +1,184 @@ +package com.ample.sms; + +import com.amarsoft.are.jbo.*; +import com.amarsoft.are.util.StringFunction; +import com.montnets.mwgate.common.Message; +import com.montnets.mwgate.common.Remains; +import com.montnets.mwgate.smsutil.SmsSendConn; +import jbo.com.tenwa.lease.comm.LB_SMS_NOTICE_TASKS; +import jbo.oti.SMS_SEND; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import java.text.SimpleDateFormat; +import java.util.Date; + +public class SmsController { + private String ids; + private String smsObjType; + + private Logger logger = Logger.getLogger(this.getClass()); + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + + public String sendMessage(JBOTransaction tx){ + try{ + // 实例化短信处理对象 + SmsSendConn smsSendConn = new SmsSendConn(true); + //将发送过来的参数按照@切分出来 + String[] smsID = ids.split("@"); + BizObjectManager bomLSNT = JBOFactory.getBizObjectManager(LB_SMS_NOTICE_TASKS.CLASS_NAME,tx); + BizObjectManager bomSS = JBOFactory.getBizObjectManager(SMS_SEND.CLASS_NAME,tx); + for(String id:smsID){ + sendMessage(smsSendConn,id,bomLSNT,bomSS); + } + }catch(Exception e){ + e.printStackTrace(); + return "ERROR"; + } + return "SUCCESS"; + } + + public void sendMessage(SmsSendConn smsSendConn,String smsId,BizObjectManager bomLSNT,BizObjectManager bomSS) throws JBOException { + BizObject boLSNT = bomLSNT.createQuery("ID=:ID").setParameter("ID", smsId).getSingleResult(true); + int resultCode = -310099; + try { + Message message = createMessageByBizObject(boLSNT); + String smsObType = boLSNT.getAttribute("SEND_OBJ_TYPE").toString(); + if(SmsObjType.URGE_COLLECTION.getType().equals(smsObType)){ + SmsSendManager.setAccountInfo(SmsObjType.URGE_COLLECTION); + }else { + SmsSendManager.setAccountInfo(SmsObjType.NORMAL); + } + StringBuffer returnValue = new StringBuffer(); + /* + 发送短信 + */ + resultCode = smsSendConn.singleSend(message, returnValue); + boLSNT = this.saveObject(boLSNT,bomSS,returnValue.toString(),resultCode); + bomLSNT.saveObject(boLSNT); + + } catch (Exception e) { + logger.error("短信发送执行失败。", e); + } + + } + public BizObject saveObject(BizObject boLSNT,BizObjectManager bomSS,String returnValue,int resultCode) throws JBOException { + String smsStatus = "未发送"; + + // result为0:成功;非0:失败 + if (resultCode == 0) { + smsStatus = "已发送"; + System.out.println("单条发送提交成功:"+returnValue); + }else { + System.out.println("单条发送提交失败,错误码:" + resultCode); + smsStatus = "未发送"; + } + + BizObject boSS = bomSS.newObject(); + boSS.setAttributeValue("MOBILE",boLSNT.getAttribute("PHONE_NUMBER").toString()); + boSS.setAttributeValue("CONTENT",boLSNT.getAttribute("SMS_CONTENT").getString()); + boSS.setAttributeValue("SMS_ID",boLSNT.getAttribute("ID").toString()); + boSS.setAttributeValue("SEND_TIME", StringFunction.getTodayNow()); + boSS.setAttributeValue("RESULT_CODE",resultCode); + boSS.setAttributeValue("MSGID",StringUtils.substringAfterLast(returnValue.toString(),",")); + boSS.setAttributeValue("SMS_OBJ_TYPE",boLSNT.getAttribute("SEND_OBJ_TYPE").getString()); + bomSS.saveObject(boSS); + + boLSNT.setAttributeValue("SMS_TYPE","IMMEDIATELY"); + boLSNT.setAttributeValue("SEND_RESULT",smsStatus); + boLSNT.setAttributeValue("SEND_TIME",sdf.format(new Date())); + boLSNT.setAttributeValue("SEND_FLAG",resultCode == 0 ? 1 : 0); + return boLSNT; + } + + public String getSmsRemains(JBOTransaction tx){ + String result = "查询失败"; + // 实例化短信处理对象 + SmsSendConn smsSendConn = new SmsSendConn(true); + SmsSendManager.setAccountInfo("02".equals(smsObjType)?SmsObjType.URGE_COLLECTION:SmsObjType.NORMAL); + // 查询余额接口。 + Remains remains = smsSendConn.getRemains(SmsPropertiesUtil.get("userid")); + + //remains不为空 + if(remains==null) + { + return result; + } + //查询成功 + if(remains.getResult()!=0) + { + //查询失败 + System.out.println("查询失败,错误码为:" + remains.getResult()); + return "查询失败,错误码为:" + remains.getResult(); + } + //计费类型为0,条数计费 + if(remains.getChargetype()==0) + { + System.out.println("查询成功,剩余条数为:" + remains.getBalance()+"条"); + return "查询成功,剩余条数为:" + remains.getBalance()+"条"; + }else if(remains.getChargetype()==1) + { + //计费类型为1,金额计费 + System.out.println("查询成功,剩余金额为:" + remains.getMoney()+"元"); + return "查询成功,剩余金额为:" + remains.getMoney()+"元"; + }else + { + System.out.println("未知的计费类型,计费类型:"+remains.getChargetype()); + return "未知的计费类型,计费类型:"+remains.getChargetype(); + } + } + + public String recvRpt(JBOTransaction tx){ + // 实例化短信处理对象 + SmsSendConn smsSendConnRpt = new SmsSendConn(true); + // 每次请求想要获取的状态报告的最大条数。 + int retsizeRpt = 100; + // 实例化状态报告线程 + String userId = "CS1156"; + SmsRecvRptThread recvRptThread = new SmsRecvRptThread(smsSendConnRpt, userId,retsizeRpt); + // 线程获取 启动获取状态报告的线程 + recvRptThread.start(); + System.out.println("获取状态报告的线程启动成功!"); + return "获取状态报告的线程启动成功!"; + } + public Message createMessageByBizObject(BizObject bo) throws JBOException { + //调用短信接口 + String phoneNo = bo.getAttribute("PHONE_NUMBER").getString(); + String smsContent = bo.getAttribute("SMS_CONTENT").getString(); + String smsId = bo.getAttribute("ID").getString(); + // 参数类 + Message message = new Message(); + // 设置用户账号 指定用户账号发送,需要填写用户账号,不指定用户账号发送,无需填写用户账号 + // message.setUserid(userid); + // 设置手机号码 此处只能设置一个手机号码 + message.setMobile(phoneNo); + // 设置内容 + message.setContent(smsContent); + // 设置扩展号为数字字符串且长度不能超过6位,注意通道号+扩展号的总长度不能超过20位,若超出exno无效,如不需要扩展号则不用提交此字段或填空 + message.setExno(""); + // 用户自定义流水编号:最大可支持64位的ASCII字符串:字母、数字、下划线、减号,如不需要则不用提交此字段或填空 + message.setCustid(""); + // 自定义扩展数据:额外提供的最大64位长度的ASCII字符串:字母、数字、下划线、减号,作为自定义扩展数据,填写后,状态报告返回时将会包含这部分数据,如不需要则不用提交此字段或填空 + message.setExdata(smsId); + // 业务类型:最大可支持32个长度的英文字母、数字组合的字符串 + message.setSvrtype(""); + return message; + } + + + public String getSmsObjType() { + return smsObjType; + } + public void setSmsObjType(String smsObjType) { + this.smsObjType = smsObjType; + } + public String getIds() { + return ids; + } + + public void setIds(String ids) { + this.ids = ids; + } + +} diff --git a/src/com/ample/sms/SmsObjType.java b/src/com/ample/sms/SmsObjType.java new file mode 100644 index 000000000..31375cce2 --- /dev/null +++ b/src/com/ample/sms/SmsObjType.java @@ -0,0 +1,24 @@ +package com.ample.sms; + +public enum SmsObjType { + + NORMAL("01","普通"), + URGE_COLLECTION("02","催收"), + MARKETING("03","营销"); + + private String type; + private String desc; + + SmsObjType(String type, String desc) { + this.type=type; + this.desc=desc; + } + + public String getDesc() { + return this.desc; + } + + public String getType() { + return this.type; + } +} diff --git a/src/com/ample/sms/SmsPropertiesUtil.java b/src/com/ample/sms/SmsPropertiesUtil.java new file mode 100644 index 000000000..a8bcc898b --- /dev/null +++ b/src/com/ample/sms/SmsPropertiesUtil.java @@ -0,0 +1,36 @@ +package com.ample.sms; + + +import java.io.IOException; +import java.util.Map; +import java.util.Properties; +import java.util.concurrent.ConcurrentHashMap; + +public class SmsPropertiesUtil { + private static Map attributes; + + public static void load() { + attributes = new ConcurrentHashMap(); + Properties prop = new Properties(); + try { + prop.load(SmsPropertiesUtil.class.getResourceAsStream("/sms.properties")); + for(Map.Entry entry : prop.entrySet()) { + if(entry.getKey() == null || entry.getValue() == null) { + continue; + } + attributes.put(entry.getKey().toString(), entry.getValue().toString()); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void destroy() { + if(attributes != null) attributes.clear(); + } + + public static String get(String propName) { + if(attributes == null) load(); + return attributes.get(propName); + } +} diff --git a/src/com/ample/sms/SmsRecvRptThread.java b/src/com/ample/sms/SmsRecvRptThread.java new file mode 100644 index 000000000..5ded868de --- /dev/null +++ b/src/com/ample/sms/SmsRecvRptThread.java @@ -0,0 +1,98 @@ +package com.ample.sms; + +import com.montnets.mwgate.common.RPT; +import com.montnets.mwgate.smsutil.SmsSendConn; + +import java.util.ArrayList; +import java.util.List; + +public class SmsRecvRptThread extends Thread{ + // 短信处理对象,在这个方法中调用获取状态报告功能 + private SmsSendConn smsSendConn = null; + // 用户账号 + private String userid = null; + // 每次请求想要获取状态报告的最大条数 + private int retsize = 0; + + /** + * 构造函数 + * + * @param smsSendConn + * 短信处理对象 + * @param userid + * 用户账号 + */ + public SmsRecvRptThread(SmsSendConn smsSendConn, String userid, int retsize) { + // 短信处理对象 + this.smsSendConn = smsSendConn; + // 用户账号 + this.userid = userid; + // 每次请求想要获取状态报告的最大条数 + this.retsize = retsize; + } + + /** + * 获取短信状态报告线程的方法 + */ + public void run() { + // 状态报告集合 本集合临时存储状态报告,需要将收到的状态报告保存在一个队列中,由另外一个线程去处理 + List rpts = new ArrayList(); + // 返回值 + int result = -310099; + //状态报告对象声明 + RPT rpt = null; + // 循环调用获取状态报告的方法 + while (true) { + try { + // 初始化返回值 + result = -310099; + // 清空状态报告集合中的对象 + rpts.clear(); + // 调用获取状态报告接口 + result = smsSendConn.getRpt(userid, retsize, rpts); + // 如果获取状态报告成功,并且有状态报告 + if (result == 0 && rpts != null && rpts.size() > 0) { + // 有状态报告 + // 添加到状态报告队列 + // add rpt queue + // 这里不要做复杂的耗时的处理,将收到的状态报告保存在一个队列中,由另外一个线程去处理。 + + // 代码示例是将状态报告信息打印出来 + System.out.println("获取状态报告成功!获取到的状态报告有" + rpts.size() + + "条记录。"); + for (int i = 0; i < rpts.size(); i++) { + rpt = rpts.get(i); + System.out.println("状态报告记录:" +"msgid:"+rpt.getMsgid() + ",custid:" + rpt.getCustid() + ",pknum:" + rpt.getPknum() + + ",pktotal:" + rpt.getPktotal() + ",mobile:" + rpt.getMobile()+",countrycode:"+rpt.getCountrycode() + + ",spno:" + rpt.getSpno() + ",exno:" + rpt.getExno() + ",stime:" + rpt.getStime() + + ",rtime:" + rpt.getRtime() + ",status:" + rpt.getStatus() + ",errcode:" + rpt.getErrcode() + + ",errdesc:"+rpt.getErrdesc()+ ",exdata:" + rpt.getExdata()); + } + + // 继续循环 + continue; + } else { + // 如果获取状态报告失败,则将错误码打印 + if (result != 0) { + System.out.println("获取状态报告失败,错误码为:" + result); + } + + // 没有状态报告,延时5秒以上 + try { + Thread.sleep(5000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + // 循环出现异常,暂停5秒 + try { + Thread.sleep(5000L); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + } +} diff --git a/src/com/ample/sms/SmsRptServlet.java b/src/com/ample/sms/SmsRptServlet.java new file mode 100644 index 000000000..f62fb57f4 --- /dev/null +++ b/src/com/ample/sms/SmsRptServlet.java @@ -0,0 +1,128 @@ +package com.ample.sms; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.montnets.mwgate.common.EncryptUtil; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; + +public class SmsRptServlet extends HttpServlet{ + public SmsRptServlet() { + } + private static final long serialVersionUID = 1L; + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + System.out.println("请求回调开始"); + response.setContentType("application/json;charset:utf-8"); + response.setHeader("Cache-Control", "no-store"); + response.setHeader("Pragma", "no-cache"); + response.setDateHeader("Expires", 0L); + response.setCharacterEncoding("utf-8"); + int result = -100999; + JSONObject resultJson = new JSONObject(); + resultJson.put("cmd","RPT_RESP"); + PrintWriter out = response.getWriter(); + try{ + if (!WriteRptThread.rptIsAlive()) { + WriteRptThread.getRptthread().start(); + } + //进行初步验证 + String userid = request.getParameter("userid"); + String pwd = request.getParameter("pwd"); + String timestamp = request.getParameter("timestamp"); + String cmd = request.getParameter("cmd"); + String seqid =request.getParameter("seqid"); + if(!(SmsPropertiesUtil.get("userid").equals(userid)||SmsPropertiesUtil.get("urge_userid").equals(userid))){ + return; + } + String normalVld = EncryptUtil.encryptPwd(userid,SmsPropertiesUtil.get("pwd"),timestamp); + String urgeVld = EncryptUtil.encryptPwd(userid,SmsPropertiesUtil.get("urge_pwd"),timestamp); + if(!(normalVld.equals(pwd)||urgeVld.equals(pwd))){ + return; + } + + String currDate = FileUtil.getCurrTime(); + String fileUrl = SmsPropertiesUtil.get("log_path") + "file/rpt/"+ currDate +"/RPT.txt"; + String rpts = request.getParameter("rpts"); + int count = 0; + if (rpts != null && rpts.length() > 0) { + Object object = JSON.parse(rpts); + if(object instanceof JSONArray){ + JSONArray jsonArray = (JSONArray)object; + for(Iterator it = jsonArray.iterator(); it.hasNext(); ++count) { + JSONObject rptJsn = (JSONObject)it.next(); + String errDesc = rptJsn.getString("errdesc"); + byte[] byte_test = errDesc.getBytes(StandardCharsets.ISO_8859_1); + errDesc = new String(byte_test,"utf-8"); + rptJsn.put("errdesc",decode(errDesc)); + JSONObject jo = new JSONObject(); + jo.put("rpt",rptJsn); + jo.put("userid",userid); + jo.put("pwd",pwd); + jo.put("timestamp",timestamp); + jo.put("cmd",cmd); + jo.put("seqid",seqid); + jo.put("fileUrl",fileUrl); + WriteRptThread.rptQueue.put(jo); + } + }else if(object instanceof JSONObject){ + JSONObject rptJsn = (JSONObject)object; + String errDesc = rptJsn.getString("errdesc"); + byte[] byte_test = errDesc.getBytes(StandardCharsets.ISO_8859_1); + errDesc = new String(byte_test,"utf-8"); + rptJsn.put("errdesc",decode(errDesc)); + JSONObject jo = new JSONObject(); + jo.put("rpt",object); + jo.put("userid",userid); + jo.put("pwd",pwd); + jo.put("timestamp",timestamp); + jo.put("cmd",cmd); + jo.put("seqid",seqid); + jo.put("fileUrl",fileUrl); + WriteRptThread.rptQueue.put(jo); + count = 1; + } + result=0; + } + + System.out.println("接收到Rpt记录:" + count + "条"); + + resultJson.put("seqid",seqid); + resultJson.put("result",result); + out.print(resultJson.toJSONString()); + out.close(); + }catch (Exception e){ + e.printStackTrace(); + //pwd = "{\"cmd\":\"RPT_RESP\",\"seqid\":" + seqid + ",\"result\":-100999}"; + resultJson.put("seqid",""); + resultJson.put("result",result); + out.print(resultJson.toJSONString()); + out.close(); + } + + + } + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + doPost(request, response); + } + + private String decode(String content) { + try { + return URLDecoder.decode(content, "UTF-8"); + } catch (Exception var3) { + var3.printStackTrace(); + return null; + } + } + + +} diff --git a/src/com/ample/sms/SmsSendManager.java b/src/com/ample/sms/SmsSendManager.java new file mode 100644 index 000000000..30d597366 --- /dev/null +++ b/src/com/ample/sms/SmsSendManager.java @@ -0,0 +1,245 @@ +package com.ample.sms; + +import com.montnets.mwgate.common.*; +import com.montnets.mwgate.smsutil.ConfigManager; +import com.montnets.mwgate.smsutil.SmsSendConn; + +import java.util.ArrayList; +import java.util.List; + +public class SmsSendManager { + + static { + + + // 获取全局参数单例对象 + GlobalParams globalParams = GlobalParams.getInstance(); + // 设置请求路径 + globalParams.setRequestPath("/sms/v2/std/"); + // 设置是否需要日志 1:需要日志;0:不需要日志 + globalParams.setNeedLog(0); + // 设置http连接池的连接数量 + globalParams.setPoolNumber(16); + + //设置密码加密类型 + globalParams.setPwdEncryptType(PwdEncryptEnum.MD5); + + //设置下行内容的加密类型 明文 + globalParams.setMsgMtEncrypt(ContentEncryptEnum.PLAIN); + //下行内容加密类型还有 ContentEncryptEnum.SM4_ECB_ZEROPADDING和ContentEncryptEnum.SM4_ECB_PKCS7PADDING + //如果设置为以上两种SM4加密类型,则还需要设置参数 + //globalParams.setMtKey(SecretKeyEnum.SM3HASH_KEY);或者globalParams.setMtKey(SecretKeyEnum.FIXED_KEY); + //如果设置为SecretKeyEnum.FIXED_KEY + //则还需要设置固定秘钥,秘钥是双方共同约定好的 + //globalParams.setMtFixedKey("0123456789abcdeffedcba9876543210"); + + //设置下行内容的编码类型 UTF-8 + globalParams.setMsgMtEncode(ContentEncodeEnum.UTF_8); + + //设置上行内容的加密类型 明文 + globalParams.setMsgMoEncrypt(ContentEncryptEnum.PLAIN); + //上行内容加密类型还有 ContentEncryptEnum.SM4_ECB_ZEROPADDING和ContentEncryptEnum.SM4_ECB_PKCS7PADDING + //如果设置为以上两种SM4加密类型,则还需要设置参数 + //globalParams.setMoKey(SecretKeyEnum.SM3HASH_KEY);或者globalParams.setMoKey(SecretKeyEnum.FIXED_KEY); + //如果设置为SecretKeyEnum.FIXED_KEY + //则还需要设置固定秘钥,秘钥是双方共同约定好的 + //globalParams.setMoFixedKey("0123456789abcdeffedcba9876543210"); + + // 设置用户账号信息 + setAccountInfo(SmsObjType.NORMAL); + + + } + + /** + * @description 设置用户账号信息 + */ + public static void setAccountInfo(SmsObjType smsObjType) { + // 设置用户账号信息 + + // 用户账号 + String userid = SmsPropertiesUtil.get("userid"); + // 密码 + String password = SmsPropertiesUtil.get("pwd"); + + if((SmsObjType.URGE_COLLECTION).equals(smsObjType)){ + userid = SmsPropertiesUtil.get("urge_userid"); + password = SmsPropertiesUtil.get("urge_pwd"); + } + + // 发送优先级 + int priority = 1; + // 主IP信息,请前往您的控制台获取请求域名(IP)或联系梦网客服进行获取 + String ipAddress1 = SmsPropertiesUtil.get("ipAddress1"); + + // 备用IP1信息 + String ipAddress2 = SmsPropertiesUtil.get("ipAddress2"); + // 备用IP2信息 + String ipAddress3 = SmsPropertiesUtil.get("ipAddress3"); + // 备用IP3信息 + String ipAddress4 = SmsPropertiesUtil.get("ipAddress4"); + // 返回值 + int result = -310007; + try { + // 设置用户账号信息 + result = ConfigManager.setAccountInfo(userid, password, priority, + ipAddress1, ipAddress2, ipAddress3, ipAddress4); + // 判断返回结果,0设置成功,否则失败 + if (result == 0) { + System.out.println("设置"+smsObjType.getDesc()+"用户账号信息成功!"); + } else { + System.out.println("设置"+smsObjType.getDesc()+"用户账号信息失败,错误码:" + result); + } + } catch (Exception e) { + // 异常处理 + e.printStackTrace(); + } + } + + /** + * + * @description 单条发送 + * @param smsSendConn + * 短信处理对象,在这个方法中调用发送短信功能 + * @param message + * 短信 + */ + public static void singleSend(SmsSendConn smsSendConn,Message message) { + try { + + // 返回的流水号 + StringBuffer returnValue = new StringBuffer(); + // 返回值 + int result = -310099; + // 发送短信 + result = smsSendConn.singleSend(message, returnValue); + // result为0:成功 + if (result == 0) { + System.out.println("单条发送提交成功!"); + System.out.println(returnValue.toString()); + } + // result为非0:失败 + else { + System.out.println("单条发送提交失败,错误码:" + result); + } + } catch (Exception e) { + // 异常处理 + e.printStackTrace(); + } + } + + /** + * + * @description 个性化群发 + * @param smsSendConn + * 短信处理对象,在这个方法中调用发送短信功能 + * @param userid + * 用户账号 + * 暂时还未使用。因为原有短信和定时任务逻辑单位为每条,在不进行大改动的情况下,暂时不用群发功能。 + * 原有短信发送逻辑:1.在LB_SMS_NOTICE_TASKS表中新建待发送短信, + * 2.然后在qrtz_jbo_detail和msg_send_relative中创建每条短信的定时任务,定时任务触发时间为当前时间+2秒。 + */ + public static void multiSend(SmsSendConn smsSendConn, String userid) { + try { + // List集合 + List multixMts = new ArrayList(); + // 第一条 短信对象 + MultiMt multixMt1 = new MultiMt(); + // 手机号 + multixMt1.setMobile("18101193112"); + // 短信内容 + multixMt1.setContent("测试第一条!"); + // 设置扩展号 + multixMt1.setExno(""); + // 用户自定义流水编号 + multixMt1.setCustid("111"); + // 自定义扩展数据 + multixMt1.setExdata("222"); + // 业务类型 + multixMt1.setSvrtype(""); + // 添加到集合中去 + multixMts.add(multixMt1); + + // 第二条 短信对象 + MultiMt multixMt2 = new MultiMt(); + // 手机号 + multixMt2.setMobile("18101193113"); + // 短信内容 + multixMt2.setContent("测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!测试第二条!"); + // 设置扩展号 + multixMt2.setExno(""); + // 用户自定义流水编号 + multixMt2.setCustid("111"); + // 自定义扩展数据 + multixMt2.setExdata("222"); + // 业务类型 + multixMt2.setSvrtype(""); + // 添加到集合中去 + multixMts.add(multixMt2); + + // 返回的流水号 + StringBuffer returnValue = new StringBuffer(); + // 返回值 + int result = -310099; + + //设置用户账号 指定用户账号发送,需要填写用户账号,不指定用户账号发送,无需填写用户账号 + // 发送短信 + result = smsSendConn.multiSend(userid, 0L, multixMts, returnValue); + // result为0:成功 + if (result == 0) { + System.out.println("个性化群发提交成功!"); + System.out.println(returnValue.toString()); + } + // result为非0:失败 + else { + System.out.println("个性化群发提交失败,错误码:" + result); + } + } catch (Exception e) { + // 异常处理 + e.printStackTrace(); + } + + } + + /** + * 查询剩余金额或条数接口 + */ + public static void getRemains(SmsSendConn smsSendConn,String userid) + { + try + { + // 查询余额接口。 + Remains remains = smsSendConn.getRemains(userid); + + //remains不为空 + if(remains==null) + { + System.out.println("查询失败。"); + return; + } + //查询成功 + if(remains.getResult()!=0) + { + //查询失败 + System.out.println("查询失败,错误码为:" + remains.getResult()); + return; + } + //计费类型为0,条数计费 + if(remains.getChargetype()==0) + { + System.out.println("查询成功,剩余条数为:" + remains.getBalance()+"条"); + }else if(remains.getChargetype()==1) + { + //计费类型为1,金额计费 + System.out.println("查询成功,剩余金额为:" + remains.getMoney()+"元"); + }else + { + System.out.println("未知的计费类型,计费类型:"+remains.getChargetype()); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/src/com/ample/sms/WriteRptThread.java b/src/com/ample/sms/WriteRptThread.java new file mode 100644 index 000000000..27bb98183 --- /dev/null +++ b/src/com/ample/sms/WriteRptThread.java @@ -0,0 +1,110 @@ +package com.ample.sms; + +import com.alibaba.fastjson.JSONObject; +import com.amarsoft.are.jbo.BizObject; +import com.amarsoft.are.jbo.BizObjectManager; +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.are.jbo.JBOFactory; +import jbo.com.tenwa.lease.comm.LB_SMS_NOTICE_TASKS; +import jbo.oti.SMS_RPT; + +import java.text.SimpleDateFormat; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.LinkedBlockingQueue; + +public class WriteRptThread extends Thread{ + public static LinkedBlockingQueue rptQueue = new LinkedBlockingQueue(); + private static boolean STOP = false; + private static Thread rptThread = new WriteRptThread(); + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + private WriteRptThread() { + } + + public void run() { + String content = ""; + String filePath = ""; + STOP = false; + try { + while(!STOP) { + JSONObject rptJson = (JSONObject)rptQueue.take(); + filePath = rptJson.get("fileUrl").toString(); + rptJson.remove("fileUrl"); + content = this.sdf.format(System.currentTimeMillis()) + " " + rptJson.toJSONString()+ "\r\n"; + FileUtil.writeFile(filePath, content); + //保存返回结果 + saveSmsRpt(rptJson); + } + } catch (Exception var5) { + var5.printStackTrace(); + STOP = true; + rptThread = null; + } + + } + + public static boolean rptIsAlive() { + return rptThread.isAlive(); + } + + public static Thread getRptthread() { + if (rptThread == null) { + rptThread = new WriteRptThread(); + } + + return rptThread; + } + public void saveSmsRpt(JSONObject jo) throws JBOException { + JSONObject rptJsn = jo.getJSONObject("rpt"); + BizObjectManager boManager = JBOFactory.getBizObjectManager(SMS_RPT.CLASS_NAME); + BizObjectManager bomLsnt = JBOFactory.getBizObjectManager(LB_SMS_NOTICE_TASKS.CLASS_NAME); + + try { + BizObject bo = boManager.newObject(); + Set rptSet = rptJsn.keySet(); + Iterator rptIt = rptSet.iterator(); + String smsId = null; + while(rptIt.hasNext()){ + String key = rptIt.next(); + bo.getAttribute(key); + //表中没有此值则跳过 + if (bo.indexOfAttribute(key) < 0) { + continue; + } + if("exdata".equals(key)){ + smsId = rptJsn.getString(key); + } + if("msgid".equals(key)){ + String msgId = rptJsn.getString(key); + int count = boManager.createQuery("MSGID=:msgid").setParameter("msgid",msgId).getTotalCount(); + if(count>0){ + return; + } + } + bo.setAttributeValue(key,rptJsn.getString(key)); + } + bo.setAttributeValue("SEQID",jo.get("seqid")); + boManager.saveObject(bo); + + if(smsId!=null&&smsId.length()>0){ + String sendResult = null; + BizObject boLsnt = bomLsnt.createQuery("ID=:smsId").setParameter("smsId",smsId).getSingleResult(true); + if(boLsnt!=null){ + if("0".equals(bo.getAttribute("STATUS").toString())){ + sendResult = "发送成功"; + }else{ + sendResult = bo.getAttribute("errdesc").toString(); + } + boLsnt.setAttributeValue("SEND_RESULT",sendResult); + bomLsnt.saveObject(boLsnt); + } + + } + + } catch (JBOException e) { + e.printStackTrace(); + } + + } +} diff --git a/src_jbo/jbo/oti/SMS_RPT.java b/src_jbo/jbo/oti/SMS_RPT.java new file mode 100644 index 000000000..8bb7f97b7 --- /dev/null +++ b/src_jbo/jbo/oti/SMS_RPT.java @@ -0,0 +1,84 @@ +package jbo.oti; + +import java.lang.String; + +/** +* 短信状态推送记录表 - JBO命名常量类

+* Note: This file is generated by ADE tools, dont modify it.
+ +*/ +public interface SMS_RPT{ + /** + * 短信状态推送记录表

+ * 代表本类映射的BizObjectClass + */ + public static final String CLASS_NAME = "jbo.oti.SMS_RPT"; + /** + * 唯一标识 LONG(64)
+ */ + public static final String MSGID = "MSGID"; + /** + * 自定义流水号 STRING(50)
+ */ + public static final String CUSTID = "CUSTID"; + /** + * 当前条数 INT(32)
+ */ + public static final String PKNUM = "PKNUM"; + /** + * 总条数 INT(32)
+ */ + public static final String PKTOTAL = "PKTOTAL"; + /** + * 手机号 STRING(15)
+ */ + public static final String MOBILE = "MOBILE"; + /** + * 手机号国际区号 INT(10)
+ */ + public static final String COUNTRYCODE = "COUNTRYCODE"; + /** + * 完整的通道号 STRING(32)
+ */ + public static final String SPNO = "SPNO"; + /** + * 下行时填写的exno STRING(32)
+ */ + public static final String EXNO = "EXNO"; + /** + * 下行发送时间 STRING(32)
+ */ + public static final String STIME = "STIME"; + /** + * 状态报告返回时间 STRING(32)
+ */ + public static final String RTIME = "RTIME"; + /** + * 接收状态:0,成功;非0,失败 INT(20)
+ */ + public static final String STATUS = "STATUS"; + /** + * 状态报告错误代码 STRING(32)
+ */ + public static final String ERRCODE = "ERRCODE"; + /** + * 状态报告错误代码的描述 STRING(50)
+ */ + public static final String ERRDESC = "ERRDESC"; + /** + * 下行时填写的exdata STRING(32)
+ */ + public static final String EXDATA = "EXDATA"; + /** + * 短信类型 STRING(32)
+ */ + public static final String SMSTYPE = "SMSTYPE"; + /** + * 状态报告类型 STRING(32)
+ */ + public static final String RPTTYPE = "RPTTYPE"; + /** + * 请求消息流水号 INT(32)
+ */ + public static final String SEQID = "SEQID"; +} \ No newline at end of file diff --git a/src_jbo/jbo/oti/SMS_SEND.java b/src_jbo/jbo/oti/SMS_SEND.java new file mode 100644 index 000000000..35820902f --- /dev/null +++ b/src_jbo/jbo/oti/SMS_SEND.java @@ -0,0 +1,68 @@ +package jbo.oti; + +import java.lang.String; + +/** + * 短信发送记录表 - JBO命名常量类

+ * Note: This file is generated by ADE tools, dont modify it.
+ + */ +public interface SMS_SEND{ + /** + * 短信发送记录表

+ * 代表本类映射的BizObjectClass + */ + public static final String CLASS_NAME = "jbo.oti.SMS_SEND"; + /** + * 唯一标识 LONG(64)
+ */ + public static final String ID = "ID"; + /** + * 接口方短信唯一标识 LONG(64)
+ */ + public static final String MSGID = "MSGID"; + /** + * 手机号 STRING(15)
+ */ + public static final String MOBILE = "MOBILE"; + /** + * 短信内容 STRING(990)
+ */ + public static final String CONTENT = "CONTENT"; + /** + * STRING(20)
+ */ + public static final String EXNO = "EXNO"; + /** + * 自定义流水号 STRING(50)
+ */ + public static final String CUSTID = "CUSTID"; + /** + * 短信类型 STRING(32)
+ */ + public static final String SVRTYPE = "SVRTYPE"; + /** + * 返回结果编码 STRING(32)
+ */ + public static final String RESULT_CODE = "RESULT_CODE"; + /** + * 返回结果描述 STRING(100)
+ */ + public static final String RESULT_DESC = "RESULT_DESC"; + /** + * 下行时填写的exdata STRING(32)
+ */ + public static final String EXDATA = "EXDATA"; + /** + * 发送时间 STRING(32)
+ */ + public static final String SEND_TIME = "SEND_TIME"; + /** + * 系统中短信唯一标识 STRING(32)
+ */ + public static final String SMS_ID = "SMS_ID"; + /** + * 系统中短信唯一标识 STRING(32)
+ */ + public static final String SMS_OBJ_TYPE = "SMS_OBJ_TYPE"; +} \ No newline at end of file diff --git a/src_tenwa/com/tenwa/message/JobSendMessage.java b/src_tenwa/com/tenwa/message/JobSendMessage.java index 051dd9670..f578939e2 100644 --- a/src_tenwa/com/tenwa/message/JobSendMessage.java +++ b/src_tenwa/com/tenwa/message/JobSendMessage.java @@ -1,9 +1,9 @@ package com.tenwa.message; -import com.alibaba.fastjson.JSONObject; -import com.amarsoft.are.jbo.*; -import com.tenwa.lease.util.SendMessageUtil; -import jbo.com.tenwa.lease.comm.LB_SMS_NOTICE_TASKS; +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.are.jbo.JBOFactory; +import com.amarsoft.are.jbo.JBOTransaction; +import com.ample.sms.SmsController; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.Job; @@ -11,7 +11,6 @@ import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.text.SimpleDateFormat; -import java.util.Date; public class JobSendMessage implements Job{ @@ -26,34 +25,9 @@ public class JobSendMessage implements Job{ tx= JBOFactory.createJBOTransaction(); smsnoticeid = context.getJobDetail().getJobDataMap().getString("smsnoticeid"); logger.info("short message running..... LB_SMS_NOTICE_TASKS[ID]: "+smsnoticeid); - BizObjectManager bomNotice = JBOFactory.getBizObjectManager(LB_SMS_NOTICE_TASKS.CLASS_NAME,tx); - BizObject notice = bomNotice.createQuery("id=:id").setParameter("id", smsnoticeid).getSingleResult(true); - if(notice != null){ - if(notice.getAttribute("send_flag").getInt() == 0){ - String result = null; - boolean flagErrStatus = true; - try { - result = SendMessageUtil.sendMessageByHttpClient(notice.getAttribute("phone_number").getString(), notice.getAttribute("sms_content").getString()); - if(!result.matches("^[0-9].*")){ - JSONObject jsonObject = JSONObject.parseObject(result); - if(jsonObject.getIntValue("status")==100){ - flagErrStatus = false; - result = "全部成功"; - }else{ - result = getResultCodeInfoNew(jsonObject.getString("status")); - } - } - } catch (Exception e) { - logger.error("短信发送任务执行失败,LB_SMS_NOTICE_TASKS[ID] : "+smsnoticeid, e); - result = "发送失败,发送遇到异常:" + e.getMessage(); - } - notice.setAttributeValue("sms_type", "IMMEDIATELY"); - notice.setAttributeValue("send_result", result); - notice.setAttributeValue("send_time", sdf.format(new Date())); - notice.setAttributeValue("send_flag", flagErrStatus ? 0 : 1); - bomNotice.saveObject(notice); - } - } + SmsController sc = new SmsController(); + sc.setIds(smsnoticeid); + sc.sendMessage(tx); tx.commit(); } catch (Exception e) { logger.error("short message error LB_SMS_NOTICE_TASKS[ID] : "+smsnoticeid ,e); @@ -65,53 +39,4 @@ public class JobSendMessage implements Job{ } } - public static String getResultCodeInfoNew(String code){ - String codeMessage = ""; - switch(code){ - case "101": codeMessage = "参数错误"; break; - case "102": codeMessage = "号码错误"; break; - case "103": codeMessage = "当日余量不足"; break; - case "104": codeMessage = "请求超时"; break; - case "105": codeMessage = "用户余量不足"; break; - case "106": codeMessage = "非法用户"; break; - case "107": codeMessage = "提交号码超限"; break; - case "111": codeMessage = "签名不合法"; break; - case "120": codeMessage = "内容长度超长,请不要超过500个字"; break; - case "121": codeMessage = "内容中有屏蔽词"; break; - case "131": codeMessage = "IP非法"; break; - default : codeMessage = code ; break; - } - return codeMessage; - } - - public static String getResultCodeInfo(String code){ - String codeMessage = ""; - switch(code){ - case "-1": codeMessage = "签权失败"; break; - case "-2": codeMessage = "未检索到被叫号码"; break; - case "-3": codeMessage = "被叫号码过多"; break; - case "-4": codeMessage = "内容未签名"; break; - case "-5": codeMessage = "内容过长"; break; - case "-6": codeMessage = "余额不足"; break; - case "-7": codeMessage = "暂停发送"; break; - case "-8": codeMessage = "保留"; break; - case "-9": codeMessage = "定时发送时间格式错误"; break; - case "-10": codeMessage = "下发内容为空"; break; - case "-11": codeMessage = "账户无效"; break; - case "-12": codeMessage = "Ip地址非法"; break; - case "-13": codeMessage = "操作频率快"; break; - case "-14": codeMessage = "操作失败"; break; - case "-15": codeMessage = "拓展码无效"; break; - case "-16": codeMessage = "取消定时,seqid错误"; break; - case "-18": codeMessage = "暂留"; break; - case "-19": codeMessage = "未开通上行"; break; - case "-20": codeMessage = "暂留"; break; - case "-21": codeMessage = "包含屏蔽词"; break; - default : codeMessage = code; break; - } - if("0".equals(codeMessage.substring(0,1))){ - codeMessage = "操作成功"; - } - return codeMessage; - } }