Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
fuyue82
o2oa
提交
1d99de0e
o2oa
项目概览
fuyue82
/
o2oa
与 Fork 源项目一致
Fork自
浙江兰德纵横网络技术股份有限公司 / o2oa
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
o2oa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1d99de0e
编写于
3月 02, 2022
作者:
F
fancy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
钉钉消息增加cms文档打开功能
上级
a3c00ce3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
100 addition
and
26 deletion
+100
-26
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/DingdingConsumeQueue.java
.../x/message/assemble/communicate/DingdingConsumeQueue.java
+99
-26
o2web/source/x_desktop/js/ddsso.js
o2web/source/x_desktop/js/ddsso.js
+1
-0
未找到文件。
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/DingdingConsumeQueue.java
浏览文件 @
1d99de0e
...
...
@@ -2,6 +2,7 @@ package com.x.message.assemble.communicate;
import
java.net.URLEncoder
;
import
com.x.base.core.project.message.MessageConnector
;
import
org.apache.commons.lang3.StringUtils
;
import
com.google.gson.JsonObject
;
...
...
@@ -29,16 +30,26 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
DingdingMessage
m
=
new
DingdingMessage
();
m
.
setAgent_id
(
Long
.
parseLong
(
Config
.
dingding
().
getAgentId
(),
10
));
m
.
setUserid_list
(
business
.
organization
().
person
().
getObject
(
message
.
getPerson
()).
getDingdingId
());
if
(
StringUtils
.
isEmpty
(
m
.
getUserid_list
()))
{
logger
.
info
(
"没有接收钉钉消息的人员。。。。。。。。。。。。。"
);
return
;
}
if
(
needTransferLink
(
message
.
getType
()))
{
String
workUrl
=
getDingdingOpenWorkUrl
(
message
.
getBody
());
if
(
StringUtils
.
isNotEmpty
(
workUrl
))
{
logger
.
debug
(
"工作url: "
+
workUrl
);
String
openUrl
=
""
;
// cms 文档
if
(
MessageConnector
.
TYPE_CMS_PUBLISH
.
equals
(
message
.
getType
())
||
MessageConnector
.
TYPE_CMS_PUBLISH_TO_CREATOR
.
equals
(
message
.
getType
()))
{
openUrl
=
getDingdingOpenCMSDocumentUrl
(
message
.
getBody
());
}
else
{
// 流程工作相关的
openUrl
=
getDingdingOpenWorkUrl
(
message
.
getBody
());
}
if
(
StringUtils
.
isNotEmpty
(
openUrl
))
{
logger
.
debug
(
"openUrl: "
+
openUrl
);
// dingtalk://dingtalkclient/action/openapp?corpid=免登企业corpId&container_type=work_platform&app_id=0_{应用agentid}&redirect_type=jump&redirect_url=跳转url
String
dingtalkUrl
=
"dingtalk://dingtalkclient/action/openapp?corpid="
+
Config
.
dingding
().
getCorpId
()
+
"&container_type=work_platform&app_id=0_"
+
Config
.
dingding
().
getAgentId
()
+
"&redirect_type=jump&redirect_url="
+
URLEncoder
.
encode
(
work
Url
,
DefaultCharset
.
name
);
logger
.
debug
(
"钉钉pc 打开消息 url:"
+
dingtalkUrl
);
"&redirect_type=jump&redirect_url="
+
URLEncoder
.
encode
(
open
Url
,
DefaultCharset
.
name
);
logger
.
info
(
"钉钉pc 打开消息 url:"
+
dingtalkUrl
);
m
.
getMsg
().
setMsgtype
(
"markdown"
);
m
.
getMsg
().
getMarkdown
().
setTitle
(
message
.
getTitle
());
m
.
getMsg
().
getMarkdown
().
setText
(
"["
+
message
.
getTitle
()+
"]("
+
dingtalkUrl
+
")"
);
...
...
@@ -72,37 +83,63 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
}
}
/**
* 文档打开的url
* @param messageBody
* @return
*/
private
String
getDingdingOpenCMSDocumentUrl
(
String
messageBody
)
{
try
{
String
openPage
=
getOpenPageUrl
(
messageBody
);
String
o2oaUrl
=
Config
.
dingding
().
getWorkUrl
();
if
(
StringUtils
.
isEmpty
(
openPage
))
{
String
id
=
getCmsDocumentId
(
messageBody
);
if
(
StringUtils
.
isEmpty
(
id
))
{
return
null
;
}
String
docUrl
=
"cmsdocMobile.html?id="
+
id
;
o2oaUrl
=
o2oaUrl
+
"ddsso.html?redirect="
+
docUrl
;
}
else
{
o2oaUrl
=
o2oaUrl
+
"ddsso.html?redirect="
+
openPage
;
}
logger
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
return
o2oaUrl
;
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
return
null
;
}
/**
*
生成单点登录和打开工作的地址
*
工作打开的url
* @param messageBody
* @return
*/
private
String
getDingdingOpenWorkUrl
(
String
messageBody
)
{
try
{
String
work
=
getWorkIdFromBody
(
messageBody
);
String
openPage
=
getOpenPageUrl
(
messageBody
);
String
o2oaUrl
=
Config
.
dingding
().
getWorkUrl
();
if
(
StringUtils
.
isEmpty
(
work
)
||
StringUtils
.
isEmpty
(
o2oaUrl
))
{
return
null
;
}
String
workUrl
=
"workmobilewithaction.html?workid="
+
work
;
String
messageRedirectPortal
=
Config
.
dingding
().
getMessageRedirectPortal
();
if
(
messageRedirectPortal
!=
null
&&
!
""
.
equals
(
messageRedirectPortal
))
{
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
// 2021-11-1 钉钉那边无法使用了 不能进行encode 否则签名不通过
if
(
StringUtils
.
isEmpty
(
openPage
))
{
String
work
=
getWorkIdFromBody
(
messageBody
);
if
(
StringUtils
.
isEmpty
(
work
)
||
StringUtils
.
isEmpty
(
o2oaUrl
))
{
return
null
;
}
String
workUrl
=
"workmobilewithaction.html?workid="
+
work
;
String
messageRedirectPortal
=
Config
.
dingding
().
getMessageRedirectPortal
();
if
(
messageRedirectPortal
!=
null
&&
!
""
.
equals
(
messageRedirectPortal
))
{
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
// 2021-11-1 钉钉那边无法使用了 不能进行encode 否则签名不通过
// portal = URLEncoder.encode(portal, DefaultCharset.name);
workUrl
+=
"&redirectlink="
+
portal
;
}
// 2021-11-1 钉钉那边无法使用了 不能进行encode 否则签名不通过
workUrl
+=
"&redirectlink="
+
portal
;
}
// 2021-11-1 钉钉那边无法使用了 不能进行encode 否则签名不通过
// workUrl = URLEncoder.encode(workUrl, DefaultCharset.name);
logger
.
info
(
"o2oa workUrl:"
+
workUrl
);
o2oaUrl
=
o2oaUrl
+
"ddsso.html?redirect="
+
workUrl
;
logger
.
debug
(
"o2oa workUrl:"
+
workUrl
);
o2oaUrl
=
o2oaUrl
+
"ddsso.html?redirect="
+
workUrl
;
}
else
{
o2oaUrl
=
o2oaUrl
+
"ddsso.html?redirect="
+
openPage
;
}
logger
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
// String talkUrl = "dingtalk://dingtalkclient/action/openapp?corpid="+Config.dingding().getCorpId()
// +"&container_type=work_platform&app_id=0_"
// + Config.dingding().getAgentId() + "&redirect_type=jump&redirect_url="
// + URLEncoder.encode(o2oaUrl, DefaultCharset.name);
// logger.info("dingtalk地址:"+talkUrl);
return
o2oaUrl
;
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
...
...
@@ -131,6 +168,42 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
return
null
;
}
/**
* 这个执行的前提是 MessageConnector.TYPE_CMS_PUBLISH.equals(message.getType()) || MessageConnector.TYPE_CMS_PUBLISH_TO_CREATOR.equals(message.getType()) cms的消息
* body获取文档id
* @param messageBody
* @return
*/
private
String
getCmsDocumentId
(
String
messageBody
)
{
try
{
JsonObject
object
=
new
JsonParser
().
parse
(
messageBody
).
getAsJsonObject
();
if
(
object
.
get
(
"id"
)
!=
null
)
{
return
object
.
get
(
"id"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
return
null
;
}
/**
* body里面是否有 openPageUrl 这个字段 有就用这个字段作为跳转页面
* @param messageBody
* @return
*/
private
String
getOpenPageUrl
(
String
messageBody
)
{
try
{
JsonObject
object
=
new
JsonParser
().
parse
(
messageBody
).
getAsJsonObject
();
if
(
object
.
get
(
"openPageUrl"
)
!=
null
)
{
return
object
.
get
(
"openPageUrl"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
return
null
;
}
/**
* 是否需要把钉钉消息转成markdown格式消息
* 根据是否配置了钉钉工作链接、是否是工作消息(目前只支持工作消息)
...
...
o2web/source/x_desktop/js/ddsso.js
浏览文件 @
1d99de0e
...
...
@@ -72,6 +72,7 @@ o2.addReady(function () {
var
uri
=
redirect
;
if
(
dd
.
pc
)
{
// 判断是否是PC端,目前测试这个参数可用
uri
=
redirect
.
replace
(
"
workmobilewithaction.html
"
,
"
work.html
"
);
uri
=
uri
.
replace
(
"
cmsdocMobile.html
"
,
"
cmsdoc.html
"
);
}
history
.
replaceState
(
null
,
"
page
"
,
uri
);
uri
.
toURI
().
go
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录