Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ghsby
o2oa
提交
3bd2b973
o2oa
项目概览
ghsby
/
o2oa
落后 Fork 源项目 2880 个版本
Fork自
浙江兰德纵横网络技术股份有限公司 / o2oa
通知
1
Star
1
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,发现更多精彩内容 >>
提交
3bd2b973
编写于
4月 15, 2022
作者:
F
fancy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
外接的几个消息增加cms功能
上级
aba05112
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
252 addition
and
162 deletion
+252
-162
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Dingding.java
...rc/main/java/com/x/base/core/project/config/Dingding.java
+1
-1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/JpushConfig.java
...main/java/com/x/base/core/project/config/JpushConfig.java
+2
-2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Qiyeweixin.java
.../main/java/com/x/base/core/project/config/Qiyeweixin.java
+1
-1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WeLink.java
.../src/main/java/com/x/base/core/project/config/WeLink.java
+1
-1
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/DingdingConsumeQueue.java
.../x/message/assemble/communicate/DingdingConsumeQueue.java
+100
-80
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/MpWeixinConsumeQueue.java
.../x/message/assemble/communicate/MpWeixinConsumeQueue.java
+24
-10
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/QiyeweixinConsumeQueue.java
.../message/assemble/communicate/QiyeweixinConsumeQueue.java
+55
-32
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/WeLinkConsumeQueue.java
...om/x/message/assemble/communicate/WeLinkConsumeQueue.java
+63
-35
o2web/source/x_component_Setting/SettingMobile.js
o2web/source/x_component_Setting/SettingMobile.js
+5
-0
未找到文件。
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Dingding.java
浏览文件 @
3bd2b973
...
...
@@ -46,7 +46,7 @@ public class Dingding extends ConfigObject {
@FieldDescribe
(
"回调encodingAesKey"
)
private
String
encodingAesKey
=
""
;
@FieldDescribe
(
"钉钉消息打开工作的url地址,如:http
://dev
.o2oa.net/x_desktop/"
)
@FieldDescribe
(
"钉钉消息打开工作的url地址,如:http
s://sample
.o2oa.net/x_desktop/"
)
private
String
workUrl
=
""
;
@FieldDescribe
(
"钉钉消息处理完成后跳转到特定的门户页面的Id"
)
...
...
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/JpushConfig.java
浏览文件 @
3bd2b973
...
...
@@ -39,9 +39,9 @@ public class JpushConfig extends ConfigObject {
private
String
appKey
;
@FieldDescribe
(
"极光推送应用的Master Secret"
)
private
String
masterSecret
;
@FieldDescribe
(
"是否开启华为推送"
)
@FieldDescribe
(
"是否开启华为推送
,已废弃
"
)
private
Boolean
huaweiPushEnable
;
@FieldDescribe
(
"华为推送的配置"
)
@FieldDescribe
(
"华为推送的配置
,已废弃
"
)
private
HuaweiPushConfig
huaweiPushConfig
;
@FieldDescribe
(
"苹果推送证书路径"
)
private
String
apnsKeystorePath
;
...
...
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Qiyeweixin.java
浏览文件 @
3bd2b973
...
...
@@ -37,7 +37,7 @@ public class Qiyeweixin extends ConfigObject {
private
String
token
=
""
;
@FieldDescribe
(
"回调encodingAesKey"
)
private
String
encodingAesKey
=
""
;
@FieldDescribe
(
"企业微信消息打开工作的url地址,如:http
://dev
.o2oa.net/x_desktop/"
)
@FieldDescribe
(
"企业微信消息打开工作的url地址,如:http
s://sample
.o2oa.net/x_desktop/"
)
private
String
workUrl
=
""
;
@FieldDescribe
(
"企业微信消息处理完成后跳转到特定的门户页面的Id"
)
private
String
messageRedirectPortal
=
""
;
...
...
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WeLink.java
浏览文件 @
3bd2b973
...
...
@@ -36,7 +36,7 @@ public class WeLink extends ConfigObject {
@FieldDescribe
(
"是否启用消息推送"
)
private
Boolean
messageEnable
;
@FieldDescribe
(
"WeLink消息打开工作的url地址,如:http
://dev
.o2oa.net/x_desktop/"
)
@FieldDescribe
(
"WeLink消息打开工作的url地址,如:http
s://sample
.o2oa.net/x_desktop/"
)
private
String
workUrl
=
""
;
@FieldDescribe
(
"WeLink消息处理完成后跳转到特定的门户页面的Id"
)
...
...
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/DingdingConsumeQueue.java
浏览文件 @
3bd2b973
...
...
@@ -45,7 +45,7 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
+
Config
.
dingding
().
getCorpId
()
+
"&container_type=work_platform&app_id=0_"
+
Config
.
dingding
().
getAgentId
()
+
"&redirect_type=jump&redirect_url="
+
URLEncoder
.
encode
(
openUrl
,
DefaultCharset
.
name
);
LOGGER
.
info
(
"钉钉pc 打开消息 url:
"
+
dingtalkUrl
);
LOGGER
.
info
(
"钉钉pc 打开消息 url:
{}"
,
()->
dingtalkUrl
);
m
.
getMsg
().
setMsgtype
(
"markdown"
);
m
.
getMsg
().
getMarkdown
().
setTitle
(
message
.
getTitle
());
m
.
getMsg
().
getMarkdown
().
setText
(
"["
+
message
.
getTitle
()
+
"]("
+
dingtalkUrl
+
")"
);
...
...
@@ -53,12 +53,11 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
}
else
{
m
.
getMsg
().
getText
().
setContent
(
message
.
getTitle
());
}
// https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=ACCESS_TOKEN
String
address
=
Config
.
dingding
().
getOapiAddress
()
+
"/topapi/message/corpconversation/asyncsend_v2?access_token="
+
Config
.
dingding
().
corpAccessToken
();
LOGGER
.
debug
(
"钉钉发送消息url:
"
+
address
);
LOGGER
.
debug
(
"钉钉消息体:
"
+
m
.
toString
()
);
LOGGER
.
debug
(
"钉钉发送消息url:
{}"
,
()
->
address
);
LOGGER
.
debug
(
"钉钉消息体:
{}"
,
m:
:
toString
);
DingdingMessageResp
resp
=
HttpConnection
.
postAsObject
(
address
,
null
,
m
.
toString
(),
DingdingMessageResp
.
class
);
if
(
resp
.
getErrcode
()
!=
0
)
{
...
...
@@ -119,25 +118,14 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
* @return
*/
private
String
getDingdingOpenCMSDocumentUrl
(
String
messageBody
)
{
String
o2oaUrl
=
null
;
try
{
String
openPage
=
getOpenPageUrl
(
messageBody
);
String
o2oaUrl
=
Config
.
dingding
().
getWorkUrl
()
+
"ddsso.html?redirect="
;
if
(
StringUtils
.
isEmpty
(
openPage
))
{
String
id
=
getCmsDocumentId
(
messageBody
);
if
(
StringUtils
.
isEmpty
(
id
))
{
return
null
;
}
String
docUrl
=
"cmsdocMobile.html?id="
+
id
;
o2oaUrl
=
o2oaUrl
+
docUrl
;
}
else
{
o2oaUrl
=
o2oaUrl
+
openPage
;
}
LOGGER
.
info
(
"o2oa 地址:"
+
o2oaUrl
);
return
o2oaUrl
;
o2oaUrl
=
Config
.
dingding
().
getWorkUrl
()
+
"ddsso.html?redirect="
;
return
OuterMessageHelper
.
getOpenCMSDocumentUrl
(
o2oaUrl
,
messageBody
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
return
null
;
}
return
null
;
}
/**
...
...
@@ -148,10 +136,10 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
*/
private
String
getDingdingOpenWorkUrl
(
String
messageBody
)
{
try
{
String
openPage
=
getOpenPageUrl
(
messageBody
);
String
openPage
=
OuterMessageHelper
.
getOpenPageUrl
(
messageBody
);
String
o2oaUrl
=
Config
.
dingding
().
getWorkUrl
()
+
"ddsso.html?redirect="
;
if
(
StringUtils
.
isEmpty
(
openPage
))
{
String
work
=
getWorkIdFromBody
(
messageBody
);
String
work
=
OuterMessageHelper
.
getWorkIdFromBody
(
messageBody
);
if
(
StringUtils
.
isEmpty
(
work
)
||
StringUtils
.
isEmpty
(
o2oaUrl
))
{
return
null
;
}
...
...
@@ -177,65 +165,6 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
return
null
;
}
/**
* 获取workid or workCompleted
*
* @param messageBody
* @return
*/
private
String
getWorkIdFromBody
(
String
messageBody
)
{
try
{
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"work"
)
!=
null
)
{
return
object
.
get
(
"work"
).
getAsString
();
}
if
(
object
.
get
(
"workCompleted"
)
!=
null
)
{
return
object
.
get
(
"workCompleted"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
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
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
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
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"openPageUrl"
)
!=
null
)
{
return
object
.
get
(
"openPageUrl"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
null
;
}
/**
* 是否需要把钉钉消息转成markdown格式消息 根据是否配置了钉钉工作链接、是否是工作消息(目前只支持工作消息)
*
...
...
@@ -285,4 +214,95 @@ public class DingdingConsumeQueue extends AbstractQueue<Message> {
}
}
/**
* 一些公用方法
*/
public
static
class
OuterMessageHelper
{
/**
* 文档打开的url
* @param messageBody
* @return
*/
public
static
String
getOpenCMSDocumentUrl
(
String
bizBaseUrl
,
String
messageBody
)
{
try
{
String
openPage
=
getOpenPageUrl
(
messageBody
);
String
o2oaUrl
=
bizBaseUrl
;
if
(
StringUtils
.
isEmpty
(
openPage
))
{
String
id
=
getCmsDocumentId
(
messageBody
);
if
(
StringUtils
.
isEmpty
(
id
))
{
return
null
;
}
String
docUrl
=
"cmsdocMobile.html?id="
+
id
;
o2oaUrl
=
o2oaUrl
+
docUrl
;
}
else
{
o2oaUrl
=
o2oaUrl
+
openPage
;
}
LOGGER
.
info
(
"o2oa 业务地址:"
+
o2oaUrl
);
return
o2oaUrl
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
null
;
}
/**
* body里面是否有 openPageUrl 这个字段 有就用这个字段作为跳转页面
*
* @param messageBody
* @return
*/
public
static
String
getOpenPageUrl
(
String
messageBody
)
{
try
{
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"openPageUrl"
)
!=
null
)
{
return
object
.
get
(
"openPageUrl"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
null
;
}
/**
* 获取workid
*
* @param messageBody
* @return
*/
public
static
String
getWorkIdFromBody
(
String
messageBody
)
{
try
{
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"work"
)
!=
null
)
{
return
object
.
get
(
"work"
).
getAsString
();
}
if
(
object
.
get
(
"workCompleted"
)
!=
null
)
{
return
object
.
get
(
"workCompleted"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
""
;
}
/**
* 这个执行的前提是 MessageConnector.TYPE_CMS_PUBLISH.equals(message.getType()) ||
* MessageConnector.TYPE_CMS_PUBLISH_TO_CREATOR.equals(message.getType()) cms的消息
* body获取文档id
*
* @param messageBody
* @return
*/
private
static
String
getCmsDocumentId
(
String
messageBody
)
{
try
{
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"id"
)
!=
null
)
{
return
object
.
get
(
"id"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
null
;
}
}
}
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/MpWeixinConsumeQueue.java
浏览文件 @
3bd2b973
package
com.x.message.assemble.communicate
;
import
java.net.URLEncoder
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
org.apache.commons.lang3.StringUtils
;
import
com.google.gson.Gson
;
import
com.google.gson.JsonObject
;
import
com.x.base.core.container.EntityManagerContainer
;
...
...
@@ -24,6 +17,12 @@ import com.x.message.assemble.communicate.message.WeixinTempMessage;
import
com.x.message.assemble.communicate.message.WeixinTempMessage.WeixinTempMessageFieldObj
;
import
com.x.message.core.entity.Message
;
import
com.x.organization.core.entity.Person
;
import
org.apache.commons.lang3.StringUtils
;
import
java.net.URLEncoder
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* 发送微信公众号模版消息 Created by fancyLou on 3/11/21. Copyright © 2021 O2. All rights
...
...
@@ -50,8 +49,7 @@ public class MpWeixinConsumeQueue extends AbstractQueue<Message> {
if
(
StringUtils
.
isNotEmpty
(
openId
))
{
JsonObject
object
=
gson
.
fromJson
(
message
.
getBody
(),
JsonObject
.
class
);
Map
<
String
,
WeixinTempMessageFieldObj
>
data
=
concreteData
(
message
,
object
,
list
);
String
workId
=
object
.
get
(
"work"
).
getAsString
();
String
workUrl
=
getOpenUrl
(
workId
);
String
workUrl
=
getOpenUrl
(
message
);
WeixinTempMessage
wxMessage
=
new
WeixinTempMessage
();
wxMessage
.
setTouser
(
openId
);
wxMessage
.
setUrl
(
workUrl
);
...
...
@@ -84,6 +82,22 @@ public class MpWeixinConsumeQueue extends AbstractQueue<Message> {
}
/**
* 判断打开地址
*
* @param message
* @return
*/
private
String
getOpenUrl
(
Message
message
)
{
String
openPage
=
DingdingConsumeQueue
.
OuterMessageHelper
.
getOpenPageUrl
(
message
.
getBody
());
if
(
StringUtils
.
isNotEmpty
(
openPage
))
{
return
openPage
;
}
else
{
String
workId
=
DingdingConsumeQueue
.
OuterMessageHelper
.
getWorkIdFromBody
(
message
.
getBody
());
return
getOpenWorkUrl
(
workId
);
}
}
private
Map
<
String
,
WeixinTempMessageFieldObj
>
concreteData
(
Message
message
,
JsonObject
object
,
List
<
MPweixinMessageTemp
>
list
)
{
Map
<
String
,
WeixinTempMessageFieldObj
>
data
=
new
HashMap
<>();
...
...
@@ -146,7 +160,7 @@ public class MpWeixinConsumeQueue extends AbstractQueue<Message> {
}
}
private
String
getOpenUrl
(
String
workId
)
{
private
String
getOpen
Work
Url
(
String
workId
)
{
try
{
String
httpProtocol
=
Config
.
currentNode
().
getCenter
().
getHttpProtocol
();
if
(
StringUtils
.
isEmpty
(
httpProtocol
))
{
...
...
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/QiyeweixinConsumeQueue.java
浏览文件 @
3bd2b973
...
...
@@ -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.Gson
;
...
...
@@ -34,13 +35,13 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
m
.
setTouser
(
business
.
organization
().
person
().
getObject
(
message
.
getPerson
()).
getQiyeweixinId
());
String
content
=
message
.
getTitle
();
if
(
needTransferLink
(
message
.
getType
()))
{
String
workUrl
=
get
QywxOpenWorkUrl
(
message
.
getBody
()
);
String
workUrl
=
get
OpenUrl
(
message
);
if
(
StringUtils
.
isNotEmpty
(
workUrl
))
{
content
=
"<a href=\""
+
workUrl
+
"\">"
+
message
.
getTitle
()
+
"</a>"
;
}
}
m
.
getText
().
setContent
(
content
);
LOGGER
.
debug
(
"微信消息:
"
+
m
.
toString
()
);
LOGGER
.
debug
(
"微信消息:
{}"
,
m:
:
toString
);
String
address
=
Config
.
qiyeweixin
().
getApiAddress
()
+
"/cgi-bin/message/send?access_token="
+
Config
.
qiyeweixin
().
corpAccessToken
();
QiyeweixinMessageResp
resp
=
HttpConnection
.
postAsObject
(
address
,
null
,
m
.
toString
(),
...
...
@@ -60,6 +61,43 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
}
}
/**
* 判断打开地址
*
* @param message
* @return
*/
private
String
getOpenUrl
(
Message
message
)
{
String
openUrl
=
""
;
// cms 文档
if
(
MessageConnector
.
TYPE_CMS_PUBLISH
.
equals
(
message
.
getType
())
||
MessageConnector
.
TYPE_CMS_PUBLISH_TO_CREATOR
.
equals
(
message
.
getType
()))
{
openUrl
=
getQywxOpenCMSDocumentUrl
(
message
.
getBody
());
}
else
{
// 流程工作相关的
openUrl
=
getQywxOpenWorkUrl
(
message
.
getBody
());
}
return
openUrl
;
}
/**
* 文档打开的url
*
* @param messageBody
* @return
*/
private
String
getQywxOpenCMSDocumentUrl
(
String
messageBody
)
{
String
o2oaUrl
=
null
;
try
{
o2oaUrl
=
Config
.
qiyeweixin
().
getWorkUrl
()
+
"qiyeweixinsso.html?redirect="
;
return
DingdingConsumeQueue
.
OuterMessageHelper
.
getOpenCMSDocumentUrl
(
o2oaUrl
,
messageBody
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
return
null
;
}
}
/**
* 生成单点登录和打开工作的地址
*
...
...
@@ -68,7 +106,7 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
*/
private
String
getQywxOpenWorkUrl
(
String
messageBody
)
{
try
{
String
work
=
getWorkIdFromBody
(
messageBody
);
String
work
=
DingdingConsumeQueue
.
OuterMessageHelper
.
getWorkIdFromBody
(
messageBody
);
String
o2oaUrl
=
Config
.
qiyeweixin
().
getWorkUrl
();
String
corpId
=
Config
.
qiyeweixin
().
getCorpId
();
String
agentId
=
Config
.
qiyeweixin
().
getAgentId
();
...
...
@@ -76,22 +114,27 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
||
StringUtils
.
isEmpty
(
agentId
))
{
return
null
;
}
String
workUrl
=
"workmobilewithaction.html?workid="
+
work
;
String
messageRedirectPortal
=
Config
.
qiyeweixin
().
getMessageRedirectPortal
();
if
(
messageRedirectPortal
!=
null
&&
!
""
.
equals
(
messageRedirectPortal
))
{
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
portal
=
URLEncoder
.
encode
(
portal
,
DefaultCharset
.
name
);
workUrl
+=
"&redirectlink="
+
portal
;
String
openPage
=
DingdingConsumeQueue
.
OuterMessageHelper
.
getOpenPageUrl
(
messageBody
);
if
(
StringUtils
.
isNotEmpty
(
openPage
))
{
o2oaUrl
=
o2oaUrl
+
"qiyeweixinsso.html?redirect="
+
openPage
;
}
else
{
String
workUrl
=
"workmobilewithaction.html?workid="
+
work
;
String
messageRedirectPortal
=
Config
.
qiyeweixin
().
getMessageRedirectPortal
();
if
(
messageRedirectPortal
!=
null
&&
!
""
.
equals
(
messageRedirectPortal
))
{
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
portal
=
URLEncoder
.
encode
(
portal
,
DefaultCharset
.
name
);
workUrl
+=
"&redirectlink="
+
portal
;
}
workUrl
=
URLEncoder
.
encode
(
workUrl
,
DefaultCharset
.
name
);
o2oaUrl
=
o2oaUrl
+
"qiyeweixinsso.html?redirect="
+
workUrl
;
}
workUrl
=
URLEncoder
.
encode
(
workUrl
,
DefaultCharset
.
name
);
o2oaUrl
=
o2oaUrl
+
"qiyeweixinsso.html?redirect="
+
workUrl
;
LOGGER
.
debug
(
"o2oa 地址:"
+
o2oaUrl
);
o2oaUrl
=
URLEncoder
.
encode
(
o2oaUrl
,
DefaultCharset
.
name
);
LOGGER
.
debug
(
"encode url :"
+
o2oaUrl
);
String
url
=
"https://open.weixin.qq.com/connect/oauth2/authorize?appid="
+
corpId
+
"&response_type=code&scope=snsapi_base"
+
"&agentid="
+
agentId
+
"&redirect_uri="
+
o2oaUrl
+
"&#wechat_redirect"
;
LOGGER
.
debug
(
"final url :
"
+
url
);
LOGGER
.
debug
(
"final url :
{}"
,()->
url
);
return
url
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
...
...
@@ -100,26 +143,6 @@ public class QiyeweixinConsumeQueue extends AbstractQueue<Message> {
return
""
;
}
/**
* 获取workid
*
* @param messageBody
* @return
*/
private
String
getWorkIdFromBody
(
String
messageBody
)
{
try
{
JsonObject
object
=
gson
.
fromJson
(
messageBody
,
JsonObject
.
class
);
if
(
object
.
get
(
"work"
)
!=
null
)
{
return
object
.
get
(
"work"
).
getAsString
();
}
if
(
object
.
get
(
"workCompleted"
)
!=
null
)
{
return
object
.
get
(
"workCompleted"
).
getAsString
();
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
null
;
}
/**
* 是否需要把企业微信消息转成超链接消息 根据是否配置了企业微信应用链接、是否是工作消息(目前只支持工作消息)
...
...
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/WeLinkConsumeQueue.java
浏览文件 @
3bd2b973
package
com.x.message.assemble.communicate
;
import
java.net.URLEncoder
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
org.apache.commons.lang3.StringUtils
;
import
com.google.gson.JsonObject
;
import
com.google.gson.JsonParser
;
import
com.google.gson.Gson
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.bean.NameValuePair
;
import
com.x.base.core.project.config.Config
;
import
com.x.base.core.project.config.WeLink
;
import
com.x.base.core.project.connection.HttpConnection
;
import
com.x.base.core.project.gson.XGsonBuilder
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.message.MessageConnector
;
...
...
@@ -23,10 +16,17 @@ import com.x.base.core.project.tools.DefaultCharset;
import
com.x.message.assemble.communicate.message.WeLinkMessage
;
import
com.x.message.core.entity.Message
;
import
com.x.organization.core.entity.Person
;
import
org.apache.commons.lang3.StringUtils
;
import
java.net.URLEncoder
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
public
class
WeLinkConsumeQueue
extends
AbstractQueue
<
Message
>
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
WeLinkConsumeQueue
.
class
);
private
static
final
Gson
gson
=
XGsonBuilder
.
instance
();
protected
void
execute
(
Message
message
)
throws
Exception
{
...
...
@@ -55,7 +55,7 @@ public class WeLinkConsumeQueue extends AbstractQueue<Message> {
// 是否添加超链接
addHyperlink
(
message
,
m
);
String
address
=
Config
.
weLink
().
getOapiAddress
()
+
"/messages/v3/send"
;
LOGGER
.
info
(
"welink send url:
"
+
address
);
LOGGER
.
info
(
"welink send url:
{}"
,()->
address
);
List
<
NameValuePair
>
heads
=
new
ArrayList
<>();
heads
.
add
(
new
NameValuePair
(
WeLink
.
WeLink_Auth_Head_Key
,
Config
.
weLink
().
accessToken
()));
WeLinkMessageResp
resp
=
HttpConnection
.
postAsObject
(
address
,
heads
,
m
.
toString
(),
WeLinkMessageResp
.
class
);
...
...
@@ -70,7 +70,7 @@ public class WeLinkConsumeQueue extends AbstractQueue<Message> {
private
void
addHyperlink
(
Message
message
,
WeLinkMessage
m
)
{
if
(
needTransferLink
(
message
.
getType
()))
{
String
workUrl
=
get
DingdingOpenWorkUrl
(
message
.
getBody
()
);
String
workUrl
=
get
OpenUrl
(
message
);
if
(
workUrl
!=
null
&&
!
""
.
equals
(
workUrl
))
{
m
.
setUrlType
(
"html"
);
m
.
setUrlPath
(
workUrl
);
...
...
@@ -108,51 +108,79 @@ public class WeLinkConsumeQueue extends AbstractQueue<Message> {
}
}
/**
* 生成单点登录和打开工作的地址
*
* 判断打开地址
*
* @param message
* @return
*/
private
String
getOpenUrl
(
Message
message
)
{
String
openUrl
=
""
;
// cms 文档
if
(
MessageConnector
.
TYPE_CMS_PUBLISH
.
equals
(
message
.
getType
())
||
MessageConnector
.
TYPE_CMS_PUBLISH_TO_CREATOR
.
equals
(
message
.
getType
()))
{
openUrl
=
getWeiLinkOpenCMSDocumentUrl
(
message
.
getBody
());
}
else
{
// 流程工作相关的
openUrl
=
getWeiLinkOpenWorkUrl
(
message
.
getBody
());
}
return
openUrl
;
}
/**
* 文档打开的url
*
* @param messageBody
* @return
*/
private
String
getDingdingOpenWorkUrl
(
String
messageBody
)
{
private
String
getWeiLinkOpenCMSDocumentUrl
(
String
messageBody
)
{
String
o2oaUrl
=
null
;
try
{
String
work
=
getWorkIdFromBody
(
messageBody
);
String
o2oaUrl
=
Config
.
weLink
().
getWorkUrl
();
if
(
work
==
null
||
""
.
equals
(
work
)
||
o2oaUrl
==
null
||
""
.
equals
(
o2oaUrl
))
{
return
null
;
}
String
workUrl
=
"workmobilewithaction.html?workid="
+
work
;
String
messageRedirectPortal
=
Config
.
weLink
().
getMessageRedirectPortal
();
if
(
messageRedirectPortal
!=
null
&&
!
""
.
equals
(
messageRedirectPortal
))
{
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
portal
=
URLEncoder
.
encode
(
portal
,
DefaultCharset
.
name
);
workUrl
+=
"&redirectlink="
+
portal
;
}
workUrl
=
URLEncoder
.
encode
(
workUrl
,
DefaultCharset
.
name
);
o2oaUrl
=
o2oaUrl
+
"welinksso.html?redirect="
+
workUrl
;
return
o2oaUrl
;
o2oaUrl
=
Config
.
weLink
().
getWorkUrl
()
+
"welinksso.html?redirect="
;
return
DingdingConsumeQueue
.
OuterMessageHelper
.
getOpenCMSDocumentUrl
(
o2oaUrl
,
messageBody
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
return
null
;
}
return
""
;
}
/**
*
获取workid
*
生成单点登录和打开工作的地址
*
* @param messageBody
* @return
*/
private
String
getW
orkIdFromBody
(
String
messageBody
)
{
private
String
getW
eiLinkOpenWorkUrl
(
String
messageBody
)
{
try
{
JsonObject
object
=
new
JsonParser
().
parse
(
messageBody
).
getAsJsonObject
();
return
object
.
get
(
"work"
).
getAsString
();
String
work
=
DingdingConsumeQueue
.
OuterMessageHelper
.
getWorkIdFromBody
(
messageBody
);
String
o2oaUrl
=
Config
.
weLink
().
getWorkUrl
();
if
(
work
==
null
||
""
.
equals
(
work
)
||
o2oaUrl
==
null
||
""
.
equals
(
o2oaUrl
))
{
return
null
;
}
String
openPage
=
DingdingConsumeQueue
.
OuterMessageHelper
.
getOpenPageUrl
(
messageBody
);
if
(
StringUtils
.
isNotEmpty
(
openPage
))
{
o2oaUrl
=
o2oaUrl
+
"welinksso.html?redirect="
+
openPage
;
}
else
{
String
workUrl
=
"workmobilewithaction.html?workid="
+
work
;
String
messageRedirectPortal
=
Config
.
weLink
().
getMessageRedirectPortal
();
if
(
messageRedirectPortal
!=
null
&&
!
""
.
equals
(
messageRedirectPortal
))
{
String
portal
=
"portalmobile.html?id="
+
messageRedirectPortal
;
portal
=
URLEncoder
.
encode
(
portal
,
DefaultCharset
.
name
);
workUrl
+=
"&redirectlink="
+
portal
;
}
workUrl
=
URLEncoder
.
encode
(
workUrl
,
DefaultCharset
.
name
);
o2oaUrl
=
o2oaUrl
+
"welinksso.html?redirect="
+
workUrl
;
}
return
o2oaUrl
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
""
;
}
/**
* 是否需要把钉钉消息转成markdown格式消息 根据是否配置了钉钉工作链接、是否是工作消息(目前只支持工作消息)
*
...
...
@@ -162,7 +190,7 @@ public class WeLinkConsumeQueue extends AbstractQueue<Message> {
private
boolean
needTransferLink
(
String
messageType
)
{
try
{
String
workUrl
=
Config
.
weLink
().
getWorkUrl
();
if
(
workUrl
!=
null
&&
!
""
.
equals
(
workUrl
)
&&
workMessageTypeList
().
contains
(
messageType
))
{
if
(
StringUtils
.
isNotEmpty
(
workUrl
))
{
return
true
;
}
}
catch
(
Exception
e
)
{
...
...
o2web/source/x_component_Setting/SettingMobile.js
浏览文件 @
3bd2b973
...
...
@@ -503,6 +503,11 @@ MWF.xApplication.Setting.AppPackOnlineDocument = new Class({
this
.
app
.
notice
(
this
.
lp
.
mobile_apppack_message_host_format_error
,
"
error
"
,
this
.
contentAreaNode
);
return
;
}
if
(
host
.
indexOf
(
"
:
"
)
>
0
)
{
this
.
app
.
notice
(
this
.
lp
.
mobile_apppack_message_host_format_error
,
"
error
"
,
this
.
contentAreaNode
);
return
;
}
var
port
=
this
.
apppackPortInputNode
.
get
(
"
value
"
);
if
(
!
port
||
port
===
""
)
{
this
.
app
.
notice
(
this
.
lp
.
mobile_apppack_message_port_not_empty
,
"
error
"
,
this
.
contentAreaNode
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录