Procházet zdrojové kódy

新增短信扩展插件

sbtjtserver/zhaoxh před 7 měsíci
rodič
revize
965187844f
1 změnil soubory, kde provedl 158 přidání a 0 odebrání
  1. 158 0
      src/main/java/kd/bos/login/utils/DemoSMSSender.java

+ 158 - 0
src/main/java/kd/bos/login/utils/DemoSMSSender.java

@@ -0,0 +1,158 @@
+package kd.bos.login.utils;
+
+import fi.cas.opplugin.TypeUtils;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.login.utils.sms.SMSSender;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import org.json.JSONObject;
+import org.json.XML;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import java.io.*;
+import java.net.Socket;
+import java.util.Calendar;
+
+/**
+ * 通用插件
+ * 2024-09-02 wangj
+ * 主要功能:短信发送扩展调用第三方接口
+ */
+public class DemoSMSSender implements SMSSender {
+    protected static final Log log = LogFactory.getLog(DemoSMSSender.class);
+    @Override
+    public boolean sendMessage(String phone, String message) {
+        Boolean flag = false;
+        //1.获取接口链接等信息
+        DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","dxyz")});
+        String servername =  jkpzxx.getString("nckd_servername");
+        String port =  jkpzxx.getString("nckd_port");
+        //2.获取xml对象
+        String bodyxml = createSingleMessageRequest(phone,message);
+        //3.调用接口
+        JSONObject cbsReturnJson =socketService(servername,port,bodyxml);
+        if(cbsReturnJson!=null) {
+            JSONObject reMessage = cbsReturnJson.getJSONObject("Message");
+            JSONObject reBodyInfo = reMessage.getJSONObject("BodyInfo");
+            if ("success".equals(reBodyInfo.getString("Fs_retMsg"))) {//相应成功
+                if ("000".equals(reBodyInfo.getString("Fs_retCode"))) {
+                    flag = true;
+                    log.info("短信前置机响应成功,前置机接口发送成功");
+                } else {
+                    log.info("短信前置机响应成功,前置机接口发送失败");
+                }
+            } else {
+                log.info("短信发送前置机响应失败");
+            }
+        }
+
+        return flag;
+    }
+
+    private String createSingleMessageRequest(String phone, String message) {
+        try {
+            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+            Document doc = dBuilder.newDocument();
+            //创建Message节点
+            Element rootElement = doc.createElement("Message");
+            doc.appendChild(rootElement);
+            //创建BodyInfo节点
+            Element body = doc.createElement("BodyInfo");
+            rootElement.appendChild(body);
+            //拼接报文
+            createElement(doc, body, "Fs_channelcode", "JSX"); //渠道号
+            createElement(doc, body, "Fs_transcode", "SingleMsg");  //交易码
+            createElement(doc, body, "Fs_rpid", "");        //流水号(待提供)
+            createElement(doc, body, "Fs_phone", phone);        //手机号
+            createElement(doc, body, "Fs_ParamCount", "2");//模板数量
+            createElement(doc, body, "ParamName1", "SmsVerifyCode");//模板名称1
+            createElement(doc, body, "ParamValue1", "");//模板值1
+            createElement(doc, body, "ParamName2", "SceneName");//模板名称2
+            createElement(doc, body, "ParamValue2", "");//模板值2
+
+            createElement(doc, body, "Fs_regOrg", "");//发送机构(待提供)
+            createElement(doc, body, "Fs_bizId", "00007");//业务类型id
+            createElement(doc, body, "Fs_templateld", "2409029227");//模板id
+
+            Calendar calendar = Calendar.getInstance();
+            int year = calendar.get(Calendar.YEAR);
+            int month = calendar.get(Calendar.MONTH) + 1;
+            int day = calendar.get(Calendar.DAY_OF_MONTH);
+            int hour = calendar.get(Calendar.HOUR_OF_DAY);
+            int minute = calendar.get(Calendar.MINUTE);
+            int second = calendar.get(Calendar.SECOND);
+            String Fs_reqDate = String.valueOf(year)+String.valueOf(month)+String.valueOf(day);
+            createElement(doc, body, "Fs_reqDate", Fs_reqDate);
+            String Fs_regTime = tranTime(hour,minute,second);
+            createElement(doc, body, "Fs_regTime", Fs_regTime);
+
+            TransformerFactory transformerFactory = TransformerFactory.newInstance();
+            Transformer transformer = transformerFactory.newTransformer();
+            // 指定编码格式为GBK
+            transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
+            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+
+            DOMSource source = new DOMSource(doc);
+            StringWriter writer = new StringWriter();
+            StreamResult result = new StreamResult(writer);
+            transformer.transform(source, result);
+            return writer.toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    private String tranTime(int hour, int minute, int second) {
+        String Fs_regTime = String.valueOf(hour)+String.valueOf(minute)+String.valueOf(second);
+
+        return Fs_regTime;
+    }
+
+    public static JSONObject socketService(String serverName,String port,String xmlData){
+        try {
+            Socket client = new Socket(serverName, TypeUtils.nullToInt(port));
+            OutputStream outToServer = client.getOutputStream();
+            PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
+            out.println(xmlData);
+
+            InputStream inFromServer = client.getInputStream();
+            BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
+            StringBuilder responseBuilder = new StringBuilder();
+            String line;
+            while ((line = in.readLine()) != null) {
+                responseBuilder.append(line);
+            }
+            String responseJson = responseBuilder.toString();
+            if(responseJson.indexOf("<?xml")>0){
+                int index = responseJson.indexOf("<?xml");
+                responseJson = responseJson.substring(index);
+            }
+
+            JSONObject jsonObject = XML.toJSONObject(responseJson);
+            client.close();
+            return jsonObject;
+        } catch (IOException e) {
+            e.printStackTrace();
+            log.info("短信发送失败:"+e.getMessage());
+        }
+        return null;
+    }
+
+    private static void createElement(Document doc, Element parent, String name, String value) {
+        Element element = doc.createElement(name);
+        element.appendChild(doc.createTextNode(value));
+        parent.appendChild(element);
+    }
+}