给企业微信发信息

package XXX;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.rmi.RemoteException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import javax.net.ssl.HttpsURLConnection;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.rpc.ServiceException;

import org.tempuri.Sms_ServiceLocator;
import org.tempuri.Sms_ServiceSoap;

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;

import net.sf.json.JSONObject;

/**
 * Servlet implementation class DS20SM
 */
@WebServlet("/DS20SM")
public class DS20SM extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private DS20SM_LOG dslog = new DS20SM_LOG();
    private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
    private String FD_NUMBER, FD_TITLE, FD_CREATEDATE, FD_NODENAME, FD_STARTDATE, FD_FACTPERSON, FD_PHONE, FD_PERSONNO,
            FD_URL;
    // corpid为每个企业都拥有唯一的id
    private static String corpid = "XXX";
    // 流程停滞通知 应用的Secret
    private static String corpsecret = "XXX";
    // 流程停滞通知 应用的AgentId
    private Integer agentid = XXX;
    public String ERRORCODE;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

    /*
     * 获取企业微信access_token
     */
    public String get_token() {
        try {
            String token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret="
                    + corpsecret;
            URL u = new URL(token_url);
            HttpsURLConnection huconn = (HttpsURLConnection) u.openConnection();
            BufferedReader in = null;
            StringBuilder tokenjson = new StringBuilder();
            huconn.connect();
            in = new BufferedReader(new InputStreamReader(huconn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                tokenjson.append(line);
            }
            if (in != null) {
                in.close();
            }
            // 返回结果为JSONObject格式,需要再做一步操作获取token
            JSONObject myJson = new JSONObject();
            myJson = JSONObject.fromObject(tokenjson.toString());
            String token = myJson.getString("access_token");
            // 打印返回结果
            dslog.Write("时间:" + df.format(new Date()) + "\t tokenjson=\t" + tokenjson.toString());
            System.out.println("时间:" + df.format(new Date()) + "\t tokenjson=\t" + tokenjson);
            // 打印token
            if (token != null) {
                System.out.println("时间:" + df.format(new Date()) + "\t access_token=\t" + token);
                return token;
            } else {
                System.out.println("时间:" + df.format(new Date()) + "access_token获取失败!");
            }
        } catch (Exception e) {
            try {
                dslog.Write("时间:" + df.format(new Date()) + "程序错误!access_token获取失败!");
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            System.out.println("时间:" + df.format(new Date()) + "程序错误!access_token获取失败!");
            e.printStackTrace();
        }
        return null;
    }

    /*
     * 给企业微信发送消息 return resualtjson.toString(); POST
     */
    public String sendHttpsPost(String connectUrl, String data) {
        try {
            HttpsURLConnection conn = (HttpsURLConnection) new URL(connectUrl).openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Charset", "UTF-8");
            // 设置文件类型:
            conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
            // 设置接收类型否则返回415错误
            // conn.setRequestProperty("accept","*/*")此处为暴力方法设置接受所有类型,以此来防范返回415;
            conn.setRequestProperty("accept", "application/json");
            if (data != null) {
                DataOutputStream out = new DataOutputStream(conn.getOutputStream());
                out.write(data.getBytes(("utf-8")));
                out.flush();
                out.close();
            }

            // 获取输入流,得到返回信息。
            BufferedReader in = null;
            StringBuilder resualtjson = new StringBuilder();
            conn.connect();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                resualtjson.append(line);
            }
            if (in != null) {
                in.close();
            }
            // 打印返回结果
            System.out.println("时间:" + df.format(new Date()) + "\t返回信息=\t" + resualtjson);
            dslog.Write("时间:" + df.format(new Date()) + "\t返回信息=\t" + resualtjson);
            return resualtjson.toString();
        } catch (Exception e) {
            try {
                dslog.Write("时间:" + df.format(new Date()) + "\t程序错误!");
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            System.out.println("时间:" + df.format(new Date()) + "\t程序错误!");
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 解析发送企业微信的返回信息 确认errcode是否为0——发送成功
     * @throws Exception 
     */
    public String parseJson(String TOKEN, String data) throws Exception {
        String connectUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + TOKEN;
        String json = sendHttpsPost(connectUrl, data);
        JSONObject mJsonObject = new JSONObject();
        mJsonObject = JSONObject.fromObject(json);
        ERRORCODE = mJsonObject.getString("errcode");
        if (ERRORCODE.equals("0")) {
            dslog.Write("ERRORCODE=" + ERRORCODE +"\t时间:" + df.format(new Date()) + "\t企业微信消息发送成功!");
            dslog.Write("--------------------------------------");
            System.out.println("ERRORCODE=" + ERRORCODE);
            System.out.println("时间:" + df.format(new Date()) + "\t企业微信消息发送成功!");
        } else {
            dslog.Write("ERRORCODE=" + ERRORCODE +"\t时间:" + df.format(new Date()) + "\t企业微信消息发送失败!");
            dslog.Write("--------------------------------------");
            System.out.println("ERRORCODE=" + ERRORCODE);
            System.out.println("时间:" + df.format(new Date()) + "\t企业微信消息发送失败!");
        }
        return ERRORCODE;
    }

    /*
     * 检索超过24小时未审批流程 SQL视图:v_START_DATE_OVER24Hour
     * 测试时使用
     * String sql = "SELECT * FROM v_START_DATE_OVER24Hour where 当前处理人='XXX'";
     */
    public void start_date_over24h(String TOKEN) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        Calendar cal = Calendar.getInstance();
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);

        String DBDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String DBURL = "jdbc:sqlserver://IP:1433;DatabaseName=XXX";
        String DBUSER = "XXX";
        String PASSWORD = "XXX";
        String sql = "SELECT * FROM v_START_DATE_OVER24Hour";
        try {
            Class.forName(DBDRIVER);
            Connection cn = (Connection) DriverManager.getConnection(DBURL, DBUSER, PASSWORD);
            java.sql.Statement st = cn.createStatement();
            ResultSet rs = st.executeQuery(sql);

            while (rs.next()) {
                FD_NUMBER = rs.getString(1);// 申请单编号
                FD_TITLE = rs.getString(2);// 流程表单标题
                FD_CREATEDATE = rs.getString(3);// 流程表单创建时间
                FD_NODENAME = rs.getString(4);// 当前节点名
                FD_STARTDATE = rs.getString(5);// 审批开始时间
                FD_FACTPERSON = rs.getString(6);// 当前节点处理人
                FD_PHONE = rs.getString(7);// 当前处理人手机号
                FD_PERSONNO = rs.getString(8);// 当前处理人员工号
                FD_URL = rs.getString(9);// 流程网址

                if (dayWeek > 1 && dayWeek < 7) {// 星期一到星期五 发送企业微信提醒,周六周日不发送提醒
                    if (FD_PERSONNO != null && FD_PERSONNO != "员工号") {
                        String data = "{" + "  \"touser\": \"" + FD_PERSONNO + "\"," + "  \"toparty\": \"@all\","
                                + "  \"totag\": \"@all\"," + "  \"msgtype\": \"text\"," + "  \"agentid\": " + agentid
                                + "," + "  \"text\": {" + "    \"content\": \"【提醒】\n <a href=\\\"" + FD_URL
                                + " \\\">申请单编号:" + FD_NUMBER + "\t标题:" + FD_TITLE + "\t 在【" + FD_NODENAME
                                + "】节点停滞超过24小时,请您及时审批。</a>\"}," + "  \"safe\": 0," + "  \"enable_id_trans\": 0,"
                                + "  \"enable_duplicate_check\": 0" + "}";
                        //System.out.println(data);
                        dslog.Write("SendJson="+data);
                        // 解析发送信息后返回的JSON
                        parseJson(TOKEN, data);
                    }

                    /**
                     * 调用发手机短信接口发送手机短信息提醒
                     */
                    // if(FD_PHONE != null) {
                    // sendPhoneMessage("oa","oa1234",FD_PHONE,"\n【提醒】\n申请单编号:"
                    // + FD_NUMBER + "\n标题:"
                    // + FD_TITLE + "\n在【" + FD_NODENAME
                    // + "】节点停滞超过24小时,请您及时审批。");
                    // }
                }

            }
            rs.close();// 关闭结果集
            cn.close();// 关闭操作
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            dslog.Write("时间:" + df.format(new Date()) + "\tSQL连接异常");
            System.out.println("时间:" + df.format(new Date()) + "\tSQL连接异常");
            ex.printStackTrace();
        }
    }

    /**
     * 发送手机短信息
     */

    public void sendPhoneMessage(String useacc, String pwd, String iphones, String icontent) {

        Sms_ServiceLocator sms = new Sms_ServiceLocator();
        Sms_ServiceSoap sms_Soap = null;
        try {
            sms_Soap = sms.getsms_ServiceSoap();
            sms_Soap.sendsms(useacc, pwd, iphones, icontent);
        } catch (ServiceException e) {
            // TODO Auto-generated catch block
            System.out.println("ServiceException Service程序报错");
            e.printStackTrace();
        } catch (RemoteException e) {
            System.out.println("Send message is failure!\n");
            e.printStackTrace();
        }
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值