前面咱们说到微应用中的免登录,那么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=";
过程就是调用钉钉提供的接口,流程很简单,钉钉已经作了很好的封装。