Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
仟微科技
Link Wechat
提交
4229e8dc
Link Wechat
项目概览
仟微科技
/
Link Wechat
通知
48
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Link Wechat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4229e8dc
编写于
1月 23, 2021
作者:
孙
孙喜旺
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
回调通知修改
上级
3598a674
变更
76
隐藏空白更改
内联
并排
Showing
76 changed file
with
1683 addition
and
599 deletion
+1683
-599
linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCallBackController.java
...linkwechat/web/controller/wecom/WeCallBackController.java
+2
-1
linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeConversationArchiveController.java
...web/controller/wecom/WeConversationArchiveController.java
+1
-1
linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeUserController.java
...com/linkwechat/web/controller/wecom/WeUserController.java
+3
-3
linkwe-admin/src/main/resources/application.yml
linkwe-admin/src/main/resources/application.yml
+5
-3
linkwe-common/src/main/java/com/linkwechat/common/config/ElasticSearchConfig.java
...ava/com/linkwechat/common/config/ElasticSearchConfig.java
+1
-1
linkwe-common/src/main/java/com/linkwechat/common/config/WeComeConfig.java
.../main/java/com/linkwechat/common/config/WeComeConfig.java
+2
-0
linkwe-common/src/main/java/com/linkwechat/common/constant/WeConstans.java
.../main/java/com/linkwechat/common/constant/WeConstans.java
+8
-0
linkwe-common/src/main/java/com/linkwechat/common/core/domain/ConversationArchiveQuery.java
...nkwechat/common/core/domain/ConversationArchiveQuery.java
+1
-1
linkwe-common/src/main/java/com/linkwechat/common/core/domain/elastic/ElasticSearchDataVo.java
...echat/common/core/domain/elastic/ElasticSearchDataVo.java
+1
-1
linkwe-common/src/main/java/com/linkwechat/common/core/domain/elastic/ElasticSearchEntity.java
...echat/common/core/domain/elastic/ElasticSearchEntity.java
+1
-1
linkwe-common/src/main/java/com/linkwechat/common/core/domain/elastic/ElasticSearchQueryVo.java
...chat/common/core/domain/elastic/ElasticSearchQueryVo.java
+1
-1
linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java
...m/linkwechat/common/core/elasticsearch/ElasticSearch.java
+1
-1
linkwe-common/src/main/java/com/linkwechat/common/enums/TransferFailReason.java
.../java/com/linkwechat/common/enums/TransferFailReason.java
+55
-0
linkwe-common/src/main/java/com/linkwechat/common/utils/wecom/RSAUtil.java
.../main/java/com/linkwechat/common/utils/wecom/RSAUtil.java
+1
-1
linkwe-common/src/main/java/com/tencent/wework/FinanceUtils.java
...common/src/main/java/com/tencent/wework/FinanceUtils.java
+1
-1
linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java
...artz/src/main/java/com/linkwechat/quartz/task/RyTask.java
+10
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCropTagClient.java
...ain/java/com/linkwechat/wecom/client/WeCropTagClient.java
+2
-1
linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMsgAuditClient.java
...in/java/com/linkwechat/wecom/client/WeMsgAuditClient.java
+1
-1
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCorpAccount.java
.../main/java/com/linkwechat/wecom/domain/WeCorpAccount.java
+2
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUser.java
...com/src/main/java/com/linkwechat/wecom/domain/WeUser.java
+1
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeMessagePushDto.java
...ava/com/linkwechat/wecom/domain/dto/WeMessagePushDto.java
+6
-6
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/customer/ExternalUserDetail.java
...kwechat/wecom/domain/dto/customer/ExternalUserDetail.java
+7
-7
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/msgaudit/WeMsgAuditDto.java
...m/linkwechat/wecom/domain/dto/msgaudit/WeMsgAuditDto.java
+1
-1
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/tag/WeCropGroupTagDto.java
...om/linkwechat/wecom/domain/dto/tag/WeCropGroupTagDto.java
+1
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/tag/WeCropTagDto.java
...ava/com/linkwechat/wecom/domain/dto/tag/WeCropTagDto.java
+1
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/tag/WeFindCropTagParam.java
...m/linkwechat/wecom/domain/dto/tag/WeFindCropTagParam.java
+3
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMsgAuditVo.java
...ain/java/com/linkwechat/wecom/domain/vo/WeMsgAuditVo.java
+1
-1
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WxCpXmlMessageVO.java
...java/com/linkwechat/wecom/domain/vo/WxCpXmlMessageVO.java
+11
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/WeEventStrategy.java
...in/java/com/linkwechat/wecom/factory/WeEventStrategy.java
+63
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/WeStrategyBeanFactory.java
...a/com/linkwechat/wecom/factory/WeStrategyBeanFactory.java
+28
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeContactImpl.java
...nkwechat/wecom/factory/impl/WeEventChangeContactImpl.java
+3
-245
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalChatImpl.java
...hat/wecom/factory/impl/WeEventChangeExternalChatImpl.java
+27
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalContactImpl.java
.../wecom/factory/impl/WeEventChangeExternalContactImpl.java
+3
-182
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalTagImpl.java
...chat/wecom/factory/impl/WeEventChangeExternalTagImpl.java
+26
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddExternalContactImpl.java
...ctory/impl/customer/WeCallBackAddExternalContactImpl.java
+102
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddHalfExternalContactImpl.java
...y/impl/customer/WeCallBackAddHalfExternalContactImpl.java
+102
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackDelExternalContactImpl.java
...ctory/impl/customer/WeCallBackDelExternalContactImpl.java
+31
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackDelFollowUserImpl.java
...om/factory/impl/customer/WeCallBackDelFollowUserImpl.java
+71
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackEditExternalContactImpl.java
...tory/impl/customer/WeCallBackEditExternalContactImpl.java
+27
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackMsgAuditApprovedImpl.java
...factory/impl/customer/WeCallBackMsgAuditApprovedImpl.java
+43
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallbackTransferFailImpl.java
...com/factory/impl/customer/WeCallbackTransferFailImpl.java
+34
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackCreateGroupImpl.java
...factory/impl/customergroup/WeCallBackCreateGroupImpl.java
+31
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackDismissImpl.java
...com/factory/impl/customergroup/WeCallBackDismissImpl.java
+31
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackUpdateGroupImpl.java
...factory/impl/customergroup/WeCallBackUpdateGroupImpl.java
+30
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/party/WeCallBackCreatePartyImpl.java
...t/wecom/factory/impl/party/WeCallBackCreatePartyImpl.java
+31
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/party/WeCallBackDeletePartyImpl.java
...t/wecom/factory/impl/party/WeCallBackDeletePartyImpl.java
+30
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/party/WeCallBackUpdatePartyImpl.java
...t/wecom/factory/impl/party/WeCallBackUpdatePartyImpl.java
+31
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/tag/WeCallBackCreateCustomerTagImpl.java
...com/factory/impl/tag/WeCallBackCreateCustomerTagImpl.java
+42
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/tag/WeCallBackDeleteCustomerTagImpl.java
...com/factory/impl/tag/WeCallBackDeleteCustomerTagImpl.java
+41
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/tag/WeCallBackUpdateCustomerTagImpl.java
...com/factory/impl/tag/WeCallBackUpdateCustomerTagImpl.java
+41
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/tag/WeCallBackUpdateUserTagImpl.java
...t/wecom/factory/impl/tag/WeCallBackUpdateUserTagImpl.java
+83
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/user/WeCallBackCreateUserImpl.java
...hat/wecom/factory/impl/user/WeCallBackCreateUserImpl.java
+30
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/user/WeCallBackDeleteUserImpl.java
...hat/wecom/factory/impl/user/WeCallBackDeleteUserImpl.java
+31
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/user/WeCallBackUpdateUserImpl.java
...hat/wecom/factory/impl/user/WeCallBackUpdateUserImpl.java
+31
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAccessTokenInterceptor.java
...inkwechat/wecom/interceptor/WeAccessTokenInterceptor.java
+2
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagMapper.java
...rc/main/java/com/linkwechat/wecom/mapper/WeTagMapper.java
+2
-2
linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserMapper.java
...c/main/java/com/linkwechat/wecom/mapper/WeUserMapper.java
+2
-2
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeAccessTokenService.java
...a/com/linkwechat/wecom/service/IWeAccessTokenService.java
+2
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeConversationArchiveService.java
...nkwechat/wecom/service/IWeConversationArchiveService.java
+1
-1
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeDepartmentService.java
...va/com/linkwechat/wecom/service/IWeDepartmentService.java
+2
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupService.java
...in/java/com/linkwechat/wecom/service/IWeGroupService.java
+6
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTagGroupService.java
...java/com/linkwechat/wecom/service/IWeTagGroupService.java
+6
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTagService.java
...main/java/com/linkwechat/wecom/service/IWeTagService.java
+7
-2
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeUserService.java
...ain/java/com/linkwechat/wecom/service/IWeUserService.java
+23
-2
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAccessTokenServiceImpl.java
...nkwechat/wecom/service/impl/WeAccessTokenServiceImpl.java
+9
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeConversationArchiveServiceImpl.java
.../wecom/service/impl/WeConversationArchiveServiceImpl.java
+1
-1
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
.../linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
+5
-5
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeDepartmentServiceImpl.java
...inkwechat/wecom/service/impl/WeDepartmentServiceImpl.java
+9
-0
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupServiceImpl.java
...com/linkwechat/wecom/service/impl/WeGroupServiceImpl.java
+110
-4
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTagGroupServiceImpl.java
.../linkwechat/wecom/service/impl/WeTagGroupServiceImpl.java
+160
-98
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTagServiceImpl.java
...a/com/linkwechat/wecom/service/impl/WeTagServiceImpl.java
+94
-2
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java
.../com/linkwechat/wecom/service/impl/WeUserServiceImpl.java
+33
-3
linkwe-wecom/src/main/java/com/linkwechat/wecom/strategy/SendMessageToUserStrategy.java
.../linkwechat/wecom/strategy/SendMessageToUserStrategy.java
+14
-3
linkwe-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml
...m/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml
+8
-1
linkwe-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml
linkwe-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml
+4
-4
linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml
...we-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml
+9
-9
未找到文件。
linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCallBackController.java
浏览文件 @
4229e8dc
package
com.linkwechat.web.controller.wecom
;
import
com.alibaba.fastjson.JSONObject
;
import
com.linkwechat.common.utils.Threads
;
import
com.linkwechat.common.utils.wecom.WxCryptUtil
;
import
com.linkwechat.web.controller.common.CommonController
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
...
...
@@ -47,7 +48,7 @@ public class WeCallBackController extends CommonController {
try
{
WeCallBackEventFactory
factory
=
weEventHandle
.
factory
(
wxCpXmlMessage
.
getEvent
());
if
(
factory
!=
null
){
factory
.
eventHandle
(
wxCpXmlMessage
);
Threads
.
SINGLE_THREAD_POOL
.
submit
(()
->
factory
.
eventHandle
(
wxCpXmlMessage
)
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
...
...
linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeConversationArchiveController.java
浏览文件 @
4229e8dc
...
...
@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @author
sxw
* @author
danmo
* @description 会话存档controller
* @date 2020/12/19 13:51
**/
...
...
linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeUserController.java
浏览文件 @
4229e8dc
...
...
@@ -58,10 +58,10 @@ public class WeUserController extends BaseController {
* 获取通讯录相关客户详细信息
*/
@PreAuthorize
(
"@ss.hasPermi('contacts:organization:view')"
)
@GetMapping
(
value
=
"/{
i
d}"
)
public
AjaxResult
getInfo
(
@PathVariable
(
"
id"
)
Long
i
d
)
@GetMapping
(
value
=
"/{
userI
d}"
)
public
AjaxResult
getInfo
(
@PathVariable
(
"
userId"
)
String
userI
d
)
{
return
AjaxResult
.
success
(
weUserService
.
selectWeUserById
(
i
d
));
return
AjaxResult
.
success
(
weUserService
.
selectWeUserById
(
userI
d
));
}
/**
...
...
linkwe-admin/src/main/resources/application.yml
浏览文件 @
4229e8dc
...
...
@@ -200,8 +200,10 @@ wecome:
-
/msgaudit/check_single_agree
-
/msgaudit/check_room_agree
-
/msgaudit/groupchat/get
needAgentTokenUrl
:
-
/message/send
#企微回调通知配置
callBack
:
appIdOrCorpId
:
token
:
encodingAesKey
:
\ No newline at end of file
appIdOrCorpId
:
ww38152475d1bca752
token
:
uEyhhuTKfpS
encodingAesKey
:
diTFQ6B4IW14UN2JplADuhMZsBZHjvuBG24kHFrr4Px
\ No newline at end of file
linkwe-common/src/main/java/com/linkwechat/common/config/ElasticSearchConfig.java
浏览文件 @
4229e8dc
...
...
@@ -11,7 +11,7 @@ import java.util.ArrayList;
import
java.util.List
;
/**
* @author
sxw
* @author
danmo
* @description ElasticSearch 配置
* @date 2020/12/4 9:59
**/
...
...
linkwe-common/src/main/java/com/linkwechat/common/config/WeComeConfig.java
浏览文件 @
4229e8dc
...
...
@@ -33,4 +33,6 @@ public class WeComeConfig {
/** 会话存档所需token 的url */
private
String
[]
needChatTokenUrl
;
/** 应用所需token 的url **/
private
String
[]
needAgentTokenUrl
;
}
linkwe-common/src/main/java/com/linkwechat/common/constant/WeConstans.java
浏览文件 @
4229e8dc
...
...
@@ -33,6 +33,10 @@ public class WeConstans {
*/
public
static
final
String
WE_CHAT_ACCESS_TOKEN
=
"we_chat_access_token"
;
/**
* 应用相关token
*/
public
static
final
String
WE_AGENT_ACCESS_TOKEN
=
"we_agent_access_token"
;
/**
* 企业微信接口返回成功code
...
...
@@ -240,6 +244,10 @@ public class WeConstans {
put
(
"batch_job_result"
,
"weEventBatchJobResultImpl"
);
//外部联系人事件
put
(
"change_external_contact"
,
"weEventChangeExternalContactImpl"
);
//客户群事件
put
(
"change_external_chat"
,
"weEventChangeExternalChatImpl"
);
//客户标签事件
put
(
"change_external_tag"
,
"weEventChangeExternalTagImpl"
);
}
};
...
...
linkwe-common/src/main/java/com/linkwechat/common/core/domain/ConversationArchiveQuery.java
浏览文件 @
4229e8dc
...
...
@@ -3,7 +3,7 @@ package com.linkwechat.common.core.domain;
import
lombok.Data
;
/**
* @author
sxw
* @author
danmo
* @description 会话存档接口入参实体
* @date 2020/12/29 14:23
**/
...
...
linkwe-common/src/main/java/com/linkwechat/common/core/domain/elastic/ElasticSearchDataVo.java
浏览文件 @
4229e8dc
...
...
@@ -6,7 +6,7 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
/**
* @author
sxw
* @author
danmo
* @description http交互Vo对象
* @date 2020/12/9 14:14
**/
...
...
linkwe-common/src/main/java/com/linkwechat/common/core/domain/elastic/ElasticSearchEntity.java
浏览文件 @
4229e8dc
...
...
@@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
import
java.util.Map
;
/**
* @author
sxw
* @author
danmo
* @description
* @date 2020/12/9 14:11
**/
...
...
linkwe-common/src/main/java/com/linkwechat/common/core/domain/elastic/ElasticSearchQueryVo.java
浏览文件 @
4229e8dc
...
...
@@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
import
java.util.Map
;
/**
* @author
sxw
* @author
danmo
* @description
* @date 2020/12/9 14:18
**/
...
...
linkwe-common/src/main/java/com/linkwechat/common/core/elasticsearch/ElasticSearch.java
浏览文件 @
4229e8dc
...
...
@@ -40,7 +40,7 @@ import java.util.Map;
import
java.util.function.Consumer
;
/**
* @author
sxw
* @author
danmo
* @description es工具类
* @date 2020/12/9 14:02
**/
...
...
linkwe-common/src/main/java/com/linkwechat/common/enums/TransferFailReason.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.common.enums
;
import
lombok.Getter
;
/**
* @author danmo
* @description 接替失败的原因
* @date 2021/1/20 0:14
**/
@Getter
public
enum
TransferFailReason
{
/**
* 客户拒绝
*/
CUSTOMER_REFUSED
(
3
,
"customer_refused"
,
"客户拒绝"
),
/**
* 接替成员的客户数达到上限
*/
CUSTOMER_LIMIT_EXCEED
(
4
,
"customer_limit_exceed"
,
"接替成员的客户数达到上限"
);
private
int
num
;
private
String
name
;
private
String
reason
;
TransferFailReason
(
int
num
,
String
name
,
String
reason
)
{
this
.
num
=
num
;
this
.
name
=
name
;
this
.
reason
=
reason
;
}
public
static
String
getReason
(
String
name
){
TransferFailReason
[]
values
=
TransferFailReason
.
values
();
for
(
TransferFailReason
transferFailReason:
values
){
if
(
transferFailReason
.
getName
().
equals
(
name
)){
return
transferFailReason
.
getReason
();
}
}
throw
new
RuntimeException
(
"无对应原因"
);
}
public
static
int
getNum
(
String
name
){
TransferFailReason
[]
values
=
TransferFailReason
.
values
();
for
(
TransferFailReason
transferFailReason:
values
){
if
(
transferFailReason
.
getName
().
equals
(
name
)){
return
transferFailReason
.
getNum
();
}
}
throw
new
RuntimeException
(
"无对应类型"
);
}
}
linkwe-common/src/main/java/com/linkwechat/common/utils/wecom/RSAUtil.java
浏览文件 @
4229e8dc
...
...
@@ -18,7 +18,7 @@ import java.security.spec.RSAPrivateCrtKeySpec;
import
java.util.Base64
;
/**
* @author
sxw
* @author
danmo
* @description
* @date 2020/12/7 23:37
**/
...
...
linkwe-common/src/main/java/com/tencent/wework/FinanceUtils.java
浏览文件 @
4229e8dc
...
...
@@ -21,7 +21,7 @@ import java.util.Optional;
import
java.util.concurrent.atomic.AtomicLong
;
/**
* @author
sxw
* @author
danmo
* @description
* @date 2020/12/2 16:01
**/
...
...
linkwe-quartz/src/main/java/com/linkwechat/quartz/task/RyTask.java
浏览文件 @
4229e8dc
...
...
@@ -98,4 +98,14 @@ public class RyTask {
});
redisCache
.
setCacheObject
(
WeConstans
.
CONTACT_SEQ_KEY
,
index
);
}
/**
*
* @param corpId 企业id
* @param secret 会话密钥
*/
public
void
getPermitUserList
(
String
corpId
,
String
secret
){
log
.
info
(
"执行有参方法: params:{},{}"
,
corpId
,
secret
);
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeCropTagClient.java
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.client
;
import
com.dtflys.forest.annotation.Body
;
import
com.dtflys.forest.annotation.DataObject
;
import
com.dtflys.forest.annotation.Request
;
import
com.linkwechat.wecom.domain.dto.WeResultDto
;
...
...
@@ -40,7 +41,7 @@ public interface WeCropTagClient {
@Request
(
url
=
"/externalcontact/get_corp_tag_list"
,
type
=
"POST"
)
WeCropGroupTagListDto
getCorpTagListByTagIds
(
@
DataObject
WeFindCropTagParam
weFindCropTagParam
);
WeCropGroupTagListDto
getCorpTagListByTagIds
(
@
Body
WeFindCropTagParam
weFindCropTagParam
);
/**
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMsgAuditClient.java
浏览文件 @
4229e8dc
...
...
@@ -7,7 +7,7 @@ import com.linkwechat.wecom.domain.dto.msgaudit.WeMsgAuditDto;
import
com.linkwechat.wecom.domain.vo.WeMsgAuditVo
;
/**
* @author
sxw
* @author
danmo
* @description 会话存档接口
* @date 2020/12/2 16:45
**/
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeCorpAccount.java
浏览文件 @
4229e8dc
...
...
@@ -61,6 +61,8 @@ public class WeCorpAccount extends BaseEntity
@ApiModelProperty
(
"应用id"
)
private
String
agentId
;
@ApiModelProperty
(
"应用密钥"
)
private
String
agentSecret
;
@ApiModelProperty
(
"服务商密钥"
)
private
String
providerSecret
;
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeUser.java
浏览文件 @
4229e8dc
...
...
@@ -111,6 +111,7 @@ public class WeUser
private
Date
dimissionTime
;
private
String
remark
;
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/WeMessagePushDto.java
浏览文件 @
4229e8dc
...
...
@@ -13,22 +13,22 @@ import java.util.List;
public
class
WeMessagePushDto
{
/**
* 指定接收消息的成员,成员ID列表(多个接收者用‘
,
’分隔,最多支持1000个)。
* 指定接收消息的成员,成员ID列表(多个接收者用‘
|
’分隔,最多支持1000个)。
* 特殊情况:指定为”@all”,则向该企业应用的全部成员发送
*/
private
List
<
String
>
touser
;
private
String
touser
;
/**
* 指定接收消息的部门,部门ID列表,多个接收者用‘
,
’分隔,最多支持100个。
* 指定接收消息的部门,部门ID列表,多个接收者用‘
|
’分隔,最多支持100个。
* 当touser为”@all”时忽略本参数
*/
private
List
<
String
>
toparty
;
private
String
toparty
;
/**
* 指定接收消息的标签,标签ID列表,多个接收者用‘
,
’分隔,最多支持100个。
* 指定接收消息的标签,标签ID列表,多个接收者用‘
|
’分隔,最多支持100个。
* 当touser为”@all”时忽略本参数
*/
private
List
<
String
>
totag
;
private
String
totag
;
/**
* 消息类型,此时固定为:text
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/customer/ExternalUserDetail.java
浏览文件 @
4229e8dc
...
...
@@ -29,7 +29,7 @@ public class ExternalUserDetail extends WeResultDto {
@Data
public
static
class
ExternalContact
{
/** 外部联系人userId */
private
String
external
_u
serid
;
private
String
external
U
serid
;
/** 外部联系人名称 */
private
String
name
;
/** 外部联系人职位 */
...
...
@@ -37,9 +37,9 @@ public class ExternalUserDetail extends WeResultDto {
/** 外部联系人头像 */
private
String
avatar
;
/** 外部联系人所在企业简称 */
private
String
corp
_n
ame
;
private
String
corp
N
ame
;
/** 外部联系人所在企业全称 */
private
String
corp
_full_n
ame
;
private
String
corp
FullN
ame
;
/** 外部联系人的类型,1表示该外部联系人是微信用户,2表示该外部联系人是企业微信用户 */
private
Integer
type
;
/** 外部联系人性别 0-未知 1-男性 2-女性 */
...
...
@@ -60,13 +60,13 @@ public class ExternalUserDetail extends WeResultDto {
/**该成员添加此外部联系人的时间*/
private
long
createtime
;
/**该成员对此客户备注的企业名称*/
private
String
remark
_company
;
private
String
remark
CorpName
;
/**该成员对此客户备注的手机号码*/
private
String
[]
remark
_m
obiles
;
private
String
[]
remark
M
obiles
;
/**该成员添加此客户的来源*/
private
Integer
add
_w
ay
;
private
Integer
add
W
ay
;
/**发起添加的userid,如果成员主动添加,为成员的userid;如果是客户主动添加,则为客户的外部联系人userid;如果是内部成员共享/管理员分配,则为对应的成员/管理员userid*/
private
String
oper
_u
serid
;
private
String
oper
U
serid
;
/** 企业自定义的state参数,用于区分客户具体是通过哪个「联系我」添加,由企业通过创建「联系我」方式指定 */
private
String
state
;
/**标签**/
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/msgaudit/WeMsgAuditDto.java
浏览文件 @
4229e8dc
...
...
@@ -9,7 +9,7 @@ import java.util.Date;
import
java.util.List
;
/**
* @author
sxw
* @author
danmo
* @description 会话存档
* @date 2020/12/2 16:47
**/
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/tag/WeCropGroupTagDto.java
浏览文件 @
4229e8dc
...
...
@@ -27,6 +27,7 @@ public class WeCropGroupTagDto {
private
String
group_id
;
private
String
group_name
;
private
Integer
order
;
private
Boolean
deleted
;
private
Long
create_time
;
private
List
<
WeCropTagDto
>
tag
;
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/tag/WeCropTagDto.java
浏览文件 @
4229e8dc
...
...
@@ -23,6 +23,7 @@ public class WeCropTagDto {
private
String
id
;
private
String
name
;
private
String
order
;
private
Boolean
deleted
;
private
Long
create_time
;
public
static
List
<
WeCropTagDto
>
transFormto
(
List
<
WeTag
>
weTags
){
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/tag/WeFindCropTagParam.java
浏览文件 @
4229e8dc
...
...
@@ -3,6 +3,8 @@ package com.linkwechat.wecom.domain.dto.tag;
import
lombok.Builder
;
import
lombok.Data
;
import
java.util.List
;
/**
* @description: 获取标签接口参数实体
* @author: HaoN
...
...
@@ -12,4 +14,5 @@ import lombok.Data;
@Builder
public
class
WeFindCropTagParam
{
private
String
[]
tag_id
;
private
List
<
String
>
group_id
;
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WeMsgAuditVo.java
浏览文件 @
4229e8dc
...
...
@@ -5,7 +5,7 @@ import lombok.Data;
import
java.util.List
;
/**
* @author
sxw
* @author
danmo
* @description 会话存档入参实体
* @date 2020/12/19 12:38
**/
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/vo/WxCpXmlMessageVO.java
浏览文件 @
4229e8dc
...
...
@@ -29,6 +29,17 @@ public class WxCpXmlMessageVO extends WxCpXmlMessage {
@XStreamAlias
(
"BatchJob"
)
private
BatchJob
batchJob
=
new
BatchJob
();
@XStreamAlias
(
"FailReason"
)
@XStreamConverter
(
value
=
XStreamCDataConverter
.
class
)
private
String
failReason
;
@XStreamAlias
(
"TagType"
)
@XStreamConverter
(
value
=
XStreamCDataConverter
.
class
)
private
String
tagType
;
@XStreamAlias
(
"Id"
)
@XStreamConverter
(
value
=
XStreamCDataConverter
.
class
)
private
String
id
;
@Data
public
static
class
BatchJob
implements
Serializable
{
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/WeEventStrategy.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory
;
import
com.linkwechat.wecom.domain.WeDepartment
;
import
com.linkwechat.wecom.domain.WeUser
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
java.util.Arrays
;
/**
* @author danmo
* @description 事件类型策略接口
* @date 2021/1/20 22:00
**/
public
abstract
class
WeEventStrategy
{
protected
final
String
tag
=
"tag"
;
protected
final
String
tagGroup
=
"tag_group"
;
public
abstract
void
eventHandle
(
WxCpXmlMessageVO
message
);
//生成成员数据
public
WeUser
setWeUserData
(
WxCpXmlMessageVO
message
)
{
WeUser
weUser
=
WeUser
.
builder
().
userId
(
message
.
getUserId
())
.
email
(
message
.
getEmail
())
.
name
(
message
.
getName
())
.
alias
(
message
.
getAlias
())
.
gender
(
message
.
getGender
())
.
address
(
message
.
getAddress
())
.
telephone
(
message
.
getTelephone
())
.
mobile
(
message
.
getMobile
())
.
avatarMediaid
(
message
.
getAvatar
())
.
position
(
message
.
getPosition
())
.
build
();
if
(
message
.
getStatus
()
!=
null
)
{
weUser
.
setIsActivate
(
Integer
.
valueOf
(
message
.
getStatus
()));
}
if
(
message
.
getIsLeaderInDept
()
!=
null
)
{
String
[]
isLeaderInDeptArr
=
Arrays
.
stream
(
message
.
getIsLeaderInDept
())
.
map
(
String:
:
valueOf
).
toArray
(
String
[]::
new
);
weUser
.
setIsLeaderInDept
(
isLeaderInDeptArr
);
}
if
(
message
.
getDepartments
()
!=
null
)
{
String
[]
departmentsArr
=
Arrays
.
stream
(
message
.
getDepartments
())
.
map
(
String:
:
valueOf
).
toArray
(
String
[]::
new
);
weUser
.
setDepartment
(
departmentsArr
);
}
return
weUser
;
}
//部门信息
public
WeDepartment
setWeDepartMent
(
WxCpXmlMessageVO
message
){
WeDepartment
weDepartment
=
new
WeDepartment
();
if
(
message
.
getId
()
!=
null
)
{
weDepartment
.
setId
(
Long
.
valueOf
(
message
.
getId
()));
}
if
(
message
.
getName
()
!=
null
)
{
weDepartment
.
setName
(
message
.
getName
());
}
if
(
message
.
getParentId
()
!=
null
)
{
weDepartment
.
setParentId
(
Long
.
valueOf
(
message
.
getParentId
()));
}
return
weDepartment
;
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/WeStrategyBeanFactory.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* @author danmo
* @description 策略工厂
* @date 2021/1/20 22:02
**/
@Service
public
class
WeStrategyBeanFactory
{
@Autowired
private
final
Map
<
String
,
WeEventStrategy
>
eventStrategyMap
=
new
ConcurrentHashMap
<>();
public
WeStrategyBeanFactory
(
Map
<
String
,
WeEventStrategy
>
strategyMap
)
{
this
.
eventStrategyMap
.
clear
();
strategyMap
.
forEach
((
k
,
v
)
->
this
.
eventStrategyMap
.
put
(
k
,
v
));
}
public
void
getResource
(
String
type
,
WxCpXmlMessageVO
message
)
{
eventStrategyMap
.
get
(
type
).
eventHandle
(
message
);
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeContactImpl.java
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.linkwechat.common.utils.bean.BeanUtils
;
import
com.linkwechat.wecom.domain.WeDepartment
;
import
com.linkwechat.wecom.domain.WeFlowerCustomerRel
;
import
com.linkwechat.wecom.domain.WeFlowerCustomerTagRel
;
import
com.linkwechat.wecom.domain.WeUser
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeCallBackEventFactory
;
import
com.linkwechat.wecom.service.IWeDepartmentService
;
import
com.linkwechat.wecom.service.IWeFlowerCustomerRelService
;
import
com.linkwechat.wecom.service.IWeFlowerCustomerTagRelService
;
import
com.linkwechat.wecom.service.IWeUserService
;
import
com.linkwechat.wecom.factory.WeStrategyBeanFactory
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @author danmo
...
...
@@ -30,240 +16,12 @@ import java.util.stream.Collectors;
@Slf4j
public
class
WeEventChangeContactImpl
implements
WeCallBackEventFactory
{
@Autowired
private
IWeUserService
weUserService
;
@Autowired
private
IWeDepartmentService
weDepartmentService
;
@Autowired
private
IWeFlowerCustomerRelService
weFlowerCustomerRelService
;
@Autowired
private
IWeFlowerCustomerTagRelService
weFlowerCustomerTagRelService
;
private
WeStrategyBeanFactory
weStrategyBeanFactory
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
//新增: create_user 更新: update_user 删除:delete_user
String
changeType
=
message
.
getChangeType
();
switch
(
changeType
)
{
case
"create_user"
:
this
.
addUser
(
message
);
break
;
case
"update_user"
:
this
.
updateUser
(
message
);
break
;
case
"delete_user"
:
this
.
delUser
(
message
);
break
;
case
"create_party"
:
this
.
createParty
(
message
);
break
;
case
"update_party"
:
this
.
updateParty
(
message
);
break
;
case
"delete_party"
:
this
.
deleteParty
(
message
);
break
;
case
"update_tag"
:
this
.
updateTag
(
message
);
break
;
default
:
break
;
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
protected
void
createParty
(
WxCpXmlMessageVO
message
)
{
try
{
WeDepartment
weDepartment
=
new
WeDepartment
();
if
(
message
.
getId
()
!=
null
)
{
weDepartment
.
setId
(
message
.
getId
());
}
if
(
message
.
getName
()
!=
null
)
{
weDepartment
.
setName
(
message
.
getName
());
}
if
(
message
.
getParentId
()
!=
null
)
{
weDepartment
.
setParentId
(
Long
.
valueOf
(
message
.
getParentId
()));
}
weDepartmentService
.
save
(
weDepartment
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
protected
void
deleteParty
(
WxCpXmlMessageVO
message
)
{
try
{
if
(
message
.
getId
()
!=
null
)
{
weDepartmentService
.
removeById
(
message
.
getId
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
protected
void
updateParty
(
WxCpXmlMessageVO
message
)
{
try
{
WeDepartment
weDepartment
=
new
WeDepartment
();
if
(
message
.
getId
()
!=
null
)
{
weDepartment
.
setId
(
message
.
getId
());
}
if
(
message
.
getName
()
!=
null
)
{
weDepartment
.
setName
(
message
.
getName
());
}
if
(
message
.
getParentId
()
!=
null
)
{
weDepartment
.
setParentId
(
Long
.
valueOf
(
message
.
getParentId
()));
}
weDepartmentService
.
saveOrUpdate
(
weDepartment
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
protected
void
updateTag
(
WxCpXmlMessageVO
message
)
{
try
{
String
tagId
=
message
.
getTagId
();
//标签中新增的成员userid列表,用逗号分隔
List
<
String
>
addUserItemsList
=
Arrays
.
stream
(
Optional
.
ofNullable
(
message
.
getAddUserItems
())
.
orElse
(
""
).
split
(
","
)).
collect
(
Collectors
.
toList
());
//标签中删除的成员userid列表,用逗号分隔
List
<
String
>
delUserItemsList
=
Arrays
.
stream
(
Optional
.
ofNullable
(
message
.
getDelUserItems
())
.
orElse
(
""
).
split
(
","
)).
collect
(
Collectors
.
toList
());
//标签中新增的成员userid列表,建立关联
List
<
WeFlowerCustomerTagRel
>
weFlowerCustomerTagRels
=
new
ArrayList
<>();
LambdaQueryWrapper
<
WeFlowerCustomerRel
>
relLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
relLambdaQueryWrapper
.
in
(
WeFlowerCustomerRel:
:
getUserId
,
addUserItemsList
);
List
<
WeFlowerCustomerRel
>
flowerCustomerRelList
=
weFlowerCustomerRelService
.
list
(
relLambdaQueryWrapper
);
List
<
Long
>
idList
=
Optional
.
ofNullable
(
flowerCustomerRelList
).
orElseGet
(
ArrayList:
:
new
)
.
stream
().
map
(
WeFlowerCustomerRel:
:
getId
).
collect
(
Collectors
.
toList
());
idList
.
forEach
(
id
->
{
weFlowerCustomerTagRels
.
add
(
WeFlowerCustomerTagRel
.
builder
().
flowerCustomerRelId
(
id
)
.
tagId
(
tagId
)
.
build
());
});
weFlowerCustomerTagRelService
.
batchInsetWeFlowerCustomerTagRel
(
weFlowerCustomerTagRels
);
//当前标签对应成员列表
LambdaQueryWrapper
<
WeFlowerCustomerTagRel
>
tagRelLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
tagRelLambdaQueryWrapper
.
eq
(
WeFlowerCustomerTagRel:
:
getTagId
,
tagId
);
List
<
WeFlowerCustomerTagRel
>
tagRelList
=
weFlowerCustomerTagRelService
.
list
(
tagRelLambdaQueryWrapper
);
List
<
Long
>
flowerCustomerRelIdList
=
Optional
.
ofNullable
(
tagRelList
).
orElseGet
(
ArrayList:
:
new
)
.
stream
().
map
(
WeFlowerCustomerTagRel:
:
getFlowerCustomerRelId
).
collect
(
Collectors
.
toList
());
if
(!
flowerCustomerRelIdList
.
isEmpty
())
{
LambdaQueryWrapper
<
WeFlowerCustomerRel
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
in
(
WeFlowerCustomerRel:
:
getId
,
flowerCustomerRelIdList
)
.
in
(
WeFlowerCustomerRel:
:
getUserId
,
delUserItemsList
);
List
<
WeFlowerCustomerRel
>
relList
=
weFlowerCustomerRelService
.
list
(
queryWrapper
);
List
<
Long
>
relIdList
=
Optional
.
ofNullable
(
relList
).
orElseGet
(
ArrayList:
:
new
)
.
stream
().
map
(
WeFlowerCustomerRel:
:
getId
).
collect
(
Collectors
.
toList
());
//标签中删除的成员userid列表
LambdaQueryWrapper
<
WeFlowerCustomerTagRel
>
tagRelQueryWrapper
=
new
LambdaQueryWrapper
<>();
tagRelQueryWrapper
.
in
(
WeFlowerCustomerTagRel:
:
getFlowerCustomerRelId
,
relIdList
);
weFlowerCustomerTagRelService
.
remove
(
tagRelQueryWrapper
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
/**
* 新增企业成员
*
* @param message
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
protected
void
addUser
(
WxCpXmlMessageVO
message
)
{
try
{
WeUser
weUser
=
WeUser
.
builder
().
userId
(
message
.
getUserId
())
.
email
(
message
.
getEmail
())
.
name
(
message
.
getName
())
.
alias
(
message
.
getAlias
())
.
gender
(
message
.
getGender
())
.
address
(
message
.
getAddress
())
.
telephone
(
message
.
getTelephone
())
.
mobile
(
message
.
getMobile
())
.
avatarMediaid
(
message
.
getAvatar
())
.
position
(
message
.
getPosition
())
.
joinTime
(
new
Date
())
.
build
();
setWeUserData
(
message
,
weUser
);
weUserService
.
insertWeUser
(
weUser
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
/**
* 删除企业成员
*
* @param message
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
protected
void
delUser
(
WxCpXmlMessageVO
message
)
{
try
{
if
(
message
.
getUserId
()
!=
null
)
{
String
[]
userIdArr
=
message
.
getUserId
().
split
(
""
);
weUserService
.
deleteUser
(
userIdArr
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
/**
* 修改成员信息
*
* @param message
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
protected
void
updateUser
(
WxCpXmlMessageVO
message
)
{
try
{
WeUser
weUser
=
WeUser
.
builder
().
userId
(
message
.
getUserId
())
.
email
(
message
.
getEmail
())
.
name
(
message
.
getName
())
.
alias
(
message
.
getAlias
())
.
gender
(
message
.
getGender
())
.
address
(
message
.
getAddress
())
.
telephone
(
message
.
getTelephone
())
.
mobile
(
message
.
getMobile
())
.
avatarMediaid
(
message
.
getAvatar
())
.
position
(
message
.
getPosition
())
.
build
();
setWeUserData
(
message
,
weUser
);
weUserService
.
updateWeUser
(
weUser
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
private
void
setWeUserData
(
WxCpXmlMessageVO
message
,
WeUser
weUser
)
{
if
(
message
.
getStatus
()
!=
null
)
{
weUser
.
setIsActivate
(
Integer
.
valueOf
(
message
.
getStatus
()));
}
if
(
message
.
getIsLeaderInDept
()
!=
null
)
{
String
[]
isLeaderInDeptArr
=
Arrays
.
stream
(
message
.
getIsLeaderInDept
())
.
map
(
String:
:
valueOf
).
toArray
(
String
[]::
new
);
weUser
.
setIsLeaderInDept
(
isLeaderInDeptArr
);
}
if
(
message
.
getDepartments
()
!=
null
)
{
String
[]
departmentsArr
=
Arrays
.
stream
(
message
.
getDepartments
())
.
map
(
String:
:
valueOf
).
toArray
(
String
[]::
new
);
weUser
.
setDepartment
(
departmentsArr
);
}
weStrategyBeanFactory
.
getResource
(
changeType
,
message
);
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalChatImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeCallBackEventFactory
;
import
com.linkwechat.wecom.factory.WeStrategyBeanFactory
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @author danmo
* @description 客户群事件
* @date 2021/1/20 1:15
**/
@Service
@Slf4j
public
class
WeEventChangeExternalChatImpl
implements
WeCallBackEventFactory
{
@Autowired
private
WeStrategyBeanFactory
weStrategyBeanFactory
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
String
changeType
=
message
.
getChangeType
();
weStrategyBeanFactory
.
getResource
(
changeType
,
message
);
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalContactImpl.java
浏览文件 @
4229e8dc
...
...
@@ -16,6 +16,7 @@ import com.linkwechat.wecom.domain.dto.WeWelcomeMsg;
import
com.linkwechat.wecom.domain.dto.message.TextMessageDto
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeCallBackEventFactory
;
import
com.linkwechat.wecom.factory.WeStrategyBeanFactory
;
import
com.linkwechat.wecom.service.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -33,191 +34,11 @@ import java.util.stream.Collectors;
@Slf4j
public
class
WeEventChangeExternalContactImpl
implements
WeCallBackEventFactory
{
@Autowired
private
IWeEmpleCodeService
weEmpleCodeService
;
@Autowired
private
IWeEmpleCodeTagService
weEmpleCodeTagService
;
@Autowired
private
IWeCustomerService
weCustomerService
;
@Autowired
private
IWeFlowerCustomerRelService
weFlowerCustomerRelService
;
@Autowired
private
IWeFlowerCustomerTagRelService
weFlowerCustomerTagRelService
;
@Autowired
private
IWeMaterialService
weMaterialService
;
@Autowired
private
WeMessagePushClient
weMessagePushClient
;
@Autowired
private
IWeCorpAccountService
weCorpAccountService
;
@Autowired
private
IWeChatContactMappingService
weChatContactMappingService
;
private
WeStrategyBeanFactory
weStrategyBeanFactory
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
String
changeType
=
message
.
getChangeType
();
switch
(
changeType
)
{
case
"add_external_contact"
:
//添加企业客户事件
addExternalContact
(
message
);
break
;
case
"edit_external_contact"
:
//编辑企业客户事件
editExternalContact
(
message
);
break
;
case
"add_half_external_contact"
:
//外部联系人免验证添加成员事件
addHalfExternalContact
(
message
);
break
;
case
"del_external_contact"
:
//删除企业客户事件
delExternalContact
(
message
);
break
;
case
"del_follow_user"
:
//删除跟进成员事件
delFollowUser
(
message
);
break
;
case
"transfer_fail"
:
//客户接替失败事件
transferFail
(
message
);
break
;
case
"msg_audit_approved"
:
//客户同意进行聊天内容存档事件
msgAuditApproved
(
message
);
break
;
default
:
break
;
}
String
chatId
=
message
.
getChatId
();
if
(
StringUtils
.
isNotEmpty
(
chatId
))
{
//客户群变更事件
weChatChangeEvent
(
message
);
}
}
private
void
msgAuditApproved
(
WxCpXmlMessageVO
message
)
{
String
userId
=
message
.
getUserId
();
String
externalUserId
=
message
.
getExternalUserId
();
WeChatContactMapping
fromMapping
=
new
WeChatContactMapping
();
fromMapping
.
setFromId
(
userId
);
fromMapping
.
setReceiveId
(
externalUserId
);
fromMapping
.
setIsCustom
(
WeConstans
.
ID_TYPE_EX
);
weChatContactMappingService
.
insertWeChatContactMapping
(
fromMapping
);
WeChatContactMapping
receiveMapping
=
new
WeChatContactMapping
();
receiveMapping
.
setFromId
(
externalUserId
);
receiveMapping
.
setReceiveId
(
userId
);
receiveMapping
.
setIsCustom
(
WeConstans
.
ID_TYPE_USER
);
weChatContactMappingService
.
insertWeChatContactMapping
(
receiveMapping
);
weCustomerService
.
updateCustomerChatStatus
(
externalUserId
);
}
private
void
weChatChangeEvent
(
WxCpXmlMessageVO
message
)
{
}
private
void
transferFail
(
WxCpXmlMessageVO
message
)
{
}
private
void
delFollowUser
(
WxCpXmlMessageVO
message
)
{
Threads
.
SINGLE_THREAD_POOL
.
execute
(
new
Runnable
()
{
@Override
public
void
run
()
{
if
(
message
.
getUserId
()
!=
null
&&
message
.
getExternalUserId
()
!=
null
)
{
weFlowerCustomerRelService
.
deleteFollowUser
(
message
.
getUserId
(),
message
.
getExternalUserId
());
WeCorpAccount
validWeCorpAccount
=
weCorpAccountService
.
findValidWeCorpAccount
();
Optional
.
ofNullable
(
validWeCorpAccount
).
ifPresent
(
weCorpAccount
->
{
String
customerChurnNoticeSwitch
=
weCorpAccount
.
getCustomerChurnNoticeSwitch
();
if
(
WeConstans
.
DEL_FOLLOW_USER_SWITCH_OPEN
.
equals
(
customerChurnNoticeSwitch
)){
WeCustomer
weCustomer
=
weCustomerService
.
getById
(
message
.
getExternalUserId
());
String
content
=
"您已经被客户@"
+
weCustomer
.
getName
()+
"删除!"
;
TextMessageDto
textMessageDto
=
new
TextMessageDto
();
textMessageDto
.
setContent
(
content
);
List
<
String
>
userIdList
=
Arrays
.
stream
(
message
.
getUserId
().
split
(
","
)).
collect
(
Collectors
.
toList
());
WeMessagePushDto
weMessagePushDto
=
new
WeMessagePushDto
();
weMessagePushDto
.
setMsgtype
(
MessageType
.
TEXT
.
getMessageType
());
weMessagePushDto
.
setTouser
(
userIdList
);
weMessagePushDto
.
setText
(
textMessageDto
);
Optional
.
ofNullable
(
validWeCorpAccount
).
map
(
WeCorpAccount:
:
getAgentId
).
ifPresent
(
agentId
->
{
weMessagePushDto
.
setAgentid
(
Integer
.
valueOf
(
agentId
));
});
weMessagePushClient
.
sendMessageToUser
(
weMessagePushDto
);
}
});
}
}
});
}
private
void
delExternalContact
(
WxCpXmlMessageVO
message
)
{
if
(
message
.
getExternalUserId
()
!=
null
)
{
weCustomerService
.
deleteCustomersByEid
(
message
.
getExternalUserId
());
}
}
private
void
addHalfExternalContact
(
WxCpXmlMessageVO
message
)
{
if
(
message
.
getExternalUserId
()
!=
null
)
{
weCustomerService
.
getCustomersInfoAndSynchWeCustomer
(
message
.
getExternalUserId
());
}
}
private
void
editExternalContact
(
WxCpXmlMessageVO
message
)
{
if
(
message
.
getExternalUserId
()
!=
null
)
{
weCustomerService
.
getCustomersInfoAndSynchWeCustomer
(
message
.
getExternalUserId
());
}
}
private
void
addExternalContact
(
WxCpXmlMessageVO
message
)
{
try
{
Threads
.
SINGLE_THREAD_POOL
.
submit
(
new
Runnable
()
{
@Override
public
void
run
()
{
if
(
message
.
getExternalUserId
()
!=
null
)
{
weCustomerService
.
getCustomersInfoAndSynchWeCustomer
(
message
.
getExternalUserId
());
}
//向扫码客户发送欢迎语
if
(
message
.
getState
()
!=
null
&&
message
.
getWelcomeCode
()
!=
null
)
{
log
.
info
(
"执行发送欢迎语>>>>>>>>>>>>>>>"
);
WeWelcomeMsg
.
WeWelcomeMsgBuilder
weWelcomeMsgBuilder
=
WeWelcomeMsg
.
builder
().
welcome_code
(
message
.
getWelcomeCode
());
WeEmpleCodeDto
messageMap
=
weEmpleCodeService
.
selectWelcomeMsgByActivityScene
(
message
.
getState
(),
message
.
getUserId
());
String
empleCodeId
=
messageMap
.
getEmpleCodeId
();
//查询活码对应标签
List
<
WeEmpleCodeTag
>
tagList
=
weEmpleCodeTagService
.
list
(
new
LambdaQueryWrapper
<
WeEmpleCodeTag
>()
.
eq
(
WeEmpleCodeTag:
:
getEmpleCodeId
,
empleCodeId
));
//查询外部联系人与通讯录关系数据
WeFlowerCustomerRel
weFlowerCustomerRel
=
weFlowerCustomerRelService
.
getOne
(
new
LambdaQueryWrapper
<
WeFlowerCustomerRel
>()
.
eq
(
WeFlowerCustomerRel:
:
getUserId
,
message
.
getUserId
())
.
eq
(
WeFlowerCustomerRel:
:
getExternalUserid
,
message
.
getExternalUserId
()));
//为外部联系人添加员工活码标签
List
<
WeFlowerCustomerTagRel
>
weFlowerCustomerTagRels
=
new
ArrayList
<>();
Optional
.
ofNullable
(
weFlowerCustomerRel
).
ifPresent
(
weFlowerCustomerRel1
->
{
Optional
.
ofNullable
(
tagList
).
orElseGet
(
ArrayList:
:
new
).
forEach
(
tag
->{
weFlowerCustomerTagRels
.
add
(
WeFlowerCustomerTagRel
.
builder
()
.
flowerCustomerRelId
(
weFlowerCustomerRel
.
getId
())
.
tagId
(
tag
.
getTagId
())
.
createTime
(
new
Date
())
.
build
()
);
});
weFlowerCustomerTagRelService
.
saveOrUpdateBatch
(
weFlowerCustomerTagRels
);
});
log
.
debug
(
">>>>>>>>>欢迎语查询结果:{}"
,
JSONObject
.
toJSONString
(
messageMap
));
if
(
messageMap
!=
null
)
{
if
(
StringUtils
.
isNotEmpty
(
messageMap
.
getWelcomeMsg
())){
weWelcomeMsgBuilder
.
text
(
WeWelcomeMsg
.
Text
.
builder
()
.
content
(
messageMap
.
getWelcomeMsg
()).
build
());
}
if
(
StringUtils
.
isNotEmpty
(
messageMap
.
getCategoryId
())){
WeMediaDto
weMediaDto
=
weMaterialService
.
uploadTemporaryMaterial
(
messageMap
.
getMaterialUrl
(),
messageMap
.
getMaterialName
(),
MediaType
.
IMAGE
.
getMediaType
());
Optional
.
ofNullable
(
weMediaDto
).
ifPresent
(
media
->{
weWelcomeMsgBuilder
.
image
(
WeWelcomeMsg
.
Image
.
builder
().
media_id
(
media
.
getMedia_id
())
.
pic_url
(
media
.
getUrl
()).
build
());
});
}
weCustomerService
.
sendWelcomeMsg
(
weWelcomeMsgBuilder
.
build
());
}
}
}
});
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"执行发送欢迎语失败!"
,
e
);
}
weStrategyBeanFactory
.
getResource
(
changeType
,
message
);
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/WeEventChangeExternalTagImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeCallBackEventFactory
;
import
com.linkwechat.wecom.factory.WeStrategyBeanFactory
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @author danmo
* @description 客户标签事件
* @date 2021/1/20 1:13
**/
@Service
@Slf4j
public
class
WeEventChangeExternalTagImpl
implements
WeCallBackEventFactory
{
@Autowired
private
WeStrategyBeanFactory
weStrategyBeanFactory
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
String
changeType
=
message
.
getChangeType
()+
"CustomerTag"
;
weStrategyBeanFactory
.
getResource
(
changeType
,
message
);
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddExternalContactImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customer
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.linkwechat.common.enums.MediaType
;
import
com.linkwechat.common.utils.StringUtils
;
import
com.linkwechat.common.utils.Threads
;
import
com.linkwechat.wecom.domain.WeEmpleCodeTag
;
import
com.linkwechat.wecom.domain.WeFlowerCustomerRel
;
import
com.linkwechat.wecom.domain.WeFlowerCustomerTagRel
;
import
com.linkwechat.wecom.domain.dto.WeEmpleCodeDto
;
import
com.linkwechat.wecom.domain.dto.WeMediaDto
;
import
com.linkwechat.wecom.domain.dto.WeWelcomeMsg
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Optional
;
/**
* @author danmo
* @description 新增客户事件
* @date 2021/1/20 23:18
**/
@Slf4j
@Component
(
"add_external_contact"
)
public
class
WeCallBackAddExternalContactImpl
extends
WeEventStrategy
{
@Autowired
private
IWeCustomerService
weCustomerService
;
@Autowired
private
IWeEmpleCodeTagService
weEmpleCodeTagService
;
@Autowired
private
IWeEmpleCodeService
weEmpleCodeService
;
@Autowired
private
IWeFlowerCustomerRelService
weFlowerCustomerRelService
;
@Autowired
private
IWeFlowerCustomerTagRelService
weFlowerCustomerTagRelService
;
@Autowired
private
IWeMaterialService
weMaterialService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
if
(
message
.
getExternalUserId
()
!=
null
)
{
weCustomerService
.
getCustomersInfoAndSynchWeCustomer
(
message
.
getExternalUserId
());
}
//向扫码客户发送欢迎语
if
(
message
.
getState
()
!=
null
&&
message
.
getWelcomeCode
()
!=
null
)
{
log
.
info
(
"执行发送欢迎语>>>>>>>>>>>>>>>"
);
WeWelcomeMsg
.
WeWelcomeMsgBuilder
weWelcomeMsgBuilder
=
WeWelcomeMsg
.
builder
().
welcome_code
(
message
.
getWelcomeCode
());
WeEmpleCodeDto
messageMap
=
weEmpleCodeService
.
selectWelcomeMsgByActivityScene
(
message
.
getState
(),
message
.
getUserId
());
String
empleCodeId
=
messageMap
.
getEmpleCodeId
();
//查询活码对应标签
List
<
WeEmpleCodeTag
>
tagList
=
weEmpleCodeTagService
.
list
(
new
LambdaQueryWrapper
<
WeEmpleCodeTag
>()
.
eq
(
WeEmpleCodeTag:
:
getEmpleCodeId
,
empleCodeId
));
//查询外部联系人与通讯录关系数据
WeFlowerCustomerRel
weFlowerCustomerRel
=
weFlowerCustomerRelService
.
getOne
(
new
LambdaQueryWrapper
<
WeFlowerCustomerRel
>()
.
eq
(
WeFlowerCustomerRel:
:
getUserId
,
message
.
getUserId
())
.
eq
(
WeFlowerCustomerRel:
:
getExternalUserid
,
message
.
getExternalUserId
()));
//为外部联系人添加员工活码标签
List
<
WeFlowerCustomerTagRel
>
weFlowerCustomerTagRels
=
new
ArrayList
<>();
Optional
.
ofNullable
(
weFlowerCustomerRel
).
ifPresent
(
weFlowerCustomerRel1
->
{
Optional
.
ofNullable
(
tagList
).
orElseGet
(
ArrayList:
:
new
).
forEach
(
tag
->{
weFlowerCustomerTagRels
.
add
(
WeFlowerCustomerTagRel
.
builder
()
.
flowerCustomerRelId
(
weFlowerCustomerRel
.
getId
())
.
tagId
(
tag
.
getTagId
())
.
createTime
(
new
Date
())
.
build
()
);
});
weFlowerCustomerTagRelService
.
saveOrUpdateBatch
(
weFlowerCustomerTagRels
);
});
log
.
debug
(
">>>>>>>>>欢迎语查询结果:{}"
,
JSONObject
.
toJSONString
(
messageMap
));
if
(
messageMap
!=
null
)
{
if
(
StringUtils
.
isNotEmpty
(
messageMap
.
getWelcomeMsg
())){
weWelcomeMsgBuilder
.
text
(
WeWelcomeMsg
.
Text
.
builder
()
.
content
(
messageMap
.
getWelcomeMsg
()).
build
());
}
if
(
StringUtils
.
isNotEmpty
(
messageMap
.
getCategoryId
())){
WeMediaDto
weMediaDto
=
weMaterialService
.
uploadTemporaryMaterial
(
messageMap
.
getMaterialUrl
(),
messageMap
.
getMaterialName
(),
MediaType
.
IMAGE
.
getMediaType
());
Optional
.
ofNullable
(
weMediaDto
).
ifPresent
(
media
->{
weWelcomeMsgBuilder
.
image
(
WeWelcomeMsg
.
Image
.
builder
().
media_id
(
media
.
getMedia_id
())
.
pic_url
(
media
.
getUrl
()).
build
());
});
}
weCustomerService
.
sendWelcomeMsg
(
weWelcomeMsgBuilder
.
build
());
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"执行发送欢迎语失败!"
,
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackAddHalfExternalContactImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customer
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.linkwechat.common.enums.MediaType
;
import
com.linkwechat.common.utils.StringUtils
;
import
com.linkwechat.wecom.domain.WeEmpleCodeTag
;
import
com.linkwechat.wecom.domain.WeFlowerCustomerRel
;
import
com.linkwechat.wecom.domain.WeFlowerCustomerTagRel
;
import
com.linkwechat.wecom.domain.dto.WeEmpleCodeDto
;
import
com.linkwechat.wecom.domain.dto.WeMediaDto
;
import
com.linkwechat.wecom.domain.dto.WeWelcomeMsg
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Optional
;
/**
* @author danmo
* @description 外部联系人免验证添加成员事件
* @date 2021/1/20 23:28
**/
@Slf4j
@Component
(
"add_half_external_contact"
)
public
class
WeCallBackAddHalfExternalContactImpl
extends
WeEventStrategy
{
@Autowired
private
IWeCustomerService
weCustomerService
;
@Autowired
private
IWeEmpleCodeTagService
weEmpleCodeTagService
;
@Autowired
private
IWeEmpleCodeService
weEmpleCodeService
;
@Autowired
private
IWeFlowerCustomerRelService
weFlowerCustomerRelService
;
@Autowired
private
IWeFlowerCustomerTagRelService
weFlowerCustomerTagRelService
;
@Autowired
private
IWeMaterialService
weMaterialService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
if
(
message
.
getExternalUserId
()
!=
null
)
{
weCustomerService
.
getCustomersInfoAndSynchWeCustomer
(
message
.
getExternalUserId
());
}
//向扫码客户发送欢迎语
if
(
message
.
getState
()
!=
null
&&
message
.
getWelcomeCode
()
!=
null
)
{
log
.
info
(
"执行发送欢迎语>>>>>>>>>>>>>>>"
);
WeWelcomeMsg
.
WeWelcomeMsgBuilder
weWelcomeMsgBuilder
=
WeWelcomeMsg
.
builder
().
welcome_code
(
message
.
getWelcomeCode
());
WeEmpleCodeDto
messageMap
=
weEmpleCodeService
.
selectWelcomeMsgByActivityScene
(
message
.
getState
(),
message
.
getUserId
());
String
empleCodeId
=
messageMap
.
getEmpleCodeId
();
//查询活码对应标签
List
<
WeEmpleCodeTag
>
tagList
=
weEmpleCodeTagService
.
list
(
new
LambdaQueryWrapper
<
WeEmpleCodeTag
>()
.
eq
(
WeEmpleCodeTag:
:
getEmpleCodeId
,
empleCodeId
));
//查询外部联系人与通讯录关系数据
WeFlowerCustomerRel
weFlowerCustomerRel
=
weFlowerCustomerRelService
.
getOne
(
new
LambdaQueryWrapper
<
WeFlowerCustomerRel
>()
.
eq
(
WeFlowerCustomerRel:
:
getUserId
,
message
.
getUserId
())
.
eq
(
WeFlowerCustomerRel:
:
getExternalUserid
,
message
.
getExternalUserId
()));
//为外部联系人添加员工活码标签
List
<
WeFlowerCustomerTagRel
>
weFlowerCustomerTagRels
=
new
ArrayList
<>();
Optional
.
ofNullable
(
weFlowerCustomerRel
).
ifPresent
(
weFlowerCustomerRel1
->
{
Optional
.
ofNullable
(
tagList
).
orElseGet
(
ArrayList:
:
new
).
forEach
(
tag
->{
weFlowerCustomerTagRels
.
add
(
WeFlowerCustomerTagRel
.
builder
()
.
flowerCustomerRelId
(
weFlowerCustomerRel
.
getId
())
.
tagId
(
tag
.
getTagId
())
.
createTime
(
new
Date
())
.
build
()
);
});
weFlowerCustomerTagRelService
.
saveOrUpdateBatch
(
weFlowerCustomerTagRels
);
});
log
.
debug
(
">>>>>>>>>欢迎语查询结果:{}"
,
JSONObject
.
toJSONString
(
messageMap
));
if
(
messageMap
!=
null
)
{
if
(
StringUtils
.
isNotEmpty
(
messageMap
.
getWelcomeMsg
())){
weWelcomeMsgBuilder
.
text
(
WeWelcomeMsg
.
Text
.
builder
()
.
content
(
messageMap
.
getWelcomeMsg
()).
build
());
}
if
(
StringUtils
.
isNotEmpty
(
messageMap
.
getCategoryId
())){
WeMediaDto
weMediaDto
=
weMaterialService
.
uploadTemporaryMaterial
(
messageMap
.
getMaterialUrl
(),
messageMap
.
getMaterialName
(),
MediaType
.
IMAGE
.
getMediaType
());
Optional
.
ofNullable
(
weMediaDto
).
ifPresent
(
media
->{
weWelcomeMsgBuilder
.
image
(
WeWelcomeMsg
.
Image
.
builder
().
media_id
(
media
.
getMedia_id
())
.
pic_url
(
media
.
getUrl
()).
build
());
});
}
weCustomerService
.
sendWelcomeMsg
(
weWelcomeMsgBuilder
.
build
());
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"执行发送欢迎语失败!"
,
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackDelExternalContactImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customer
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeCustomerService
;
import
com.linkwechat.wecom.service.IWeFlowerCustomerRelService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 删除企业客户事件
* @date 2021/1/20 23:33
**/
@Slf4j
@Component
(
"del_external_contact"
)
public
class
WeCallBackDelExternalContactImpl
extends
WeEventStrategy
{
@Autowired
private
IWeCustomerService
weCustomerService
;
@Autowired
private
IWeFlowerCustomerRelService
weFlowerCustomerRelService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
if
(
message
.
getExternalUserId
()
!=
null
)
{
weCustomerService
.
deleteCustomersByEid
(
message
.
getExternalUserId
());
weFlowerCustomerRelService
.
deleteFollowUser
(
message
.
getUserId
(),
message
.
getExternalUserId
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackDelFollowUserImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customer
;
import
com.alibaba.fastjson.JSONObject
;
import
com.linkwechat.common.constant.WeConstans
;
import
com.linkwechat.common.enums.MessageType
;
import
com.linkwechat.wecom.client.WeMessagePushClient
;
import
com.linkwechat.wecom.domain.WeCorpAccount
;
import
com.linkwechat.wecom.domain.WeCustomer
;
import
com.linkwechat.wecom.domain.dto.WeMessagePushDto
;
import
com.linkwechat.wecom.domain.dto.message.TextMessageDto
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeCorpAccountService
;
import
com.linkwechat.wecom.service.IWeCustomerService
;
import
com.linkwechat.wecom.service.IWeFlowerCustomerRelService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
* @author danmo
* @description 删除跟进成员事件
* @date 2021/1/20 23:36
**/
@Slf4j
@Component
(
"del_follow_user"
)
public
class
WeCallBackDelFollowUserImpl
extends
WeEventStrategy
{
@Autowired
private
IWeCustomerService
weCustomerService
;
@Autowired
private
IWeFlowerCustomerRelService
weFlowerCustomerRelService
;
@Autowired
private
IWeCorpAccountService
weCorpAccountService
;
@Autowired
private
WeMessagePushClient
weMessagePushClient
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
if
(
message
.
getUserId
()
!=
null
&&
message
.
getExternalUserId
()
!=
null
)
{
weFlowerCustomerRelService
.
deleteFollowUser
(
message
.
getUserId
(),
message
.
getExternalUserId
());
WeCorpAccount
validWeCorpAccount
=
weCorpAccountService
.
findValidWeCorpAccount
();
Optional
.
ofNullable
(
validWeCorpAccount
).
ifPresent
(
weCorpAccount
->
{
String
customerChurnNoticeSwitch
=
weCorpAccount
.
getCustomerChurnNoticeSwitch
();
if
(
WeConstans
.
DEL_FOLLOW_USER_SWITCH_OPEN
.
equals
(
customerChurnNoticeSwitch
)){
WeCustomer
weCustomer
=
weCustomerService
.
selectWeCustomerById
(
message
.
getExternalUserId
());
String
content
=
"您已经被客户@"
+
weCustomer
.
getName
()+
"删除!"
;
TextMessageDto
textMessageDto
=
new
TextMessageDto
();
textMessageDto
.
setContent
(
content
);
WeMessagePushDto
weMessagePushDto
=
new
WeMessagePushDto
();
weMessagePushDto
.
setMsgtype
(
MessageType
.
TEXT
.
getMessageType
());
weMessagePushDto
.
setTouser
(
message
.
getUserId
());
weMessagePushDto
.
setText
(
textMessageDto
);
Optional
.
ofNullable
(
validWeCorpAccount
).
map
(
WeCorpAccount:
:
getAgentId
).
ifPresent
(
agentId
->
{
weMessagePushDto
.
setAgentid
(
Integer
.
valueOf
(
agentId
));
});
weMessagePushClient
.
sendMessageToUser
(
weMessagePushDto
);
}
});
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"del_follow_user>>>>>>>>>>>>>param:{},ex:{}"
,
JSONObject
.
toJSONString
(
message
),
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackEditExternalContactImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customer
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeCustomerService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 编辑客户事件
* @date 2021/1/20 23:25
**/
@Slf4j
@Component
(
"edit_external_contact"
)
public
class
WeCallBackEditExternalContactImpl
extends
WeEventStrategy
{
@Autowired
private
IWeCustomerService
weCustomerService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
if
(
message
.
getExternalUserId
()
!=
null
)
{
weCustomerService
.
getCustomersInfoAndSynchWeCustomer
(
message
.
getExternalUserId
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallBackMsgAuditApprovedImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customer
;
import
com.linkwechat.common.constant.WeConstans
;
import
com.linkwechat.wecom.client.WeMessagePushClient
;
import
com.linkwechat.wecom.domain.WeChatContactMapping
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 客户同意进行聊天内容存档事件回调
* @date 2021/1/21 1:24
**/
@Slf4j
@Component
(
"msg_audit_approved"
)
public
class
WeCallBackMsgAuditApprovedImpl
extends
WeEventStrategy
{
@Autowired
private
IWeCustomerService
weCustomerService
;
@Autowired
private
IWeChatContactMappingService
weChatContactMappingService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
String
userId
=
message
.
getUserId
();
String
externalUserId
=
message
.
getExternalUserId
();
WeChatContactMapping
fromMapping
=
new
WeChatContactMapping
();
fromMapping
.
setFromId
(
userId
);
fromMapping
.
setReceiveId
(
externalUserId
);
fromMapping
.
setIsCustom
(
WeConstans
.
ID_TYPE_EX
);
weChatContactMappingService
.
insertWeChatContactMapping
(
fromMapping
);
WeChatContactMapping
receiveMapping
=
new
WeChatContactMapping
();
receiveMapping
.
setFromId
(
externalUserId
);
receiveMapping
.
setReceiveId
(
userId
);
receiveMapping
.
setIsCustom
(
WeConstans
.
ID_TYPE_USER
);
weChatContactMappingService
.
insertWeChatContactMapping
(
receiveMapping
);
weCustomerService
.
updateCustomerChatStatus
(
externalUserId
);
}
}
\ No newline at end of file
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customer/WeCallbackTransferFailImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customer
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.linkwechat.common.enums.TransferFailReason
;
import
com.linkwechat.wecom.domain.WeAllocateCustomer
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeAllocateCustomerService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 客户接替失败事件
* @date 2021/1/20 23:41
**/
@Slf4j
@Component
(
"transfer_fail"
)
public
class
WeCallbackTransferFailImpl
extends
WeEventStrategy
{
@Autowired
private
IWeAllocateCustomerService
iWeAllocateCustomerService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
String
userId
=
message
.
getUserId
();
String
externalUserId
=
message
.
getExternalUserId
();
String
failReason
=
message
.
getFailReason
();
WeAllocateCustomer
weAllocateCustomer
=
WeAllocateCustomer
.
builder
().
failReason
(
TransferFailReason
.
getReason
(
failReason
))
.
status
(
TransferFailReason
.
getNum
(
failReason
)).
build
();
iWeAllocateCustomerService
.
update
(
weAllocateCustomer
,
new
LambdaQueryWrapper
<
WeAllocateCustomer
>().
eq
(
WeAllocateCustomer:
:
getTakeoverUserid
,
userId
)
.
eq
(
WeAllocateCustomer:
:
getExternalUserid
,
externalUserId
));
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackCreateGroupImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customergroup
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeGroupService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 客户群创建事件
* @date 2021/1/20 0:28
**/
@Slf4j
@Component
(
"create"
)
public
class
WeCallBackCreateGroupImpl
extends
WeEventStrategy
{
@Autowired
private
IWeGroupService
weGroupService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weGroupService
.
createWeGroup
(
message
.
getChatId
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"create>>>>>>>>>param:{},ex:{}"
,
message
.
getChatId
(),
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackDismissImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customergroup
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeGroupService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 客户群解散事件
* @date 2021/1/20 1:07
**/
@Slf4j
@Component
(
"dismiss"
)
public
class
WeCallBackDismissImpl
extends
WeEventStrategy
{
@Autowired
private
IWeGroupService
weGroupService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weGroupService
.
deleteWeGroup
(
message
.
getChatId
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"dismiss>>>>>>>>>param:{},ex:{}"
,
message
.
getChatId
(),
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/customergroup/WeCallBackUpdateGroupImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.customergroup
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeGroupService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 客户群变更事件
* @date 2021/1/20 0:39
**/
@Slf4j
@Component
(
"update"
)
public
class
WeCallBackUpdateGroupImpl
extends
WeEventStrategy
{
@Autowired
private
IWeGroupService
weGroupService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weGroupService
.
updateWeGroup
(
message
.
getChatId
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"update>>>>>>>>>param:{},ex:{}"
,
message
.
getChatId
(),
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/party/WeCallBackCreatePartyImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.party
;
import
com.linkwechat.wecom.domain.WeDepartment
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeDepartmentService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 创建部门事件
* @date 2021/1/20 22:54
**/
@Slf4j
@Component
(
"create_party"
)
public
class
WeCallBackCreatePartyImpl
extends
WeEventStrategy
{
@Autowired
private
IWeDepartmentService
weDepartmentService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weDepartmentService
.
insertWeDepartmentNoToWeCom
(
setWeDepartMent
(
message
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/party/WeCallBackDeletePartyImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.party
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeDepartmentService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 删除部门事件
* @date 2021/1/20 23:04
**/
@Slf4j
@Component
(
"delete_party"
)
public
class
WeCallBackDeletePartyImpl
extends
WeEventStrategy
{
@Autowired
private
IWeDepartmentService
weDepartmentService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weDepartmentService
.
removeById
(
message
.
getId
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/party/WeCallBackUpdatePartyImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.party
;
import
com.linkwechat.wecom.domain.WeDepartment
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeDepartmentService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 修改部门事件
* @date 2021/1/20 23:00
**/
@Slf4j
@Component
(
"update_party"
)
public
class
WeCallBackUpdatePartyImpl
extends
WeEventStrategy
{
@Autowired
private
IWeDepartmentService
weDepartmentService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weDepartmentService
.
updateById
(
setWeDepartMent
(
message
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/tag/WeCallBackCreateCustomerTagImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.tag
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeTagGroupService
;
import
com.linkwechat.wecom.service.IWeTagService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 创建标签事件
* @date 2021/1/21 1:18
**/
@Slf4j
@Component
(
"createCustomerTag"
)
public
class
WeCallBackCreateCustomerTagImpl
extends
WeEventStrategy
{
@Autowired
private
IWeTagGroupService
weTagGroupService
;
@Autowired
private
IWeTagService
weTagService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
switch
(
message
.
getTagType
()){
case
tagGroup:
weTagGroupService
.
createTagGroup
(
message
.
getId
());
break
;
case
tag:
weTagService
.
creatTag
(
message
.
getTagId
());
break
;
default
:
break
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"createCustomerTag>>>>>>>>>param:{},ex:{}"
,
message
.
getId
(),
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/tag/WeCallBackDeleteCustomerTagImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.tag
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeTagGroupService
;
import
com.linkwechat.wecom.service.IWeTagService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 企业客户标签删除事件
* @date 2021/1/21 1:18
**/
@Slf4j
@Component
(
"deleteCustomerTag"
)
public
class
WeCallBackDeleteCustomerTagImpl
extends
WeEventStrategy
{
@Autowired
private
IWeTagGroupService
weTagGroupService
;
@Autowired
private
IWeTagService
weTagService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
switch
(
message
.
getTagType
()){
case
tagGroup:
weTagGroupService
.
deleteTagGroup
(
message
.
getId
());
break
;
case
tag:
weTagService
.
deleteTag
(
message
.
getTagId
());
break
;
default
:
break
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"deleteCustomerTag>>>>>>>>>param:{},ex:{}"
,
message
.
getId
(),
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/tag/WeCallBackUpdateCustomerTagImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.tag
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeTagGroupService
;
import
com.linkwechat.wecom.service.IWeTagService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 企业客户标签变更事件
* @date 2021/1/21 1:21
**/
@Slf4j
@Component
(
"updateCustomerTag"
)
public
class
WeCallBackUpdateCustomerTagImpl
extends
WeEventStrategy
{
@Autowired
private
IWeTagGroupService
weTagGroupService
;
@Autowired
private
IWeTagService
weTagService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
switch
(
message
.
getTagType
()){
case
tagGroup:
weTagGroupService
.
updateTagGroup
(
message
.
getId
());
break
;
case
tag:
weTagService
.
updateTag
(
message
.
getTagId
());
break
;
default
:
break
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
"updateCustomerTag>>>>>>>>>param:{},ex:{}"
,
message
.
getId
(),
e
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/tag/WeCallBackUpdateUserTagImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.tag
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.linkwechat.wecom.domain.WeFlowerCustomerRel
;
import
com.linkwechat.wecom.domain.WeFlowerCustomerTagRel
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeFlowerCustomerRelService
;
import
com.linkwechat.wecom.service.IWeFlowerCustomerTagRelService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
* @author danmo
* @description 标签变更事件
* @date 2021/1/20 23:10
**/
@Slf4j
@Component
(
"update_tag"
)
public
class
WeCallBackUpdateUserTagImpl
extends
WeEventStrategy
{
@Autowired
private
IWeFlowerCustomerTagRelService
weFlowerCustomerTagRelService
;
@Autowired
private
IWeFlowerCustomerRelService
weFlowerCustomerRelService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
String
tagId
=
message
.
getTagId
();
//标签中新增的成员userid列表,用逗号分隔
List
<
String
>
addUserItemsList
=
Arrays
.
stream
(
Optional
.
ofNullable
(
message
.
getAddUserItems
())
.
orElse
(
""
).
split
(
","
)).
collect
(
Collectors
.
toList
());
//标签中删除的成员userid列表,用逗号分隔
List
<
String
>
delUserItemsList
=
Arrays
.
stream
(
Optional
.
ofNullable
(
message
.
getDelUserItems
())
.
orElse
(
""
).
split
(
","
)).
collect
(
Collectors
.
toList
());
//标签中新增的成员userid列表,建立关联
List
<
WeFlowerCustomerTagRel
>
weFlowerCustomerTagRels
=
new
ArrayList
<>();
LambdaQueryWrapper
<
WeFlowerCustomerRel
>
relLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
relLambdaQueryWrapper
.
in
(
WeFlowerCustomerRel:
:
getUserId
,
addUserItemsList
);
List
<
WeFlowerCustomerRel
>
flowerCustomerRelList
=
weFlowerCustomerRelService
.
list
(
relLambdaQueryWrapper
);
List
<
Long
>
idList
=
Optional
.
ofNullable
(
flowerCustomerRelList
).
orElseGet
(
ArrayList:
:
new
)
.
stream
().
map
(
WeFlowerCustomerRel:
:
getId
).
collect
(
Collectors
.
toList
());
idList
.
forEach
(
id
->
{
weFlowerCustomerTagRels
.
add
(
WeFlowerCustomerTagRel
.
builder
().
flowerCustomerRelId
(
id
)
.
tagId
(
tagId
)
.
build
());
});
weFlowerCustomerTagRelService
.
batchInsetWeFlowerCustomerTagRel
(
weFlowerCustomerTagRels
);
//当前标签对应成员列表
LambdaQueryWrapper
<
WeFlowerCustomerTagRel
>
tagRelLambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
tagRelLambdaQueryWrapper
.
eq
(
WeFlowerCustomerTagRel:
:
getTagId
,
tagId
);
List
<
WeFlowerCustomerTagRel
>
tagRelList
=
weFlowerCustomerTagRelService
.
list
(
tagRelLambdaQueryWrapper
);
List
<
Long
>
flowerCustomerRelIdList
=
Optional
.
ofNullable
(
tagRelList
).
orElseGet
(
ArrayList:
:
new
)
.
stream
().
map
(
WeFlowerCustomerTagRel:
:
getFlowerCustomerRelId
).
collect
(
Collectors
.
toList
());
if
(!
flowerCustomerRelIdList
.
isEmpty
())
{
LambdaQueryWrapper
<
WeFlowerCustomerRel
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
in
(
WeFlowerCustomerRel:
:
getId
,
flowerCustomerRelIdList
)
.
in
(
WeFlowerCustomerRel:
:
getUserId
,
delUserItemsList
);
List
<
WeFlowerCustomerRel
>
relList
=
weFlowerCustomerRelService
.
list
(
queryWrapper
);
List
<
Long
>
relIdList
=
Optional
.
ofNullable
(
relList
).
orElseGet
(
ArrayList:
:
new
)
.
stream
().
map
(
WeFlowerCustomerRel:
:
getId
).
collect
(
Collectors
.
toList
());
//标签中删除的成员userid列表
LambdaQueryWrapper
<
WeFlowerCustomerTagRel
>
tagRelQueryWrapper
=
new
LambdaQueryWrapper
<>();
tagRelQueryWrapper
.
in
(
WeFlowerCustomerTagRel:
:
getFlowerCustomerRelId
,
relIdList
);
weFlowerCustomerTagRelService
.
remove
(
tagRelQueryWrapper
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/user/WeCallBackCreateUserImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.user
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeUserService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 新建外部联系人事件
* @date 2021/1/20 22:19
**/
@Slf4j
@Component
(
"create_user"
)
public
class
WeCallBackCreateUserImpl
extends
WeEventStrategy
{
@Autowired
private
IWeUserService
weUserService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weUserService
.
insertWeUserNoToWeCom
(
setWeUserData
(
message
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/user/WeCallBackDeleteUserImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.user
;
import
com.linkwechat.common.utils.StringUtils
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeUserService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 删除成员事件
* @date 2021/1/20 22:44
**/
@Slf4j
@Component
(
"delete_user"
)
public
class
WeCallBackDeleteUserImpl
extends
WeEventStrategy
{
@Autowired
private
IWeUserService
weUserService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weUserService
.
deleteUserNoToWeCom
(
message
.
getUserId
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/factory/impl/user/WeCallBackUpdateUserImpl.java
0 → 100644
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.factory.impl.user
;
import
com.linkwechat.wecom.domain.WeUser
;
import
com.linkwechat.wecom.domain.vo.WxCpXmlMessageVO
;
import
com.linkwechat.wecom.factory.WeEventStrategy
;
import
com.linkwechat.wecom.service.IWeUserService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author danmo
* @description 成员更新事件
* @date 2021/1/20 22:28
**/
@Slf4j
@Component
(
"update_user"
)
public
class
WeCallBackUpdateUserImpl
extends
WeEventStrategy
{
@Autowired
private
IWeUserService
weUserService
;
@Override
public
void
eventHandle
(
WxCpXmlMessageVO
message
)
{
try
{
weUserService
.
updateWeUserNoToWeCom
(
setWeUserData
(
message
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
log
.
error
(
e
.
getMessage
());
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/interceptor/WeAccessTokenInterceptor.java
浏览文件 @
4229e8dc
...
...
@@ -62,6 +62,8 @@ public class WeAccessTokenInterceptor implements Interceptor{
token
=
iWeAccessTokenService
.
findProviderAccessToken
();
}
else
if
(
Arrays
.
asList
(
weComeConfig
.
getNeedChatTokenUrl
()).
contains
(
uri
)){
//需要会话存档token
token
=
iWeAccessTokenService
.
findChatAccessToken
();
}
else
if
(
Arrays
.
asList
(
weComeConfig
.
getNeedAgentTokenUrl
()).
contains
(
uri
)){
//需要应用token
token
=
iWeAccessTokenService
.
findAgentAccessToken
();
}
else
{
token
=
iWeAccessTokenService
.
findCommonAccessToken
();
}
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeTagMapper.java
浏览文件 @
4229e8dc
...
...
@@ -51,7 +51,7 @@ public interface WeTagMapper extends BaseMapper<WeTag>
* @param id 企业微信标签ID
* @return 结果
*/
public
int
deleteWeTagById
(
Lo
ng
id
);
public
int
deleteWeTagById
(
Stri
ng
id
);
/**
* 批量删除企业微信标签
...
...
@@ -59,7 +59,7 @@ public interface WeTagMapper extends BaseMapper<WeTag>
* @param ids 需要删除的数据ID
* @return 结果
*/
public
int
deleteWeTagByIds
(
Lo
ng
[]
ids
);
public
int
deleteWeTagByIds
(
Stri
ng
[]
ids
);
/**
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeUserMapper.java
浏览文件 @
4229e8dc
...
...
@@ -20,10 +20,10 @@ public interface WeUserMapper extends BaseMapper<WeUser>
/**
* 查询通讯录相关客户
*
* @param
i
d 通讯录相关客户ID
* @param
userI
d 通讯录相关客户ID
* @return 通讯录相关客户
*/
public
WeUser
selectWeUserById
(
Long
i
d
);
public
WeUser
selectWeUserById
(
String
userI
d
);
/**
* 查询通讯录相关客户列表
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeAccessTokenService.java
浏览文件 @
4229e8dc
...
...
@@ -18,4 +18,6 @@ public interface IWeAccessTokenService {
public
String
findChatAccessToken
();
public
void
removeToken
();
String
findAgentAccessToken
();
}
\ No newline at end of file
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeConversationArchiveService.java
浏览文件 @
4229e8dc
...
...
@@ -7,7 +7,7 @@ import com.linkwechat.common.core.domain.ConversationArchiveQuery;
import
java.util.List
;
/**
* @author
sxw
* @author
danmo
* @description 会话存档业务接口
* @date 2020/12/19 13:59
**/
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeDepartmentService.java
浏览文件 @
4229e8dc
...
...
@@ -30,6 +30,8 @@ public interface IWeDepartmentService extends IService<WeDepartment>
*/
public
void
insertWeDepartment
(
WeDepartment
weDepartment
);
public
int
insertWeDepartmentNoToWeCom
(
WeDepartment
weDepartment
);
/**
* 修改企业微信组织架构相关
*
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeGroupService.java
浏览文件 @
4229e8dc
...
...
@@ -20,4 +20,10 @@ public interface IWeGroupService extends IService<WeGroup> {
void
synchWeGroup
();
void
createWeGroup
(
String
chatId
);
void
updateWeGroup
(
String
chatId
);
void
deleteWeGroup
(
String
chatId
);
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTagGroupService.java
浏览文件 @
4229e8dc
...
...
@@ -63,4 +63,10 @@ public interface IWeTagGroupService extends IService<WeTagGroup>
* @param isSync
*/
public
void
batchSaveOrUpdateTagGroupAndTag
(
List
<
WeCropGroupTagDto
>
tagGroup
,
Boolean
isSync
);
void
createTagGroup
(
String
id
);
void
deleteTagGroup
(
String
id
);
void
updateTagGroup
(
String
id
);
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeTagService.java
浏览文件 @
4229e8dc
...
...
@@ -52,7 +52,7 @@ public interface IWeTagService extends IService<WeTag>
* @param ids 需要删除的企业微信标签ID
* @return 结果
*/
public
int
deleteWeTagByIds
(
Lo
ng
[]
ids
);
public
int
deleteWeTagByIds
(
Stri
ng
[]
ids
);
/**
* 删除企业微信标签信息
...
...
@@ -60,7 +60,7 @@ public interface IWeTagService extends IService<WeTag>
* @param id 企业微信标签ID
* @return 结果
*/
public
int
deleteWeTagById
(
Lo
ng
id
);
public
int
deleteWeTagById
(
Stri
ng
id
);
/**
...
...
@@ -70,4 +70,9 @@ public interface IWeTagService extends IService<WeTag>
*/
public
int
insertWeTagFromWeTagDto
(
WeTagDto
weTagDto
);
void
creatTag
(
String
tagId
);
void
deleteTag
(
String
tagId
);
void
updateTag
(
String
tagId
);
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeUserService.java
浏览文件 @
4229e8dc
...
...
@@ -20,10 +20,10 @@ public interface IWeUserService extends IService<WeUser>
/**
* 查询通讯录相关客户
*
* @param
i
d 通讯录相关客户ID
* @param
userI
d 通讯录相关客户ID
* @return 通讯录相关客户
*/
public
WeUser
selectWeUserById
(
Long
i
d
);
public
WeUser
selectWeUserById
(
String
userI
d
);
/**
* 查询通讯录相关客户列表
...
...
@@ -41,6 +41,13 @@ public interface IWeUserService extends IService<WeUser>
*/
public
void
insertWeUser
(
WeUser
weUser
);
/**
* 新增通讯录相关客户(不同步企微)
* @param weUser 通讯录相关客户
* @return
*/
public
int
insertWeUserNoToWeCom
(
WeUser
weUser
);
/**
* 修改通讯录相关客户
*
...
...
@@ -49,6 +56,13 @@ public interface IWeUserService extends IService<WeUser>
*/
public
void
updateWeUser
(
WeUser
weUser
);
/**
* 修改通讯录相关客户(不同步企微)
* @param weUser 通讯录相关客户
* @return
*/
public
int
updateWeUserNoToWeCom
(
WeUser
weUser
);
/**
* 启用或禁用用户
...
...
@@ -92,6 +106,13 @@ public interface IWeUserService extends IService<WeUser>
*/
void
deleteUser
(
String
[]
ids
);
/**
* 删除成员
* @param userId 成员id
* @return
*/
int
deleteUserNoToWeCom
(
String
userId
);
/**
* 获取历史分配记录的成员
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeAccessTokenServiceImpl.java
浏览文件 @
4229e8dc
...
...
@@ -106,6 +106,10 @@ public class WeAccessTokenServiceImpl implements IWeAccessTokenService {
WeAccessTokenDtoDto
weAccessTokenDtoDto
=
accessTokenClient
.
getToken
(
wxCorpAccount
.
getCorpId
(),
wxCorpAccount
.
getChatSecret
());
token
=
weAccessTokenDtoDto
.
getAccess_token
();
expires_in
=
weAccessTokenDtoDto
.
getExpires_in
();
}
else
if
(
WeConstans
.
WE_AGENT_ACCESS_TOKEN
.
equals
(
accessTokenKey
)){
WeAccessTokenDtoDto
weAccessTokenDtoDto
=
accessTokenClient
.
getToken
(
wxCorpAccount
.
getCorpId
(),
wxCorpAccount
.
getAgentSecret
());
token
=
weAccessTokenDtoDto
.
getAccess_token
();
expires_in
=
weAccessTokenDtoDto
.
getExpires_in
();
}
if
(
StringUtils
.
isNotEmpty
(
token
)){
...
...
@@ -129,5 +133,10 @@ public class WeAccessTokenServiceImpl implements IWeAccessTokenService {
redisCache
.
deleteObject
(
WeConstans
.
WE_PROVIDER_ACCESS_TOKEN
);
}
@Override
public
String
findAgentAccessToken
()
{
return
findAccessToken
(
WeConstans
.
WE_AGENT_ACCESS_TOKEN
);
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeConversationArchiveServiceImpl.java
浏览文件 @
4229e8dc
...
...
@@ -24,7 +24,7 @@ import java.util.Date;
import
java.util.List
;
/**
* @author
sxw
* @author
danmo
* @description 会话存档业务实现类
* @date 2020/12/19 14:00
**/
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java
浏览文件 @
4229e8dc
...
...
@@ -476,7 +476,7 @@ public class WeCustomerServiceImpl extends ServiceImpl<WeCustomerMapper, WeCusto
if
(
WeConstans
.
WE_SUCCESS_CODE
.
equals
(
externalUserDetail
.
getErrcode
()))
{
//客户入库
WeCustomer
weCustomer
=
new
WeCustomer
();
BeanUtils
.
copyProperties
ignoreOther
(
externalUserDetail
.
getExternal_contact
(),
weCustomer
);
BeanUtils
.
copyProperties
ASM
(
externalUserDetail
.
getExternal_contact
(),
weCustomer
);
this
.
saveOrUpdate
(
weCustomer
);
//客户与通讯录客户关系
...
...
@@ -491,10 +491,10 @@ public class WeCustomerServiceImpl extends ServiceImpl<WeCustomerMapper, WeCusto
.
id
(
weFlowerCustomerRelId
)
.
userId
(
kk
.
getUserid
())
.
description
(
kk
.
getDescription
())
.
remarkCorpName
(
kk
.
getRemark
_company
())
.
remarkMobiles
(
kk
.
getRemark
_m
obiles
())
.
operUserid
(
kk
.
get
Oper_u
serid
())
.
addWay
(
kk
.
getAdd
_w
ay
())
.
remarkCorpName
(
kk
.
getRemark
CorpName
())
.
remarkMobiles
(
kk
.
getRemark
M
obiles
())
.
operUserid
(
kk
.
get
U
serid
())
.
addWay
(
kk
.
getAdd
W
ay
())
.
state
(
kk
.
getState
())
.
status
(
"0"
)
.
externalUserid
(
weCustomer
.
getExternalUserid
())
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeDepartmentServiceImpl.java
浏览文件 @
4229e8dc
...
...
@@ -103,6 +103,15 @@ public class WeDepartmentServiceImpl extends ServiceImpl<WeDepartmentMapper,WeDe
}
@Override
public
int
insertWeDepartmentNoToWeCom
(
WeDepartment
weDepartment
)
{
WeDepartment
department
=
this
.
baseMapper
.
selectWeDepartmentById
(
weDepartment
.
getId
());
if
(
department
!=
null
){
return
0
;
}
return
this
.
baseMapper
.
insertWeDepartment
(
weDepartment
);
}
/**
* 修改企业微信组织架构相关
*
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeGroupServiceImpl.java
浏览文件 @
4229e8dc
...
...
@@ -20,8 +20,6 @@ import com.linkwechat.wecom.mapper.WeGroupMapper;
import
com.linkwechat.wecom.service.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.security.core.context.SecurityContext
;
import
org.springframework.security.core.context.SecurityContextHolder
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -65,6 +63,7 @@ public class WeGroupServiceImpl extends ServiceImpl<WeGroupMapper, WeGroup> impl
private
WeCustomerClient
weCustomerClient
;
@Override
public
List
<
WeGroup
>
selectWeGroupList
(
WeGroup
weGroup
)
{
return
this
.
baseMapper
.
selectWeGroupList
(
weGroup
);
}
...
...
@@ -208,7 +207,7 @@ public class WeGroupServiceImpl extends ServiceImpl<WeGroupMapper, WeGroup> impl
List
<
WeGroupMember
>
weGroupMemberList
=
iWeGroupMemberService
.
list
(
new
LambdaQueryWrapper
<
WeGroupMember
>().
in
(
WeGroupMember:
:
getChatId
,
weGroups
.
stream
().
map
(
WeGroup:
:
getChatId
).
collect
(
Collectors
.
toList
())));
//存量去重
if
(
CollectionUtil
.
isNotEmpty
(
weGroupMemberList
)){
if
(
CollectionUtil
.
isNotEmpty
(
weGroupMemberList
))
{
List
<
WeGroupMember
>
groupMemberList
=
weGroupMembers
.
stream
().
filter
(
e
->
{
for
(
WeGroupMember
weGroupMember
:
weGroupMemberList
)
{
if
(
e
.
getUserId
().
equals
(
weGroupMember
.
getUserId
()))
{
...
...
@@ -218,7 +217,7 @@ public class WeGroupServiceImpl extends ServiceImpl<WeGroupMapper, WeGroup> impl
return
true
;
}).
collect
(
Collectors
.
toList
());
iWeGroupMemberService
.
saveBatch
(
groupMemberList
);
}
else
{
}
else
{
iWeGroupMemberService
.
saveBatch
(
weGroupMembers
);
}
}
...
...
@@ -226,4 +225,111 @@ public class WeGroupServiceImpl extends ServiceImpl<WeGroupMapper, WeGroup> impl
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
createWeGroup
(
String
chatId
)
{
List
<
WeGroup
>
weGroups
=
new
ArrayList
<>();
List
<
WeGroupMember
>
weGroupMembers
=
new
ArrayList
<>();
CustomerGroupDetail
customerGroupDetail
=
weCustomerGroupClient
.
groupChatDetail
(
new
CustomerGroupDetail
().
new
Params
(
chatId
)
);
if
(
CollectionUtil
.
isNotEmpty
(
customerGroupDetail
.
getGroup_chat
()))
{
customerGroupDetail
.
getGroup_chat
().
stream
().
forEach
(
kk
->
{
weGroups
.
add
(
WeGroup
.
builder
()
.
chatId
(
kk
.
getChat_id
())
.
groupName
(
kk
.
getName
())
.
notice
(
kk
.
getNotice
())
.
owner
(
kk
.
getOwner
())
.
createTime
(
new
Date
(
kk
.
getCreate_time
()
*
1000L
))
.
build
()
);
List
<
CustomerGroupMember
>
memberLists
=
kk
.
getMember_list
();
if
(
CollectionUtil
.
isNotEmpty
(
memberLists
))
{
memberLists
.
stream
().
forEach
(
member
->
{
weGroupMembers
.
add
(
WeGroupMember
.
builder
()
.
chatId
(
kk
.
getChat_id
())
.
userId
(
member
.
getUserid
())
.
joinTime
(
new
Date
(
member
.
getJoin_time
()
*
1000L
))
.
joinScene
(
member
.
getJoin_scene
())
.
joinType
(
member
.
getType
())
.
unionId
(
member
.
getUnionid
())
.
build
()
);
});
}
});
this
.
saveOrUpdateBatch
(
weGroups
);
iWeGroupMemberService
.
saveBatch
(
weGroupMembers
);
}
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
updateWeGroup
(
String
chatId
)
{
List
<
WeGroup
>
weGroups
=
new
ArrayList
<>();
List
<
WeGroupMember
>
weGroupMembers
=
new
ArrayList
<>();
CustomerGroupDetail
customerGroupDetail
=
weCustomerGroupClient
.
groupChatDetail
(
new
CustomerGroupDetail
().
new
Params
(
chatId
)
);
if
(
CollectionUtil
.
isNotEmpty
(
customerGroupDetail
.
getGroup_chat
()))
{
customerGroupDetail
.
getGroup_chat
().
stream
().
forEach
(
kk
->
{
weGroups
.
add
(
WeGroup
.
builder
()
.
chatId
(
kk
.
getChat_id
())
.
groupName
(
kk
.
getName
())
.
notice
(
kk
.
getNotice
())
.
owner
(
kk
.
getOwner
())
.
createTime
(
new
Date
(
kk
.
getCreate_time
()
*
1000L
))
.
build
()
);
List
<
CustomerGroupMember
>
memberLists
=
kk
.
getMember_list
();
if
(
CollectionUtil
.
isNotEmpty
(
memberLists
))
{
memberLists
.
stream
().
forEach
(
member
->
{
weGroupMembers
.
add
(
WeGroupMember
.
builder
()
.
chatId
(
kk
.
getChat_id
())
.
userId
(
member
.
getUserid
())
.
joinTime
(
new
Date
(
member
.
getJoin_time
()
*
1000L
))
.
joinScene
(
member
.
getJoin_scene
())
.
joinType
(
member
.
getType
())
.
unionId
(
member
.
getUnionid
())
.
build
()
);
});
}
});
this
.
saveOrUpdateBatch
(
weGroups
);
//获取表中成员信息
List
<
WeGroupMember
>
weGroupMemberList
=
iWeGroupMemberService
.
list
(
new
LambdaQueryWrapper
<
WeGroupMember
>()
.
eq
(
WeGroupMember:
:
getChatId
,
chatId
));
if
(
weGroupMembers
.
size
()
>
weGroupMemberList
.
size
())
{
//成员信息取差集
List
<
WeGroupMember
>
list
=
weGroupMembers
.
stream
().
filter
(
m
->
!
weGroupMemberList
.
stream
()
.
map
(
d
->
d
.
getUserId
()).
collect
(
Collectors
.
toList
()).
contains
(
m
.
getUserId
()))
.
collect
(
Collectors
.
toList
());
iWeGroupMemberService
.
saveBatch
(
list
);
}
else
if
(
weGroupMembers
.
size
()
<
weGroupMemberList
.
size
())
{
//成员信息取差集
List
<
WeGroupMember
>
list
=
weGroupMemberList
.
stream
().
filter
(
m
->
!
weGroupMembers
.
stream
()
.
map
(
d
->
d
.
getUserId
()).
collect
(
Collectors
.
toList
()).
contains
(
m
.
getUserId
()))
.
collect
(
Collectors
.
toList
());
iWeGroupMemberService
.
remove
(
new
LambdaQueryWrapper
<
WeGroupMember
>()
.
eq
(
WeGroupMember:
:
getChatId
,
chatId
)
.
in
(
WeGroupMember:
:
getUserId
,
list
.
stream
().
map
(
WeGroupMember:
:
getUserId
)
.
collect
(
Collectors
.
toList
())));
}
}
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
deleteWeGroup
(
String
chatId
)
{
this
.
baseMapper
.
delete
(
new
LambdaQueryWrapper
<
WeGroup
>().
eq
(
WeGroup:
:
getChatId
,
chatId
));
iWeGroupMemberService
.
remove
(
new
LambdaQueryWrapper
<
WeGroupMember
>().
eq
(
WeGroupMember:
:
getChatId
,
chatId
));
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTagGroupServiceImpl.java
浏览文件 @
4229e8dc
...
...
@@ -28,13 +28,12 @@ import java.util.stream.Collectors;
/**
* 标签组Service业务层处理
*
*
* @author ruoyi
* @date 2020-09-07
*/
@Service
public
class
WeTagGroupServiceImpl
extends
ServiceImpl
<
WeTagGroupMapper
,
WeTagGroup
>
implements
IWeTagGroupService
{
public
class
WeTagGroupServiceImpl
extends
ServiceImpl
<
WeTagGroupMapper
,
WeTagGroup
>
implements
IWeTagGroupService
{
@Autowired
private
WeTagGroupMapper
weTagGroupMapper
;
...
...
@@ -46,132 +45,122 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
private
IWeTagService
iWeTagService
;
/**
* 查询标签组列表
*
*
* @param weTagGroup 标签组
* @return 标签组
*/
@Override
public
List
<
WeTagGroup
>
selectWeTagGroupList
(
WeTagGroup
weTagGroup
)
{
public
List
<
WeTagGroup
>
selectWeTagGroupList
(
WeTagGroup
weTagGroup
)
{
return
weTagGroupMapper
.
selectWeTagGroupList
(
weTagGroup
);
}
/**
* 新增标签组
*
*
* @param weTagGroup 标签组
* @return 结果
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
insertWeTagGroup
(
WeTagGroup
weTagGroup
)
{
public
void
insertWeTagGroup
(
WeTagGroup
weTagGroup
)
{
List
<
WeTag
>
weTags
=
weTagGroup
.
getWeTags
();
if
(
CollectionUtil
.
isEmpty
(
weTags
))
{
if
(
CollectionUtil
.
isEmpty
(
weTags
))
{
this
.
save
(
weTagGroup
);
}
else
{
}
else
{
WeCropGropTagDtlDto
weCropGropTagDtlDto
=
weCropTagClient
.
addCorpTag
(
WeCropGroupTagDto
.
transformAddTag
(
weTagGroup
));
if
(
weCropGropTagDtlDto
.
getErrcode
().
equals
(
WeConstans
.
WE_SUCCESS_CODE
))
{
this
.
batchSaveOrUpdateTagGroupAndTag
(
ListUtil
.
toList
(
weCropGropTagDtlDto
.
getTag_group
()),
false
);
if
(
weCropGropTagDtlDto
.
getErrcode
().
equals
(
WeConstans
.
WE_SUCCESS_CODE
))
{
this
.
batchSaveOrUpdateTagGroupAndTag
(
ListUtil
.
toList
(
weCropGropTagDtlDto
.
getTag_group
()),
false
);
}
}
}
/**
* 修改标签组
*
*
* @param weTagGroup 标签组
* @return 结果
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
updateWeTagGroup
(
WeTagGroup
weTagGroup
)
{
List
<
WeTag
>
weTags
=
weTagGroup
.
getWeTags
();
//获取新增的集合
if
(
CollectionUtil
.
isNotEmpty
(
weTags
))
{
List
<
WeTag
>
filterWeTags
=
weTags
.
stream
().
filter
(
v
->
StringUtils
.
isEmpty
(
v
.
getTagId
())).
collect
(
Collectors
.
toList
());
//同步新增标签到微信端
if
(
CollectionUtil
.
isNotEmpty
(
WeCropGroupTagDto
.
transformAddTag
(
weTagGroup
).
getTag
())){
WeCropGropTagDtlDto
weCropGropTagDtlDto
=
weCropTagClient
.
addCorpTag
(
WeCropGroupTagDto
.
transformAddTag
(
weTagGroup
));
if
(
weCropGropTagDtlDto
.
getErrcode
().
equals
(
WeConstans
.
WE_SUCCESS_CODE
)){
//微信端返回的标签主键,设置到weTags中
Map
<
String
,
String
>
weCropTagMap
=
weCropGropTagDtlDto
.
getTag_group
().
getTag
().
stream
()
.
collect
(
Collectors
.
toMap
(
weCropTagDto
->
weCropTagDto
.
getName
(),
weCropTagDto
->
weCropTagDto
.
getId
()));
filterWeTags
.
stream
().
forEach
(
tag
->{
tag
.
setTagId
(
weCropTagMap
.
get
(
tag
.
getName
()));
tag
.
setCreateTime
(
new
Date
());
});
}
}
public
void
updateWeTagGroup
(
WeTagGroup
weTagGroup
)
{
List
<
WeTag
>
weTags
=
weTagGroup
.
getWeTags
();
//获取新增的集合
if
(
CollectionUtil
.
isNotEmpty
(
weTags
))
{
List
<
WeTag
>
filterWeTags
=
weTags
.
stream
().
filter
(
v
->
StringUtils
.
isEmpty
(
v
.
getTagId
())).
collect
(
Collectors
.
toList
());
//同步新增标签到微信端
if
(
CollectionUtil
.
isNotEmpty
(
WeCropGroupTagDto
.
transformAddTag
(
weTagGroup
).
getTag
()))
{
WeCropGropTagDtlDto
weCropGropTagDtlDto
=
weCropTagClient
.
addCorpTag
(
WeCropGroupTagDto
.
transformAddTag
(
weTagGroup
));
if
(
weCropGropTagDtlDto
.
getErrcode
().
equals
(
WeConstans
.
WE_SUCCESS_CODE
))
{
//微信端返回的标签主键,设置到weTags中
Map
<
String
,
String
>
weCropTagMap
=
weCropGropTagDtlDto
.
getTag_group
().
getTag
().
stream
()
.
collect
(
Collectors
.
toMap
(
weCropTagDto
->
weCropTagDto
.
getName
(),
weCropTagDto
->
weCropTagDto
.
getId
()));
filterWeTags
.
stream
().
forEach
(
tag
->
{
tag
.
setTagId
(
weCropTagMap
.
get
(
tag
.
getName
()));
tag
.
setCreateTime
(
new
Date
());
});
}
}
//获取需要删除的数据
List
<
WeTag
>
removeWeTags
=
iWeTagService
.
list
(
new
LambdaQueryWrapper
<
WeTag
>().
notIn
(
WeTag:
:
getTagId
,
weTags
.
stream
().
map
(
WeTag:
:
getTagId
).
collect
(
Collectors
.
toList
())).
eq
(
WeTag:
:
getGroupId
,
weTagGroup
.
getGroupId
())
.
eq
(
WeTag:
:
getStatus
,
Constants
.
NORMAL_CODE
));
//获取需要删除的数据
List
<
WeTag
>
removeWeTags
=
iWeTagService
.
list
(
new
LambdaQueryWrapper
<
WeTag
>().
notIn
(
WeTag:
:
getTagId
,
weTags
.
stream
().
map
(
WeTag:
:
getTagId
).
collect
(
Collectors
.
toList
())).
eq
(
WeTag:
:
getGroupId
,
weTagGroup
.
getGroupId
())
.
eq
(
WeTag:
:
getStatus
,
Constants
.
NORMAL_CODE
));
if
(
CollectionUtil
.
isNotEmpty
(
removeWeTags
))
{
//同步删除微信端的标签
weCropTagClient
.
delCorpTag
(
WeCropDelDto
.
builder
()
.
group_id
(
ArrayUtil
.
toArray
(
ListUtil
.
toList
(
weTagGroup
.
getGroupId
()),
String
.
class
))
.
tag_id
(
ArrayUtil
.
toArray
(
removeWeTags
.
stream
().
map
(
WeTag:
:
getTagId
).
collect
(
Collectors
.
toList
()),
String
.
class
))
.
build
());
if
(
CollectionUtil
.
isNotEmpty
(
removeWeTags
))
{
//同步删除微信端的标签
weCropTagClient
.
delCorpTag
(
WeCropDelDto
.
builder
()
.
group_id
(
ArrayUtil
.
toArray
(
ListUtil
.
toList
(
weTagGroup
.
getGroupId
()),
String
.
class
))
.
tag_id
(
ArrayUtil
.
toArray
(
removeWeTags
.
stream
().
map
(
WeTag:
:
getTagId
).
collect
(
Collectors
.
toList
()),
String
.
class
))
.
build
());
//移除本地
removeWeTags
.
stream
().
forEach
(
v
->
v
.
setStatus
(
Constants
.
DELETE_CODE
));
iWeTagService
.
updateBatchById
(
removeWeTags
);
}
//移除本地
removeWeTags
.
stream
().
forEach
(
v
->
v
.
setStatus
(
Constants
.
DELETE_CODE
));
iWeTagService
.
updateBatchById
(
removeWeTags
);
}
//保存或更新wetag
filterWeTags
.
stream
().
forEach
(
v
->
v
.
setGroupId
(
weTagGroup
.
getGroupId
()));
iWeTagService
.
saveOrUpdateBatch
(
filterWeTags
);
//保存或更新wetag
filterWeTags
.
stream
().
forEach
(
v
->
v
.
setGroupId
(
weTagGroup
.
getGroupId
()));
iWeTagService
.
saveOrUpdateBatch
(
filterWeTags
);
}
}
}
/**
* 批量删除标签组
*
*
* @param ids 需要删除的标签组ID
* @return 结果
*/
@Override
@Transactional
public
int
deleteWeTagGroupByIds
(
String
[]
ids
)
{
public
int
deleteWeTagGroupByIds
(
String
[]
ids
)
{
int
returnCode
=
weTagGroupMapper
.
deleteWeTagGroupByIds
(
ids
);
if
(
returnCode
>
Constants
.
SERVICE_RETURN_SUCCESS_CODE
)
{
if
(
returnCode
>
Constants
.
SERVICE_RETURN_SUCCESS_CODE
)
{
List
<
WeTag
>
weTags
=
iWeTagService
.
list
(
new
LambdaQueryWrapper
<
WeTag
>().
in
(
WeTag:
:
getGroupId
,
ids
));
if
(
CollectionUtil
.
isNotEmpty
(
weTags
))
{
if
(
CollectionUtil
.
isNotEmpty
(
weTags
))
{
weCropTagClient
.
delCorpTag
(
WeCropDelDto
.
builder
()
.
group_id
(
ids
)
...
...
@@ -186,8 +175,6 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
}
/**
* 同步标签
*/
...
...
@@ -197,8 +184,8 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
WeCropGroupTagListDto
weCropGroupTagListDto
=
weCropTagClient
.
getAllCorpTagList
();
if
(
weCropGroupTagListDto
.
getErrcode
().
equals
(
WeConstans
.
WE_SUCCESS_CODE
))
{
this
.
batchSaveOrUpdateTagGroupAndTag
(
weCropGroupTagListDto
.
getTag_group
(),
true
);
if
(
weCropGroupTagListDto
.
getErrcode
().
equals
(
WeConstans
.
WE_SUCCESS_CODE
))
{
this
.
batchSaveOrUpdateTagGroupAndTag
(
weCropGroupTagListDto
.
getTag_group
(),
true
);
}
}
...
...
@@ -206,27 +193,28 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
/**
* 来自微信端批量保存或者更新标签组和标签
*
* @param tagGroup
* @param isSync 是否同步
* @param isSync
是否同步
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
batchSaveOrUpdateTagGroupAndTag
(
List
<
WeCropGroupTagDto
>
tagGroup
,
Boolean
isSync
)
{
public
void
batchSaveOrUpdateTagGroupAndTag
(
List
<
WeCropGroupTagDto
>
tagGroup
,
Boolean
isSync
)
{
List
<
WeTagGroup
>
weTagGroups
=
new
ArrayList
<>();
List
<
WeTagGroup
>
weTagGroups
=
new
ArrayList
<>();
if
(
CollectionUtil
.
isNotEmpty
(
tagGroup
))
{
tagGroup
.
stream
().
forEach
(
k
->
{
WeTagGroup
weTagGroup
=
new
WeTagGroup
();
if
(
CollectionUtil
.
isNotEmpty
(
tagGroup
))
{
tagGroup
.
stream
().
forEach
(
k
->
{
WeTagGroup
weTagGroup
=
new
WeTagGroup
();
weTagGroup
.
setCreateBy
(
SecurityUtils
.
getUsername
());
weTagGroup
.
setGourpName
(
k
.
getGroup_name
());
weTagGroup
.
setGroupId
(
k
.
getGroup_id
());
List
<
WeCropTagDto
>
tag
=
k
.
getTag
();
if
(
CollectionUtil
.
isNotEmpty
(
tag
))
{
List
<
WeTag
>
weTags
=
new
ArrayList
<>();
tag
.
stream
().
forEach
(
v
->
{
WeTag
weTag
=
new
WeTag
();
if
(
CollectionUtil
.
isNotEmpty
(
tag
))
{
List
<
WeTag
>
weTags
=
new
ArrayList
<>();
tag
.
stream
().
forEach
(
v
->
{
WeTag
weTag
=
new
WeTag
();
weTag
.
setTagId
(
v
.
getId
());
weTag
.
setGroupId
(
weTagGroup
.
getGroupId
());
weTag
.
setName
(
v
.
getName
());
...
...
@@ -242,14 +230,14 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
//先逻辑删除不存在得组
if
(
CollectionUtil
.
isNotEmpty
(
weTagGroups
))
{
if
(
CollectionUtil
.
isNotEmpty
(
weTagGroups
))
{
if
(
isSync
)
{
if
(
isSync
)
{
List
<
WeTagGroup
>
noExist
=
this
.
list
(
new
LambdaQueryWrapper
<
WeTagGroup
>().
notIn
(
WeTagGroup:
:
getGroupId
,
weTagGroups
.
stream
().
map
(
WeTagGroup:
:
getGroupId
).
collect
(
Collectors
.
toList
())));
//企业微信端删除得标签
if
(
CollectionUtil
.
isNotEmpty
(
noExist
))
{
noExist
.
stream
().
forEach
(
k
->
k
.
setStatus
(
Constants
.
DELETE_CODE
));
if
(
CollectionUtil
.
isNotEmpty
(
noExist
))
{
noExist
.
stream
().
forEach
(
k
->
k
.
setStatus
(
Constants
.
DELETE_CODE
));
this
.
updateBatchById
(
noExist
);
}
}
...
...
@@ -260,14 +248,14 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
List
<
WeTag
>
weTags
=
weTagGroups
.
stream
().
map
(
WeTagGroup:
:
getWeTags
).
collect
(
ArrayList:
:
new
,
ArrayList:
:
addAll
,
ArrayList:
:
addAll
);
if
(
CollectionUtil
.
isNotEmpty
(
weTags
))
{
if
(
CollectionUtil
.
isNotEmpty
(
weTags
))
{
if
(
isSync
)
{
if
(
isSync
)
{
List
<
WeTag
>
noExistWeTags
=
iWeTagService
.
list
(
new
LambdaQueryWrapper
<
WeTag
>().
notIn
(
WeTag:
:
getTagId
,
weTags
.
stream
().
map
(
WeTag:
:
getTagId
).
collect
(
Collectors
.
toList
())));
if
(
CollectionUtil
.
isNotEmpty
(
noExistWeTags
))
{
noExistWeTags
.
stream
().
forEach
(
k
->
k
.
setStatus
(
Constants
.
DELETE_CODE
));
if
(
CollectionUtil
.
isNotEmpty
(
noExistWeTags
))
{
noExistWeTags
.
stream
().
forEach
(
k
->
k
.
setStatus
(
Constants
.
DELETE_CODE
));
iWeTagService
.
updateBatchById
(
noExistWeTags
);
}
...
...
@@ -279,34 +267,108 @@ public class WeTagGroupServiceImpl extends ServiceImpl<WeTagGroupMapper,WeTagGr
}
}
else
{
//不存在删除所有标签组,以标签
}
else
{
//不存在删除所有标签组,以标签
if
(
isSync
)
{
if
(
isSync
)
{
List
<
WeTagGroup
>
weTagGroupList
=
this
.
list
(
new
LambdaQueryWrapper
<
WeTagGroup
>().
eq
(
WeTagGroup:
:
getStatus
,
Constants
.
NORMAL_CODE
));
if
(
CollectionUtil
.
isNotEmpty
(
weTagGroupList
))
{
weTagGroupList
.
stream
().
forEach
(
k
->
k
.
setStatus
(
Constants
.
DELETE_CODE
));
if
(
CollectionUtil
.
isNotEmpty
(
weTagGroupList
))
{
weTagGroupList
.
stream
().
forEach
(
k
->
k
.
setStatus
(
Constants
.
DELETE_CODE
));
this
.
updateBatchById
(
weTagGroupList
);
}
List
<
WeTag
>
weTags
=
iWeTagService
.
list
(
new
LambdaQueryWrapper
<
WeTag
>().
eq
(
WeTag:
:
getStatus
,
Constants
.
NORMAL_CODE
));
if
(
CollectionUtil
.
isNotEmpty
(
weTags
))
{
weTags
.
stream
().
forEach
(
k
->
k
.
setStatus
(
Constants
.
DELETE_CODE
));
if
(
CollectionUtil
.
isNotEmpty
(
weTags
))
{
weTags
.
stream
().
forEach
(
k
->
k
.
setStatus
(
Constants
.
DELETE_CODE
));
iWeTagService
.
updateBatchById
(
weTags
);
}
}
}
}
@Override
public
void
createTagGroup
(
String
id
)
{
List
<
String
>
list
=
new
ArrayList
<>();
list
.
add
(
id
);
WeFindCropTagParam
build
=
WeFindCropTagParam
.
builder
().
group_id
(
list
).
build
();
WeCropGroupTagListDto
weCropGroupTagListDto
=
weCropTagClient
.
getCorpTagListByTagIds
(
build
);
List
<
WeCropGroupTagDto
>
tag_group
=
weCropGroupTagListDto
.
getTag_group
();
if
(
CollectionUtil
.
isNotEmpty
(
tag_group
))
{
List
<
WeTagGroup
>
tagGroupsList
=
new
ArrayList
<>();
tag_group
.
stream
().
forEach
(
k
->
{
WeTagGroup
tagGroupInfo
=
this
.
baseMapper
.
selectOne
(
new
LambdaQueryWrapper
<
WeTagGroup
>()
.
eq
(
WeTagGroup:
:
getGroupId
,
k
.
getGroup_id
()));
if
(
tagGroupInfo
!=
null
)
{
WeTagGroup
weTagGroup
=
new
WeTagGroup
();
weTagGroup
.
setCreateBy
(
SecurityUtils
.
getUsername
());
weTagGroup
.
setGourpName
(
k
.
getGroup_name
());
weTagGroup
.
setGroupId
(
k
.
getGroup_id
());
weTagGroup
.
setStatus
(
k
.
getDeleted
()==
true
?
"0"
:
"2"
);
tagGroupsList
.
add
(
weTagGroup
);
}
List
<
WeCropTagDto
>
tag
=
k
.
getTag
();
if
(
CollectionUtil
.
isNotEmpty
(
tag
))
{
List
<
WeTag
>
weTags
=
new
ArrayList
<>();
tag
.
stream
().
forEach
(
v
->
{
WeTag
tagInfo
=
iWeTagService
.
getOne
(
new
LambdaQueryWrapper
<
WeTag
>()
.
eq
(
WeTag:
:
getGroupId
,
k
.
getGroup_id
())
.
eq
(
WeTag:
:
getTagId
,
v
.
getId
()));
if
(
tagInfo
!=
null
)
{
WeTag
weTag
=
new
WeTag
();
weTag
.
setTagId
(
v
.
getId
());
weTag
.
setGroupId
(
k
.
getGroup_id
());
weTag
.
setName
(
v
.
getName
());
weTag
.
setStatus
(
v
.
getDeleted
()==
true
?
"0"
:
"2"
);
weTags
.
add
(
weTag
);
}
});
iWeTagService
.
saveBatch
(
weTags
);
}
});
this
.
saveBatch
(
tagGroupsList
);
}
}
@Override
public
void
deleteTagGroup
(
String
id
)
{
this
.
deleteWeTagGroupByIds
(
id
.
split
(
","
));
}
@Override
public
void
updateTagGroup
(
String
id
)
{
List
<
String
>
list
=
new
ArrayList
<>();
list
.
add
(
id
);
WeFindCropTagParam
build
=
WeFindCropTagParam
.
builder
().
group_id
(
list
).
build
();
WeCropGroupTagListDto
weCropGroupTagListDto
=
weCropTagClient
.
getCorpTagListByTagIds
(
build
);
List
<
WeCropGroupTagDto
>
tag_group
=
weCropGroupTagListDto
.
getTag_group
();
if
(
CollectionUtil
.
isNotEmpty
(
tag_group
))
{
List
<
WeTagGroup
>
tagGroupsList
=
new
ArrayList
<>();
WeTagGroup
weTagGroup
=
new
WeTagGroup
();
tag_group
.
stream
().
forEach
(
k
->
{
weTagGroup
.
setCreateBy
(
SecurityUtils
.
getUsername
());
weTagGroup
.
setGourpName
(
k
.
getGroup_name
());
weTagGroup
.
setGroupId
(
k
.
getGroup_id
());
weTagGroup
.
setStatus
(
k
.
getDeleted
()==
true
?
"0"
:
"2"
);
tagGroupsList
.
add
(
weTagGroup
);
List
<
WeCropTagDto
>
tag
=
k
.
getTag
();
if
(
CollectionUtil
.
isNotEmpty
(
tag
))
{
List
<
WeTag
>
weTags
=
new
ArrayList
<>();
WeTag
weTag
=
new
WeTag
();
tag
.
stream
().
forEach
(
v
->
{
weTag
.
setTagId
(
v
.
getId
());
weTag
.
setGroupId
(
k
.
getGroup_id
());
weTag
.
setName
(
v
.
getName
());
weTag
.
setStatus
(
v
.
getDeleted
()==
true
?
"0"
:
"2"
);
weTags
.
add
(
weTag
);
});
iWeTagService
.
saveOrUpdateBatch
(
weTags
);
}
});
this
.
saveOrUpdateBatch
(
tagGroupsList
);
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeTagServiceImpl.java
浏览文件 @
4229e8dc
package
com.linkwechat.wecom.service.impl
;
import
java.util.ArrayList
;
import
java.util.List
;
import
cn.hutool.core.collection.CollectionUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.linkwechat.common.utils.DateUtils
;
import
com.linkwechat.common.utils.SecurityUtils
;
import
com.linkwechat.common.utils.StringUtils
;
import
com.linkwechat.wecom.client.WeCropTagClient
;
import
com.linkwechat.wecom.domain.WeTagGroup
;
import
com.linkwechat.wecom.domain.dto.WeTagDto
;
import
com.linkwechat.wecom.domain.dto.tag.WeCropGroupTagDto
;
import
com.linkwechat.wecom.domain.dto.tag.WeCropGroupTagListDto
;
import
com.linkwechat.wecom.domain.dto.tag.WeCropTagDto
;
import
com.linkwechat.wecom.domain.dto.tag.WeFindCropTagParam
;
import
com.linkwechat.wecom.service.IWeTagGroupService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.linkwechat.wecom.mapper.WeTagMapper
;
...
...
@@ -22,6 +34,10 @@ public class WeTagServiceImpl extends ServiceImpl<WeTagMapper,WeTag> implements
{
@Autowired
private
WeTagMapper
weTagMapper
;
@Autowired
private
WeCropTagClient
weCropTagClient
;
@Autowired
private
IWeTagGroupService
weTagGroupService
;
/**
* 查询企业微信标签
...
...
@@ -79,7 +95,7 @@ public class WeTagServiceImpl extends ServiceImpl<WeTagMapper,WeTag> implements
* @return 结果
*/
@Override
public
int
deleteWeTagByIds
(
Lo
ng
[]
ids
)
public
int
deleteWeTagByIds
(
Stri
ng
[]
ids
)
{
return
weTagMapper
.
deleteWeTagByIds
(
ids
);
}
...
...
@@ -91,7 +107,7 @@ public class WeTagServiceImpl extends ServiceImpl<WeTagMapper,WeTag> implements
* @return 结果
*/
@Override
public
int
deleteWeTagById
(
Lo
ng
id
)
public
int
deleteWeTagById
(
Stri
ng
id
)
{
return
weTagMapper
.
deleteWeTagById
(
id
);
}
...
...
@@ -115,4 +131,80 @@ public class WeTagServiceImpl extends ServiceImpl<WeTagMapper,WeTag> implements
return
0
;
}
@Override
public
void
creatTag
(
String
tagId
)
{
if
(
StringUtils
.
isNotEmpty
(
tagId
)){
WeCropGroupTagListDto
weCropGroupTagListDto
=
weCropTagClient
.
getCorpTagListByTagIds
(
WeFindCropTagParam
.
builder
().
tag_id
(
tagId
.
split
(
","
)).
build
());
List
<
WeCropGroupTagDto
>
tag_group
=
weCropGroupTagListDto
.
getTag_group
();
if
(
CollectionUtil
.
isNotEmpty
(
tag_group
))
{
List
<
WeTagGroup
>
tagGroupsList
=
new
ArrayList
<>();
tag_group
.
stream
().
forEach
(
k
->
{
WeTagGroup
tagGroupInfo
=
this
.
weTagGroupService
.
getOne
(
new
LambdaQueryWrapper
<
WeTagGroup
>()
.
eq
(
WeTagGroup:
:
getGroupId
,
k
.
getGroup_id
()));
if
(
tagGroupInfo
!=
null
)
{
WeTagGroup
weTagGroup
=
new
WeTagGroup
();
weTagGroup
.
setCreateBy
(
SecurityUtils
.
getUsername
());
weTagGroup
.
setGourpName
(
k
.
getGroup_name
());
weTagGroup
.
setGroupId
(
k
.
getGroup_id
());
tagGroupsList
.
add
(
weTagGroup
);
}
List
<
WeCropTagDto
>
tag
=
k
.
getTag
();
if
(
CollectionUtil
.
isNotEmpty
(
tag
))
{
List
<
WeTag
>
weTags
=
new
ArrayList
<>();
tag
.
stream
().
forEach
(
v
->
{
WeTag
tagInfo
=
this
.
getOne
(
new
LambdaQueryWrapper
<
WeTag
>()
.
eq
(
WeTag:
:
getGroupId
,
k
.
getGroup_id
())
.
eq
(
WeTag:
:
getTagId
,
v
.
getId
()));
if
(
tagInfo
!=
null
)
{
WeTag
weTag
=
new
WeTag
();
weTag
.
setTagId
(
v
.
getId
());
weTag
.
setGroupId
(
k
.
getGroup_id
());
weTag
.
setName
(
v
.
getName
());
weTags
.
add
(
weTag
);
}
});
this
.
saveBatch
(
weTags
);
}
});
weTagGroupService
.
saveBatch
(
tagGroupsList
);
}
}
}
@Override
public
void
deleteTag
(
String
tagId
)
{
this
.
deleteWeTagById
(
tagId
);
}
@Override
public
void
updateTag
(
String
tagId
)
{
if
(
StringUtils
.
isNotEmpty
(
tagId
)){
WeCropGroupTagListDto
weCropGroupTagListDto
=
weCropTagClient
.
getCorpTagListByTagIds
(
WeFindCropTagParam
.
builder
().
tag_id
(
tagId
.
split
(
","
)).
build
());
List
<
WeCropGroupTagDto
>
tag_group
=
weCropGroupTagListDto
.
getTag_group
();
if
(
CollectionUtil
.
isNotEmpty
(
tag_group
))
{
List
<
WeTagGroup
>
tagGroupsList
=
new
ArrayList
<>();
tag_group
.
stream
().
forEach
(
k
->
{
WeTagGroup
weTagGroup
=
new
WeTagGroup
();
weTagGroup
.
setCreateBy
(
SecurityUtils
.
getUsername
());
weTagGroup
.
setGourpName
(
k
.
getGroup_name
());
weTagGroup
.
setGroupId
(
k
.
getGroup_id
());
tagGroupsList
.
add
(
weTagGroup
);
List
<
WeCropTagDto
>
tag
=
k
.
getTag
();
if
(
CollectionUtil
.
isNotEmpty
(
tag
))
{
List
<
WeTag
>
weTags
=
new
ArrayList
<>();
tag
.
stream
().
forEach
(
v
->
{
WeTag
weTag
=
new
WeTag
();
weTag
.
setTagId
(
v
.
getId
());
weTag
.
setGroupId
(
k
.
getGroup_id
());
weTag
.
setName
(
v
.
getName
());
weTags
.
add
(
weTag
);
});
this
.
saveOrUpdateBatch
(
weTags
);
}
});
weTagGroupService
.
saveOrUpdateBatch
(
tagGroupsList
);
}
}
}
}
linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java
浏览文件 @
4229e8dc
...
...
@@ -62,13 +62,13 @@ public class WeUserServiceImpl extends ServiceImpl<WeUserMapper,WeUser> implemen
/**
* 查询通讯录相关客户
*
* @param
i
d 通讯录相关客户ID
* @param
userI
d 通讯录相关客户ID
* @return 通讯录相关客户
*/
@Override
public
WeUser
selectWeUserById
(
Long
i
d
)
public
WeUser
selectWeUserById
(
String
userI
d
)
{
return
weUserMapper
.
selectWeUserById
(
i
d
);
return
weUserMapper
.
selectWeUserById
(
userI
d
);
}
/**
...
...
@@ -103,6 +103,18 @@ public class WeUserServiceImpl extends ServiceImpl<WeUserMapper,WeUser> implemen
}
@Override
@Transactional
public
int
insertWeUserNoToWeCom
(
WeUser
weUser
)
{
WeUser
weUserInfo
=
weUserMapper
.
selectWeUserById
(
weUser
.
getUserId
());
if
(
weUserInfo
!=
null
){
return
weUserMapper
.
updateWeUser
(
weUser
);
}
return
weUserMapper
.
insertWeUser
(
weUser
);
}
/**
* 修改通讯录相关客户
*
...
...
@@ -121,6 +133,13 @@ public class WeUserServiceImpl extends ServiceImpl<WeUserMapper,WeUser> implemen
}
}
@Override
@Transactional
public
int
updateWeUserNoToWeCom
(
WeUser
weUser
)
{
return
weUserMapper
.
updateWeUser
(
weUser
);
}
...
...
@@ -231,6 +250,17 @@ public class WeUserServiceImpl extends ServiceImpl<WeUserMapper,WeUser> implemen
}
@Override
@Transactional
public
int
deleteUserNoToWeCom
(
String
userId
)
{
WeUser
weUser
=
WeUser
.
builder
()
.
userId
(
userId
)
.
isActivate
(
WeConstans
.
WE_USER_IS_LEAVE
)
.
dimissionTime
(
new
Date
())
.
build
();
return
weUserMapper
.
updateById
(
weUser
);
}
/**
* 获取历史分配记录的成员
...
...
linkwe-wecom/src/main/java/com/linkwechat/wecom/strategy/SendMessageToUserStrategy.java
浏览文件 @
4229e8dc
...
...
@@ -20,6 +20,8 @@ import java.util.ArrayList;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.Optional
;
import
java.util.stream.Collector
;
import
java.util.stream.Collectors
;
/**
* 发送应用消息
...
...
@@ -42,9 +44,18 @@ public class SendMessageToUserStrategy implements Strategy {
of
.
ifPresent
(
messageType
->
map
.
put
(
messageType
.
getMessageType
(),
jsonObject
));
//发送消息
WeMessagePushDto
weMessagePushDto
=
new
WeMessagePushDto
();
weMessagePushDto
.
setTouser
(
StringUtils
.
isNotBlank
(
weMessagePush
.
getToUser
())
?
Arrays
.
asList
(
weMessagePush
.
getToUser
().
split
(
","
))
:
new
ArrayList
<>());
weMessagePushDto
.
setToparty
(
StringUtils
.
isNotBlank
(
weMessagePush
.
getToUser
())
?
Arrays
.
asList
(
weMessagePush
.
getToParty
().
split
(
","
))
:
new
ArrayList
<>());
weMessagePushDto
.
setTotag
(
StringUtils
.
isNotBlank
(
weMessagePush
.
getToUser
())
?
Arrays
.
asList
(
weMessagePush
.
getToTag
().
split
(
","
))
:
new
ArrayList
<>());
Optional
.
ofNullable
(
weMessagePush
.
getToUser
()).
ifPresent
(
userId
->{
String
tousers
=
Arrays
.
stream
(
userId
.
split
(
","
)).
collect
(
Collectors
.
joining
(
"|"
));
weMessagePushDto
.
setTouser
(
tousers
);
});
Optional
.
ofNullable
(
weMessagePush
.
getToParty
()).
ifPresent
(
partyId
->{
String
toPartys
=
Arrays
.
stream
(
partyId
.
split
(
","
)).
collect
(
Collectors
.
joining
(
"|"
));
weMessagePushDto
.
setToparty
(
toPartys
);
});
Optional
.
ofNullable
(
weMessagePush
.
getToTag
()).
ifPresent
(
tagId
->{
String
tagIds
=
Arrays
.
stream
(
tagId
.
split
(
","
)).
collect
(
Collectors
.
joining
(
"|"
));
weMessagePushDto
.
setTotag
(
tagIds
);
});
weMessagePushDto
.
setMsgtype
(
weMessagePush
.
getMessageType
());
//这个先写在配置文件中
...
...
linkwe-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml
浏览文件 @
4229e8dc
...
...
@@ -17,6 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"updateTime"
column=
"update_time"
/>
<result
property=
"contactSecret"
column=
"contact_secret"
/>
<result
property=
"agentId"
column=
"agent_id"
/>
<result
property=
"agentSecret"
column=
"agent_secret"
/>
<result
property=
"chatSecret"
column=
"chat_secret"
/>
<result
property=
"providerSecret"
column=
"provider_secret"
/>
<result
property=
"customerChurnNoticeSwitch"
column=
"customer_churn_notice_switch"
/>
...
...
@@ -24,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql
id=
"selectWeCorpAccountVo"
>
select id,chat_secret,provider_secret,company_name, corp_id, corp_secret,agent_id
,
status, del_flag, create_by, create_time, update_by, update_time,contact_secret, customer_churn_notice_switch,wx_qr_login_redirect_uri from we_corp_account
select id,chat_secret,provider_secret,company_name, corp_id, corp_secret,agent_id
, agent_secret,
status, del_flag, create_by, create_time, update_by, update_time,contact_secret, customer_churn_notice_switch,wx_qr_login_redirect_uri from we_corp_account
</sql>
<select
id=
"selectWeCorpAccountList"
parameterType=
"WeCorpAccount"
resultMap=
"WeCorpAccountResult"
>
...
...
@@ -56,6 +57,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"updateTime != null"
>
update_time,
</if>
<if
test=
"contactSecret != null "
>
contact_secret,
</if>
<if
test=
"chatSecret != null "
>
chat_secret,
</if>
<if
test=
"agentId != null "
>
agent_id,
</if>
<if
test=
"agentSecret != null "
>
agent_secret,
</if>
<if
test=
"customerChurnNoticeSwitch != null "
>
customer_churn_notice_switch,
</if>
<if
test=
"providerSecret != null "
>
provider_secret,
</if>
<if
test=
"wxQrLoginRedirectUri != null "
>
wx_qr_login_redirect_uri,
</if>
...
...
@@ -72,6 +75,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"updateTime != null"
>
#{updateTime},
</if>
<if
test=
"contactSecret != null "
>
#{contactSecret},
</if>
<if
test=
"chatSecret != null "
>
#{chatSecret},
</if>
<if
test=
"agentId != null "
>
#{agentId},
</if>
<if
test=
"agentSecret != null "
>
#{agentSecret},
</if>
<if
test=
"customerChurnNoticeSwitch != null "
>
#{customerChurnNoticeSwitch},
</if>
<if
test=
"providerSecret != null "
>
#{providerSecret},
</if>
<if
test=
"wxQrLoginRedirectUri != null "
>
#{wxQrLoginRedirectUri},
</if>
...
...
@@ -92,6 +97,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"updateTime != null"
>
update_time = #{updateTime},
</if>
<if
test=
"contactSecret != null "
>
contact_secret = #{contactSecret},
</if>
<if
test=
"chatSecret != null "
>
chat_secret = #{chatSecret},
</if>
<if
test=
"agentId != null "
>
agent_id = #{agentId},
</if>
<if
test=
"agentSecret != null "
>
agent_secret =#{agentSecret},
</if>
<if
test=
"customerChurnNoticeSwitch != null "
>
customer_churn_notice_switch = #{customerChurnNoticeSwitch},
</if>
<if
test=
"providerSecret != null "
>
provider_secret = #{providerSecret},
</if>
...
...
linkwe-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml
浏览文件 @
4229e8dc
...
...
@@ -54,12 +54,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</update>
<delete
id=
"deleteWeTagById"
parameterType=
"
Lo
ng"
>
delete from we_tag where
id = #{id}
<delete
id=
"deleteWeTagById"
parameterType=
"
Stri
ng"
>
uddate we_tag set status=2 where tag_
id = #{id}
</delete>
<delete
id=
"deleteWeTagByIds"
parameterType=
"String"
>
delete from we_tag where id in
<delete
id=
"deleteWeTagByIds"
>
uddate we_tag set status=2 where tag_id in
<foreach
item=
"id"
collection=
"array"
open=
"("
separator=
","
close=
")"
>
#{id}
</foreach>
...
...
linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml
浏览文件 @
4229e8dc
...
...
@@ -54,19 +54,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"birthday != null "
>
and birthday = #{birthday}
</if>
</select>
<select
id=
"selectWeUserById"
parameterType=
"
Lo
ng"
resultMap=
"WeUserResult"
>
<select
id=
"selectWeUserById"
parameterType=
"
java.lang.Stri
ng"
resultMap=
"WeUserResult"
>
<include
refid=
"selectWeUserVo"
/>
where
id = #{i
d}
where
user_id = #{userI
d}
</select>
<insert
id=
"insertWeUser"
parameterType=
"WeUser"
>
insert into we_user
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"
id != null"
>
id,
</if>
<if
test=
"
userId != null"
>
user_
id,
</if>
<if
test=
"avatarMediaid != null"
>
head_image_url,
</if>
<if
test=
"name != null"
>
user_name,
</if>
<if
test=
"alias != null"
>
alias,
</if>
<if
test=
"userId != null"
>
user_id,
</if>
<if
test=
"gender != null"
>
gender,
</if>
<if
test=
"mobile != null and mobile != ''"
>
mobile,
</if>
<if
test=
"email != null"
>
email,
</if>
...
...
@@ -85,11 +84,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"isActivate != null"
>
is_activate,
</if>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"
id != null"
>
#{i
d},
</if>
<if
test=
"
userId != null"
>
#{userI
d},
</if>
<if
test=
"avatarMediaid != null"
>
#{avatarMediaid},
</if>
<if
test=
"name != null"
>
#{name},
</if>
<if
test=
"alias != null"
>
#{alias},
</if>
<if
test=
"userId != null"
>
#{userId},
</if>
<if
test=
"gender != null"
>
#{gender},
</if>
<if
test=
"mobile != null and mobile != ''"
>
#{mobile},
</if>
<if
test=
"email != null"
>
#{email},
</if>
...
...
@@ -133,7 +131,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"remark != null"
>
remark = #{remark},
</if>
<if
test=
"isActivate != null"
>
is_activate = #{isActivate},
</if>
</trim>
where id = #{id}
<where>
user_id = #{userId}
</where>
</update>
...
...
@@ -191,7 +191,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<insert
id=
"batchInsertWeUser"
>
insert into we_user (
id,
head_image_url, user_name, alias,
insert into we_user (head_image_url, user_name, alias,
user_id, gender, mobile, email, wx_account,
department, position, is_leader_in_dept,
join_time, enable, id_card,
...
...
@@ -199,7 +199,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
birthday, remark, is_activate)
values
<foreach
collection=
"weUsers"
item=
"weUser"
index=
"index"
separator=
","
>
( #{weUser.
id},#{weUser.
avatarMediaid},#{weUser.name},#{weUser.alias},
( #{weUser.avatarMediaid},#{weUser.name},#{weUser.alias},
#{weUser.userId},#{weUser.gender},#{weUser.mobile},#{weUser.email},#{weUser.wxAccount},
#{weUser.department},#{weUser.position},#{weUser.isLeaderInDept},
#{weUser.joinTime},#{weUser.enable},#{weUser.idCard},
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录