前面咱們說到微應用中的免登錄,那麼OA的開發的用戶信息就能夠拿到了。數據庫
接下來咱們要說的就是OA中的一個重要的功能就是消息的推送,這個功能是OA必不可少的一個可能,集成釘釘的一個很大的優點就是釘釘提供了會話消息的接口,消息的類型,style,都已經封裝好了。咱們只須要調用就能夠了,而且目前釘釘是免費的。json
企業會話消息樣例:api
Https請求方式: POST服務器
https://oapi.dingtalk.com/message/send?access_token=ACCESS_TOKEN
app
參數 | 參數類型 | 必須 | 說明 |
---|---|---|---|
access_token | String | 是 | 調用接口憑證 |
若是收件人、部門或標籤不存在,發送仍然執行,但返回無效的部分。post
參數 | 說明 |
---|---|
errcode | 返回碼 |
errmsg | 對返回碼的文本描述內容 |
invaliduser | 無效的userid |
invalidparty | 無效的部門id |
forbiddenUserId | 因發送消息過於頻繁或超量而被流控過濾後實際未發送的userid。未被限流的接收者仍會被成功發送。限流規則包括:一、給同一用戶發相同內容消息一天僅容許一次;二、若是是ISV接入方式,給同一用戶發消息一天不得超過100次;若是是企業接入方式,此上限爲500。 |
messageId | 標識企業消息的id,字符串,最長128個字符 |
1spa 2code 3token 4接口 5 6 7 8 |
|
i
個人代碼實現:
假設業務流程:用戶提出的項目變動申請,提交完畢後,會向部門經理髮送一條企業會話,那麼部門經理直接打開會話就能夠直接查看項目變動相關信息,而且能夠進行審批。
個人界面:
在這個界面提交,後臺接收,而且推送:
@RequestMapping("/add_ItemChange.do") @ResponseBody public String add_ItemChange( String department, String project, String orderName, String businessProperty, String changeProvince, String changeCity, String outdoor, String beginTime, String yindaIdentify, String contractType, HttpServletRequest request){ String user_staffId =(String) request.getSession().getAttribute(GlobalConstant.user_staffId); String staff_user_id =(String) request.getSession().getAttribute(GlobalConstant.user_staff_user_id); String user_name =(String) request.getSession().getAttribute(GlobalConstant.user_name); List <String> now_approveList = ddSendMessageUtil.getApprovers(staff_user_id); YoItemChange itemChange = new YoItemChange(); itemChange.setIcAskStaffId(user_staffId); itemChange.setIcAskStaffDepart(department); itemChange.setIcApproveBegin(beginTime); itemChange.setIcAskStaffName(user_name); itemChange.setIcOutroomWork(outdoor); itemChange.setIcChangeProvince(changeProvince); itemChange.setIcWorkCity(changeCity); itemChange.setIcBusinessProperty(businessProperty); itemChange.setIcChangeItem(project); itemChange.setIcChangeOrder(orderName); itemChange.setIcTitle(user_name+"的"+orderName+"項目變動申請"); itemChange.setIcApproveRecord(contractType);//數據庫字段暫時頂替 itemChange.setIcCost(yindaIdentify);//數據庫字段暫時頂替 itemChange.setIcNowApproveName(now_approveList.get(0)); int i= itemChangeMapper.add(itemChange); if(i>0){ DDMessageUtil message = new DDMessageUtil(); message.setMessageUrl("http://yexianglei.ngrok.cc/YindaOA/ItemChange/approve_order_page.do?id="+itemChange.getIcSequenceNo()); message.setPicUrl("/cc"); message.setToUser("07022352451246847"); message.setToParty(""); message.setTitle(user_name+"的項目審批"); message.setText("您好!請查收!"); ddSendMessageUtil.sendMessage(message); return "success"; }else{ return "error"; } }
這段代碼中 ddSendMessageUtil是自行封裝的類,實現推送的功能,其餘代碼就是這個業務上的一些增刪改查。
ddSendMessageUtil詳解:
String access_token = DDSendMessageUtil.getAccess_token(); JSONObject json=HttpsUtil.httpPost(DDSendMessageUtil.baseUrl02+access_token,contentJson);
contentJson 就是消息的json 嚴格按照api中格式。推送的內容,推送的目標都在內。
先獲取access_token,post請求釘釘服務器就能夠推送啦!
private static String baseUrl02="https://oapi.dingtalk.com/message/send?access_token=";
過程就是調用釘釘提供的接口,流程很簡單,釘釘已經作了很好的封裝。