前面我们说到微应用中的免登陆,那么OA的开发的用户信息就可以拿到了。
接下来我们要说的就是OA中的一个重要的功能就是消息的推送,这个功能是OA必不可少的一个可能,集成钉钉的一个很大的优势就是钉钉提供了会话消息的接口,消息的类型,style,都已经封装好了。我们只需要调用就可以了,并且目前钉钉是免费的。
企业会话消息样例:
发送企业消息接口说明
请求说明
Https请求方式: POST
https://oapi.dingtalk.com/message/send?access_token=ACCESS_TOKEN
参数说明
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
access_token | String | 是 | 调用接口凭证 |
返回说明
如果收件人、部门或标签不存在,发送仍然执行,但返回无效的部分。
参数 | 说明 |
---|---|
errcode | 返回码 |
errmsg | 对返回码的文本描述内容 |
invaliduser | 无效的userid |
invalidparty | 无效的部门id |
forbiddenUserId | 因发送消息过于频繁或超量而被流控过滤后实际未发送的userid。未被限流的接收者仍会被成功发送。限流规则包括:1、给同一用户发相同内容消息一天仅允许一次;2、如果是ISV接入方式,给同一用户发消息一天不得超过100次;如果是企业接入方式,此上限为500。 |
messageId | 标识企业消息的id,字符串,最长128个字符 |
1 2 3 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=";
过程就是调用钉钉提供的接口,流程很简单,钉钉已经做了很好的封装。